3 namespace Friendica\Core;
6 * Description of Console
8 * @author Hypolite Petovan <mrpetovan@gmail.com>
10 class Console extends \Asika\SimpleConsole\Console
12 // Disables the default help handling
13 protected $helpOptions = [];
14 protected $customHelpOptions = ['h', 'help', '?'];
16 protected $subConsoles = [
17 'config' => __NAMESPACE__ . '\Console\Config',
18 'createdoxygen' => __NAMESPACE__ . '\Console\CreateDoxygen',
19 'docbloxerrorchecker' => __NAMESPACE__ . '\Console\DocBloxErrorChecker',
20 'dbstructure' => __NAMESPACE__ . '\Console\DatabaseStructure',
21 'extract' => __NAMESPACE__ . '\Console\Extract',
22 'globalcommunityblock' => __NAMESPACE__ . '\Console\GlobalCommunityBlock',
23 'globalcommunitysilence' => __NAMESPACE__ . '\Console\GlobalCommunitySilence',
24 'maintenance' => __NAMESPACE__ . '\Console\Maintenance',
25 'php2po' => __NAMESPACE__ . '\Console\PhpToPo',
26 'po2php' => __NAMESPACE__ . '\Console\PoToPhp',
27 'typo' => __NAMESPACE__ . '\Console\Typo',
30 protected function getHelp()
33 Usage: bin/console [--version] [-h|--help|-?] <command> [<args>] [-v]
36 config Edit site config
37 createdoxygen Generate Doxygen headers
38 dbstructure Do database updates
39 docbloxerrorchecker Check the file tree for DocBlox errors
40 extract Generate translation string file for the Friendica project (deprecated)
41 globalcommunityblock Block remote profile from interacting with this node
42 globalcommunitysilence Silence remote profile from global community page
43 help Show help about a command, e.g (bin/console help config)
44 maintenance Set maintenance mode for this node
45 php2po Generate a messages.po file from a strings.php file
46 po2php Generate a strings.php file from a messages.po file
47 typo Checks for parse errors in Friendica files
50 -h|--help|-? Show help information
51 -v Show more debug information.
56 protected function doExecute()
58 if ($this->getOption('v')) {
59 $this->out('Executable: ' . $this->executable);
60 $this->out('Arguments: ' . var_export($this->args, true));
61 $this->out('Options: ' . var_export($this->options, true));
68 if ($this->getOption('version')) {
69 $this->out('Friendica Console version ' . FRIENDICA_VERSION);
72 } elseif ((count($this->options) === 0 || $this->getOption($this->customHelpOptions) === true || $this->getOption($this->customHelpOptions) === 1) && count($this->args) === 0
75 } elseif (count($this->args) >= 2 && $this->getArgument(0) == 'help') {
76 $command = $this->getArgument(1);
78 array_shift($this->args);
79 array_shift($this->args);
80 } elseif (count($this->args) >= 1) {
81 $command = $this->getArgument(0);
82 array_shift($this->args);
85 if (is_null($command)) {
86 $this->out($this->getHelp());
90 $console = $this->getSubConsole($command);
93 $console->setOption($this->customHelpOptions, true);
96 return $console->execute();
99 private function getSubConsole($command)
101 if ($this->getOption('v')) {
102 $this->out('Command: ' . $command);
105 if (!isset($this->subConsoles[$command])) {
106 throw new \Asika\SimpleConsole\CommandArgsException('Command ' . $command . ' doesn\'t exist');
109 $subargs = $this->args;
110 array_unshift($subargs, $this->executable);
112 $className = $this->subConsoles[$command];
114 $subconsole = new $className($subargs);
116 foreach ($this->options as $name => $value) {
117 $subconsole->setOption($name, $value);