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/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