. * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. * * @author Alexandre Rosenfeld * @package workflow-engine-bin-tasks */ G::LoadClass("system"); G::LoadClass("wsTools"); CLI::taskName('upgrade'); CLI::taskDescription(<< $workspace) { try { $countWorkspace++; CLI::logging("Upgrading workspaces ($countWorkspace/$count): " . CLI::info($workspace->name) . "\n"); $workspace->upgrade($first, $buildCacheView, $workspace->name); $workspace->close(); $first = false; } catch (Exception $e) { CLI::logging("Errors upgrading workspace " . CLI::info($workspace->name) . ": " . CLI::error($e->getMessage()) . "\n"); $errors = true; } } // SAVE Upgrades/Patches $arrayPatch = glob(PATH_TRUNK . 'patch-*'); if ($arrayPatch) { foreach ($arrayPatch as $value) { if (file_exists($value)) { // copy content the patch $names = pathinfo($value); $nameFile = $names['basename']; $contentFile = file_get_contents($value); $contentFile = preg_replace("[\n|\r|\n\r]", '', $contentFile); CLI::logging($contentFile . ' installed (' . $nameFile . ')', PATH_DATA . 'log/upgrades.log'); // move file of patch $newFile = PATH_DATA . $nameFile; G::rm_dir($newFile); copy($value, $newFile); G::rm_dir($value); } } } else { CLI::logging('ProcessMaker ' . System::getVersion(). ' installed', PATH_DATA . 'log/upgrades.log'); } //Safe upgrade for JavaScript files CLI::logging("\nSafe upgrade for files cached by the browser\n\n"); G::browserCacheFilesSetUid(); upgradeFilesManager($command); //Status if ($errors) { CLI::logging("Upgrade finished but there were errors upgrading workspaces.\n"); CLI::logging(CLI::error("Please check the log above to correct any issues.") . "\n"); } else { CLI::logging("Upgrade successful\n"); } //setting flag to false $flag = G::isPMUnderUpdating(0); } /** * Function upgradeFilesManager * access public */ function upgradeFilesManager($command = "") { CLI::logging("> Updating Files Manager...\n\n"); $workspaces = get_workspaces_from_args($command); foreach ($workspaces as $workspace) { $name = $workspace->name; require_once( PATH_DB . $name . '/db.php' ); require_once( PATH_THIRDPARTY . 'propel/Propel.php'); PROPEL::Init ( PATH_METHODS.'dbConnections/rootDbConnections.php' ); $con = Propel::getConnection("root"); $stmt = $con->createStatement(); $sDirectory = glob(PATH_DATA . "sites/" . $name . "/" . "mailTemplates/*"); $sDirectoryPublic = glob(PATH_DATA . "sites/" . $name . "/" . "public/*"); $files = array(); foreach($sDirectory as $valor) { if (is_dir($valor)) { $inner_files = listFiles($valor); if (is_array($inner_files)) $files = array_merge($files, $inner_files); } if (is_file($valor)) { array_push($files, $valor); } } foreach($sDirectoryPublic as $valor) { if (is_dir($valor)) { $inner_files = listFiles($valor); if (is_array($inner_files)) $files = array_merge($files, $inner_files); } if (is_file($valor)) { array_push($files, $valor); } } } $sDir = PATH_DATA . "sites/" . $name . "/" . "mailTemplates/"; $sDirPublic = PATH_DATA . "sites/" . $name . "/" . "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); } } } function listFiles($dir) { $files = array(); $lista = glob($dir.'/*'); foreach($lista as $valor) { if (is_dir($valor)) { $inner_files = listFiles($valor); if (is_array($inner_files)) $files = array_merge($files, $inner_files); } if (is_file($valor)) { array_push($files, $valor); } } return $files; }