/**
  * @return bool
  */
 public function installPackage()
 {
     /* add required core data */
     $this->install->xpdo->loadClass('transport.xPDOTransport', XPDO_CORE_PATH, true, true);
     $packageDirectory = MODX_CORE_PATH . 'packages/';
     $packageState = $this->install->settings->get('unpacked') == 1 ? xPDOTransport::STATE_UNPACKED : xPDOTransport::STATE_PACKED;
     $package = xPDOTransport::retrieve($this->install->xpdo, $packageDirectory . 'core.transport.zip', $packageDirectory, $packageState);
     if (!is_object($package) || !$package instanceof xPDOTransport) {
         $this->addResult(modInstallRunner::RESULT_FAILURE, '<p class="notok">' . $this->install->lexicon('package_execute_err_retrieve', array('path' => $this->install->settings->get('core_path'))) . '</p>');
         return false;
     }
     if (!defined('MODX_BASE_PATH')) {
         define('MODX_BASE_PATH', $this->install->settings->get('context_web_path'));
     }
     if (!defined('MODX_ASSETS_PATH')) {
         $assetsDefault = $this->install->settings->get('context_assets_path', $this->install->settings->get('context_web_path') . 'assets/');
         define('MODX_ASSETS_PATH', $assetsDefault);
     }
     if (!defined('MODX_MANAGER_PATH')) {
         define('MODX_MANAGER_PATH', $this->install->settings->get('context_mgr_path'));
     }
     if (!defined('MODX_CONNECTORS_PATH')) {
         define('MODX_CONNECTORS_PATH', $this->install->settings->get('context_connectors_path'));
     }
     if (!defined('MODX_BASE_URL')) {
         define('MODX_BASE_URL', $this->install->settings->get('context_web_url'));
     }
     if (!defined('MODX_ASSETS_URL')) {
         $assetsDefault = $this->install->settings->get('context_assets_url', $this->install->settings->get('context_web_url') . 'assets/');
         define('MODX_ASSETS_URL', $assetsDefault);
     }
     if (!defined('MODX_MANAGER_URL')) {
         define('MODX_MANAGER_URL', $this->install->settings->get('context_mgr_url'));
     }
     if (!defined('MODX_CONNECTORS_URL')) {
         define('MODX_CONNECTORS_URL', $this->install->settings->get('context_connectors_url'));
     }
     return $package->install(array(xPDOTransport::RESOLVE_FILES => $this->install->settings->get('inplace') == 0 ? 1 : 0, xPDOTransport::INSTALL_FILES => $this->install->settings->get('inplace') == 0 ? 1 : 0, xPDOTransport::PREEXISTING_MODE => xPDOTransport::REMOVE_PREEXISTING));
 }
