Server IP : 185.86.78.101 / Your IP : 216.73.216.124 Web Server : Apache System : Linux 675867-vds-valikoshka1996.gmhost.pp.ua 5.4.0-150-generic #167-Ubuntu SMP Mon May 15 17:35:05 UTC 2023 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /www/wwwroot/mifepriston.org/vendor/yiisoft/yii2/console/ |
Upload File : |
<?php /** * @link https://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * @license https://www.yiiframework.com/license/ */ namespace yii\console; use yii\console\controllers\HelpController; /** * UnknownCommandException represents an exception caused by incorrect usage of a console command. * * @author Carsten Brandt <mail@cebe.cc> * @since 2.0.11 */ class UnknownCommandException extends Exception { /** * @var string the name of the command that could not be recognized. */ public $command; /** * @var Application */ protected $application; /** * Construct the exception. * * @param string $route the route of the command that could not be found. * @param Application $application the console application instance involved. * @param int $code the Exception code. * @param \Throwable|null $previous the previous exception used for the exception chaining. */ public function __construct($route, $application, $code = 0, $previous = null) { $this->command = $route; $this->application = $application; parent::__construct("Unknown command \"$route\".", $code, $previous); } /** * @return string the user-friendly name of this exception */ public function getName() { return 'Unknown command'; } /** * Suggest alternative commands for [[$command]] based on string similarity. * * Alternatives are searched using the following steps: * * - suggest alternatives that begin with `$command` * - find typos by calculating the Levenshtein distance between the unknown command and all * available commands. The Levenshtein distance is defined as the minimal number of * characters you have to replace, insert or delete to transform str1 into str2. * * @see https://www.php.net/manual/en/function.levenshtein.php * @return array a list of suggested alternatives sorted by similarity. */ public function getSuggestedAlternatives() { $help = $this->application->createController('help'); if ($help === false || $this->command === '') { return []; } /** @var $helpController HelpController */ list($helpController, $actionID) = $help; $availableActions = []; foreach ($helpController->getCommands() as $command) { $result = $this->application->createController($command); /** @var $controller Controller */ list($controller, $actionID) = $result; if ($controller->createAction($controller->defaultAction) !== null) { // add the command itself (default action) $availableActions[] = $command; } // add all actions of this controller $actions = $helpController->getActions($controller); $prefix = $controller->getUniqueId(); foreach ($actions as $action) { $availableActions[] = $prefix . '/' . $action; } } return $this->filterBySimilarity($availableActions, $this->command); } /** * Find suggest alternative commands based on string similarity. * * Alternatives are searched using the following steps: * * - suggest alternatives that begin with `$command` * - find typos by calculating the Levenshtein distance between the unknown command and all * available commands. The Levenshtein distance is defined as the minimal number of * characters you have to replace, insert or delete to transform str1 into str2. * * @see https://www.php.net/manual/en/function.levenshtein.php * @param array $actions available command names. * @param string $command the command to compare to. * @return array a list of suggested alternatives sorted by similarity. */ private function filterBySimilarity($actions, $command) { $alternatives = []; // suggest alternatives that begin with $command first foreach ($actions as $action) { if (strpos($action, $command) === 0) { $alternatives[] = $action; } } // calculate the Levenshtein distance between the unknown command and all available commands. $distances = array_map(function ($action) use ($command) { $action = strlen($action) > 255 ? substr($action, 0, 255) : $action; $command = strlen($command) > 255 ? substr($command, 0, 255) : $command; return levenshtein($action, $command); }, array_combine($actions, $actions)); // we assume a typo if the levensthein distance is no more than 3, i.e. 3 replacements needed $relevantTypos = array_filter($distances, function ($distance) { return $distance <= 3; }); asort($relevantTypos); $alternatives = array_merge($alternatives, array_flip($relevantTypos)); return array_unique($alternatives); } }