Add console CLI command
- Fix App to be used in CLI mode
This commit is contained in:
parent
741e72ecc7
commit
4da0d68bad
10
bin/console
Normal file
10
bin/console
Normal file
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
dir=$(cd "${0%[/\\]*}" > /dev/null; pwd)
|
||||
|
||||
if [[ -d /proc/cygdrive && $(which php) == $(readlink -n /proc/cygdrive)/* ]]; then
|
||||
# We are in Cgywin using Windows php, so the path must be translated
|
||||
dir=$(cygpath -m "$dir");
|
||||
fi
|
||||
|
||||
php "${dir}/console.php" "$@"
|
4
bin/console.bat
Normal file
4
bin/console.bat
Normal file
|
@ -0,0 +1,4 @@
|
|||
@echo OFF
|
||||
:: in case DelayedExpansion is on and a path contains !
|
||||
setlocal DISABLEDELAYEDEXPANSION
|
||||
php "%~dp0console.php" %*
|
6
bin/console.php
Normal file
6
bin/console.php
Normal file
|
@ -0,0 +1,6 @@
|
|||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
include_once dirname(__DIR__) . '/boot.php';
|
||||
|
||||
(new Friendica\Directory\Core\Console($argv))->execute();
|
17
src/App.php
17
src/App.php
|
@ -34,17 +34,20 @@ class App
|
|||
$this->pager = array();
|
||||
|
||||
$this->scheme = ((isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'])) ? 'https' : 'http');
|
||||
$this->hostname = str_replace('www.', '', $_SERVER['SERVER_NAME']);
|
||||
if (!empty($_SERVER['SERVER_NAME'])) {
|
||||
$this->hostname = str_replace('www.', '', $_SERVER['SERVER_NAME']);
|
||||
}
|
||||
set_include_path(get_include_path()
|
||||
. PATH_SEPARATOR . "include/$this->hostname"
|
||||
. PATH_SEPARATOR . 'include'
|
||||
. PATH_SEPARATOR . '.');
|
||||
|
||||
if (substr($_SERVER['QUERY_STRING'], 0, 2) == "q=") {
|
||||
$_SERVER['QUERY_STRING'] = substr($_SERVER['QUERY_STRING'], 2);
|
||||
}
|
||||
if (!empty($_SERVER['QUERY_STRING'])) {
|
||||
if (substr($_SERVER['QUERY_STRING'], 0, 2) == "q=") {
|
||||
$_SERVER['QUERY_STRING'] = substr($_SERVER['QUERY_STRING'], 2);
|
||||
}
|
||||
|
||||
$this->query_string = $_SERVER['QUERY_STRING'];
|
||||
$this->query_string = $_SERVER['QUERY_STRING'];
|
||||
}
|
||||
|
||||
$q = isset($_GET['q']) ? $_GET['q'] : '';
|
||||
$this->cmd = trim($q, '/');
|
||||
|
@ -120,4 +123,4 @@ class App
|
|||
'$baseurl' => $this->get_baseurl()
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
106
src/Core/Console.php
Normal file
106
src/Core/Console.php
Normal file
|
@ -0,0 +1,106 @@
|
|||
<?php
|
||||
|
||||
namespace Friendica\Directory\Core;
|
||||
|
||||
/**
|
||||
* Description of Console
|
||||
*
|
||||
* @author Hypolite Petovan <mrpetovan@gmail.com>
|
||||
*/
|
||||
class Console extends \Asika\SimpleConsole\Console
|
||||
{
|
||||
// Disables the default help handling
|
||||
protected $helpOptions = [];
|
||||
protected $customHelpOptions = ['h', 'help', '?'];
|
||||
|
||||
protected $subConsoles = [
|
||||
'config' => __NAMESPACE__ . '\Console\Config',
|
||||
'probe' => __NAMESPACE__ . '\Console\Probe',
|
||||
'po2php' => __NAMESPACE__ . '\Console\PoToPhp',
|
||||
];
|
||||
|
||||
protected function getHelp()
|
||||
{
|
||||
$help = <<<HELP
|
||||
Usage: bin/console [--version] [-h|--help|-?] <command> [<args>] [-v]
|
||||
|
||||
Commands:
|
||||
config Edit site config
|
||||
probe Probe a single site
|
||||
po2php Generate a strings.php file from a messages.po file
|
||||
|
||||
Options:
|
||||
-h|--help|-? Show help information
|
||||
-v Show more debug information.
|
||||
HELP;
|
||||
return $help;
|
||||
}
|
||||
|
||||
protected function doExecute()
|
||||
{
|
||||
if ($this->getOption('v')) {
|
||||
$this->out('Executable: ' . $this->executable);
|
||||
$this->out('Arguments: ' . var_export($this->args, true));
|
||||
$this->out('Options: ' . var_export($this->options, true));
|
||||
}
|
||||
|
||||
$showHelp = false;
|
||||
$subHelp = false;
|
||||
$command = null;
|
||||
|
||||
if ($this->getOption('version')) {
|
||||
$this->out('Friendica Console version ' . BUILD_ID);
|
||||
|
||||
return 0;
|
||||
} elseif ((count($this->options) === 0 || $this->getOption($this->customHelpOptions) === true || $this->getOption($this->customHelpOptions) === 1) && count($this->args) === 0
|
||||
) {
|
||||
$showHelp = true;
|
||||
} elseif (count($this->args) >= 2 && $this->getArgument(0) == 'help') {
|
||||
$command = $this->getArgument(1);
|
||||
$subHelp = true;
|
||||
array_shift($this->args);
|
||||
array_shift($this->args);
|
||||
} elseif (count($this->args) >= 1) {
|
||||
$command = $this->getArgument(0);
|
||||
array_shift($this->args);
|
||||
}
|
||||
|
||||
if (is_null($command)) {
|
||||
$this->out($this->getHelp());
|
||||
return 0;
|
||||
}
|
||||
|
||||
$console = $this->getSubConsole($command);
|
||||
|
||||
if ($subHelp) {
|
||||
$console->setOption($this->customHelpOptions, true);
|
||||
}
|
||||
|
||||
return $console->execute();
|
||||
}
|
||||
|
||||
private function getSubConsole($command)
|
||||
{
|
||||
if ($this->getOption('v')) {
|
||||
$this->out('Command: ' . $command);
|
||||
}
|
||||
|
||||
if (!isset($this->subConsoles[$command])) {
|
||||
throw new \Asika\SimpleConsole\CommandArgsException('Command ' . $command . ' doesn\'t exist');
|
||||
}
|
||||
|
||||
$subargs = $this->args;
|
||||
array_unshift($subargs, $this->executable);
|
||||
|
||||
$className = $this->subConsoles[$command];
|
||||
|
||||
$subconsole = new $className($subargs);
|
||||
|
||||
foreach ($this->options as $name => $value) {
|
||||
$subconsole->setOption($name, $value);
|
||||
}
|
||||
|
||||
return $subconsole;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue