Quellcode durchsuchen

Change code to be more robust

The code doesn't rely on positionnal arguments anymore. It uses options.
I've added some check to validate that the action performed are configured
properly.
Alexis Degrugillier vor 8 Jahren
Ursprung
Commit
948b44ee1e
1 geänderte Dateien mit 60 neuen und 42 gelöschten Zeilen
  1. 60 42
      cli/manipulate.translation.php

+ 60 - 42
cli/manipulate.translation.php

@@ -1,13 +1,13 @@
 <?php
 
-$options = getopt("h");
+$options = getopt("a:hk:l:v:");
 
 if (array_key_exists('h', $options)) {
 	help();
 }
 
-if (1 === $argc || 5 < $argc) {
-	help();
+if (!array_key_exists('a', $options)) {
+	error('You need to specify the action to perform.');
 }
 
 require_once __DIR__ . '/i18n/I18nFile.php';
@@ -15,27 +15,31 @@ require_once __DIR__ . '/i18n/I18nFile.php';
 $i18nFile = new I18nFile();
 $i18nData = $i18nFile->load();
 
-switch ($argv[1]) {
-	case 'add_language' :
-		$i18nData->addLanguage($argv[2]);
-		break;
-	case 'add_key' :
-		if (3 === $argc) {
-			help();
+switch ($options['a']) {
+	case 'add' :
+		if (array_key_exists('k', $options) && array_key_exists('v', $options) && array_key_exists('l', $options)) {
+			$i18nData->addValue($options['k'], $options['v'], $options['l']);
+		} elseif (array_key_exists('k', $options) && array_key_exists('v', $options)) {
+			$i18nData->addKey($options['k'], $options['v']);
+		} elseif (array_key_exists('l', $options)) {
+			$i18nData->addLanguage($options['l']);
+		} else {
+			error('You need to specify a valid set of options.');
 		}
-		$i18nData->addKey($argv[2], $argv[3]);
 		break;
-	case 'add_value':
-		if (4 === $argc) {
-			help();
+	case 'delete' :
+		if (array_key_exists('k', $options)) {
+			$i18nData->removeKey($options['k']);
+		} else {
+			error('You need to specify the key to delete.');
 		}
-		$i18nData->addValue($argv[2], $argv[3], $argv[4]);
-		break;
-	case 'duplicate_key' :
-		$i18nData->duplicateKey($argv[2]);
 		break;
-	case 'delete_key' :
-		$i18nData->removeKey($argv[2]);
+	case 'duplicate' :
+		if (array_key_exists('k', $options)) {
+			$i18nData->duplicateKey($options['k']);
+		} else {
+			error('You need to specify the key to duplicate');
+		}
 		break;
 	case 'format' :
 		$i18nFile->dump($i18nData);
@@ -48,47 +52,61 @@ if ($i18nData->hasChanged()) {
 	$i18nFile->dump($i18nData);
 }
 
+/**
+ * Output error message.
+ */
+function error($message) {
+	$error = <<<ERROR
+WARNING
+	%s\n\n
+ERROR;
+	echo sprintf($error, $message);
+	help();
+}
+
 /**
  * Output help message.
  */
 function help() {
 	$help = <<<HELP
 NAME
-	%s
+	%1\$s
 
 SYNOPSIS
-	php %s [OPTION] [OPERATION] [KEY] [VALUE] [LANGUAGE]
+	php %1\$s [OPTIONS]
 
 DESCRIPTION
-	Manipulate translation files. Available operations are 
-	Check if translation files have missing keys or missing translations.
-
+	Manipulate translation files.
+
+	-a=ACTION
+		select the action to perform. Available actions are add, delete,
+		duplicate, and format. This option is mandatory.
+	-k=KEY	select the key to work on.
+	-v=VAL	select the value to set.
+	-l=LANG	select the language to work on.
 	-h	display this help and exit.
 
-OPERATION
-	add_language
-		add a new language by duplicating the referential. This operation
-		needs only a KEY.
+EXEMPLE
+Exemple 1: add a language. It adds a new language by duplicating the referential.
+	php %1\$s -a add -l my_lang
 
-	add_key	add a new key in the referential. This operation needs a KEY and
-		a VALUE.
+Exemple 2: add a new key. It adds the key in the referential.
+	php %1\$s -a add -k my_key -v my_value
 
-	add_value
-		add a value in the referential. This operation needs a KEY, a
-		VALUE, and a LANGUAGE.
+Exemple 3: add a new value. It adds a new value for the selected key in the selected language.
+	php %1\$s -a add -k my_key -v my_value -l my_lang
 
-	duplicate_key
-		duplicate a referential key in other languages. This operation
-		needs only a KEY.
+Exemple 4: delete a key. It deletes the selected key in every languages.
+	php %1\$s -a delete -k my_key
 
-	delete_key
-		delete a referential key from all languages. This operation needs
-		only a KEY.
+Exemple 5: duplicate a key. It duplicates the key from the referential in every languages.
+	php %1\$s -a duplicate -k my_key
 
-	format  format i18n files.
+Exemple 6: format i18n files.
+	php %1\$s -a format
 
 HELP;
 	$file = str_replace(__DIR__ . '/', '', __FILE__);
-	echo sprintf($help, $file, $file);
+	echo sprintf($help, $file);
 	exit;
 }