3 * lang_manage.php script
6 * @link http://www.open-emr.org
7 * @author Brady Miller <brady.g.miller@gmail.com>
8 * @copyright Copyright (c) 2018 Brady Miller <brady.g.miller@gmail.com>
9 * @license https://github.com/openemr/openemr/blob/master/LICENSE GNU General Public License 3
13 // Ensure this script is not called separately
14 if ((empty($_SESSION['lang_module_unique_id'])) ||
15 (empty($unique_id)) ||
16 ($unique_id != $_SESSION['lang_module_unique_id'])) {
17 die(xlt('Authentication Error'));
19 unset($_SESSION['lang_module_unique_id']);
22 $thisauth = acl_check('admin', 'language');
24 echo "<html>\n<body>\n";
25 echo "<p>" . xlt('You are not authorized for this.') . "</p>\n";
26 echo "</body>\n</html>\n";
30 if ($_POST['check'] ||
$_POST['synchronize']) {
31 if (!verifyCsrfToken($_POST["csrf_token_form"])) {
35 // set up flag if only checking for changes (ie not performing synchronization)
37 if ($_POST['check']) {
41 // set up the mysql collation string to ensure case is sensitive in the mysql queries
42 if (!$disable_utf8_flag) {
43 $case_sensitive_collation = "COLLATE utf8_bin";
45 $case_sensitive_collation = "COLLATE latin_bin";
48 $difference = 0; //flag
51 // collect and display(synchronize) new custom languages
53 $sql = "SELECT lang_description FROM lang_languages";
54 $res = SqlStatement($sql);
56 while ($row=SqlFetchArray($res)) {
57 $row_main[] = $row['lang_description'];
60 $sql = "SELECT lang_description FROM lang_custom";
61 $res = SqlStatement($sql);
62 $row_custom = array();
63 while ($row=SqlFetchArray($res)) {
64 $row_custom[] = $row['lang_description'];
67 $custom_languages = array_diff(array_unique($row_custom), array_unique($row_main));
68 foreach ($custom_languages as $var) {
73 echo xlt('Following is a new custom language:')." ".text($var)."<BR>";
75 // add the new language (first collect the language code)
76 $sql = "SELECT lang_code FROM lang_custom WHERE constant_name='' AND lang_description=? ".$case_sensitive_collation." LIMIT 1";
77 $res = SqlStatement($sql, array($var));
78 $row = SqlFetchArray($res);
79 $sql="INSERT INTO lang_languages SET lang_code=?, lang_description=?";
80 SqlStatement($sql, array($row['lang_code'], $var));
81 echo xlt('Synchronized new custom language:')." ".text($var)."<BR><BR>";
88 // collect and display(synchronize) new custom constants
90 $sql = "SELECT constant_name FROM lang_constants";
91 $res = SqlStatement($sql);
93 while ($row=SqlFetchArray($res)) {
94 $row_main[] = $row['constant_name'];
97 $sql = "SELECT constant_name FROM lang_custom";
98 $res = SqlStatement($sql);
99 $row_custom = array();
100 while ($row=SqlFetchArray($res)) {
101 $row_custom[] = $row['constant_name'];
104 $custom_constants = array_diff(array_unique($row_custom), array_unique($row_main));
105 foreach ($custom_constants as $var) {
110 echo xlt('Following is a new custom constant:')." ".text($var)."<BR>";
112 // add the new constant
113 $sql="INSERT INTO lang_constants SET constant_name=?";
114 SqlStatement($sql, array($var));
115 echo xlt('Synchronized new custom constant:')." ".text($var)."<BR><BR>";
122 // collect and display(synchronize) custom definitions
124 $sql = "SELECT lang_description, lang_code, constant_name, definition FROM lang_custom WHERE lang_description != '' AND constant_name != ''";
125 $res = SqlStatement($sql);
126 while ($row=SqlFetchArray($res)) {
127 // collect language id
128 $sql = "SELECT lang_id FROM lang_languages WHERE lang_description=? ".$case_sensitive_collation." LIMIT 1";
129 $res2 = SqlStatement($sql, array($row['lang_description']));
130 $row2 = SqlFetchArray($res2);
131 $language_id=$row2['lang_id'];
133 // collect constant id
134 $sql = "SELECT cons_id FROM lang_constants WHERE constant_name=? ".$case_sensitive_collation." LIMIT 1";
135 $res2 = SqlStatement($sql, array($row['constant_name']));
136 $row2 = SqlFetchArray($res2);
137 $constant_id=$row2['cons_id'];
139 // collect definition id (if it exists)
140 $sql = "SELECT def_id FROM lang_definitions WHERE cons_id=? AND lang_id=? LIMIT 1";
141 $res2 = SqlStatement($sql, array($constant_id, $language_id));
142 $row2 = SqlFetchArray($res2);
143 $def_id=$row2['def_id'];
146 //definition exist, so check to see if different
147 $sql = "SELECT * FROM lang_definitions WHERE def_id=? AND definition=? ".$case_sensitive_collation;
148 $res_test = SqlStatement($sql, array($def_id, $row['definition']));
149 if (SqlFetchArray($res_test)) {
150 //definition not different
153 //definition is different
154 echo xlt('Following is a new definition (Language, Constant, Definition):').
155 " ".text($row['lang_description']).
156 " ".text($row['constant_name']).
157 " ".text($row['definition'])."<BR>";
160 $sql = "UPDATE `lang_definitions` SET `definition`=? WHERE `def_id`=? LIMIT 1";
161 SqlStatement($sql, array($row['definition'], $def_id));
162 echo xlt('Synchronized new definition (Language, Constant, Definition):').
163 " ".text($row['lang_description']).
164 " ".text($row['constant_name']).
165 " ".text($row['definition'])."<BR><BR>";
171 echo xlt('Following is a new definition (Language, Constant, Definition):').
172 " ".text($row['lang_description']).
173 " ".text($row['constant_name']).
174 " ".text($row['definition'])."<BR>";
177 $sql = "INSERT INTO lang_definitions (cons_id,lang_id,definition) VALUES (?,?,?)";
178 SqlStatement($sql, array($constant_id, $language_id, $row['definition']));
179 echo xlt('Synchronized new definition (Language, Constant, Definition):').
180 " ".text($row['lang_description']).
181 " ".text($row['constant_name']).
182 " ".text($row['definition'])."<BR><BR>";
190 echo xlt('The translation tables are synchronized.');
196 <FORM name
="manage_form" METHOD
=POST ACTION
="?m=manage&csrf_token_form=<?php echo attr(urlencode(collectCsrfToken())); ?>" onsubmit
="return top.restoreSession()">
197 <input type
="hidden" name
="csrf_token_form" value
="<?php echo attr(collectCsrfToken()); ?>" />
199 <TD
><INPUT TYPE
="submit" name
="check" value
="<?php echo xla('Check'); ?>"></TD
>
200 <TD
class="text">(<?php
echo xlt('Check for differences of translations with custom language table.'); ?
>)</TD
>
204 <TD
><INPUT TYPE
="submit" name
="synchronize" value
="<?php echo xla('Synchronize'); ?>"></TD
>
205 <TD
class="text">(<?php
echo xlt('Synchronize translations with custom language table.'); ?
>)</TD
>