Exemplo n.º 1
0
 public function process()
 {
     if (!$this->loadProvider()) {
         return array();
     }
     $info = $this->provider->stats();
     if (empty($info)) {
         return $this->failure($this->modx->lexicon('provider_err_connect'));
     }
     return $this->success('', $info);
 }
Exemplo n.º 2
0
 /**
  * Get the data from the Provider
  *
  * @return array|string
  */
 public function getData()
 {
     $this->modx->getVersionData();
     $productVersion = $this->modx->version['code_name'] . '-' . $this->modx->version['full_version'];
     /** @var modRestResponse $response */
     $response = $this->provider->request('home', 'GET', array('supports' => $productVersion));
     if ($response->isError()) {
         return $this->failure($this->modx->lexicon('provider_err_connect', array('error' => $response->getError())));
     }
     return $response->toXml();
 }
 public function getPackages()
 {
     /* get current version for supportability */
     $this->modx->getVersionData();
     $productVersion = $this->modx->version['code_name'] . '-' . $this->modx->version['full_version'];
     /** @var modRestResponse $response */
     $response = $this->provider->request('package/update', 'GET', array('signature' => $this->package->get('signature'), 'supports' => $productVersion));
     if ($response->isError()) {
         return $this->modx->lexicon('provider_err_connect', array('error' => $response->getError()));
     }
     return $response->toXml();
 }
Exemplo n.º 4
0
 public function process()
 {
     $data = $this->provider->find($this->getProperties());
     if (empty($data) || count($data) !== 2) {
         return $this->failure($this->modx->lexicon('provider_err_connect'));
     }
     $list = array();
     foreach ($data[1] as $package) {
         if ((string) $package['name'] == '') {
             continue;
         }
         $list[] = $package;
     }
     return $this->outputArray($list, (int) $data[0]);
 }
Exemplo n.º 5
0
 public function beforeSave()
 {
     $name = $this->getProperty('name', '');
     if (empty($name)) {
         $this->addFieldError('name', $this->modx->lexicon('provider_err_ns_name'));
     }
     $serviceUrl = $this->getProperty('service_url', '');
     if (empty($serviceUrl)) {
         $this->addFieldError('service_url', $this->modx->lexicon('provider_err_ns_url'));
     }
     $verified = $this->object->verify();
     if ($verified !== true) {
         $this->addFieldError('service_url', $this->modx->lexicon('provider_err_not_verified'));
     }
     return parent::beforeSave();
 }
Exemplo n.º 6
0
 public function getCategories()
 {
     $this->modx->getVersionData();
     $productVersion = $this->modx->version['code_name'] . '-' . $this->modx->version['full_version'];
     /** @var modRestResponse $response */
     $response = $this->provider->request('repository/' . $this->nodeKey, 'GET', array('supports' => $productVersion));
     if ($response->isError()) {
         return $this->modx->lexicon('provider_err_connect', array('error' => $response->getError()));
     }
     $tags = $response->toXml();
     $list = array();
     foreach ($tags as $tag) {
         if ((string) $tag->name == '') {
             continue;
         }
         $list[] = array('id' => 'n_tag_' . (string) $tag->id . '_' . $this->nodeKey, 'text' => (string) $tag->name, 'leaf' => true, 'data' => $tag, 'type' => 'tag', 'iconCls' => 'icon icon-tag');
     }
     return $list;
 }
Exemplo n.º 7
0
 public function process()
 {
     $this->modx->log(modX::LOG_LEVEL_INFO, $this->modx->lexicon('package_update_info_provider_scan', array('provider' => $this->provider->get('name'))));
     $packages = $this->provider->latest($this->getProperty('signature'));
     if (is_string($packages)) {
         return $this->failure($packages);
     }
     /* if no newer packages were found */
     if (count($packages) < 1) {
         $msg = $this->modx->lexicon('package_err_uptodate', array('signature' => $this->package->get('signature')));
         $this->modx->log(modX::LOG_LEVEL_INFO, $msg);
         return $this->failure($msg);
     }
     $list = array();
     /** @var SimpleXMLElement $package */
     foreach ($packages as $package) {
         $packageArray = array('id' => (string) $package['id'], 'package' => (string) $package['package'], 'version' => (string) $package['version'], 'release' => (string) $package['release'], 'signature' => (string) $package['signature'], 'location' => (string) $package['location'], 'info' => (string) $package['location'] . '::' . (string) $package['signature']);
         $list[] = $packageArray;
     }
     return $this->success('', $list);
 }
Exemplo n.º 8
0
 public function getData()
 {
     /* get version */
     $this->modx->getVersionData();
     $productVersion = $this->modx->version['code_name'] . '-' . $this->modx->version['full_version'];
     /* send request and process response */
     $where = array('page' => $this->getProperty('page'), 'supports' => $productVersion, 'sorter' => $this->getProperty('sorter'));
     $tag = $this->getProperty('tag');
     if (!empty($tag)) {
         $where['tag'] = $tag;
     }
     $query = $this->getProperty('query');
     if (!empty($query)) {
         $where['query'] = $query;
     }
     /** @var modRestResponse $response */
     $response = $this->provider->request('package', 'GET', $where);
     if ($response->isError()) {
         return $this->modx->lexicon('provider_err_connect', array('error' => $response->getError()));
     }
     return $response->toXml();
 }
