mirror of
https://github.com/getgrav/grav.git
synced 2026-07-05 23:28:32 +02:00
Improved UI for CLI GPM Index to use tables
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
* Important vendor updates to provide PHP 7.1 beta support!
|
||||
* Added a `Util::arrayFlatten()` static function
|
||||
* Added support for 'external_url' page header to enable easier external URL based menu items
|
||||
* Improved the UI for CLI GPM Index view to use a table
|
||||
1. [](#bugfix)
|
||||
* Fix for lightbox media function throwing error [#981](https://github.com/getgrav/grav/issues/981)
|
||||
|
||||
|
||||
@@ -9,7 +9,9 @@
|
||||
namespace Grav\Console\Gpm;
|
||||
|
||||
use Grav\Common\GPM\GPM;
|
||||
use Grav\Common\Utils;
|
||||
use Grav\Console\ConsoleCommand;
|
||||
use League\CLImate\CLImate;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
|
||||
class IndexCommand extends ConsoleCommand
|
||||
@@ -100,33 +102,34 @@ class IndexCommand extends ConsoleCommand
|
||||
protected function serve()
|
||||
{
|
||||
$this->options = $this->input->getOptions();
|
||||
|
||||
$this->gpm = new GPM($this->options['force']);
|
||||
|
||||
$this->displayGPMRelease();
|
||||
|
||||
$this->data = $this->gpm->getRepository();
|
||||
|
||||
$data = $this->filter($this->data);
|
||||
|
||||
foreach ($data as $type => $packages) {
|
||||
$this->output->writeln("<green>" . ucfirst($type) . "</green> [ " . count($packages) . " ]");
|
||||
$climate = new CLImate;
|
||||
$climate->extend('Grav\Console\TerminalObjects\Table');
|
||||
|
||||
foreach ($data as $type => $packages) {
|
||||
$this->output->writeln("<green>" . strtoupper($type) . "</green> [ " . count($packages) . " ]");
|
||||
|
||||
$table = [];
|
||||
$index = 0;
|
||||
$packages = $this->sort($packages);
|
||||
|
||||
foreach ($packages as $slug => $package) {
|
||||
$this->output->writeln(
|
||||
// index
|
||||
str_pad($index++ + 1, 2, '0', STR_PAD_LEFT) . ". " .
|
||||
// package name
|
||||
"<cyan>" . str_pad($package->name, 20) . "</cyan> " .
|
||||
// slug
|
||||
"[" . str_pad($slug, 20, ' ', STR_PAD_BOTH) . "] " .
|
||||
// version details
|
||||
$this->versionDetails($package)
|
||||
);
|
||||
$row = [
|
||||
'Count' => $index++ + 1,
|
||||
'Name' => "<cyan>" . Utils::truncate($package->name, 20, false, ' ', '...') . "</cyan> ",
|
||||
'Slug' => $slug,
|
||||
'Version'=> $this->version($package),
|
||||
'Installed' => $this->installed($package)
|
||||
];
|
||||
$table[] = $row;
|
||||
}
|
||||
|
||||
$climate->table($table);
|
||||
$this->output->writeln('');
|
||||
}
|
||||
|
||||
@@ -143,7 +146,7 @@ class IndexCommand extends ConsoleCommand
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function versionDetails($package)
|
||||
private function version($package)
|
||||
{
|
||||
$list = $this->gpm->{'getUpdatable' . ucfirst($package->package_type)}();
|
||||
$package = isset($list[$package->slug]) ? $list[$package->slug] : $package;
|
||||
@@ -154,21 +157,31 @@ class IndexCommand extends ConsoleCommand
|
||||
|
||||
if (!$installed || !$updatable) {
|
||||
$version = $installed ? $local->version : $package->version;
|
||||
$installed = !$installed ? ' (<magenta>not installed</magenta>)' : ' (<cyan>installed</cyan>)';
|
||||
|
||||
return str_pad(" [v<green>" . $version . "</green>]", 35) . $installed;
|
||||
return "v<green>" . $version . "</green>";
|
||||
}
|
||||
|
||||
if ($updatable) {
|
||||
$installed = !$installed ? ' (<magenta>not installed</magenta>)' : ' (<cyan>installed</cyan>)';
|
||||
|
||||
return str_pad(" [v<red>" . $package->version . "</red> <cyan>➜</cyan> v<green>" . $package->available . "</green>]",
|
||||
61) . $installed;
|
||||
return "v<red>" . $package->version . "</red> <cyan>-></cyan> v<green>" . $package->available . "</green>";
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $package
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function installed($package)
|
||||
{
|
||||
$package = isset($list[$package->slug]) ? $list[$package->slug] : $package;
|
||||
$type = ucfirst(preg_replace("/s$/", '', $package->package_type));
|
||||
$updatable = $this->gpm->{'is' . $type . 'Updatable'}($package->slug);
|
||||
$installed = $this->gpm->{'is' . $type . 'Installed'}($package->slug);
|
||||
|
||||
return !$installed ? '<magenta>not installed</magenta>' : '<cyan>installed</cyan>';
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $data
|
||||
*
|
||||
|
||||
29
system/src/Grav/Console/TerminalObjects/Table.php
Normal file
29
system/src/Grav/Console/TerminalObjects/Table.php
Normal file
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Grav.Console
|
||||
*
|
||||
* @copyright Copyright (C) 2014 - 2016 RocketTheme, LLC. All rights reserved.
|
||||
* @license MIT License; see LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Grav\Console\TerminalObjects;
|
||||
|
||||
class Table extends \League\CLImate\TerminalObject\Basic\Table
|
||||
{
|
||||
public function result()
|
||||
{
|
||||
$this->column_widths = $this->getColumnWidths();
|
||||
$this->table_width = $this->getWidth();
|
||||
$this->border = $this->getBorder();
|
||||
|
||||
$this->buildHeaderRow();
|
||||
|
||||
foreach ($this->data as $key => $columns) {
|
||||
$this->rows[] = $this->buildRow($columns);
|
||||
}
|
||||
|
||||
$this->rows[] = $this->border;
|
||||
|
||||
return $this->rows;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user