MWF.xDesktop.requireApp("process.Xform", "$Module", null, false); MWF.require("MWF.widget.AttachmentController", null, false); MWF.xApplication.process.Xform.AttachmentController = new Class({ Extends: MWF.widget.ATTER, "options": { "officeFiles": ["doc", "docx", "dotx", "dot", "xls", "xlsx", "xlsm", "xlt", "xltx", "pptx", "ppt", "pot", "potx", "potm", "pdf"], "allowPreviewExtension" : ["zip","pdf", "ofd", "png", "jpg", "bmp", "jpeg", "gif", "js", "css", "java", "json", "xml", "php", "html", "htm", "xhtml", "log", "md", "txt"], "checkTextEnable": true }, checkAttControl: function(att, currentUser){ var attUser = att.data.person || att.data.creatorUid; switch (this.options.isDeleteOption){ case "o": return attUser===currentUser; case "a": return att.data.activity===this.module.form.businessData.activity.id; case "ao": return (attUser===currentUser || att.data.activity===this.module.form.businessData.activity.id); default: return true; } }, checkAttachmentDeleteAction: function () { if (this.options.readonly || this.options.isDeleteOption==="n" || this.options.isDeleteOption==="hidden" || !this.attachments.length) { this.setAttachmentsAction("delete", false); return false; } var currentUser = layout.session.user.distinguishedName; for (var i = 0; i < this.attachments.length; i++) { var att = this.attachments[i]; this.setAttachmentAction(att, "delete", (att.data.control.allowEdit && this.checkAttControl(att, currentUser))); } }, checkDeleteAction: function () { this.checkAttachmentDeleteAction(); if (this.options.readonly) { if (this.options.isDeleteOption === "hidden") { this.setActionHidden(this.deleteAction); this.setActionHidden(this.min_deleteAction); } else { this.setActionDisabled(this.deleteAction); this.setActionDisabled(this.min_deleteAction); } return false; } if (this.options.isDeleteOption === "hidden") { this.setActionHidden(this.deleteAction); this.setActionHidden(this.min_deleteAction); }else if( this.options.isDeleteOption === "n" ){ this.setActionDisabled(this.deleteAction); this.setActionDisabled(this.min_deleteAction); } else { if (this.selectedAttachments.length) { var user = layout.session.user.distinguishedName; var flag = true; if (this.options.isDeleteOption === "o") { for (var i = 0; i < this.selectedAttachments.length; i++) { var att = this.selectedAttachments[i]; if (!att.data.person && att.data.creatorUid) att.data.person = att.data.creatorUid; if (!att.data.control.allowEdit && att.data.person !== user) { flag = false; break; } if (att.data.person !== layout.desktop.session.user.distinguishedName) { flag = false; break; } } } else if (this.options.isDeleteOption === "a") { for (var i = 0; i < this.selectedAttachments.length; i++) { var att = this.selectedAttachments[i]; if (!att.data.person && att.data.creatorUid) att.data.person = att.data.creatorUid; if (!att.data.control.allowEdit && att.data.person !== user) { flag = false; break; } if (att.data.activity !== this.module.form.businessData.activity.id) { flag = false; break; } } } else if (this.options.isDeleteOption === "ao") { for (var i = 0; i < this.selectedAttachments.length; i++) { var att = this.selectedAttachments[i]; if (!att.data.person && att.data.creatorUid) att.data.person = att.data.creatorUid; if (!att.data.control.allowEdit && att.data.person !== user) { flag = false; break; } if ((att.data.activity !== this.module.form.businessData.activity.id) || (att.data.person !== layout.desktop.session.user.distinguishedName)) { flag = false; break; } } } else { for (var i = 0; i < this.selectedAttachments.length; i++) { var att = this.selectedAttachments[i]; if (!att.data.person && att.data.creatorUid) att.data.person = att.data.creatorUid; if (!att.data.control.allowEdit && att.data.person !== user) { flag = false; break; } } } if (flag) { this.setActionEnabled(this.deleteAction); this.setActionEnabled(this.min_deleteAction); } else { this.setActionDisabled(this.deleteAction); this.setActionDisabled(this.min_deleteAction); } } else { this.setActionDisabled(this.deleteAction); this.setActionDisabled(this.min_deleteAction); } } // else { // // if (!this.options.isDelete){ // this.setActionDisabled(this.deleteAction); // this.setActionDisabled(this.min_deleteAction); // // }else{ // // if (this.selectedAttachments.length){ // // this.setActionEnabled(this.deleteAction); // // this.setActionEnabled(this.min_deleteAction); // // }else{ // // this.setActionDisabled(this.deleteAction); // // this.setActionDisabled(this.min_deleteAction); // // } // // } // } }, checkDownloadBatchAction: function(){ if( this.options.isDownloadBatch === "hidden" ){ this.setActionHidden(this.downloadBatchAction); this.setActionHidden(this.min_downloadBatchAction); this.setAttachmentsAction("downloadBatch", false ); }else if (!this.options.isDownloadBatch){ this.setActionDisabled(this.downloadBatchAction); this.setActionDisabled(this.min_downloadBatchAction); this.setAttachmentsAction("downloadBatch", false ); }else{ this.setActionEnabled(this.downloadBatchAction); this.setActionEnabled(this.min_downloadBatchAction); this.setAttachmentsAction("downloadBatch", true ); } }, checkEditAttAction: function () { if(layout.mobile){ this.setActionDisabled(this.editAttAction); this.setActionDisabled(this.min_editAttAction); } else if (this.options.isEditAtt === "hidden" ){ this.setActionHidden(this.editAttAction); this.setActionHidden(this.min_editAttAction); } else if (!this.options.isEditAtt || this.options.readonly){ this.setActionDisabled(this.editAttAction); this.setActionDisabled(this.min_editAttAction); }else{ if (this.selectedAttachments.length){ var flag = false; for (var i = 0; i < this.selectedAttachments.length; i++) { var att = this.selectedAttachments[i]; if (["doc","docx","xls","xlsx","ppt","pptx"].contains(att.data.extension)) { flag = true; break; } } if(flag){ this.setActionEnabled(this.editAttAction); this.setActionEnabled(this.min_editAttAction); } }else{ this.setActionDisabled(this.editAttAction); this.setActionDisabled(this.min_editAttAction); } } }, checkPreviewAttAction: function () { // if(layout.mobile){ // this.setActionDisabled(this.previewAttAction); // this.setActionDisabled(this.min_previewAttAction); // } else if (this.options.isPreviewAtt === "hidden" ){ this.setActionHidden(this.previewAttAction); this.setActionHidden(this.min_previewAttAction); } else if (!this.options.isPreviewAtt){ this.setActionDisabled(this.previewAttAction); this.setActionDisabled(this.min_previewAttAction); }else{ if (this.selectedAttachments.length){ var flag = false; for (var i = 0; i < this.selectedAttachments.length; i++) { var att = this.selectedAttachments[i]; if (this.options.allowPreviewExtension.contains(att.data.extension)) { flag = true; break; } if (["doc","docx","xls","xlsx","ppt","pptx"].contains(att.data.extension)) { flag = true; break; } } if(flag){ this.setActionEnabled(this.previewAttAction); this.setActionEnabled(this.min_previewAttAction); //this.setActionEnabled(this.min_downloadAction); } }else{ this.setActionDisabled(this.previewAttAction); this.setActionDisabled(this.min_previewAttAction); } } }, isAttDeleteAvailable: function (att) { if (this.options.readonly) return false; if (this.options.toolbarGroupHidden.contains("edit")) return false; if (this.options.isDeleteOption === "n" || this.options.isDeleteOption === "hidden") return false; var user = layout.session.user.distinguishedName; var flag = true; if (!att.data.person && att.data.creatorUid) att.data.person = att.data.creatorUid; if (this.options.isDeleteOption === "o") { if (!att.data.control.allowEdit && att.data.person !== user) flag = false; if (att.data.person !== layout.desktop.session.user.distinguishedName) flag = false; } else if (this.options.isDeleteOption === "a") { if (!att.data.control.allowEdit && att.data.person !== user) flag = false; if (att.data.activity !== this.module.form.businessData.activity.id) flag = false; } else if (this.options.isDeleteOption === "ao") { if (!att.data.control.allowEdit && att.data.person !== user) flag = false; if ((att.data.activity !== this.module.form.businessData.activity.id) || (att.data.person !== layout.desktop.session.user.distinguishedName)) flag = false; } else { if (!att.data.control.allowEdit && att.data.person !== user) flag = false; } return flag; }, openInOfficeControl: function (att, office) { if (office) { if (!office.openedAttachment || office.openedAttachment.id !== att.id) { office.save(); if (this.module.form.businessData.workCompleted) { MWF.Actions.get("x_processplatform_assemble_surface").getAttachmentWorkcompletedUrl(att.id, this.module.form.businessData.workCompleted.id, function (url) { office.openedAttachment = { "id": att.id, "site": this.module.json.name, "name": att.name }; office.officeOCX.BeginOpenFromURL(url, true, this.readonly); }.bind(this)); } else { MWF.Actions.get("x_processplatform_assemble_surface").getAttachmentUrl(att.id, this.module.form.businessData.work.id, function (url) { office.openedAttachment = { "id": att.id, "site": this.module.json.name, "name": att.name }; office.officeOCX.BeginOpenFromURL(url, true, this.readonly); }.bind(this)); } } } }, checkReplaceAction: function () { if (this.options.isReplaceHidden) return; if (this.options.readonly) { if (this.options.isReplaceOption === "hidden") { this.setActionHidden(this.replaceAction); this.setActionHidden(this.min_replaceAction); }else{ this.setActionDisabled(this.replaceAction); this.setActionDisabled(this.min_replaceAction); } return false; } if (this.options.isReplaceOption === "hidden") { this.setActionHidden(this.replaceAction); this.setActionHidden(this.min_replaceAction); }else if(this.options.isReplaceOption === "n"){ this.setActionDisabled(this.replaceAction); this.setActionDisabled(this.min_replaceAction); } else { if (this.selectedAttachments.length && this.selectedAttachments.length === 1) { var att = this.selectedAttachments[0]; if (!att.data.person && att.data.creatorUid) att.data.person = att.data.creatorUid; var user = layout.session.user.distinguishedName; var flag = true; if (this.options.isReplaceOption === "o") { flag = att.data.person === layout.desktop.session.user.distinguishedName; } if (this.options.isReplaceOption === "a") { flag = att.data.activity === this.module.form.businessData.activity.id; } if (this.options.isReplaceOption === "ao") { flag = (att.data.person === layout.desktop.session.user.distinguishedName && att.data.activity === this.module.form.businessData.activity.id); } if (flag && !att.data.control.allowEdit && att.data.person !== user) { flag = false; } if (flag) { this.setActionEnabled(this.replaceAction); this.setActionEnabled(this.min_replaceAction); } else { this.setActionDisabled(this.replaceAction); this.setActionDisabled(this.min_replaceAction); } } else { this.setActionDisabled(this.replaceAction); this.setActionDisabled(this.min_replaceAction); } } // else { // // if (!this.options.isReplace){ // this.setActionDisabled(this.replaceAction); // this.setActionDisabled(this.min_replaceAction); // } }, replaceAttachment: function (e, node) { var att = this.selectedAttachments[0].data; if (this.module.json.isOpenInOffice && this.module.json.officeControlName && (this.options.officeFiles.indexOf(att.extension) !== -1)) { var office = this.module.form.all[this.module.json.officeControlName]; if (office) { if (this.min_closeOfficeAction) this.setActionEnabled(this.min_closeOfficeAction); if (this.closeOfficeAction) this.setActionEnabled(this.closeOfficeAction); this.openInOfficeControl(att, office); } else { if (this.selectedAttachments.length && this.selectedAttachments.length == 1) { if (this.module) this.module.replaceAttachment(e, node, this.selectedAttachments[0]); } } } else { if (this.selectedAttachments.length && this.selectedAttachments.length == 1) { if (this.module) this.module.replaceAttachment(e, node, this.selectedAttachments[0]); } } }, isAttReplaceAvailable: function (att) { if (this.options.readonly) return false; if (this.options.toolbarGroupHidden.contains("edit")) return false; if (this.options.isReplaceOption === "n" || this.options.isReplaceOption === "hidden") return false; var user = layout.session.user.distinguishedName; var flag = true; if (!att.data.person && att.data.creatorUid) att.data.person = att.data.creatorUid; if (this.options.isReplaceOption === "o") { flag = att.data.person === layout.desktop.session.user.distinguishedName; } if (this.options.isReplaceOption === "a") { flag = att.data.activity === this.module.form.businessData.activity.id; } if (this.options.isReplaceOption === "ao") { flag = (att.data.person === layout.desktop.session.user.distinguishedName && att.data.activity === this.module.form.businessData.activity.id); } if (flag && !att.data.control.allowEdit && att.data.person !== user) { flag = false; } return flag; }, //checkAttachmentOrderAction : function(){ // if (this.options.readonly){ // this.setAttachmentsAction("order", false ); // return false; // } // if (this.attachments.length){ // var user = layout.session.user.distinguishedName; // for (var i=0; i 1) { var flag = true; var user = layout.session.user.distinguishedName; for (var i = 0; i < this.attachments.length; i++) { var att = this.attachments[i]; if (!att.data.person && att.data.creatorUid) att.data.person = att.data.creatorUid; if ((!att.data.control.allowControl && !att.data.control.allowEdit) && att.data.person !== user) { //|| !att.data.control.allowEdit flag = false; break; } } if (flag) { this.setActionEnabled(this.orderAction); this.setActionEnabled(this.min_orderAction); } else { this.setActionDisabled(this.orderAction); this.setActionDisabled(this.min_orderAction); } //this.setActionEnabled(this.min_deleteAction); } else { this.setActionDisabled(this.orderAction); this.setActionDisabled(this.min_orderAction); //this.setActionDisabled(this.min_deleteAction); } } }, isAttOrderAvailable: function (att) { if (this.options.readonly) return false; if (this.options.toolbarGroupHidden.contains("config")) return false; var user = layout.session.user.distinguishedName; var flag = true; if (!att.data.person && att.data.creatorUid) att.data.person = att.data.creatorUid; if ((!att.data.control.allowControl || !att.data.control.allowEdit) && att.data.person !== user) { flag = false; } return flag; }, createTopNode: function () { if (this.options.title) { if (!this.titleNode) this.titleNode = new Element("div", { "styles": this.css.titleNode, "text": this.options.title }).inject(this.node); } if (!this.topNode) { this.topNode = new Element("div", { "styles": this.css.topNode }).inject(this.node); } else { this.topNode.empty(); this.editActionBoxNode = null; this.editActionsGroupNode = null; this.topNode.setStyle("display", ""); if (this.isHiddenTop) { //this.container.setStyle("height", this.container.getSize().y + 45 ); //this.node.setStyle("height", this.node.getSize().y + 45 ); if (this.oldContentScrollNodeHeight && this.contentScrollNode) { this.contentScrollNode.setStyle("min-height", this.oldContentScrollNodeHeight); this.oldContentScrollNodeHeight = null; } this.isHiddenTop = false; } } var hiddenGroup = this.options.toolbarGroupHidden; if (hiddenGroup.contains("edit") && hiddenGroup.contains("read") && hiddenGroup.contains("list") && hiddenGroup.contains("view") && hiddenGroup.contains("config") && !(this.module.json.isOpenInOffice && this.module.json.officeControlName) ) { if (this.contentScrollNode) { this.oldContentScrollNodeHeight = this.contentScrollNode.getStyle("min-height"); this.contentScrollNode.setStyle("min-height", this.node.getStyle("min-height")); this.topNode.setStyle("display", "none"); } this.isHiddenTop = true; } if (!hiddenGroup.contains("edit")) this.createEditGroupActions(); if (!hiddenGroup.contains("read")) this.createReadGroupActions(); if (!hiddenGroup.contains("list")) this.createListGroupActions(); if (this.module.json.isOpenInOffice && this.module.json.officeControlName) this.createOfficeGroupActions(); if (!hiddenGroup.contains("config")) this.createConfigGroupActions(); if (!hiddenGroup.contains("view")) this.createViewGroupActions(); this.checkActions(); if( layout.mobile && this.checkActionsZoom ){ this.checkActionsZoom(); } }, createReadGroupActions: function(){ //this.readActionBoxNode = new Element("div", {"styles": this.css.actionsBoxNode}).inject(this.topNode); //this.readActionsGroupNode = new Element("div", {"styles": this.css.actionsGroupNode}).inject(this.readActionBoxNode); if(!this.editActionBoxNode)this.editActionBoxNode = new Element("div", {"styles": this.css.actionsBoxNode}).inject(this.topNode); if(!this.editActionsGroupNode)this.editActionsGroupNode = new Element("div", {"styles": this.css.actionsGroupNode}).inject(this.editActionBoxNode); this.downloadAction = this.createAction(this.editActionsGroupNode, "download", o2.LP.widget.download, function(){ this.downloadAttachment(); }.bind(this)); this.downloadBatchAction = this.createAction(this.editActionsGroupNode, "downloadBatch", o2.LP.widget.downloadBatch, function(){ this.downloadBatchAttachment(); }.bind(this)); }, checkActions: function () { // if (this.options.readonly){ // this.setReadonly(); // }else{ this.checkUploadAction(); this.checkDeleteAction(); this.checkReplaceAction(); this.checkPreviewAttAction(); this.checkEditAttAction(); //this.checkOfficeAction(); this.checkDownloadAction(); this.checkDownloadBatchAction(); this.checkSizeAction(); this.checkConfigAction(); this.checkOrderAction(); this.checkListStyleAction(); if( this.options.size === "max" ){ this.checkEditActionBox(); this.checkConfigActionBox(); }else if( this.options.size === "min" ){ this.checkMinActionBox(); } // } }, checkEditActionBox: function(){ var isShowEdit = false; ["isUpload", "isDelete", "isReplace", "isPreviewAtt", "isEditAtt"].each(function( key ){ if( key === "isReplace" && this.options.isReplaceHidden )return; if( key === "isPreviewAtt" && layout.mobile )return; if( this.options[key] !== "hidden" )isShowEdit = true; }.bind(this)); var isShowRead = false; ["isDownload","isDownloadBatch"].each(function( key ){ if( this.options[key] !== "hidden" )isShowRead = true; }.bind(this)); if(this.editActionSeparateNode)this.editActionSeparateNode.setStyle( "display", isShowEdit && isShowRead ? "" : "none" ); if(this.editActionBoxNode )this.editActionBoxNode.setStyle( "display", isShowEdit || isShowRead ? "" : "none" ); }, checkConfigActionBox: function(){ var isShowConfig = false; ["isConfig"].each(function( key ){ if( this.options[key] !== "hidden" )isShowConfig = true; }.bind(this)); var isShowOrder = false; ["isOrder"].each(function( key ){ if( this.options[key] !== "hidden" )isShowOrder = true; }.bind(this)); if(this.configActionSeparateNode)this.configActionSeparateNode.setStyle( "display", isShowConfig && isShowOrder ? "" : "none" ); if(this.configActionBoxNode )this.configActionBoxNode.setStyle( "display", isShowConfig || isShowOrder ? "" : "none" ); }, checkMinActionBox: function(){ var isShowLeft = false; var hiddenGroup = this.options.toolbarGroupHidden || []; if( this.min_closeOfficeAction ){ isShowLeft = true; }else { ["isUpload", "isDelete", "isReplace", "isDownload", "isDownloadBatch", "isOrder"].each(function (key) { if (key === "isReplace" && this.options.isReplaceHidden) return; if (this.options[key] !== "hidden") isShowLeft = true; }.bind(this)); if( isShowLeft ){ if( hiddenGroup.contains("edit") && hiddenGroup.contains("read") && hiddenGroup.contains("config") ){ isShowLeft = false; } } } var isShowRight = this.options.isSizeChange && !hiddenGroup.contains("view"); if(this.minSeparateNode)this.minSeparateNode.setStyle( "display", isShowLeft && isShowRight ? "" : "none" ); if(this.minActionAreaNode )this.minActionAreaNode.setStyle( "display", isShowLeft || isShowRight ? "" : "none" ); }, checkAttachmentConfigAction: function () { if (this.options.readonly || !this.attachments.length) { this.setAttachmentsAction("config", false); return false; } var currentUser = layout.session.user.distinguishedName; for (var i = 0; i < this.attachments.length; i++) { var att = this.attachments[i]; var attUser = att.data.person || att.data.creatorUid; this.setAttachmentAction(att, "config", att.data.control.allowControl && attUser===currentUser); } }, checkConfigAction: function () { if( this.options.isConfig === "hidden" ){ this.setActionHidden(this.configAction); return; } if( !this.options.isConfig ){ this.setActionDisabled(this.configAction); return; } this.checkAttachmentConfigAction(); if (this.options.readonly) { this.setActionDisabled(this.configAction); if (this.checkTextAction) this.setActionDisabled(this.checkTextAction); return false; } if (this.selectedAttachments.length) { var flag = true; var user = layout.session.user.distinguishedName; for (var i = 0; i < this.selectedAttachments.length; i++) { var att = this.selectedAttachments[i]; if (!att.data.person && att.data.creatorUid) att.data.person = att.data.creatorUid; if ((!att.data.control.allowControl) && att.data.person !== user) { //|| !att.data.control.allowEdit flag = false; break; } } if (flag) { this.setActionEnabled(this.configAction); } else { this.setActionDisabled(this.configAction); } //this.setActionEnabled(this.min_deleteAction); } else { this.setActionDisabled(this.configAction); //this.setActionDisabled(this.min_deleteAction); } if (this.checkTextAction) { this.setActionDisabled(this.checkTextAction); if (this.selectedAttachments.length && this.selectedAttachments.length === 1) { var att = this.selectedAttachments[0]; if (this.options.images.indexOf(att.data.extension.toLowerCase()) !== -1) { this.setActionEnabled(this.checkTextAction); } } } }, isAttConfigAvailable: function (att) { if (this.options.readonly) return false; if (this.options.isConfig === "hidden") return false; if (this.options.toolbarGroupHidden.contains("config")) return false; var user = layout.session.user.distinguishedName; var flag = true; if (!att.data.person && att.data.creatorUid) att.data.person = att.data.creatorUid; if (!att.data.control.allowControl && att.data.person !== user) { flag = false; } return flag; }, createEditGroupActions: function () { if (!this.editActionBoxNode) this.editActionBoxNode = new Element("div", { "styles": this.css.actionsBoxNode }).inject(this.topNode); if (!this.editActionsGroupNode) this.editActionsGroupNode = new Element("div", { "styles": this.css.actionsGroupNode }).inject(this.editActionBoxNode); this.uploadAction = this.createAction(this.editActionsGroupNode, "upload", o2.LP.widget.upload, function (e, node) { this.uploadAttachment(e, node); }.bind(this)); this.deleteAction = this.createAction(this.editActionsGroupNode, "delete", o2.LP.widget["delete"], function (e, node) { this.deleteAttachment(e, node); }.bind(this)); //if(!layout.mobile){ this.previewAttAction = this.createAction(this.editActionsGroupNode, "previewAtt", o2.LP.widget["previewAtt"], function (e, node) { this.previewAttachment(e, node); }.bind(this)); //} if(!layout.mobile){ this.editAttAction = this.createAction(this.editActionsGroupNode, "editAtt", o2.LP.widget["editAtt"], function (e, node) { this.editAttachment(e, node); }.bind(this)); } if (!this.options.isReplaceHidden) { this.replaceAction = this.createAction(this.editActionsGroupNode, "replace", o2.LP.widget.replace, function (e, node) { this.replaceAttachment(e, node); }.bind(this)); } // this.officeAction = this.createAction(this.editActionsGroupNode, "office", o2.LP.widget.office, function(e, node){ // this.openInOfficeControl(e, node); // }.bind(this)); if (!this.options.toolbarGroupHidden.contains("read")) this.editActionSeparateNode = this.createSeparate(this.editActionsGroupNode); }, createConfigGroupActions: function () { this.configActionBoxNode = new Element("div", { "styles": this.css.actionsBoxNode }).inject(this.topNode); this.configActionsGroupNode = new Element("div", { "styles": this.css.actionsGroupNode }).inject(this.configActionBoxNode); this.configAction = this.createAction(this.configActionsGroupNode, "config", MWF.LP.widget.configAttachment, function (e, node) { this.configAttachment(e, node); }.bind(this)); // if (this.options.checkTextEnable) { // this.checkTextAction = this.createAction(this.configActionsGroupNode, "check", MWF.LP.widget.checkOcrText, function (e, node) { // this.checkImageTex(e, node); // }.bind(this)); // } this.configActionSeparateNode = this.createSeparate(this.configActionsGroupNode); this.orderAction = this.createAction(this.configActionsGroupNode, "order", MWF.LP.widget.order, function (e, node) { this.orderAttachment(e, node); }.bind(this)); if (this.configAction) this.setActionDisabled(this.configAction); if (this.checkTextAction) this.setActionDisabled(this.checkTextAction); }, createOfficeGroupActions: function () { this.officeActionBoxNode = new Element("div", { "styles": this.css.actionsBoxNode }).inject(this.topNode); this.officeActionsGroupNode = new Element("div", { "styles": this.css.actionsGroupNode }).inject(this.officeActionBoxNode); this.closeOfficeAction = this.createAction(this.officeActionsGroupNode, "closeOffice", MWF.LP.widget.closeOffice, function (e, node) { this.closeAttachmentOffice(e, node); }.bind(this)); if (this.closeOfficeAction) this.setActionDisabled(this.closeOfficeAction); }, loadMinActions: function () { var hiddenGroup = this.options.toolbarGroupHidden; if (!hiddenGroup.contains("edit")) { this.min_uploadAction = this.createAction(this.minActionAreaNode, "upload", MWF.LP.widget.upload, function (e, node) { this.uploadAttachment(e, node); }.bind(this)); this.min_deleteAction = this.createAction(this.minActionAreaNode, "delete", MWF.LP.widget["delete"], function (e, node) { this.deleteAttachment(e, node); }.bind(this)); if (!this.options.isReplaceHidden) { this.min_replaceAction = this.createAction(this.minActionAreaNode, "replace", MWF.LP.widget.replace, function (e, node) { this.replaceAttachment(e, node); }.bind(this)); } if(!layout.mobile){ this.min_editAttAction = this.createAction(this.minActionAreaNode, "editAtt", o2.LP.widget["editAtt"], function (e, node) { this.editAttachment(e, node); }.bind(this)); } } if (!hiddenGroup.contains("read")) { this.min_downloadAction = this.createAction(this.minActionAreaNode, "download", MWF.LP.widget.download , function (e, node) { this.downloadAttachment(e, node); }.bind(this)); this.min_downloadBatchAction = this.createAction(this.minActionAreaNode, "downloadBatch", MWF.LP.widget.downloadBatch , function (e, node) { this.downloadBatchAttachment(e, node); }.bind(this)); //if(!layout.mobile){ this.min_previewAttAction = this.createAction(this.minActionAreaNode, "previewAtt", o2.LP.widget["previewAtt"], function (e, node) { this.previewAttachment(e, node); }.bind(this)); //} } if (!hiddenGroup.contains("config")) { this.min_orderAction = this.createAction(this.minActionAreaNode, "order", MWF.LP.widget.order, function (e, node) { this.orderAttachment(e, node); }.bind(this)); } if (this.module.json.isOpenInOffice && this.module.json.officeControlName) { this.min_closeOfficeAction = this.createAction(this.minActionAreaNode, "closeOffice", MWF.LP.widget.closeOffice, function (e, node) { this.closeAttachmentOffice(e, node); }.bind(this)); if (this.min_closeOfficeAction) this.setActionDisabled(this.closeOfficeAction); } if (!hiddenGroup.contains("edit") || !hiddenGroup.contains("read")) { this.minSeparateNode = this.createSeparate(this.minActionAreaNode); } //this.createSeparate(this.configActionsGroupNode); if (this.options.isSizeChange) { //this.createSeparate(this.minActionAreaNode); if (!hiddenGroup.contains("view")) { this.sizeAction = this.createAction(this.minActionAreaNode, "max", MWF.LP.widget.min, function () { this.changeControllerSize(); }.bind(this)); } } }, closeAttachmentOffice: function () { var office = this.module.form.all[this.module.json.officeControlName]; if (office) { office.openFile(); if (this.min_closeOfficeAction) this.setActionDisabled(this.min_closeOfficeAction); if (this.closeOfficeAction) this.setActionDisabled(this.closeOfficeAction); } }, configAttachment: function(){ o2.Actions.load("x_general_assemble_control").SecurityClearanceAction["enable"]().then(function(json){ if (json.data.enable){ this.configAttachmentSecurity(); }else{ this.configAttachmentPower(); } }.bind(this)); }, getSecurityDefaultLabelList: function(){ if (this.securityLabelList) return Promise.resolve(this.securityLabelList); var _self = this return o2.Actions.load("x_general_assemble_control").SecurityClearanceAction["object"]().then(function(json){ return _self.securityLabelList = json.data; }); }, getSecurityLabelList: function(){ var _self = this; return this.getSecurityDefaultLabelList().then(function(list){ var label = _self.module.form.businessData.data.objectSecurityClearance; label = (!label && label!==0) ? Infinity : label; var o = {}; Object.keys(list).forEach(function(k){ if (list[k]<=label){ o[k] = list[k]; } }); return o; }) }, configAttachmentSecurity: function(){ var lp = MWF.xApplication.process.Xform.LP; var css = this.module.form.css; var node = new Element("div", { "styles": (layout.mobile ? css.attachmentPermissionNode_mobile : css.attachmentPermissionNode) }).inject(this.node); var attNames = new Element("div", { "styles": css.attachmentPermissionNamesNode }).inject(node); var attNamesTitle = new Element("div", { "styles": css.attachmentPermissionNamesTitleNode, "text": lp.attachmentPermissionInfo }).inject(attNames); var attNamesArea = new Element("div", { "styles": css.attachmentPermissionNamesAreaNode }).inject(attNames); if (this.selectedAttachments.length) { this.selectedAttachments.each(function (att) { var attNode = new Element("div", { "styles": css.attachmentPermissionAttNode, "text": att.data.name }).inject(attNamesArea); }.bind(this)); } var label = ""; if (this.selectedAttachments.length){ for (var i=0; i 0 )return; if (this.attachmentController) { var values = []; if (this.attachmentController.attachments.length) { values = this.attachmentController.attachments.map(function (d) { return d.data.name; }); } var modifedData = {}; modifedData[ this.json.id ] = values; this.form.workAction.saveData(function () { if(this.form.businessData.originalData)this.form.businessData.originalData[this.json.id] = values; }.bind(this), function(){ return true; }, this.form.businessData.work.id, modifedData, false); } }, _loadEvents: function (editorConfig) { Object.each(this.json.events, function (e, key) { if (e.code) { if (this.options.moduleEvents.indexOf(key) !== -1) { this.addEvent(key, function (event) { return this.form.Macro.fire(e.code, this, event); }.bind(this)); } else { this.node.addEvent(key, function (event) { return this.form.Macro.fire(e.code, this, event); }.bind(this)); } } }.bind(this)); }, isEmpty : function(){ var data = this.getData(); if( typeOf(data) === "array" ){ return data.length == 0 }else{ return !data; } }, /** * @summary 获取当前组件所有附件的标题.如果没有附件返回null * @example * var getAttachmentNames = this.form.get("name").getData(); * @return {StringArray|Null} 附件标题. */ getData: function () { return (this.attachmentController) ? this.attachmentController.getAttachmentNames() : null; }, createUploadFileNode: function (files) { var accept = "*"; if (!this.json.attachmentExtType || (this.json.attachmentExtType.indexOf("other") != -1 && !this.json.attachmentExtOtherType)) { } else { accepts = []; var otherType = this.json.attachmentExtOtherType; this.json.attachmentExtType.each(function (v) { switch (v) { case "word": accepts.push(".doc, .docx, .dot, .dotx"); break; case "excel": accepts.push(".xls, .xlsx, .xlsm, .xlt, .xltx"); break; case "ppt": accepts.push(".pptx, .ppt, .pot, .potx, .potm"); break; case "txt": accepts.push(".txt"); break; case "pic": accepts.push(".bmp, .gif, .psd, .jpeg, .jpg, .png"); break; case "pdf": accepts.push(".pdf"); break; case "zip": accepts.push(".zip, .rar"); break; case "audio": accepts.push(".mp3, .wav, .wma, .wmv, .flac, .ape"); break; case "video": accepts.push(".avi, .mkv, .mov, .ogg, .mp4, .mpeg"); break; case "other": if (this.json.attachmentExtOtherType) accepts.push(this.json.attachmentExtOtherType); break; } }.bind(this)); accept = accepts.join(", "); } var size = 0; if (this.json.attachmentSize) size = this.json.attachmentSize.toFloat(); this.attachmentController.doUploadAttachment({ "site": (this.json.site || this.json.id) }, this.form.workAction.action, "uploadAttachment", { "id": this.form.businessData.work.id }, null, function (o) { if (o.id) { this.form.workAction.getAttachment(o.id, this.form.businessData.work.id, function (json) { if (json.data) { if (!json.data.control) json.data.control = {}; this.form.businessData.attachmentList.push(json.data); this.attachmentController.addAttachment(json.data, o.messageId); } this.attachmentController.checkActions(); this.setAttachmentBusinessData(); this.fireEvent("upload", [json.data]); this.fireEvent("change"); this.save(); }.bind(this)) } this.attachmentController.checkActions(); }.bind(this), function (files) { if (files.length) { if ((files.length + this.attachmentController.attachments.length > this.attachmentController.options.attachmentCount) && this.attachmentController.options.attachmentCount > 0) { var content = MWF.xApplication.process.Xform.LP.uploadMore; content = content.replace("{n}", this.attachmentController.options.attachmentCount); this.form.notice(content, "error"); return false; } } this.uploadingFiles = files; if (this.json.uploadValidation && this.json.uploadValidation.code) { var flag = this.form.Macro.exec(this.json.uploadValidation.code, this); if (!flag) flag = MWF.xApplication.process.Xform.LP.notAttachmentValidation; if (flag.toString()!="true"){ this.form.notice(flag, "error"); return false; } } this.fireEvent("beforeUpload", [files]); return true; }.bind(this), true, accept, size, function (o) { //错误的回调 if (o.messageId && this.attachmentController.messageItemList) { var message = this.attachmentController.messageItemList[o.messageId]; if( message && message.node )message.node.destroy(); } }.bind(this), files); }, uploadAttachment: function (e, node, files) { if (window.o2android && window.o2android.postMessage) { var body = { type: "uploadAttachment", data: { site: this.json.site || this.json.id } }; window.o2android.postMessage(JSON.stringify(body)); } else if (window.o2android && window.o2android.uploadAttachment) { window.o2android.uploadAttachment((this.json.site || this.json.id)); } else if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.uploadAttachment) { window.webkit.messageHandlers.uploadAttachment.postMessage({ "site": (this.json.site || this.json.id) }); } else { // if (!this.uploadFileAreaNode){ this.createUploadFileNode(files); // } // this.fileUploadNode.click(); } }, deleteAttachments: function (e, node, attachments) { var names = []; attachments.each(function (attachment) { names.push(attachment.data.name); }.bind(this)); // if ((window.o2 && window.o2.replaceAttachment) || (window.webkit && window.webkit.messageHandlers)){ // if (window.confirm(MWF.xApplication.process.Xform.LP.deleteAttachment+"( "+names.join(", ")+" )")){ // while (attachments.length){ // attachment = attachments.shift(); // this.deleteAttachment(attachment); // } // } // }else { // var tmpNode = new Element("div", { // "styles": { // "background-color": "#0000ff", // "border-style": "solid", // "border-color": "#fff", // "border-width": "1", // "box-shadow": "0px 0px 20px #999", // "z-index": "20000", // "overflow": "hidden", // "font-size": "14px", // "height": "160px", // "padding": "0px", // "width": "300px", // "position": "absolute", // "top": "50px", // "left": "20px", // "opacity": 1, // "border-radius": "5px" // } // }).inject(this.form.app.content); var _self = this; this.form.confirm("warn", e, MWF.xApplication.process.Xform.LP.deleteAttachmentTitle, MWF.xApplication.process.Xform.LP.deleteAttachment + "( " + o2.txt(names.join(", ")) + " )", 300, 120, function () { while (attachments.length) { var attachment = attachments.shift(); _self.deleteAttachment(attachment); } this.close(); }, function () { this.close(); }, null, null, this.form.json.confirmStyle); }, editAttachment: function (attachments) { var att = attachments[0]; switch (this.json.officeTool) { case "LibreOffice": this.editLibreOffice(att); break; case "OfficeOnline": this.editOfficeOnline(att); break; case "OnlyOffice": this.editOnlyOffice(att); break; case "YozoOffice": this.editYozoOffice(att); break; case "WpsOffice": this.editWpsOffice(att); break; default : this.editLibreOffice(att); } }, editYozoOffice : function (att){ var jars ; if(att.data.activity){ jars = "x_processplatform_assemble_surface"; } if(att.data.categoryId){ jars = "x_cms_assemble_control"; } var options = { "documentId": att.data.id, "mode":"write", "jars" : jars, "appId": "YozoOfficeEditor" + att.data.id }; layout.openApplication(null, "YozoOfficeEditor", options); }, editOfficeOnline : function (att){ var jars ; if(att.data.activity){ jars = "x_processplatform_assemble_surface"; } if(att.data.categoryId){ jars = "x_cms_assemble_control"; } var options = { "documentId": att.data.id, "mode":"write", "jars" : jars, "appId": "OfficeOnlineEditor" + att.data.id }; layout.openApplication(null, "OfficeOnlineEditor", options); }, editOnlyOffice : function (att){ var jars ; if(att.data.activity){ jars = "x_processplatform_assemble_surface"; } if(att.data.categoryId){ jars = "x_cms_assemble_control"; } var options = { "documentId": att.data.id, "mode":"edit", "jars" : jars, "appId": "OnlyOfficeEditor" + att.data.id }; layout.openApplication(null, "OnlyOfficeEditor", options); }, editWpsOffice : function (att){ var jars ; if(att.data.activity){ jars = "x_processplatform_assemble_surface"; } if(att.data.categoryId){ jars = "x_cms_assemble_control"; } var options = { "documentId": att.data.id, "mode":"write", "jars" : jars, "appId": "WpsOfficeEditor" + att.data.id }; layout.openApplication(null, "WpsOfficeEditor", options); }, editLibreOffice : function (att){ this.form.notice("not support"); }, previewAttachment: function (attachments) { var att = attachments[0]; new MWF.xApplication.process.Xform.AttachmenPreview(att,this); }, deleteAttachment: function (attachment) { this.fireEvent("delete", [attachment.data]); var id = attachment.data.id; this.form.workAction.deleteAttachment(attachment.data.id, this.form.businessData.work.id, function (josn) { this.attachmentController.removeAttachment(attachment); this.attachmentController.checkActions(); for( var i=0; i"; // this.replaceFileAreaNode.set("html", html); // // this.fileReplaceNode = this.replaceFileAreaNode.getFirst(); // this.fileReplaceNode.addEvent("change", function(){ // // var files = this.fileReplaceNode.files; // if (files.length){ // for (var i = 0; i < files.length; i++) { // var file = files.item(i); // // var formData = new FormData(); // formData.append('file', file); // // formData.append('site', this.json.id); // // this.form.workAction.replaceAttachment(attachment.data.id, this.form.businessData.work.id ,function(o, text){ // this.form.workAction.getAttachment(attachment.data.id, this.form.businessData.work.id, function(json){ // attachment.data = json.data; // attachment.reload(); // this.attachmentController.checkActions(); // }.bind(this)) // }.bind(this), null, formData, file); // } // } // }.bind(this)); }, replaceAttachmentFile: function (attachment) { //if (!this.replaceFileAreaNode){ this.createReplaceFileNode(attachment); // } // this.fileReplaceNode.click(); }, queryDownload : function( att ){ if( this.json.events && this.json.events.queryDownload && this.json.events.queryDownload.code ){ var flag = this.form.Macro.exec(this.json.events.queryDownload.code, att ); if( flag === false ){ return false }else{ return true; } }else{ return true; } }, queryOpen : function( att ){ if( this.json.events && this.json.events.queryOpen && this.json.events.queryOpen.code ){ var flag = this.form.Macro.exec(this.json.events.queryOpen.code, att ); if( flag === false ){ return false }else{ return true; } }else{ return true; } }, //小程序文件是否支持打开 checkMiniProgramFile: function(ext) { var exts = ["doc", "docx", "xls", "xlsx", "ppt", "pptx", "pdf"]; for(var i = 0; i < exts.length; i++){ if(ext === exts[i]){ return true; } } return false; }, addMessage: function(data) { if (layout.desktop.message) { var msg = { "subject": MWF.xApplication.process.Xform.LP.taskProcessed, "content": data }; layout.desktop.message.addTooltip(msg); return layout.desktop.message.addMessage(msg); } else { if (this.app.inBrowser) { this.inBrowserDkg(data); } } }, downloadAttachment: function (e, node, attachments) { var data = this.form.businessData; var isWorkCompleted = data.work && data.work.completedTime; var workId = data.work.id; var actionUrl = "getAttachmentUrl"; var actionData = "getAttachmentStream"; var urlWorkKey = "work"; if (isWorkCompleted){ workId = (data.workCompleted) ? data.workCompleted.id : workId; actionUrl = "getAttachmentWorkcompletedUrl"; actionData = "getWorkcompletedAttachmentStream"; urlWorkKey = "workCompleted"; } var client = this.getDownloadAttachmentClientType(); console.log(client+" 客户端"); attachments.each(function (att) { if( !this.queryDownload( att ) )return; switch (client){ case "flutter": var body = { type: "downloadAttachment", data: { attachmentId: att.data.id } }; window.o2android.postMessage(JSON.stringify(body)); break case "android": window.o2android.downloadAttachment(att.data.id); break; case "ios": window.webkit.messageHandlers.downloadAttachment.postMessage({ "id": att.data.id, "site": (this.json.site || this.json.id) }); break; case "wx": if(this.checkMiniProgramFile(att.data.extension)) { wx.miniProgram.navigateTo({ url: '../file/download?attId=' + att.data.id + '&type=work&'+urlWorkKey+'=' + workId }); } break; case "mobile": this.form.workAction[actionUrl](att.data.id, workId, function (url) { var xtoken = layout.session.token; // window.location = o2.filterUrl(url + "?"+o2.tokenName+"=" + xtoken); window.location = url + "?"+o2.tokenName+"=" + xtoken; }); break; case "pcClient": this.form.workAction[actionUrl](att.data.id, workId, function (url) { var xtoken = layout.session.token; // window.location = o2.filterUrl(url + "?"+o2.tokenName+"=" + xtoken); window.location = url + "?"+o2.tokenName+"=" + xtoken; }); break; default: this.form.workAction[actionData](att.data.id, workId); } this.fireEvent("download",[att]); }.bind(this)); }, getDownloadAttachmentClientType: function(){ if (window.o2android && window.o2android.postMessage) { return "flutter"; } if (window.o2android && window.o2android.downloadAttachment){ return "android"; } if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.downloadAttachment){ return "ios"; } if (window.wx && window.__wxjs_environment === 'miniprogram'){ return "wx"; } if (layout.mobile){ return "mobile"; } if (o2.thirdparty.isDingdingPC() || o2.thirdparty.isQywxPC()){ return "pcClient"; } return "pc"; }, openAttachment: function (e, node, attachments) { var data = this.form.businessData; var isWorkCompleted = data.work && data.work.completedTime; var workId = data.work.id; var actionUrl = "getAttachmentUrl"; var actionData = "getAttachmentData"; var urlWorkKey = "work"; if (isWorkCompleted){ workId = (data.workCompleted) ? data.workCompleted.id : workId; actionUrl = "getAttachmentWorkcompletedUrl"; actionData = "getWorkcompletedAttachmentData"; urlWorkKey = "workCompleted"; } var client = this.getDownloadAttachmentClientType(); console.log(client+" 客户端"); attachments.each(function (att) { if( !this.queryOpen( att ) )return; switch (client){ case "flutter": var body = { type: "downloadAttachment", data: { attachmentId: att.data.id } }; window.o2android.postMessage(JSON.stringify(body)); break case "android": window.o2android.downloadAttachment(att.data.id); break; case "ios": window.webkit.messageHandlers.downloadAttachment.postMessage({ "id": att.data.id, "site": (this.json.site || this.json.id) }); break; case "wx": if(this.checkMiniProgramFile(att.data.extension)) { wx.miniProgram.navigateTo({ url: '../file/download?attId=' + att.data.id + '&type=work&'+urlWorkKey+'=' + workId }); } break; case "mobile": this.form.workAction[actionUrl](att.data.id, workId, function (url) { var xtoken = layout.session.token; // window.location = o2.filterUrl(url + "?"+o2.tokenName+"=" + xtoken); window.location = url + "?"+o2.tokenName+"=" + xtoken; }); break; case "pcClient": this.form.workAction[actionUrl](att.data.id, workId, function (url) { var xtoken = layout.session.token; // window.location = o2.filterUrl(url + "?"+o2.tokenName+"=" + xtoken); window.location = url + "?"+o2.tokenName+"=" + xtoken; }); break; default: this.form.workAction[actionData](att.data.id, workId); } this.fireEvent("open",[att]); }.bind(this)); }, getAttachmentUrl: function (attachment, callback) { if (this.form.businessData.work && !this.form.businessData.work.completedTime) { this.form.workAction.getAttachmentUrl(attachment.data.id, this.form.businessData.work.id, callback); } else { this.form.workAction.getAttachmentWorkcompletedUrl(attachment.data.id, this.form.businessData.workCompleted.id, callback); } }, getTextData: function(){ var data = []; this.attachmentController.attachments.each(function(att){ var o = { "id": att.data.id, "person": att.data.person, "creatorUid": att.data.creatorUid, "name": att.data.name, "orderNumber": att.data.orderNumber, "length": att.data.length, "extension": att.data.extension, "lastUpdateTime": att.data.lastUpdateTime, "activityName": att.data.activityName, "control" : att.data.control } data.push(o); }); return data; }, /** * @summary 为组件重新设置附件,该附件必须已经上传。 * @param data {Array}. *
[{
     *     "id": "56c4e86f-a4c8-4cc2-a150-1a0d2c5febcb",   //附件ID
     *     "name": "133203a2-92e6-4653-9954-161b72ddb7f9.png", //附件名称
     *     "extension": "png",                             //附件扩展名
     *     "length": 43864,                                //附件大小
     *     "person": "xx@huqi@P",                          //附件上传人
     *     "lastUpdateTime": "2018-09-27 15:50:34",        //最后的修改时间
     *     "lastUpdatePerson": "xx@huqi@P",                //最后的修改人
     *     "activity": "e31ad938-c495-45a6-8d77-b8a9b61a165b", //附件上传的活动ID
     *     "activityName": "申请人",                           //附件上传的活动名称
     *     "activityType": "manual",                           //附件上传的活动类型
     *     "site": "$mediaOpinion",                        //附件存储位置(一般用于区分附件在哪个表单元素中显示)
     *     "type": "image/png",                             //附件类型(contentType)
     *     "control": {}
     * }]
*/ setData: function(data){ this.attachmentController.clear(); ( data || [] ).each(function (att) { var attachment = this.form.businessData.attachmentList.find(function(a){ return a.id==att.id; }); var attData = attachment || att; this.attachmentController.addAttachment(attData); }.bind(this)); this.setAttachmentBusinessData(); }, createErrorNode: function (text) { var node = new Element("div"); var iconNode = new Element("div", { "styles": { "width": "20px", "height": "20px", "float": "left", "background": "url(" + "../x_component_process_Xform/$Form/default/icon/error.png) center center no-repeat" } }).inject(node); var textNode = new Element("div", { "styles": { "line-height": "20px", "margin-left": "20px", "color": "red", "word-break": "keep-all" }, "text": text }).inject(node); return node; }, notValidationMode: function (text) { if (!this.isNotValidationMode) { this.isNotValidationMode = true; this.node.store("borderStyle", this.node.getStyles("border-left", "border-right", "border-top", "border-bottom")); this.node.setStyle("border", "1px solid red"); this.errNode = this.createErrorNode(text).inject(this.node, "after"); this.showNotValidationMode(this.node); var parentNode = this.errNode; while( parentNode && parentNode.offsetParent === null ){ parentNode = parentNode.getParent(); } if ( parentNode && !parentNode.isIntoView()) parentNode.scrollIntoView(false); } }, showNotValidationMode: function (node) { var p = node.getParent("div"); if (p) { if (p.get("MWFtype") == "tab$Content") { if (p.getParent("div").getStyle("display") == "none") { var contentAreaNode = p.getParent("div").getParent("div"); var tabAreaNode = contentAreaNode.getPrevious("div"); var idx = contentAreaNode.getChildren().indexOf(p.getParent("div")); var tabNode = tabAreaNode.getLast().getFirst().getChildren()[idx]; tabNode.click(); p = tabAreaNode.getParent("div"); } } this.showNotValidationMode(p); } }, validationMode: function () { if (this.isNotValidationMode) { this.isNotValidationMode = false; this.node.setStyles(this.node.retrieve("borderStyle")); if (this.errNode) { this.errNode.destroy(); this.errNode = null; } } }, validationConfigItem: function (routeName, data) { var flag = (data.status == "all") ? true : (routeName == data.decision); if (flag) { var n = this.getData() || []; var v = (data.valueType == "value") ? n : n.length; switch (data.operateor) { case "isnull": if (!v) { this.notValidationMode(data.prompt); return false; } break; case "notnull": if (v) { this.notValidationMode(data.prompt); return false; } break; case "gt": if (v > data.value) { this.notValidationMode(data.prompt); return false; } break; case "lt": if (v < data.value) { this.notValidationMode(data.prompt); return false; } break; case "equal": if (v == data.value) { this.notValidationMode(data.prompt); return false; } break; case "neq": if (v != data.value) { this.notValidationMode(data.prompt); return false; } break; case "contain": if (v.indexOf(data.value) != -1) { this.notValidationMode(data.prompt); return false; } break; case "notcontain": if (v.indexOf(data.value) == -1) { this.notValidationMode(data.prompt); return false; } break; } } return true; }, validationConfig: function (routeName, opinion) { if (this.json.validationConfig) { if (this.json.validationConfig.length) { for (var i = 0; i < this.json.validationConfig.length; i++) { var data = this.json.validationConfig[i]; if (!this.validationConfigItem(routeName, data)) return false; } } return true; } return true; }, getExcelData: function(){ return ""; }, setExcelData: function(data){ }, }); MWF.xApplication.process.Xform.AttachmenPreview = new Class({ Implements: [Options, Events], initialize : function(att,app ){ this.att = att; this.app = app; this.load(); }, load:function(){ var extension = this.att.data.extension; if(extension === "ofd"){ //ofd预览暂时屏蔽ie,等兼容性改好了开启 if(Browser.name!=="ie"){ this.previewOfd(); } } if(extension === "zip"){ this.previewZip(); } if(extension === "pdf"){ this.previewPdf(); } if(["doc","docx","xls","xlsx","ppt","pptx"].contains(extension)){ this.previewOffice(); } if(["png","jpg","bmp","jpeg","gif"].contains(extension)){ this.previewImage(); } if(extension === "js"){ this.previewAce("javascript"); } if(extension === "css"){ this.previewAce("css"); } if(extension === "java"){ this.previewAce("java"); } if(extension === "json"){ this.previewAce("json"); } if(extension === "xml"){ this.previewAce("xml"); } if(extension === "php"){ this.previewAce("php"); } if(["html","htm","xhtml"].contains(extension)){ this.previewAce("html"); } if(["log","md","txt"].contains(extension)){ this.previewAce("text"); } }, previewZip: function () { //zip压缩包预览 var _self = this; var zipViewNode = new Element("div",{"text":"loadding..."}); o2.load(["../o2_lib/jszip/jszip.min.js", "../o2_lib/jszip/jszip-utils.min.js"], function () { this.app.getAttachmentUrl(this.att, function (url) { var width, height; if( layout.mobile ){ var size = $(document.body).getSize(); width = size.x+"px"; height = size.y+"px"; }else{ width = "660px"; height = "510px"; } o2.require("MWF.widget.Tree", function(){ var dlg = o2.DL.open({ "title": _self.att.data.name, "width": width, "height": height, "mask": true, "content": zipViewNode, "container": null, "positionNode": document.body, "onQueryClose": function () { zipViewNode.destroy(); }, "buttonList": [ { "text": "关闭", "action": function () { dlg.close(); } } ], "onPostShow": function () { dlg.reCenter(); }, "onPostLoad" : function(){ } }); }.bind(this)); zipViewNode.empty(); JSZipUtils.getBinaryContent(url, function (err, data) { JSZip.loadAsync(data).then(function (zip) { var nodeList = []; zip.forEach(function (relativePath, zipEntry) { nodeList.push(zipEntry.name); }); var tree = new MWF.widget.Tree(zipViewNode, {"style":"form"}); var treeData = _pathToTree(nodeList); tree.load(treeData); }); }); }.bind(this)); }.bind(this)); function _pathToTree(pathList) { var pathJsonList = []; for (var i = 0; i < pathList.length; i++) { var chain = pathList[i].split("/"); var currentNode = pathJsonList; for (var j = 0; j < chain.length; j++) { if (chain[j] === "") { break; } var wantedNode = chain[j]; var lastNode = currentNode; for (var k = 0; k < currentNode.length; k++) { if (currentNode[k].name == wantedNode) { currentNode = currentNode[k].sub; break; } } if (lastNode == currentNode) { var obj = { key: pathList[i], name: wantedNode, title:wantedNode, text:wantedNode, sub: [] }; var newNode = (currentNode[k] = obj); if (wantedNode.indexOf(".") > -1) { obj.dir = false; obj.icon = "file.png"; delete obj.sub; } else { obj.dir = true; obj.expand = false; currentNode = newNode.sub; //delete obj.sub; } } else { delete currentNode.sub; } } } var nodes = []; var folder = { "title" : _self.att.name, "text" : _self.att.name, "sub" : [] }; pathJsonList.each(function(path){ folder.sub.push(path); }) _sortPath(folder, nodes); return nodes; } function _sortPath(pathJsonList, nodes) { var folderList = []; pathJsonList.sub.each(function (file) { if (file.dir) { folderList.push(file); } }); pathJsonList.sub.each(function (file) { if (!file.dir) { folderList.push(file); } }); folderList.each(function (file) { var node = { text: file.name, title: file.name, expand : false }; if (!file.dir) { node.icon = "file.png"; } nodes.push(node); if(file.sub && file.sub.length>0){ node.sub = []; _sortPath(file,node.sub); } }) } }, previewPdf : function(){ this.app.getAttachmentUrl(this.att, function (url) { if(layout.mobile){ location.href = "../o2_lib/pdfjs/web/viewer.html?file=" + url; }else{ window.open("../o2_lib/pdfjs/web/viewer.html?file=" + url); } }); }, previewOffice : function(){ switch (this.app.json.officeTool) { case "LibreOffice": this.previewLibreOffice(); break; case "OfficeOnline": this.previewOfficeOnline(); break; case "OnlyOffice": this.previewOnlyOffice(); break; case "YozoOffice": this.previewYozoOffice(); break; case "WpsOffice": this.previewWpsOffice(); break; default : this.previewLibreOffice(); } }, previewOfficeOnline : function (){ var att = this.att; var jars ; if(att.data.activity){ jars = "x_processplatform_assemble_surface"; } if(att.data.categoryId){ jars = "x_cms_assemble_control"; } var options = { "documentId": att.data.id, "mode":"view", "jars" : jars, "appId": "OfficeOnlineEditor" + att.data.id }; layout.openApplication(null, "OfficeOnlineEditor", options); }, previewOnlyOffice : function (){ var att = this.att; var jars ; if(att.data.activity){ jars = "x_processplatform_assemble_surface"; } if(att.data.categoryId){ jars = "x_cms_assemble_control"; } var options = { "documentId": att.data.id, "mode":"view", "jars" : jars, "appId": "OnlyOfficeEditor" + att.data.id }; layout.openApplication(null, "OnlyOfficeEditor", options); }, previewYozoOffice : function (){ var att = this.att; var jars ; if(att.data.activity){ jars = "x_processplatform_assemble_surface"; } if(att.data.categoryId){ jars = "x_cms_assemble_control"; } var options = { "documentId": att.data.id, "mode":"view", "jars" : jars, "appId": "YozoOfficeEditor" + att.data.id }; layout.openApplication(null, "YozoOfficeEditor", options); }, previewWpsOffice : function (){ var att = this.att; var jars ; if(att.data.activity){ jars = "x_processplatform_assemble_surface"; } if(att.data.categoryId){ jars = "x_cms_assemble_control"; } var options = { "documentId": att.data.id, "mode":"view", "jars" : jars, "appId": "WpsOfficeEditor" + att.data.id }; layout.openApplication(null, "WpsOfficeEditor", options); }, previewLibreOffice : function (){ if(!layout.serviceAddressList["x_libreoffice_assemble_control"]){ this.app.form.notice("Please Install LibreOffice"); return; } var srv = layout.serviceAddressList["x_libreoffice_assemble_control"]; var protocol = window.location.protocol; var module; if(this.att.data.activity){ module = "processPlatform"; } if(this.att.data.categoryId){ module = "cms"; } var defaultPort = layout.config.app_protocol==='https' ? "443" : "80"; var appPort = srv.port || window.location.port; var url = protocol + "//" + (srv.host || window.location.hostname) + ":" + ((!appPort || appPort.toString()===defaultPort) ? "" : ":"+appPort) + srv.context + "/jaxrs/office/doc/to/pdf/"+ module +"/" + this.att.data.id; window.open("../o2_lib/pdfjs/web/viewer.html?file=" + url); }, previewOfd : function(){ this.app.getAttachmentUrl(this.att, function (url) { window.open("../o2_lib/ofdjs/index.html?file=" + url) }); }, previewImage : function(){ this.app.getAttachmentUrl(this.att, function (url) { var imgNode = new Element("img",{"src":url,"alt":this.att.name}).inject(document.body).hide(); o2.loadCss("../o2_lib/viewer/viewer.css", document.body,function(){ o2.load("../o2_lib/viewer/viewer.js", function(){ this.viewer = new Viewer(imgNode,{ navbar : false, toolbar : true, hidden : function(){ imgNode.destroy(); this.viewer.destroy(); }.bind(this) }); this.viewer.show(); }.bind(this)); }.bind(this)); }.bind(this)); }, previewAce:function(type){ this.app.getAttachmentUrl(this.att, function (url) { o2.require("o2.widget.ace", null, false); var fileRequest = new Request({ url: url, method: 'get', withCredentials: true, onSuccess: function(responseText){ var editorNode = new Element("div",{"style":"padding:10px"}); editorNode.set("text",responseText); o2.widget.ace.load(function(){ o2.load("../o2_lib/ace/src-min-noconflict/ext-static_highlight.js", function(){ var highlight = ace.require("ace/ext/static_highlight"); highlight(editorNode, {mode: "ace/mode/"+ type , theme: "ace/theme/tomorrow", "fontSize": 30,"showLineNumbers":true}); }.bind(this)); }.bind(this)); var width, height; if( layout.mobile ){ var size = $(document.body).getSize(); width = size.x+"px"; height = size.y+"px"; }else{ width = "960px"; height = "610px"; } var dlg = o2.DL.open({ "title": this.att.data.name, "width": width, "height": height, "mask": true, "content": editorNode, "container": null, "positionNode": document.body, "onQueryClose": function () { editorNode.destroy(); }.bind(this), "buttonList": [ { "text": "关闭", "action": function () { dlg.close(); }.bind(this) } ], "onPostShow": function () { dlg.reCenter(); }.bind(this) }); }.bind(this), onFailure: function(){ console.log('text', 'Sorry, your request failed :('); } }); fileRequest.send(); }.bind(this)); }, }); MWF.xApplication.process.Xform.AttachmentDg = MWF.APPAttachmentDg = new Class({ Extends: MWF.APPAttachment, loadAttachmentController: function () { //MWF.require("MWF.widget.AttachmentController", function() { var options = { "style": this.json.style || "default", "title": MWF.xApplication.process.Xform.LP.attachmentArea, "listStyle": this.json.listStyle || "icon", "size": this.json.size || "max", "resize": this.getFlagDefaultFalse("resize"), "attachmentCount": this.json.attachmentCount || 0, "isUpload": this.getFlagDefaultFalse("isUpload"), "isDelete": this.getFlagDefaultFalse("isDelete"), "isReplace": this.getFlagDefaultFalse("isReplace"), "isDownload": this.getFlagDefaultFalse("isDownload"), "isDownloadBatch": this.getFlagDefaultFalse("isDownloadBatch"), "isPreviewAtt": this.getFlagDefaultFalse("isPreviewAtt"), "isEditAtt": this.getFlagDefaultFalse("isEditAtt"), "isSizeChange": this.getFlagDefaultFalse("isSizeChange"), "isConfig": this.getFlagDefaultTrue("isConfig"), "isOrder": this.getFlagDefaultTrue("isOrder"), "dblclick": this.json.dblclick, "readonly": (this.json.readonly === "y" || this.json.readonly === "true" || this.json.isReadonly || this.form.json.isReadonly), "availableListStyles": this.json.availableListStyles ? this.json.availableListStyles : ["list", "seq", "icon", "preview"], "isDeleteOption": this.json.isDelete, "isReplaceOption": this.json.isReplace, "toolbarGroupHidden": this.json.toolbarGroupHidden || [], "ignoreSite": this.json.ignoreSite, "onOrder": function () { this.fireEvent("change"); }.bind(this) }; if (this.readonly) options.readonly = true; if (this.form.json.attachmentStyle) { options = Object.merge(options, this.form.json.attachmentStyle); } this.fireEvent("queryLoadController", [options]); this.attachmentController = new MWF.xApplication.process.Xform.AttachmentController(this.node, this, options); this.fireEvent("loadController"); this.attachmentController.load(); this.fireEvent("postLoadController"); // var d = this._getBusinessData(); // if (d) d.each(function (att) { // this.attachmentController.addAttachment(att); // }.bind(this)); if(this.json.ignoreSite) { ( this._getBusinessData() || [] ).each(function (att) { var flag = this.form.businessData.attachmentList.some(function (attData) { return att.id === attData.id; }.bind(this)); if(flag)this.attachmentController.addAttachment(att); }.bind(this)); }else{ this.form.businessData.attachmentList.each(function (att) { if (att.site === (this.json.site || this.json.id)) this.attachmentController.addAttachment(att); }.bind(this)); } this.setAttachmentBusinessData(); }, setAttachmentBusinessData: function(){ if (this.attachmentController) { if (this.attachmentController.attachments.length) { var values = this.attachmentController.attachments.map(function (d) { return { "control": d.data.control, "name": d.data.name, "id": d.data.id, "person": d.data.person, "creatorUid": d.data.creatorUid, "orderNumber": d.data.orderNumber, "length": d.data.length, "extension": d.data.extension, "lastUpdateTime": d.data.lastUpdateTime, "activityName": d.data.activityName }; }); this._setBusinessData(values); } else { this._setBusinessData([]); } } }, uploadAttachment: function (e, node, files) { if (window.o2android && window.o2android.postMessage) { var body = { type: "uploadAttachmentForDatagrid", data: { param: this.json.id, site: this.json.site || this.json.id } }; window.o2android.postMessage(JSON.stringify(body)); } else if (window.o2android && window.o2android.uploadAttachmentForDatagrid) { window.o2android.uploadAttachmentForDatagrid((this.json.site || this.json.id), this.json.id); } else if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.uploadAttachmentForDatagrid) { window.webkit.messageHandlers.uploadAttachmentForDatagrid.postMessage({ "site": (this.json.site || this.json.id) , "param":this.json.id}); } else { // if (!this.uploadFileAreaNode){ this.createUploadFileNode(files); // } // this.fileUploadNode.click(); } }, replaceAttachment: function (e, node, attachment) { if (window.o2android && window.o2android.postMessage) { var body = { type: "replaceAttachmentForDatagrid", data: { attachmentId: attachment.data.id, param: this.json.id, site: this.json.site || this.json.id } }; window.o2android.postMessage(JSON.stringify(body)); } else if (window.o2android && window.o2android.replaceAttachmentForDatagrid) { window.o2android.replaceAttachmentForDatagrid(attachment.data.id, (this.json.site || this.json.id), this.json.id); } else if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.replaceAttachmentForDatagrid) { window.webkit.messageHandlers.replaceAttachmentForDatagrid.postMessage({ "id": attachment.data.id, "site": (this.json.site || this.json.id) , "param":this.json.id}); } else { var _self = this; this.form.confirm("warn", e, MWF.xApplication.process.Xform.LP.replaceAttachmentTitle, MWF.xApplication.process.Xform.LP.replaceAttachment + "( " + attachment.data.name + " )", 350, 120, function () { _self.replaceAttachmentFile(attachment); this.close(); }, function () { this.close(); }, null, null, this.form.json.confirmStyle); } } });