public function installAction()
 {
     $name = $this->getParam('name', null);
     if (!$name) {
         return $this->_helper->json(['success' => false, 'message' => 'no package name supplied']);
     }
     $client = new Packagist\Api\Client();
     try {
         $package = $client->get($name);
     } catch (\Exception $ex) {
         return $this->_helper->json(['success' => false, 'message' => "packagist package with name '{$name}' not found"]);
     }
     $versions = $package->getVersions();
     $version = null;
     foreach ($versions as $version => $infos) {
         // TODO(rafalgalka) check minimum-stability
         if ($version == 'dev-master') {
             continue;
         }
         $version = $versions[$version];
         break;
     }
     if (!$version instanceof Version) {
         $version = $versions['dev-master'];
     }
     if (!$version instanceof Version) {
         return $this->_helper->json(['success' => false, 'message' => "no version found for package '{$name}'"]);
     }
     try {
         $jobId = \Manager\Composer::installPackage($name . ':' . $version->getVersion());
         return $this->_helper->json(['success' => true, 'jobId' => $jobId]);
     } catch (Exception $e) {
         return $this->_helper->json(['success' => false, 'message' => $e->getMessage()]);
     }
 }
Example #2
0
 /**
  * @return Client
  */
 private function getPackagist()
 {
     if (!$this->packagist) {
         $options = $this->getOptions();
         $this->packagist = new Client();
         $this->packagist->setPackagistUrl($options['packagist-url']);
     }
     return $this->packagist;
 }
Example #3
0
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $packager = new Packager();
     $packager->setOutput($output);
     $packager->coerceWritable();
     $dialog = $this->getHelperSet()->get('dialog');
     /* @var $dialog DialogHelper */
     $name = $input->getArgument('name');
     do {
         if ($name === null) {
             // ask for input
             $name = $dialog->ask($output, 'Enter (partial) project name > ');
         } else {
             $output->writeln('Searching for <info>' . $name . '</info>...');
         }
         $packagist = new Client();
         $choices = array();
         foreach ($packagist->search($name) as $package) {
             /* @var $package Result */
             $label = str_pad($package->getName(), 39) . ' ';
             $label = str_replace($name, '<info>' . $name . '</info>', $label);
             $label .= $package->getDescription();
             $label .= ' (⤓' . $package->getDownloads() . ')';
             $choices[$package->getName()] = $label;
         }
         $name = $this->select($output, 'Select matching package', $choices, 'Start new search');
     } while ($name === null);
     $output->writeln('Selected <info>' . $name . '</info>, listing versions...');
     $package = $packagist->get($name);
     /* @var $package Package */
     $choices = array();
     foreach ($package->getVersions() as $version) {
         /* @var $version Version */
         $label = $version->getVersion();
         $bin = $version->getBin();
         if ($bin === null) {
             $label .= ' (<error>no executable bin</error>)';
         } else {
             $label .= ' (☑ executable bin)';
         }
         $choices[$version->getVersion()] = $label;
     }
     $version = $this->select($output, 'Select available version', $choices);
     $action = $this->select($output, 'Action', array('build' => 'Build project', 'install' => 'Install project system-wide'), 'Quit');
     if ($action === null) {
         return;
     }
     $pharer = $packager->getPharer($name, $version);
     if ($action === 'install') {
         $path = $packager->getSystemBin($pharer);
         $packager->install($pharer, $path);
     } else {
         $pharer->build();
     }
 }
Example #4
0
 /**
  * Get the aggregated information from packagist.
  *
  * Please pass an array of vendors or package names, or a single vendor or
  * package name to this method.
  *
  * @param string[]|string $vendors
  *
  * @return array
  */
 public function packages($vendors)
 {
     $packages = [];
     foreach ((array) $vendors as $vendor) {
         if (strpos($vendor, '/') !== false) {
             $packages[] = $this->packagist->get($vendor);
         } else {
             foreach ($this->packagist->all(compact('vendor')) as $result) {
                 $packages[] = $this->packagist->get($result);
             }
         }
     }
     return $packages;
 }
 public function indexAction()
 {
     $client = new Client();
     $results = $client->search('', ['type' => 'pimcore-plugin']);
     $packages = [];
     $downloaded = \Manager\Composer::getDownloaded();
     $sortable = ['name', 'description', 'downloads', 'favers'];
     $sort = [];
     if ($this->getParam('sort')) {
         $sort = json_decode($this->getParam('sort'), true);
         if (is_array($sort) && !empty($sort)) {
             $sort = $sort[0];
         }
     }
     if (!in_array($sort['property'], $sortable)) {
         $sort['property'] = 'downloads';
     }
     $direction = strtoupper($sort['direction']) === 'ASC' ? SORT_ASC : SORT_DESC;
     // for array_multisort
     $sorter = [];
     $filter = trim($this->getParam('filter'));
     /** @var Packagist\Api\Result\Result $result */
     foreach ($results as $result) {
         if (isset($downloaded[$result->getName()])) {
             continue;
         }
         $package = ['name' => $result->getName(), 'description' => $result->getDescription(), 'url' => $result->getUrl(), 'downloads' => $result->getDownloads(), 'favers' => $result->getFavers(), 'repository' => $result->getRepository()];
         if ($filter && strpos($package['name'], $filter) === false && strpos($package['description'], $filter) === false) {
             continue;
         }
         $packages[] = $package;
         $sorter[] = $package[$sort['property']];
     }
     array_multisort($sorter, $direction, $packages);
     $total = count($packages);
     $start = (int) $this->getParam('start');
     $limit = (int) $this->getParam('limit');
     if ($start > 0 || $start + $limit < $total) {
         $packages = array_slice($packages, $start, $limit);
     }
     $this->_helper->json(['data' => $packages, 'success' => true, 'total' => $total]);
 }
