| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304 |
- <?php defined('BX_DOL') or die('hack attempt');
- /**
- * Copyright (c) UNA, Inc - https://una.io
- * MIT License - https://opensource.org/licenses/MIT
- *
- * @defgroup UnaUpgrade UNA Upgrade Script
- * @{
- */
- class BxDolUpgradeController
- {
- protected $oDb;
- protected $oUtil;
- protected $aLogMsgs;
- protected $sError;
- protected $sConclusion;
- public function __construct()
- {
- $this->oDb = BxDolUpgradeDb::getInstance();
- $this->oUtil = new BxDolUpgradeUtil($this->oDb);
- }
- public function getErrorMsg()
- {
- return $this->sError;
- }
- public function getLogMessages()
- {
- return $this->aLogMsgs;
- }
- public function getConclusion()
- {
- return $this->sConclusion;
- }
- public function writeLog()
- {
- if (empty($this->aLogMsgs))
- return true;
- $s = "\n\n\n--------- " . date('c') . "\n";
- $s .= implode("\n", $this->aLogMsgs);
- if ($this->sConclusion)
- $s .= "\nCONCLUSION:" . $this->sConclusion;
- if ($this->sError)
- $s .= "\nERROR:" . $this->sError;
- return file_put_contents(BX_DIRECTORY_PATH_ROOT . 'logs/upgrade.log', $s, FILE_APPEND);
- }
- public function setMaintenanceMode($bSetMaintenanceMode)
- {
- if ($bSetMaintenanceMode) {
- if (false !== file_put_contents(BX_DIRECTORY_PATH_ROOT . BX_MAINTENANCE_FILE, time()))
- return true;
- $this->sError = 'Enabling site maintetance mode failed';
- return false;
-
- } else {
- if (unlink(BX_DIRECTORY_PATH_ROOT . BX_MAINTENANCE_FILE))
- return true;
- $this->sError = 'Disabling site maintetance mode failed';
- return false;
- }
- }
- public function getAllUpgrades ()
- {
- $aTemplateFolders = array ();
- $aFolders = $this->oUtil->readUpgrades();
- foreach ($aFolders as $sFolder) {
- $this->oUtil->setFolder($sFolder);
- $aTemplateFolders[$sFolder] = $this->oUtil->executeCheck();
- }
- return $aTemplateFolders;
- }
- public function getAvailableUpgrade ()
- {
- $aTemplateFolders = array ();
- $aFolders = $this->oUtil->readUpgrades();
- foreach ($aFolders as $sFolder) {
- $this->oUtil->setFolder($sFolder);
- if (true === $this->oUtil->executeCheck())
- return $sFolder;
- }
- return false;
- }
- public function runUpgrade ($sFolder, $bIgnoreVersionCheck = false, $bIgnoreFilesOperations = false)
- {
- $this->aLogMsgs = array();
- $this->sError = false;
- if (!$bIgnoreVersionCheck && bx_get_ver() != BX_DOL_VERSION) {
- $this->sError = 'Database and files versions are different';
- return false;
- }
- // set current folder
- $this->oUtil->setFolder($sFolder);
- // run oprations with files
- $aFilesOperations = array (
- 'executeCheck' => "$sFolder upgrade will be applied",
- 'checkPermissions' => "Files permissions are ok and can be overwritten",
- 'copyFiles' => "Files copying successfully completed",
- 'filesDelete' => "Deprecated files were successfully deleted or there is no files to delete",
- 'updateFilesHash' => "System files hash was successfully updated",
- );
- if ($bIgnoreFilesOperations) {
- $aFilesOperations = [
- 'updateFilesHash' => "System files hash was successfully updated",
- ];
- }
-
- foreach ($aFilesOperations as $sFunc => $sSuccessMsg) {
- $mixedResult = $this->oUtil->$sFunc ();
- if (true !== $mixedResult) {
- $this->sError = $mixedResult;
- return false;
- } else {
- $this->aLogMsgs[] = $sSuccessMsg;
- }
- }
- // run system SQL upgrade
- $mixedResult = $this->oUtil->isExecuteSQLAvail ();
- if (true === $mixedResult) {
- $mixedResult = $this->oUtil->executeSQL ();
- if (true !== $mixedResult) {
- $sTemplateMessage = $mixedResult;
- $this->sError = $mixedResult;
- return false;
- } else {
- $this->aLogMsgs[] = "System SQL script was successfully executed";
- }
- } elseif (false === $mixedResult) {
- // just skip if not available found
- } else {
- $this->sError = $mixedResult;
- return false;
- }
- // get list of available language files updates
- if (false === ($aLangs = $this->oUtil->readLangs ())) {
- $this->sError = 'Error reading the directory with language updates';
- return false;
- } else {
- $sTemplateMessage = "The following languages will be affected for system:\n";
- if (!$aLangs) {
- $sTemplateMessage .= " - No languages will be affected\n";
- } else {
- foreach ($aLangs as $sLang) {
- $sTemplateMessage .= ' - ' . $sLang . "\n";
- }
- }
- $this->aLogMsgs[] = trim($sTemplateMessage);
- }
- // run system langs upgrade
- if ($aLangs) {
- $mixedResult = $this->oUtil->executeLangsAdd ();
- if (true !== $mixedResult) {
- $this->sError = $mixedResult;
- return false;
- } else {
- $this->aLogMsgs[] = "System language strings were successfully added";
- }
- }
- // run system custom script upgrade
- $mixedResult = $this->oUtil->isExecuteScriptAvail ();
- if (true === $mixedResult) {
- $mixedResult = $this->oUtil->executeScript ();
- if (true !== $mixedResult) {
- $this->sError = $mixedResult;
- return false;
- } else {
- $this->aLogMsgs[] = "System after update custom script was successfully executed";
- }
- } elseif (false === $mixedResult) {
- // just skip if not available found
- } else {
- $this->sError = $mixedResult;
- return false;
- }
- // get list of modules updates
- if (false !== ($aModules = $this->oUtil->readModules ())) {
- $sTemplateMessage = "The following modules will be updated:\n";
- if (!$aModules) {
- $sTemplateMessage .= " - No modules will be updated\n";
- } else {
- foreach ($aModules as $sModule) {
- $sTemplateMessage .= ' - ' . $sModule . "\n";
- }
- }
- $this->aLogMsgs[] = trim($sTemplateMessage);
- }
- if (!$aModules)
- $aModules = array();
- foreach ($aModules as $sModule) {
- // run module SQL upgrade
- $mixedResult = $this->oUtil->isExecuteSQLAvail ($sModule);
- if (true === $mixedResult) {
- $mixedResult = $this->oUtil->executeSQL ($sModule);
- if (true !== $mixedResult) {
- $this->sError = $mixedResult;
- return false;
- } else {
- $this->aLogMsgs[] = "'$sModule' module SQL script was successfully executed";
- }
- } elseif (false === $mixedResult) {
- // just skip if not available found
- } else {
- $this->sError = $mixedResult;
- return false;
- }
- // get list of available language files updates
- if (false === ($aLangs = $this->oUtil->readLangs ($sModule))) {
- $this->sError = 'Error reading the directory with language updates';
- return false;
- } else {
- $sTemplateMessage = "The following languages will be affected for '$sModule' module:\n";
- if (!$aLangs) {
- $sTemplateMessage .= " - No languages will be affected\n";
- } else {
- foreach ($aLangs as $sLang) {
- $sTemplateMessage .= ' - ' . $sLang . "\n";
- }
- }
- $this->aLogMsgs[] = trim($sTemplateMessage);
- }
- // run module langs upgrade
- if ($aLangs) {
- $mixedResult = $this->oUtil->executeLangsAdd ($sModule);
- if (true !== $mixedResult) {
- $this->sError = $mixedResult;
- return false;
- } else {
- $this->aLogMsgs[] = "'$sModule' module language strings were successfully added";
- }
- }
- // run module custom script upgrade
- $mixedResult = $this->oUtil->isExecuteScriptAvail ($sModule);
- if (true === $mixedResult) {
- $mixedResult = $this->oUtil->executeScript ($sModule);
- if (true !== $mixedResult) {
- $this->sError = $mixedResult;
- return false;
- } else {
- $this->aLogMsgs[] = "'$sModule' module after update custom script was successfully executed";
- }
- } elseif (false === $mixedResult) {
- // just skip if not available
- } else {
- $this->sError = $mixedResult;
- return false;
- }
- // run module custom script upgrade
- $sResult = $this->oUtil->executeConclusion ($sModule);
- if ($sResult)
- $this->aLogMsgs[] = $sResult;
- }
- // run module custom script upgrade
- $sResult = $this->oUtil->executeConclusion ();
- if ($sResult)
- $this->sConclusion = $sResult;
- return true;
- }
- }
- /** @} */
|