diff --git a/gulliver/js/ext/pmos-common.js b/gulliver/js/ext/pmos-common.js new file mode 100755 index 000000000..7b01f229e --- /dev/null +++ b/gulliver/js/ext/pmos-common.js @@ -0,0 +1,118 @@ +PMExtJSCommon = function() { + this.version = '1.8'; + + this.confirm = function(title, msg, fnYes, fnNo) + { + Ext.MessageBox.confirm(title, msg, function(btn, text){ + if ( btn == 'yes' ) + setTimeout(fnYes, 0) + else if( fnNo != undefined ) + setTimeout(fnNo, 0) + }); + } + + this.info = function(title, msg, fn) { + Ext.MessageBox.show({ + title: title, + msg: msg, + buttons: Ext.MessageBox.OK, + animEl: 'mb9', + fn: fn != undefined ? fn: function(){}, + icon: Ext.MessageBox.INFO + }); + } + + this.question = function(title, msg, fn) { + Ext.MessageBox.show({ + title: title, + msg: msg, + buttons: Ext.MessageBox.OK, + animEl: 'mb9', + fn: fn != undefined ? fn: function(){}, + icon: Ext.MessageBox.QUESTION + }); + } + + this.warning = function(title, msg, fn) { + Ext.MessageBox.show({ + title: title, + msg: msg, + buttons: Ext.MessageBox.OK, + animEl: 'mb9', + fn: fn != undefined ? fn: function(){}, + icon: Ext.MessageBox.WARNING + }); + } + + this.error = function(title, msg, fn) { + Ext.MessageBox.show({ + title: title, + msg: msg, + buttons: Ext.MessageBox.OK, + animEl: 'mb9', + fn: fn != undefined ? fn: function(){}, + icon: Ext.MessageBox.ERROR + }); + } + + this.notify = function(title, msg) + { + Ext.msgBoxSlider.msg(title, msg); + } +} +var PMExt = new PMExtJSCommon(); + + +/** + * Common Ext Functions + */ + +Ext.msgBoxSlider = function(){ + var msgCt; + + function createBox(t, s){ + return [ + '
', + '
', + '

', t, '

', s, '
', + '
', + '
' + ].join(''); + } + return { + msg : function(title, format) { + if( ! msgCt ) { + msgCt = Ext.DomHelper.insertFirst(document.body, {id:'msg-div'}, true); + } + msgCt.alignTo(document, 't-t'); + var s = String.format.apply(String, Array.prototype.slice.call(arguments, 1)); + var m = Ext.DomHelper.append(msgCt, {html:createBox(title, s)}, true); + m.setWidth(400 ); + m.position(null, 5000 ); + m.alignTo(document, 't-t'); + Ext.get('x-box-mc-inner' ).setStyle('background-image', 'url("/images/_accept.png")'); + Ext.get('x-box-mc-inner' ).setStyle('background-position', '5px 10px'); + Ext.get('x-box-mc-inner' ).setStyle('background-repeat', 'no-repeat'); + Ext.get('x-box-mc-inner' ).setStyle('padding-left', '35px'); + m.slideIn('t').pause(3).ghost("t", {remove:true}); + } + }; +}(); + +/** + * Translator function for internationalization + */ +function _(ID_LABEL) +{ + if( typeof(TRANSLATIONS) != 'undefined' ) { + if( typeof(TRANSLATIONS[ID_LABEL]) != 'undefined' ) { + trn = TRANSLATIONS[ID_LABEL]; + } else { + trn = '**' + ID_LABEL + '**'; + } + } else { + PMExt.error('Processmaker JS Core Error', 'The TRANSLATIONS global object is not loaded!'); + trn = ''; + } + return trn; +} diff --git a/gulliver/js/ext/ux/miframe.js b/gulliver/js/ext/ux/miframe.js new file mode 100755 index 000000000..9292e49ee --- /dev/null +++ b/gulliver/js/ext/ux/miframe.js @@ -0,0 +1,7 @@ +/* + * ux.ManagedIFrame for ExtJS Library 3.1+ + * Copyright(c) 2008-2009 Active Group, Inc. + * licensing@theactivegroup.com + * http://licensing.theactivegroup.com + */ +Ext.namespace("Ext.ux.plugin");Ext.onReady(function(){var a=Ext.util.CSS;if(a){a.getRule(".x-hide-nosize")||a.createStyleSheet(".x-hide-nosize{height:0px!important;width:0px!important;border:none!important;zoom:1;}.x-hide-nosize * {height:0px!important;width:0px!important;border:none!important;zoom:1;}");a.refreshCache()}});(function(){var g=Ext.Element,b=Ext.lib.Anim,a=g.prototype;var f="visibility",d="display",c="hidden",i="none";var e={};e.El={setDisplayed:function(k){var j=this;j.visibilityCls?(j[k!==false?"removeClass":"addClass"](j.visibilityCls)):a.setDisplayed.call(j,k);return j},isDisplayed:function(){return !(this.hasClass(this.visibilityCls)||this.isStyle(d,i))},fixDisplay:function(){var j=this;a.fixDisplay.call(j);j.visibilityCls&&j.removeClass(j.visibilityCls)},isVisible:function(k){var l=this.visible||(!this.isStyle(f,c)&&(this.visibilityCls?!this.hasClass(this.visibilityCls):!this.isStyle(d,i)));if(k!==true||!l){return l}var m=this.dom.parentNode,j=/^body/i;while(m&&!j.test(m.tagName)){if(!Ext.fly(m,"_isVisible").isVisible()){return false}m=m.parentNode}return true},isStyle:a.isStyle||function(j,k){return this.getStyle(j)==k}};Ext.override(g.Flyweight,e.El);Ext.ux.plugin.VisibilityMode=function(k){Ext.apply(this,k||{});var j=Ext.util.CSS;if(j&&!Ext.isIE&&this.fixMaximizedWindow!==false&&!Ext.ux.plugin.VisibilityMode.MaxWinFixed){j.updateRule(".x-window-maximized-ct","overflow","");Ext.ux.plugin.VisibilityMode.MaxWinFixed=true}};Ext.extend(Ext.ux.plugin.VisibilityMode,Object,{bubble:true,fixMaximizedWindow:true,elements:null,visibilityCls:"x-hide-nosize",hideMode:"nosize",ptype:"uxvismode",init:function(n){var k=this.hideMode||n.hideMode,m=this,j=Ext.Container.prototype.bubble,l=function(){var q=[this.collapseEl,this.actionMode].concat(m.elements||[]);Ext.each(q,function(r){m.extend(this[r]||r)},this);var p={visFixed:true,animCollapse:false,animFloat:false,hideMode:k,defaults:this.defaults||{}};p.defaults.hideMode=k;Ext.apply(this,p);Ext.apply(this.initialConfig||{},p)};n.on("render",function(){if(m.bubble!==false&&this.ownerCt){j.call(this.ownerCt,function(){this.visFixed||this.on("afterlayout",l,this,{single:true})})}l.call(this)},n,{single:true})},extend:function(j,k){j&&Ext.each([].concat(j),function(l){if(l&&l.dom){if("visibilityCls" in l){return}Ext.apply(l,e.El);l.visibilityCls=k||this.visibilityCls}},this);return this}});Ext.preg&&Ext.preg("uxvismode",Ext.ux.plugin.VisibilityMode);Ext.provide&&Ext.provide("uxvismode")})();(function(){var J=Ext.Element,n,u=Ext.lib.Dom,al=Ext.lib.Anim,m=Ext.EventManager,aj=Ext.lib.Event,an=document,t=function(){},ap=Object.prototype,aA=ap.toString,B=/^body/i,q="[object HTMLDocument]";if(!Ext.elCache||parseInt(Ext.version.replace(/\./g,""),10)<311){alert("Ext Release "+Ext.version+" is not supported")}Ext._documents={};Ext._documents[Ext.id(document,"_doc")]=Ext.elCache;var T=u.resolveDocumentCache=function(E,aF){Ext._documents[Ext.id(document,"_doc")]=Ext.elCache;var aE=e(E),aG=Ext.isDocument(aE)?Ext.id(aE):aF,A=Ext._documents[aG]||null;return A||(aG?Ext._documents[aG]={}:null)},aD=u.clearDocumentCache=function(A){delete Ext._documents[A]};J.addMethods||(J.addMethods=function(A){Ext.apply(J.prototype,A||{})});Ext.removeNode=function(aH){var aG=aH?aH.dom||aH:null,aE,aF,A=T(aG),E;if(aG&&(aF=A[aG.id])&&(aE=aF.el)){if(aE.dom){Ext.enableNestedListenerRemoval?m.purgeElement(aE.dom,true):m.removeAll(aE.dom)}delete A[aG.id];delete aE.dom;delete aE._context;aE=null}if(aG&&!aG.navigator&&!Ext.isDocument(aG)&&!B.test(aG.tagName)){(E=aG.parentElement||aG.parentNode)&&E.removeChild(aG)}aG=E=null};var f=function(aI,aG){var aH=typeof aI==="function"?aI:function aF(){};var aE=aH._ovl;if(!aE){aE={base:aH};aE[aH.length||0]=aH;aH=function aF(){var aL=arguments.callee._ovl;var aK=aL[arguments.length]||aL.base;return aK&&aK!=arguments.callee?aK.apply(this,arguments):undefined}}var aJ=[].concat(aG);for(var E=0,A=aJ.length;EA||aQaI){aN.scrollTop=aO-A}}aN.scrollTop=aN.scrollTop;if(aH!==false){if(aG.offsetWidth>aN.clientWidth||aJaL){aN.scrollLeft=E-aN.clientWidth}}aN.scrollLeft=aN.scrollLeft}return this},contains:function(A){try{return !A?false:u.isAncestor(this.dom,A.dom?A.dom:A)}catch(E){return false}},getScroll:function(){var aI=this.dom,aH=this.getDocument(),A=aH.body,aE=aH.documentElement,E,aG,aF;if(Ext.isDocument(aI)||aI==A){if(Ext.isIE&&u.docIsStrict(aH)){E=aE.scrollLeft;aG=aE.scrollTop}else{E=window.pageXOffset;aG=window.pageYOffset}aF={left:E||(A?A.scrollLeft:0),top:aG||(A?A.scrollTop:0)}}else{aF={left:aI.scrollLeft,top:aI.scrollTop}}return aF},getStyle:function(){var A=at&&at.getComputedStyle?function E(aL){var aI=!this._isDoc?this.dom:null,aE,aH,aF,aJ,aK=Ext.isWebKit,aJ,aG;if(!aI||!aI.style){return null}aG=aI.style;aL=aq(aL);aH=at.getComputedStyle(aI,null);aF=(aH)?aH[aL]:null;if(aK){if(aF&&ay.test(aL)&&aG.position!="absolute"&&aF!="0px"){aJ=aG.display;aG.display="inline-block";aF=at.getComputedStyle(aI,null)[aL];aG.display=aJ}else{if(aF=="rgba(0, 0, 0, 0)"){aF="transparent"}}}return aF||aG[aL]}:function E(aJ){var aH=!this._isDoc?this.dom:null,aE,aG,aF;if(!aH||!aH.style){return null}aF=aH.style;if(aJ==Y){if(aF.filter.match){if(aE=aF.filter.match(i)){var aI=parseFloat(aE[1]);if(!isNaN(aI)){return aI?aI/100:0}}}return 1}aJ=aq(aJ);return((aG=aH.currentStyle)?aG[aJ]:null)||aH.style[aJ]};var E=null;return A}(),setStyle:function(aF,aE){if(this._isDoc||Ext.isDocument(this.dom)){return this}var A,E;if(typeof aF!="object"){A={};A[aF]=aE;aF=A}for(E in aF){if(aF.hasOwnProperty(E)){aE=aF[E];E==Y?this.setOpacity(aE):this.dom.style[aq(E)]=aE}}return this},center:function(A){return this.alignTo(A||this.getDocument(),"c-c")},mask:function(E,aH){var aJ=this,aF=aJ.dom,aI=Ext.DomHelper,aG="ext-el-mask-msg",A,aK;if(aJ.getStyle("position")=="static"){aJ.addClass(F)}if((A=I(aF,"maskMsg"))){A.remove()}if((A=I(aF,"mask"))){A.remove()}aK=aI.append(aF,{cls:"ext-el-mask"},true);I(aF,"mask",aK);aJ.addClass(O);aK.setDisplayed(true);if(typeof E=="string"){var aE=aI.append(aF,{cls:aG,cn:{tag:"div"}},true);I(aF,"maskMsg",aE);aE.dom.className=aH?aG+" "+aH:aG;aE.dom.firstChild.innerHTML=E;aE.setDisplayed(true);aE.center(aJ)}if(Ext.isIE&&!(Ext.isIE7&&Ext.isStrict)&&aJ.getStyle("height")=="auto"){aK.setSize(undefined,aJ.getHeight())}return aK},unmask:function(){var aE=this,aF=aE.dom,A=I(aF,"mask"),E=I(aF,"maskMsg");if(A){if(E){E.remove();I(aF,"maskMsg",undefined)}A.remove();I(aF,"mask",undefined)}aE.removeClass([O,F])},isMasked:function(){var A=I(this.dom,"mask");return A&&A.isVisible()},getCenterXY:function(){return this.getAlignToXY(this.getDocument(),"c-c")},getAnchorXY:function(aG,aL,aQ){aG=(aG||"tl").toLowerCase();aQ=aQ||{};var aK=this,aN=this.getDocument(),E=aK.dom==aN.body||aK.dom==aN,aO=aQ.width||E?u.getViewWidth(false,aN):aK.getWidth(),aI=aQ.height||E?u.getViewHeight(false,aN):aK.getHeight(),aP,A=Math.round,aE=aK.getXY(),aM=aK.getScroll(),aJ=E?aM.left:!aL?aE[0]:0,aH=E?aM.top:!aL?aE[1]:0,aF={c:[A(aO*0.5),A(aI*0.5)],t:[A(aO*0.5),0],l:[0,A(aI*0.5)],r:[aO,A(aI*0.5)],b:[A(aO*0.5),aI],tl:[0,0],bl:[0,aI],br:[aO,aI],tr:[aO,0]};aP=aF[aG];return[aP[0]+aJ,aP[1]+aH]},anchorTo:function(E,aH,aE,A,aJ,aK){var aI=this,aG=aI.dom;function aF(){ai(aG).alignTo(E,aH,aE,A);Ext.callback(aK,ai(aG))}Ext.EventManager.onWindowResize(aF,aI);if(!Ext.isEmpty(aJ)){Ext.EventManager.on(window,"scroll",aF,aI,{buffer:!isNaN(aJ)?aJ:50})}aF.call(aI);return aI},getScroll:function(){var aI=this.dom,aH=this.getDocument(),A=aH.body,aE=aH.documentElement,E,aG,aF;if(aI==aH||aI==A){if(Ext.isIE&&u.docIsStrict(aH)){E=aE.scrollLeft;aG=aE.scrollTop}else{E=window.pageXOffset;aG=window.pageYOffset}aF={left:E||(A?A.scrollLeft:0),top:aG||(A?A.scrollTop:0)}}else{aF={left:aI.scrollLeft,top:aI.scrollTop}}return aF},getAlignToXY:function(aF,aR,aS){var a6;aF=Ext.get(aF,a6=this.getDocument());if(!aF||!aF.dom){throw"Element.getAlignToXY with an element that doesn't exist"}aS=aS||[0,0];aR=(aR=="?"?"tl-bl?":(!/-/.test(aR)&&aR!=""?"tl-"+aR:aR||"tl-bl")).toLowerCase();var a3=this,aY=a3.dom,a5,a4,aK,aJ,aM,aW,aP,aN=u.getViewWidth(false,a6)-10,aX=u.getViewHeight(false,a6)-10,E,aG,aH,aI,aO,aQ,a0=a6.documentElement,aL=a6.body,aV=(a0.scrollLeft||aL.scrollLeft||0)+5,aU=(a0.scrollTop||aL.scrollTop||0)+5,aZ=false,aE="",A="",aT=aR.match(/^([a-z]+)-([a-z]+)(\?)?$/);if(!aT){throw"Element.getAlignToXY with an invalid alignment "+aR}aE=aT[1];A=aT[2];aZ=!!aT[3];a5=a3.getAnchorXY(aE,true);a4=aF.getAnchorXY(A,false);aK=a4[0]-a5[0]+aS[0];aJ=a4[1]-a5[1]+aS[1];if(aZ){aM=a3.getWidth();aW=a3.getHeight();aP=aF.getRegion();E=aE.charAt(0);aG=aE.charAt(aE.length-1);aH=A.charAt(0);aI=A.charAt(A.length-1);aO=((E=="t"&&aH=="b")||(E=="b"&&aH=="t"));aQ=((aG=="r"&&aI=="l")||(aG=="l"&&aI=="r"));if(aK+aM>aN+aV){aK=aQ?aP.left-aM:aN+aV-aM}if(aKaX+aU){aJ=aO?aP.top-aW:aX+aU-aW}if(aJaU){x=aU-w;aO=true}if((y+h)>aM){y=aM-h;aO=true}if(x)((\n|\r|.)*?)(?:<\/script>)/gi,update:function(content,loadScripts,callback,scope){loadScripts=loadScripts||this.getUpdater().loadScripts||false;content=Ext.DomHelper.markup(content||"");content=loadScripts===true?content:content.replace(this.scriptRE,"");var doc;if((doc=this.getFrameDocument())&&!!content.length){this._unHook();this.src=null;this.showMask();Ext.isFunction(callback)&&this._observable.addListener("_docload",callback,scope||this,{single:true});this._targetURI=location.href;doc.open();this._frameAction=true;doc.write(content);doc.close();this.checkDOM()}else{this.hideMask(true);Ext.isFunction(callback)&&callback.call(scope,this)}return this},execCommand:function(command,userInterface,value,validate){var doc,assert;if((doc=this.getFrameDocument())&&!!command){try{Ext.isIE&&this.getWindow().focus();assert=validate&&Ext.isFunction(doc.queryCommandEnabled)?doc.queryCommandEnabled(command):true;return assert&&doc.execCommand(command,!!userInterface,value)}catch(eex){return false}}return false},setDesignMode:function(active){var doc;(doc=this.getFrameDocument())&&(doc.designMode=(/on|true/i).test(String(active))?"on":"off")},getUpdater:function(){return this.updateManager||(this.updateManager=new MIF.Updater(this))},getHistory:function(){var h=null;try{h=this.getWindow().history}catch(eh){}return h},get:function(el){var doc=this.getFrameDocument();return doc?Ext.get(el,doc):doc=null},fly:function(el,named){var doc=this.getFrameDocument();return doc?Ext.fly(el,named,doc):null},getDom:function(el){var d;if(!el||!(d=this.getFrameDocument())){return(d=null)}return Ext.getDom(el,d)},select:function(selector,unique){var d;return(d=this.getFrameDocument())?Ext.Element.select(selector,unique,d):d=null},query:function(selector){var d;return(d=this.getFrameDocument())?Ext.DomQuery.select(selector,d):null},removeNode:Ext.removeNode,_renderHook:function(){this._windowContext=null;this.CSS=this.CSS?this.CSS.destroy():null;this._hooked=false;try{if(this.writeScript('(function(){(window.hostMIF = parent.document.getElementById("'+this.id+'").ownerCt)._windowContext='+(Ext.isIE?"window":'{eval:function(s){return new Function("return ("+s+")")();}}')+";})()")){var w,p=this._frameProxy,D=this.getFrameDocument();if(w=this.getWindow()){p||(p=this._frameProxy=this._eventProxy.createDelegate(this));addListener(w,"focus",p);addListener(w,"blur",p);addListener(w,"resize",p);addListener(w,"unload",p);D&&addListener(Ext.isIE?w:D,"scroll",p)}D&&(this.CSS=new Ext.ux.ManagedIFrame.CSS(D))}}catch(ex){}return this.domWritable()},_unHook:function(){if(this._hooked){this._windowContext&&(this._windowContext.hostMIF=null);this._windowContext=null;var w,p=this._frameProxy;if(p&&this.domWritable()&&(w=this.getWindow())){removeListener(w,"focus",p);removeListener(w,"blur",p);removeListener(w,"resize",p);removeListener(w,"unload",p);removeListener(Ext.isIE?w:this.getFrameDocument(),"scroll",p)}}ELD.clearDocumentCache&&ELD.clearDocumentCache(this.id);this.CSS=this.CSS?this.CSS.destroy():null;this.domFired=this._frameAction=this.domReady=this._hooked=false},_windowContext:null,getFrameDocument:function(){var win=this.getWindow(),doc=null;try{doc=(Ext.isIE&&win?win.document:null)||this.dom.contentDocument||window.frames[this.dom.name].document||null}catch(gdEx){ELD.clearDocumentCache&&ELD.clearDocumentCache(this.id);return false}doc=(doc&&Ext.isFunction(ELD.getDocument))?ELD.getDocument(doc,true):doc;return doc},getDoc:function(){var D=this.getFrameDocument();return Ext.get(D,D)},getBody:function(){var d;return(d=this.getFrameDocument())?this.get(d.body||d.documentElement):null},getDocumentURI:function(){var URI,d;try{URI=this.src&&(d=this.getFrameDocument())?d.location.href:null}catch(ex){}return URI||(Ext.isFunction(this.src)?this.src():this.src)},getWindowURI:function(){var URI,w;try{URI=(w=this.getWindow())?w.location.href:null}catch(ex){}return URI||(Ext.isFunction(this.src)?this.src():this.src)},getWindow:function(){var dom=this.dom,win=null;try{win=dom.contentWindow||window.frames[dom.name]||null}catch(gwEx){}return win},scrollChildIntoView:function(child,container,hscroll){this.fly(child,"_scrollChildIntoView").scrollIntoView(this.getDom(container)||this.getBody().dom,hscroll);return this},print:function(){try{var win;if(win=this.getWindow()){Ext.isIE&&win.focus();win.print()}}catch(ex){throw new MIF.Error("printexception",ex.description||ex.message||ex)}return this},domWritable:function(){return !!Ext.isDocument(this.getFrameDocument(),true)&&!!this._windowContext},execScript:function(block,useDOM){try{if(this.domWritable()){if(useDOM){this.writeScript(block)}else{return this._windowContext.eval(block)}}else{throw new MIF.Error("execscript-secure-context")}}catch(ex){this._observable.fireEvent.call(this._observable,"exception",this,ex);return false}return true},writeScript:function(block,attributes){attributes=Ext.apply({},attributes||{},{type:"text/javascript",text:block});try{var head,script,doc=this.getFrameDocument();if(doc&&typeof doc.getElementsByTagName!="undefined"){if(!(head=doc.getElementsByTagName("head")[0])){head=doc.createElement("head");doc.getElementsByTagName("html")[0].appendChild(head)}if(head&&(script=doc.createElement("script"))){for(var attrib in attributes){if(attributes.hasOwnProperty(attrib)&&attrib in script){script[attrib]=attributes[attrib]}}return !!head.appendChild(script)}}}catch(ex){this._observable.fireEvent.call(this._observable,"exception",this,ex)}finally{script=head=null}return false},loadFunction:function(fn,useDOM,invokeIt){var name=fn.name||fn;var fnSrc=fn.fn||window[fn];name&&fnSrc&&this.execScript(name+"="+fnSrc,useDOM);invokeIt&&this.execScript(name+"()")},loadHandler:function(e,target){var rstatus=(this.dom||{}).readyState||(e||{}).type;if(this.eventsFollowFrameLinks||this._frameAction||this.isReset){switch(rstatus){case"domready":case"DOMFrameContentLoaded":case"domfail":this._onDocReady(rstatus);break;case"load":case"complete":var frame=this;frame._onDocLoaded(rstatus);this._frameAction=false;break;case"error":this._observable.fireEvent.apply(this._observable,["exception",this].concat(arguments));break;default:}this.frameState=rstatus}},_onDocReady:function(eventName){var w,obv=this._observable,D;try{if(!this.isReset&&this.focusOnLoad&&(w=this.getWindow())){w.focus()}(D=this.getDoc())&&(D.isReady=true)}catch(ex){}obv.fireEvent("_docready",this);if(!this.domFired&&(this._hooked=this._renderHook())){this.domFired=true;this.isReset||obv.fireEvent.call(obv,"domready",this)}this.domReady=true;this.hideMask()},_onDocLoaded:function(eventName){var obv=this._observable,w;this.domReady||this._onDocReady("domready");obv.fireEvent("_docload",this);this.isReset||obv.fireEvent("documentloaded",this);this.hideMask(true);this._frameAction=this.isReset=false},checkDOM:function(win){if(Ext.isGecko){return}var n=0,frame=this,domReady=false,b,l,d,max=this.domReadyRetries||2500,polling=false,startLocation=(this.getFrameDocument()||{location:{}}).location.href;(function(){d=frame.getFrameDocument()||{location:{}};polling=(d.location.href!==startLocation||d.location.href===frame._targetURI);if(frame.domReady){return}domReady=polling&&((b=frame.getBody())&&!!(b.dom.innerHTML||"").length)||false;if(d.location.href&&!domReady&&(++nserve(); break; + + case 'js-translations': + $locale = $_GET['locale']; + G::LoadTranslationObject($locale); + global $translation; + print 'var TRANSLATIONS = ' . G::json_encode($translation) . ';'; + break; } diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index 144ba5afc..78b8aa6f8 100644 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -1890,18 +1890,27 @@ class G * @access public * @parameter string msgID * @parameter string file + * @parameter array data // erik: associative array within data input to replace for formatted string i.e "any messsage {replaced_label} that contains a replace label" * @return string */ - function LoadTranslation( $msgID , $lang = SYS_LANG ) + function LoadTranslation( $msgID , $lang = SYS_LANG, $data = null) { global $translation; + if ( isset ( $translation[$msgID] ) ){ - //return eregi_replace("[\n|\r|\n\r]", ' ', $translation[$msgID]); - return preg_replace("[\n|\r|\n\r]", ' ', $translation[$msgID]); - }else{ - if(defined("UNTRANSLATED_MARK")){ + $translationString = preg_replace("[\n|\r|\n\r]", ' ', $translation[$msgID]); + + if( isset($data) && is_array($data) ) { + foreach($data as $label=>$value) { + $translationString = str_replace('{'.$label.'}', $value, $translationString); + } + } + + return $translationString; + } else { + if( defined("UNTRANSLATED_MARK") ) { $untranslatedMark = strip_tags(UNTRANSLATED_MARK); - }else{ + } else { $untranslatedMark = "**"; } return $untranslatedMark . $msgID . $untranslatedMark; diff --git a/gulliver/system/class.headPublisher.php b/gulliver/system/class.headPublisher.php index 849f55f15..b8473694b 100644 --- a/gulliver/system/class.headPublisher.php +++ b/gulliver/system/class.headPublisher.php @@ -184,13 +184,10 @@ class headPublisher { } if ($this->disableHeaderScripts) return ''; + + // die(SYS_LANG); $this->addScriptFile ( "/js/widgets/js-calendar/lang/" . SYS_LANG . ".js" ); - /*$this->addScriptFile("/js/widgets/calendar/pmcalendar.js"); - /*$this->addScriptFile("/js/widgets/calendar/dhtmlSuite-common.js"); - $this->addScriptFile("/js/widgets/calendar/dhtmlSuite-calendar.js"); - $this->addScriptFile("/js/widgets/calendar/dhtmlSuite-dragDropSimple.js"); - $this->addScriptFile("/js/widgets/calendar/neyek-abstractionCalendar.js"); - */ + //$this->addScriptFile ( '/gulliver/loader?t=js-translations&locale='.SYS_LANG); $head = ''; $head .= '' . $this->title . "\n"; @@ -282,6 +279,8 @@ class headPublisher { $head .= " \n"; $head .= " \n"; $head .= " \n"; + $head .= " \n"; + $head .= " \n"; if (! isset ( $this->extJsSkin ) || $this->extJsSkin == '') { $this->extJsSkin = 'xtheme-gray'; @@ -307,7 +306,7 @@ class headPublisher { //DEPRECATED, this will be removed in a future --> //new interactive css decorator - $script .= " \n"; + $script .= " \n"; $script .= " \n"; // Load external/plugin css diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index 1246e769a..63569e34c 100644 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -5241,4 +5241,49 @@ class Cases { } } + + function getUsersToReassign($TAS_UID, $USR_UID) + { + G::LoadClass('groups'); + G::LoadClass('tasks'); + + $oTasks = new Tasks(); + $aAux = $oTasks->getGroupsOfTask($TAS_UID, 1); + $row = array(); + + $groups = new Groups(); + foreach($aAux as $aGroup) { + $aUsers = $groups->getUsersOfGroup($aGroup['GRP_UID']); + foreach($aUsers as $aUser) { + if($aUser['USR_UID'] != $USR_UID) { + $row[] = $aUser['USR_UID']; + } + } + } + + $aAux = $oTasks->getUsersOfTask($TAS_UID, 1); + foreach($aAux as $aUser) { + if($aUser['USR_UID'] != $USR_UID) { + $row[] = $aUser['USR_UID']; + } + } + + require_once 'classes/model/Users.php'; + $c = new Criteria('workflow'); + $c->addSelectColumn(UsersPeer::USR_UID); + $c->addSelectColumn(UsersPeer::USR_USERNAME); + $c->addSelectColumn(UsersPeer::USR_FIRSTNAME); + $c->addSelectColumn(UsersPeer::USR_LASTNAME); + $c->add(UsersPeer::USR_UID, $row, Criteria::IN); + + $rs = UsersPeer::doSelectRs($c); + $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); + + $rows = Array(); + while( $rs->next() ) { + $rows[] = $rs->getRow(); + } + + return $rows; + } } diff --git a/workflow/engine/classes/class.configuration.php b/workflow/engine/classes/class.configuration.php index 32e867c0a..8cd26e0fb 100644 --- a/workflow/engine/classes/class.configuration.php +++ b/workflow/engine/classes/class.configuration.php @@ -420,5 +420,26 @@ class Configurations // extends Configuration return $formats; } + + function getSystemDate($dateTime) + { + $oConf = new Configurations; + $oConf->loadConfig($obj, 'ENVIRONMENT_SETTINGS',''); + $creationDateMask = isset($oConf->aConfig['dateFormat'])? $oConf->aConfig['dateFormat']: ''; + + if( $creationDateMask != '' ) { + if( strpos($dateTime, ' ') !== false ) { + list($date, $time) = explode(' ', $dateTime); + list($y, $m, $d) = explode('-', $date); + list($h, $i, $s) = explode(':', $time); + $dateTime = date($creationDateMask, mktime($h, $i, $s, $m, $d, $y)); + } else { + list($y, $m, $d) = explode('-', $dateTime); + $dateTime = date($creationDateMask, mktime(0, 0, 0, $m, $d, $y)); + } + } + + return $dateTime; + } } ?> \ No newline at end of file diff --git a/workflow/engine/classes/model/Task.php b/workflow/engine/classes/model/Task.php index 76e62e5de..8f81667c8 100644 --- a/workflow/engine/classes/model/Task.php +++ b/workflow/engine/classes/model/Task.php @@ -560,4 +560,26 @@ public function kgetassigType($pro_uid, $tas){ $calendarObj->assignCalendarTo($taskUid,$calendarUid,'TASK'); } + function getDelegatedTaskData($TAS_UID, $APP_UID, $DEL_INDEX) + { + require_once 'classes/model/AppDelegation.php'; + require_once 'classes/model/Task.php'; + $oTask = new Task(); + $aFields = $oTask->load($TAS_UID); + $oCriteria = new Criteria('workflow'); + $oCriteria->add(AppDelegationPeer::APP_UID, $APP_UID); + $oCriteria->add(AppDelegationPeer::DEL_INDEX, $DEL_INDEX); + $oDataset = AppDelegationPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + $taskData = $oDataset->getRow(); + + $iDiff = strtotime($taskData['DEL_FINISH_DATE']) - strtotime($taskData['DEL_INIT_DATE']); + $aFields['INIT_DATE'] = ($taskData['DEL_INIT_DATE'] != null ? $taskData['DEL_INIT_DATE'] : G::LoadTranslation('ID_CASE_NOT_YET_STARTED')); + $aFields['DUE_DATE'] = ($taskData['DEL_TASK_DUE_DATE'] != null ? $taskData['DEL_TASK_DUE_DATE'] : G::LoadTranslation('ID_NOT_FINISHED')); + $aFields['FINISH'] = ($taskData['DEL_FINISH_DATE'] != null ? $taskData['DEL_FINISH_DATE'] : G::LoadTranslation('ID_NOT_FINISHED')); + $aFields['DURATION'] = ($taskData['DEL_FINISH_DATE'] != null ? (int) ($iDiff / 3600) . ' ' . ((int) ($iDiff / 3600) == 1 ? G::LoadTranslation('ID_HOUR') : G::LoadTranslation('ID_HOURS')) . ' ' . (int) (($iDiff % 3600) / 60) . ' ' . ((int) (($iDiff % 3600) / 60) == 1 ? G::LoadTranslation('ID_MINUTE') : G::LoadTranslation('ID_MINUTES')) . ' ' . (int) (($iDiff % 3600) % 60) . ' ' . ((int) (($iDiff % 3600) % 60) == 1 ? G::LoadTranslation('ID_SECOND') : G::LoadTranslation('ID_SECONDS')) : G::LoadTranslation('ID_NOT_FINISHED')); + + return $aFields; + } } // Task diff --git a/workflow/engine/methods/cases/ajaxListener.php b/workflow/engine/methods/cases/ajaxListener.php new file mode 100755 index 000000000..5e701c23b --- /dev/null +++ b/workflow/engine/methods/cases/ajaxListener.php @@ -0,0 +1,550 @@ +. + * + * For more information, contact Colosa Inc, 2566 Le Jeune Rd., + * Coral Gables, FL, 33134, USA, or email info@colosa.com. + * + */ + + /** + * @author Erik Amaru Ortiz + * @date Jan 3th, 2010 + */ + +$action = $_REQUEST['action']; +$ajax = new Ajax(); +$ajax->$action(); + +class Ajax +{ + + function steps() + { + require_once 'classes/model/Step.php'; + require_once ( "classes/model/Content.php" ); + require_once ( "classes/model/AppDocument.php" ); + require_once ( "classes/model/InputDocumentPeer.php" ); + require_once ( "classes/model/OutputDocument.php" ); + require_once ( "classes/model/Dynaform.php" ); + + G::LoadClass('pmScript'); + G::LoadClass('case'); + + $PRO_UID = $_SESSION['PROCESS']; + $TAS_UID = $_SESSION['TASK']; + $APP_UID = $_SESSION['APPLICATION']; + $tree = Array(); + $case = new Cases; + $step = new Step; + $appDocument = new AppDocument; + + $caseSteps = $step->getAllCaseSteps($PRO_UID, $TAS_UID, $APP_UID); + + //g::pr($caseSteps); + + //getting the case record + $caseData = $case->loadCase($APP_UID); + + //getting externals steps + $oPluginRegistry = &PMPluginRegistry::getSingleton(); + $externalSteps = $oPluginRegistry->getSteps(); + + $pmScript = new PMScript(); + $pmScript->setFields($caseData['APP_DATA']); + + foreach ($caseSteps as $caseStep) { + + if( trim($caseStep->getStepCondition()) != '' ) { + $pmScript->setScript($caseStep->getStepCondition()); + if( ! $pmScript->evaluate() ) + continue; + } + $stepUidObj = $caseStep->getStepUidObj(); + $stepTypeObj = $caseStep->getStepTypeObj(); + $stepPosition = $caseStep->getStepPosition(); + + $node = new stdClass; + $node->id = $stepUidObj; + $node->draggable = false; + $node->hrefTarget = 'casesSubFrame'; + + switch( $caseStep->getStepTypeObj() ) { + case 'DYNAFORM': + $oDocument = DynaformPeer::retrieveByPK($caseStep->getStepUidObj()); + + $node->text = $oDocument->getDynTitle(); + $node->iconCls = 'ss_sprite ss_application_form'; + $node->leaf = true; + $node->url = "cases_Step?UID=$stepUidObj&TYPE=$stepTypeObj&POSITION=$stepPosition&ACTION=EDIT"; + break; + + case 'OUTPUT_DOCUMENT': + $oDocument = OutputDocumentPeer::retrieveByPK($caseStep->getStepUidObj()); + $outputDoc = $appDocument->getObject($_SESSION['APPLICATION'], $_SESSION['INDEX'], $caseStep->getStepUidObj(), 'OUTPUT'); + + $node->text = $oDocument->getOutDocTitle(); + $node->iconCls = 'ss_sprite ss_application_put'; + $node->leaf = true; + $node->url = "cases_Step?UID=$stepUidObj&TYPE=$stepTypeObj&POSITION=$stepPosition&ACTION=VIEW&DOC={$outputDoc['APP_DOC_UID']}"; + break; + + case 'INPUT_DOCUMENT': + $oDocument = InputDocumentPeer::retrieveByPK($caseStep->getStepUidObj()); + //$sType = $oDocument->getInpDocFormNeeded(); + $node->text = $oDocument->getInpDocTitle(); + $node->iconCls = 'ss_sprite ss_application_get'; + $node->leaf = true; + $node->url = "cases_Step?UID=$stepUidObj&TYPE=$stepTypeObj&POSITION=$stepPosition&ACTION=ATTACH"; + break; + + case 'EXTERNAL': + $stepTitle = 'unknown ' . $caseStep->getStepUidObj(); + $oPluginRegistry = PMPluginRegistry::getSingleton(); + + foreach ( $externalSteps as $externalStep ) { + if ( $externalStep->sStepId == $caseStep->getStepUidObj() ) { + $stepTitle = $externalStep->sStepTitle; //default title + $sNamespace = $externalStep->sNamespace; + $oPlugin =& $oPluginRegistry->getPlugin($sNamespace); + $classFile = PATH_PLUGINS . $oPlugin->sNamespace . PATH_SEP . 'class.' . $oPlugin->sNamespace .'.php'; + if ( file_exists ( $classFile ) ) { + require_once ( $classFile ); + $sClassName = $sNamespace . 'class'; + $obj = new $sClassName( ); + if (method_exists($obj, 'getExternalStepTitle')) { + $stepTitle = $obj->getExternalStepTitle( $caseStep->getStepUidObj(), $TAS_UID, $caseStep->getStepPosition()); + } + if (method_exists($obj, 'getExternalStepAction')) { + $externalStepActions = $obj->getExternalStepAction( $aRow->getStepUidObj(), $aRow->getStepPosition()); + } + } + break; + } + } + + $node->text = $stepTitle; + $node->leaf = false; + $node->url = ""; + $node->children = Array(); + + if( isset($externalStepActions) ) { + foreach ( $externalStepActions as $action => $label ) { + $childNode->text = $label; + $childNode->iconCls = 'ICON_EXTERNAL_STEP'; + $childNode->leaf = true; + $childNode->url = "../cases/cases_Step?TYPE=$stepTypeObj&UID=stepUidObj&POSITION=$stepPosition&ACTION=$action"; + + $node->children[] = $childNode; + } + } + break; + } + + $tree[] = $node; + + } + + //assign task + $node = new stdClass; + $node->id = 'ID_ASSIGN_TASK'; + $node->draggable = false; + $node->hrefTarget = 'casesSubFrame'; + $node->text = G::LoadTranslation('ID_ASSIGN_TASK'); + $node->iconCls = 'ICON_ASSIGN_TASK'; + $node->leaf = true; + $node->url = "../cases/cases_Step?TYPE=ASSIGN_TASK&UID=-1&POSITION=10000&ACTION=ASSIGN"; + $tree[] = $node; + + print(G::json_encode($tree)); + + } + + function getInformationOptions() + { + $options = Array(); + $options[] = Array('text' => G::LoadTranslation('ID_PROCESS_MAP'), 'fn'=>'processMap'); + $options[] = Array('text' => G::LoadTranslation('ID_PROCESS_INFORMATION'), 'fn'=>'processInformation'); + $options[] = Array('text' => G::LoadTranslation('ID_TASK_INFORMATION'), 'fn'=>'taskInformation'); + $options[] = Array('text' => G::LoadTranslation('ID_CASE_HISTORY'), 'fn'=>'caseHistory'); + $options[] = Array('text' => G::LoadTranslation('ID_HISTORY_MESSAGE_CASE'), 'fn'=>'messageHistory'); + $options[] = Array('text' => G::LoadTranslation('ID_DYNAFORMS'), 'fn'=>'dynaformHistory'); + $options[] = Array('text' => G::LoadTranslation('ID_UPLOADED_DOCUMENTS'), 'fn'=>'uploadedDocuments'); + $options[] = Array('text' => G::LoadTranslation('ID_GENERATED_DOCUMENTS'), 'fn'=>'generatedDocuments'); + + print(G::json_encode($options)); + } + + function getActionOptions() + { + require_once 'classes/model/AppThread.php'; + require_once 'classes/model/AppDelay.php'; + G::LoadClass('tree'); + G::LoadClass('case'); + + $APP_UID = $_SESSION['APPLICATION']; + + $c = new Criteria('workflow'); + $c->clearSelectColumns(); + $c->addSelectColumn( AppThreadPeer::APP_THREAD_PARENT ); + $c->add(AppThreadPeer::APP_UID, $APP_UID ); + $c->add(AppThreadPeer::APP_THREAD_STATUS , 'OPEN' ); + $cant = AppThreadPeer::doCount($c); + + $oCase = new Cases(); + $aFields = $oCase->loadCase( $_SESSION['APPLICATION'], $_SESSION['INDEX'] ); + + $oCriteria = new Criteria('workflow'); + $oCriteria->add(AppDelayPeer::APP_UID, $_SESSION['APPLICATION']); + $oCriteria->add(AppDelayPeer::APP_DEL_INDEX, $_SESSION['INDEX']); + $oCriteria->add(AppDelayPeer::APP_TYPE, 'PAUSE'); + $oCriteria->add(AppDelayPeer::APP_DISABLE_ACTION_USER, null); + + $oDataset = AppDelayPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + $aRow = $oDataset->getRow(); + GLOBAL $RBAC; + + $options = Array(); + + switch($aFields['APP_STATUS']) + { + case 'DRAFT': + if( !$aRow ) { + $options[] = Array('text'=>G::LoadTranslation('ID_PAUSED_CASE'), 'fn'=>'setUnpauseCaseDate'); + } else { + $options[] = Array('text'=>G::LoadTranslation('ID_UNPAUSE'), 'fn'=>'unpauseCase'); + } + + $options[] = Array('text'=>G::LoadTranslation('ID_DELETE'), 'fn'=>'deleteCase'); + + if( $RBAC->userCanAccess('PM_REASSIGNCASE')==1 ) { + $options[] = Array('text'=>G::LoadTranslation('ID_REASSIGN'), 'fn'=>'getUsersToReassign'); + } + break; + + case 'TO_DO': + if(!$aRow) { + $options[] = Array('text'=>G::LoadTranslation('ID_PAUSED_CASE'), 'fn'=>'setUnpauseCaseDate'); + + if ($cant == 1) { + $options[] = Array('text'=>G::LoadTranslation('ID_CANCEL'), 'fn'=>'cancelCase'); + } + } else { + $options[] = Array('text'=>G::LoadTranslation('ID_UNPAUSE'), 'fn'=>'unpauseCase'); + } + + if($RBAC->userCanAccess('PM_REASSIGNCASE')==1) { + $options[] = Array('text'=>G::LoadTranslation('ID_REASSIGN'), 'fn'=>'getUsersToReassign'); + } + break; + + case 'CANCELLED': + $options[] = Array('text'=>G::LoadTranslation('ID_REACTIVATE'), 'fn'=>'reactivateCase'); + break; + } + + $oTask = new Task(); + $aTask = $oTask->load($_SESSION['TASK']); + if ($aTask['TAS_TYPE'] == 'ADHOC') { + $options[] = Array('text'=>G::LoadTranslation('ID_ADHOC_ASSIGNMENT'), 'fn'=>''); + } + + print(G::json_encode($options)); + } + + function processMap() + { + global $G_PUBLISH; + global $G_CONTENT; + global $G_FORM; + global $G_TABLE; + global $RBAC; + + $oTemplatePower = new TemplatePower(PATH_TPL . 'processes/processes_Map.html'); + $oTemplatePower->prepare(); + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent('template', '', '', '', $oTemplatePower); + $oHeadPublisher = & headPublisher::getSingleton(); + + + //$oHeadPublisher->addScriptfile('/jscore/processmap/core/processmap.js'); + $oHeadPublisher->addScriptCode(' + window.onload = function(){ + var pb=leimnud.dom.capture("tag.body 0"); + Pm=new processmap(); + + var params = "{\"uid\":\"' . $_SESSION['PROCESS'] . '\",\"mode\":false,\"ct\":false}"; + // maximun x and y position + var xPos = 0; + var yPos = 0; + + //obtaining the processmap object for the current process + var oRPC = new leimnud.module.rpc.xmlhttp({ + url : "../processes/processes_Ajax", + async : false, + method: "POST", + args : "action=load&data="+params + }); + + oRPC.make(); + var response = eval(\'(\' + oRPC.xmlhttp.responseText + \')\'); + + for (var i in response){ + if (i==\'task\'){ + elements = response[i]; + for (var j in elements){ + if (elements[j].uid!=undefined){ + if (elements[j].position.x > xPos){ + xPos = elements[j].position.x; + } + if (elements[j].position.y > yPos){ + yPos = elements[j].position.y; + } + } + } + } + } + + Pm.options = { + target : "pm_target", + dataServer: "../processes/processes_Ajax", + uid : "' . $_SESSION['PROCESS'] . '", + lang : "' . SYS_LANG . '", + theme : "processmaker", + size : {w:xPos+800,h:yPos+150}, + images_dir: "/jscore/processmap/core/images/", + rw : false, + hideMenu : false + } + Pm.make(); + + oLeyendsPanel = new leimnud.module.panel(); + oLeyendsPanel.options = { + size :{w:160,h:140}, + position:{x:((document.body.clientWidth * 95) / 100) - ((document.body.clientWidth * 95) / 100 - (((document.body.clientWidth * 95) / 100) - 160)),y:45,center:false}, + title :G_STRINGS.ID_COLOR_LEYENDS, + theme :"processmaker", + statusBar:false, + control :{resize:false,roll:false,drag:true,close:false}, + fx :{modal:false,opacity:false,blinkToFront:true,fadeIn:false,drag:false} + }; + oLeyendsPanel.setStyle = { + content:{overflow:"hidden"} + }; + oLeyendsPanel.events = { + remove: function() {delete(oLeyendsPanel);}.extend(this) + }; + oLeyendsPanel.make(); + oLeyendsPanel.loader.show(); + var oRPC = new leimnud.module.rpc.xmlhttp({ + url : "cases_Ajax", + args: "action=showLeyends" + }); + oRPC.callback = function(rpc){ + oLeyendsPanel.loader.hide(); + var scs=rpc.xmlhttp.responseText.extractScript(); + oLeyendsPanel.addContent(rpc.xmlhttp.responseText); + }.extend(this); + oRPC.make(); + }'); + + + G::RenderPage('publish', 'blank'); + } + + function getProcessInformation() + { + require_once 'classes/model/Process.php'; + $process = new Process(); + $processData = $process->load($_SESSION['PROCESS']); + require_once 'classes/model/Users.php'; + $user = new Users(); + try { + $userData = $user->load($processData['PRO_CREATE_USER']); + $processData['PRO_AUTHOR'] = $userData['USR_FIRSTNAME'] . ' ' . $userData['USR_LASTNAME']; + } catch ( Exception $oError ) { + $processData['PRO_AUTHOR'] = '(USER DELETED)'; + } + + $processData['PRO_CREATE_DATE'] = date('F j, Y', strtotime($processData['PRO_CREATE_DATE'])); + + print(G::json_encode($processData)); + } + + function getTaskInformation() + { + require_once 'classes/model/Task.php'; + $task = new Task(); + $taskData = $task->getDelegatedTaskData($_SESSION['TASK'], $_SESSION['APPLICATION'], $_SESSION['INDEX']); + + print(G::json_encode($taskData)); + } + + function caseHistory() + { + global $G_PUBLISH; + G::LoadClass("case"); + $c = Cases::getTransferHistoryCriteria($_SESSION['APPLICATION']); + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent('propeltable', 'paged-table', 'cases/cases_TransferHistory', $c, array()); + G::RenderPage('publish', 'blank'); + } + + function messageHistory() + { + global $G_PUBLISH; + G::LoadClass("case"); + $oCase = new Cases(); + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent('propeltable', 'paged-table', 'cases/cases_Messages', $oCase->getHistoryMessagesTracker($_SESSION['APPLICATION'])); + G::RenderPage('publish', 'blank'); + } + + function dynaformHistory() + { + global $G_PUBLISH; + G::LoadClass("case"); + $oCase = new Cases(); + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent('propeltable', 'paged-table', 'cases/cases_AllDynaformsList', $oCase->getallDynaformsCriteria($_SESSION['PROCESS'], $_SESSION['APPLICATION'], $_SESSION['TASK'], $_SESSION['USER_LOGGED'])); + G::RenderPage('publish', 'blank'); + } + + function uploadedDocuments() + { + global $G_PUBLISH; + G::LoadClass("case"); + $oCase = new Cases(); + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent('propeltable', 'paged-table', 'cases/cases_AllInputdocsList', $oCase->getAllUploadedDocumentsCriteria($_SESSION['PROCESS'], $_SESSION['APPLICATION'], $_SESSION['TASK'], $_SESSION['USER_LOGGED'])); + G::RenderPage('publish', 'blank'); + } + + function generatedDocuments() + { + global $G_PUBLISH; + G::LoadClass("case"); + $oCase = new Cases(); + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent('propeltable', 'paged-table', 'cases/cases_AllOutputdocsList', $oCase->getAllGeneratedDocumentsCriteria($_SESSION['PROCESS'], $_SESSION['APPLICATION'], $_SESSION['TASK'], $_SESSION['USER_LOGGED'])); + G::RenderPage('publish', 'blank'); + } + + function cancelCase() + { + G::LoadClass("case"); + $oCase = new Cases(); + $multiple = false; + + if( isset($_POST['APP_UID']) && isset($_POST['DEL_INDEX']) ) { + $APP_UID = $_POST['APP_UID']; + $DEL_INDEX = $_POST['DEL_INDEX']; + + $appUids = explode(',', $APP_UID); + $delIndexes = explode(',', $DEL_INDEX); + if( count($appUids) > 1 && count($delIndexes) > 1 ) + $multiple = true; + } else if( isset($_POST['sApplicationUID']) && isset($_POST['iIndex']) ){ + $APP_UID = $_POST['sApplicationUID']; + $DEL_INDEX = $_POST['iIndex']; + } else { + $APP_UID = $_SESSION['APPLICATION']; + $DEL_INDEX = $_SESSION['INDEX']; + } + + if( $multiple ) { + foreach($appUids as $i=>$appUid) + $oCase->cancelCase($appUid, $delIndexes[$i], $_SESSION['USER_LOGGED']); + } else + $oCase->cancelCase($APP_UID, $DEL_INDEX, $_SESSION['USER_LOGGED']); + } + + function getUsersToReassign() + { + G::LoadClass("case"); + $case = new Cases(); + $result->data = $case->getUsersToReassign($_SESSION['TASK'], $_SESSION['USER_LOGGED']); + + print G::json_encode($result); + + } + + function reassignCase() + { + require_once 'classes/model/Application.php'; + require_once 'classes/model/Users.php'; + G::LoadClass("case"); + $cases = new Cases(); + $user = new Users(); + $app = new Application(); + + $TO_USR_UID = $_POST['USR_UID']; + try{ + $cases->reassignCase($_SESSION['APPLICATION'], $_SESSION['INDEX'], $_SESSION['USER_LOGGED'], $TO_USR_UID); + $caseData = $app->load($_SESSION['APPLICATION']); + $userData = $user->load($TO_USR_UID); + //print_r($caseData); + $data['APP_NUMBER'] = $caseData['APP_NUMBER']; + $data['USER'] = $userData['USR_LASTNAME'].' '. $userData['USR_FIRSTNAME']; //TODO change with the farmated username from environment conf + $result->status = 0; + $result->msg = G::LoadTranslation('ID_REASSIGNMENT_SUCCESS', SYS_LANG, $data); + } catch(Exception $e){ + $result->status = 1; + $result->msg = $e->getMessage(); + } + + print G::json_encode($result); + } + + + function pauseCase() + { + try{ + G::LoadClass("case"); + $unpauseDate = $_REQUEST['unpauseDate']; + $oCase = new Cases(); + if( isset($_POST['APP_UID']) && isset($_POST['DEL_INDEX']) ) { + $APP_UID = $_POST['APP_UID']; + $DEL_INDEX = $_POST['DEL_INDEX']; + } else if( isset($_POST['sApplicationUID']) && isset($_POST['iIndex']) ){ + $APP_UID = $_POST['sApplicationUID']; + $DEL_INDEX = $_POST['iIndex']; + } else { + $APP_UID = $_SESSION['APPLICATION']; + $DEL_INDEX = $_SESSION['INDEX']; + } + + $oCase->pauseCase($APP_UID, $DEL_INDEX, $_SESSION['USER_LOGGED'], $unpauseDate); + $app = new Application(); + $caseData = $app->load($APP_UID); + $data['APP_NUMBER'] = $caseData['APP_NUMBER']; + $data['UNPAUSE_DATE'] = $unpauseDate; + + $result->success = true; + $result->msg = G::LoadTranslation('ID_CASE_PAUSED_SUCCESSFULLY', SYS_LANG, $data); + } catch(Exception $e) { + $result->success = false; + $result->msg = $e->getMessage(); + } + echo G::json_encode($result); + } + +} diff --git a/workflow/engine/methods/cases/cases_CatchSelfService.php b/workflow/engine/methods/cases/cases_CatchSelfService.php index cefba1c93..1d1109d21 100644 --- a/workflow/engine/methods/cases/cases_CatchSelfService.php +++ b/workflow/engine/methods/cases/cases_CatchSelfService.php @@ -83,6 +83,7 @@ $G_SUB_MENU = 'caseOptions'; $G_ID_MENU_SELECTED = 'CASES'; $G_ID_SUB_MENU_SELECTED = '_'; $oHeadPublisher =& headPublisher::getSingleton(); +$oHeadPublisher->addScriptCode("parent.showCaseNavigatorPanel(false, true, false)"); $oHeadPublisher->addScriptCode(' var Cse = {}; Cse.panels = {}; @@ -101,4 +102,4 @@ $oHeadPublisher->addScriptFile('/jscore/cases/core/cases_Step.js'); $G_PUBLISH = new Publisher; $G_PUBLISH->AddContent('xmlform', 'xmlform', 'cases/cases_CatchSelfService.xml', '', $Fields, 'cases_CatchExecute'); -G::RenderPage( 'publish', 'green-submenu'); +G::RenderPage( 'publish', 'blank'); diff --git a/workflow/engine/methods/cases/cases_Resume.php b/workflow/engine/methods/cases/cases_Resume.php index 36806a8a6..cefffcf44 100644 --- a/workflow/engine/methods/cases/cases_Resume.php +++ b/workflow/engine/methods/cases/cases_Resume.php @@ -73,11 +73,13 @@ $Fields['STATUS'] = ucfirst(strtolower(G::LoadTranslation('ID_CANCELLED'))); break; } + //$Fields['STATUS'] = $aRow['APP_TYPE']; } - + /* Render page */ $oHeadPublisher =& headPublisher::getSingleton(); + $oHeadPublisher->addScriptCode("parent.showCaseNavigatorPanel(false, true, false)"); $oHeadPublisher->addScriptCode(' var Cse = {}; Cse.panels = {}; @@ -105,4 +107,4 @@ $oHeadPublisher->addScriptFile('/jscore/cases/core/cases_Step.js'); $G_PUBLISH = new Publisher; $G_PUBLISH->AddContent('xmlform', 'xmlform', 'cases/cases_Resume.xml', '', $Fields, ''); - G::RenderPage( 'publish', 'green-submenu'); + G::RenderPage( 'publish', 'blank'); diff --git a/workflow/engine/methods/cases/cases_Step.php b/workflow/engine/methods/cases/cases_Step.php index 674e79fd3..2fb4c94ae 100644 --- a/workflow/engine/methods/cases/cases_Step.php +++ b/workflow/engine/methods/cases/cases_Step.php @@ -933,7 +933,7 @@ $oDbConnections = new dbConnections($_SESSION['PROCESS']); $oDbConnections->loadAdditionalConnections(); $stepFilename = "$sNamespace/$sStepName"; - $G_PUBLISH->AddContent('content', $stepFilename ); + $G_PUBLISH->AddContent('content', $stepFilename); break; } @@ -951,6 +951,7 @@ /* Render page */ $oHeadPublisher =& headPublisher::getSingleton(); + $oHeadPublisher->addScriptCode("parent.showCaseNavigatorPanel(true, true, true);"); $oHeadPublisher->addScriptCode(' var showSteps = function() { @@ -993,7 +994,7 @@ else $skin = "green"; - G::RenderPage('publish', $skin . '-submenu'); + G::RenderPage('publish', 'blank'); if( $_SESSION['TRIGGER_DEBUG']['ISSET'] ){ G::evalJScript('showdebug();'); diff --git a/workflow/engine/methods/cases/open.php b/workflow/engine/methods/cases/open.php new file mode 100755 index 000000000..e7e3d7f0c --- /dev/null +++ b/workflow/engine/methods/cases/open.php @@ -0,0 +1,47 @@ +. + * + * For more information, contact Colosa Inc, 2566 Le Jeune Rd., + * Coral Gables, FL, 33134, USA, or email info@colosa.com. + * + */ + + /** + * @author Erik Amaru Ortiz + * @date Jan 3th, 2010 + */ + + $oHeadPublisher =& headPublisher::getSingleton(); + $oHeadPublisher->usingExtJs('ux/miframe'); + $oHeadPublisher->addExtJsScript('cases/open', true); + // + $uri = ''; + foreach($_GET as $k=>$v) + $uri .= ($uri == '')? "$k=$v": "&$k=$v"; + + G::LoadClass("configuration"); + G::LoadClass("case"); + $conf = new Configurations; + + $oHeadPublisher->assign('uri', 'cases_Open?' . $uri); + $oHeadPublisher->assign('_ENV_CURRENT_DATE', $conf->getSystemDate(date('Y-m-d'))); + G::RenderPage('publish', 'extJs'); + + diff --git a/workflow/engine/templates/cases/casesList.js b/workflow/engine/templates/cases/casesList.js index fac777820..b85d0e3a3 100755 --- a/workflow/engine/templates/cases/casesList.js +++ b/workflow/engine/templates/cases/casesList.js @@ -31,7 +31,7 @@ function openCase(){ var appUid = rowModel.data.APP_UID; var delIndex = rowModel.data.DEL_INDEX; var caseTitle = (rowModel.data.APP_TITLE) ? rowModel.data.APP_TITLE : rowModel.data.APP_UID; - + Ext.Msg.show({ msg: TRANSLATIONS.LABEL_OPEN_CASE + ' ' + caseTitle, width:300, @@ -48,7 +48,8 @@ function openCase(){ case 'sent': // = participated params += 'APP_UID=' + appUid; params += '&DEL_INDEX=' + delIndex; - requestFile = '../cases/cases_Open'; + //requestFile = '../cases/cases_Open'; + requestFile = 'open'; break; case 'todo': case 'draft': @@ -57,10 +58,12 @@ function openCase(){ default: params += 'APP_UID=' + appUid; params += '&DEL_INDEX=' + delIndex; - requestFile = '../cases/cases_Open'; + //requestFile = '../cases/cases_Open'; + requestFile = 'open'; break; } + parent._CASE_TITLE = caseTitle; params += '&action=' + action; redirect(requestFile + '?' + params); diff --git a/workflow/engine/templates/cases/css/extjs-extend/xtheme-gray.css b/workflow/engine/templates/cases/css/extjs-extend/xtheme-gray.css index 2ca7b40f6..adf023b46 100755 --- a/workflow/engine/templates/cases/css/extjs-extend/xtheme-gray.css +++ b/workflow/engine/templates/cases/css/extjs-extend/xtheme-gray.css @@ -378,4 +378,11 @@ Pone en mayúsuclas el texto que se encuentra en el toolbar de arriba .pm_search_text_field input:focus,.pm_search_text_field .x-form-focus{ border:1px solid #c1c1c1 !important; border-right:none !important; -} \ No newline at end of file +} + +.ICON_STEPS { + background-image:url(/images/steps.png) !important; +} +.ICON_ASSIGN_TASK { + background-image:url(/images/flechav1A.png) !important; +} diff --git a/workflow/engine/templates/cases/main.js b/workflow/engine/templates/cases/main.js index 0316b6cd5..be9bea158 100755 --- a/workflow/engine/templates/cases/main.js +++ b/workflow/engine/templates/cases/main.js @@ -26,8 +26,8 @@ var debugVariablesFilter; var ReloadTreeMenuItemDetail; var NOTIFIER_FLAG = false; var result; - var _action = ''; +var _CASE_TITLE; new Ext.KeyMap(document, { key: Ext.EventObject.F5, @@ -710,3 +710,6 @@ function setDefaultOption(){ //document.getElementById('casesSubFrame').src = "casesListExtJs"; } +var notify = function(title, msg){ + PMExt.notify(title, msg); +}