diff --git a/src/Core/Console.php b/src/Core/Console.php index ebaa33f950..6f4ec64a08 100644 --- a/src/Core/Console.php +++ b/src/Core/Console.php @@ -112,6 +112,8 @@ HELP; break; case 'po2php': $subconsole = new Console\PoToPhp($subargs); break; + case 'typo': $subconsole = new Console\Typo($subargs); + break; default: throw new \Asika\SimpleConsole\CommandArgsException('Command ' . $command . ' doesn\'t exist'); } diff --git a/src/Core/Console/Typo.php b/src/Core/Console/Typo.php new file mode 100644 index 0000000000..4213fc8325 --- /dev/null +++ b/src/Core/Console/Typo.php @@ -0,0 +1,119 @@ + + */ +class Typo extends \Asika\SimpleConsole\Console +{ + protected $helpOptions = ['h', 'help', '?']; + + protected function getHelp() + { + $help = <<getOption('v')) { + $this->out('Class: ' . __CLASS__); + $this->out('Arguments: ' . var_export($this->args, true)); + $this->out('Options: ' . var_export($this->options, true)); + } + + if (count($this->args) > 0) { + throw new \Asika\SimpleConsole\CommandArgsException('Too many arguments'); + } + + $a = get_app(); + + $php_path = $a->getConfigValue('config', 'php_path', 'php'); + + if ($this->getOption('v')) { + $this->out('Directory: src'); + } + + $Iterator = new \RecursiveDirectoryIterator('src'); + + foreach (new \RecursiveIteratorIterator($Iterator) as $file) { + if (substr($file, -4) === '.php') { + $this->checkFile($php_path, $file); + } + } + + if ($this->getOption('v')) { + $this->out('Directory: mod'); + } + + $files = glob('mod/*.php'); + $this->checkFiles($php_path, $files); + + if ($this->getOption('v')) { + $this->out('Directory: include'); + } + + $files = glob('include/*.php'); + $this->checkFiles($php_path, $files); + + if ($this->getOption('v')) { + $this->out('Directory: addon'); + } + + $dirs = glob('addon/*'); + foreach ($dirs as $dir) { + $addon = basename($dir); + $files = glob($dir . '/' . $addon . '.php'); + $this->checkFiles($php_path, $files); + } + + if ($this->getOption('v')) { + $this->out('String files'); + } + + $this->checkFile($php_path, 'util/strings.php'); + + $files = glob('view/lang/*/strings.php'); + $this->checkFiles($php_path, $files); + + $this->out('No errors.'); + + return 0; + } + + private function checkFiles($php_path, array $files) + { + foreach ($files as $file) { + $this->checkFile($php_path, $file); + } + } + + private function checkFile($php_path, $file) + { + if ($this->getOption('v')) { + $this->out('Checking ' . $file); + } + + $output = []; + $ret = 0; + exec("$php_path -l $file", $output, $ret); + if ($ret !== 0) { + throw new \RuntimeException('Parse error found in ' . $file . ', scan stopped.'); + } + } +}