108 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
| <?php
 | |
| 
 | |
| namespace Grav\Plugin\Console;
 | |
| 
 | |
| use Grav\Console\ConsoleCommand;
 | |
| use Grav\Plugin\Problems\Base\Problem;
 | |
| use Grav\Plugin\Problems\Base\ProblemChecker;
 | |
| use Symfony\Component\Console\Helper\Table;
 | |
| use Symfony\Component\Console\Helper\TableCell;
 | |
| use Symfony\Component\Console\Helper\TableSeparator;
 | |
| use Symfony\Component\Console\Style\SymfonyStyle;
 | |
| 
 | |
| /**
 | |
|  * Class ProblemsCommand
 | |
|  *
 | |
|  * @package Grav\Plugin\Console
 | |
|  */
 | |
| class CheckCommand extends ConsoleCommand
 | |
| {
 | |
|     /**
 | |
|      * @return void
 | |
|      */
 | |
|     protected function configure(): void
 | |
|     {
 | |
|         $this
 | |
|             ->setName('check')
 | |
|             ->setDescription('Check Problems')
 | |
|             ->setHelp('The <info>problems command</info> allows you display any potential problems with your Grav setup')
 | |
|         ;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @return int
 | |
|      */
 | |
|     protected function serve(): int
 | |
|     {
 | |
|         $io = new SymfonyStyle($this->input, $this->output);
 | |
| 
 | |
|         $plugin_dir = realpath(dirname(__DIR__));
 | |
|         $problems_dir = $plugin_dir . '/classes/Problems';
 | |
| 
 | |
|         require $plugin_dir . '/vendor/autoload.php';
 | |
| 
 | |
|         $checker = new ProblemChecker();
 | |
|         $checker->check($problems_dir);
 | |
| 
 | |
|         $problems = $checker->getProblems();
 | |
| 
 | |
|         $io->title('Grav Problems');
 | |
| 
 | |
|         $table = new Table($this->output);
 | |
|         $table->setStyle('default');
 | |
|         $headers = ['ID', 'Status', 'Level', 'Message'];
 | |
|         $rows = [];
 | |
| 
 | |
|         /** @var Problem $problem */
 | |
|         foreach ($problems as $problem) {
 | |
|             $rows[] = new TableSeparator();
 | |
| 
 | |
|             $rows[] = [
 | |
|                 $problem->getStatus() ? $problem->getId() : '<red>' . $problem->getId() . '</red>' ,
 | |
|                 $problem->getStatus() ? '<green>success</green>' : '<red>error</red>',
 | |
|                 $problem->getLevel() === 'critical' ? '<red>' . $problem->getLevel() . '</red>' : '<yellow>' .$problem->getLevel() . '</yellow>',
 | |
|                 strip_tags($problem->getMsg()),
 | |
|             ];
 | |
| 
 | |
|             $details = $problem->getDetails();
 | |
| 
 | |
|             if (is_array($details)) {
 | |
| 
 | |
|                 $errors_row = [];
 | |
|                 $success_row = [];
 | |
| 
 | |
|                 if (isset($details['errors'])) {
 | |
|                     foreach ($details['errors'] as $key => $value) {
 | |
|                         $errors_row[] = "<red>✗</red> <yellow>{$key} → {$value}</yellow>";
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 if (isset($details['success'])) {
 | |
|                     foreach ($details['success'] as $key => $value) {
 | |
|                         $success_row[] = "<green>✔</green> {$key} → {$value}";
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 foreach($errors_row as $e_row) {
 | |
|                     $rows[] = ['', new TableCell($e_row, array('colspan' => 3)), ];
 | |
|                 }
 | |
| 
 | |
|                 foreach($success_row as $e_row) {
 | |
|                     $rows[] = ['', new TableCell($e_row, array('colspan' => 3)), ];
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         if (!empty($rows)) {
 | |
|             $table->setHeaders($headers);
 | |
|             $table->setRows($rows);
 | |
|             $table->render();
 | |
|         } else {
 | |
|             $io->text('did not find anything to check...');
 | |
|         }
 | |
| 
 | |
|         return 0;
 | |
|     }
 | |
| }
 | |
| 
 |