Beispiel #1
0
 /**
  * Uninstalls a package.
  *
  * @param bool $installDump When TRUE, the sql dump will be importet
  *
  * @throws rex_functional_exception
  *
  * @return bool TRUE on success, FALSE on error
  */
 public function uninstall($installDump = true)
 {
     $isActivated = $this->package->isAvailable();
     if ($isActivated && !$this->deactivate()) {
         return false;
     }
     try {
         $this->package->setProperty('install', false);
         // include uninstall.php
         if (is_readable($this->package->getPath(rex_package::FILE_UNINSTALL))) {
             if (!$isActivated) {
                 rex_i18n::addDirectory($this->package->getPath('lang'));
             }
             $this->package->includeFile(rex_package::FILE_UNINSTALL);
             if (($instmsg = $this->package->getProperty('installmsg', '')) != '') {
                 throw new rex_functional_exception($instmsg);
             }
             if ($this->package->isInstalled()) {
                 throw new rex_functional_exception($this->i18n('no_reason'));
             }
         }
         // import uninstall.sql
         $uninstallSql = $this->package->getPath(rex_package::FILE_UNINSTALL_SQL);
         if ($installDump === true && is_readable($uninstallSql)) {
             rex_sql_util::importDump($uninstallSql);
         }
         // delete assets
         $assets = $this->package->getAssetsPath();
         if (is_dir($assets) && !rex_dir::delete($assets)) {
             throw new rex_functional_exception($this->i18n('install_cant_delete_files'));
         }
         rex_config::removeNamespace($this->package->getPackageId());
         $this->saveConfig();
         $this->message = $this->i18n('uninstalled', $this->package->getName());
         return true;
     } catch (rex_functional_exception $e) {
         $this->message = $e->getMessage();
     } catch (rex_sql_exception $e) {
         $this->message = 'SQL error: ' . $e->getMessage();
     }
     $this->package->setProperty('install', true);
     if ($isActivated) {
         $this->package->setProperty('status', true);
     }
     $this->saveConfig();
     $this->message = $this->i18n('no_uninstall', $this->package->getName()) . '<br />' . $this->message;
     return false;
 }
Beispiel #2
0
 /**
  * Installs a package.
  *
  * @param bool $installDump When TRUE, the sql dump will be importet
  *
  * @throws rex_functional_exception
  *
  * @return bool TRUE on success, FALSE on error
  */
 public function install($installDump = true)
 {
     try {
         // check package directory perms
         $install_dir = $this->package->getPath();
         if (!rex_dir::isWritable($install_dir)) {
             throw new rex_functional_exception($this->i18n('dir_not_writable', $install_dir));
         }
         // check package.yml
         if (!is_readable($this->package->getPath(rex_package::FILE_PACKAGE))) {
             throw new rex_functional_exception($this->i18n('missing_yml_file'));
         }
         $packageId = $this->package->getProperty('package');
         if ($packageId === null) {
             throw new rex_functional_exception($this->i18n('missing_id', $this->package->getPackageId()));
         }
         if ($packageId != $this->package->getPackageId()) {
             $parts = explode('/', $packageId, 2);
             throw new rex_functional_exception($this->wrongPackageId($parts[0], isset($parts[1]) ? $parts[1] : null));
         }
         if ($this->package->getVersion() === null) {
             throw new rex_functional_exception($this->i18n('missing_version'));
         }
         // check requirements and conflicts
         $message = '';
         if (!$this->checkRequirements()) {
             $message = $this->message;
         }
         if (!$this->checkConflicts()) {
             $message .= $this->message;
         }
         if ($message) {
             throw new rex_functional_exception($message);
         }
         $activate = !$this->package->getProperty('install');
         $available = $this->package->isAvailable();
         $this->package->setProperty('install', true);
         // include install.php
         if (is_readable($this->package->getPath(rex_package::FILE_INSTALL))) {
             if (!$available) {
                 rex_autoload::addDirectory($this->package->getPath('lib'));
                 rex_autoload::addDirectory($this->package->getPath('vendor'));
                 rex_i18n::addDirectory($this->package->getPath('lang'));
             }
             $this->package->includeFile(rex_package::FILE_INSTALL);
             if (($instmsg = $this->package->getProperty('installmsg', '')) != '') {
                 throw new rex_functional_exception($instmsg);
             }
             if (!$this->package->isInstalled()) {
                 throw new rex_functional_exception($this->i18n('no_reason'));
             }
         }
         // import install.sql
         $installSql = $this->package->getPath(rex_package::FILE_INSTALL_SQL);
         if ($installDump === true && is_readable($installSql)) {
             rex_sql_util::importDump($installSql);
         }
         if ($activate) {
             $this->package->setProperty('status', true);
         }
         $this->saveConfig();
         if ($activate && $this->generatePackageOrder) {
             self::generatePackageOrder();
         }
         // copy assets
         $assets = $this->package->getPath('assets');
         if (is_dir($assets)) {
             if (!rex_dir::copy($assets, $this->package->getAssetsPath())) {
                 throw new rex_functional_exception($this->i18n('install_cant_copy_files'));
             }
         }
         $this->message = $this->i18n('installed', $this->package->getName());
         return true;
     } catch (rex_functional_exception $e) {
         $this->message = $e->getMessage();
     } catch (rex_sql_exception $e) {
         $this->message = 'SQL error: ' . $e->getMessage();
     }
     $this->package->setProperty('install', false);
     $this->message = $this->i18n('no_install', $this->package->getName()) . '<br />' . $this->message;
     return false;
 }
Beispiel #3
0
 /**
  * {@inheritdoc}
  */
 public function isAvailable()
 {
     return $this->getAddon()->isAvailable() && parent::isAvailable();
 }