Exemplo n.º 9
0
 /**
  * Load the provider for the package
  * @return boolean
  */
 public function loadProvider()
 {
     $provider = $this->getProperty('provider');
     if (empty($provider)) {
         $c = $this->modx->newQuery('transport.modTransportProvider');
         $c->where(array('name:=' => 'modxcms.com', 'OR:name:=' => 'modx.com'));
         $this->provider = $this->modx->getObject('transport.modTransportProvider', $c);
         if (!empty($this->provider)) {
             $this->setProperty('provider', $this->provider->get('id'));
         }
     } else {
         $this->provider = $this->modx->getObject('transport.modTransportProvider', $provider);
     }
     return !empty($this->provider);
 }
Exemplo n.º 10
0
 /**
  * Get Package metadata from the provider
  * 
  * @return array|string
  */
 public function getPackageMetadata()
 {
     /** @var modRestResponse $response */
     $response = $this->provider->request('package', 'GET', array('signature' => $this->signature));
     if ($response->isError()) {
         return $this->modx->lexicon('provider_err_connect', array('error' => $response->getError()));
     }
     $metadataXml = $response->toXml();
     /* set package metadata */
     $metadata = array();
     $this->modx->rest->xml2array($metadataXml, $metadata);
     $this->package->set('metadata', $metadata);
     $this->package->set('package_name', (string) $metadataXml->name);
     return true;
 }
Exemplo n.º 11
0
 /**
  * Download and install the package from the provider
  *
  * @param string $packageName
  * @param \modTransportProvider $provider
  * @param array $options
  * @return bool
  */
 private function download($packageName, $provider, $options = array())
 {
     $this->modx->getVersionData();
     $product_version = $this->modx->version['code_name'] . '-' . $this->modx->version['full_version'];
     $response = $provider->verify();
     if ($response !== true) {
         $this->output->writeln("<error>Could not download {$packageName} because the provider cannot be verified.</error>");
         $error = $response;
         if (!empty($error) && is_string($error)) {
             $this->output->writeln("Message from Provider: {$error}");
         }
         return false;
     }
     $provider->getClient();
     $this->output->writeln("Searching <comment>{$provider->get('name')}</comment> for <comment>{$packageName}</comment>...");
     // Request package information from the chosen provider
     $response = $provider->request('package', 'GET', array('supports' => $product_version, 'query' => $packageName));
     // Check for a proper response
     if (!empty($response)) {
         $foundPackages = simplexml_load_string($response->response);
         $helper = $this->getHelper('question');
         $packages = array();
         foreach ($foundPackages as $foundPkg) {
             $packages[strtolower((string) $foundPkg->name)] = array('name' => (string) $foundPkg->name, 'version' => (string) $foundPkg->version, 'location' => (string) $foundPkg->location, 'signature' => (string) $foundPkg->signature);
         }
         // Ensure the exact match is always first
         if (isset($packages[strtolower($packageName)])) {
             $packages = array($packageName => $packages[strtolower($packageName)]) + $packages;
         }
         foreach ($packages as $package) {
             if ($this->modx->getCount('transport.modTransportPackage', array('signature' => $package['signature']))) {
                 $this->output->writeln("<info>Package {$package['name']} {$package['version']} is already installed.</info>");
                 if ($this->interactive) {
                     continue;
                 } else {
                     return true;
                 }
             }
             if ($this->interactive) {
                 if (!$helper->ask($this->input, $this->output, new ConfirmationQuestion("Do you want to install <info>{$package['name']} ({$package['version']})</info>? <comment>[Y/n]</comment>: ", true))) {
                     continue;
                 }
             }
             // Run the core processor to download the package from the provider
             $this->output->writeln("<comment>Downloading {$package['name']} ({$package['version']})...</comment>");
             $response = $this->modx->runProcessor('workspace/packages/rest/download', array('provider' => $provider->get('id'), 'info' => join('::', array($package['location'], $package['signature']))));
             // If we have an error, show it and cancel.
             if ($response->isError()) {
                 $this->output->writeln("<error>Could not download package {$package['name']}. Reason: {$response->getMessage()}</error>");
                 return false;
             }
             $this->output->writeln("<comment>Installing {$package['name']}...</comment>");
             // Grab the package object
             $obj = $response->getObject();
             if ($package = $this->modx->getObject('transport.modTransportPackage', array('signature' => $obj['signature']))) {
                 // Install the package
                 return $package->install($options);
             }
         }
     }
     return true;
 }
Exemplo n.º 12
0
 public function getCategories()
 {
     return $this->provider->categories($this->nodeKey);
 }