示例#1
0
 /**
  * Paket Manager Aktionen
  * @return boolean
  */
 public function processPkg()
 {
     $updaterSys = new \fpcm\model\updater\system();
     $updaterMod = new \fpcm\model\updater\modules();
     $moduleList = new \fpcm\model\modules\modulelist();
     switch ($this->funcParams[0]) {
         case self::FPCMCLI_PARAM_UPDATE:
             $this->output('Check for system and module updates...');
             $successSys = $updaterSys->checkUpdates();
             $successMod = $updaterMod->checkUpdates();
             if ($successSys > 1 || $successMod > 1) {
                 $this->output('Unable to update package informations. Check PHP log for further information.' . PHP_EOL . 'Error Code: SYS-' . $successSys . ' | MOD-' . $successMod, true);
             }
             $this->output('Check successfull!');
             $this->output('Current system version: ' . $updaterSys->getRemoteData('version'));
             $this->output('Module updates available: ' . ($successMod ? 'yes' : 'no'));
             break;
         case self::FPCMCLI_PARAM_INSTALL:
         case self::FPCMCLI_PARAM_UPGRADE:
             if ($this->funcParams[1] !== self::FPCMCLI_PARAM_TYPE_MODULE && $this->funcParams[0] === self::FPCMCLI_PARAM_INSTALL) {
                 $this->output('Invalid params', true);
             }
             if ($this->funcParams[1] === self::FPCMCLI_PARAM_TYPE_SYSTEM) {
                 $this->output('Start system update...');
                 $successSys = $updaterSys->checkUpdates();
                 $remoteData = $updaterSys->getRemoteData();
                 $fileInfo = pathinfo($remoteData['filepath'], PATHINFO_FILENAME);
                 $pkg = new \fpcm\model\packages\update('update', $fileInfo);
             } elseif ($this->funcParams[1] === self::FPCMCLI_PARAM_TYPE_MODULE) {
                 $list = $moduleList->getModulesRemote();
                 $keyData = \fpcm\model\packages\package::explodeModuleFileName($this->funcParams[2]);
                 if (!array_key_exists($keyData[0], $list)) {
                     $this->output('The requested module was not found in package list storage. Check your module key or update package information storage.', true);
                 }
                 /* @var $module \fpcm\model\modules\listitem */
                 $module = $list[$keyData[0]];
                 $pkg = new \fpcm\model\packages\module('module', $module->getKey(), $module->getVersionRemote());
             }
             $this->output('Download package from ' . $pkg->getRemoteFile() . '...');
             $success = $pkg->download();
             if ($success !== true) {
                 $this->output('Download failed. ERROR CODE: ' . $success, true);
             }
             $this->output('Unpacking package file ' . \fpcm\model\files\ops::removeBaseDir($pkg->getLocalFile(), true) . '...');
             $success = $pkg->extract();
             if ($success !== true) {
                 $this->output('Unpacking failed. ERROR CODE: ' . $success, true);
             }
             $this->output('Copy package content...');
             $success = $pkg->copy();
             if ($success !== true) {
                 $this->output('Copy process failed. ERROR CODE: ' . $success, true);
             }
             if ($this->funcParams[1] === self::FPCMCLI_PARAM_TYPE_SYSTEM) {
                 $this->output('Run final update steps...');
                 $this->runFinalizer();
             } elseif ($this->funcParams[1] === self::FPCMCLI_PARAM_TYPE_MODULE) {
                 $this->output('Perform database changes...');
                 $moduleClass = \fpcm\model\abstracts\module::getModuleClassName($keyData[0]);
                 $res = class_exists($moduleClass);
                 $moduleClassPath = \fpcm\classes\baseconfig::$moduleDir . $keyData[0] . '/' . str_replace(array('\\', '/'), '', $keyData[0]) . '.php';
                 if (!file_exists($moduleClassPath)) {
                     $this->output('Module class ' . $moduleClass . ' not found in "' . $moduleClassPath . '"!', true);
                 }
                 $modObj = new $moduleClass($pkg->getKey(), '', $module->getVersionRemote());
                 if (!is_a($modObj, '\\fpcm\\model\\abstracts\\module')) {
                     $this->output('Module class ' . $moduleClass . ' must be an instance of "\\fpcm\\model\\abstracts\\module"!', true);
                 }
                 if ($this->funcParams[0] === self::FPCMCLI_PARAM_INSTALL) {
                     if ($module->isInstalled()) {
                         $this->output('The selected module is already installed. Exiting...', true);
                     }
                     $res = $modObj->runInstall();
                 } elseif ($this->funcParams[0] === self::FPCMCLI_PARAM_UPGRADE) {
                     if (!$module->isInstalled()) {
                         $this->output('The selected module is not installed. Exiting...', true);
                     }
                     $res = $modObj->runUpdate();
                 }
             }
             $this->output('Update package manager log...');
             $pkg->loadPackageFileListFromTemp();
             \fpcm\classes\logs::pkglogWrite($pkg->getKey() . ' ' . $pkg->getVersion(), $pkg->getFiles());
             $this->output('Perform cleanup...');
             $success = $pkg->cleanup();
             if ($this->funcParams[1] === self::FPCMCLI_PARAM_TYPE_SYSTEM) {
                 $this->output('System update successfull. New version: ' . $this->config->system_version);
             }
             if ($this->funcParams[1] === self::FPCMCLI_PARAM_TYPE_MODULE) {
                 $this->output('Module installed successfull!');
             }
             break;
         case self::FPCMCLI_PARAM_UPGRADE_DB:
             if ($this->funcParams[1] === self::FPCMCLI_PARAM_TYPE_MODULE) {
                 $this->output('Invalid params', true);
             }
             if ($this->funcParams[1] === self::FPCMCLI_PARAM_TYPE_SYSTEM) {
                 $this->output('Update database and filesystem...');
                 $this->runFinalizer();
                 $this->output('Update successfull. New version: ' . $this->config->system_version);
             }
             break;
         case self::FPCMCLI_PARAM_REMOVE:
             if ($this->funcParams[1] !== self::FPCMCLI_PARAM_TYPE_MODULE) {
                 $this->output('Invalid params', true);
             }
             $list = $moduleList->getModulesRemote();
             $keyData = \fpcm\model\packages\package::explodeModuleFileName($this->funcParams[2]);
             if (!array_key_exists($keyData[0], $list)) {
                 $this->output('The requested module was not found in package list storage. Check your module key or update package information storage.', true);
             }
             /* @var $module \fpcm\model\modules\listitem */
             $module = $list[$keyData[0]];
             if (!$module->isInstalled()) {
                 $this->output('The selected module is not installed. Exiting...', true);
             }
             $module->runUninstall();
             if (!$moduleList->uninstallModules(array($keyData[0]))) {
                 $this->output('Unable to remove module ' . $keyData[0], true);
             }
             $this->output('Module ' . $keyData[0] . ' was removed successfully.');
             break;
         case self::FPCMCLI_PARAM_LIST:
             if ($this->funcParams[1] !== self::FPCMCLI_PARAM_TYPE_MODULE) {
                 $this->output('Invalid params', true);
             }
             $list = $moduleList->getModulesRemote(false);
             $out = array('', 'Available modules from package server for current FanPress CM version:', '');
             /* @var $value \fpcm\model\modules\listitem */
             foreach ($list as $value) {
                 $line = array('   == ' . $value->getName() . ' > ' . $value->getKey() . ', ' . $value->getVersionRemote(), '   ' . $value->getAuthor() . ' > ' . $value->getLink(), '   ' . $value->getDescription(), '');
                 $out[] = implode(PHP_EOL, $line);
             }
             $this->output($out);
             break;
         case self::FPCMCLI_PARAM_INFO:
             if ($this->funcParams[1] !== self::FPCMCLI_PARAM_TYPE_MODULE) {
                 $this->output('Invalid params', true);
             }
             $list = $moduleList->getModulesRemote();
             $keyData = \fpcm\model\packages\package::explodeModuleFileName($this->funcParams[2]);
             if (!array_key_exists($keyData[0], $list)) {
                 $this->output('The requested module was not found in package list storage. Check your module key or update package information storage.', true);
             }
             /* @var $module \fpcm\model\modules\listitem */
             $module = $list[$keyData[0]];
             $this->output(array('== ' . $module->getName(), '   ' . $module->getKey(), '   > ' . $module->getDescription(), '   Version: ' . $module->getVersionRemote(), '   Author: ' . $module->getAuthor(), '   Link: ' . $module->getLink(), '   Installed: ' . ($module->isInstalled() ? 'yes' : 'no'), '   Installed version: ' . $module->getVersion(), '   Status: ' . ($module->getStatus() ? 'enabled' : 'disabled'), '   Dependencies:', '   ' . implode(PHP_EOL, $module->getDependencies())));
             break;
         default:
             break;
     }
     return true;
 }
