Example #1
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();
     }
 }
 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 #3
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;
 }
Example #4
0
 public function search($query)
 {
     $key = $this->getPrefixKey(__METHOD__, $query);
     if ($this->getCache()->contains($key)) {
         $results = $this->getCache()->fetch($key);
     } else {
         $results = parent::search($query);
         $this->getCache()->save($key, $results, $this->TTLSearch);
     }
     return $results;
 }