예제 #1
0
 /**
  * Führt Upload von Module-Package via HTML-Form + PHP sowie Installation aus Modulmanager durch
  * @return boolean
  */
 public function processModuleUpload()
 {
     $tempNames = $this->uploader['tmp_name'];
     $fileNames = $this->uploader['name'];
     $fileTypes = $this->uploader['type'];
     foreach ($tempNames as $key => $value) {
         if (!is_uploaded_file($value) || !isset($fileNames[$key]) || !isset($fileTypes[$key])) {
             continue;
         }
         $ext = pathinfo($fileNames[$key], PATHINFO_EXTENSION);
         $ext = $ext ? strtolower($ext) : '';
         if ($ext != 'zip') {
             return false;
         }
         $fileName = \fpcm\classes\baseconfig::$tempDir . $fileNames[$key];
         if (!move_uploaded_file($value, $fileName)) {
             return false;
         }
         $data = \fpcm\model\packages\package::explodeModuleFileName(basename($fileNames[$key], '.zip'));
         $package = new \fpcm\model\packages\module('module', $data[0], $data[1]);
         $res = $package->extract();
         $extractPath = $package->getExtractPath();
         $modulelisteConfigFile = realpath($extractPath . $data[0] . '/config/modulelist.yml');
         if (!file_exists($modulelisteConfigFile)) {
             return $res;
         }
         include_once \fpcm\classes\loader::libGetFilePath('spyc', 'Spyc.php');
         $modulelisteConfig = \Spyc::YAMLLoad($modulelisteConfigFile);
         if ($res !== true) {
             return $res;
         }
         $package->setCopyDestination($modulelisteConfig['vendor'] . '/');
         $res = $package->copy();
         if ($res !== true) {
             return $res;
         }
         $package->cleanup();
         $moduleClass = \fpcm\model\abstracts\module::getModuleClassName($modulelisteConfig['vendor'] . '/' . $modulelisteConfig['key']);
         if (class_exists($moduleClass)) {
             $modObj = new $moduleClass($modulelisteConfig['vendor'] . $modulelisteConfig['key'], '', $data[1]);
             $res = $modObj->isInstalled() ? $modObj->runUpdate() : $modObj->runInstall();
             if ($res !== true) {
                 return $res;
             }
         }
     }
     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
 /**
  * Cronjob Ausführung
  * @return boolean
  */
 public function processModule()
 {
     $moduleList = new \fpcm\model\modules\modulelist();
     $list = $moduleList->getModulesLocal();
     $keyData = \fpcm\model\packages\package::explodeModuleFileName($this->funcParams[1]);
     if (!array_key_exists($keyData[0], $list)) {
         $this->output('The requested module was not found in local module storage. Check your module key.', true);
     }
     /* @var $module \fpcm\model\modules\listitem */
     $module = $list[$keyData[0]];
     if (!$module->isInstalled()) {
         $this->output('The selected module is not installed. Exiting...', true);
     }
     if ($this->funcParams[0] === self::FPCMCLI_PARAM_ENABLE) {
         if (!$moduleList->enableModules(array($keyData[0]))) {
             $this->output('Unable to enable module ' . $keyData[0], true);
         }
         $this->output('Module ' . $keyData[0] . ' was enabled successfully.');
     }
     if ($this->funcParams[0] === self::FPCMCLI_PARAM_DISBALE) {
         if (!$moduleList->disableModules(array($keyData[0]))) {
             $this->output('Unable to disable module ' . $keyData[0], true);
         }
         $this->output('Module ' . $keyData[0] . ' was disableed successfully.');
     }
     return true;
 }