%PDF- %PDF-
Direktori : /var/www/projetos/suporte.iigd.com.br.old/src/Console/ |
Current File : //var/www/projetos/suporte.iigd.com.br.old/src/Console/AbstractCommand.php |
<?php /** * --------------------------------------------------------------------- * * GLPI - Gestionnaire Libre de Parc Informatique * * http://glpi-project.org * * @copyright 2015-2022 Teclib' and contributors. * @copyright 2003-2014 by the INDEPNET Development Team. * @licence https://www.gnu.org/licenses/gpl-3.0.html * * --------------------------------------------------------------------- * * LICENSE * * This file is part of GLPI. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. * * --------------------------------------------------------------------- */ namespace Glpi\Console; use DBmysql; use Glpi\Console\Command\GlpiCommandInterface; use Glpi\System\RequirementsManager; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Exception\RuntimeException; use Symfony\Component\Console\Helper\ProgressBar; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Question\ConfirmationQuestion; abstract class AbstractCommand extends Command implements GlpiCommandInterface { /** * @var DBmysql */ protected $db; /** * @var InputInterface */ protected $input; /** * @var OutputInterface */ protected $output; /** * Flag to indicate if command requires a DB connection. * * @var boolean */ protected $requires_db = true; /** * Flag to indicate if command requires an up-to-date DB. * * @var boolean */ protected $requires_db_up_to_date = true; protected function initialize(InputInterface $input, OutputInterface $output) { $this->input = $input; $this->output = $output; $this->initDbConnection(); } /** * Check database connection. * * @throws RuntimeException * * @return void */ protected function initDbConnection() { global $DB; if ($this->requires_db && (!($DB instanceof DBmysql) || !$DB->connected)) { throw new \Symfony\Component\Console\Exception\RuntimeException(__('Unable to connect to database.')); } $this->db = $DB; } /** * Correctly write output messages when a progress bar is displayed. * * @param string|array $messages * @param ProgressBar $progress_bar * @param integer $verbosity * * @return void */ protected function writelnOutputWithProgressBar( $messages, ProgressBar $progress_bar, $verbosity = OutputInterface::VERBOSITY_NORMAL ) { if ($verbosity > $this->output->getVerbosity()) { return; // Do nothing if message will not be output due to its too high verbosity } $progress_bar->clear(); $this->output->writeln( $messages, $verbosity ); $progress_bar->display(); } /** * Output session buffered messages. * * @param array $levels_to_output * * @return void */ protected function outputSessionBufferedMessages($levels_to_output = [INFO, WARNING, ERROR]) { if (empty($_SESSION['MESSAGE_AFTER_REDIRECT'])) { return; } $msg_levels = [ INFO => [ 'tag' => 'info', 'verbosity' => OutputInterface::VERBOSITY_VERBOSE, ], WARNING => [ 'tag' => 'comment', 'verbosity' => OutputInterface::VERBOSITY_NORMAL, ], ERROR => [ 'tag' => 'error', 'verbosity' => OutputInterface::VERBOSITY_QUIET, ], ]; foreach ($msg_levels as $key => $options) { if (!in_array($key, $levels_to_output)) { continue; } if (!array_key_exists($key, $_SESSION['MESSAGE_AFTER_REDIRECT'])) { continue; } foreach ($_SESSION['MESSAGE_AFTER_REDIRECT'][$key] as $message) { $message = strip_tags(preg_replace('/<br\s*\/?>/', ' ', $message)); // Output raw text $this->output->writeln( "<{$options['tag']}>{$message}</{$options['tag']}>", $options['verbosity'] ); } } } /** * Output a warning in an optionnal requirement is missing. * * @return void */ protected function outputWarningOnMissingOptionnalRequirements() { if ($this->output->isQuiet()) { return; } $db = property_exists($this, 'db') ? $this->db : null; $requirements_manager = new RequirementsManager(); $core_requirements = $requirements_manager->getCoreRequirementList( $db instanceof DBmysql && $db->connected ? $db : null ); if ($core_requirements->hasMissingOptionalRequirements()) { $message = __('Some optional system requirements are missing.') . ' ' . __('Run "php bin/console glpi:system:check_requirements" for more details.'); $this->output->writeln( '<comment>' . $message . '</comment>', OutputInterface::VERBOSITY_NORMAL ); } } public function mustCheckMandatoryRequirements(): bool { return true; } public function requiresUpToDateDb(): bool { return $this->requires_db && $this->requires_db_up_to_date; } /** * Ask for user confirmation before continuing command execution. * * @param bool $default_to_yes * * @return void */ protected function askForConfirmation(bool $default_to_yes = true): void { $abort = false; if (!$this->input->getOption('no-interaction')) { $question_helper = $this->getHelper('question'); $run = $question_helper->ask( $this->input, $this->output, new ConfirmationQuestion( __('Do you want to continue?') . ($default_to_yes ? ' [Yes/no]' : ' [yes/No]'), $default_to_yes ) ); $abort = !$run; } else { $abort = !$default_to_yes; } if ($abort) { throw new \Glpi\Console\Exception\EarlyExitException( '<comment>' . __('Aborted.') . '</comment>', 0 // Success code ); } } }