diff --git a/.gitignore b/.gitignore index b951fad8a..976524a46 100755 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,4 @@ workflow/public_html/build-log.html temp.txt update.sh workflow/public_html/translations/ + diff --git a/framework/src/templates/error.phtml b/framework/src/templates/error.phtml new file mode 100644 index 000000000..443dcf739 --- /dev/null +++ b/framework/src/templates/error.phtml @@ -0,0 +1,80 @@ + + + + + + Runtime Exception. + + + +
+

System Error.

+
+

+ : +

+
+
+
+        
+        
+
+
+ + \ No newline at end of file diff --git a/gulliver/js/maborak/core/maborak.js b/gulliver/js/maborak/core/maborak.js index c2e6fce88..70640e8f2 100644 --- a/gulliver/js/maborak/core/maborak.js +++ b/gulliver/js/maborak/core/maborak.js @@ -1848,7 +1848,7 @@ replace(data).replace(/#/g,'#text').replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g,fun return html5;};function getHTML4(){var html4=mapCache.html4;if(!html4){html4=mapCache.html4=unpack({Z:'H|K|N|O|P',Y:'X|form|R|Q',ZG:'E|span|width|align|char|charoff|valign',X:'p|T|div|U|W|isindex|fieldset|table',ZF:'E|align|char|charoff|valign',W:'pre|hr|blockquote|address|center|noframes',ZE:'abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height',ZD:'[E][S]',U:'ul|ol|dl|menu|dir',ZC:'p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q',T:'h1|h2|h3|h4|h5|h6',ZB:'X|S|Q',S:'R|P',ZA:'a|G|J|M|O|P',R:'a|H|K|N|O',Q:'noscript|P',P:'ins|del|script',O:'input|select|textarea|label|button',N:'M|L',M:'em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym',L:'sub|sup',K:'J|I',J:'tt|i|b|u|s|strike',I:'big|small|font|basefont',H:'G|F',G:'br|span|bdo',F:'object|applet|img|map|iframe',E:'A|B|C',D:'accesskey|tabindex|onfocus|onblur',C:'onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup',B:'lang|xml:lang|dir',A:'id|class|style|title'},'script[id|charset|type|language|src|defer|xml:space][]'+'style[B|id|type|media|title|xml:space][]'+'object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]'+'param[id|name|value|valuetype|type][]'+'p[E|align][#|S]'+'a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]'+'br[A|clear][]'+'span[E][#|S]'+'bdo[A|C|B][#|S]'+'applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]'+'h1[E|align][#|S]'+'img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]'+'map[B|C|A|name][X|form|Q|area]'+'h2[E|align][#|S]'+'iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]'+'h3[E|align][#|S]'+'tt[E][#|S]'+'i[E][#|S]'+'b[E][#|S]'+'u[E][#|S]'+'s[E][#|S]'+'strike[E][#|S]'+'big[E][#|S]'+'small[E][#|S]'+'font[A|B|size|color|face][#|S]'+'basefont[id|size|color|face][]'+'em[E][#|S]'+'strong[E][#|S]'+'dfn[E][#|S]'+'code[E][#|S]'+'q[E|cite][#|S]'+'samp[E][#|S]'+'kbd[E][#|S]'+'var[E][#|S]'+'cite[E][#|S]'+'abbr[E][#|S]'+'acronym[E][#|S]'+'sub[E][#|S]'+'sup[E][#|S]'+'input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]'+'select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]'+'optgroup[E|disabled|label][option]'+'option[E|selected|disabled|label|value][]'+'textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]'+'label[E|for|accesskey|onfocus|onblur][#|S]'+'button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]'+'h4[E|align][#|S]'+'ins[E|cite|datetime][#|Y]'+'h5[E|align][#|S]'+'del[E|cite|datetime][#|Y]'+'h6[E|align][#|S]'+'div[E|align][#|Y]'+'ul[E|type|compact][li]'+'li[E|type|value][#|Y]'+'ol[E|type|compact|start][li]'+'dl[E|compact][dt|dd]'+'dt[E][#|S]'+'dd[E][#|Y]'+'menu[E|compact][li]'+'dir[E|compact][li]'+'pre[E|width|xml:space][#|ZA]'+'hr[E|align|noshade|size|width][]'+'blockquote[E|cite][#|Y]'+'address[E][#|S|p]'+'center[E][#|Y]'+'noframes[E][#|Y]'+'isindex[A|B|prompt][]'+'fieldset[E][#|legend|Y]'+'legend[E|accesskey|align][#|S]'+'table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]'+'caption[E|align][#|S]'+'col[ZG][]'+'colgroup[ZG][col]'+'thead[ZF][tr]'+'tr[ZF|bgcolor][th|td]'+'th[E|ZE][#|Y]'+'form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]'+'noscript[E][#|Y]'+'td[E|ZE][#|Y]'+'tfoot[ZF][tr]'+'tbody[ZF][tr]'+'area[E|D|shape|coords|href|nohref|alt|target][]'+'base[id|href|target][]'+'body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]');} return html4;};tinymce.html.Schema=function(settings){var self=this,elements={},children={},patternElements=[],validStyles,schemaItems;var whiteSpaceElementsMap,selfClosingElementsMap,shortEndedElementsMap,boolAttrMap,blockElementsMap,nonEmptyElementsMap,customElementsMap={};function createLookupTable(option,default_value,extend){var value=settings[option];if(!value){value=mapCache[option];if(!value){value=makeMap(default_value,' ',makeMap(default_value.toUpperCase(),' '));value=tinymce.extend(value,extend);mapCache[option]=value;}}else{value=makeMap(value,',',makeMap(value.toUpperCase(),' '));} return value;};settings=settings||{};schemaItems=settings.schema=="html5"?getHTML5():getHTML4();if(settings.verify_html===false) -settings.valid_elements='*[*]';if(settings.valid_styles){validStyles={};each(settings.valid_styles,function(value,key){validStyles[key]=tinymce.explode(value);});} +settings.valid_elements='*[*]';settings.valid_children='+body[style],+form[style],+div[style],+td[style],+table[style],+tbody[style],+tr[style],+span[style],+p[style]';if(settings.valid_styles){validStyles={};each(settings.valid_styles,function(value,key){validStyles[key]=tinymce.explode(value);});} whiteSpaceElementsMap=createLookupTable('whitespace_elements','pre script noscript style textarea');selfClosingElementsMap=createLookupTable('self_closing_elements','colgroup dd dt li option p td tfoot th thead tr');shortEndedElementsMap=createLookupTable('short_ended_elements','area base basefont br col frame hr img input isindex link meta param embed source wbr');boolAttrMap=createLookupTable('boolean_attributes','checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls');nonEmptyElementsMap=createLookupTable('non_empty_elements','td th iframe video audio object',shortEndedElementsMap);textBlockElementsMap=createLookupTable('text_block_elements','h1 h2 h3 h4 h5 h6 p div address pre form '+'blockquote center dir fieldset header footer article section hgroup aside nav figure');blockElementsMap=createLookupTable('block_elements','hr table tbody thead tfoot '+'th tr td li ol ul caption dl dt dd noscript menu isindex samp option datalist select optgroup',textBlockElementsMap);function patternToRegExp(str){return new RegExp('^'+str.replace(/([?+*])/g,'.$1')+'$');};function addValidElements(valid_elements){var ei,el,ai,al,yl,matches,element,attr,attrData,elementName,attrName,attrType,attributes,attributesOrder,prefix,outputName,globalAttributes,globalAttributesOrder,transElement,key,childKey,value,elementRuleRegExp=/^([#+\-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,attrRuleRegExp=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,hasPatternsRegExp=/[*?+]/;if(valid_elements){valid_elements=split(valid_elements);if(elements['@']){globalAttributes=elements['@'].attributes;globalAttributesOrder=elements['@'].attributesOrder;} for(ei=0,el=valid_elements.length;ei0){value=html[html.length-1];if(value.length>0&&value!=='\n') html.push('\n');} -html.push('<',name);if(attrs){for(i=0,l=attrs.length;i=0){attr.value=attr.value.substring(0,attr.value.indexOf(list[iList]));}} +html.push('<',name);if(attrs){for(i=0,l=attrs.length;i=0){attr.value=attr.value.substring(0,attr.value.indexOf(list[iList]));}} html.push(' ',attr.name,'="',encode(attr.value,true),'"');}} if(!empty||htmlOutput) html[html.length]='>';else @@ -2044,8 +2044,8 @@ writer.end(name);}}else handler(node);} if(node.type==1&&!settings.inner) walk(node);else -handlers[11](node);return writer.getContent();};}})(tinymce);tinymce.dom={};(function(namespace,expando){var w3cEventModel=!!document.addEventListener;function addEvent(target,name,callback,capture){if(target.addEventListener){if(name!='toStr'&&name!='concat'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){target.addEventListener(name,callback,capture||false);}}else if(target.attachEvent){if(name!='toStr'&&name!='concat'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){target.attachEvent('on'+name,callback);}}} -function removeEvent(target,name,callback,capture){if(target.removeEventListener){if(name!='toStr'&&name!='concat'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){target.removeEventListener(name,callback,capture||false);}}else if(target.detachEvent){if(name!='toStr'&&name!='concat'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){target.detachEvent('on'+name,callback);}}} +handlers[11](node);return writer.getContent();};}})(tinymce);tinymce.dom={};(function(namespace,expando){var w3cEventModel=!!document.addEventListener;function addEvent(target,name,callback,capture){if(target.addEventListener){if(name!='toStr'&&name!='concatMaborak'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){target.addEventListener(name,callback,capture||false);}}else if(target.attachEvent){if(name!='toStr'&&name!='concatMaborak'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){target.attachEvent('on'+name,callback);}}} +function removeEvent(target,name,callback,capture){if(target.removeEventListener){if(name!='toStr'&&name!='concatMaborak'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){target.removeEventListener(name,callback,capture||false);}}else if(target.detachEvent){if(name!='toStr'&&name!='concatMaborak'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){target.detachEvent('on'+name,callback);}}} function fix(original_event,data){var name,event=data||{};function returnFalse(){return false;} function returnTrue(){return true;} for(name in original_event){if(name!=="layerX"&&name!=="layerY"){event[name]=original_event[name];}} @@ -2390,7 +2390,7 @@ return results;};Sizzle.uniqueSort=function(results){if(sortOrder){hasDuplicate= return results;};Sizzle.matches=function(expr,set){return Sizzle(expr,null,null,set);};Sizzle.matchesSelector=function(node,expr){return Sizzle(expr,null,null,[node]).length>0;};Sizzle.find=function(expr,context,isXML){var set,i,len,match,type,left;if(!expr){return[];} for(i=0,len=Expr.order.length;i= 0 ) { attr.value = attr.value.substring(0, attr.value.indexOf(list[iList])); @@ -4591,12 +4592,12 @@ tinymce.dom = {}; function addEvent(target, name, callback, capture) { if (target.addEventListener) { //conditional statement in order to maintain compatibility with the maborak processmaker library - if(name!='toStr'&&name!='concat'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){ + if(name!='toStr'&&name!='concatMaborak'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){ target.addEventListener(name, callback, capture || false); } } else if (target.attachEvent) { //conditional statement in order to maintain compatibility with the maborak processmaker library - if(name!='toStr'&&name!='concat'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){ + if(name!='toStr'&&name!='concatMaborak'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){ target.attachEvent('on' + name, callback); } } @@ -4604,11 +4605,11 @@ tinymce.dom = {}; function removeEvent(target, name, callback, capture) { if (target.removeEventListener) { - if(name!='toStr'&&name!='concat'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){ + if(name!='toStr'&&name!='concatMaborak'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){ target.removeEventListener(name, callback, capture || false); } } else if (target.detachEvent) { - if(name!='toStr'&&name!='concat'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){ + if(name!='toStr'&&name!='concatMaborak'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){ target.detachEvent('on' + name, callback); } } @@ -8010,7 +8011,7 @@ Sizzle.filter = function( expr, set, inplace, not ) { while ( expr && set.length ) { for ( type in Expr.filter ) { - if(type!='toStr'&&type!='concat'&&type!='get_by_key'&&type!='expand'&&type!='setParent'&&type!='isset_key'&&type!='toJSONString'&&type!='isObject'&&type!='isArray'&&type!='isObjectStrict'){ + if(type!='toStr'&&type!='concatMaborak'&&type!='get_by_key'&&type!='expand'&&type!='setParent'&&type!='isset_key'&&type!='toJSONString'&&type!='isObject'&&type!='isArray'&&type!='isObjectStrict'){ if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { filter = Expr.filter[ type ]; left = match[1]; diff --git a/gulliver/system/class.bootstrap.php b/gulliver/system/class.bootstrap.php index 36ec128d5..3e11bd2b8 100644 --- a/gulliver/system/class.bootstrap.php +++ b/gulliver/system/class.bootstrap.php @@ -31,6 +31,10 @@ class Bootstrap public static function registerClass($className, $includePath) { + if (! class_exists('\Maveriks\Util\ClassLoader')) { + self::displayMaveriksNotLoadedError(); + } + $loader = Maveriks\Util\ClassLoader::getInstance(); $loader->addClass($className, $includePath); } @@ -2832,5 +2836,28 @@ class Bootstrap return $result; } + + public static function displayMaveriksNotLoadedError() + { + if (! class_exists('\Maveriks\Util\ClassLoader')) { + require PATH_TRUNK . "framework/src/Maveriks/pattern/Mvc/View.php"; + require PATH_TRUNK . "framework/src/Maveriks/pattern/Mvc/PhtmlView.php"; + + $message = "Please review your apache virtual host configuration file, and be sure you have the following rules: + + + RewriteEngine On + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^(.*)$ /app.php [QSA,L] + "; + + $view = new Maveriks\Pattern\Mvc\PhtmlView(PATH_TRUNK . "framework/src/templates/error.phtml"); + $view->set("title", "Sistem Configuration Error"); + $view->set("message", htmlentities($message)); + + echo $view->getOutput(); + die(); + } + } } diff --git a/gulliver/system/class.wysiwygEditor.php b/gulliver/system/class.wysiwygEditor.php index 28bfa8dd7..fd4952b8b 100644 --- a/gulliver/system/class.wysiwygEditor.php +++ b/gulliver/system/class.wysiwygEditor.php @@ -183,6 +183,7 @@ class XmlForm_Field_WYSIWYG_EDITOR extends XmlForm_Field external_image_list_url : "js/image_list.js", media_external_list_url : "js/media_list.js", extended_valid_elements : "div[*],script[language|type|src]", + valid_children : "+body[style],+form[style],+div[style],+td[style],+table[style],+tbody[style],+tr[style],+span[style],+p[style]", // noneditable_regexp: /[^"|^:|^\']{(.*?)}/g, template_replace_values : { username : "Some User", @@ -211,6 +212,7 @@ class XmlForm_Field_WYSIWYG_EDITOR extends XmlForm_Field // General options mode : "textareas", theme : "advanced", + valid_children : "+body[style],+form[style],+div[style],+td[style],+table[style],+tbody[style],+tr[style],+span[style],+p[style]", plugins : "autolink,lists,spellchecker,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,imagemanager,filemanager", // Theme options diff --git a/workflow/engine/bin/cron_single.php b/workflow/engine/bin/cron_single.php index 928eb67a0..6bf7f19b1 100755 --- a/workflow/engine/bin/cron_single.php +++ b/workflow/engine/bin/cron_single.php @@ -326,9 +326,7 @@ Bootstrap::registerClass('UsersPeer', PATH_HOME . "engine/classes/mode Bootstrap::registerClass('Xml_Node', PATH_GULLIVER . "class.xmlDocument.php"); -G::LoadClass("case"); G::LoadClass("dates"); -G::LoadClass("pmScript"); if (!defined('SYS_SYS')) { $sObject = $argv[1]; @@ -451,6 +449,13 @@ if (!defined('SYS_SYS')) { function processWorkspace() { try { + Bootstrap::LoadClass("plugin"); + $oPluginRegistry =& PMPluginRegistry::getSingleton(); + if (file_exists(PATH_DATA_SITE . 'plugin.singleton')) { + $oPluginRegistry->unSerializeInstance(file_get_contents(PATH_DATA_SITE . 'plugin.singleton')); + } + Bootstrap::LoadClass("case"); + global $sObject; global $sLastExecution; @@ -578,11 +583,7 @@ function executePlugins() // Executing registered cron files // -> Get registered cron files - Bootstrap::LoadClass( 'plugin' ); $oPluginRegistry =& PMPluginRegistry::getSingleton(); - if (file_exists(PATH_DATA_SITE . 'plugin.singleton')) { - $oPluginRegistry->unSerializeInstance(file_get_contents(PATH_DATA_SITE . 'plugin.singleton')); - } $cronFiles = $oPluginRegistry->getCronFiles(); // -> Execute functions diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index bdbeb7718..c3c2cb5ba 100755 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -512,16 +512,11 @@ class Cases try { $oApp = new Application; $aFields = $oApp->Load($sAppUid); - //$aFields = $oApp->toArray(BasePeer::TYPE_FIELDNAME); - $appData = @unserialize($aFields['APP_DATA']); - // BUG 8134, FIX!// for single/double quote troubles // Unserialize with utf8 content get trouble - if ($appData === false) { - $appData = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", $aFields['APP_DATA']); - $appData = @unserialize($appData); - } + $appData = self::unserializeData($aFields['APP_DATA']); $aFields['APP_DATA'] = G::array_merges(G::getSystemConstants(), $appData); + switch ($oApp->getAppStatus()) { case 'COMPLETED': $aFields['STATUS'] = G::LoadTranslation('ID_COMPLETED'); @@ -6456,13 +6451,13 @@ class Cases $row[] = $aUser['USR_UID']; } } - - global $RBAC; - //Adding the actual user if this has the PM_REASSIGNCASE permission assigned. + + global $RBAC; + //Adding the actual user if this has the PM_REASSIGNCASE permission assigned. if ($RBAC->userCanAccess('PM_REASSIGNCASE') == 1){ if(!in_array($RBAC->aUserInfo['USER_INFO']['USR_UID'], $row)){ $row[] = $RBAC->aUserInfo['USER_INFO']['USR_UID']; - } + } } require_once 'classes/model/Users.php'; @@ -6728,4 +6723,16 @@ class Cases } } } + + public function unserializeData($data) { + $unserializedData = @unserialize($data); + + // BUG 8134, FIX!// for single/double quote troubles // Unserialize with utf8 content get trouble + if ($unserializedData === false) { + $unserializedData = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", $data); + $unserializedData = @unserialize($unserializedData); + } + + return $unserializedData; + } } \ No newline at end of file diff --git a/workflow/engine/classes/class.processMap.php b/workflow/engine/classes/class.processMap.php index e5a8013ae..225e6b3fd 100755 --- a/workflow/engine/classes/class.processMap.php +++ b/workflow/engine/classes/class.processMap.php @@ -3339,6 +3339,7 @@ class processMap $oCriteria->addJoin(ProcessUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); $oCriteria->add(ProcessUserPeer::PU_TYPE, 'SUPERVISOR'); $oCriteria->add(ProcessUserPeer::PRO_UID, $sProcessUID); + $oCriteria->add(UsersPeer::USR_STATUS, "CLOSED", Criteria::NOT_EQUAL); $oCriteria->addAscendingOrderByColumn(UsersPeer::USR_FIRSTNAME); $oDataset = ProcessUserPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); diff --git a/workflow/engine/classes/model/AppCacheView.php b/workflow/engine/classes/model/AppCacheView.php index c1a802df6..cc049f67a 100755 --- a/workflow/engine/classes/model/AppCacheView.php +++ b/workflow/engine/classes/model/AppCacheView.php @@ -361,6 +361,8 @@ class AppCacheView extends BaseAppCacheView $c2 = new Criteria(); $c2->clearSelectColumns(); $c2->addSelectColumn(AppDelegationPeer::APP_UID); + $c2->addSelectColumn(ApplicationPeer::APP_DATA); + $c2->addJoin(AppDelegationPeer::APP_UID, ApplicationPeer::APP_UID, Criteria::LEFT_JOIN); $c2->add(AppDelegationPeer::TAS_UID, $row['TAS_UID']); $c2->add(AppDelegationPeer::USR_UID, ''); $c2->add(AppDelegationPeer::DEL_THREAD_STATUS, 'OPEN'); @@ -368,10 +370,11 @@ class AppCacheView extends BaseAppCacheView $rs2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $rs2->next(); while ($row2 = $rs2->getRow()) { - $caseData = $caseInstance->LoadCase($row2['APP_UID']); - if (isset($caseData['APP_DATA'][$tasGroupVariable])) { - if (trim($caseData['APP_DATA'][$tasGroupVariable]) != '') { - if (in_array(trim($caseData['APP_DATA'][$tasGroupVariable]), $aGroups)) { + $caseData = $caseInstance->unserializeData($row2['APP_DATA']); + + if (isset($caseData[$tasGroupVariable])) { + if (trim($caseData[$tasGroupVariable]) != '') { + if (in_array(trim($caseData[$tasGroupVariable]), $aGroups)) { $cases[] = $row2['APP_UID']; } } diff --git a/workflow/engine/classes/model/map/DynaformMapBuilder.php b/workflow/engine/classes/model/map/DynaformMapBuilder.php index 9eac141b1..e2450e7bb 100755 --- a/workflow/engine/classes/model/map/DynaformMapBuilder.php +++ b/workflow/engine/classes/model/map/DynaformMapBuilder.php @@ -73,6 +73,8 @@ class DynaformMapBuilder $tMap->addColumn('DYN_FILENAME', 'DynFilename', 'string', CreoleTypes::VARCHAR, true, 100); + $tMap->addColumn('DYN_CONTENT', 'DynContent', 'string', CreoleTypes::LONGVARCHAR, false, null); + $tMap->addValidator('DYN_TYPE', 'validValues', 'propel.validator.ValidValuesValidator', 'xmlform|grid', 'Please select a valid dynaform type.'); } // doBuild() diff --git a/workflow/engine/classes/model/om/BaseDynaform.php b/workflow/engine/classes/model/om/BaseDynaform.php index 8a2ae695c..2542993af 100755 --- a/workflow/engine/classes/model/om/BaseDynaform.php +++ b/workflow/engine/classes/model/om/BaseDynaform.php @@ -51,6 +51,12 @@ abstract class BaseDynaform extends BaseObject implements Persistent */ protected $dyn_filename = ''; + /** + * The value for the dyn_content field. + * @var string + */ + protected $dyn_content; + /** * Flag to prevent endless save loop, if this object is referenced * by another object which falls in this transaction. @@ -109,6 +115,17 @@ abstract class BaseDynaform extends BaseObject implements Persistent return $this->dyn_filename; } + /** + * Get the [dyn_content] column value. + * + * @return string + */ + public function getDynContent() + { + + return $this->dyn_content; + } + /** * Set the value of [dyn_uid] column. * @@ -197,6 +214,28 @@ abstract class BaseDynaform extends BaseObject implements Persistent } // setDynFilename() + /** + * Set the value of [dyn_content] column. + * + * @param string $v new value + * @return void + */ + public function setDynContent($v) + { + + // Since the native PHP type for this column is string, + // we will cast the input to a string (if it is not). + if ($v !== null && !is_string($v)) { + $v = (string) $v; + } + + if ($this->dyn_content !== $v) { + $this->dyn_content = $v; + $this->modifiedColumns[] = DynaformPeer::DYN_CONTENT; + } + + } // setDynContent() + /** * Hydrates (populates) the object variables with values from the database resultset. * @@ -222,12 +261,14 @@ abstract class BaseDynaform extends BaseObject implements Persistent $this->dyn_filename = $rs->getString($startcol + 3); + $this->dyn_content = $rs->getString($startcol + 4); + $this->resetModified(); $this->setNew(false); // FIXME - using NUM_COLUMNS may be clearer. - return $startcol + 4; // 4 = DynaformPeer::NUM_COLUMNS - DynaformPeer::NUM_LAZY_LOAD_COLUMNS). + return $startcol + 5; // 5 = DynaformPeer::NUM_COLUMNS - DynaformPeer::NUM_LAZY_LOAD_COLUMNS). } catch (Exception $e) { throw new PropelException("Error populating Dynaform object", $e); @@ -443,6 +484,9 @@ abstract class BaseDynaform extends BaseObject implements Persistent case 3: return $this->getDynFilename(); break; + case 4: + return $this->getDynContent(); + break; default: return null; break; @@ -467,6 +511,7 @@ abstract class BaseDynaform extends BaseObject implements Persistent $keys[1] => $this->getProUid(), $keys[2] => $this->getDynType(), $keys[3] => $this->getDynFilename(), + $keys[4] => $this->getDynContent(), ); return $result; } @@ -510,6 +555,9 @@ abstract class BaseDynaform extends BaseObject implements Persistent case 3: $this->setDynFilename($value); break; + case 4: + $this->setDynContent($value); + break; } // switch() } @@ -549,6 +597,10 @@ abstract class BaseDynaform extends BaseObject implements Persistent $this->setDynFilename($arr[$keys[3]]); } + if (array_key_exists($keys[4], $arr)) { + $this->setDynContent($arr[$keys[4]]); + } + } /** @@ -576,6 +628,10 @@ abstract class BaseDynaform extends BaseObject implements Persistent $criteria->add(DynaformPeer::DYN_FILENAME, $this->dyn_filename); } + if ($this->isColumnModified(DynaformPeer::DYN_CONTENT)) { + $criteria->add(DynaformPeer::DYN_CONTENT, $this->dyn_content); + } + return $criteria; } @@ -636,6 +692,8 @@ abstract class BaseDynaform extends BaseObject implements Persistent $copyObj->setDynFilename($this->dyn_filename); + $copyObj->setDynContent($this->dyn_content); + $copyObj->setNew(true); diff --git a/workflow/engine/classes/model/om/BaseDynaformPeer.php b/workflow/engine/classes/model/om/BaseDynaformPeer.php index 0fce2d844..d9e8aa7b0 100755 --- a/workflow/engine/classes/model/om/BaseDynaformPeer.php +++ b/workflow/engine/classes/model/om/BaseDynaformPeer.php @@ -25,7 +25,7 @@ abstract class BaseDynaformPeer const CLASS_DEFAULT = 'classes.model.Dynaform'; /** The total number of columns. */ - const NUM_COLUMNS = 4; + const NUM_COLUMNS = 5; /** The number of lazy-loaded columns. */ const NUM_LAZY_LOAD_COLUMNS = 0; @@ -43,6 +43,9 @@ abstract class BaseDynaformPeer /** the column name for the DYN_FILENAME field */ const DYN_FILENAME = 'DYNAFORM.DYN_FILENAME'; + /** the column name for the DYN_CONTENT field */ + const DYN_CONTENT = 'DYNAFORM.DYN_CONTENT'; + /** The PHP to DB Name Mapping */ private static $phpNameMap = null; @@ -54,10 +57,10 @@ abstract class BaseDynaformPeer * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' */ private static $fieldNames = array ( - BasePeer::TYPE_PHPNAME => array ('DynUid', 'ProUid', 'DynType', 'DynFilename', ), - BasePeer::TYPE_COLNAME => array (DynaformPeer::DYN_UID, DynaformPeer::PRO_UID, DynaformPeer::DYN_TYPE, DynaformPeer::DYN_FILENAME, ), - BasePeer::TYPE_FIELDNAME => array ('DYN_UID', 'PRO_UID', 'DYN_TYPE', 'DYN_FILENAME', ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, ) + BasePeer::TYPE_PHPNAME => array ('DynUid', 'ProUid', 'DynType', 'DynFilename', 'DynContent', ), + BasePeer::TYPE_COLNAME => array (DynaformPeer::DYN_UID, DynaformPeer::PRO_UID, DynaformPeer::DYN_TYPE, DynaformPeer::DYN_FILENAME, DynaformPeer::DYN_CONTENT, ), + BasePeer::TYPE_FIELDNAME => array ('DYN_UID', 'PRO_UID', 'DYN_TYPE', 'DYN_FILENAME', 'DYN_CONTENT', ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, ) ); /** @@ -67,10 +70,10 @@ abstract class BaseDynaformPeer * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 */ private static $fieldKeys = array ( - BasePeer::TYPE_PHPNAME => array ('DynUid' => 0, 'ProUid' => 1, 'DynType' => 2, 'DynFilename' => 3, ), - BasePeer::TYPE_COLNAME => array (DynaformPeer::DYN_UID => 0, DynaformPeer::PRO_UID => 1, DynaformPeer::DYN_TYPE => 2, DynaformPeer::DYN_FILENAME => 3, ), - BasePeer::TYPE_FIELDNAME => array ('DYN_UID' => 0, 'PRO_UID' => 1, 'DYN_TYPE' => 2, 'DYN_FILENAME' => 3, ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, ) + BasePeer::TYPE_PHPNAME => array ('DynUid' => 0, 'ProUid' => 1, 'DynType' => 2, 'DynFilename' => 3, 'DynContent' => 4, ), + BasePeer::TYPE_COLNAME => array (DynaformPeer::DYN_UID => 0, DynaformPeer::PRO_UID => 1, DynaformPeer::DYN_TYPE => 2, DynaformPeer::DYN_FILENAME => 3, DynaformPeer::DYN_CONTENT => 4, ), + BasePeer::TYPE_FIELDNAME => array ('DYN_UID' => 0, 'PRO_UID' => 1, 'DYN_TYPE' => 2, 'DYN_FILENAME' => 3, 'DYN_CONTENT' => 4, ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, ) ); /** @@ -179,6 +182,8 @@ abstract class BaseDynaformPeer $criteria->addSelectColumn(DynaformPeer::DYN_FILENAME); + $criteria->addSelectColumn(DynaformPeer::DYN_CONTENT); + } const COUNT = 'COUNT(DYNAFORM.DYN_UID)'; diff --git a/workflow/engine/classes/model/om/BaseHolidayPeer.php b/workflow/engine/classes/model/om/BaseHolidayPeer.php index 46a07d158..e517622e4 100755 --- a/workflow/engine/classes/model/om/BaseHolidayPeer.php +++ b/workflow/engine/classes/model/om/BaseHolidayPeer.php @@ -348,8 +348,8 @@ abstract class BaseHolidayPeer $criteria = $values->buildCriteria(); // build Criteria from Holiday object } - $criteria->remove(HolidayPeer::HLD_UID); // remove pkey col since this table uses auto-increment - + //$criteria->remove(HolidayPeer::HLD_UID); // remove pkey col since this table uses auto-increment + // Set the correct dbName $criteria->setDbName(self::DATABASE_NAME); diff --git a/workflow/engine/classes/model/om/BaseOutputDocument.php b/workflow/engine/classes/model/om/BaseOutputDocument.php index 889500012..97ca4755a 100755 --- a/workflow/engine/classes/model/om/BaseOutputDocument.php +++ b/workflow/engine/classes/model/om/BaseOutputDocument.php @@ -151,7 +151,7 @@ abstract class BaseOutputDocument extends BaseObject implements Persistent * The value for the out_doc_open_type field. * @var int */ - protected $out_doc_open_type = 0; + protected $out_doc_open_type = 1; /** * Flag to prevent endless save loop, if this object is referenced @@ -853,7 +853,7 @@ abstract class BaseOutputDocument extends BaseObject implements Persistent $v = (int) $v; } - if ($this->out_doc_open_type !== $v || $v === 0) { + if ($this->out_doc_open_type !== $v || $v === 1) { $this->out_doc_open_type = $v; $this->modifiedColumns[] = OutputDocumentPeer::OUT_DOC_OPEN_TYPE; } diff --git a/workflow/engine/classes/model/om/BaseWebEntry.php b/workflow/engine/classes/model/om/BaseWebEntry.php index b0757e7f8..64624b9c2 100644 --- a/workflow/engine/classes/model/om/BaseWebEntry.php +++ b/workflow/engine/classes/model/om/BaseWebEntry.php @@ -73,7 +73,7 @@ abstract class BaseWebEntry extends BaseObject implements Persistent * The value for the we_data field. * @var string */ - protected $we_data = ''; + protected $we_data; /** * The value for the we_create_usr_uid field. @@ -456,7 +456,7 @@ abstract class BaseWebEntry extends BaseObject implements Persistent $v = (string) $v; } - if ($this->we_data !== $v || $v === '') { + if ($this->we_data !== $v) { $this->we_data = $v; $this->modifiedColumns[] = WebEntryPeer::WE_DATA; } diff --git a/workflow/engine/config/schema.xml b/workflow/engine/config/schema.xml index d5ce2d6b6..cd2d14556 100755 --- a/workflow/engine/config/schema.xml +++ b/workflow/engine/config/schema.xml @@ -458,6 +458,7 @@ + diff --git a/workflow/engine/controllers/admin.php b/workflow/engine/controllers/admin.php index b5d3f068b..51c7f6b2c 100644 --- a/workflow/engine/controllers/admin.php +++ b/workflow/engine/controllers/admin.php @@ -15,6 +15,8 @@ class Admin extends Controller public function system () { + global $RBAC; + $RBAC->requirePermissions( 'PM_SETUP' ); require_once PATH_CONTROLLERS . 'main.php'; G::loadClass( 'system' ); $skinsList = System::getSkingList(); @@ -60,6 +62,8 @@ class Admin extends Controller public function uxList () { + global $RBAC; + $RBAC->requirePermissions( 'PM_SETUP' ); require_once PATH_CONTROLLERS . 'adminProxy.php'; $this->includeExtJS( 'admin/uxUsersList' ); G::LoadClass( 'configuration' ); diff --git a/workflow/engine/controllers/dashboard.php b/workflow/engine/controllers/dashboard.php index ddafc144e..e7d062236 100644 --- a/workflow/engine/controllers/dashboard.php +++ b/workflow/engine/controllers/dashboard.php @@ -16,6 +16,12 @@ class Dashboard extends Controller // Class constructor public function __construct () { + global $RBAC; + if ($RBAC->userCanAccess('PM_DASHBOARD') != 1) { + G::SendTemporalMessage('ID_USER_HAVENT_RIGHTS_PAGE', 'error', 'labels'); + G::header( 'location: login/login' ); + exit(0); + } G::LoadClass( 'pmDashlet' ); $this->pmDashlet = new PMDashlet(); } diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql index 0b5228978..34609d99a 100755 --- a/workflow/engine/data/mysql/schema.sql +++ b/workflow/engine/data/mysql/schema.sql @@ -204,6 +204,7 @@ CREATE TABLE `DYNAFORM` `PRO_UID` VARCHAR(32) default '0' NOT NULL, `DYN_TYPE` VARCHAR(20) default 'xmlform' NOT NULL, `DYN_FILENAME` VARCHAR(100) default '' NOT NULL, + `DYN_CONTENT` MEDIUMTEXT, PRIMARY KEY (`DYN_UID`) )ENGINE=InnoDB DEFAULT CHARSET='utf8' COMMENT='Forms required'; #----------------------------------------------------------------------------- diff --git a/workflow/engine/js/stagesmap/core/stagesmap.js b/workflow/engine/js/stagesmap/core/stagesmap.js index da3468888..31322d611 100755 --- a/workflow/engine/js/stagesmap/core/stagesmap.js +++ b/workflow/engine/js/stagesmap/core/stagesmap.js @@ -12,7 +12,7 @@ var stagesmap=function(){ render:{ base:function(xml) { this.panels.editor.loader.hide(); - this.data.db=xml.xmlhttp.responseText.parseJSON().concat({}); + this.data.db=xml.xmlhttp.responseText.parseJSON().concatMaborak({}); if (this.options.rw===true) { this.menu = new this.parent.module.app.menuRight(); this.menu.make({ @@ -433,7 +433,7 @@ stagesmap.prototype={ rw :true, mi :true, hideMenu:true - }.concat(this.options || {}); + }.concatMaborak(this.options || {}); this.options.target = this.parent.dom.element(this.options.target); if(!this.validate()){return false;} this.observers = { diff --git a/workflow/engine/methods/cases/cases_SaveData.php b/workflow/engine/methods/cases/cases_SaveData.php index 31bf122c5..263084f96 100644 --- a/workflow/engine/methods/cases/cases_SaveData.php +++ b/workflow/engine/methods/cases/cases_SaveData.php @@ -73,6 +73,13 @@ try { if ($_SESSION['TRIGGER_DEBUG']['NUM_TRIGGERS'] != 0) { $_SESSION['TRIGGER_DEBUG']['TRIGGERS_NAMES'] = $oCase->getTriggerNames( $triggers ); $_SESSION['TRIGGER_DEBUG']['TRIGGERS_VALUES'] = $triggers; + $oProcess = new Process(); + $oProcessFieds = $oProcess->Load( $_SESSION['PROCESS'] ); + + //trigger debug routines... + if (isset( $oProcessFieds['PRO_DEBUG'] ) && $oProcessFieds['PRO_DEBUG']) { + $trigger_debug_session = true; + } } if ($_SESSION['TRIGGER_DEBUG']['NUM_TRIGGERS'] != 0) { diff --git a/workflow/engine/methods/cases/cases_Scheduler_Log.php b/workflow/engine/methods/cases/cases_Scheduler_Log.php index eaaec8343..bc28cfb4d 100755 --- a/workflow/engine/methods/cases/cases_Scheduler_Log.php +++ b/workflow/engine/methods/cases/cases_Scheduler_Log.php @@ -22,9 +22,11 @@ * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ +global $RBAC; if (($RBAC_Response = $RBAC->userCanAccess( "PM_LOGIN" )) != 1) { return $RBAC_Response; } +$RBAC->requirePermissions( 'PM_SETUP' ); $G_PUBLISH = new Publisher(); G::LoadClass( 'configuration' ); diff --git a/workflow/engine/methods/groups/groups_Ajax.php b/workflow/engine/methods/groups/groups_Ajax.php index aa2d04f96..76f350204 100644 --- a/workflow/engine/methods/groups/groups_Ajax.php +++ b/workflow/engine/methods/groups/groups_Ajax.php @@ -354,7 +354,7 @@ switch ($_POST['action']) { $rsCriteria = TaskUserPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); - if($rsCriteria->next() != 0) { + if ($rsCriteria->next()) { $message = "ERROR"; } diff --git a/workflow/engine/methods/login/sysLogin.php b/workflow/engine/methods/login/sysLogin.php index 5d01de47e..ab76b29e0 100755 --- a/workflow/engine/methods/login/sysLogin.php +++ b/workflow/engine/methods/login/sysLogin.php @@ -142,15 +142,31 @@ $_SESSION ['_DBArray'] = $_DBArray; $aField ['LOGIN_VERIFY_MSG'] = G::loadTranslation ('LOGIN_VERIFY_MSG'); $aField['USER_LANG'] = SYS_LANG; -//Get Server Configuration -//G::LoadClass ('serverConfiguration'); //already called -$oServerConf = & serverConf::getSingleton (); - $G_PUBLISH = new Publisher (); -if ($oServerConf->getProperty ('LOGIN_NO_WS')) { - $G_PUBLISH->AddContent ('xmlform', 'xmlform', 'login/sysLoginNoWS', '', $aField, 'sysLogin'); -} else { - $G_PUBLISH->AddContent ('xmlform', 'xmlform', 'login/sysLogin', '', $aField, 'sysLogin'); +if (!defined('WS_IN_LOGIN')) { + define('WS_IN_LOGIN', 'serverconf'); +} +$fileLogin = 'login/sysLogin'; +switch (WS_IN_LOGIN) { + case 'serverconf': + //Get Server Configuration + $oServerConf = & serverConf::getSingleton (); + if ($oServerConf->getProperty ('LOGIN_NO_WS')) { + $fileLogin = 'login/sysLoginNoWS'; + } else { + $fileLogin = 'login/sysLogin'; + } + break; + case 'no': + $fileLogin = 'login/sysLoginNoWS'; + break; + case 'yes': + $fileLogin = 'login/sysLogin'; + break; + default: + $fileLogin = 'login/sysLogin'; + break; } +$G_PUBLISH->AddContent ('xmlform', 'xmlform', $fileLogin, '', $aField, 'sysLogin'); G::RenderPage ("publish"); diff --git a/workflow/engine/methods/processes/mainInit.php b/workflow/engine/methods/processes/mainInit.php index 433eaa64d..f14d1fd03 100755 --- a/workflow/engine/methods/processes/mainInit.php +++ b/workflow/engine/methods/processes/mainInit.php @@ -23,6 +23,8 @@ */ //$oHeadPublisher = & headPublisher::getSingleton(); +global $RBAC; +$RBAC->requirePermissions( 'PM_FACTORY' ); G::loadClass( 'configuration' ); $conf = new Configurations(); diff --git a/workflow/engine/methods/setup/appCacheViewConf.php b/workflow/engine/methods/setup/appCacheViewConf.php index 50ef7b09a..4d969c72c 100755 --- a/workflow/engine/methods/setup/appCacheViewConf.php +++ b/workflow/engine/methods/setup/appCacheViewConf.php @@ -1,4 +1,6 @@ requirePermissions( 'PM_SETUP' ); // header('Pragma: no-cache'); // header('Cache-Control: no-store, no-cache, must-revalidate'); diff --git a/workflow/engine/methods/setup/clearCompiled.php b/workflow/engine/methods/setup/clearCompiled.php index 9757d4f57..a2115ef99 100755 --- a/workflow/engine/methods/setup/clearCompiled.php +++ b/workflow/engine/methods/setup/clearCompiled.php @@ -21,6 +21,8 @@ * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ +global $RBAC; +$RBAC->requirePermissions( 'PM_SETUP' ); $oHeadPublisher = & headPublisher::getSingleton(); $oHeadPublisher->addExtJsScript( 'setup/clearCompiled', true ); //adding a javascript file .js diff --git a/workflow/engine/methods/setup/environmentSettings.php b/workflow/engine/methods/setup/environmentSettings.php index 4aa0e6285..ec2ce2ab3 100755 --- a/workflow/engine/methods/setup/environmentSettings.php +++ b/workflow/engine/methods/setup/environmentSettings.php @@ -1,4 +1,7 @@ requirePermissions( 'PM_SETUP' ); + G::loadClass( 'configuration' ); $c = new Configurations(); $oHeadPublisher = & headPublisher::getSingleton(); diff --git a/workflow/engine/methods/setup/loginSettings.php b/workflow/engine/methods/setup/loginSettings.php index b7962e6d3..aecf20bdb 100755 --- a/workflow/engine/methods/setup/loginSettings.php +++ b/workflow/engine/methods/setup/loginSettings.php @@ -21,6 +21,9 @@ * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ +global $RBAC; +$RBAC->requirePermissions( 'PM_SETUP' ); + G::loadClass( 'configuration' ); $oConf = new Configurations(); diff --git a/workflow/engine/methods/setup/pluginsMain.php b/workflow/engine/methods/setup/pluginsMain.php index 2f70e5cf0..cfc084570 100755 --- a/workflow/engine/methods/setup/pluginsMain.php +++ b/workflow/engine/methods/setup/pluginsMain.php @@ -21,6 +21,8 @@ * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ +global $RBAC; +$RBAC->requirePermissions( 'PM_SETUP' ); $headPublisher = & headPublisher::getSingleton(); $headPublisher->addExtJsScript( 'setup/pluginsMain', false ); diff --git a/workflow/engine/methods/setup/processHeartBeatConfig.php b/workflow/engine/methods/setup/processHeartBeatConfig.php index 518d3be3d..2eacc4eaf 100755 --- a/workflow/engine/methods/setup/processHeartBeatConfig.php +++ b/workflow/engine/methods/setup/processHeartBeatConfig.php @@ -21,6 +21,9 @@ * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ +global $RBAC; +$RBAC->requirePermissions( 'PM_SETUP' ); + $oHeadPublisher = & headPublisher::getSingleton(); G::LoadClass( 'serverConfiguration' ); $oServerConf = & serverConf::getSingleton(); diff --git a/workflow/engine/methods/setup/systemInfo.php b/workflow/engine/methods/setup/systemInfo.php index 8b030a618..5142a2726 100644 --- a/workflow/engine/methods/setup/systemInfo.php +++ b/workflow/engine/methods/setup/systemInfo.php @@ -1,4 +1,7 @@ requirePermissions( 'PM_SETUP' ); + $option = (isset($_GET["option"]))? $_GET["option"] : null; switch ($option) { diff --git a/workflow/engine/methods/users/users_Ajax.php b/workflow/engine/methods/users/users_Ajax.php index adb0d17c2..f175b2e78 100644 --- a/workflow/engine/methods/users/users_Ajax.php +++ b/workflow/engine/methods/users/users_Ajax.php @@ -210,6 +210,14 @@ try { $criteria->add( DashletInstancePeer::DAS_INS_OWNER_UID, $UID ); $criteria->add( DashletInstancePeer::DAS_INS_OWNER_TYPE , 'USER'); DashletInstancePeer::doDelete( $criteria ); + + //Delete users as supervisor + $criteria = new Criteria("workflow"); + + $criteria->add(ProcessUserPeer::USR_UID, $UID, Criteria::EQUAL); + $criteria->add(ProcessUserPeer::PU_TYPE, "SUPERVISOR", Criteria::EQUAL); + + ProcessUserPeer::doDelete($criteria); break; case 'changeUserStatus': $response = new stdclass(); @@ -390,9 +398,9 @@ try { $oCriteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); $oCriteria->addSelectColumn(UsersPeer::USR_LASTNAME); $oCriteria->addSelectColumn(UsersPeer::USR_EMAIL); - + $oCriteria->addSelectColumn(UsersPeer::USR_ROLE); - + $oCriteria->addSelectColumn(UsersPeer::USR_DUE_DATE); $oCriteria->addSelectColumn(UsersPeer::USR_STATUS); $oCriteria->addSelectColumn(UsersPeer::USR_UX); @@ -440,7 +448,7 @@ try { $uRole = Array(); while ($oDataset->next()) { $row = $oDataset->getRow(); - + try { $uRole = $oRoles->loadByCode($row['USR_ROLE']); } catch (exception $oError) { @@ -456,7 +464,7 @@ try { $row['DEP_TITLE'] = isset($aDepart[$row['USR_UID']]) ? $aDepart[$row['USR_UID']] : ''; $row['USR_UX'] = isset($uxList[$row['USR_UX']]) ? $uxList[$row['USR_UX']] : $uxList['NORMAL']; $row['USR_AUTH_SOURCE'] = isset($aAuthSources[$row['USR_UID']]) ? $aAuthSources[$row['USR_UID']] : 'ProcessMaker (MYSQL)'; - + $rows[] = $row; } @@ -511,6 +519,29 @@ try { $misc['REPLACED_NAME'] = $replaced_by; echo '{success: true, userdata: ' . G::json_encode($data) . ', cases: ' . G::json_encode($aCount) . ', misc: ' . G::json_encode($misc) . '}'; break; + + case "verifyIfUserAssignedAsSupervisor": + $supervisorUserUid = $_POST["supervisorUserUid"]; + $message = "OK"; + + $criteria = new Criteria("workflow"); + + $criteria->addSelectColumn(ProcessUserPeer::PU_UID); + $criteria->add(ProcessUserPeer::USR_UID, $supervisorUserUid, Criteria::EQUAL); + $criteria->add(ProcessUserPeer::PU_TYPE, "SUPERVISOR", Criteria::EQUAL); + + $rsCriteria = ProcessUserPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); + + if ($rsCriteria->next()) { + $message = "ERROR"; + } + + $response = array(); + $response["result"] = $message; + + echo G::json_encode($response); + break; } } catch (Exception $oException) { die($oException->getMessage()); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php b/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php index 3b9f66751..3df12da50 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php @@ -367,6 +367,10 @@ class DynaForm $dynaFormUid = $dynaForm->create($arrayData); + $oDynaform = \DynaformPeer::retrieveByPK( $dynaFormUid ); + $oDynaform->setDynContent( $arrayData['DYN_CONTENT'] ); + $oDynaform->save(); + //Return unset($arrayData["PRO_UID"]); @@ -907,6 +911,7 @@ class DynaForm $criteria->addAsColumn("DYN_TITLE", "CT.CON_VALUE"); $criteria->addAsColumn("DYN_DESCRIPTION", "CD.CON_VALUE"); $criteria->addSelectColumn(\DynaformPeer::DYN_TYPE); + $criteria->addSelectColumn(\DynaformPeer::DYN_CONTENT); $criteria->addAlias("CT", \ContentPeer::TABLE_NAME); $criteria->addAlias("CD", \ContentPeer::TABLE_NAME); @@ -953,7 +958,8 @@ class DynaForm $this->getFieldNameByFormatFieldName("DYN_UID") => $record["DYN_UID"], $this->getFieldNameByFormatFieldName("DYN_TITLE") => $record["DYN_TITLE"], $this->getFieldNameByFormatFieldName("DYN_DESCRIPTION") => $record["DYN_DESCRIPTION"] . "", - $this->getFieldNameByFormatFieldName("DYN_TYPE") => $record["DYN_TYPE"] . "" + $this->getFieldNameByFormatFieldName("DYN_TYPE") => $record["DYN_TYPE"] . "", + $this->getFieldNameByFormatFieldName("DYN_CONTENT") => $record["DYN_CONTENT"] . "" ); } catch (\Exception $e) { throw $e; diff --git a/workflow/engine/src/ProcessMaker/Project/Bpmn.php b/workflow/engine/src/ProcessMaker/Project/Bpmn.php index bdd42e96a..f3da8e4ce 100644 --- a/workflow/engine/src/ProcessMaker/Project/Bpmn.php +++ b/workflow/engine/src/ProcessMaker/Project/Bpmn.php @@ -152,15 +152,15 @@ class Bpmn extends Handler } self::log("Remove Project With Uid: {$this->prjUid}"); + foreach ($this->getEvents() as $event) { + $this->removeEvent($event["EVN_UID"]); + } foreach ($this->getActivities() as $activity) { $this->removeActivity($activity["ACT_UID"]); } foreach ($this->getGateways() as $gateway) { $this->removeGateway($gateway["GAT_UID"]); } - foreach ($this->getEvents() as $event) { - $this->removeEvent($event["EVN_UID"]); - } foreach ($this->getFlows() as $flow) { $this->removeFlow($flow["FLO_UID"]); } @@ -483,8 +483,8 @@ class Bpmn extends Handler { try { self::log("Remove Event: $evnUid"); - $event = EventPeer::retrieveByPK($evnUid); + $event->delete(); self::log("Remove Event Success!"); diff --git a/workflow/engine/templates/cases/open.js b/workflow/engine/templates/cases/open.js index 50189968b..15979b6d4 100755 --- a/workflow/engine/templates/cases/open.js +++ b/workflow/engine/templates/cases/open.js @@ -293,7 +293,7 @@ Ext.onReady(function(){ } }); } else { - loadMaskStep.show(); + loadMaskStep.show(); document.getElementById("openCaseFrame").src = node.attributes.url; } } else { @@ -462,12 +462,12 @@ Ext.onReady(function(){ icon: Ext.MessageBox.ERROR, buttons: Ext.MessageBox.OK, fn : function(btn) { - try + try { prnt = parent.parent; top.location = top.location; } - catch (err) + catch (err) { parent.location = parent.location; } @@ -500,12 +500,12 @@ Ext.onReady(function(){ icon: Ext.MessageBox.ERROR, buttons: Ext.MessageBox.OK, fn : function(btn) { - try + try { prnt = parent.parent; top.location = top.location; } - catch (err) + catch (err) { parent.location = parent.location; } @@ -577,12 +577,12 @@ Ext.onReady(function(){ icon: Ext.MessageBox.ERROR, buttons: Ext.MessageBox.OK, fn : function(btn) { - try + try { prnt = parent.parent; top.location = top.location; } - catch (err) + catch (err) { parent.location = parent.location; } @@ -656,12 +656,12 @@ Ext.onReady(function(){ icon: Ext.MessageBox.ERROR, buttons: Ext.MessageBox.OK, fn : function(btn) { - try + try { prnt = parent.parent; top.location = top.location; } - catch (err) + catch (err) { parent.location = parent.location; } @@ -694,12 +694,12 @@ Ext.onReady(function(){ icon: Ext.MessageBox.ERROR, buttons: Ext.MessageBox.OK, fn : function(btn) { - try + try { prnt = parent.parent; top.location = top.location; } - catch (err) + catch (err) { parent.location = parent.location; } @@ -732,12 +732,12 @@ Ext.onReady(function(){ icon: Ext.MessageBox.ERROR, buttons: Ext.MessageBox.OK, fn : function(btn) { - try + try { prnt = parent.parent; top.location = top.location; } - catch (err) + catch (err) { parent.location = parent.location; } @@ -770,12 +770,12 @@ Ext.onReady(function(){ icon: Ext.MessageBox.ERROR, buttons: Ext.MessageBox.OK, fn : function(btn) { - try + try { prnt = parent.parent; top.location = top.location; } - catch (err) + catch (err) { parent.location = parent.location; } @@ -808,12 +808,12 @@ Ext.onReady(function(){ icon: Ext.MessageBox.ERROR, buttons: Ext.MessageBox.OK, fn : function(btn) { - try + try { prnt = parent.parent; top.location = top.location; } - catch (err) + catch (err) { parent.location = parent.location; } @@ -954,7 +954,7 @@ Ext.onReady(function(){ {header: _('ID_LASTNAME'), dataIndex: 'USR_LASTNAME', width: 300} ] }), - + sm: new Ext.grid.RowSelectionModel({singleSelect: true}), store: store, tbar:[ @@ -997,12 +997,12 @@ Ext.onReady(function(){ icon: Ext.MessageBox.ERROR, buttons: Ext.MessageBox.OK, fn : function(btn) { - try + try { prnt = parent.parent; top.location = top.location; } - catch (err) + catch (err) { parent.location = parent.location; } @@ -1153,12 +1153,12 @@ Ext.onReady(function(){ icon: Ext.MessageBox.ERROR, buttons: Ext.MessageBox.OK, fn : function(btn) { - try + try { prnt = parent.parent; top.location = top.location; } - catch (err) + catch (err) { parent.location = parent.location; } @@ -1191,12 +1191,12 @@ Ext.onReady(function(){ icon: Ext.MessageBox.ERROR, buttons: Ext.MessageBox.OK, fn : function(btn) { - try + try { prnt = parent.parent; top.location = top.location; } - catch (err) + catch (err) { parent.location = parent.location; } @@ -1300,12 +1300,12 @@ Ext.onReady(function(){ icon: Ext.MessageBox.ERROR, buttons: Ext.MessageBox.OK, fn : function(btn) { - try + try { prnt = parent.parent; top.location = top.location; } - catch (err) + catch (err) { parent.location = parent.location; } @@ -1386,12 +1386,12 @@ Ext.onReady(function(){ icon: Ext.MessageBox.ERROR, buttons: Ext.MessageBox.OK, fn : function(btn) { - try + try { prnt = parent.parent; top.location = top.location; } - catch (err) + catch (err) { parent.location = parent.location; } diff --git a/workflow/engine/templates/users/usersList.js b/workflow/engine/templates/users/usersList.js index 42c65ec9f..6060efb18 100755 --- a/workflow/engine/templates/users/usersList.js +++ b/workflow/engine/templates/users/usersList.js @@ -494,6 +494,28 @@ DeleteUserAction = function(){ if (uid.data.USR_UID==user_admin){ Ext.Msg.alert(_('ID_USERS'), _('ID_CANNOT_DELETE_ADMIN_USER')); }else{ + var flagVerifyUserAssigSupervisor = 1; + + Ext.Ajax.request({ + url: "users_Ajax", + method: "POST", + params: { + "function": "verifyIfUserAssignedAsSupervisor", + supervisorUserUid: uid.data.USR_UID + }, + + success: function (response, opts) { + var dataRespuesta = Ext.util.JSON.decode(response.responseText); + + if (dataRespuesta.result == "OK") { + flagVerifyUserAssigSupervisor = 0; + } + }, + failure: function (response, opts){ + // + } + }); + viewport.getEl().mask(_('ID_PROCESSING')); Ext.Ajax.request({ url: 'users_Ajax', @@ -509,7 +531,9 @@ DeleteUserAction = function(){ } ); }else{ - Ext.Msg.confirm(_('ID_CONFIRM'), _('ID_MSG_CONFIRM_DELETE_USER'), + var msgConfirm = (flagVerifyUserAssigSupervisor == 1)? _("ID_MSG_CONFIRM_DELETE_USER_ASSINGED_SUPERVISOR") : _("ID_MSG_CONFIRM_DELETE_USER"); + + Ext.Msg.confirm(_('ID_CONFIRM'), msgConfirm, function(btn){ if (btn=='yes') DeleteUser(uid.data.USR_UID); } diff --git a/workflow/engine/xmlform/tracker/tracker_StageEdit.xml b/workflow/engine/xmlform/tracker/tracker_StageEdit.xml index f21bc6097..640260ca7 100755 --- a/workflow/engine/xmlform/tracker/tracker_StageEdit.xml +++ b/workflow/engine/xmlform/tracker/tracker_StageEdit.xml @@ -15,9 +15,13 @@ diff --git a/workflow/public_html/sysGeneric.php b/workflow/public_html/sysGeneric.php index 66c9a1c6f..88f783345 100755 --- a/workflow/public_html/sysGeneric.php +++ b/workflow/public_html/sysGeneric.php @@ -320,6 +320,8 @@ define( 'MEMCACHED_ENABLED', $config['memcached'] ); define( 'MEMCACHED_SERVER', $config['memcached_server'] ); define( 'TIME_ZONE', $config['time_zone'] ); +define ('WS_IN_LOGIN', isset($config['WS_IN_LOGIN']) ? $config['WS_IN_LOGIN'] : 'serverconf'); + // IIS Compatibility, SERVER_ADDR doesn't exist on that env, so we need to define it. $_SERVER['SERVER_ADDR'] = isset( $_SERVER['SERVER_ADDR'] ) ? $_SERVER['SERVER_ADDR'] : $_SERVER['SERVER_NAME'];