]> git.mxchange.org Git - friendica.git/blob - src/Core/Console.php
6201499371f699cdbd0a30ac4725807b80a4e975
[friendica.git] / src / Core / Console.php
1 <?php\r
2 \r
3 namespace Friendica\Core;\r
4 \r
5 /**\r
6  * Description of Console\r
7  *\r
8  * @author Hypolite Petovan <mrpetovan@gmail.com>\r
9  */\r
10 class Console extends \Asika\SimpleConsole\Console\r
11 {\r
12         // Disables the default help handling\r
13         protected $helpOptions = [];\r
14         protected $customHelpOptions = ['h', 'help', '?'];\r
15 \r
16         protected function getHelp()\r
17         {\r
18 \r
19 \r
20                 $help = <<<HELP\r
21 Usage: bin/console [--version] [-h|--help|-?] <command> [<args>] [-v]\r
22 \r
23 Commands:\r
24         config                 Edit site config\r
25         createdoxygen          Generate Doxygen headers\r
26         docbloxerrorchecker    Check the file tree for DocBlox errors\r
27         extract                Generate translation string file for the Friendica project (deprecated)\r
28         globalcommunityblock   Block remote profile from interacting with this node\r
29         globalcommunitysilence Silence remote profile from global community page\r
30         help                   Show help about a command, e.g (bin/console help config)\r
31         maintenance            Set maintenance mode for this node\r
32         php2po                 Generate a messages.po file from a strings.php file\r
33         po2php                 Generate a strings.php file from a messages.po file\r
34         typo                   Checks for parse errors in Friendica files\r
35 \r
36 Options:\r
37         -h|--help|-? Show help information\r
38         -v           Show more debug information.\r
39 HELP;\r
40                 return $help;\r
41         }\r
42 \r
43         protected function doExecute()\r
44         {\r
45                 if ($this->getOption('v')) {\r
46                         $this->out('Executable: ' . $this->executable);\r
47                         $this->out('Arguments: ' . var_export($this->args, true));\r
48                         $this->out('Options: ' . var_export($this->options, true));\r
49                 }\r
50 \r
51                 $showHelp = false;\r
52                 $subHelp = false;\r
53                 $command = null;\r
54 \r
55                 if ($this->getOption('version')) {\r
56                         $this->out('Friendica Console version ' . FRIENDICA_VERSION);\r
57 \r
58                         return 0;\r
59                 } elseif ((count($this->options) === 0 || $this->getOption($this->customHelpOptions) === true || $this->getOption($this->customHelpOptions) === 1) && count($this->args) === 0\r
60                 ) {\r
61                         $showHelp = true;\r
62                 } elseif (count($this->args) >= 2 && $this->getArgument(0) == 'help') {\r
63                         $command = $this->getArgument(1);\r
64                         $subHelp = true;\r
65                         array_shift($this->args);\r
66                         array_shift($this->args);\r
67                 } elseif (count($this->args) >= 1) {\r
68                         $command = $this->getArgument(0);\r
69                         array_shift($this->args);\r
70                 }\r
71 \r
72                 if (is_null($command)) {\r
73                         $this->out($this->getHelp());\r
74                         return 0;\r
75                 }\r
76 \r
77                 $console = $this->getSubConsole($command);\r
78 \r
79                 if ($subHelp) {\r
80                         $console->setOption($this->customHelpOptions, true);\r
81                 }\r
82 \r
83                 return $console->execute();\r
84         }\r
85 \r
86         private function getSubConsole($command)\r
87         {\r
88                 if ($this->getOption('v')) {\r
89                         $this->out('Command: ' . $command);\r
90                 }\r
91 \r
92                 $subargs = $this->args;\r
93                 array_unshift($subargs, $this->executable);\r
94 \r
95                 $subconsole = null;\r
96 \r
97                 switch ($command) {\r
98                         case 'config' : $subconsole = new Console\Config($subargs);\r
99                                 break;\r
100                         case 'createdoxygen' : $subconsole = new Console\CreateDoxygen($subargs);\r
101                                 break;\r
102                         case 'docbloxerrorchecker' : $subconsole = new Console\DocBloxErrorChecker($subargs);\r
103                                 break;\r
104                         case 'extract' : $subconsole = new Console\Extract($subargs);\r
105                                 break;\r
106                         case 'globalcommunityblock': $subconsole = new Console\GlobalCommunityBlock($subargs);\r
107                                 break;\r
108                         case 'globalcommunitysilence': $subconsole = new Console\GlobalCommunitySilence($subargs);\r
109                                 break;\r
110                         case 'maintenance': $subconsole = new Console\Maintenance($subargs);\r
111                                 break;\r
112                         case 'php2po': $subconsole = new Console\PhpToPo($subargs);\r
113                                 break;\r
114                         case 'po2php': $subconsole = new Console\PoToPhp($subargs);\r
115                                 break;\r
116                         case 'typo': $subconsole = new Console\Typo($subargs);\r
117                                 break;\r
118                         default:\r
119                                 throw new \Asika\SimpleConsole\CommandArgsException('Command ' . $command . ' doesn\'t exist');\r
120                 }\r
121 \r
122                 foreach ($this->options as $name => $value) {\r
123                         $subconsole->setOption($name, $value);\r
124                 }\r
125 \r
126                 return $subconsole;\r
127         }\r
128 \r
129 }\r