Beispiel #1
0
 /**
  * Gibt Liste mit Modulen zurück, die von Modul-Server angeboten werden
  * @param bool $init
  * @return array
  */
 public function getModulesRemote($init = true)
 {
     if (!\fpcm\classes\baseconfig::canConnect()) {
         return array();
     }
     $moduleUpdater = new \fpcm\model\updater\modules();
     $moduleUpdater->getModulelist();
     $remoteModues = $moduleUpdater->getRemoteData();
     if (!is_array($remoteModues)) {
         return array();
     }
     $modules = array();
     foreach ($remoteModues as $key => $value) {
         if (version_compare($this->config->system_version, $value['minsysverion'], '<') || version_compare($this->config->system_version, $value['maxsysverion'], '>')) {
             continue;
         }
         $value['description'] = isset($value['description']) ? $value['description'] : '';
         $value['author'] = isset($value['author']) ? $value['author'] : '';
         $value['link'] = isset($value['link']) ? $value['link'] : '';
         $value['systemMinVersion'] = isset($value['minsysverion']) ? $value['minsysverion'] : '';
         $mlConfig = $this->getConfigByModuleKey($key, 'modulelist');
         $moduleItem = new \fpcm\model\modules\listitem($key, $value['name'], isset($mlConfig['version']) ? $mlConfig['version'] : '-', $value['version'], $value['description'], $value['author'], $value['link'], $value['systemMinVersion'], $init);
         if (isset($value['dependencies'])) {
             $moduleItem->setDependencies($value['dependencies']);
         }
         $modules[$key] = $moduleItem;
     }
     return $modules;
 }
Beispiel #2
0
 /**
  * Controller-Processing
  */
 public function process()
 {
     if (!parent::process()) {
         return false;
     }
     $this->cache->cleanup();
     $updater = new \fpcm\model\updater\modules();
     $updater->checkUpdates(true);
 }
Beispiel #3
0
 /**
  * Liefert Modul-Update-HTML zurück
  * @since FPCM 3.1.0
  */
 private function getModuleUpdateStatus()
 {
     $moduleUpdates = new \fpcm\model\updater\modules();
     $checkRes = $moduleUpdates->checkUpdates();
     if ($checkRes === true) {
         $iconClass = 'fa-cloud-download';
         $statusClass = 'fpcm-dashboard-updates-outdated';
         $statusText = $this->language->translate('UPDATE_MODULECHECK_NEW');
     } elseif ($checkRes === \fpcm\model\updater\system::SYSTEMUPDATER_FURLOPEN_ERROR) {
         $iconClass = 'fa-exclamation-triangle';
         $statusClass = 'fpcm-dashboard-updates-checkerror';
         $statusText = $this->language->translate('UPDATE_MODULECHECK_FAILED');
     } else {
         $iconClass = 'fa-check';
         $statusClass = 'fpcm-dashboard-updates-current';
         $statusText = $this->language->translate('UPDATE_MODULECHECK_CURRENT');
     }
     $this->renderTable($iconClass, $statusClass, $statusText);
 }
Beispiel #4
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;
 }
Beispiel #5
0
 /**
  * Request-Handler
  * @return boolean
  */
 public function request()
 {
     if (!$this->session->exists() && !$this->permissions->check($this->checkPermission)) {
         return false;
     }
     if (is_null($this->getRequestVar('action')) || is_null($this->getRequestVar('keys'))) {
         return true;
     }
     $this->cache->cleanup();
     $this->action = $this->getRequestVar('action');
     $this->keys = $this->getRequestVar('keys', array(1, 4, 7));
     if (!is_array($this->keys)) {
         $this->keys = json_decode($this->keys, true);
     }
     if (!is_array($this->keys)) {
         return true;
     }
     $this->keys = array_map('trim', $this->keys);
     $this->keys = array_map('base64_decode', $this->keys);
     switch ($this->action) {
         case 'disable':
             if (!$this->permissions->check(array('modules' => 'enable'))) {
                 return true;
             }
             $res = $this->modulelist->disableModules($this->keys);
             break;
         case 'enable':
             if (!$this->permissions->check(array('modules' => 'enable'))) {
                 return true;
             }
             $res = $this->modulelist->enableModules($this->keys);
             break;
         case 'uninstall':
             if (!$this->permissions->check(array('modules' => 'uninstall'))) {
                 return true;
             }
             $res = $this->modulelist->uninstallModules($this->keys);
             break;
         case 'install':
             if (!$this->permissions->check(array('modules' => 'install'))) {
                 return true;
             }
             $this->keys = array_diff($this->keys, $this->modulelist->getInstalledModules());
             $tempFile = new \fpcm\model\files\tempfile('installkeys', json_encode($this->keys));
             if (!$tempFile->save()) {
                 trigger_error('Unable to save module keys to temp file');
                 return true;
             }
             break;
         case 'update':
             if (!$this->permissions->check(array('modules' => 'install'))) {
                 return true;
             }
             $updater = new \fpcm\model\updater\modules();
             $updater->getModulelist();
             $remotes = $updater->getRemoteData();
             $this->keys = array_intersect($this->keys, $this->modulelist->getInstalledModules());
             $versionKeys = array();
             foreach ($this->keys as $key) {
                 $versionKeys[] = $key . '_version' . $remotes[$key]['version'];
             }
             $tempFile = new \fpcm\model\files\tempfile('installkeys', json_encode($versionKeys));
             if (!$tempFile->save()) {
                 trigger_error('Unable to save module keys to temp file');
                 return true;
             }
             break;
     }
     if (!isset($res)) {
         return true;
     }
     if ($res) {
         $this->view->addNoticeMessage('MODULES_SUCCESS_' . strtoupper($this->action));
     } else {
         $this->view->addErrorMessage('MODULES_FAILED_' . strtoupper($this->action));
     }
     return true;
 }