consolidate attr_url function (#2143)
[openemr.git] / interface / language / lang_manage.php
blob0531dccfc539c656952cfd78efe8f0b308867af6
1 <?php
2 /**
3 * lang_manage.php script
5 * @package OpenEMR
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']);
21 // gacl control
22 $thisauth = acl_check('admin', 'language');
23 if (!$thisauth) {
24 echo "<html>\n<body>\n";
25 echo "<p>" . xlt('You are not authorized for this.') . "</p>\n";
26 echo "</body>\n</html>\n";
27 exit();
30 if ($_POST['check'] || $_POST['synchronize']) {
31 if (!verifyCsrfToken($_POST["csrf_token_form"])) {
32 csrfNotVerified();
35 // set up flag if only checking for changes (ie not performing synchronization)
36 $checkOnly = 0;
37 if ($_POST['check']) {
38 $checkOnly = 1;
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";
44 } else {
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);
55 $row_main = array();
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) {
69 if ($var=='') {
70 continue;
73 echo xlt('Following is a new custom language:')." ".text($var)."<BR>";
74 if (!$checkOnly) {
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>";
84 $difference = 1;
88 // collect and display(synchronize) new custom constants
90 $sql = "SELECT constant_name FROM lang_constants";
91 $res = SqlStatement($sql);
92 $row_main = array();
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) {
106 if ($var=='') {
107 continue;
110 echo xlt('Following is a new custom constant:')." ".text($var)."<BR>";
111 if (!$checkOnly) {
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>";
118 $difference = 1;
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'];
145 if ($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
151 continue;
152 } else {
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>";
158 if (!$checkOnly) {
159 //add new definition
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>";
168 $difference = 1;
170 } else {
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>";
175 if (!$checkOnly) {
176 //add new definition
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>";
185 $difference = 1;
189 if (!$difference) {
190 echo xlt('The translation tables are synchronized.');
195 <TABLE>
196 <FORM name="manage_form" METHOD=POST ACTION="?m=manage&csrf_token_form=<?php echo attr_url(collectCsrfToken()); ?>" onsubmit="return top.restoreSession()">
197 <input type="hidden" name="csrf_token_form" value="<?php echo attr(collectCsrfToken()); ?>" />
198 <TR>
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>
201 </TR>
202 <TR></TR>
203 <TR>
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>
206 </TR>
207 </FORM>
208 </TABLE>