Example #6
0
 /**
  * Get latest package version.
  *
  * @param string $name
  *
  * @return string|void
  */
 public function getLatestVersion($name)
 {
     try {
         // Get all package versions.
         $versions = array_map(function ($version) {
             return $version->getVersion();
         }, $this->packagist->get($name)->getVersions());
         return Version::latest($versions);
     } catch (ClientErrorResponseException $e) {
         return;
     }
 }
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $client = new Client();
     $repository = $this->getContainer()->get('botrelli.package.doctrine.repository');
     $packages = $client->all();
     $packagesAdded = 0;
     $output->writeln("Number 5 is Analyzing Packagist packages... be patient or die, human.");
     $progress = new ProgressBar($output, count($packages));
     $progress->setRedrawFrequency(100);
     $progress->start();
     foreach ($packages as $package) {
         $localPackage = $repository->get($package);
         if (null === $localPackage) {
             $localPackage = Package::create($package);
             $repository->add($localPackage);
             $packagesAdded++;
         }
         $progress->advance();
     }
     $progress->finish();
     $output->writeln("Number 5 added {$packagesAdded} missing packages to the local Database.");
 }
Example #8
0
 public function packagistData(Request $request)
 {
     $package = $this->packagist->get($request->get('packagist_uri'));
     return response()->json($this->transformer->transform($package));
 }
Example #9
0
 protected function doSearch(Builder $builder, Packager $packager)
 {
     $oldname = null;
     do {
         $dialog = $builder->entry('Search (partial) project name', $oldname);
         $dialog->setTitle('Search project name');
         $name = $dialog->waitReturn();
         if ($name === false) {
             return;
         }
         $oldname = $name;
         $pulsate = $builder->pulsate('Searching for "' . $name . '"...');
         $pulsate->setNoCancel(true);
         $pulsate->run();
         $packagist = new Client();
         $choices = array();
         foreach ($packagist->search($name) as $package) {
             /* @var $package Result */
             $choices[$package->getName()] = array($package->getName(), mb_strimwidth($package->getDescription(), 0, 80, '…', 'utf-8'), $package->getDownloads());
         }
         $pulsate->close();
         if (!$choices) {
             $builder->warning('No package matching "' . $name . '" found!')->waitReturn();
             $name = false;
             continue;
         }
         $table = $builder->table($choices, array('Name', 'Description', 'Downloads'), 'Select matching package');
         $table->setTitle('Select matching package');
         $table->setCancelLabel('Back to Search');
         $table->setWidth(1000);
         $table->setHeight(600);
         $name = $table->waitReturn();
     } while (is_bool($name));
     $pulsate = $builder->pulsate('Selected <info>' . $name . '</info>, listing versions...');
     $pulsate->setNoCancel(true);
     $pulsate->run();
     $package = $packagist->get($name);
     /* @var $package Package */
     $choices = array();
     foreach ($package->getVersions() as $version) {
         /* @var $version Version */
         $time = new \DateTime($version->getTime());
         $time = $time->format('Y-m-d H:i:s');
         $bin = $version->getBin();
         if ($bin) {
             $bin = '☑ ' . array_shift($bin);
         } else {
             $bin = '☐ no executable bin';
         }
         $choices[$version->getVersion()] = array($version->getVersion(), $time, $bin);
     }
     $pulsate->close();
     if (!$choices) {
         $builder->warning('No versions for package "' . $name . '" found!')->waitReturn();
         return;
     }
     $dialog = $builder->table($choices, array('Version', 'Date', 'Binary'), 'Select available version');
     $dialog->setWidth(800);
     $dialog->setHeight(300);
     $version = $dialog->waitReturn();
     if (is_bool($version)) {
         return;
     }
     $pulsate = $builder->pulsate('Installing to temporary directory...')->run();
     $pharer = $packager->getPharer($name, $version);
     $pulsate->close();
     return $pharer;
 }
 /**
  * @return Client
  */
 private static function getPackagist()
 {
     if (true === empty(self::$packagist) || false === self::$packagist instanceof Client) {
         $packagist = new Client();
         $packagist->setPackagistUrl(ExtensionsManager::module()->packagistUrl);
         self::$packagist = $packagist;
     }
     return self::$packagist;
 }
 /**
  * {@inheritdoc}
  */
 public function getPackage($name)
 {
     return $this->client->get($name);
 }
