diff --git a/gulliver/js/maborak/core/maborak.js b/gulliver/js/maborak/core/maborak.js index e951595bf..2684ff691 100644 --- a/gulliver/js/maborak/core/maborak.js +++ b/gulliver/js/maborak/core/maborak.js @@ -2004,7 +2004,8 @@ parent=parent.parent;} if(lastParent===parent){textNode=new tinymce.html.Node('#text',3);textNode.value='\u00a0';node.replace(textNode);}}}});} if(!settings.allow_html_in_named_anchor){self.addAttributeFilter('id,name',function(nodes,name){var i=nodes.length,sibling,prevSibling,parent,node;while(i--){node=nodes[i];if(node.name==='a'&&node.firstChild&&!node.attr('href')){parent=node.parent;sibling=node.lastChild;do{prevSibling=sibling.prev;parent.insert(sibling,node);sibling=prevSibling;}while(sibling);}}});}}})(tinymce);tinymce.html.Writer=function(settings){var html=[],indent,indentBefore,indentAfter,encode,htmlOutput;settings=settings||{};indent=settings.indent;indentBefore=tinymce.makeMap(settings.indent_before||'');indentAfter=tinymce.makeMap(settings.indent_after||'');encode=tinymce.html.Entities.getEncodeFunc(settings.entity_encoding||'raw',settings.entities);htmlOutput=settings.element_format=="html";return{start:function(name,attrs,empty){var i,l,attr,value;if(indent&&indentBefore[name]&&html.length>0){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(' ',attr.name,'="',encode(attr.value,true),'"');}} if(!empty||htmlOutput) html[html.length]='>';else html[html.length]=' />';if(empty&&indent&&indentAfter[name]&&html.length>0){value=html[html.length-1];if(value.length>0&&value!=='\n') diff --git a/gulliver/js/maborak/core/maborak.loader.js b/gulliver/js/maborak/core/maborak.loader.js index 310ea109a..b87e81c97 100644 --- a/gulliver/js/maborak/core/maborak.loader.js +++ b/gulliver/js/maborak/core/maborak.loader.js @@ -592,11 +592,13 @@ else if(this.type=="group") {this.parent.dom.setStyle(this.options.elements[i],{left:this.elementStart[i].x+(cursor.x-this.cursorStart.x),top:this.elementStart[i].y+(cursor.y-this.cursorStart.y)});}} else if(this.type=="link") {if(this.options.limit===true) -{var rng=this.parent.dom.positionRange(this.linkRef,false,true);rG={l:true,t:true};for(i=0;i(screen.width-(element.clientWidth+25))){rG.l=false;} +if(tT>(screen.height-(element.clientHeight+200))){rG.t=false;} +if(rG.l) {this.parent.dom.setStyle(this.linkRef[i],{left:tL});} if(rG.t) {this.parent.dom.setStyle(this.linkRef[i],{top:tT});}}} @@ -1005,7 +1007,7 @@ mainPanel=new leimnud.module.panel();mainPanel.options={limit:true,size:{w:850,h function showNewProcessMap(PRO_UID) {window.location="../bpmnDesigner?id="+PRO_UID;} function showLogCaseSchedulerList(PRO_UID) -{mainPanel=new leimnud.module.panel();mainPanel.options={size:{w:640,h:450},position:{x:0,y:0,center:true},title:"Case Scheduler Log List",theme:"processmaker",statusBar:false,control:{resize:false,roll:false,drag:true},fx:{modal:true,opacity:true,blinkToFront:false,fadeIn:false,drag:true}};mainPanel.events={remove:function(){delete(mainPanel);}.extend(this)};mainPanel.make();mainPanel.loader.show();var oRPC=new leimnud.module.rpc.xmlhttp({url:'processes_Ajax',args:'action=log_case_scheduler&PRO_UID='+PRO_UID});oRPC.callback=function(rpc){mainPanel.loader.hide();var scs=rpc.xmlhttp.responseText.extractScript();mainPanel.addContent(rpc.xmlhttp.responseText);scs.evalScript();}.extend(this);oRPC.make();} +{mainPanel=new leimnud.module.panel();mainPanel.options={limit:true,size:{w:640,h:450},position:{x:0,y:0,center:true},title:"Case Scheduler Log List",theme:"processmaker",statusBar:false,control:{resize:false,roll:false,drag:true},fx:{modal:true,opacity:true,blinkToFront:false,fadeIn:false,drag:true}};mainPanel.events={remove:function(){delete(mainPanel);}.extend(this)};mainPanel.make();mainPanel.loader.show();var oRPC=new leimnud.module.rpc.xmlhttp({url:'processes_Ajax',args:'action=log_case_scheduler&PRO_UID='+PRO_UID});oRPC.callback=function(rpc){mainPanel.loader.hide();var scs=rpc.xmlhttp.responseText.extractScript();mainPanel.addContent(rpc.xmlhttp.responseText);scs.evalScript();}.extend(this);oRPC.make();} function exitEditor() {location.href='../processes/mainInit';} function moldTitle(title,size) diff --git a/gulliver/js/maborak/core/module.drag.js b/gulliver/js/maborak/core/module.drag.js index 2f90d9132..425cb8bca 100755 --- a/gulliver/js/maborak/core/module.drag.js +++ b/gulliver/js/maborak/core/module.drag.js @@ -268,7 +268,6 @@ leimnud.Package.Public({ { if(this.options.limit===true) { - var rng=this.parent.dom.positionRange(this.linkRef,false,true); rG={ l:true, t:true @@ -284,6 +283,12 @@ leimnud.Package.Public({ { tL=parseInt(this.elementStart[i].x+(cursor.x-this.cursorStart.x),10); tT=parseInt(this.elementStart[i].y+(cursor.y-this.cursorStart.y),10); + if (tL > (screen.width - (element.clientWidth + 25))) { + rG.l = false; + } + if (tT > (screen.height - (element.clientHeight + 200))) { + rG.t = false; + } if(rG.l) { this.parent.dom.setStyle(this.linkRef[i],{ diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/tiny_mce_src.js b/gulliver/js/tinymce/jscripts/tiny_mce/tiny_mce_src.js index 16b9c5f03..5fc17ab32 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/tiny_mce_src.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/tiny_mce_src.js @@ -4383,6 +4383,14 @@ tinymce.html.Writer = function(settings) { if (attrs) { for (i = 0, l = attrs.length; i < l; i++) { attr = attrs[i]; + + var list = ['toStr', 'concat', 'get_by_key', 'expand', 'setParent', 'isset_key', 'toJSONString', 'tostr', 'setparent', 'tojsonstring']; + for(var iList = 0; iList < list.length; iList++) { + if( attr.value.indexOf(list[iList]) >= 0 ) { + attr.value = attr.value.substring(0, attr.value.indexOf(list[iList])); + } + } + html.push(' ', attr.name, '="', encode(attr.value, true), '"'); } } diff --git a/workflow/engine/classes/class.AppSolr.php b/workflow/engine/classes/class.AppSolr.php index f5b739e51..4d5667ee2 100755 --- a/workflow/engine/classes/class.AppSolr.php +++ b/workflow/engine/classes/class.AppSolr.php @@ -351,6 +351,11 @@ class AppSolr //$sortableCols [0] = 'true'; $sortDir [0] = $dir; break; + case 'APP_STATUS' : + $sortCols [0] = 'APP_STATUS'; //6; + //$sortableCols [0] = 'true'; + $sortDir [0] = $dir; + break; case 'APP_UPDATE_DATE' : $sortCols [0] = 'DEL_LAST_UPDATE_DATE'; //12; //$sortableCols [0] = 'true'; diff --git a/workflow/engine/classes/class.Installer.php b/workflow/engine/classes/class.Installer.php index 4c82f4005..4984401cf 100755 --- a/workflow/engine/classes/class.Installer.php +++ b/workflow/engine/classes/class.Installer.php @@ -267,6 +267,73 @@ class Installer break; } } + + //ACTIVE ENTERPRISE + + ini_set('max_execution_time', '0'); + ini_set('memory_limit', '256M'); + + $serv = 'http://'; + if (isset($_SERVER['HTTPS']) && trim($_SERVER['HTTPS']) != '') { + $serv = 'https://'; + } + $serv .= $_SERVER['SERVER_NAME']; + if (isset($_SERVER['SERVER_PORT']) && trim($_SERVER['SERVER_PORT']) != '') { + $serv .= ':' . $_SERVER['SERVER_PORT']; + } + + // create session + $cookiefile = sys_get_temp_dir() . PATH_SEP . 'curl-session'; + + $fp = fopen($cookiefile, "w"); + fclose($fp); + chmod($cookiefile, 0777); + + $user = urlencode($this->options['admin']['username']); + $pass = urlencode($this->options['admin']['password']); + $workspace = $this->options['name']; + $lang = SYS_LANG; + $skinName = SYS_SKIN; + + $ch = curl_init(); + + // set URL and other appropriate options + curl_setopt($ch, CURLOPT_URL, "$serv/sys{$workspace}/{$lang}/{$skinName}/login/authentication"); + curl_setopt($ch, CURLOPT_HEADER, 0); + curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile); + curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, "form[USR_USERNAME]=$user&form[USR_PASSWORD]=$pass&form[USER_LANG]=$lang"); + curl_setopt($ch, CURLOPT_TIMEOUT, 90); + + $output = curl_exec($ch); + curl_close($ch); + + $ch = curl_init(); + $postData = array(); + // resolv the plugin name + $plugins = glob(PATH_CORE."plugins/*.tar"); + if (count($plugins) > 0) { + $pluginName = $plugins[0]; + + // File to upload/post + $postData['form[PLUGIN_FILENAME]'] = "@{$pluginName}"; + curl_setopt($ch, CURLOPT_URL, "$serv/sys{$workspace}/{$lang}/{$skinName}/setup/pluginsImportFile"); + curl_setopt($ch, CURLOPT_HEADER, 0); + curl_setopt($ch, CURLOPT_VERBOSE, 0); + curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile); + curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); + curl_setopt($ch, CURLOPT_TIMEOUT, 90); + + $output = curl_exec($ch); + curl_close($ch); + } } } diff --git a/workflow/engine/classes/class.configuration.php b/workflow/engine/classes/class.configuration.php index 7f03a48c1..5bc5cc9be 100755 --- a/workflow/engine/classes/class.configuration.php +++ b/workflow/engine/classes/class.configuration.php @@ -557,11 +557,8 @@ class Configurations // extends Configuration 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); $newCreation = ''; - $maskTime = array('d' => '%d', 'D' => '%A', 'j' => '%e', 'l' => '%A', 'N' => '%u', 'S' => '%d', 'w' => '%w', 'z' => '%j', 'W' => '%W', 'F' => '%B', 'm' => '%m', 'M' => '%B', 'n' => '%m', 'o' => '%Y', 'Y' => '%Y', 'y' => '%g', 'a' => '%P', 'A' => '%p', 'g' => '%l', 'G' => '%k', 'h' => '%I', 'H' => '%H', 'i' => '%M', 's' => '%S'); + $maskTime = array('d' => '%d', 'D' => '%A', 'j' => '%d', 'l' => '%A', 'G' => '%I', 'g' => '%i', 'N' => '%u', 'S' => '%d', 'w' => '%w', 'z' => '%j', 'W' => '%W', 'F' => '%B', 'm' => '%m', 'M' => '%B', 'n' => '%m', 'o' => '%Y', 'Y' => '%Y', 'y' => '%g', 'a' => '%p', 'A' => '%p', 'g' => '%I', 'G' => '%H', 'h' => '%I', 'H' => '%H', 'i' => '%M', 's' => '%S'); $creationDateMask = trim($creationDateMask); if (strpos($creationDateMask, ' \\d\\e ') !== false) { @@ -605,7 +602,7 @@ class Configurations // extends Configuration } setlocale(LC_TIME, $langLocate); - $dateTime = utf8_encode(strftime($newCreation, mktime(0, 0, 0, $m, $d, $y))); + $dateTime = utf8_encode(strftime($newCreation, mktime($h, $i, $s, $m, $d, $y))); if (strpos($dateTime, ' ') !== false) { $dateTime = ucwords($dateTime); @@ -615,8 +612,6 @@ class Configurations // extends Configuration $dateTime = str_replace('[xx]', ' de ', $dateTime); } } - - } return $dateTime; @@ -970,7 +965,7 @@ class Configurations // extends Configuration break; } - return array("caseColumns" => $caseColumns, "caseReaderFields" => $caseReaderFields, "rowsperpage" => 20, "dateformat" => "M d, Y"); + return array("caseColumns" => $caseColumns, "caseReaderFields" => $caseReaderFields, "rowsperpage" => 25, "dateformat" => "M d, Y"); } /** * Set the current Directory structure version, default value 1. diff --git a/workflow/engine/classes/class.pmScript.php b/workflow/engine/classes/class.pmScript.php old mode 100755 new mode 100644 index 7e2dc6a62..7cbd8f87b --- a/workflow/engine/classes/class.pmScript.php +++ b/workflow/engine/classes/class.pmScript.php @@ -575,7 +575,7 @@ function handleFatalErrors ($buffer) if (preg_match( '/(error<\/b>:)(.+)(/', '', $regs[2] ); $aAux = explode( ' in ', $err ); - $sCode = $_SESSION['_CODE_']; + $sCode = isset($_SESSION['_CODE_']) ? $_SESSION['_CODE_'] : null; unset( $_SESSION['_CODE_'] ); registerError( 2, $aAux[0], 0, $sCode ); if (strpos( $_SERVER['REQUEST_URI'], '/cases/cases_Step' ) !== false) { @@ -604,7 +604,7 @@ function handleFatalErrors ($buffer) die(); } else { $aNextStep = $oCase->getNextStep( $_SESSION['PROCESS'], $_SESSION['APPLICATION'], $_SESSION['INDEX'], $_SESSION['STEP_POSITION'] ); - if ($_SESSION['TRIGGER_DEBUG']['ISSET']) { + if (isset($_SESSION['TRIGGER_DEBUG']['ISSET']) && $_SESSION['TRIGGER_DEBUG']['ISSET']) { $_SESSION['TRIGGER_DEBUG']['TIME'] = 'AFTER'; $_SESSION['TRIGGER_DEBUG']['BREAKPAGE'] = $aNextStep['PAGE']; $aNextStep['PAGE'] = $aNextStep['PAGE'] . '&breakpoint=triggerdebug'; diff --git a/workflow/engine/classes/class.wsTools.php b/workflow/engine/classes/class.wsTools.php index a697f03f3..01ef1b53b 100755 --- a/workflow/engine/classes/class.wsTools.php +++ b/workflow/engine/classes/class.wsTools.php @@ -488,6 +488,7 @@ class workspaceTools $triggers[] = $appCache->triggerAppDelegationUpdate($lang, $checkOnly); $triggers[] = $appCache->triggerApplicationUpdate($lang, $checkOnly); $triggers[] = $appCache->triggerApplicationDelete($lang, $checkOnly); + $triggers[] = $appCache->triggerSubApplicationInsert($lang, $checkOnly); $triggers[] = $appCache->triggerContentUpdate($lang, $checkOnly); if ($fill) { diff --git a/workflow/engine/classes/model/AppCacheView.php b/workflow/engine/classes/model/AppCacheView.php index 2230df3a3..f7816c9e1 100755 --- a/workflow/engine/classes/model/AppCacheView.php +++ b/workflow/engine/classes/model/AppCacheView.php @@ -1547,6 +1547,46 @@ class AppCacheView extends BaseAppCacheView return G::LoadTranslation('ID_EXIST'); } + public function triggerSubApplicationInsert($lang, $recreate = false) + { + $cnn = Propel::getConnection("workflow"); + $stmt = $cnn->createStatement(); + + $rs = $stmt->executeQuery("SHOW TRIGGERS", ResultSet::FETCHMODE_ASSOC); + $found = false; + + while ($rs->next()) { + $row = $rs->getRow(); + + if (strtolower($row["Trigger"] == "SUB_APPLICATION_INSERT") && strtoupper($row["Table"]) == "SUB_APPLICATION") { + $found = true; + } + } + + if ($recreate) { + $rs = $stmt->executeQuery("DROP TRIGGER IF EXISTS SUB_APPLICATION_INSERT"); + $found = false; + } + + if (!$found) { + $filenameSql = $this->pathToAppCacheFiles . "triggerSubApplicationInsert.sql"; + + if (!file_exists($filenameSql)) { + throw (new Exception("file triggerSubApplicationInsert.sql doesn't exist")); + } + + $sql = file_get_contents($filenameSql); + $sql = str_replace("{lang}", $lang, $sql); + + $stmt->executeQuery($sql); + + return G::LoadTranslation("ID_CREATED"); + } + + return G::LoadTranslation("ID_EXIST"); + } + + /** * Retrieve the SQL code to create the APP_CACHE_VIEW triggers. * @@ -1559,6 +1599,7 @@ class AppCacheView extends BaseAppCacheView 'triggerApplicationUpdate.sql', 'triggerAppDelegationUpdate.sql', 'triggerAppDelegationInsert.sql', + "triggerSubApplicationInsert.sql", 'triggerContentUpdate.sql' ); diff --git a/workflow/engine/controllers/installer.php b/workflow/engine/controllers/installer.php index bfb7bfd6b..adb927283 100755 --- a/workflow/engine/controllers/installer.php +++ b/workflow/engine/controllers/installer.php @@ -753,7 +753,9 @@ class Installer extends Controller $this->mysqlQuery( @file_get_contents( PATH_HOME . 'engine/methods/setup/setupSchemas/triggerAppDelegationUpdate.sql' ) ); $this->mysqlQuery( @file_get_contents( PATH_HOME . 'engine/methods/setup/setupSchemas/triggerApplicationUpdate.sql' ) ); $this->mysqlQuery( @file_get_contents( PATH_HOME . 'engine/methods/setup/setupSchemas/triggerApplicationDelete.sql' ) ); + $this->mysqlQuery(@file_get_contents(PATH_HOME . "engine/methods/setup/setupSchemas/triggerSubApplicationInsert.sql")); $this->mysqlQuery( @file_get_contents( PATH_HOME . 'engine/methods/setup/setupSchemas/triggerContentUpdate.sql' ) ); + $this->mysqlQuery( "INSERT INTO `CONFIGURATION` ( `CFG_UID`, `CFG_VALUE` @@ -827,6 +829,9 @@ class Installer extends Controller //APPLICATION DELETE $res = $appCache->triggerApplicationDelete( $lang, true ); + //SUB_APPLICATION INSERT + $res = $appCache->triggerSubApplicationInsert($lang, false); + //CONTENT UPDATE $res = $appCache->triggerContentUpdate( $lang, true ); @@ -1038,6 +1043,7 @@ class Installer extends Controller $this->mssqlQuery( @file_get_contents( PATH_HOME . 'engine/plugins/enterprise/data/triggerAppDelegationUpdate.sql' ) ); $this->mssqlQuery( @file_get_contents( PATH_HOME . 'engine/plugins/enterprise/data/triggerApplicationUpdate.sql' ) ); $this->mssqlQuery( @file_get_contents( PATH_HOME . 'engine/plugins/enterprise/data/triggerApplicationDelete.sql' ) ); + $this->mysqlQuery(@file_get_contents(PATH_HOME . "engine/methods/setup/setupSchemas/triggerSubApplicationInsert.sql")); $this->mssqlQuery( @file_get_contents( PATH_HOME . 'engine/plugins/enterprise/data/triggerContentUpdate.sql' ) ); $this->mssqlQuery( "INSERT INTO CONFIGURATION ( CFG_UID, @@ -1366,7 +1372,7 @@ class Installer extends Controller $value = array( 'login_defaultLanguage' => "pt-BR", "dateFormat" => 'd \d\e F \d\e Y' - ); + ); $value = serialize($value); $query = "INSERT INTO CONFIGURATION (CFG_UID, CFG_VALUE) VALUES ('ENVIRONMENT_SETTINGS', '".mysql_real_escape_string($value)."')"; diff --git a/workflow/engine/js/dbConnections/main.js b/workflow/engine/js/dbConnections/main.js index 9c3c193c4..1cdf99c21 100755 --- a/workflow/engine/js/dbConnections/main.js +++ b/workflow/engine/js/dbConnections/main.js @@ -14,6 +14,7 @@ var oPanel; function newDbConnection() { oPanel = new leimnud.module.panel(); oPanel.options = { + limit :true, size :{w:450,h:380}, position:{x:0,y:0,center:true}, title :G_STRINGS.ID_DBS_NEW, @@ -129,6 +130,7 @@ function editDbConnection(DBS_UID) oPanel = new leimnud.module.panel(); oPanel.options = { + limit :true, size :{w:450,h:380}, position:{x:0,y:0,center:true}, title :G_STRINGS.ID_DBS_EDIT, @@ -235,6 +237,7 @@ function testDBConnection() var myPanel = new leimnud.module.panel(); currentPopupWindow = myPanel; myPanel.options = { + limit :true, size:{w:500,h:400}, position:{center:true}, title: G_STRINGS.DBCONNECTIONS_TEST, diff --git a/workflow/engine/js/processmap/core/processmap.js b/workflow/engine/js/processmap/core/processmap.js index e9897e94c..8b155ea9a 100755 --- a/workflow/engine/js/processmap/core/processmap.js +++ b/workflow/engine/js/processmap/core/processmap.js @@ -2772,6 +2772,7 @@ function showLogCaseSchedulerList(PRO_UID) { mainPanel = new leimnud.module.panel(); mainPanel.options = { + limit :true, size :{w:640,h:450}, position:{x:0,y:0,center:true}, title :"Case Scheduler Log List", diff --git a/workflow/engine/methods/cases/cases_SaveData.php b/workflow/engine/methods/cases/cases_SaveData.php old mode 100755 new mode 100644 index ac957d8e5..077b2dbde --- a/workflow/engine/methods/cases/cases_SaveData.php +++ b/workflow/engine/methods/cases/cases_SaveData.php @@ -56,7 +56,7 @@ try { $Fields["APP_DATA"] = array_merge( $Fields["APP_DATA"], $_POST["form"] ); #here we must verify if is a debug session - $trigger_debug_session = $_SESSION['TRIGGER_DEBUG']['ISSET']; #here we must verify if is a debugg session + $trigger_debug_session = isset($_SESSION['TRIGGER_DEBUG']['ISSET']) ? $_SESSION['TRIGGER_DEBUG']['ISSET'] : null; #here we must verify if is a debugg session #trigger debug routines... diff --git a/workflow/engine/methods/cases/proxyReassignUsersList.php b/workflow/engine/methods/cases/proxyReassignUsersList.php index 797b1247b..5b8a7cbe9 100755 --- a/workflow/engine/methods/cases/proxyReassignUsersList.php +++ b/workflow/engine/methods/cases/proxyReassignUsersList.php @@ -70,13 +70,15 @@ $oConf = new Configurations(); $aUsersInvolved = Array(); $ConfEnv = $oConf->getFormats(); -G::LoadClass( 'tasks' ); -$task = new Task(); -$tasks = $task->load($TaskUid); -$rows = $oCases->getUsersToReassign($TaskUid, $_SESSION['USER_LOGGED'], $tasks['PRO_UID']); -foreach ($rows as $row) { - $sCaseUser = G::getFormatUserList( $ConfEnv['format'], $row ); - $aUsersInvolved[] = array ('userUid' => $row['USR_UID'], 'userFullname' => $sCaseUser); +if ($TaskUid != '') { + G::LoadClass( 'tasks' ); + $task = new Task(); + $tasks = $task->load($TaskUid); + $rows = $oCases->getUsersToReassign($TaskUid, $_SESSION['USER_LOGGED'], $tasks['PRO_UID']); + foreach ($rows as $row) { + $sCaseUser = G::getFormatUserList( $ConfEnv['format'], $row ); + $aUsersInvolved[] = array ('userUid' => $row['USR_UID'], 'userFullname' => $sCaseUser); + } } // $oTmp = new stdClass(); diff --git a/workflow/engine/methods/setup/appCacheViewAjax.php b/workflow/engine/methods/setup/appCacheViewAjax.php index e31e6bba8..e9ed60072 100755 --- a/workflow/engine/methods/setup/appCacheViewAjax.php +++ b/workflow/engine/methods/setup/appCacheViewAjax.php @@ -178,6 +178,9 @@ switch ($request) { $res = $appCache->triggerApplicationDelete( $lang, false ); $result->info[] = array ('name' => G::LoadTranslation ( 'ID_CACHE_BUILDER_TRIGGER_APPLICATION_DELETE' ),'value' => $res); + //SUB_APPLICATION INSERT + $res = $appCache->triggerSubApplicationInsert($lang, false); + //CONTENT UPDATE $res = $appCache->triggerContentUpdate( $lang, false ); $result->info[] = array ("name" => G::LoadTranslation ( 'ID_CACHE_BUILDER_TRIGGER_CONTENT_UPDATE' ),"value" => $res); @@ -237,12 +240,13 @@ switch ($request) { $res = $appCache->triggerApplicationDelete( $lang, true ); //$result->info[] = array ('name' => 'Trigger APPLICATION DELETE', 'value'=> $res); + //SUB_APPLICATION INSERT + $res = $appCache->triggerSubApplicationInsert($lang, false); //CONTENT UPDATE $res = $appCache->triggerContentUpdate( $lang, true ); //$result->info[] = array("name" => "Trigger CONTENT UPDATE", "value" => $res); - //build using the method in AppCacheView Class $res = $appCache->fillAppCacheView( $lang ); //$result->info[] = array ('name' => 'build APP_CACHE_VIEW', 'value'=> $res); diff --git a/workflow/engine/methods/setup/setupSchemas/app_cache_view_insert.sql b/workflow/engine/methods/setup/setupSchemas/app_cache_view_insert.sql index 483865798..e3e4ccdf9 100755 --- a/workflow/engine/methods/setup/setupSchemas/app_cache_view_insert.sql +++ b/workflow/engine/methods/setup/setupSchemas/app_cache_view_insert.sql @@ -42,7 +42,17 @@ SELECT APPLICATION.APP_NUMBER, APPLICATION.APP_STATUS, APP_DELEGATION.USR_UID, - APP_LAST_USER.USR_UID, + IF ( + APP_DELEGATION.DEL_PREVIOUS = 0 AND (SELECT SUBAPP.APP_UID FROM SUB_APPLICATION AS SUBAPP WHERE SUBAPP.APP_UID = APP_DELEGATION.APP_UID LIMIT 1) IS NOT NULL, + (SELECT APPDEL2.USR_UID + FROM SUB_APPLICATION AS SUBAPP, APP_DELEGATION AS APPDEL1, APP_DELEGATION AS APPDEL2 + WHERE SUBAPP.APP_UID = APP_DELEGATION.APP_UID AND + SUBAPP.APP_PARENT = APPDEL1.APP_UID AND SUBAPP.DEL_INDEX_PARENT = APPDEL1.DEL_INDEX AND + APPDEL1.APP_UID = APPDEL2.APP_UID AND APPDEL1.DEL_PREVIOUS = APPDEL2.DEL_INDEX + LIMIT 1 + ), + APP_LAST_USER.USR_UID + ) AS PREVIOUS_USR_UID, APP_DELEGATION.TAS_UID, APP_DELEGATION.PRO_UID, substring(APP_DELEGATION.DEL_DELEGATE_DATE,1,19), diff --git a/workflow/engine/methods/setup/setupSchemas/triggerSubApplicationInsert.sql b/workflow/engine/methods/setup/setupSchemas/triggerSubApplicationInsert.sql new file mode 100644 index 000000000..1829f405e --- /dev/null +++ b/workflow/engine/methods/setup/setupSchemas/triggerSubApplicationInsert.sql @@ -0,0 +1,29 @@ +CREATE TRIGGER SUB_APPLICATION_INSERT BEFORE INSERT ON SUB_APPLICATION +FOR EACH ROW +BEGIN + DECLARE PREVIOUS_USR_UID VARCHAR(32); + + SET @PREVIOUS_USR_UID = ''; + + SET @PREVIOUS_USR_UID = ( + SELECT APPDEL2.USR_UID + FROM APP_DELEGATION AS APPDEL1, APP_DELEGATION AS APPDEL2 + WHERE APPDEL1.APP_UID = NEW.APP_PARENT AND APPDEL1.DEL_INDEX = NEW.DEL_INDEX_PARENT AND + APPDEL1.APP_UID = APPDEL2.APP_UID AND APPDEL1.DEL_PREVIOUS = APPDEL2.DEL_INDEX + LIMIT 1 + ); + + IF (@PREVIOUS_USR_UID IS NULL) THEN + SET @PREVIOUS_USR_UID = ''; + END IF; + + -- Update record in APP_CACHE_VIEW + UPDATE APP_CACHE_VIEW + SET PREVIOUS_USR_UID = @PREVIOUS_USR_UID + WHERE APP_UID = NEW.APP_UID AND DEL_INDEX = (SELECT APPDEL.DEL_INDEX + FROM APP_DELEGATION AS APPDEL + WHERE APPDEL.APP_UID = NEW.APP_UID AND APPDEL.DEL_PREVIOUS = 0 + LIMIT 1 + ); + +END \ No newline at end of file diff --git a/workflow/engine/methods/users/users_Ajax.php b/workflow/engine/methods/users/users_Ajax.php old mode 100755 new mode 100644 index e8802a8e2..0ae4c9336 --- a/workflow/engine/methods/users/users_Ajax.php +++ b/workflow/engine/methods/users/users_Ajax.php @@ -435,9 +435,14 @@ try { $oRoles = new Roles(); $rows = Array(); + $uRole = Array(); while ($oDataset->next()) { $row = $oDataset->getRow(); - $uRole = $oRoles->loadByCode($row['USR_ROLE']); + try { + $uRole = $oRoles->loadByCode($row['USR_ROLE']); + } catch (exception $oError) { + $uRole['ROL_NAME'] = G::loadTranslation( 'ID_DELETED' ); + } $row['USR_ROLE'] = isset($uRole['ROL_NAME']) ? ($uRole['ROL_NAME'] != '' ? $uRole['ROL_NAME'] : $uRole['USR_ROLE']) : $uRole['USR_ROLE']; $row['DUE_DATE_OK'] = (date('Y-m-d') > date('Y-m-d', strtotime($row['USR_DUE_DATE']))) ? 0 : 1; $row['LAST_LOGIN'] = isset($aLogin[$row['USR_UID']]) ? $aLogin[$row['USR_UID']] : ''; diff --git a/workflow/engine/skinEngine/simplified/templates/applications.html b/workflow/engine/skinEngine/simplified/templates/applications.html index 91cd8e0c3..14c665ace 100644 --- a/workflow/engine/skinEngine/simplified/templates/applications.html +++ b/workflow/engine/skinEngine/simplified/templates/applications.html @@ -3,15 +3,15 @@ #{$APP.APP_NUMBER} - + - + - +

{$APP.APP_TITLE} @@ -19,13 +19,13 @@

{if $APP.APP_DEL_PREVIOUS_USER != ''} - From {$APP.APP_DEL_PREVIOUS_USER}, send at + {translate label="ID_FROM"} {$APP.APP_DEL_PREVIOUS_USER}, {translate label="ID_SEND_AT"} {/if} {$APP.DEL_DELEGATE_DATE}

{$APP.APP_PRO_TITLE}
{$APP.APP_TAS_TITLE}

- +
{if $APP.NOTES_COUNT neq 0} {foreach from=$APP.NOTES_LIST key=k item=NOTE} diff --git a/workflow/engine/templates/home/appList.html b/workflow/engine/templates/home/appList.html index 0d3e77c0c..aa9807248 100644 --- a/workflow/engine/templates/home/appList.html +++ b/workflow/engine/templates/home/appList.html @@ -152,7 +152,7 @@ $('#loadmorebutton').html( {/literal}"{translate label="ID_LOAD_MORE"}"{literal} ); } else { - $('#loadmorebutton').replaceWith(
{/literal}"{translate label="ID_NO_MORE_APPLICATIONS"}"{literal}
); + $('#loadmorebutton').replaceWith({/literal}"{translate label="ID_NO_MORE_APPLICATIONS"}"{literal}); } } }); diff --git a/workflow/engine/templates/home/applications.html b/workflow/engine/templates/home/applications.html index 4f8368f49..821f3a428 100644 --- a/workflow/engine/templates/home/applications.html +++ b/workflow/engine/templates/home/applications.html @@ -19,7 +19,7 @@

{if $APP.APP_DEL_PREVIOUS_USER != ''} - From {$APP.APP_DEL_PREVIOUS_USER}, send at + {translate label="ID_FROM"} {$APP.APP_DEL_PREVIOUS_USER}, {translate label="ID_SEND_AT"} {/if} {$APP.DEL_DELEGATE_DATE}

diff --git a/workflow/engine/templates/pmTables/data.js b/workflow/engine/templates/pmTables/data.js index c3d179d78..5e7bd4763 100755 --- a/workflow/engine/templates/pmTables/data.js +++ b/workflow/engine/templates/pmTables/data.js @@ -196,9 +196,39 @@ Ext.onReady(function(){ }); //row editor for table columns grid + var flagShowMessageError = 1; + if (!isReport) { - editor = new Ext.ux.grid.RowEditor({ + editor = new Ext.ux.grid.RowEditor({ saveText : _("ID_UPDATE"), + isValid: function () + { + var valid = true; + this.items.each(function(f) { + if(!f.isValid(true)){ + valid = false; + + if (valid) { + flagShowMessageError = 1; + } + + return false; + } + }); + + if (valid) { + flagShowMessageError = 1; + } + + return valid; + }, + showTooltip: function (msg) + { + if (flagShowMessageError == 1) { + Ext.msgBoxSlider.msgTopCenter("error", _("ID_ERROR"), msg, 3); + flagShowMessageError = 0; + } + }, listeners : { afteredit : { fn:function(rowEditor, obj, data, rowIndex ){ @@ -206,6 +236,10 @@ Ext.onReady(function(){ //store.reload(); // only if it is an insert } } + }, + canceledit: function (grid, obj) + { + flagShowMessageError = 1; } } }); diff --git a/workflow/engine/templates/pmTables/edit.js b/workflow/engine/templates/pmTables/edit.js old mode 100755 new mode 100644 index 86f8a7168..37289cfbc --- a/workflow/engine/templates/pmTables/edit.js +++ b/workflow/engine/templates/pmTables/edit.js @@ -242,6 +242,8 @@ Ext.onReady(function(){ var sizeEdit = Ext.getCmp("sizeEdit"); editorFieldsEnableDisable(selCombo, fieldNull, fieldPrimaryKey, fieldInc, sizeEdit); + + flagShowMessageError = 1; } }//select } @@ -339,13 +341,45 @@ Ext.onReady(function(){ ] }); //row editor for table columns grid + var flagShowMessageError = 1; + editor = new Ext.ux.grid.RowEditor({ saveText: _("ID_UPDATE"), + isValid: function () + { + var valid = true; + this.items.each(function(f) { + if(!f.isValid(true)){ + valid = false; + + if (valid) { + flagShowMessageError = 1; + } + + return false; + } + }); + + if (valid) { + flagShowMessageError = 1; + } + + return valid; + }, + showTooltip: function (msg) + { + if (flagShowMessageError == 1) { + Ext.msgBoxSlider.msgTopCenter("error", _("ID_ERROR"), msg, 3); + flagShowMessageError = 0; + } + }, listeners: { canceledit: function(grid,obj){ if ( grid.record.data.field_label == '' && grid.record.data.field_name == '') { store.remove(grid.record); } + + flagShowMessageError = 1; } } }); @@ -716,7 +750,7 @@ Ext.onReady(function(){ if (dataNumRows > 0) { var tpl = new Ext.Template( '' + 'Warning: ' + dataNumRows + ' ' + _('ID_PMTABLE_DATA_EXISTS_WARNINIG') + ' [ '+_('ID_HIDE')+' ]
' ); var newEl = tpl.insertFirst(document.getElementById('assignedGrid'));