Esempio n. 1
0
function write($lang, $file, $key, $message)
{
    $paths = explode('/', $file);
    array_unshift($paths, $lang);
    $path = OUTPUT;
    $file = $paths[sizeof($paths) - 1];
    // create directories
    for ($i = 0; $i < sizeof($paths) - 1; $i++) {
        $dir = $paths[$i];
        $path .= "/{$dir}";
        if (!is_dir($path)) {
            mkdir($path);
        }
    }
    // create lang file
    $append_php = preg_match('/\\.php$/', $file) !== 1;
    $path .= "/{$file}" . ($append_php ? ".php" : "");
    if (!is_file($path)) {
        touch($path);
    }
    $messages = (include $path);
    if (!is_array($messages)) {
        $messages = [$key => $message];
    } else {
        $messages[$key] = $message;
    }
    $encoder = new \Riimu\Kit\PHPEncoder\PHPEncoder();
    $code = sprintf("<?php\n\nreturn %s;\n", $encoder->encode($messages, ['array.indent' => 4, 'array.align' => true]));
    file_put_contents($path, $code);
}
Esempio n. 2
0
<?php

$usage = <<<DOCOPT
Usage: gen <file>

DOCOPT;
$options = (new \Docopt\Handler())->handle($usage);
$file = $options['<file>'];
if ($file == '-') {
    $file = 'php://stdin';
}
$data = json_decode(file_get_contents($file), !!'assoc');
$encoder = new \Riimu\Kit\PHPEncoder\PHPEncoder();
echo $encoder->encode($data, ['array.inline' => true]);
echo "\n";
Esempio n. 3
0
Options:
  --php          Handle PHP brackets, i.e. `name="foo[bar]"`
  --fmt=<fmt>    Output format. json or php. [default: json]
  --no-initials  Ignore initial values

DOCOPT;
$options = (new \Docopt\Handler())->handle($usage);
$fmt = $options['--fmt'];
$registry = new \Fulfil\Registry();
$reader = new \Fulfil\Ext\FormReader($registry);
if ($options['--php']) {
    $reader->handlePHPBrackets = true;
    $reader->ignoreInitials = $options['--no-initials'];
}
if ($options['<file>'] == '-') {
    $options['<file>'] = 'php://stdin';
}
$forms = $reader->readHTML(file_get_contents($options['<file>']));
foreach ($forms as $form) {
    $schema = $form->schema->export();
    // move it to the bottom
    unset($form->schema);
    $form->schema = $schema;
}
if ($fmt == 'json') {
    echo json_encode($forms, JSON_PRETTY_PRINT) . "\n";
} elseif ($fmt == 'php') {
    $encoder = new \Riimu\Kit\PHPEncoder\PHPEncoder();
    echo $encoder->encode($forms, ['array.inline' => true]);
    echo "\n";
}
Esempio n. 4
0
<?php

require __DIR__ . '/../src/autoload.php';
// Configuration script asks user for database details
$config = ['database' => 'mydb', 'hostname' => 'localhost', 'username' => 'dbuser', 'password' => 'dbpass'];
// Store the configuration into a file
$encoder = new \Riimu\Kit\PHPEncoder\PHPEncoder();
file_put_contents('dbconf.php', '<?php return ' . $encoder->encode($config) . ';');
echo "Contents of the config file:" . PHP_EOL;
readfile('dbconf.php');
echo PHP_EOL . PHP_EOL;
// Load the config from the file
$dbconf = (require 'dbconf.php');
echo "Array read from the config file:" . PHP_EOL;
var_dump($dbconf);
unlink('dbconf.php');
Esempio n. 5
0
<?php

/* This simple example demonstrates how to encode a simple array using default
   settings and while using minimal whitespace */
