setName('info') ->addOption( 'force', 'f', InputOption::VALUE_NONE, 'Force fetching the new data remotely' ) ->addOption( 'all-yes', 'y', InputOption::VALUE_NONE, 'Assumes yes (or best approach) instead of prompting' ) ->addArgument( 'package', InputArgument::REQUIRED, 'The package of which more informations are desired. Use the "index" command for a list of packages' ) ->setDescription('Shows more informations about a package') ->setHelp('The info shows more informations about a package'); } /** * @return int|null|void */ protected function serve() { $this->gpm = new GPM($this->input->getOption('force')); $this->all_yes = $this->input->getOption('all-yes'); $this->displayGPMRelease(); $foundPackage = $this->gpm->findPackage($this->input->getArgument('package')); if (!$foundPackage) { $this->output->writeln("The package '{$this->input->getArgument('package')}' was not found in the Grav repository."); $this->output->writeln(''); $this->output->writeln('You can list all the available packages by typing:'); $this->output->writeln(" {$this->argv} index"); $this->output->writeln(''); exit; } $this->output->writeln("Found package '{$this->input->getArgument('package')}' under the '" . ucfirst($foundPackage->package_type) . "' section"); $this->output->writeln(''); $this->output->writeln("{$foundPackage->name} [{$foundPackage->slug}]"); $this->output->writeln(str_repeat('-', \strlen($foundPackage->name) + \strlen($foundPackage->slug) + 3)); $this->output->writeln('' . strip_tags($foundPackage->description_plain) . ''); $this->output->writeln(''); $packageURL = ''; if (isset($foundPackage->author['url'])) { $packageURL = '<' . $foundPackage->author['url'] . '>'; } $this->output->writeln('' . str_pad('Author', 12) . ': ' . $foundPackage->author['name'] . ' <' . $foundPackage->author['email'] . '> ' . $packageURL); foreach ([ 'version', 'keywords', 'date', 'homepage', 'demo', 'docs', 'guide', 'repository', 'bugs', 'zipball_url', 'license' ] as $info) { if (isset($foundPackage->{$info})) { $name = ucfirst($info); $data = $foundPackage->{$info}; if ($info === 'zipball_url') { $name = 'Download'; } if ($info === 'date') { $name = 'Last Update'; $data = date('D, j M Y, H:i:s, P ', strtotime($data)); } $name = str_pad($name, 12); $this->output->writeln("{$name}: {$data}"); } } $type = rtrim($foundPackage->package_type, 's'); $updatable = $this->gpm->{'is' . $type . 'Updatable'}($foundPackage->slug); $installed = $this->gpm->{'is' . $type . 'Installed'}($foundPackage->slug); // display current version if installed and different if ($installed && $updatable) { $local = $this->gpm->{'getInstalled'. $type}($foundPackage->slug); $this->output->writeln(''); $this->output->writeln("Currently installed version: {$local->version}"); $this->output->writeln(''); } // display changelog information $questionHelper = $this->getHelper('question'); $question = new ConfirmationQuestion('Would you like to read the changelog? [y|N] ', false); $answer = $this->all_yes ? true : $questionHelper->ask($this->input, $this->output, $question); if ($answer) { $changelog = $foundPackage->changelog; $this->output->writeln(''); foreach ($changelog as $version => $log) { $title = $version . ' [' . $log['date'] . ']'; $content = preg_replace_callback('/\d\.\s\[\]\(#(.*)\)/', function ($match) { return "\n" . ucfirst($match[1]) . ':'; }, $log['content']); $this->output->writeln("{$title}"); $this->output->writeln(str_repeat('-', \strlen($title))); $this->output->writeln($content); $this->output->writeln(''); $question = new ConfirmationQuestion('Press [ENTER] to continue or [q] to quit ', true); $answer = $this->all_yes ? false : $questionHelper->ask($this->input, $this->output, $question); if (!$answer) { break; } $this->output->writeln(''); } } $this->output->writeln(''); if ($installed && $updatable) { $this->output->writeln('You can update this package by typing:'); $this->output->writeln(" {$this->argv} update {$foundPackage->slug}"); } else { $this->output->writeln("You can install this package by typing:"); $this->output->writeln(" {$this->argv} install {$foundPackage->slug}"); } $this->output->writeln(''); } }