2 /* vim: set expandtab sw=4 ts=4 sts=4 ft=php: */
4 * Script to parse advisor rules and output them as Gettext POT formatted
5 * strings for translation.
7 declare(strict_types=1);
9 if (! defined('ROOT_PATH')) {
10 define('ROOT_PATH', dirname(__DIR__) . DIRECTORY_SEPARATOR);
13 use PhpMyAdmin\Advisor;
19 * Processes single advisor message and stores data in global array.
21 function add_message($file, $rules, $idx, $type) {
22 global $messages, $locations;
24 if ($type == 'justification') {
25 $msgs = Advisor::splitJustification($rules['rules'][$idx]);
28 $msg = $rules['rules'][$idx][$type];
30 $line = $file . ':' . $rules['lines'][$idx][$type];
31 // Avoid duplicate mesages
32 $pos = array_search($msg, $messages);
35 $locations[] = array($line);
37 $locations[$pos][] = $line;
42 * Prints message at given location as Gettext string for translation.
44 function print_message($idx) {
45 global $messages, $locations;
47 echo '#: ' . implode(' ', $locations[$idx]);
49 if (strstr($messages[$idx], '%') !== false) {
53 echo 'msgid "' . addcslashes(Advisor::escapePercent($messages[$idx]), '"\\') . '"';
59 define('PHPMYADMIN', 1);
60 require_once 'libraries/vendor_config.php';
61 require_once AUTOLOAD_FILE;
64 $ruleFiles[Advisor::GENERIC_RULES_FILE] = Advisor::parseRulesFile(Advisor::GENERIC_RULES_FILE);
65 $ruleFiles[Advisor::BEFORE_MYSQL80003_RULES_FILE] = Advisor::parseRulesFile(Advisor::BEFORE_MYSQL80003_RULES_FILE);
67 foreach ($ruleFiles as $file => $rules) {
68 foreach ($rules['rules'] as $idx => $rule) {
69 add_message($file, $rules, $idx, 'name');
70 add_message($file, $rules, $idx, 'issue');
71 add_message($file, $rules, $idx, 'recommendation');
72 add_message($file, $rules, $idx, 'justification');
76 foreach($messages as $idx => $rule) {