Highway to PSR2
[openemr.git] / interface / language / lang_definition.php
blob95138442955c302591c7f85c8df2b59b33fbb7cc
1 <?php
2 /**
3 * Generated DocBlock
5 * @package OpenEMR
6 * @link http://www.open-emr.org
7 * @author bradymiller <bradymiller>
8 * @author sunsetsystems <sunsetsystems>
9 * @author sunsetsystems <sunsetsystems>
10 * @author andres_paglayan <andres_paglayan>
11 * @author Wakie87 <scott@npclinics.com.au>
12 * @author Robert Down <robertdown@live.com>
13 * @copyright Copyright (c) 2010 bradymiller <bradymiller>
14 * @copyright Copyright (c) 2009 sunsetsystems <sunsetsystems>
15 * @copyright Copyright (c) 2008 sunsetsystems <sunsetsystems>
16 * @copyright Copyright (c) 2005 andres_paglayan <andres_paglayan>
17 * @copyright Copyright (c) 2016 Wakie87 <scott@npclinics.com.au>
18 * @copyright Copyright (c) 2017 Robert Down <robertdown@live.com>
19 * @license https://github.com/openemr/openemr/blob/master/LICENSE GNU General Public License 3
23 <table>
24 <form name='filterform' id='filterform' method='post' action='?m=definition' onsubmit="return top.restoreSession()">
25 <tr>
26 <td><?php echo htmlspecialchars(xl('Filter for Constants', '', '', ':'), ENT_NOQUOTES); ?></td>
27 <td><input type='text' name='filter_cons' size='8' value='<?php echo htmlspecialchars($_POST['filter_cons'], ENT_QUOTES); ?>' />
28 <span class="text"><?php echo htmlspecialchars(xl('(% matches any string, _ matches any character)'), ENT_NOQUOTES); ?></span></td>
29 </tr>
30 <tr>
31 <td><?php echo htmlspecialchars(xl('Filter for Definitions', '', '', ':'), ENT_NOQUOTES); ?></td>
32 <td><input type='text' name='filter_def' size='8' value='<?php echo htmlspecialchars($_POST['filter_def'], ENT_QUOTES); ?>' />
33 <span class="text"><?php echo htmlspecialchars(xl('(% matches any string, _ matches any character)'), ENT_NOQUOTES); ?></span></td>
34 </tr>
35 <tr>
36 <td><?php echo htmlspecialchars(xl('Select Language').":", ENT_NOQUOTES); ?></td>
37 <td>
38 <select name='language_select'>
39 <?php
40 // sorting order of language titles depends on language translation options.
41 $mainLangID = empty($_SESSION['language_choice']) ? '1' : $_SESSION['language_choice'];
42 if ($mainLangID == '1' && !empty($GLOBALS['skip_english_translation'])) {
43 $sql = "SELECT * FROM lang_languages ORDER BY lang_description, lang_id";
44 $res=SqlStatement($sql);
45 } else {
46 // Use and sort by the translated language name.
47 $sql = "SELECT ll.lang_id, " .
48 "IF(LENGTH(ld.definition),ld.definition,ll.lang_description) AS lang_description " .
49 "FROM lang_languages AS ll " .
50 "LEFT JOIN lang_constants AS lc ON lc.constant_name = ll.lang_description " .
51 "LEFT JOIN lang_definitions AS ld ON ld.cons_id = lc.cons_id AND " .
52 "ld.lang_id=? " .
53 "ORDER BY IF(LENGTH(ld.definition),ld.definition,ll.lang_description), ll.lang_id";
54 $res=SqlStatement($sql, array($mainLangID));
57 // collect the default selected language id, and then display list
58 $tempLangID = isset($_POST['language_select']) ? $_POST['language_select'] : $mainLangID;
59 while ($row=SqlFetchArray($res)) {
60 if ($tempLangID == $row['lang_id']) {
61 echo "<option value='" . htmlspecialchars($row['lang_id'], ENT_QUOTES) . "' selected>" . htmlspecialchars($row['lang_description'], ENT_NOQUOTES) . "</option>";
62 } else {
63 echo "<option value='" . htmlspecialchars($row['lang_id'], ENT_QUOTES) . "'>" . htmlspecialchars($row['lang_description'], ENT_NOQUOTES) . "</option>";
67 </select>
68 </td>
69 </tr>
70 <tr>
71 <td colspan=2><INPUT TYPE="submit" name="edit" value="<?php echo htmlspecialchars(xl('Search'), ENT_QUOTES); ?>"></td>
72 </tr>
73 </form>
74 </table>
75 <br>
76 <?php
78 // set up the mysql collation string to ensure case is sensitive (or insensitive) in the mysql queries
79 if (!$disable_utf8_flag) {
80 $case_sensitive_collation = "COLLATE utf8_bin";
81 $case_insensitive_collation = "COLLATE utf8_general_ci";
82 } else {
83 $case_sensitive_collation = "COLLATE latin_bin";
84 $case_insensitive_collation = "COLLATE latin1_swedish_ci";
87 if ($_POST['load']) {
88 // query for entering new definitions it picks the cons_id because is existant.
89 if (!empty($_POST['cons_id'])) {
90 foreach ($_POST['cons_id'] as $key => $value) {
91 $value = trim($value);
93 // do not create new blank definitions
94 if ($value == "") {
95 continue;
98 // insert into the main language tables
99 $sql = "INSERT INTO lang_definitions (`cons_id`,`lang_id`,`definition`) VALUES (?,?,?)";
100 SqlStatement($sql, array($key, $_POST['lang_id'], $value));
102 // insert each entry into the log table - to allow persistant customizations
103 $sql = "SELECT lang_description, lang_code FROM lang_languages WHERE lang_id=? LIMIT 1";
104 $res = SqlStatement($sql, array($_POST['lang_id']));
105 $row_l = SqlFetchArray($res);
106 $sql = "SELECT constant_name FROM lang_constants WHERE cons_id=? LIMIT 1";
107 $res = SqlStatement($sql, array($key));
108 $row_c = SqlFetchArray($res);
109 insert_language_log($row_l['lang_description'], $row_l['lang_code'], $row_c['constant_name'], $value);
111 $go = 'yes';
115 // query for updating preexistant definitions uses def_id because there is no def yet.
116 // echo ('<pre>'); print_r($_POST['def_id']); echo ('</pre>');
117 if (!empty($_POST['def_id'])) {
118 foreach ($_POST['def_id'] as $key => $value) {
119 $value = trim($value);
121 // only continue if the definition is new
122 $sql = "SELECT * FROM lang_definitions WHERE def_id=? AND definition=? ".$case_sensitive_collation;
123 $res_test = SqlStatement($sql, array($key, $value));
124 if (!SqlFetchArray($res_test)) {
125 // insert into the main language tables
126 $sql = "UPDATE `lang_definitions` SET `definition`=? WHERE `def_id`=? LIMIT 1";
127 SqlStatement($sql, array($value, $key));
129 // insert each entry into the log table - to allow persistant customizations
130 $sql = "SELECT ll.lang_description, ll.lang_code, lc.constant_name ";
131 $sql .= "FROM lang_definitions AS ld, lang_languages AS ll, lang_constants AS lc ";
132 $sql .= "WHERE ld.def_id=? ";
133 $sql .= "AND ll.lang_id = ld.lang_id AND lc.cons_id = ld.cons_id LIMIT 1";
134 $res = SqlStatement($sql, array($key));
135 $row = SqlFetchArray($res);
136 insert_language_log($row['lang_description'], $row['lang_code'], $row['constant_name'], $value);
138 $go = 'yes';
143 if ($go=='yes') {
144 echo htmlspecialchars(xl("New Definition set added"), ENT_NOQUOTES);
148 if ($_POST['edit']) {
149 if ($_POST['language_select'] == '') {
150 exit(htmlspecialchars(xl("Please select a language"), ENT_NOQUOTES));
153 $lang_id = (int)formData('language_select');
155 $lang_filter = isset($_POST['filter_cons']) ? $_POST['filter_cons'] : '';
156 $lang_filter .= '%';
157 $lang_filter_def = isset($_POST['filter_def']) ? $_POST['filter_def'] : '';
158 $lang_filter_def .= '%';
160 $bind_sql_array = array();
161 array_push($bind_sql_array, $lang_filter);
162 $sql = "SELECT lc.cons_id, lc.constant_name, ld.def_id, ld.definition, ld.lang_id " .
163 "FROM lang_definitions AS ld " .
164 "RIGHT JOIN ( lang_constants AS lc, lang_languages AS ll ) ON " .
165 "( lc.cons_id = ld.cons_id AND ll.lang_id = ld.lang_id ) " .
166 "WHERE lc.constant_name ".$case_insensitive_collation." LIKE ? AND ( ll.lang_id = 1 ";
167 if ($lang_id != 1) {
168 array_push($bind_sql_array, $lang_id);
169 $sql .= "OR ll.lang_id=? ";
170 $what = "SELECT * from lang_languages where lang_id=? LIMIT 1";
171 $res = SqlStatement($what, array($lang_id));
172 $row = SqlFetchArray($res);
173 $lang_name = $row['lang_description'];
176 $sql .= ") ORDER BY lc.constant_name ".$case_insensitive_collation;
177 $res = SqlStatement($sql, $bind_sql_array);
179 $isResults = false; //flag to record whether there are any results
180 echo ('<table><FORM METHOD=POST ACTION="?m=definition" onsubmit="return top.restoreSession()">');
181 // only english definitions
182 if ($lang_id==1) {
183 while ($row=SqlFetchArray($res)) {
184 $isShow = false; //flag if passes the definition filter
185 $stringTemp = '<tr><td>'.htmlspecialchars($row['constant_name'], ENT_NOQUOTES).'</td>';
186 // if there is no definition
187 if (empty($row['def_id'])) {
188 $cons_name = "cons_id[" . $row['cons_id'] . "]";
189 if ($lang_filter_def=='%') {
190 $isShow = true;
193 // if there is a previous definition
194 } else {
195 $cons_name = "def_id[" . $row['def_id'] . "]";
196 $sql = "SELECT definition FROM lang_definitions WHERE def_id=? AND definition LIKE ?";
197 $res2 = SqlStatement($sql, array($row['def_id'], $lang_filter_def));
198 if (SqlFetchArray($res2)) {
199 $isShow = true;
203 $stringTemp .= '<td><INPUT TYPE="text" size="50" NAME="' . htmlspecialchars($cons_name, ENT_QUOTES) . '" value="' . htmlspecialchars($row['definition'], ENT_QUOTES) . '">';
204 $stringTemp .= '</td><td></td></tr>';
205 if ($isShow) {
206 //definition filter passed, so show
207 echo $stringTemp;
208 $isResults = true;
212 echo ('<INPUT TYPE="hidden" name="lang_id" value="'.htmlspecialchars($lang_id, ENT_QUOTES).'">');
213 // english plus the other
214 } else {
215 while ($row=SqlFetchArray($res)) {
216 if (!empty($row['lang_id']) && $row['lang_id'] != '1') {
217 // This should not happen, if it does that must mean that this
218 // constant has more than one definition for the same language!
219 continue;
222 $isShow = false; //flag if passes the definition filter
223 $stringTemp = '<tr><td>'.htmlspecialchars($row['constant_name'], ENT_NOQUOTES).'</td>';
224 if ($row['definition']=='' or $row['definition']=='NULL') {
225 $def=" " ;
226 } else {
227 $def=$row['definition'];
230 $stringTemp .= '<td>'.htmlspecialchars($def, ENT_NOQUOTES).'</td>';
231 $row=SqlFetchArray($res); // jump one to get the second language selected
232 if ($row['def_id']=='' or $row['def_id']=='NULL') {
233 $cons_name="cons_id[".$row['cons_id']."]";
234 if ($lang_filter_def=='%') {
235 $isShow = true;
238 // if there is a previous definition
239 } else {
240 $cons_name="def_id[".$row['def_id']."]";
242 $sql = "SELECT definition FROM lang_definitions WHERE def_id=? AND definition LIKE ?";
243 $res2 = SqlStatement($sql, array($row['def_id'], $lang_filter_def));
244 if (SqlFetchArray($res2)) {
245 $isShow = true;
249 $stringTemp .= '<td><INPUT TYPE="text" size="50" NAME="'.htmlspecialchars($cons_name, ENT_QUOTES).'" value="'.htmlspecialchars($row['definition'], ENT_QUOTES).'">';
250 $stringTemp .='</td></tr>';
251 if ($isShow) {
252 //definition filter passed, so show
253 echo $stringTemp;
254 $isResults = true;
258 echo ('<INPUT TYPE="hidden" name="lang_id" value="'.htmlspecialchars($lang_id, ENT_QUOTES).'">');
261 if ($isResults) {
262 echo ('<tr><td colspan=3><INPUT TYPE="submit" name="load" Value="' . htmlspecialchars(xl('Load Definitions'), ENT_NOQUOTES) . '"></td></tr>');
264 <INPUT TYPE="hidden" name="filter_cons" value="<?php echo htmlspecialchars($_POST['filter_cons'], ENT_QUOTES); ?>">
265 <INPUT TYPE="hidden" name="filter_def" value="<?php echo htmlspecialchars($_POST['filter_def'], ENT_QUOTES); ?>">
266 <INPUT TYPE="hidden" name="language_select" value="<?php echo htmlspecialchars($_POST['language_select'], ENT_QUOTES); ?>">
267 <?php
268 } else {
269 echo htmlspecialchars(xl('No Results Found For Search'), ENT_NOQUOTES);
272 echo ('</FORM></table>');