diff options
Diffstat (limited to 'cli')
| -rw-r--r-- | cli/README.md | 3 | ||||
| -rw-r--r-- | cli/i18n/I18nData.php | 24 | ||||
| -rw-r--r-- | cli/i18n/I18nFile.php | 31 | ||||
| -rw-r--r-- | cli/manipulate.translation.php | 19 | ||||
| -rwxr-xr-x | cli/prepare.php | 37 |
5 files changed, 109 insertions, 5 deletions
diff --git a/cli/README.md b/cli/README.md index a496aab58..d531b8c3d 100644 --- a/cli/README.md +++ b/cli/README.md @@ -32,6 +32,9 @@ Options in parenthesis are optional. ```sh cd /usr/share/FreshRSS +./cli/prepare.php +# Ensure the needed directories in ./data/ + ./cli/do-install.php --default_user admin ( --auth_type form --environment production --base_url https://rss.example.net/ --language en --title FreshRSS --allow_anonymous --api_enabled --db-type mysql --db-host localhost:3306 --db-user freshrss --db-password dbPassword123 --db-base freshrss --db-prefix freshrss ) # --auth_type can be: 'form' (default), 'http_auth' (using the Web server access control), 'none' (dangerous) # --db-type can be: 'sqlite' (default), 'mysql' (MySQL or MariaDB), 'pgsql' (PostgreSQL) diff --git a/cli/i18n/I18nData.php b/cli/i18n/I18nData.php index cd8ba0765..b8f958288 100644 --- a/cli/i18n/I18nData.php +++ b/cli/i18n/I18nData.php @@ -32,6 +32,7 @@ class I18nData { * Add a new language. It's a copy of the reference language. * * @param string $language + * @throws Exception */ public function addLanguage($language) { if (array_key_exists($language, $this->data)) { @@ -45,6 +46,7 @@ class I18nData { * * @param string $key * @param string $value + * @throws Exception */ public function addKey($key, $value) { if (array_key_exists($key, $this->data[static::REFERENCE_LANGUAGE][$this->getFilenamePrefix($key)])) { @@ -54,9 +56,28 @@ class I18nData { } /** + * Add a value for a key for the selected language. + * + * @param string $key + * @param string $value + * @param string $language + * @throws Exception + */ + public function addValue($key, $value, $language) { + if (!in_array($language, $this->getAvailableLanguages())) { + throw new Exception('The selected language does not exist.'); + } + if (!array_key_exists($key, $this->data[static::REFERENCE_LANGUAGE][$this->getFilenamePrefix($key)])) { + throw new Exception('The selected key does not exist for the selected language.'); + } + $this->data[$language][$this->getFilenamePrefix($key)][$key] = $value; + } + + /** * Duplicate a key from the reference language to all other languages * * @param string $key + * @throws Exception */ public function duplicateKey($key) { if (!array_key_exists($key, $this->data[static::REFERENCE_LANGUAGE][$this->getFilenamePrefix($key)])) { @@ -68,7 +89,7 @@ class I18nData { continue; } if (array_key_exists($key, $this->data[$language][$this->getFilenamePrefix($key)])) { - throw new Exception(sprintf('The selected key already exist in %s.', $language)); + continue; } $this->data[$language][$this->getFilenamePrefix($key)][$key] = $value; } @@ -78,6 +99,7 @@ class I18nData { * Remove a key in all languages * * @param string $key + * @throws Exception */ public function removeKey($key) { if (!array_key_exists($key, $this->data[static::REFERENCE_LANGUAGE][$this->getFilenamePrefix($key)])) { diff --git a/cli/i18n/I18nFile.php b/cli/i18n/I18nFile.php index d6489ee21..a07efdf88 100644 --- a/cli/i18n/I18nFile.php +++ b/cli/i18n/I18nFile.php @@ -36,8 +36,7 @@ class i18nFile { } foreach ($file as $name => $content) { $filename = $dir . DIRECTORY_SEPARATOR . $name; - $fullContent = var_export($this->unflatten($content), true); - file_put_contents($filename, sprintf('<?php return %s;', $fullContent)); + file_put_contents($filename, $this->format($content)); } } } @@ -89,4 +88,32 @@ class i18nFile { return $a; } + /** + * Format an array of translation + * + * It takes an array of translation and format it to be dumped in a + * translation file. The array is first converted to a string then some + * formatting regexes are applied to match the original content. + * + * @param array $translation + * @return string + */ + private function format($translation) { + $translation = var_export($this->unflatten($translation), true); + $patterns = array( + '/array \(/', + '/=>\s*array/', + '/ {2}/', + ); + $replacements = array( + 'array(', + '=> array', + "\t", // Double quoting is mandatory to have a tab instead of the \t string + ); + $translation = preg_replace($patterns, $replacements, $translation); + + // Double quoting is mandatory to have new lines instead of \n strings + return sprintf("<?php\n\nreturn %s;\n", $translation); + } + } diff --git a/cli/manipulate.translation.php b/cli/manipulate.translation.php index aace5723a..0e06993ef 100644 --- a/cli/manipulate.translation.php +++ b/cli/manipulate.translation.php @@ -6,7 +6,7 @@ if (array_key_exists('h', $options)) { help(); } -if (1 === $argc || 4 < $argc) { +if (1 === $argc || 5 < $argc) { help(); } @@ -25,12 +25,21 @@ switch ($argv[1]) { } $i18nData->addKey($argv[2], $argv[3]); break; + case 'add_value': + if (4 === $argc) { + help(); + } + $i18nData->addValue($argv[2], $argv[3], $argv[4]); + break; case 'duplicate_key' : $i18nData->duplicateKey($argv[2]); break; case 'delete_key' : $i18nData->removeKey($argv[2]); break; + case 'format' : + $i18nFile->dump($i18nData); + break; default : help(); } @@ -48,7 +57,7 @@ NAME %s SYNOPSIS - php %s [OPTION] [OPERATION] [KEY] [VALUE] + php %s [OPTION] [OPERATION] [KEY] [VALUE] [LANGUAGE] DESCRIPTION Manipulate translation files. Available operations are @@ -64,6 +73,10 @@ OPERATION add_key add a new key in the referential. This operation needs a KEY and a VALUE. + add_value + add a value in the referential. This operation needs a KEY, a + VALUE, and a LANGUAGE. + duplicate_key duplicate a referential key in other languages. This operation needs only a KEY. @@ -72,6 +85,8 @@ OPERATION delete a referential key from all languages. This operation needs only a KEY. + format format i18n files. + HELP; $file = str_replace(__DIR__ . '/', '', __FILE__); echo sprintf($help, $file, $file); diff --git a/cli/prepare.php b/cli/prepare.php new file mode 100755 index 000000000..2db2da555 --- /dev/null +++ b/cli/prepare.php @@ -0,0 +1,37 @@ +#!/usr/bin/php +<?php +require(__DIR__ . '/_cli.php'); + +$dirs = array( + '/', + '/cache', + '/extensions-data', + '/favicons', + '/PubSubHubbub', + '/PubSubHubbub/feeds', + '/PubSubHubbub/keys', + '/tokens', + '/users', + '/users/_', +); + +$ok = true; + +foreach ($dirs as $dir) { + @mkdir(DATA_PATH . $dir, 0770, true); + $ok &= touch(DATA_PATH . $dir . '/index.html'); +} + +if (!is_file(DATA_PATH . '/config.php')) { + $ok &= touch(DATA_PATH . '/do-install.txt'); +} + +file_put_contents(DATA_PATH . '/.htaccess', +"Order Allow,Deny\n" . +"Deny from all\n" . +"Satisfy all\n" +); + +accessRights(); + +done($ok); |
