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 [
+ '
'
+ ].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);
+}