Example #12
0
 public function all(array $filters = array())
 {
     $key = $this->getPrefixKey(__METHOD__, $filters);
     if ($this->getCache()->contains($key)) {
         $results = $this->getCache()->fetch($key);
     } else {
         $results = parent::all($filters);
         $this->getCache()->save($key, $results, $this->TTLAll);
     }
     return $results;
 }
 /**
  * @param string
  * @return \NetteAddons\Model\AddonEntity
  */
 public function getAddon($url)
 {
     if (!$this->isSupported($url)) {
         throw new \NetteAddons\InvalidArgumentException('Url "' . $url . '" not supported.');
     }
     $match = Strings::match($url, self::URL_REGEXP);
     $composerFullName = $match['vendor'] . '/' . $match['name'];
     try {
         $data = $this->apiClient->get($composerFullName);
         $addon = new AddonEntity($data->getName());
         $addon->setPerex($data->getDescription());
         $addon->setPackagist(UrlsHelper::normalizePackagistPackageUrl($url));
         foreach ($data->getVersions() as $versionData) {
             /** @var \Packagist\Api\Result\Package\Version $versionData */
             $version = new AddonVersionEntity($addon->getComposerFullName(), $versionData->getVersion());
             if ($versionData->getSource() !== NULL && empty($addon->getGithub())) {
                 /** @var \Packagist\Api\Result\Package\Source $source */
                 $source = $versionData->getSource();
                 if (UrlsHelper::isGithubRepositoryUrl($source->getUrl())) {
                     $normalizedGithubUrl = UrlsHelper::normalizeGithubRepositoryUrl($source->getUrl());
                     $addon->setGithub($normalizedGithubUrl);
                     $githubClient = $this->githubClientFactory->create($normalizedGithubUrl);
                     $addon->setStars($githubClient->getMetadata()->stargazers_count);
                 }
             }
             if ($versionData->getLicense() !== NULL) {
                 foreach ($versionData->getLicense() as $license) {
                     $version->addLicense($license);
                 }
             }
             if ($versionData->getRequire() !== NULL) {
                 foreach ($versionData->getRequire() as $dependencyName => $dependencyVersion) {
                     $dependency = new AddonDependencyEntity($addon->getComposerFullName(), $version->getVersion(), AddonDependencyEntity::TYPE_REQUIRE, $dependencyName, $dependencyVersion);
                     $version->addDependency($dependency);
                 }
             }
             if ($versionData->getRequireDev() !== NULL) {
                 foreach ($versionData->getRequireDev() as $dependencyName => $dependencyVersion) {
                     $dependency = new AddonDependencyEntity($addon->getComposerFullName(), $version->getVersion(), AddonDependencyEntity::TYPE_REQUIRE_DEV, $dependencyName, $dependencyVersion);
                     $version->addDependency($dependency);
                 }
             }
             if ($versionData->getConflict() !== NULL) {
                 foreach ($versionData->getConflict() as $dependencyName => $dependencyVersion) {
                     $dependency = new AddonDependencyEntity($addon->getComposerFullName(), $version->getVersion(), AddonDependencyEntity::TYPE_CONFLICT, $dependencyName, $dependencyVersion);
                     $version->addDependency($dependency);
                 }
             }
             if ($versionData->getReplace() !== NULL) {
                 foreach ($versionData->getReplace() as $dependencyName => $dependencyVersion) {
                     $dependency = new AddonDependencyEntity($addon->getComposerFullName(), $version->getVersion(), AddonDependencyEntity::TYPE_REPLACE, $dependencyName, $dependencyVersion);
                     $version->addDependency($dependency);
                 }
             }
             if ($versionData->getProvide() !== NULL) {
                 foreach ($versionData->getProvide() as $dependencyName => $dependencyVersion) {
                     $dependency = new AddonDependencyEntity($addon->getComposerFullName(), $version->getVersion(), AddonDependencyEntity::TYPE_PROVIDE, $dependencyName, $dependencyVersion);
                     $version->addDependency($dependency);
                 }
             }
             // @todo suggest
             $addon->addVersion($version);
         }
         return $addon;
     } catch (\Guzzle\Http\Exception\ClientErrorResponseException $e) {
         if ($e->getResponse()->getStatusCode() === 404) {
             throw new \NetteAddons\Model\Importers\AddonVersionImporters\AddonNotFoundException('Addon "' . $composerFullName . '" not found', $composerFullName, $e);
         }
         throw $e;
     }
 }
Example #14
0
 /**
  * Get the versions.
  *
  * @param array $packages
  *
  * @return array
  */
 private function getVersions(array $packages)
 {
     $client = new Client();
     $versions = [];
     foreach ($packages as $name => $version) {
         try {
             $package = $client->get($name);
             $current = $this->normalize($version);
             $latest = $this->normalize($this->getLatest($package->getVersions()));
             if (version_compare($version, $latest, '<') && $current !== $latest) {
                 $latest = $this->diff($current, $latest);
                 array_push($versions, [$name, $current, '→', $latest]);
             }
         } catch (ClientErrorResponseException $e) {
             continue;
         }
     }
     return $versions;
 }