diff --git a/src/Core/Console/Config.php b/src/Core/Console/Config.php new file mode 100644 index 00000000..e0e87082 --- /dev/null +++ b/src/Core/Console/Config.php @@ -0,0 +1,137 @@ + + */ +class Config extends \Asika\SimpleConsole\Console +{ + protected $helpOptions = ['h', 'help', '?']; + + protected function getHelp() + { + $help = << [-h|--help|-?] [-v] + bin/console config [-h|--help|-?] [-v] + bin/console config [-h|--help|-?] [-v] + +Description + bin/console config + Lists all config values + + bin/console config + Lists all config values in the provided category + + bin/console config + Shows the value of the provided key in the category + + bin/console config + Sets the value of the provided key in the category + +Notes: + Setting config entries which are manually set in .htconfig.php may result in + conflict between database settings and the manual startup settings. + +Options + -h|--help|-? Show help information + -v Show more debug information. +HELP; + return $help; + } + + protected function doExecute() + { + $a = get_app(); + + if ($this->getOption('v')) { + $this->out('Executable: ' . $this->executable); + $this->out('Class: ' . __CLASS__); + $this->out('Arguments: ' . var_export($this->args, true)); + $this->out('Options: ' . var_export($this->options, true)); + } + + if (count($this->args) > 3) { + throw new CommandArgsException('Too many arguments'); + } + + require_once '.htconfig.php'; + $db = new dba($db_host, $db_user, $db_pass, $db_data); + unset($db_host, $db_user, $db_pass, $db_data); + + if (!$result) { + throw new \RuntimeException('Unable to connect to database'); + } + + if (count($this->args) == 3) { + Core\Config::set($this->getArgument(0), $this->getArgument(1), $this->getArgument(2)); + $this->out("config[{$this->getArgument(0)}][{$this->getArgument(1)}] = " . Core\Config::get($this->getArgument(0), + $this->getArgument(1))); + } + + if (count($this->args) == 2) { + $this->out("config[{$this->getArgument(0)}][{$this->getArgument(1)}] = " . Core\Config::get($this->getArgument(0), + $this->getArgument(1))); + } + + if (count($this->args) == 1) { + Core\Config::load($this->getArgument(0)); + + $a = get_app(); + if (!is_null($a->config[$this->getArgument(0)])) { + foreach ($a->config[$this->getArgument(0)] as $k => $x) { + $this->out("config[{$this->getArgument(0)}][{$k}] = " . $x); + } + } else { + $this->out('Config section ' . $this->getArgument(0) . ' returned nothing'); + } + } + + if (count($this->args) == 0) { + $configs = dba::select('config'); + foreach ($configs as $config) { + $this->out("config[{$config['cat']}][{$config['k']}] = " . $config['v']); + } + } + + return 0; + } + +} diff --git a/src/Core/Console/PoToPhp.php b/src/Core/Console/PoToPhp.php new file mode 100644 index 00000000..99d34dc1 --- /dev/null +++ b/src/Core/Console/PoToPhp.php @@ -0,0 +1,201 @@ + + */ +class PoToPhp extends \Asika\SimpleConsole\Console +{ + protected $helpOptions = ['h', 'help', '?']; + + const DQ_ESCAPE = "__DQ__"; + + protected function getHelp() + { + $help = << [-h|--help|-?] [-v] + +Description + Read a messages.po file and create the according strings.php in the same directory + +Options + -h|--help|-? Show help information + -v Show more debug information. +HELP; + return $help; + } + + protected function doExecute() + { + if ($this->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) { + $this->out($this->getHelp()); + return 0; + } + + if (count($this->args) > 1) { + throw new \Asika\SimpleConsole\CommandArgsException('Too many arguments'); + } + + $a = get_app(); + + $pofile = realpath($this->getArgument(0)); + + if (!file_exists($pofile)) { + throw new \RuntimeException('Supplied file path doesn\'t exist.'); + } + + if (!is_writable(dirname($pofile))) { + throw new \RuntimeException('Supplied directory isn\'t writable.'); + } + + $outfile = dirname($pofile) . DIRECTORY_SEPARATOR . 'strings.php'; + + if (strstr($outfile, 'util')) { + $lang = 'en'; + } else { + $lang = str_replace('-', '_', basename(dirname($pofile))); + } + + $this->out('Out to ' . $outfile); + + $out = "strings["' . $k . '"] = '; + } + + if ($inv) { + $inv = false; + $out .= '"' . $v . '"'; + } + + $v = substr($l, 8, $len - 10); + $v = preg_replace_callback($escape_s_exp, [$this, 'escapeDollar'], $v); + + $inv = true; + } + + if ($k != "" && substr($l, 0, 7) == 'msgstr[') { + if ($ink) { + $ink = false; + $out .= '$a->strings["' . $k . '"] = '; + } + if ($inv) { + $inv = false; + $out .= '"' . $v . '"'; + } + + if (!$arr) { + $arr = true; + $out .= "[\n"; + } + + $match = []; + preg_match("|\[([0-9]*)\] (.*)|", $l, $match); + $out .= "\t" + . preg_replace_callback($escape_s_exp, [$this, 'escapeDollar'], $match[1]) + . ' => ' + . preg_replace_callback($escape_s_exp, [$this, 'escapeDollar'], $match[2]) + . ",\n"; + } + + if (substr($l, 0, 6) == 'msgid_') { + $ink = false; + $out .= '$a->strings["' . $k . '"] = '; + } + + if ($ink) { + $k .= trim($l, "\"\r\n"); + $k = preg_replace_callback($escape_s_exp, [$this, 'escapeDollar'], $k); + } + + if (substr($l, 0, 6) == 'msgid ') { + if ($inv) { + $inv = false; + $out .= '"' . $v . '"'; + } + + if ($k != "") { + $out .= ($arr) ? "];\n" : ";\n"; + } + + $arr = false; + $k = str_replace("msgid ", "", $l); + if ($k != '""') { + $k = trim($k, "\"\r\n"); + } else { + $k = ''; + } + + $k = preg_replace_callback($escape_s_exp, [$this, 'escapeDollar'], $k); + $ink = true; + } + + if ($inv && substr($l, 0, 6) != "msgstr") { + $v .= trim($l, "\"\r\n"); + $v = preg_replace_callback($escape_s_exp, [$this, 'escapeDollar'], $v); + } + } + + if ($inv) { + $inv = false; + $out .= '"' . $v . '"'; + } + + if ($k != '') { + $out .= ($arr ? "];\n" : ";\n"); + } + + $out = str_replace(self::DQ_ESCAPE, '\"', $out); + if (!file_put_contents($outfile, $out)) { + throw new \RuntimeException('Unable to write to ' . $outfile); + } + + return 0; + } + + private function escapeDollar($match) + { + return str_replace('$', '\$', $match[0]); + } +} diff --git a/src/Core/Console/Probe.php b/src/Core/Console/Probe.php new file mode 100644 index 00000000..41eff0a3 --- /dev/null +++ b/src/Core/Console/Probe.php @@ -0,0 +1,114 @@ + + */ +class Probe extends Console +{ + protected $helpOptions = ['h', 'help', '?']; + + protected function getHelp() + { + $help = << [-h|--help|-?] [-v] + +Description + Blocks an account in such a way that no postings or comments this account writes are accepted to this node. + +Options + -h|--help|-? Show help information + -v Show more debug information. +HELP; + return $help; + } + + protected function doExecute() + { + global $db, $a; + + $a = new \Friendica\Directory\App(); + + if ($this->getOption('v')) { + $this->out('Class: ' . __CLASS__); + $this->out('Arguments: ' . var_export($this->args, true)); + $this->out('Options: ' . var_export($this->options, true)); + } + + require_once '.htconfig.php'; + $db = new dba($db_host, $db_user, $db_pass, $db_data); + unset($db_host, $db_user, $db_pass, $db_data); + + if ($this->getOption('all')) { + $sites = q('SELECT * FROM `site-health` WHERE `health_score` >= 0'); + if (is_bool($sites)) { + throw new \RuntimeException('SQL Error'); + } elseif (!count($sites)) { + throw new \RuntimeException('No sites to probe ' . intval($this->getArgument(0))); + } else { + foreach($sites as $site) { + $this->out('Running probe for site ID ' . $site['id']); + run_site_probe($site['id'], $site); + } + } + + return 0; + } + + if (count($this->args) == 0) { + $this->out($this->getHelp()); + return 0; + } + + if (count($this->args) > 1) { + throw new CommandArgsException('Too many arguments'); + } + + if (is_numeric($this->getArgument(0))) { + $site_health = q('SELECT * FROM `site-health` WHERE `id` = %u LIMIT 1', intval($this->getArgument(0))); + + if (is_bool($site_health)) { + throw new \RuntimeException('SQL Error'); + } elseif (!count($site_health)) { + throw new \RuntimeException('Unknown site with ID ' . intval($this->getArgument(0))); + } else { + $site_health = $site_health[0]; + } + } else { + $site_health = q('SELECT * FROM `site-health` WHERE `base_url` LIKE "%%%s%%" OR `effective_base_url` LIKE "%%%s%%" LIMIT 1', + $this->getArgument(0), $this->getArgument(0)); + + if (is_bool($site_health)) { + throw new \RuntimeException('SQL Error'); + } elseif (!count($site_health)) { + throw new \RuntimeException('Unknown site with base URL ' . $this->getArgument(0)); + } else { + $site_health = $site_health[0]; + } + } + + $this->out(var_export($site_health, true)); + + $this->out('Running probe for site ID ' . $site_health['id']); + run_site_probe($site_health['id'], $site_health); + + $this->out(var_export($site_health, true)); + + return 0; + } +} diff --git a/util/po2php.php b/util/po2php.php deleted file mode 100644 index c703172a..00000000 --- a/util/po2php.php +++ /dev/null @@ -1,122 +0,0 @@ -\n\n"; - return; - } - - $pofile = $argv[1]; - $outfile = dirname($pofile)."/strings.php"; - - if(strstr($outfile,'util')) - $lang = 'en'; - else - $lang = str_replace('-','_',basename(dirname($pofile))); - - - - if (!file_exists($pofile)){ - print "Unable to find '$pofile'\n"; - return; - } - - print "Out to '$outfile'\n"; - - $out="strings["'.$k.'"] = '; } - if ($inv) { $inv = False; $out .= '"'.$v.'"'; } - - $v = substr($l,8,$len-10); - $v = preg_replace_callback($escape_s_exp,'escape_s',$v); - $inv = True; - //$out .= $v; - } - if ($k!="" && substr($l,0,7)=="msgstr["){ - if ($ink) { $ink = False; $out .= '$a->strings["'.$k.'"] = '; } - if ($inv) { $inv = False; $out .= '"'.$v.'"'; } - - if (!$arr) { - $arr=True; - $out .= "array(\n"; - } - $match=Array(); - preg_match("|\[([0-9]*)\] (.*)|", $l, $match); - $out .= "\t". - preg_replace_callback($escape_s_exp,'escape_s',$match[1]) - ." => " - .preg_replace_callback($escape_s_exp,'escape_s',$match[2]) .",\n"; - } - - if (substr($l,0,6)=="msgid_") { $ink = False; $out .= '$a->strings["'.$k.'"] = '; }; - - - if ($ink) { - $k .= trim($l,"\"\r\n"); - $k = preg_replace_callback($escape_s_exp,'escape_s',$k); - //$out .= '$a->strings['.$k.'] = '; - } - - if (substr($l,0,6)=="msgid "){ - if ($inv) { $inv = False; $out .= '"'.$v.'"'; } - if ($k!="") $out .= $arr?");\n":";\n"; - $arr=False; - $k = str_replace("msgid ","",$l); - if ($k != '""' ) { - $k = trim($k,"\"\r\n"); - } else { - $k = ""; - } - - $k = preg_replace_callback($escape_s_exp,'escape_s',$k); - $ink = True; - } - - if ($inv && substr($l,0,6)!="msgstr") { - $v .= trim($l,"\"\r\n"); - $v = preg_replace_callback($escape_s_exp,'escape_s',$v); - //$out .= '$a->strings['.$k.'] = '; - } - - - } - - if ($inv) { $inv = False; $out .= '"'.$v.'"'; } - if ($k!="") $out .= $arr?");\n":";\n"; - - file_put_contents($outfile, $out); - -} - -if (array_search(__file__,get_included_files())===0){ - po2php_run($argv,$argc); -}