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);
// // }
// // }
// }
},
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").getattachmentworkcompleted {
office.openedattachment = { "id": att.id, "site": this.module.json.name, "name": att.name };
office.officeocx.beginopenfrom;
}.bind(this));
} else {
mwf.actions.get("x_processplatform_assemble_surface").getattachment {
office.openedattachment = { "id": att.id, "site": this.module.json.name, "name": att.name };
office.officeocx.beginopenfrom;
}.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();
},
checkactions: function () {
// if (this.options.readonly){
// this.setreadonly();
// }else{
this.checkuploadaction();
this.checkdeleteaction();
this.checkreplaceaction();
this.checkpreviewattaction();
this.checkeditattaction();
//this.checkofficeaction();
this.checkdownloadaction();
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"].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", "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));
//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{
return object.keys(list).find((key)=>{
return list[key]===data.objectsecurityclearance;
});
});
}
if (this.options.size=="min"){
this.attachments.push(new o2.widget.attachmentcontroller.attachmentmin(data, this, messageid, ischeckposition));
}else{
this.attachments.push(new o2.widget.attachmentcontroller.attachment(data, this, messageid, ischeckposition));
}
this.checkactions();
}
});
/** @class attachment 附件组件。
* @o2cn 附件
* @example
* //可以在脚本中获取该组件
* //方法1:
* var attachment = this.form.get("name"); //获取组件
* //方法2
* var attachment = this.target; //在组件事件脚本中获取
* @extends mwf.xapplication.process.xform.$module
* @o2category formcomponents
* @o2range {process|cms}
* @hideconstructor
*/
mwf.xapplication.process.xform.attachment = mwf.appattachment = new class(
/** @lends mwf.xapplication.process.xform.attachment# */
{
extends: mwf.app$module,
options: {
/**
* @event mwf.xapplication.process.xform.attachment#postload
* @ignore
*/
"moduleevents": [
/**附件组件(this.target)加载前触发。
* @event mwf.xapplication.process.xform.attachment#queryload
* @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zts|组件事件说明}
*/
"queryload",
/**附件容器(this.target.attachmentcontroller)初始化之前触发,可以通过this.event获取附件容器的选项。
* @event mwf.xapplication.process.xform.attachment#queryloadcontroller
* @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zts|组件事件说明}
*/
"queryloadcontroller",
/**附件容器(this.target.attachmentcontroller)初始化之后,加载之前触发。
* @event mwf.xapplication.process.xform.attachment#loadcontroller
* @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zts|组件事件说明}
*/
"loadcontroller",
/**附件容器(this.target.attachmentcontroller)加载之后触发,但这时还未加载具体的附件。
* @event mwf.xapplication.process.xform.attachment#postloadcontroller
* @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zts|组件事件说明}
*/
"postloadcontroller",
/**
* 附件组件(this.target)加载完成后触发。这时候附件容器和每个附件都已加载完成。
* @event mwf.xapplication.process.xform.attachment#load
* @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zts|组件事件说明}
*/
"load",
/**
* 附件组件(this.target)加载完成后触发。这时候附件容器和每个附件都已加载完成。
* @event mwf.xapplication.process.xform.attachment#afterload
* @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zts|组件事件说明}
*/
"afterload",
/**
* 加载每个附件前触发。本事件中可以通过this.event获取加载的附件对象
* @event mwf.xapplication.process.xform.attachment#beforeloadattachment
* @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zts|组件事件说明}
*/
"beforeloadattachment",
/**
* 加载每个附件后触发。本事件中可以通过this.event获取加载的附件对象
* @event mwf.xapplication.process.xform.attachment#loadattachment
* @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zts|组件事件说明}
*/
"loadattachment",
/**
* 附件上传前触发。本事件中可以通过this.event获取上传的文件数组
* @event mwf.xapplication.process.xform.attachment#beforeupload
* @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zts|组件事件说明}
*/
"beforeupload",
/**
* 附件上传后触发。本事件中可以通过this.event获取上传附件的数据
* @event mwf.xapplication.process.xform.attachment#upload
* @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zts|组件事件说明}
*/
"upload",
/**
* 删除附件前触发。本事件中可以通过this.event获取被删附件的数据
* @event mwf.xapplication.process.xform.attachment#delete
* @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zts|组件事件说明}
*/
"delete",
/**
* 删除附件后触发。本事件中可以通过this.event获取被删附件的数据
* @event mwf.xapplication.process.xform.attachment#afterdelete
* @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zts|组件事件说明}
*/
"afterdelete",
/**
* 附件有变化的时候会被触发,包括上传、替换、删除、排序
* @event mwf.xapplication.process.xform.attachment#change
* @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zts|组件事件说明}
*/
"change",
/**
* 下载附件后触发。本事件中可以通过this.event获取被下载附件对象
* @event mwf.xapplication.process.xform.attachment#download
* @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zts|组件事件说明}
*/
"download",
/**
* 打开附件后触发。本事件中可以通过this.event获取被打开附件对象
* @event mwf.xapplication.process.xform.attachment#open
* @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zts|组件事件说明}
*/
"open",
/**
* 选中附件后触发。本事件中可以通过this.event获取被选中的附件对象
* @event mwf.xapplication.process.xform.attachment#select
* @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zts|组件事件说明}
*/
"select",
/**
* 取消选中附件后触发。本事件中可以通过this.event获取被取消选中的附件对象
* @event mwf.xapplication.process.xform.attachment#unselect
* @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zts|组件事件说明}
*/
"unselect"
]
},
initialize: function (node, json, form, options) {
this.node = $(node);
this.node.store("module", this);
this.json = json;
this.form = form;
this.field = true;
this.fieldmoduleloaded = false;
},
_loaduserinterface: function () {
this.node.empty();
if (this.form.businessdata.work.starttime){
this.loadattachmentcontroller();
this.fireevent("afterload");
}
this.fieldmoduleloaded = true;
},
/*
* @summary 重新加载附件。会触发queryloadcontroller、loadcontroller和postloadcontroller事件。
* @example
* this.form.get("fieldid").reload(); //重新加载
*/
reload: function(){
this.node.empty();
if (this.form.businessdata.work.starttime){
this.loadattachmentcontroller();
}
},
getflagdefaultfalse: function( key ){
if( this.json[key] === "y" || this.json[key] === "true" )return true;
if( this.json[key] === "hidden" )return "hidden";
return false;
},
getflagdefaulttrue: function( key ){
if( this.json[key] === "n" || this.json[key] === "false" )return false;
if( this.json[key] === "hidden" )return "hidden";
return true;
},
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"),
"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 || [],
"onorder": function () {
this.fireevent("change");
this.save();
}.bind(this)
};
if (this.readonly) options.readonly = true;
if (this.form.json.attachmentstyle) {
options = object.merge(options, this.form.json.attachmentstyle);
}
//this.attachmentcontroller = new mwf.widget.atter(this.node, this, options);
this.fireevent("queryloadcontroller", [options]);
/**
* @summary 附件容器.
* @member {mwf.xapplication.process.xform.attachmentcontroller}
* @example
* var attachmentcontroller = this.form.get("fieldid").attachmentcontroller; //获取附件容器
* var attachmentlist = attachmentcontroller.attachments; //获取所有的附件
* var attachmentdata = attachmentlist[0].data; //获取第一个附件的数据
*/
this.attachmentcontroller = new mwf.xapplication.process.xform.attachmentcontroller(this.node, this, options);
this.fireevent("loadcontroller");
this.attachmentcontroller.load();
this.fireevent("postloadcontroller");
this.form.businessdata.attachmentlist.each(function (att) {
//if (att.site===this.json.id || (this.json.isopeninoffice && this.json.officecontrolname===att.site)) this.attachmentcontroller.addattachment(att);
if (att.site === (this.json.site || this.json.id)) this.attachmentcontroller.addattachment(att);
}.bind(this));
this.setattachmentbusinessdata();
this.addevent("change", function () {
if(this.validationmode)this.validationmode();
}.bind(this))
//}.bind(this));
},
setattachmentbusinessdata: function () {
if (this.attachmentcontroller) {
if (this.attachmentcontroller.attachments.length) {
var values = this.attachmentcontroller.attachments.map(function (d) {
return d.data.name;
});
this._setbusinessdata(values);
} else {
this._setbusinessdata([]);
}
}
},
save: function(){
if( this.json.id.indexof("..") > 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.filter;
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.filter;
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.filter;
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.filter;
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.getattachment;
} else {
this.form.workaction.getattachmentworkcompleted;
}
},
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": " 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.getattachment {
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.getattachment {
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 url = protocol "//" srv.host ":" srv.port 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.getattachment {
window.open("../o2_lib/ofdjs/index.html?file=" url)
});
},
previewimage : function(){
this.app.getattachment {
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.getattachment {
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"),
"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);
}
}
});
source