Advertisement
Guest User

Untitled

a guest
May 13th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.36 KB | None | 0 0
  1. var jQT = new $.jQTouch({
  2. icon: 'jqtouch.png',
  3. statusBar: 'black-translucent',
  4. preloadImages: [
  5. 'lib/themes/jqt/img/chevron_white.png',
  6. 'lib/themes/jqt/img/bg_row_select.gif',
  7. 'lib/themes/jqt/img/back_button_clicked.png',
  8. 'lib/themes/jqt/img/button_clicked.png'
  9. ]
  10. });
  11.  
  12. var sessionSecret;
  13. var guid;
  14. var dn;
  15. var username;
  16. var workitems=[];
  17. var requests=[];
  18. var comments=[];
  19. var currentItem;
  20. var creds;
  21. var showUserComments=true;
  22. var showSystemComments=true;
  23. var definitions=[];
  24. var currentDefinition;
  25. var categories=[];
  26.  
  27. function doLogout(){
  28. sessionSecret=null;
  29. guid=null;
  30. dn=null;
  31. username=null;
  32. workitems=[];
  33. requests=[];
  34. currentitem=null;
  35. creds=null;
  36. jQT.goBack('#login');
  37. }
  38.  
  39. function doLogin() {
  40. username=($("input[name=username]").val());
  41. password=($("input[name=password]").val());
  42. unenc=username+":"+password;
  43. creds=$.base64Encode(unenc);
  44.  
  45. data="{ 'Authorization': '"+creds+"' }";
  46.  
  47. $.ajax({
  48. type: "POST",
  49. contentType: "application/json; charset=utf-8",
  50. url: rootUrl+jsonUrl+'/AuthorizationSession',
  51. data: data,
  52. dataType: "json",
  53. success: function(msg) {
  54. sessionSecret=msg.SessionSecret;
  55. checkCreds();
  56. }
  57. });
  58. }
  59.  
  60. function initUser(cn) {
  61. doAjax('initUser', {
  62. url: rootUrl+jsonUrl+"/identities",
  63. urlparms: "filter=CN%3D'"+cn+"'",
  64. success: function(msg) {
  65. guid=msg[0].GUID;
  66. dn=msg[0].DN;
  67. updateMain();
  68. }
  69. });
  70. }
  71.  
  72. function doAction(code, value){
  73.  
  74. payload="\"AvailableActions\": [{ \"Code\": \""+code+"\", "
  75. +"\"Value\": \""+value+"\"}]";
  76.  
  77. dataitems='';
  78. comment=$('input[name=comment]').val();
  79. if(comment!=undefined) comment="";
  80. payload+= ", \"Comment\":\""+comment+"\"";
  81.  
  82. payload+=", \"DataItems\": [";
  83.  
  84.  
  85. payload+="]";
  86. payload="{"+payload+"}";
  87.  
  88. doAjax('doAction', {
  89. type: "PUT",
  90. url: rootUrl+currentItem.Link,
  91. processData: false,
  92. data: payload,
  93. success: function(msg) {
  94. updateMain();
  95. jQT.goBack();
  96. statusAndFade('WorkItem Forwarded');
  97. return;
  98. },
  99. });
  100. }
  101.  
  102. function showItem(item) {
  103.  
  104. // Do we have a custom renderer for this Item?
  105.  
  106. $('#taskDetails').empty();
  107.  
  108.  
  109. doAjax('showItem', {
  110. url: rootUrl+workitems[item].Link,
  111. success: function(msg) {
  112. currentItem=msg;
  113. renderer=null;
  114. factory=new RendererFactory();
  115. for(i=0;i<renderers.length;i++){
  116. if(currentItem.Definition.DN==renderers[i].dn) renderer=factory.getRenderer(renderers[i].renderer);
  117. }
  118.  
  119. if(renderer==null) renderer=new DefaultRenderer();
  120.  
  121. renderer.render(currentItem.ActivityId, $('#taskdetails'));
  122.  
  123. renderer.populate(currentItem);
  124. // this is to make the buttons always appear in the same order
  125. // there's only three, right? So this shouldn't take long
  126. for(actcode=0;actcode<2;actcode++) {
  127. for(i=0;i<currentItem.AvailableActions.length;i++){
  128. act=currentItem.AvailableActions[i];
  129. if(act.Code==actcode) $('#taskActions').append('<li><a href="#" onClick=\'doAction("'+act.Code+'", "'+act.Value+'")\'>'+act.Value+'</a></li>');
  130. }
  131. }
  132. getComments(currentItem.Process);
  133. }
  134. });
  135.  
  136.  
  137. jQT.goTo('#task', 'slide');
  138. }
  139.  
  140. function submitNewRequest() {
  141.  
  142. // Put items from for into DataItems
  143. dataitems=currentDefinition.DataItems;
  144.  
  145. for(i=0;i<dataitems.length; i++) {
  146.  
  147. dataitem=dataitems[i];
  148. if(dataitem.Name=='recipient') {
  149. // Do nothing? dataitem.Values=[{"Value": dn}];
  150. }
  151. else {
  152. if (!dataitem.MultiValue) {
  153. if (dataitem.Type == 'string') {
  154. alert('string '+dataitem.Name+'='+$('#newRequest_formlist #' + dataitem.Name).val());
  155. dataitem.Values = [{
  156. "Value": $('#newRequest_formlist #' + dataitem.Name).val()
  157. }];
  158. } else {
  159. alert('can\'t submit unknown dataItem type '+dataitem.Type);
  160. }
  161.  
  162. }
  163. }
  164. }
  165.  
  166. currentDefinition.Recipient=dn;
  167.  
  168. doAjax('submitNewRequest', {
  169. url: rootUrl+jsonUrl+'/wf/definitions/'+currentDefinition.GUID,
  170. type: "POST",
  171. contentType: "application/json; charset=utf-8",
  172. data: JSON.stringify(currentDefinition),
  173. processData: false,
  174. // dataType: "json",
  175. success: function(msg) {
  176. jQT.goBack('#main');
  177. statusAndFade('New Request Submitted');
  178. updateMain();
  179. }
  180. });
  181. }
  182.  
  183. function statusAndFade(msg) {
  184.  
  185. id=''+new Date().getTime();
  186.  
  187. $('.current').append("<div id='"+id+"' class='fadeout'>"+msg+"</div>");
  188. setTimeout( function() { $('#'+id).css('opacity', '0')}, 1000);
  189. }
  190.  
  191. function getComments(process) {
  192.  
  193. doAjax('getComments', {
  194. url: rootUrl+process.Link+"/comments",
  195. success: function(msg) {
  196. comments=msg;
  197. $('#commentsList').empty();
  198. if (comments!=undefined && comments!=null) {
  199. for(i=0; i<comments.length; i++) {
  200. comment=comments[i];
  201. commentContent='<li class=\"'+comment.Type+'\">'+comment.Comment+'<span class="subtext">'+comment.Identity.Value;
  202. commentDate=parseDate(comment.Created);
  203. date=' on '+commentDate.getDate()+'/'+commentDate.getMonth()+'/'+commentDate.getFullYear()+" at "+commentDate.getHours()+":"+commentDate.getMinutes();
  204. $('#commentsList').append(commentContent+date+'</span></li>');
  205. }
  206. }
  207. },
  208. error: function() {
  209. // do nothing
  210. }
  211. });
  212.  
  213. }
  214.  
  215. function makeWorkitem(idx) {
  216.  
  217. timeleft=-1;
  218. if (workitems[idx].ExpiryDate != undefined) {
  219. timeoutDate = parseDate(workitems[idx].ExpiryDate);
  220. date = new Date();
  221.  
  222. timeleft = timeoutDate.getTime() - date.getTime();
  223.  
  224. daysleft = Math.floor(timeleft / 86400000);
  225. hoursleft = Math.floor((timeleft - (86400000 * daysleft)) / 3600000);
  226. minsleft = Math.floor((timeleft - ((86400000 * daysleft) + (hoursleft * 3600000))) / 60000);
  227.  
  228. }
  229.  
  230. item = "<li class='arrow' >" /*onClick='showItem("+idx+")'*/
  231. + "<a href='#' onClick='showItem("+idx+")'>";
  232.  
  233. // add timeout if there is one
  234. if (timeleft != -1) {
  235. item += "<small>Time Left<br/>";
  236. if (daysleft > 0)
  237. item += daysleft + " days";
  238. else
  239. item += hoursleft + ":" + minsleft + " hours";
  240. item +="</small>";
  241. }
  242.  
  243. if (workitems[idx].Definition.Value!='')
  244. item += workitems[idx].Definition.Value;
  245. else
  246. item +=workitems[idx].ActivityName;
  247. item +=" <span class=\"subtext\">Initiated by: "+workitems[idx].Initiator.Value+"<br/>Recipient: "
  248. +workitems[idx].Recipient.Value+"</span>"
  249. + "</a>"
  250. + "</li>";
  251.  
  252. return item;
  253.  
  254. }
  255.  
  256. function updateMain() {
  257.  
  258. getTasks();
  259. getRequests();
  260. }
  261.  
  262. function getTasks(){
  263. doAjax('getTasks', {
  264. url: rootUrl+jsonUrl+"/wf/workitems",
  265. urlparms: "filter=addressee%3d"+dn.replace(/=/g, '%3d'),
  266. success: function(msg) {
  267. workitems=msg;
  268. if(workitems!=undefined) {
  269. $('#numTasks').text(workitems.length);
  270. $('#myTasks_taskList').empty();
  271. if (workitems.length == 0) {
  272. $('#myTasks_taskList').append('No outstanding Tasks');
  273. }
  274. else {
  275. sod=false;
  276. for (i = 0; i < workitems.length; i++) {
  277. if( (workitem[i].ActivityName).indexOf('SOD')!=-1 )
  278. sod=true;
  279. $('#myTasks_taskList').append(makeWorkitem(i));
  280. }
  281. if(sod) {
  282. alert('sod');
  283. $('#numTasks').html( '<img src="lib/Red_flag_icon.png" alt="flag"/>' + $('#numTasks').text() );
  284. }
  285. }
  286. }
  287. }
  288. });
  289. }
  290.  
  291. function getRequests() {
  292. doAjax('getRequests', {
  293. url: rootUrl+jsonUrl+"/wf/workitems",
  294. urlparms: "filter=recipient%3d"+dn.replace(/=/g, '%3d'),
  295. success: function(msg) {
  296. requests=msg;
  297. $('#numRequests').text(requests.length);
  298. }
  299. });
  300. }
  301.  
  302. function checkCreds() {
  303.  
  304. doAjax('checkCreds', {
  305. url: rootUrl+jsonUrl+'/wf/definitions',
  306. success: function(msg) {
  307. initUser(username);
  308. definitions=msg;
  309. setCategories();
  310. jQT.goTo('#main', 'slide');
  311. },
  312. error: function (xhr, textStatus, errorThrown) {
  313. alert(xhr.status+' '+textStatus);
  314. }
  315. });
  316. }
  317.  
  318. function setCategories() {
  319. categories=['All'];
  320. for(i=0;i<definitions.length;i++){
  321. // get category
  322. category=definitions[i].Category;
  323. found=false;
  324. for(j=0;j<categories.length;j++){
  325. if(categories[j]==category) {
  326. found=true;
  327. break;
  328. }
  329. }
  330. if(!found) {
  331. categories[categories.length]=category;
  332. }
  333. }
  334. $('#newRequest_categorylist').empty();
  335. for(i=0;i<categories.length;i++){
  336. $('#newRequest_categorylist').append('<li class="arrow"><a href="#" onclick="javascript:selectCategory('+i+');">'
  337. +categories[i]+'</a></li>');
  338. }
  339. }
  340.  
  341. function selectCategory(x) {
  342.  
  343. $('#newRequest_prdlist').empty();
  344. for(i=0;i<definitions.length; i++) {
  345. if(x==0 || definitions[i].Category==categories[x]) {
  346. $('#newRequest_prdlist').append('<li class="arrow"><a href="#" onclick="javascript:selectPRD('+i+')">'
  347. +definitions[i].Description+'</a></li>');
  348. }
  349. }
  350. jQT.goTo('#newRequest_prds', 'slide');
  351.  
  352. }
  353.  
  354. function selectPRD(prd) {
  355.  
  356. //TODO: Do this better
  357. //Need to find some way of finding out what's on the 'Start' form
  358. definitionID=definitions[prd].GUID;
  359.  
  360. doAjax('selectPRD', {
  361. url: rootUrl+jsonUrl+'/wf/definitions/'+definitionID,
  362. success: function(msg) {
  363. currentDefinition=msg;
  364. prepForm(msg);
  365. },
  366. });
  367.  
  368. jQT.goTo('#newRequest_form', 'slide');
  369. }
  370.  
  371. function prepForm(definition) {
  372.  
  373. $('#newRequest_formlist').empty();
  374.  
  375. for(i=0;i<definition.DataItems.length;i++) {
  376. item=definition.DataItems[i];
  377. if(item.Name!='recipient') {
  378.  
  379. if(item.Type=='string') {
  380. addStringItem(item.Name, item.MultiValued);
  381. }
  382. else
  383. {
  384. addUnknownItem(item.Name, item.type);
  385. }
  386. }
  387. }
  388. }
  389.  
  390. function addStringItem(name, mv) {
  391.  
  392. if(mv) {
  393. addUnknownItem(name, 'MultiValued String');
  394. return;
  395. }
  396. $('#newRequest_formlist').append('<li><input type="string" name="'+name+'" id="'+name+'" placeholder="'+name+'"/></li>');
  397.  
  398. }
  399.  
  400. function addUnknownItem(name, type) {
  401. $('#newRequest_formlist').append('<li>Unknown type \''+type+'\' for '+name+'</li>');
  402. }
  403.  
  404. function parseDate(sDate) {
  405.  
  406. year=sDate.substr(0,4);
  407. month=sDate.substr(4,2);
  408. day=sDate.substr(6,2);
  409. hour=sDate.substr(8,2);
  410. minute=sDate.substr(10,2);
  411.  
  412. date=new Date();
  413.  
  414. date.setYear(Number(year));
  415. date.setMonth(Number(month));
  416. date.setDate(Number(day));
  417. date.setHours(Number(hour));
  418. date.setMinutes(Number(minute));
  419.  
  420. return date;
  421. }
  422.  
  423. function userCommentsClick(){
  424.  
  425. showUserComments=$('#userComments').attr('checked');
  426. showHideComments('User', showUserComments);
  427. }
  428.  
  429. function systemCommentsClick() {
  430.  
  431. showSystemComments=$('#systemComments').attr('checked');
  432. showHideComments('System', showSystemComments);
  433. }
  434.  
  435. function showHideComments(type, show){
  436. if(show) {
  437. $('#commentsList li.'+type).removeClass('hiddenComment');
  438. } else {
  439. $('#commentsList li.'+type).addClass('hiddenComment');
  440. }
  441. }
  442.  
  443. function doAjax( caller, parameters ) {
  444.  
  445. ajax={
  446. type: "GET",
  447. contentType: "application/json; charset=utf-8",
  448. dataType: "json",
  449. beforeSend: function(xhr) {
  450. xhr.setRequestHeader("RESTSessionSecret", sessionSecret);
  451. },
  452. success: function(msg) {
  453. alert(caller+': success');
  454. },
  455. error: function (xhr, textStatus, errorThrown) {
  456. if(xhr.status==204) {
  457. ajax.success({});
  458. return;
  459. }
  460. alert(caller+' failed at '+ajax.url+' ('+errorThrown+') '+textStatus);
  461. alert(xhr.responseText);
  462. },
  463. complete: function() {
  464. $('.progress').remove();
  465. }
  466. };
  467. if(parameters!=undefined) $.extend( ajax, parameters);
  468. if( ajax.debug || (ajax.debug==undefined&&debug) ) ajax.url+=";debug";
  469. if(ajax.urlparms) ajax.url+="?"+ajax.urlparms;
  470. $('.current').append("<div class=\"progress\">Loading...</div>");
  471. $.ajax(ajax);
  472.  
  473. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement