/** * 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(); }
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; }
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(); }
/** * 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; }
/** * 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; }