Attachment.js 58 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276
  1. MWF.xDesktop.requireApp("process.Xform", "$Module", null, false);
  2. MWF.require("MWF.widget.AttachmentController", null, false);
  3. MWF.xApplication.process.Xform.AttachmentController = new Class({
  4. Extends: MWF.widget.ATTER,
  5. "options": {
  6. "officeFiles": ["doc","docx","dotx","dot","xls","xlsx","xlsm","xlt","xltx","pptx","ppt","pot","potx","potm","pdf"],
  7. "checkTextEnable" : true
  8. },
  9. checkAttachmentDeleteAction : function(){
  10. if (this.options.readonly){
  11. this.setAttachmentsAction("delete", false );
  12. return false;
  13. }
  14. if (this.options.isDeleteOption!=="n"){
  15. if (this.attachments.length){
  16. var user = layout.session.user.distinguishedName;
  17. for (var i=0; i<this.attachments.length; i++){
  18. var flag = true;
  19. var att = this.attachments[i];
  20. if( !att.data.person && att.data.creatorUid )att.data.person = att.data.creatorUid;
  21. if (this.options.isDeleteOption==="o"){
  22. if (!att.data.control.allowEdit && att.data.person!==user)flag = false;
  23. if (att.data.person!==layout.desktop.session.user.distinguishedName)flag = false;
  24. }else if (this.options.isDeleteOption==="a"){
  25. if (!att.data.control.allowEdit && att.data.person!==user)flag = false;
  26. if (att.data.activity!==this.module.form.businessData.activity.id)flag = false;
  27. }else if (this.options.isDeleteOption==="ao"){
  28. if (!att.data.control.allowEdit && att.data.person!==user)flag = false;
  29. if ((att.data.activity!==this.module.form.businessData.activity.id) || (att.data.person!==layout.desktop.session.user.distinguishedName))flag = false;
  30. }else{
  31. if (!att.data.control.allowEdit && att.data.person!==user)flag = false;
  32. }
  33. if (flag){
  34. this.setAttachmentAction(att, "delete", true );
  35. }else{
  36. this.setAttachmentAction(att, "delete", false );
  37. }
  38. }
  39. }
  40. }else{
  41. this.setAttachmentsAction("delete", false );
  42. }
  43. },
  44. checkDeleteAction: function(){
  45. this.checkAttachmentDeleteAction();
  46. if (this.options.readonly){
  47. this.setActionDisabled(this.deleteAction);
  48. this.setActionDisabled(this.min_deleteAction);
  49. return false;
  50. }
  51. if (this.options.isDeleteOption!=="n"){
  52. if (this.selectedAttachments.length){
  53. var user = layout.session.user.distinguishedName;
  54. var flag = true;
  55. if (this.options.isDeleteOption==="o"){
  56. for (var i=0; i<this.selectedAttachments.length; i++){
  57. var att = this.selectedAttachments[i];
  58. if( !att.data.person && att.data.creatorUid )att.data.person = att.data.creatorUid;
  59. if (!att.data.control.allowEdit && att.data.person!==user){
  60. flag = false;
  61. break;
  62. }
  63. if (att.data.person!==layout.desktop.session.user.distinguishedName){
  64. flag = false;
  65. break;
  66. }
  67. }
  68. }else if (this.options.isDeleteOption==="a"){
  69. for (var i=0; i<this.selectedAttachments.length; i++){
  70. var att = this.selectedAttachments[i];
  71. if( !att.data.person && att.data.creatorUid )att.data.person = att.data.creatorUid;
  72. if (!att.data.control.allowEdit && att.data.person!==user){
  73. flag = false;
  74. break;
  75. }
  76. if (att.data.activity!==this.module.form.businessData.activity.id){
  77. flag = false;
  78. break;
  79. }
  80. }
  81. }else if (this.options.isDeleteOption==="ao"){
  82. for (var i=0; i<this.selectedAttachments.length; i++){
  83. var att = this.selectedAttachments[i];
  84. if( !att.data.person && att.data.creatorUid )att.data.person = att.data.creatorUid;
  85. if (!att.data.control.allowEdit && att.data.person!==user){
  86. flag = false;
  87. break;
  88. }
  89. if ((att.data.activity!==this.module.form.businessData.activity.id) || (att.data.person!==layout.desktop.session.user.distinguishedName)){
  90. flag = false;
  91. break;
  92. }
  93. }
  94. }else{
  95. for (var i=0; i<this.selectedAttachments.length; i++){
  96. var att = this.selectedAttachments[i];
  97. if( !att.data.person && att.data.creatorUid )att.data.person = att.data.creatorUid;
  98. if (!att.data.control.allowEdit && att.data.person!==user){
  99. flag = false;
  100. break;
  101. }
  102. }
  103. }
  104. if (flag){
  105. this.setActionEnabled(this.deleteAction);
  106. this.setActionEnabled(this.min_deleteAction);
  107. }else{
  108. this.setActionDisabled(this.deleteAction);
  109. this.setActionDisabled(this.min_deleteAction);
  110. }
  111. }else{
  112. this.setActionDisabled(this.deleteAction);
  113. this.setActionDisabled(this.min_deleteAction);
  114. }
  115. }else{
  116. // if (!this.options.isDelete){
  117. this.setActionDisabled(this.deleteAction);
  118. this.setActionDisabled(this.min_deleteAction);
  119. // }else{
  120. // if (this.selectedAttachments.length){
  121. // this.setActionEnabled(this.deleteAction);
  122. // this.setActionEnabled(this.min_deleteAction);
  123. // }else{
  124. // this.setActionDisabled(this.deleteAction);
  125. // this.setActionDisabled(this.min_deleteAction);
  126. // }
  127. // }
  128. }
  129. },
  130. isAttDeleteAvailable : function( att ){
  131. if (this.options.readonly)return false;
  132. if( this.options.toolbarGroupHidden.contains("edit") )return false;
  133. if (this.options.isDeleteOption==="n")return false;
  134. var user = layout.session.user.distinguishedName;
  135. var flag = true;
  136. if( !att.data.person && att.data.creatorUid )att.data.person = att.data.creatorUid;
  137. if (this.options.isDeleteOption==="o"){
  138. if (!att.data.control.allowEdit && att.data.person!==user)flag = false;
  139. if (att.data.person!==layout.desktop.session.user.distinguishedName)flag = false;
  140. }else if (this.options.isDeleteOption==="a"){
  141. if (!att.data.control.allowEdit && att.data.person!==user)flag = false;
  142. if (att.data.activity!==this.module.form.businessData.activity.id)flag = false;
  143. }else if (this.options.isDeleteOption==="ao"){
  144. if (!att.data.control.allowEdit && att.data.person!==user)flag = false;
  145. if ((att.data.activity!==this.module.form.businessData.activity.id) || (att.data.person!==layout.desktop.session.user.distinguishedName))flag = false;
  146. }else{
  147. if (!att.data.control.allowEdit && att.data.person!==user)flag = false;
  148. }
  149. return flag;
  150. },
  151. openInOfficeControl: function(att, office){
  152. if (office){
  153. if (!office.openedAttachment || office.openedAttachment.id!==att.id){
  154. office.save();
  155. if (this.module.form.businessData.workCompleted){
  156. MWF.Actions.get("x_processplatform_assemble_surface").getAttachmentWorkcompletedUrl(att.id, this.module.form.businessData.workCompleted.id, function(url){
  157. office.openedAttachment = {"id": att.id, "site": this.module.json.name, "name": att.name};
  158. office.officeOCX.BeginOpenFromURL(url, true, this.readonly);
  159. }.bind(this));
  160. }else{
  161. MWF.Actions.get("x_processplatform_assemble_surface").getAttachmentUrl(att.id, this.module.form.businessData.work.id, function(url){
  162. office.openedAttachment = {"id": att.id, "site": this.module.json.name, "name": att.name};
  163. office.officeOCX.BeginOpenFromURL(url, true, this.readonly);
  164. }.bind(this));
  165. }
  166. }
  167. }
  168. },
  169. checkReplaceAction: function(){
  170. if (this.options.readonly){
  171. this.setActionDisabled(this.replaceAction);
  172. this.setActionDisabled(this.min_replaceAction);
  173. return false;
  174. }
  175. if (this.options.isReplaceOption!=="n") {
  176. if (this.selectedAttachments.length && this.selectedAttachments.length===1){
  177. var att = this.selectedAttachments[0];
  178. if( !att.data.person && att.data.creatorUid )att.data.person = att.data.creatorUid;
  179. var user = layout.session.user.distinguishedName;
  180. var flag = true;
  181. if (this.options.isReplaceOption==="o"){
  182. flag = att.data.person === layout.desktop.session.user.distinguishedName;
  183. }
  184. if (this.options.isReplaceOption==="a"){
  185. flag = att.data.activity===this.module.form.businessData.activity.id;
  186. }
  187. if (this.options.isReplaceOption==="ao"){
  188. flag = (att.data.person === layout.desktop.session.user.distinguishedName && att.data.activity===this.module.form.businessData.activity.id);
  189. }
  190. if ( flag && !att.data.control.allowEdit && att.data.person!==user){
  191. flag = false;
  192. }
  193. if (flag) {
  194. this.setActionEnabled(this.replaceAction);
  195. this.setActionEnabled(this.min_replaceAction);
  196. }else{
  197. this.setActionDisabled(this.replaceAction);
  198. this.setActionDisabled(this.min_replaceAction);
  199. }
  200. } else {
  201. this.setActionDisabled(this.replaceAction);
  202. this.setActionDisabled(this.min_replaceAction);
  203. }
  204. }else{
  205. // if (!this.options.isReplace){
  206. this.setActionDisabled(this.replaceAction);
  207. this.setActionDisabled(this.min_replaceAction);
  208. // }else{
  209. // if (this.selectedAttachments.length && this.selectedAttachments.length===1){
  210. // this.setActionEnabled(this.replaceAction);
  211. // this.setActionEnabled(this.min_replaceAction);
  212. // }else{
  213. // this.setActionDisabled(this.replaceAction);
  214. // this.setActionDisabled(this.min_replaceAction);
  215. // }
  216. // }
  217. }
  218. },
  219. replaceAttachment: function(e, node){
  220. var att = this.selectedAttachments[0].data;
  221. if (this.module.json.isOpenInOffice && this.module.json.officeControlName && (this.options.officeFiles.indexOf(att.extension)!==-1)){
  222. var office = this.module.form.all[this.module.json.officeControlName];
  223. if (office){
  224. if (this.min_closeOfficeAction) this.setActionEnabled(this.min_closeOfficeAction);
  225. if (this.closeOfficeAction) this.setActionEnabled(this.closeOfficeAction);
  226. this.openInOfficeControl(att, office);
  227. }else{
  228. if (this.selectedAttachments.length && this.selectedAttachments.length==1){
  229. if (this.module) this.module.replaceAttachment(e, node, this.selectedAttachments[0]);
  230. }
  231. }
  232. }else{
  233. if (this.selectedAttachments.length && this.selectedAttachments.length==1){
  234. if (this.module) this.module.replaceAttachment(e, node, this.selectedAttachments[0]);
  235. }
  236. }
  237. },
  238. isAttReplaceAvailable : function( att ){
  239. if (this.options.readonly)return false;
  240. if( this.options.toolbarGroupHidden.contains("edit") )return false;
  241. if (this.options.isReplaceOption ==="n") return false;
  242. var user = layout.session.user.distinguishedName;
  243. var flag = true;
  244. if( !att.data.person && att.data.creatorUid )att.data.person = att.data.creatorUid;
  245. if (this.options.isReplaceOption==="o"){
  246. flag = att.data.person === layout.desktop.session.user.distinguishedName;
  247. }
  248. if (this.options.isReplaceOption==="a"){
  249. flag = att.data.activity===this.module.form.businessData.activity.id;
  250. }
  251. if (this.options.isReplaceOption==="ao"){
  252. flag = (att.data.person === layout.desktop.session.user.distinguishedName && att.data.activity===this.module.form.businessData.activity.id);
  253. }
  254. if (flag && !att.data.control.allowEdit && att.data.person!==user){
  255. flag = false;
  256. }
  257. return flag;
  258. },
  259. createTopNode: function(){
  260. if (this.options.title){
  261. if (!this.titleNode) this.titleNode = new Element("div", {"styles": this.css.titleNode, "text": this.options.title}).inject(this.node);
  262. }
  263. if( !this.topNode ){
  264. this.topNode = new Element("div", {"styles": this.css.topNode}).inject(this.node);
  265. }else{
  266. this.topNode.empty();
  267. this.editActionBoxNode = null;
  268. this.editActionsGroupNode=null;
  269. this.topNode.setStyle("display","");
  270. if( this.isHiddenTop ){
  271. //this.container.setStyle("height", this.container.getSize().y + 45 );
  272. //this.node.setStyle("height", this.node.getSize().y + 45 );
  273. if( this.oldContentScrollNodeHeight && this.contentScrollNode ){
  274. this.contentScrollNode.setStyle("min-height",this.oldContentScrollNodeHeight);
  275. this.oldContentScrollNodeHeight = null;
  276. }
  277. this.isHiddenTop = false;
  278. }
  279. }
  280. var hiddenGroup = this.options.toolbarGroupHidden;
  281. if( hiddenGroup.contains("edit") && hiddenGroup.contains("read") && hiddenGroup.contains("list") &&
  282. hiddenGroup.contains("view") && hiddenGroup.contains("config") &&
  283. !(this.module.json.isOpenInOffice && this.module.json.officeControlName)
  284. ){
  285. if( this.contentScrollNode ){
  286. this.oldContentScrollNodeHeight = this.contentScrollNode.getStyle("min-height");
  287. this.contentScrollNode.setStyle("min-height",this.node.getStyle("min-height"));
  288. this.topNode.setStyle("display","none");
  289. }
  290. this.isHiddenTop = true;
  291. }
  292. if( !hiddenGroup.contains("edit") )this.createEditGroupActions();
  293. if( !hiddenGroup.contains("read") )this.createReadGroupActions();
  294. if( !hiddenGroup.contains("list") )this.createListGroupActions();
  295. if (this.module.json.isOpenInOffice && this.module.json.officeControlName) this.createOfficeGroupActions();
  296. if( !hiddenGroup.contains("config") )this.createConfigGroupActions();
  297. if( !hiddenGroup.contains("view") )this.createViewGroupActions();
  298. this.checkActions();
  299. },
  300. checkActions: function(){
  301. // if (this.options.readonly){
  302. // this.setReadonly();
  303. // }else{
  304. this.checkUploadAction();
  305. this.checkDeleteAction();
  306. this.checkReplaceAction();
  307. //this.checkOfficeAction();
  308. this.checkDownloadAction();
  309. this.checkSizeAction();
  310. this.checkConfigAction();
  311. this.checkListStyleAction();
  312. // }
  313. },
  314. checkAttachmentConfigAction : function(){
  315. if (this.options.readonly){
  316. this.setAttachmentsAction("config", false );
  317. return false;
  318. }
  319. if (this.attachments.length){
  320. var user = layout.session.user.distinguishedName;
  321. for (var i=0; i<this.attachments.length; i++){
  322. var flag = true;
  323. var att = this.attachments[i];
  324. if( !att.data.person && att.data.creatorUid )att.data.person = att.data.creatorUid;
  325. if ((!att.data.control.allowControl || !att.data.control.allowEdit) && att.data.person!==user){
  326. flag = false;
  327. }
  328. if (flag){
  329. this.setAttachmentAction(att, "config", true );
  330. }else{
  331. this.setAttachmentAction(att, "config", false );
  332. }
  333. }
  334. }
  335. },
  336. checkConfigAction: function(){
  337. this.checkAttachmentConfigAction();
  338. if (this.options.readonly){
  339. this.setActionDisabled(this.configAction);
  340. if(this.checkTextAction)this.setActionDisabled(this.checkTextAction);
  341. return false;
  342. }
  343. if (this.selectedAttachments.length){
  344. var flag = true;
  345. var user = layout.session.user.distinguishedName;
  346. for (var i=0; i<this.selectedAttachments.length; i++){
  347. var att = this.selectedAttachments[i];
  348. if( !att.data.person && att.data.creatorUid )att.data.person = att.data.creatorUid;
  349. if ((!att.data.control.allowControl ) && att.data.person!==user){ //|| !att.data.control.allowEdit
  350. flag = false;
  351. break;
  352. }
  353. }
  354. if (flag){
  355. this.setActionEnabled(this.configAction);
  356. }else{
  357. this.setActionDisabled(this.configAction);
  358. }
  359. //this.setActionEnabled(this.min_deleteAction);
  360. }else{
  361. this.setActionDisabled(this.configAction);
  362. //this.setActionDisabled(this.min_deleteAction);
  363. }
  364. if(this.checkTextAction){
  365. this.setActionDisabled(this.checkTextAction);
  366. if (this.selectedAttachments.length && this.selectedAttachments.length===1){
  367. var att = this.selectedAttachments[0];
  368. if (this.options.images.indexOf(att.data.extension.toLowerCase())!==-1){
  369. this.setActionEnabled(this.checkTextAction);
  370. }
  371. }
  372. }
  373. },
  374. isAttConfigAvailable : function( att ) {
  375. if (this.options.readonly)return false;
  376. if (this.options.toolbarGroupHidden.contains("config"))return false;
  377. var user = layout.session.user.distinguishedName;
  378. var flag = true;
  379. if( !att.data.person && att.data.creatorUid )att.data.person = att.data.creatorUid;
  380. if ((!att.data.control.allowControl || !att.data.control.allowEdit) && att.data.person!==user){
  381. flag = false;
  382. }
  383. return flag;
  384. },
  385. createConfigGroupActions: function(){
  386. this.configActionBoxNode = new Element("div", {"styles": this.css.actionsBoxNode}).inject(this.topNode);
  387. this.configActionsGroupNode = new Element("div", {"styles": this.css.actionsGroupNode}).inject(this.configActionBoxNode);
  388. this.configAction = this.createAction(this.configActionsGroupNode, "config", MWF.LP.widget.configAttachment, function(e, node){
  389. this.configAttachment(e, node);
  390. }.bind(this));
  391. if( this.options.checkTextEnable ){
  392. this.createSeparate(this.configActionsGroupNode);
  393. this.checkTextAction = this.createAction(this.configActionsGroupNode, "check", MWF.LP.widget.checkOcrText, function(e, node){
  394. this.checkImageTex(e, node);
  395. }.bind(this));
  396. }
  397. if (this.configAction) this.setActionDisabled(this.configAction);
  398. if (this.checkTextAction) this.setActionDisabled(this.checkTextAction);
  399. },
  400. createOfficeGroupActions: function(){
  401. this.officeActionBoxNode = new Element("div", {"styles": this.css.actionsBoxNode}).inject(this.topNode);
  402. this.officeActionsGroupNode = new Element("div", {"styles": this.css.actionsGroupNode}).inject(this.officeActionBoxNode);
  403. this.closeOfficeAction = this.createAction(this.officeActionsGroupNode, "closeOffice", MWF.LP.widget.closeOffice, function(e, node){
  404. this.closeAttachmentOffice(e, node);
  405. }.bind(this));
  406. if (this.closeOfficeAction) this.setActionDisabled(this.closeOfficeAction);
  407. },
  408. loadMinActions: function(){
  409. var hiddenGroup = this.options.toolbarGroupHidden;
  410. if (!hiddenGroup.contains("edit")) {
  411. this.min_uploadAction = this.createAction(this.minActionAreaNode, "upload", MWF.LP.widget.upload, function(e, node){
  412. this.uploadAttachment(e, node);
  413. }.bind(this));
  414. this.min_deleteAction = this.createAction(this.minActionAreaNode, "delete", MWF.LP.widget["delete"], function(e, node){
  415. this.deleteAttachment(e, node);
  416. }.bind(this));
  417. this.min_replaceAction = this.createAction(this.minActionAreaNode, "replace", MWF.LP.widget.replace, function(e, node){
  418. this.replaceAttachment(e, node);
  419. }.bind(this));
  420. }
  421. if (!hiddenGroup.contains("read")) {
  422. this.min_downloadAction = this.createAction(this.minActionAreaNode, "download", MWF.LP.widget.download, function(e, node){
  423. this.downloadAttachment(e, node);
  424. }.bind(this));
  425. }
  426. if (this.module.json.isOpenInOffice && this.module.json.officeControlName){
  427. this.min_closeOfficeAction = this.createAction(this.minActionAreaNode, "closeOffice", MWF.LP.widget.closeOffice, function(e, node){
  428. this.closeAttachmentOffice(e, node);
  429. }.bind(this));
  430. if (this.min_closeOfficeAction) this.setActionDisabled(this.closeOfficeAction);
  431. }
  432. if( !hiddenGroup.contains("edit") || !hiddenGroup.contains("read") ) {
  433. this.createSeparate(this.minActionAreaNode);
  434. }
  435. if (this.options.isSizeChange) {
  436. //this.createSeparate(this.minActionAreaNode);
  437. if( !hiddenGroup.contains("view")) {
  438. this.sizeAction = this.createAction(this.minActionAreaNode, "max", MWF.LP.widget.min, function () {
  439. this.changeControllerSize();
  440. }.bind(this));
  441. }
  442. }
  443. },
  444. closeAttachmentOffice: function(){
  445. var office = this.module.form.all[this.module.json.officeControlName];
  446. if (office){
  447. office.openFile();
  448. if (this.min_closeOfficeAction) this.setActionDisabled(this.min_closeOfficeAction);
  449. if (this.closeOfficeAction) this.setActionDisabled(this.closeOfficeAction);
  450. }
  451. },
  452. configAttachment: function(){
  453. //this.fireEvent("delete", [attachment.data]);
  454. var lp = MWF.xApplication.process.Xform.LP;
  455. var css = this.module.form.css;
  456. var node = new Element("div", {"styles": css.attachmentPermissionNode}).inject(this.node);
  457. var attNames = new Element("div", {"styles": css.attachmentPermissionNamesNode}).inject(node);
  458. var attNamesTitle = new Element("div", {"styles": css.attachmentPermissionNamesTitleNode, "text": lp.attachmentPermissionInfo}).inject(attNames);
  459. var attNamesArea = new Element("div", {"styles": css.attachmentPermissionNamesAreaNode}).inject(attNames);
  460. if (this.selectedAttachments.length){
  461. this.selectedAttachments.each(function(att){
  462. var attNode = new Element("div", {"styles": css.attachmentPermissionAttNode, "text": att.data.name}).inject(attNamesArea);
  463. }.bind(this));
  464. }
  465. var editArea = new Element("div", {"styles": css.attachmentPermissionEditAreaNode}).inject(node);
  466. var title = new Element("div", {"styles": css.attachmentPermissionTitleNode, "text": lp.attachmentRead}).inject(editArea);
  467. var readInput = new Element("div", {"styles": css.attachmentPermissionInputNode}).inject(editArea);
  468. title = new Element("div", {"styles": css.attachmentPermissionTitleNode, "text": lp.attachmentEdit}).inject(editArea);
  469. var editInput = new Element("div", {"styles": css.attachmentPermissionInputNode}).inject(editArea);
  470. title = new Element("div", {"styles": css.attachmentPermissionTitleNode, "text": lp.attachmentController}).inject(editArea);
  471. var controllerInput = new Element("div", {"styles": css.attachmentPermissionInputNode}).inject(editArea);
  472. var dlg = o2.DL.open({
  473. "title": lp.attachmentPermission,
  474. "style" : this.module.form.json.dialogStyle || "user",
  475. "isResize": false,
  476. "content": node,
  477. "buttonList": [
  478. {
  479. "type" : "ok",
  480. "text": MWF.LP.process.button.ok,
  481. "action": function(){
  482. this.setAttachmentConfig(readInput, editInput, controllerInput);
  483. dlg.close();
  484. }.bind(this)
  485. },
  486. {
  487. "type" : "cancel",
  488. "text": MWF.LP.process.button.cancel,
  489. "action": function(){dlg.close();}
  490. }
  491. ]
  492. });
  493. if (this.selectedAttachments.length===1){
  494. var data = this.selectedAttachments[0].data;
  495. var readUnitList = (data.readUnitList) || [];
  496. var readIdentityList = (data.readIdentityList) || [];
  497. var editUnitList = (data.editUnitList) || [];
  498. var editIdentityList = (data.editIdentityList) || [];
  499. var controllerUnitList = (data.controllerUnitList) || [];
  500. var controllerIdentityList = (data.controllerIdentityList) || [];
  501. readInput.setSelectPerson(this.module.form.app.content, {
  502. "types": ["unit", "identity"],
  503. "values": readUnitList.concat(readIdentityList).trim()
  504. });
  505. editInput.setSelectPerson(this.module.form.app.content, {
  506. "types": ["unit", "identity"],
  507. "values": editUnitList.concat(editIdentityList).trim()
  508. });
  509. controllerInput.setSelectPerson(this.module.form.app.content, {
  510. "types": ["unit", "identity"],
  511. "values": controllerUnitList.concat(controllerIdentityList).trim()
  512. });
  513. }else{
  514. readInput.setSelectPerson(this.module.form.app.content, { "types": ["unit", "identity"] });
  515. editInput.setSelectPerson(this.module.form.app.content, { "types": ["unit", "identity"] });
  516. controllerInput.setSelectPerson(this.module.form.app.content, { "types": ["unit", "identity"] });
  517. }
  518. },
  519. setAttachmentConfig: function(readInput, editInput, controllerInput){
  520. if (this.selectedAttachments.length){
  521. var readList = readInput.retrieve("data-value");
  522. var editList = editInput.retrieve("data-value");
  523. var controllerList = controllerInput.retrieve("data-value");
  524. var readUnitList = [];
  525. var readIdentityList = [];
  526. var editUnitList = [];
  527. var editIdentityList = [];
  528. var controllerUnitList = [];
  529. var controllerIdentityList = [];
  530. if (readList){
  531. readList.each(function(v){
  532. var vName = (typeOf(v)==="string") ? v : v.distinguishedName;
  533. var len = vName.length;
  534. var flag = vName.substring(len-1,len);
  535. if (flag==="U") readUnitList.push(vName);
  536. if (flag==="I") readIdentityList.push(vName);
  537. });
  538. }
  539. if (editList){
  540. editList.each(function(v){
  541. var vName = (typeOf(v)==="string") ? v : v.distinguishedName;
  542. var len = vName.length;
  543. var flag = vName.substring(len-1,len);
  544. if (flag==="U") editUnitList.push(vName);
  545. if (flag==="I") editIdentityList.push(vName);
  546. });
  547. }
  548. if (controllerList){
  549. controllerList.each(function(v){
  550. var vName = (typeOf(v)==="string") ? v : v.distinguishedName;
  551. var len = vName.length;
  552. var flag = vName.substring(len-1,len);
  553. if (flag==="U") controllerUnitList.push(vName);
  554. if (flag==="I") controllerIdentityList.push(vName);
  555. });
  556. }
  557. this.selectedAttachments.each(function(att){
  558. att.data.readUnitList = readUnitList;
  559. att.data.readIdentityList = readIdentityList;
  560. att.data.editUnitList = editUnitList;
  561. att.data.editIdentityList = editIdentityList;
  562. att.data.controllerUnitList = controllerUnitList;
  563. att.data.controllerIdentityList = controllerIdentityList;
  564. o2.Actions.get("x_processplatform_assemble_surface").configAttachment(att.data.id, this.module.form.businessData.work.id, att.data);
  565. }.bind(this));
  566. }
  567. },
  568. checkImageTex: function(){
  569. if (this.selectedAttachments.length && this.selectedAttachments.length==1){
  570. var att = this.selectedAttachments[0];
  571. var lp = MWF.xApplication.process.Xform.LP;
  572. var css = this.module.form.css;
  573. var node = new Element("div", {"styles": css.attachmentOCRNode}).inject(this.node);
  574. var previewNode = new Element("div", {"styles": css.attachmentOCRImageAreaNode}).inject(node);
  575. var imgNode = new Element("img", {"styles": css.attachmentOCRImageNode}).inject(previewNode);
  576. o2.Actions.get("x_processplatform_assemble_surface").getAttachmentUrl(att.data.id, this.module.form.businessData.work.id, function(url){
  577. imgNode.set("src", url);
  578. });
  579. var areaNode = new Element("div", {"styles": css.attachmentOCRInputAreaNode}).inject(node);
  580. var inputNode = new Element("textarea", {"styles": css.attachmentOCRInputNode}).inject(areaNode);
  581. var dlg = o2.DL.open({
  582. "title": lp.attachmentOCRTitle,
  583. "style" : this.module.form.json.dialogStyle || "user",
  584. "isResize": false,
  585. "content": node,
  586. "buttonList": [
  587. {
  588. "type" : "ok",
  589. "text": MWF.LP.process.button.ok,
  590. "action": function(){
  591. this.setAttachmentOCR(inputNode, att);
  592. dlg.close();
  593. }.bind(this)
  594. },
  595. {
  596. "type" : "cancel",
  597. "text": MWF.LP.process.button.cancel,
  598. "action": function(){dlg.close();}
  599. }
  600. ]
  601. });
  602. if (att.data.ocr){
  603. inputNode.set("text", att.data.ocr.text || "");
  604. }else{
  605. o2.Actions.get("x_processplatform_assemble_surface").getAttachmentOCR(att.data.id, this.module.form.businessData.work.id, function(json){
  606. att.data.ocr = json.data;
  607. inputNode.set("text", json.data.text || "");
  608. }.bind(this))
  609. }
  610. }
  611. },
  612. setAttachmentOCR: function(inputNode, att){
  613. var data = inputNode.get("text");
  614. if (!att.data.ocr) att.data.ocr = {};
  615. att.data.ocr.text = data;
  616. o2.Actions.get("x_processplatform_assemble_surface").setAttachmentOCR(att.data.id, this.module.form.businessData.work.id, {
  617. "text": data
  618. }, function(){
  619. this.module.form.app.notice("success", lp.attachmentOCR_saved, this.node);
  620. }.bind(this));
  621. }
  622. });
  623. MWF.xApplication.process.Xform.Attachment = MWF.APPAttachment = new Class({
  624. Extends: MWF.APP$Module,
  625. options: {
  626. "moduleEvents": ["upload", "delete", "afterDelete", "load", "change"]
  627. },
  628. initialize: function(node, json, form, options){
  629. this.node = $(node);
  630. this.node.store("module", this);
  631. this.json = json;
  632. this.form = form;
  633. this.field = true;
  634. },
  635. _loadUserInterface: function(){
  636. this.node.empty();
  637. this.loadAttachmentController();
  638. this.fireEvent("load");
  639. },
  640. loadAttachmentController: function(){
  641. //MWF.require("MWF.widget.AttachmentController", function() {
  642. var options = {
  643. "style" : this.json.style || "default",
  644. "title": "附件区域",
  645. "listStyle": this.json.listStyle || "icon",
  646. "size": this.json.size || "max",
  647. "resize": (this.json.resize ==="y" || this.json.resize==="true"),
  648. "attachmentCount": this.json.attachmentCount || 0,
  649. "isUpload": (this.json.isUpload==="y" || this.json.isUpload==="true"),
  650. "isDelete": (this.json.isDelete==="y" || this.json.isDelete==="true"),
  651. "isReplace": (this.json.isReplace==="y" || this.json.isReplace==="true"),
  652. "isDownload": (this.json.isDownload==="y" || this.json.isDownload==="true"),
  653. "isSizeChange": (this.json.isSizeChange==="y" || this.json.isSizeChange==="true"),
  654. "readonly": (this.json.readonly==="y" || this.json.readonly==="true"),
  655. "availableListStyles" : this.json.availableListStyles ? this.json.availableListStyles : ["list","seq","icon","preview"],
  656. "isDeleteOption": this.json.isDelete,
  657. "isReplaceOption": this.json.isReplace,
  658. "toolbarGroupHidden" : this.json.toolbarGroupHidden || []
  659. };
  660. if (this.readonly) options.readonly = true;
  661. if( this.form.json.attachmentStyle ){
  662. options = Object.merge(options, this.form.json.attachmentStyle );
  663. }
  664. //this.attachmentController = new MWF.widget.ATTER(this.node, this, options);
  665. this.attachmentController = new MWF.xApplication.process.Xform.AttachmentController(this.node, this, options);
  666. this.attachmentController.load();
  667. this.form.businessData.attachmentList.each(function (att) {
  668. //if (att.site===this.json.id || (this.json.isOpenInOffice && this.json.officeControlName===att.site)) this.attachmentController.addAttachment(att);
  669. if (att.site===this.json.id) this.attachmentController.addAttachment(att);
  670. }.bind(this));
  671. this.setAttachmentBusinessData();
  672. //}.bind(this));
  673. },
  674. setAttachmentBusinessData: function(){
  675. if (this.attachmentController){
  676. if (this.attachmentController.attachments.length){
  677. var values = this.attachmentController.attachments.map(function(d){
  678. return d.data.name;
  679. });
  680. this._setBusinessData(values);
  681. }else{
  682. this._setBusinessData([]);
  683. }
  684. }
  685. },
  686. _loadEvents: function(editorConfig){
  687. Object.each(this.json.events, function(e, key){
  688. if (e.code){
  689. if (this.options.moduleEvents.indexOf(key)!==-1){
  690. this.addEvent(key, function(event){
  691. return this.form.Macro.fire(e.code, this, event);
  692. }.bind(this));
  693. }else{
  694. this.node.addEvent(key, function(event){
  695. return this.form.Macro.fire(e.code, this, event);
  696. }.bind(this));
  697. }
  698. }
  699. }.bind(this));
  700. },
  701. getData: function(){
  702. return this.attachmentController.getAttachmentNames();
  703. },
  704. createUploadFileNode: function(){
  705. var accept = "*";
  706. if (!this.json.attachmentExtType || (this.json.attachmentExtType.indexOf("other")!=-1 && !this.json.attachmentExtOtherType)){
  707. }else{
  708. accepts = [];
  709. var otherType = this.json.attachmentExtOtherType;
  710. this.json.attachmentExtType.each(function(v){
  711. switch (v) {
  712. case "word":
  713. accepts.push(".doc, .docx, .dot, .dotx");
  714. break;
  715. case "excel":
  716. accepts.push(".xls, .xlsx, .xlsm, .xlt, .xltx");
  717. break;
  718. case "ppt":
  719. accepts.push(".pptx, .ppt, .pot, .potx, .potm");
  720. break;
  721. case "txt":
  722. accepts.push(".txt");
  723. break;
  724. case "pic":
  725. accepts.push(".bmp, .gif, .psd, .jpeg, .jpg");
  726. break;
  727. case "pdf":
  728. accepts.push(".pdf");
  729. break;
  730. case "zip":
  731. accepts.push(".zip, .rar");
  732. break;
  733. case "audio":
  734. accepts.push(".mp3, .wav, .wma, .wmv, .flac, .ape");
  735. break;
  736. case "video":
  737. accepts.push(".avi, .mkv, .mov, .ogg, .mp4, .mpeg");
  738. break;
  739. case "other":
  740. if (this.json.attachmentExtOtherType) accepts.push(this.json.attachmentExtOtherType);
  741. break;
  742. }
  743. });
  744. accept = accepts.join(", ");
  745. }
  746. var size = 0;
  747. if (this.json.attachmentSize) size = this.json.attachmentSize.toFloat();
  748. this.attachmentController.doUploadAttachment({"site": this.json.id}, this.form.workAction.action, "uploadAttachment", {"id": this.form.businessData.work.id}, null, function(o){
  749. if (o.id){
  750. this.form.workAction.getAttachment(o.id, this.form.businessData.work.id, function(json){
  751. if (json.data){
  752. if (!json.data.control) json.data.control={};
  753. this.attachmentController.addAttachment(json.data);
  754. }
  755. this.attachmentController.checkActions();
  756. this.setAttachmentBusinessData();
  757. this.fireEvent("upload", [json.data]);
  758. this.fireEvent("change");
  759. }.bind(this))
  760. }
  761. this.attachmentController.checkActions();
  762. }.bind(this), function(files){
  763. if (files.length){
  764. if ((files.length+this.attachmentController.attachments.length > this.attachmentController.options.attachmentCount) && this.attachmentController.options.attachmentCount>0){
  765. var content = MWF.xApplication.process.Xform.LP.uploadMore;
  766. content = content.replace("{n}", this.attachmentController.options.attachmentCount);
  767. this.form.notice(content, "error");
  768. return false;
  769. }
  770. }
  771. return true;
  772. }.bind(this), true, accept, size);
  773. // this.uploadFileAreaNode = new Element("div");
  774. // var html = "<input name=\"file\" type=\"file\" multiple/>";
  775. // this.uploadFileAreaNode.set("html", html);
  776. //
  777. // this.fileUploadNode = this.uploadFileAreaNode.getFirst();
  778. // this.fileUploadNode.addEvent("change", function(){
  779. //
  780. // var files = this.fileUploadNode.files;
  781. // if (files.length){
  782. // if ((files.length+this.attachmentController.attachments.length > this.attachmentController.options.attachmentCount) && this.attachmentController.options.attachmentCount>0){
  783. // var content = MWF.xApplication.process.Xform.LP.uploadMore;
  784. // content = content.replace("{n}", this.attachmentController.options.attachmentCount);
  785. // this.form.notice(content, "error");
  786. // }else{
  787. // for (var i = 0; i < files.length; i++) {
  788. // var file = files.item(i);
  789. //
  790. // var formData = new FormData();
  791. // formData.append('site', this.json.id);
  792. // formData.append('file', file);
  793. //
  794. // //formData.append('folder', folderId);
  795. //
  796. // this.form.workAction.uploadAttachment(this.form.businessData.work.id ,function(o, text){
  797. // if (o.id){
  798. // this.form.workAction.getAttachment(o.id, this.form.businessData.work.id, function(json){
  799. // if (json.data) this.attachmentController.addAttachment(json.data);
  800. // this.attachmentController.checkActions();
  801. //
  802. // this.fireEvent("upload", [json.data]);
  803. // }.bind(this))
  804. // }
  805. // this.attachmentController.checkActions();
  806. // }.bind(this), null, formData, file);
  807. // }
  808. // }
  809. // }
  810. // }.bind(this));
  811. },
  812. uploadAttachment: function(e, node){
  813. if (window.o2android && window.o2android.uploadAttachment){
  814. window.o2android.uploadAttachment(this.json.id);
  815. }else if(window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.uploadAttachment ) {
  816. window.webkit.messageHandlers.uploadAttachment.postMessage({"site": this.json.id});
  817. }else{
  818. // if (!this.uploadFileAreaNode){
  819. this.createUploadFileNode();
  820. // }
  821. // this.fileUploadNode.click();
  822. }
  823. },
  824. deleteAttachments: function(e, node, attachments){
  825. var names = [];
  826. attachments.each(function(attachment){
  827. names.push(attachment.data.name);
  828. }.bind(this));
  829. // if ((window.o2 && window.o2.replaceAttachment) || (window.webkit && window.webkit.messageHandlers)){
  830. // if (window.confirm(MWF.xApplication.process.Xform.LP.deleteAttachment+"( "+names.join(", ")+" )")){
  831. // while (attachments.length){
  832. // attachment = attachments.shift();
  833. // this.deleteAttachment(attachment);
  834. // }
  835. // }
  836. // }else {
  837. // var tmpNode = new Element("div", {
  838. // "styles": {
  839. // "background-color": "#0000ff",
  840. // "border-style": "solid",
  841. // "border-color": "#fff",
  842. // "border-width": "1",
  843. // "box-shadow": "0px 0px 20px #999",
  844. // "z-index": "20000",
  845. // "overflow": "hidden",
  846. // "font-size": "14px",
  847. // "height": "160px",
  848. // "padding": "0px",
  849. // "width": "300px",
  850. // "position": "absolute",
  851. // "top": "50px",
  852. // "left": "20px",
  853. // "opacity": 1,
  854. // "border-radius": "5px"
  855. // }
  856. // }).inject(this.form.app.content);
  857. var _self = this;
  858. this.form.confirm("warn", e, MWF.xApplication.process.Xform.LP.deleteAttachmentTitle, MWF.xApplication.process.Xform.LP.deleteAttachment+"( "+names.join(", ")+" )", 300, 120, function(){
  859. while (attachments.length){
  860. var attachment = attachments.shift();
  861. _self.deleteAttachment(attachment);
  862. }
  863. this.close();
  864. }, function(){
  865. this.close();
  866. }, null, null, this.form.json.confirmStyle );
  867. },
  868. deleteAttachment: function(attachment){
  869. this.fireEvent("delete", [attachment.data]);
  870. var id = attachment.data.id;
  871. this.form.workAction.deleteAttachment(attachment.data.id, this.form.businessData.work.id, function(josn){
  872. this.attachmentController.removeAttachment(attachment);
  873. this.attachmentController.checkActions();
  874. if (this.form.officeList){
  875. this.form.officeList.each(function(office){
  876. if (office.openedAttachment){
  877. if (office.openedAttachment.id == id){
  878. office.loadOfficeEdit();
  879. }
  880. }
  881. }.bind(this));
  882. }
  883. this.setAttachmentBusinessData();
  884. this.fireEvent("afterDelete", [attachment.data]);
  885. this.fireEvent("change");
  886. }.bind(this));
  887. },
  888. replaceAttachment: function(e, node, attachment){
  889. if (window.o2android && window.o2android.replaceAttachment){
  890. window.o2android.replaceAttachment(attachment.data.id, this.json.id);
  891. }else if(window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.replaceAttachment) {
  892. window.webkit.messageHandlers.replaceAttachment.postMessage({"id": attachment.data.id, "site": this.json.id});
  893. }else {
  894. var _self = this;
  895. this.form.confirm("warn", e, MWF.xApplication.process.Xform.LP.replaceAttachmentTitle, MWF.xApplication.process.Xform.LP.replaceAttachment+"( "+attachment.data.name+" )", 350, 120, function(){
  896. _self.replaceAttachmentFile(attachment);
  897. this.close();
  898. }, function(){
  899. this.close();
  900. }, null, null, this.form.json.confirmStyle);
  901. }
  902. },
  903. createReplaceFileNode: function(attachment){
  904. var accept = "*";
  905. if (!this.json.attachmentExtType || this.json.attachmentExtType.indexOf("other")!=-1 && !this.json.attachmentExtOtherType){
  906. }else{
  907. accepts = [];
  908. var otherType = this.json.attachmentExtOtherType;
  909. this.json.attachmentExtType.each(function(v){
  910. switch (v) {
  911. case "word":
  912. accepts.push(".doc, .docx, .dot, .dotx");
  913. break;
  914. case "excel":
  915. accepts.push(".xls, .xlsx, .xlsm, .xlt, .xltx");
  916. break;
  917. case "ppt":
  918. accepts.push(".pptx, .ppt, .pot, .potx, .potm");
  919. break;
  920. case "txt":
  921. accepts.push(".txt");
  922. break;
  923. case "pic":
  924. accepts.push(".bmp, .gif, .psd, .jpeg, .jpg");
  925. break;
  926. case "pdf":
  927. accepts.push(".pdf");
  928. break;
  929. case "zip":
  930. accepts.push(".zip, .rar");
  931. break;
  932. case "audio":
  933. accepts.push(".mp3, .wav, .wma, .wmv, .flac, .ape");
  934. break;
  935. case "video":
  936. accepts.push(".avi, .mkv, .mov, .ogg, .mp4, .mpeg");
  937. break;
  938. case "other":
  939. if (this.json.attachmentExtOtherType) accepts.push(this.json.attachmentExtOtherType);
  940. break;
  941. }
  942. });
  943. accept = accepts.join(", ");
  944. }
  945. var size = 0;
  946. if (this.json.attachmentSize) size = this.json.attachmentSize.toFloat();
  947. this.attachmentController.doUploadAttachment({"site": this.json.id}, this.form.workAction.action, "replaceAttachment",
  948. {"id": attachment.data.id, "workid": this.form.businessData.work.id}, null, function(o){
  949. this.form.workAction.getAttachment(attachment.data.id, this.form.businessData.work.id, function(json){
  950. attachment.data = json.data;
  951. attachment.reload();
  952. this.attachmentController.checkActions();
  953. }.bind(this))
  954. }.bind(this), null, true, accept, size);
  955. // this.replaceFileAreaNode = new Element("div");
  956. // var html = "<input name=\"file\" type=\"file\" multiple/>";
  957. // this.replaceFileAreaNode.set("html", html);
  958. //
  959. // this.fileReplaceNode = this.replaceFileAreaNode.getFirst();
  960. // this.fileReplaceNode.addEvent("change", function(){
  961. //
  962. // var files = this.fileReplaceNode.files;
  963. // if (files.length){
  964. // for (var i = 0; i < files.length; i++) {
  965. // var file = files.item(i);
  966. //
  967. // var formData = new FormData();
  968. // formData.append('file', file);
  969. // // formData.append('site', this.json.id);
  970. //
  971. // this.form.workAction.replaceAttachment(attachment.data.id, this.form.businessData.work.id ,function(o, text){
  972. // this.form.workAction.getAttachment(attachment.data.id, this.form.businessData.work.id, function(json){
  973. // attachment.data = json.data;
  974. // attachment.reload();
  975. // this.attachmentController.checkActions();
  976. // }.bind(this))
  977. // }.bind(this), null, formData, file);
  978. // }
  979. // }
  980. // }.bind(this));
  981. },
  982. replaceAttachmentFile: function(attachment){
  983. //if (!this.replaceFileAreaNode){
  984. this.createReplaceFileNode(attachment);
  985. // }
  986. // this.fileReplaceNode.click();
  987. },
  988. downloadAttachment: function(e, node, attachments){
  989. if (this.form.businessData.work && !this.form.businessData.work.completedTime){
  990. attachments.each(function(att){
  991. if (window.o2android && window.o2android.downloadAttachment){
  992. window.o2android.downloadAttachment(att.data.id);
  993. }else if(window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.downloadAttachment) {
  994. window.webkit.messageHandlers.downloadAttachment.postMessage({"id": att.data.id, "site": this.json.id});
  995. }else{
  996. this.form.workAction.getAttachmentStream(att.data.id, this.form.businessData.work.id);
  997. }
  998. }.bind(this));
  999. }else{
  1000. attachments.each(function(att){
  1001. if (window.o2android && window.o2android.downloadAttachment){
  1002. window.o2android.downloadAttachment(att.data.id);
  1003. }else if(window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.downloadAttachment) {
  1004. window.webkit.messageHandlers.downloadAttachment.postMessage({"id": att.data.id, "site": this.json.id});
  1005. }else{
  1006. this.form.workAction.getWorkcompletedAttachmentStream(att.data.id, this.form.businessData.workCompleted.id);
  1007. }
  1008. }.bind(this));
  1009. }
  1010. },
  1011. openAttachment: function(e, node, attachments){
  1012. if (this.form.businessData.work && !this.form.businessData.work.completedTime){
  1013. attachments.each(function(att){
  1014. if (window.o2android && window.o2android.downloadAttachment){
  1015. window.o2android.downloadAttachment(att.data.id);
  1016. }else if(window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.downloadAttachment) {
  1017. window.webkit.messageHandlers.downloadAttachment.postMessage({"id": att.data.id, "site": this.json.id});
  1018. }else {
  1019. this.form.workAction.getAttachmentData(att.data.id, this.form.businessData.work.id);
  1020. }
  1021. }.bind(this));
  1022. }else{
  1023. attachments.each(function(att){
  1024. if (window.o2android && window.o2android.downloadAttachment){
  1025. window.o2android.downloadAttachment(att.data.id);
  1026. }else if(window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.downloadAttachment) {
  1027. window.webkit.messageHandlers.downloadAttachment.postMessage(att.data.id, this.json.id);
  1028. }else {
  1029. this.form.workAction.getWorkcompletedAttachmentData(att.data.id, ((this.form.businessData.workCompleted) ? this.form.businessData.workCompleted.id : this.form.businessData.work.id));
  1030. }
  1031. }.bind(this));
  1032. }
  1033. //this.downloadAttachment(e, node, attachment);
  1034. },
  1035. getAttachmentUrl: function(attachment, callback){
  1036. if (this.form.businessData.work && !this.form.businessData.work.completedTime){
  1037. this.form.workAction.getAttachmentUrl(attachment.data.id, this.form.businessData.work.id, callback);
  1038. }else{
  1039. this.form.workAction.getAttachmentWorkcompletedUrl(attachment.data.id, this.form.businessData.workCompleted.id, callback);
  1040. }
  1041. },
  1042. createErrorNode: function(text){
  1043. var node = new Element("div");
  1044. var iconNode = new Element("div", {
  1045. "styles": {
  1046. "width": "20px",
  1047. "height": "20px",
  1048. "float": "left",
  1049. "background": "url("+"/x_component_process_Xform/$Form/default/icon/error.png) center center no-repeat"
  1050. }
  1051. }).inject(node);
  1052. var textNode = new Element("div", {
  1053. "styles": {
  1054. "line-height": "20px",
  1055. "margin-left": "20px",
  1056. "color": "red",
  1057. "word-break": "keep-all"
  1058. },
  1059. "text": text
  1060. }).inject(node);
  1061. return node;
  1062. },
  1063. notValidationMode: function(text){
  1064. if (!this.isNotValidationMode){
  1065. this.isNotValidationMode = true;
  1066. this.node.store("borderStyle", this.node.getStyles("border-left", "border-right", "border-top", "border-bottom"));
  1067. this.node.setStyle("border", "1px solid red");
  1068. this.errNode = this.createErrorNode(text).inject(this.node, "after");
  1069. this.showNotValidationMode(this.node);
  1070. }
  1071. },
  1072. showNotValidationMode: function(node){
  1073. var p = node.getParent("div");
  1074. if (p){
  1075. if (p.get("MWFtype") == "tab$Content"){
  1076. if (p.getParent("div").getStyle("display")=="none"){
  1077. var contentAreaNode = p.getParent("div").getParent("div");
  1078. var tabAreaNode = contentAreaNode.getPrevious("div");
  1079. var idx = contentAreaNode.getChildren().indexOf(p.getParent("div"));
  1080. var tabNode = tabAreaNode.getLast().getFirst().getChildren()[idx];
  1081. tabNode.click();
  1082. p = tabAreaNode.getParent("div");
  1083. }
  1084. }
  1085. this.showNotValidationMode(p);
  1086. }
  1087. },
  1088. validationMode: function(){
  1089. if (this.isNotValidationMode){
  1090. this.isNotValidationMode = false;
  1091. this.node.setStyles(this.node.retrieve("borderStyle"));
  1092. if (this.errNode){
  1093. this.errNode.destroy();
  1094. this.errNode = null;
  1095. }
  1096. }
  1097. },
  1098. validationConfigItem: function(routeName, data){
  1099. var flag = (data.status=="all") ? true: (routeName == data.decision);
  1100. if (flag){
  1101. var n = this.getData();
  1102. var v = (data.valueType=="value") ? n : n.length;
  1103. switch (data.operateor){
  1104. case "isnull":
  1105. if (!v){
  1106. this.notValidationMode(data.prompt);
  1107. return false;
  1108. }
  1109. break;
  1110. case "notnull":
  1111. if (v){
  1112. this.notValidationMode(data.prompt);
  1113. return false;
  1114. }
  1115. break;
  1116. case "gt":
  1117. if (v>data.value){
  1118. this.notValidationMode(data.prompt);
  1119. return false;
  1120. }
  1121. break;
  1122. case "lt":
  1123. if (v<data.value){
  1124. this.notValidationMode(data.prompt);
  1125. return false;
  1126. }
  1127. break;
  1128. case "equal":
  1129. if (v==data.value){
  1130. this.notValidationMode(data.prompt);
  1131. return false;
  1132. }
  1133. break;
  1134. case "neq":
  1135. if (v!=data.value){
  1136. this.notValidationMode(data.prompt);
  1137. return false;
  1138. }
  1139. break;
  1140. case "contain":
  1141. if (v.indexOf(data.value)!=-1){
  1142. this.notValidationMode(data.prompt);
  1143. return false;
  1144. }
  1145. break;
  1146. case "notcontain":
  1147. if (v.indexOf(data.value)==-1){
  1148. this.notValidationMode(data.prompt);
  1149. return false;
  1150. }
  1151. break;
  1152. }
  1153. }
  1154. return true;
  1155. },
  1156. validationConfig: function(routeName, opinion){
  1157. if (this.json.validationConfig){
  1158. if (this.json.validationConfig.length){
  1159. for (var i=0; i<this.json.validationConfig.length; i++) {
  1160. var data = this.json.validationConfig[i];
  1161. if (!this.validationConfigItem(routeName, data)) return false;
  1162. }
  1163. }
  1164. return true;
  1165. }
  1166. return true;
  1167. },
  1168. validation: function(routeName, opinion){
  1169. if (!this.validationConfig(routeName, opinion)) return false;
  1170. if (!this.json.validation) return true;
  1171. if (!this.json.validation.code) return true;
  1172. var flag = this.form.Macro.exec(this.json.validation.code, this);
  1173. if (!flag) flag = MWF.xApplication.process.Xform.LP.notValidation;
  1174. if (flag.toString()!="true"){
  1175. this.notValidationMode(flag);
  1176. return false;
  1177. }
  1178. return true;
  1179. }
  1180. });