Ejemplo n.º 2
0
 /**
  * Installs a transport package.
  *
  * @param string The package signature.
  * @param array $attributes An array of installation attributes.
  * @return array An array of error messages collected during the process.
  */
 public function installPackage($pkg, array $attributes = array())
 {
     $errors = array();
     /* instantiate the modX class */
     if (@(require_once MODX_CORE_PATH . 'model/modx/modx.class.php')) {
         $modx = new modX(MODX_CORE_PATH . 'config/');
         if (!is_object($modx) || !$modx instanceof modX) {
             $errors[] = '<p>' . $this->lexicon('modx_err_instantiate') . '</p>';
         } else {
             /* try to initialize the mgr context */
             $modx->initialize('mgr');
             if (!$modx->_initialized) {
                 $errors[] = '<p>' . $this->lexicon('modx_err_instantiate_mgr') . '</p>';
             } else {
                 $loaded = $modx->loadClass('transport.xPDOTransport', XPDO_CORE_PATH, true, true);
                 if (!$loaded) {
                     $errors[] = '<p>' . $this->lexicon('transport_class_err_load') . '</p>';
                 }
                 $packageDirectory = MODX_CORE_PATH . 'packages/';
                 $packageState = isset($attributes[xPDOTransport::PACKAGE_STATE]) ? $attributes[xPDOTransport::PACKAGE_STATE] : xPDOTransport::STATE_PACKED;
                 $package = xPDOTransport::retrieve($modx, $packageDirectory . $pkg . '.transport.zip', $packageDirectory, $packageState);
                 if ($package) {
                     if (!$package->install($attributes)) {
                         $errors[] = '<p>' . $this->lexicon('package_err_install', array('package' => $pkg)) . '</p>';
                     } else {
                         $modx->log(xPDO::LOG_LEVEL_INFO, $this->lexicon('package_installed', array('package' => $pkg)));
                     }
                 } else {
                     $errors[] = '<p>' . $this->lexicon('package_err_nf', array('package' => $pkg)) . '</p>';
                 }
             }
         }
     } else {
         $errors[] = '<p>' . $this->lexicon('modx_class_err_nf') . '</p>';
     }
     return $errors;
 }
 /**
  * Gets the package's transport mechanism.
  *
  * @access public
  * @param integer $state The state of the package.
  * @return mixed The package.
  */
 public function getTransport($state = -1) {
     if (!is_object($this->package) || !($this->package instanceof xPDOTransport)) {
         if ($this->xpdo->loadClass('transport.xPDOTransport', XPDO_CORE_PATH, true, true)) {
             $workspace = $this->getOne('Workspace');
             if ($workspace) {
                 $packageDir = $workspace->get('path') . 'packages/';
                 $sourceFile = $this->get('source');
                 if ($sourceFile) {
                     $transferred= file_exists($packageDir . $sourceFile);
                     if (!$transferred) { /* if no transport zip, attempt to get it */
                         if (!$transferred= $this->transferPackage($sourceFile, $packageDir)) {
                             $this->xpdo->log(xPDO::LOG_LEVEL_ERROR,$this->xpdo->lexicon('package_err_transfer',array(
                                 'sourceFile' => $sourceFile,
                                 'packageDir' => $packageDir,
                             )));
                         } else {
                             $sourceFile= basename($sourceFile);
                         }
                     }
                     if ($transferred) {
                         if ($state < 0) {
                             /* if directory is missing but zip exists, and DB state value is incorrect, fix here */
                             $targetDir = basename($sourceFile, '.transport.zip');
                             $state = is_dir($packageDir.$targetDir) ? $this->get('state') : xPDOTransport::STATE_PACKED;
                         }
                         /* retrieve the package */
                         $this->package = xPDOTransport :: retrieve($this->xpdo, $packageDir . $sourceFile, $packageDir, $state);
                         if ($this->package) {
                             /* set to unpacked state */
                             if ($state == xPDOTransport::STATE_PACKED) {
                                 $this->set('state', xPDOTransport::STATE_UNPACKED);
                             }
                             $this->set('source', $sourceFile);
                             $this->set('attributes', $this->package->attributes);
                             $this->save();
                         }
                     }
                 } else {
                     $this->xpdo->log(xPDO::LOG_LEVEL_ERROR,$this->xpdo->lexicon('package_err_source_nf'));
                 }
             }
         }
     }
     return $this->package;
 }
 /**
  * Uninstalls vehicle artifacts from the transport host.
  */
 public function uninstall(&$transport, $options)
 {
     $uninstalled = false;
     $vOptions = $this->get($transport, $options);
     if (isset($vOptions['object']) && isset($vOptions['object']['source']) && isset($vOptions['object']['target']) && isset($vOptions['object']['name'])) {
         if ($transport->xpdo->getDebug() === true) {
             $transport->xpdo->log(xPDO::LOG_LEVEL_DEBUG, "Installing Vehicle: " . print_r($vOptions, true));
         }
         $state = isset($vOptions['state']) ? $vOptions['state'] : xPDOTransport::STATE_UNPACKED;
         $pkgSource = $transport->path . $vOptions['object']['source'] . $vOptions['object']['name'];
         $pkgTarget = eval($vOptions['object']['target']);
         $object = xPDOTransport::retrieve($transport->xpdo, $pkgSource, $pkgTarget, $state);
         if ($this->validate($transport, $object, $vOptions)) {
             $uninstalled = $object->uninstall($vOptions);
             if (!$uninstalled) {
                 $transport->xpdo->log(xPDO::LOG_LEVEL_ERROR, 'Could not uninstall vehicle: ' . print_r($vOptions, true));
             } elseif (!$this->resolve($transport, $object, $vOptions)) {
                 $transport->xpdo->log(xPDO::LOG_LEVEL_ERROR, 'Could not resolve vehicle: ' . print_r($vOptions, true));
             }
         } else {
             $transport->xpdo->log(xPDO::LOG_LEVEL_ERROR, 'Could not validate vehicle: ' . print_r($vOptions, true));
         }
     } else {
         $transport->xpdo->log(xPDO::LOG_LEVEL_ERROR, 'Could not load vehicle: ' . print_r($vOptions, true));
     }
     return $uninstalled;
 }