示例#2
0
 /**
  * Controller-Processing
  */
 public function process()
 {
     if (!parent::process()) {
         return false;
     }
     if ($this->canConnect) {
         $keyData = \fpcm\model\packages\package::explodeModuleFileName($this->key);
         $pkg = new \fpcm\model\packages\module('module', $keyData[0], $keyData[1]);
     }
     if (!isset($keyData[0]) || !isset($keyData[1])) {
         $this->returnCode = $this->step . '_0';
         $this->getResponse();
     }
     $this->returnData['current'] = $this->step;
     switch ($this->step) {
         case 1:
             $res = $pkg->download();
             $from = $pkg->getRemoteFile();
             if ($res === true) {
                 \fpcm\classes\logs::syslogWrite('Downloaded module package successfully from ' . $from);
                 $this->returnData['nextstep'] = 2;
             } else {
                 \fpcm\classes\logs::syslogWrite('Error while downloading module package from' . $from);
                 $this->returnData['nextstep'] = 5;
             }
             break;
         case 2:
             $res = $pkg->extract();
             $from = \fpcm\model\files\ops::removeBaseDir($pkg->getLocalFile());
             if ($res === true) {
                 \fpcm\classes\logs::syslogWrite('Extracted module package successfully from ' . $from);
                 $this->returnData['nextstep'] = 3;
             } else {
                 \fpcm\classes\logs::syslogWrite('Error while extracting module package from ' . $from);
                 $this->returnData['nextstep'] = 5;
             }
             break;
         case 3:
             $res = $pkg->copy();
             $dest = \fpcm\model\files\ops::removeBaseDir(\fpcm\classes\baseconfig::$baseDir) . $pkg->getCopyDestination() . $pkg->getKey();
             $from = \fpcm\model\files\ops::removeBaseDir($pkg->getExtractPath() . basename($pkg->getKey()));
             if ($res === true) {
                 \fpcm\classes\logs::syslogWrite('Moved module package content successfully from ' . $from . ' to ' . $dest);
                 $this->returnData['nextstep'] = 4;
             } else {
                 \fpcm\classes\logs::syslogWrite('Error while moving module package content from ' . $from . ' to ' . $dest);
                 \fpcm\classes\logs::syslogWrite(implode('<br>', $pkg->getCopyErrorPaths()));
                 $this->returnData['nextstep'] = 5;
             }
             break;
         case 4:
             $moduleClass = \fpcm\model\abstracts\module::getModuleClassName($keyData[0]);
             $res = class_exists($moduleClass);
             $moduleClassPath = \fpcm\classes\baseconfig::$moduleDir . $keyData[0] . '/' . str_replace(array('\\', '/'), '', $keyData[0]) . '.php';
             if (!file_exists($moduleClassPath)) {
                 $res = false;
                 trigger_error('Module class ' . $moduleClass . ' not found in "' . $moduleClassPath . '"!');
                 $this->returnData['nextstep'] = 5;
                 break;
             }
             if ($res) {
                 $modObj = new $moduleClass($keyData[0], '', $keyData[1]);
                 if (!is_a($modObj, '\\fpcm\\model\\abstracts\\module')) {
                     $res = false;
                     trigger_error('Module class ' . $moduleClass . ' must be an instance of "\\fpcm\\model\\abstracts\\module"!');
                     break;
                 }
                 $res = $modObj->runInstall();
             }
             $this->returnData['nextstep'] = 5;
             if ($res === true) {
                 \fpcm\classes\logs::syslogWrite('Run final module install steps successfully for ' . $pkg->getKey());
             } else {
                 \fpcm\classes\logs::syslogWrite('Error while running final module install steps for ' . $pkg->getKey());
             }
             break;
         case 5:
             if ($this->canConnect) {
                 $pkg->loadPackageFileListFromTemp();
                 \fpcm\classes\logs::pkglogWrite($pkg->getKey() . ' ' . $pkg->getVersion(), $pkg->getFiles());
                 $pkg->cleanup();
             }
             \fpcm\classes\baseconfig::enableAsyncCronjobs(true);
             $this->cache->cleanup();
             $res = true;
             break;
         default:
             $res = false;
             break;
     }
     $this->returnCode = $this->step . '_' . (int) $res;
     $this->getResponse();
 }