require __DIR__ . '/../src/autoload.php';
$encoder = new \Riimu\Kit\PHPEncoder\PHPEncoder();
echo $encoder->encode(['foo' => 'bar', [1, true, false, null, 1.0]]);
echo PHP_EOL;
echo $encoder->encode(['foo' => 'bar', [1, true, false, null, 1.0]], ['whitespace' => false]);
Esempio n. 6
0
 /**
  *  <h1>Описание</h1>
  *  <pre>
  *    Изменить значение любого параметра в любом конфиге laravel из каталога config.
  *    Возвращает: 1 (в случае успеха) / 0 (в случае неудачи).
  *    Может работать со значениями любых типов (в т.ч. массивами).
  *    Новое значение должно быть того же типа, что и старое, иначе ошибка.
  *  </pre>
  *  <h1>Пример использования</h1>
  *  <pre>
  *    Изменим значение параметра locale конфига app на "en"
  *    r1_config_set("app.locale", "en");  // 1
  *  </pre>
  *
  * @param  string $option
  * @param  string $value2set
  *
  * @return string
  */
 function r1_config_set($option, $value2set)
 {
     try {
         // 1. Создать новую FS относительно каталога config
         $fs = r1_fs('config');
         // 2. Разобрать $option на составляющие
         //
         //  $option_arr[0]   | имя конфига
         //  $option_arr[1]   | имя опции в конфиге
         //  $option_arr[2..] | для опций-массивов, имена ключей массивов
         //
         $option_arr = explode('.', $option);
         if (!array_key_exists(0, $option_arr) || !array_key_exists(1, $option_arr)) {
             throw new \Exception('Значение параметра option не соответствует формату. Пример правильного значения: "M5.common_ison"');
         }
         // 3. Получить значение опции
         $value = config($option_arr[0] . '.' . $option_arr[1]);
         // 4. Узнать тип значения опции
         $type = call_user_func(function () use($value) {
             switch (gettype($value)) {
                 case 'boolean':
                     return 'boolean';
                 case 'integer':
                     return 'integer';
                 case 'double':
                     return 'double';
                 case 'string':
                     return 'string';
                 case 'array':
                     return 'array';
                 case 'object':
                     return 'object';
                 case 'resource':
                     return 'resource';
                 case 'NULL':
                     return 'NULL';
                 case 'unknown type':
                     return 'unknown type';
                 default:
                     return 'unknown type';
             }
         });
         if (in_array($type, ['object', 'resource', 'NULL', 'unknown type'])) {
             throw new \Exception("Хелпер r1_config_set не работает со значениями следующих типов: 'object', 'resource', 'NULL', 'unknown type'");
         }
         // 5. Узнать тип значения $value2set
         $type2set = call_user_func(function () use($value2set) {
             switch (gettype($value2set)) {
                 case 'boolean':
                     return 'boolean';
                 case 'integer':
                     return 'integer';
                 case 'double':
                     return 'double';
                 case 'string':
                     return 'string';
                 case 'array':
                     return 'array';
                 case 'object':
                     return 'object';
                 case 'resource':
                     return 'resource';
                 case 'NULL':
                     return 'NULL';
                 case 'unknown type':
                     return 'unknown type';
                 default:
                     return 'unknown type';
             }
         });
         if (in_array($type2set, ['object', 'resource', 'NULL', 'unknown type'])) {
             throw new \Exception("Хелпер r1_config_set не работает со значениями следующих типов: 'object', 'resource', 'NULL', 'unknown type'");
         }
         if ($type != 'array' && $type !== $type2set) {
             throw new \Exception('Тип назначаемого значения должен соответствовать типу опции: ' . $type);
         }
         // 6. Если $type относится к тем, что умещаются на 1-й строке
         if (in_array($type, ['boolean', 'integer', 'double', 'string'])) {
             // 6.1. Преобразовать $value2set к его строковому эквиваленту
             switch (gettype($value2set)) {
                 case 'boolean':
                     $value2set = $value2set ? 'true' : 'false';
                     break;
                 case 'integer':
                     $value2set = '' . $value2set;
                     break;
                 case 'double':
                     $value2set = '' . $value2set;
                     break;
                 case 'string':
                     break;
             }
             // 6.2. Извлечь содержимое конфига $option_arr[0]
             $config = r1_fs('config')->get($option_arr[0] . '.php');
             // 6.3. Найти и заменить в конфиге значение опции $option_arr[1]
             if (in_array($type, ['boolean', 'integer', 'double'])) {
                 $config = preg_replace("/'" . $option_arr[1] . "' *=> *.*/ui", "'" . $option_arr[1] . "' => " . $value2set . ",", $config);
             } else {
                 $config = preg_replace("/'" . $option_arr[1] . "' *=> *.*/ui", "'" . $option_arr[1] . "' => '" . $value2set . "',", $config);
             }
             // 6.4. Перезаписать $config
             r1_fs('config')->put($option_arr[0] . '.php', $config);
         }
         // 7. Если $type - массив
         if (in_array($type, ['array'])) {
             // 7.1. Извлечь значение, которое надо изменить, и его тип
             $value2change = call_user_func(function () use($value, $type, $option_arr, $type2set) {
                 // 1] Если в $option_arr лишь 2 элемента, вернуть $value и $type
                 if (count($option_arr) == 2) {
                     return ["value" => $value, "type" => $type];
                 }
                 // 2] Проверить существование искомого значения
                 $arrpath = "";
                 for ($i = 2; $i < count($option_arr); $i++) {
                     // 2.1] Дополнить $arrpath
                     $arrpath = $arrpath . '.' . $option_arr[$i];
                     // 2.2] Проверить существование такого св-ва массива
                     if (is_null(config($option_arr[0] . '.' . $option_arr[1] . $arrpath))) {
                         throw new \Exception('Попытка изменить значение несуществующего в опции-массиве свойства: ' . $arrpath);
                     }
                 }
                 // 3] Получить искомое значение
                 $res_value = config($option_arr[0] . '.' . $option_arr[1] . $arrpath);
                 // 4] Получить тип искомого значения
                 $res_type = call_user_func(function () use($res_value) {
                     switch (gettype($res_value)) {
                         case 'boolean':
                             return 'boolean';
                         case 'integer':
                             return 'integer';
                         case 'double':
                             return 'double';
                         case 'string':
                             return 'string';
                         case 'array':
                             return 'array';
                         case 'object':
                             return 'object';
                         case 'resource':
                             return 'resource';
                         case 'NULL':
                             return 'NULL';
                         case 'unknown type':
                             return 'unknown type';
                         default:
                             return 'unknown type';
                     }
                 });
                 if (in_array($res_type, ['object', 'resource', 'NULL', 'unknown type'])) {
                     throw new \Exception("Хелпер r1_config_set не работает со значениями следующих типов: 'object', 'resource', 'NULL', 'unknown type'");
                 }
                 if ($type2set !== $res_type) {
                     throw new \Exception('Тип назначаемого значения должен соответствовать типу опции: ' . $res_type);
                 }
                 // 5] Вернуть результат
                 return ["value" => $res_value, "type" => $res_type];
             });
             // 7.2. Узнать кол-во измерений массива config($option_arr[0].'.'.$option_arr[1].$arrpath
             $dimensions = r1_countdim(config($option_arr[0] . '.' . $option_arr[1]));
             // 7.3. Если $value2change['type'] относится к следующим
             if (in_array($value2change['type'], ['boolean', 'integer', 'double', 'string', 'array'])) {
                 // 1] Преобразовать $value2set к его строковому эквиваленту
                 switch (gettype($value2set)) {
                     case 'boolean':
                         $value2set = $value2set ? 'true' : 'false';
                         break;
                     case 'integer':
                         $value2set = '' . $value2set;
                         break;
                     case 'double':
                         $value2set = '' . $value2set;
                         break;
                     case 'string':
                         break;
                 }
                 // 2] Извлечь содержимое конфига $option_arr[0]
                 $config = r1_fs('config')->get($option_arr[0] . '.php');
                 // 3] Напис.функц.для получения ссылки на св-во многомерного массива
                 $get_multidem_prop = function &(&$array, $keys) {
                     $result =& $array;
                     foreach ($keys as &$key) {
                         $result =& $result[$key];
                     }
                     return $result;
                 };
                 // 4] Изменить значение $value
                 $keys = [];
                 for ($i = 2; $i < count($option_arr); $i++) {
                     array_push($keys, $option_arr[$i]);
                 }
                 $newvalue =& $get_multidem_prop($value, $keys);
                 $newvalue = $value2set;
                 // 5] Сформировать строку для замены $value
                 // 5.1] Создать новый экземпляр энкодера
                 $encoder = new \Riimu\Kit\PHPEncoder\PHPEncoder();
                 // 5.2] Закодировать $value
                 $value = $encoder->encode($value, ['array.indent' => 2, 'array.base' => 4]);
                 // 6] Найти и заменить $value в $config
                 // 6.1] Сформировать регулярное выражение
                 $regex = "/'" . $option_arr[1] . "' *=> *\\[.*\\]";
                 // 6.2] Учесть кол-во измерений в массиве
                 if (+$dimensions >= 2) {
                     for ($i = 0; $i < count($dimensions) + 1; $i++) {
                         $regex = $regex . '.*\\]';
                     }
                 }
                 // 6.3] Завершить регулярное выражение
                 $regex = $regex . "/smuiU";
                 // 6.4] Заменить
                 $config = preg_replace($regex, "'" . $option_arr[1] . "' => " . $value, $config);
                 // 7] Перезаписать $config
                 r1_fs('config')->put($option_arr[0] . '.php', $config);
             }
         }
         // n] Вернуть ответ
         return 1;
     } catch (\Exception $e) {
         write2log('При попытке назначить новое значение опции M5.common_ison возникла ошибка: ' . $e->getMessage(), ['r1_config_set']);
         return 0;
     }
 }