diff --git a/workflow/engine/classes/class.wsTools.php b/workflow/engine/classes/class.wsTools.php index d2b89e991..8a37199b2 100755 --- a/workflow/engine/classes/class.wsTools.php +++ b/workflow/engine/classes/class.wsTools.php @@ -61,7 +61,7 @@ class workspaceTools * @param bool $first true if this is the first workspace to be upgrade */ public function upgrade($first = false, $buildCacheView = false, $workSpace = SYS_SYS, $onedb = false, $lang = 'en') - { + { $start = microtime(true); CLI::logging("> Verify enterprise old...\n"); $this->verifyEnterprise($workSpace); @@ -111,63 +111,63 @@ class workspaceTools $final = $stop - $start; CLI::logging("<*> Backup log files Process took $final seconds.\n"); - CLI::logging("> Updating Files Manager...\n\n"); + CLI::logging("> Updating Files Manager...\n\n"); $this->upgradeFilesManager($workSpace); } - /** - * Function upgradeFilesManager - * access public - */ - public function upgradeFilesManager($workSpace) { + /** + * Function upgradeFilesManager + * access public + */ + public function upgradeFilesManager($workSpace) { $this->initPropel(true); - $con = Propel::getConnection("root"); - $stmt = $con->createStatement(); - $sDirectory = glob(PATH_DATA . "sites/" . $workSpace . "/" . "mailTemplates/*"); - $sDirectoryPublic = glob(PATH_DATA . "sites/" . $workSpace . "/" . "public/*"); - $files = array(); - foreach($sDirectory as $mailTemplate) { - if (is_dir($mailTemplate)) { - $inner_files = listFiles($mailTemplate); - if (is_array($inner_files)) $files = array_merge($files, $inner_files); - } - if (is_file($mailTemplate)) { - array_push($files, $mailTemplate); - } - } - foreach($sDirectoryPublic as $publicFile) { - if (is_dir($publicFile)) { - $inner_files = listFiles($publicFile); - if (is_array($inner_files)) $files = array_merge($files, $inner_files); - } - if (is_file($publicFile)) { - array_push($files, $publicFile); - } - } - $sDir = PATH_DATA . "sites/" . $workSpace . "/" . "mailTemplates/"; - $sDirPublic = PATH_DATA . "sites/" . $workSpace . "/" . "public/"; - foreach ($files as $aFile) { - if (strpos($aFile, $sDir) !== false){ - $processUid = current(explode("/", str_replace($sDir,'',$aFile))); - } else { - $processUid = current(explode("/", str_replace($sDirPublic,'',$aFile))); - } - $sql = "SELECT PROCESS_FILES.PRF_PATH FROM PROCESS_FILES WHERE PROCESS_FILES.PRF_PATH='" . $aFile ."'"; - $appRows = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $fileUid = ''; - foreach ($appRows as $row) { - $fileUid = $row["PRF_PATH"]; - } - if ($fileUid !== $aFile) { - $sPkProcessFiles = G::generateUniqueID(); - $sDate = date('Y-m-d H:i:s'); - $sql = "INSERT INTO PROCESS_FILES (PRF_UID, PRO_UID, USR_UID, PRF_UPDATE_USR_UID, - PRF_PATH, PRF_TYPE, PRF_EDITABLE, PRF_CREATE_DATE, PRF_UPDATE_DATE) - VALUES ('".$sPkProcessFiles."', '".$processUid."', '00000000000000000000000000000001', '', - '".$aFile."', 'file', 'true', '".$sDate."', NULL)"; - $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - } - } + $con = Propel::getConnection("root"); + $stmt = $con->createStatement(); + $sDirectory = glob(PATH_DATA . "sites/" . $workSpace . "/" . "mailTemplates/*"); + $sDirectoryPublic = glob(PATH_DATA . "sites/" . $workSpace . "/" . "public/*"); + $files = array(); + foreach($sDirectory as $mailTemplate) { + if (is_dir($mailTemplate)) { + $inner_files = listFiles($mailTemplate); + if (is_array($inner_files)) $files = array_merge($files, $inner_files); + } + if (is_file($mailTemplate)) { + array_push($files, $mailTemplate); + } + } + foreach($sDirectoryPublic as $publicFile) { + if (is_dir($publicFile)) { + $inner_files = listFiles($publicFile); + if (is_array($inner_files)) $files = array_merge($files, $inner_files); + } + if (is_file($publicFile)) { + array_push($files, $publicFile); + } + } + $sDir = PATH_DATA . "sites/" . $workSpace . "/" . "mailTemplates/"; + $sDirPublic = PATH_DATA . "sites/" . $workSpace . "/" . "public/"; + foreach ($files as $aFile) { + if (strpos($aFile, $sDir) !== false){ + $processUid = current(explode("/", str_replace($sDir,'',$aFile))); + } else { + $processUid = current(explode("/", str_replace($sDirPublic,'',$aFile))); + } + $sql = "SELECT PROCESS_FILES.PRF_PATH FROM PROCESS_FILES WHERE PROCESS_FILES.PRF_PATH='" . $aFile ."'"; + $appRows = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); + $fileUid = ''; + foreach ($appRows as $row) { + $fileUid = $row["PRF_PATH"]; + } + if ($fileUid !== $aFile) { + $sPkProcessFiles = G::generateUniqueID(); + $sDate = date('Y-m-d H:i:s'); + $sql = "INSERT INTO PROCESS_FILES (PRF_UID, PRO_UID, USR_UID, PRF_UPDATE_USR_UID, + PRF_PATH, PRF_TYPE, PRF_EDITABLE, PRF_CREATE_DATE, PRF_UPDATE_DATE) + VALUES ('".$sPkProcessFiles."', '".$processUid."', '00000000000000000000000000000001', '', + '".$aFile."', 'file', 'true', '".$sDate."', NULL)"; + $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); + } + } } /** @@ -223,7 +223,7 @@ class workspaceTools } private function resetDBInfoCallback($matches) - { + { /* This function changes the values of defines while keeping their formatting * intact. * $matches will contain several groups: @@ -231,7 +231,7 @@ class workspaceTools */ $key = isset($matches['key']) ? $matches['key'] : $matches[2]; $value = isset($matches['value']) ? $matches['value'] : $matches[3]; - + if($this->onedb){ $dbPrefix = array('DB_NAME' => 'wf_', 'DB_USER' => 'wf_', 'DB_RBAC_NAME' => 'wf_', 'DB_RBAC_USER' => 'wf_', 'DB_REPORT_NAME' => 'wf_', 'DB_REPORT_USER' => 'wf_'); if (array_search($key, array('DB_PASS', 'DB_RBAC_PASS', 'DB_REPORT_PASS'))) { @@ -286,7 +286,7 @@ class workspaceTools throw new Exception("Could not find db.php in the workspace"); } $sDbFile = file_get_contents($this->dbPath); - + if ($sDbFile === false) { throw new Exception("Could not read database information from db.php"); } else { @@ -296,7 +296,7 @@ class workspaceTools $this->onedb = true; } } - + /* Match all defines in the config file. Check updateDBCallback to know what * keys are changed and what groups are matched. * This regular expression will match any "define ('', '');" @@ -540,7 +540,7 @@ class workspaceTools * @param string $lang not currently used */ public function upgradeCacheView($fill = true, $checkOnly = false, $lang = "en") - { + { $this->initPropel(true); //require_once ('classes/model/AppCacheView.php'); @@ -554,19 +554,19 @@ class workspaceTools //setup the appcacheview object, and the path for the sql files $appCache = new AppCacheView(); $appCache->setPathToAppCacheFiles(PATH_METHODS . 'setup' . PATH_SEP . 'setupSchemas' . PATH_SEP); - + $userGrants = $appCache->checkGrantsForUser(false); - + $currentUser = $userGrants['user']; $currentUserIsSuper = $userGrants['super']; //if user does not have the SUPER privilege we need to use the root user and grant the SUPER priv. to normal user. - + if (!$currentUserIsSuper) { $appCache->checkGrantsForUser(true); $appCache->setSuperForUser($currentUser); $currentUserIsSuper = true; } - + CLI::logging("-> Creating tables \n"); //now check if table APPCACHEVIEW exists, and it have correct number of fields, etc. $res = $appCache->checkAppCacheView(); @@ -574,7 +574,7 @@ class workspaceTools CLI::logging("-> Update DEL_LAST_INDEX field in APP_DELEGATION table \n"); //Update APP_DELEGATION.DEL_LAST_INDEX data $res = $appCache->updateAppDelegationDelLastIndex($lang, $checkOnly); - + CLI::logging("-> Verifying roles permissions in RBAC \n"); //Update table RBAC permissions Bootstrap::LoadSystem( 'rbac' ); @@ -758,7 +758,7 @@ class workspaceTools * @return array bool upgradeSchema for more information */ public function upgradeDatabase ($onedb = false, $checkOnly = false) - { + { G::LoadClass("patch"); $this->initPropel( true ); p11835::$dbAdapter = $this->dbAdapter; @@ -800,7 +800,7 @@ class workspaceTools public function upgradeSchema($schema, $checkOnly = false, $rbac = false, $onedb = false) { $dbInfo = $this->getDBInfo(); - + if ($dbInfo['DB_NAME'] == $dbInfo['DB_RBAC_NAME']) { $onedb = true; } else { @@ -1032,7 +1032,7 @@ class workspaceTools } $wfDsn = $fields['DB_ADAPTER'] . '://' . $fields['DB_USER'] . ':' . $fields['DB_PASS'] . '@' . $fields['DB_HOST'] . '/' . $fields['DB_NAME']; - + $info = array('Workspace Name' => $fields['WORKSPACE_NAME'], //'Available Databases' => $fields['AVAILABLE_DB'], 'Workflow Database' => sprintf("%s://%s:%s@%s/%s", $fields['DB_ADAPTER'], $fields['DB_USER'], $fields['DB_PASS'], $fields['DB_HOST'], $fields['DB_NAME']), 'RBAC Database' => sprintf("%s://%s:%s@%s/%s", $fields['DB_ADAPTER'], $fields['DB_RBAC_USER'], $fields['DB_RBAC_PASS'], $fields['DB_RBAC_HOST'], $fields['DB_RBAC_NAME']), 'Report Database' => sprintf("%s://%s:%s@%s/%s", $fields['DB_ADAPTER'], $fields['DB_REPORT_USER'], $fields['DB_REPORT_PASS'], $fields['DB_REPORT_HOST'], $fields['DB_REPORT_NAME']), 'MySql Version' => $fields['DATABASE'] @@ -1262,6 +1262,7 @@ class workspaceTools $lines = explode("\n", $script); $previous = null; + $insert = false; foreach ($lines as $j => $line) { // Remove comments from the script $line = trim($line); @@ -1286,6 +1287,7 @@ class workspaceTools $line = substr($line, 0, strrpos($line, ";")); if (strrpos($line, "INSERT INTO") !== false) { + $insert = true; if ($insert) { $result = mysql_query("START TRANSACTION"); $insert = false; @@ -1355,7 +1357,7 @@ class workspaceTools $chmod = @chmod($filename, $perms); if ($chgrp === false || $chmod === false || $chown === false) { if (strtoupper( substr( PHP_OS, 0, 3 ) ) === 'WIN') { - exec( 'icacls ' . $dirNameWin . '/grant Administrador:(D,WDAC) /T', $res ); + exec( 'icacls ' . $filename . '/grant Administrador:(D,WDAC) /T', $res ); } else { CLI::logging(CLI::error("Failed to set permissions for $filename") . "\n"); } @@ -1447,9 +1449,9 @@ class workspaceTools CLI::logging("> Restoring " . CLI::info($backupWorkspace) . " to " . CLI::info($workspaceName) . "\n"); } $workspace = new workspaceTools($workspaceName); - + if ($workspace->workspaceExists()) { - + if ($overwrite) { CLI::logging(CLI::warning("> Workspace $workspaceName already exist, overwriting!") . "\n"); } else { @@ -1489,7 +1491,7 @@ class workspaceTools if (!$link) { throw new Exception('Could not connect to system database: ' . mysql_error()); } - + $newDBNames = $workspace->resetDBInfo($dbHost, $createWorkspace); foreach ($metadata->databases as $db) { @@ -1596,7 +1598,7 @@ class workspaceTools } public function checkMafeRequirements ($workspace,$lang) { - $this->initPropel(true); + $this->initPropel(true); $pmRestClient = OauthClientsPeer::retrieveByPK('x-pm-local-client'); if (empty($pmRestClient)) { if (is_file(PATH_DATA . 'sites/' . $workspace . '/' . '.server_info')) {