示例#3
0
 /**
  * Controller-Processing
  */
 public function process()
 {
     if (!parent::process()) {
         return false;
     }
     $this->canConnect = \fpcm\classes\baseconfig::canConnect();
     if ($this->canConnect) {
         $versionDataFile = new \fpcm\model\files\tempfile('newversion');
         if ($versionDataFile->exists() && $versionDataFile->getContent()) {
             $remoteData = json_decode($versionDataFile->getContent(), true);
         } else {
             $updater = new \fpcm\model\updater\system();
             $updater->checkUpdates();
             $remoteData = $updater->getRemoteData();
             $versionDataFile->setContent(json_encode($remoteData));
             $versionDataFile->save();
         }
         $fileInfo = pathinfo($remoteData['filepath'], PATHINFO_FILENAME);
         $tmpFile = new \fpcm\model\files\tempfile('forceUpdateFile');
         if ($tmpFile->exists()) {
             $fileInfo = $tmpFile->getContent();
         }
         $signature = isset($remoteData['signature']) ? $remoteData['signature'] : '';
         $pkg = new \fpcm\model\packages\update('update', $fileInfo, '', $signature);
     }
     $this->returnData['current'] = $this->step;
     switch ($this->step) {
         case 1:
             $res = $pkg->download();
             if ($res === \fpcm\model\packages\package::FPCMPACKAGE_REMOTEFILE_ERROR) {
                 $versionDataFile->delete();
             }
             if ($res === true) {
                 \fpcm\classes\logs::syslogWrite('Downloaded update package successfully from ' . $pkg->getRemoteFile());
                 $this->returnData['nextstep'] = 2;
             } else {
                 \fpcm\classes\logs::syslogWrite('Error while downloading update package from ' . $pkg->getRemoteFile());
                 $this->returnData['nextstep'] = 5;
             }
             break;
         case 2:
             $res = $pkg->extract();
             $from = \fpcm\model\files\ops::removeBaseDir($pkg->getLocalFile());
             if ($res === true) {
                 \fpcm\classes\logs::syslogWrite('Extracted update package successfully from ' . $from);
                 $this->returnData['nextstep'] = 3;
             } else {
                 \fpcm\classes\logs::syslogWrite('Error while extracting update package from ' . $from);
                 $this->returnData['nextstep'] = 5;
             }
             break;
         case 3:
             $res = $pkg->copy();
             $dest = \fpcm\model\files\ops::removeBaseDir(\fpcm\classes\baseconfig::$baseDir);
             $from = \fpcm\model\files\ops::removeBaseDir($pkg->getExtractPath());
             if ($res === true) {
                 \fpcm\classes\logs::syslogWrite('Moved update package content successfully from ' . $from . ' to ' . $dest);
                 $this->returnData['nextstep'] = 4;
             } else {
                 \fpcm\classes\logs::syslogWrite('Error while moving update package content from ' . $from . ' to ' . $dest);
                 \fpcm\classes\logs::syslogWrite(implode('<br>', $pkg->getCopyErrorPaths()));
                 $this->returnData['nextstep'] = 5;
             }
             break;
         case 4:
             $finalizer = new \fpcm\model\updater\finalizer();
             $res = $finalizer->runUpdate();
             $this->returnData['nextstep'] = $this->forceStep ? 6 : 5;
             if ($res === true) {
                 \fpcm\classes\logs::syslogWrite('Run final update steps successfully!');
             } else {
                 \fpcm\classes\logs::syslogWrite('Error while running final update steps!');
             }
             break;
         case 5:
             if ($this->canConnect) {
                 $pkg->loadPackageFileListFromTemp();
                 \fpcm\classes\logs::pkglogWrite($pkg->getKey() . ' ' . $pkg->getVersion(), $pkg->getFiles());
                 $pkg->cleanup();
             }
             \fpcm\classes\baseconfig::enableAsyncCronjobs(true);
             $this->cache->cleanup();
             $res = true;
             $this->returnData['nextstep'] = 6;
             break;
         case 6:
             $this->returnData['newver'] = $this->config->system_version;
             $res = true;
             if ($versionDataFile->exists()) {
                 $versionDataFile->delete();
             }
             break;
         default:
             $res = false;
             break;
     }
     $this->returnCode = $this->step . '_' . (int) $res;
     $this->getResponse();
 }