PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB` * @author Thomas Müller * * @copyright Copyright (c) 2018, ownCloud GmbH * @license AGPL-3.0 * * This code is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License, version 3, * as published by the Free Software Foundation. * * 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License, version 3, * along with this program. If not, see * */ namespace OC\Core\Command; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; class Base extends Command { public const OUTPUT_FORMAT_PLAIN = 'plain'; public const OUTPUT_FORMAT_JSON = 'json'; public const OUTPUT_FORMAT_JSON_PRETTY = 'json_pretty'; public const DEFAULT_OUTPUT_PREFIX = ' - '; protected $defaultOutputFormat = self::OUTPUT_FORMAT_PLAIN; /** @var boolean */ private $php_pcntl_signal = false; /** @var boolean */ private $interrupted = false; protected function configure() { $this ->addOption( 'output', null, InputOption::VALUE_OPTIONAL, 'The output format to use (plain, json or json_pretty).', $this->defaultOutputFormat ) ; } /** * @param InputInterface $input * @param OutputInterface $output * @param array $items * @param string $prefix */ protected function writeArrayInOutputFormat(InputInterface $input, OutputInterface $output, $items, $prefix = self::DEFAULT_OUTPUT_PREFIX, $showIntKeys = false) { switch ($input->getOption('output')) { case self::OUTPUT_FORMAT_JSON: $output->writeln(\json_encode($items)); break; case self::OUTPUT_FORMAT_JSON_PRETTY: $output->writeln(\json_encode($items, JSON_PRETTY_PRINT)); break; default: foreach ($items as $key => $item) { if (\is_array($item)) { $output->writeln($prefix . $key . ':'); $this->writeArrayInOutputFormat($input, $output, $item, ' ' . $prefix); continue; } if ($showIntKeys || !\is_int($key)) { $value = $this->valueToString($item); if ($value !== null) { $output->writeln($prefix . $key . ': ' . $value); } else { $output->writeln($prefix . $key); } } else { $output->writeln($prefix . $this->valueToString($item)); } } break; } } /** * @param InputInterface $input * @param OutputInterface $output * @param mixed $item */ protected function writeMixedInOutputFormat(InputInterface $input, OutputInterface $output, $item) { if (\is_array($item)) { $this->writeArrayInOutputFormat($input, $output, $item, ''); return; } switch ($input->getOption('output')) { case self::OUTPUT_FORMAT_JSON: $output->writeln(\json_encode($item)); break; case self::OUTPUT_FORMAT_JSON_PRETTY: $output->writeln(\json_encode($item, JSON_PRETTY_PRINT)); break; default: $output->writeln($this->valueToString($item, false)); break; } } protected function valueToString($value, $returnNull = true) { if ($value === false) { return 'false'; } elseif ($value === true) { return 'true'; } elseif ($value === null) { return ($returnNull) ? null : 'null'; } else { return $value; } } /** * @return bool */ protected function hasBeenInterrupted() { // return always false if pcntl_signal functions are not accessible if ($this->php_pcntl_signal) { \pcntl_signal_dispatch(); return $this->interrupted; } else { return false; } } /** * Changes the status of the command to "interrupted" if ctrl-c has been pressed * * Gives a chance to the command to properly terminate what it's doing */ protected function cancelOperation() { $this->interrupted = true; } public function run(InputInterface $input, OutputInterface $output) { // check if the php pcntl_signal functions are accessible $this->php_pcntl_signal = \function_exists('pcntl_signal'); if ($this->php_pcntl_signal) { // Collect interrupts and notify the running command \pcntl_signal(SIGTERM, [$this, 'cancelOperation']); \pcntl_signal(SIGINT, [$this, 'cancelOperation']); } return parent::run($input, $output); } }