These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | /** |
||
3 | * xLanguage module (eXtensible Language Management For XOOPS) |
||
4 | * |
||
5 | * You may not change or alter any portion of this comment or credits |
||
6 | * of supporting developers from this source code or any supporting source code |
||
7 | * which is considered copyrighted (c) material of the original comment or credit authors. |
||
8 | * This program is distributed in the hope that it will be useful, |
||
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
||
11 | * |
||
12 | * @copyright XOOPS Project (https://xoops.org) |
||
13 | * @license {@link http://www.gnu.org/licenses/gpl-2.0.html GNU Public License} |
||
14 | * @package xlanguage |
||
15 | * @since 2.0 |
||
16 | * @author D.J.(phppp) [email protected] |
||
17 | **/ |
||
18 | |||
19 | //include_once(XOOPS_ROOT_PATH."/class/xoopslists.php"); |
||
20 | //include_once(XOOPS_ROOT_PATH.'/modules/xlanguage/include/vars.php'); |
||
21 | //include_once(XOOPS_ROOT_PATH.'/modules/xlanguage/include/functions.php'); |
||
22 | |||
23 | /** |
||
24 | * Class Blanguage |
||
25 | */ |
||
26 | class Blanguage extends XoopsObject |
||
27 | { |
||
28 | public $isBase; |
||
29 | |||
30 | /** |
||
31 | * Blanguage constructor. |
||
32 | */ |
||
33 | public function __construct() |
||
34 | { |
||
35 | $this->db = XoopsDatabaseFactory::getDatabaseConnection(); |
||
36 | $this->table = $this->db->prefix('xlanguage_base'); |
||
37 | $this->initVar('lang_id', XOBJ_DTYPE_INT); |
||
38 | $this->initVar('weight', XOBJ_DTYPE_INT); |
||
39 | $this->initVar('lang_name', XOBJ_DTYPE_TXTBOX); |
||
40 | $this->initVar('lang_desc', XOBJ_DTYPE_TXTBOX); |
||
41 | $this->initVar('lang_code', XOBJ_DTYPE_TXTBOX); |
||
42 | $this->initVar('lang_charset', XOBJ_DTYPE_TXTBOX); |
||
43 | $this->initVar('lang_image', XOBJ_DTYPE_TXTBOX); |
||
44 | } |
||
45 | |||
46 | /** |
||
47 | * @return bool |
||
48 | */ |
||
49 | public function prepareVars() |
||
50 | { |
||
51 | foreach ($this->vars as $k => $v) { |
||
52 | $cleanv = $this->cleanVars[$k]; |
||
53 | switch ($v['data_type']) { |
||
54 | case XOBJ_DTYPE_TXTBOX: |
||
55 | case XOBJ_DTYPE_TXTAREA: |
||
56 | case XOBJ_DTYPE_SOURCE: |
||
57 | case XOBJ_DTYPE_EMAIL: |
||
58 | $cleanv = $v['changed'] ? $cleanv : ''; |
||
59 | if (!isset($v['not_gpc']) || !$v['not_gpc']) { |
||
60 | $cleanv = $this->db->quoteString($cleanv); |
||
61 | } |
||
62 | break; |
||
63 | case XOBJ_DTYPE_INT: |
||
64 | $cleanv = $v['changed'] ? (int)$cleanv : 0; |
||
65 | break; |
||
66 | case XOBJ_DTYPE_ARRAY: |
||
67 | $cleanv = $v['changed'] ? $cleanv : serialize(array()); |
||
68 | break; |
||
69 | case XOBJ_DTYPE_STIME: |
||
70 | case XOBJ_DTYPE_MTIME: |
||
71 | case XOBJ_DTYPE_LTIME: |
||
72 | $cleanv = $v['changed'] ? $cleanv : 0; |
||
73 | break; |
||
74 | |||
75 | default: |
||
76 | break; |
||
77 | } |
||
78 | $this->cleanVars[$k] =& $cleanv; |
||
79 | unset($cleanv); |
||
80 | } |
||
81 | |||
82 | return true; |
||
83 | } |
||
84 | |||
85 | public function setBase() |
||
86 | { |
||
87 | $this->isBase = true; |
||
88 | } |
||
89 | |||
90 | /** |
||
91 | * @return mixed |
||
92 | */ |
||
93 | public function hasBase() |
||
94 | { |
||
95 | return $this->isBase; |
||
96 | } |
||
97 | } |
||
98 | |||
99 | /** |
||
100 | * Class Xlanguage |
||
101 | */ |
||
102 | class Xlanguage extends Blanguage |
||
103 | { |
||
104 | /** |
||
105 | * Xlanguage constructor. |
||
106 | */ |
||
107 | public function __construct() |
||
108 | { |
||
109 | parent::__construct(); |
||
110 | $this->table = $this->db->prefix('xlanguage_ext'); |
||
111 | $this->initVar('lang_base', XOBJ_DTYPE_TXTBOX); |
||
112 | $this->isBase = false; |
||
113 | } |
||
114 | } |
||
115 | |||
116 | /** |
||
117 | * Class XlanguageLanguageHandler |
||
118 | */ |
||
119 | class XlanguageLanguageHandler extends XoopsObjectHandler |
||
120 | { |
||
121 | public $cached_config; |
||
122 | |||
123 | public function loadConfig() |
||
124 | { |
||
125 | $this->cached_config = $this->loadFileConfig(); |
||
0 ignored issues
–
show
|
|||
126 | } |
||
127 | |||
128 | /** |
||
129 | * @param int $id |
||
130 | * @param bool $isBase |
||
131 | * |
||
132 | * @return Blanguage|null|Xlanguage |
||
133 | */ |
||
134 | public function get($id, $isBase = true) |
||
135 | { |
||
136 | $lang = null; |
||
137 | $id = (int)$id; |
||
138 | if (!$id) { |
||
139 | return $lang; |
||
140 | } |
||
141 | $prefix = $isBase ? 'xlanguage_base' : 'xlanguage_ext'; |
||
142 | if (isset($this->cached_config[$prefix][$id])) { |
||
143 | $array = $this->cached_config[$prefix][$id]; |
||
144 | } else { |
||
145 | $sql = 'SELECT * FROM ' . $this->db->prefix($prefix) . ' WHERE lang_id=' . $id; |
||
146 | $array = $this->db->fetchArray($this->db->query($sql)); |
||
147 | } |
||
148 | if (!is_array($array) || count($array) == 0) { |
||
149 | return $lang; |
||
150 | } |
||
151 | $lang = $this->create(false, $isBase); |
||
152 | $lang->assignVars($array); |
||
153 | if ($isBase) { |
||
154 | $lang->isBase = true; |
||
155 | } |
||
156 | |||
157 | return $lang; |
||
158 | } |
||
159 | |||
160 | /** |
||
161 | * @param $name |
||
162 | * |
||
163 | * @return Blanguage|null|Xlanguage |
||
164 | */ |
||
165 | public function getByName($name) |
||
166 | { |
||
167 | $lang = null; |
||
168 | if (empty($name) || preg_match("/[^a-zA-Z0-9\_\-]/", $name)) { |
||
169 | return $lang; |
||
170 | } |
||
171 | $isBase = false; |
||
172 | if (isset($this->cached_config['xlanguage_base'][$name])) { |
||
173 | $array = $this->cached_config['xlanguage_base'][$name]; |
||
174 | $isBase = true; |
||
175 | } elseif (isset($this->cached_config['xlanguage_ext'][$name])) { |
||
176 | $array = $this->cached_config['xlanguage_ext'][$name]; |
||
177 | } elseif (!isset($this->cached_config)) { |
||
178 | $sql = 'SELECT * FROM ' . $this->db->prefix('xlanguage_base') . ' WHERE lang_name=\'' . $name . '\''; |
||
179 | $result = $this->db->query($sql); |
||
180 | $array = $this->db->fetchArray($result); |
||
181 | if (!is_array($array) || count($array) == 0) { |
||
182 | $sql = 'SELECT * FROM ' . $this->db->prefix('xlanguage_ext') . ' WHERE lang_name=\'' . $name . '\''; |
||
183 | $result = $this->db->query($sql); |
||
184 | $array = $this->db->fetchArray($result); |
||
185 | if (!is_array($array) || count($array) == 0) { |
||
186 | return $lang; |
||
187 | } |
||
188 | } else { |
||
189 | $isBase = true; |
||
190 | } |
||
191 | } |
||
192 | if (empty($array)) { |
||
193 | return $lang; |
||
194 | } |
||
195 | $lang = $this->create(false, $isBase); |
||
196 | $lang->assignVars($array); |
||
197 | if (!isset($array['lang_base'])) { |
||
198 | $lang->isBase = true; |
||
199 | } |
||
200 | |||
201 | return $lang; |
||
202 | } |
||
203 | |||
204 | /** |
||
205 | * @param bool $isBase |
||
206 | * |
||
207 | * @return array |
||
208 | */ |
||
209 | public function getAll($isBase = true) |
||
210 | { |
||
211 | $prefix = $isBase ? 'xlanguage_base' : 'xlanguage_ext'; |
||
212 | $ret = array(); |
||
213 | if (isset($this->cached_config[$prefix])) { |
||
214 | $array = $this->cached_config[$prefix]; |
||
215 | foreach ($array as $lang_name => $myrow) { |
||
216 | $lang = $this->create(false, $isBase); |
||
217 | $lang->assignVars($myrow); |
||
218 | $ret[$myrow['lang_name']] =& $lang; |
||
219 | unset($lang); |
||
220 | } |
||
221 | } elseif (!isset($this->cached_config)) { |
||
222 | $sql = 'SELECT * FROM ' . $this->db->prefix($prefix); |
||
223 | $result = $this->db->query($sql); |
||
224 | while ($myrow = $this->db->fetchArray($result)) { |
||
225 | $lang = $this->create(false, $isBase); |
||
226 | $lang->assignVars($myrow); |
||
227 | $ret[$myrow['lang_name']] =& $lang; |
||
228 | unset($lang); |
||
229 | } |
||
230 | } |
||
231 | |||
232 | return $ret; |
||
233 | } |
||
234 | |||
235 | /** |
||
236 | * @return array |
||
237 | */ |
||
238 | public function getAllList() |
||
239 | { |
||
240 | $baseArray = $this->getAll(); |
||
241 | |||
242 | $extArray = $this->getAll(false); |
||
243 | $ret = array(); |
||
244 | if (is_array($baseArray) && count($baseArray) > 0) { |
||
245 | foreach ($baseArray as $base) { |
||
246 | $ret[$base->getVar('lang_name')]['base'] = $base; |
||
247 | unset($base); |
||
248 | } |
||
249 | } |
||
250 | if (is_array($extArray) && count($extArray) > 0) { |
||
251 | foreach ($extArray as $ext) { |
||
252 | $ret[$ext->getVar('lang_base')]['ext'][] = $ext; |
||
253 | unset($ext); |
||
254 | } |
||
255 | } |
||
256 | |||
257 | return $ret; |
||
258 | } |
||
259 | |||
260 | /** |
||
261 | * @param bool $isNew |
||
262 | * @param bool $isBase |
||
263 | * |
||
264 | * @return Blanguage|Xlanguage |
||
265 | */ |
||
266 | public function create($isNew = true, $isBase = true) |
||
267 | { |
||
268 | if ($isBase) { |
||
269 | $lang = new Blanguage(); |
||
270 | $lang->isBase = true; |
||
271 | } else { |
||
272 | $lang = new Xlanguage(); |
||
273 | } |
||
274 | if ($isNew) { |
||
275 | $lang->setNew(); |
||
276 | } |
||
277 | |||
278 | return $lang; |
||
279 | } |
||
280 | |||
281 | /** |
||
282 | * @param XoopsObject $object |
||
283 | * @return bool |
||
284 | * @internal param object $lang |
||
285 | * |
||
286 | */ |
||
287 | public function insert(XoopsObject $object)//insert(&$lang) |
||
288 | { |
||
289 | $lang = $object; |
||
290 | if (!$lang->isDirty()) { |
||
291 | return true; |
||
292 | } |
||
293 | if (!$lang->cleanVars()) { |
||
294 | return false; |
||
295 | } |
||
296 | $lang->prepareVars(); |
||
297 | foreach ($lang->cleanVars as $k => $v) { |
||
298 | ${$k} = $v; |
||
299 | } |
||
300 | |||
301 | if ($lang->isNew()) { |
||
302 | $var_array = array( |
||
303 | 'lang_id', |
||
304 | 'weight', |
||
305 | 'lang_name', |
||
306 | 'lang_desc', |
||
307 | 'lang_code', |
||
308 | 'lang_charset', |
||
309 | 'lang_image', |
||
310 | 'lang_base' |
||
311 | ); |
||
312 | View Code Duplication | if ($lang->isBase) { |
|
313 | $var_array = array( |
||
314 | 'lang_id', |
||
315 | 'weight', |
||
316 | 'lang_name', |
||
317 | 'lang_desc', |
||
318 | 'lang_code', |
||
319 | 'lang_charset', |
||
320 | 'lang_image' |
||
321 | ); |
||
322 | } |
||
323 | $lang_id = $this->db->genId($lang->table . '_lang_id_seq'); |
||
324 | foreach ($var_array as $var) { |
||
325 | $val_array[] = ${$var}; |
||
326 | } |
||
327 | $sql = 'INSERT INTO ' . $lang->table . ' (' . implode(',', $var_array) . ') VALUES (' . implode(',', $val_array) . ')'; |
||
328 | View Code Duplication | if (!$result = $this->db->queryF($sql)) { |
|
329 | xoops_error('Insert language error:' . $sql); |
||
330 | |||
331 | return false; |
||
332 | } |
||
333 | if ($lang_id == 0) { |
||
334 | $lang_id = $this->db->getInsertId(); |
||
335 | } |
||
336 | $lang->setVar('lang_id', $lang_id); |
||
337 | } else { |
||
338 | $var_array = array( |
||
339 | 'weight', |
||
340 | 'lang_name', |
||
341 | 'lang_desc', |
||
342 | 'lang_code', |
||
343 | 'lang_charset', |
||
344 | 'lang_image', |
||
345 | 'lang_base' |
||
346 | ); |
||
347 | View Code Duplication | if ($lang->isBase) { |
|
348 | $var_array = array('weight', 'lang_name', 'lang_desc', 'lang_code', 'lang_charset', 'lang_image'); |
||
349 | } |
||
350 | $set_array = array(); |
||
351 | foreach ($var_array as $var) { |
||
352 | $set_array[] = "$var = " . ${$var}; |
||
353 | } |
||
354 | $set_string = implode(',', $set_array); |
||
355 | $sql = 'UPDATE ' . $lang->table . ' SET ' . $set_string . ' WHERE lang_id = ' . $lang->getVar('lang_id'); |
||
356 | View Code Duplication | if (!$result = $this->db->queryF($sql)) { |
|
357 | xoops_error('update language error:' . $sql); |
||
358 | |||
359 | return false; |
||
360 | } |
||
361 | } |
||
362 | $this->createConfig(); |
||
363 | |||
364 | return $lang->getVar('lang_id'); |
||
365 | } |
||
366 | |||
367 | /** |
||
368 | * @param XoopsObject $lang |
||
369 | * @return bool |
||
370 | * @internal param object $lang |
||
371 | * |
||
372 | */ |
||
373 | public function delete(XoopsObject $lang)//delete(&$lang) |
||
374 | { |
||
375 | if (!is_object($lang) || !$lang->getVar('lang_id')) { |
||
376 | return true; |
||
377 | } |
||
378 | $sql = 'DELETE FROM ' . $lang->table . ' WHERE lang_id= ' . $lang->getVar('lang_id'); |
||
379 | if (!$result = $this->db->query($sql)) { |
||
380 | return false; |
||
381 | } |
||
382 | $this->createConfig(); |
||
383 | |||
384 | return true; |
||
385 | } |
||
386 | |||
387 | /** |
||
388 | * @return array |
||
389 | */ |
||
390 | public function getXoopsLangList() |
||
391 | { |
||
392 | return XoopsLists::getLangList(); |
||
393 | } |
||
394 | |||
395 | /** |
||
396 | * @return bool |
||
397 | */ |
||
398 | public function createConfig() |
||
399 | { |
||
400 | $file_config = XLANGUAGE_CONFIG_FILE; |
||
401 | @unlink($file_config); |
||
402 | if (!$fp = fopen($file_config, 'w')) { |
||
403 | echo '<br> the config file can not be created: ' . $file_config; |
||
404 | |||
405 | return false; |
||
406 | } |
||
407 | |||
408 | $file_content = '<?php'; |
||
409 | unset($this->cached_config); |
||
410 | $baseArray = $this->getAll(); |
||
411 | if (is_array($baseArray) && count($baseArray) > 0) { |
||
412 | $file_content .= "\n \$" . XLANGUAGE_CONFIG_VAR . "['xlanguage_base'] = array("; |
||
413 | foreach ($baseArray as $lang) { |
||
414 | $file_content .= "\n \"" . $lang->getVar('lang_name') . '"=>array('; |
||
415 | $file_content .= "\n \"lang_id\"=>" . $lang->getVar('lang_id') . ','; |
||
416 | $file_content .= "\n \"weight\"=>" . $lang->getVar('weight') . ','; |
||
417 | $file_content .= "\n \"lang_name\"=>\"" . $lang->getVar('lang_name') . '",'; |
||
418 | $file_content .= "\n \"lang_desc\"=>\"" . $lang->getVar('lang_desc') . '",'; |
||
419 | $file_content .= "\n \"lang_code\"=>\"" . $lang->getVar('lang_code') . '",'; |
||
420 | $file_content .= "\n \"lang_charset\"=>\"" . $lang->getVar('lang_charset') . '",'; |
||
421 | $file_content .= "\n \"lang_image\"=>\"" . $lang->getVar('lang_image') . '"'; |
||
422 | $file_content .= "\n ),"; |
||
423 | } |
||
424 | $file_content .= "\n );"; |
||
425 | } |
||
426 | |||
427 | $extArray = $this->getAll(false); |
||
428 | if (is_array($extArray) && count($extArray) > 0) { |
||
429 | $file_content .= "\n \$" . XLANGUAGE_CONFIG_VAR . "['xlanguage_ext'] = array("; |
||
430 | foreach ($extArray as $lang) { |
||
431 | $file_content .= "\n \"" . $lang->getVar('lang_name') . '"=>array('; |
||
432 | $file_content .= "\n \"lang_id\"=>" . $lang->getVar('lang_id') . ','; |
||
433 | $file_content .= "\n \"weight\"=>" . $lang->getVar('weight') . ','; |
||
434 | $file_content .= "\n \"lang_name\"=>\"" . $lang->getVar('lang_name') . '",'; |
||
435 | $file_content .= "\n \"lang_desc\"=>\"" . $lang->getVar('lang_desc') . '",'; |
||
436 | $file_content .= "\n \"lang_code\"=>\"" . $lang->getVar('lang_code') . '",'; |
||
437 | $file_content .= "\n \"lang_charset\"=>\"" . $lang->getVar('lang_charset') . '",'; |
||
438 | $file_content .= "\n \"lang_image\"=>\"" . $lang->getVar('lang_image') . '",'; |
||
439 | $file_content .= "\n \"lang_base\"=>\"" . $lang->getVar('lang_base') . '"'; |
||
440 | $file_content .= "\n ),"; |
||
441 | } |
||
442 | $file_content .= "\n );"; |
||
443 | } |
||
444 | |||
445 | $file_content .= "\n?>"; |
||
446 | fwrite($fp, $file_content); |
||
447 | fclose($fp); |
||
448 | |||
449 | return true; |
||
450 | } |
||
451 | |||
452 | /** |
||
453 | * @return null |
||
454 | */ |
||
455 | public function loadFileConfig() |
||
456 | { |
||
457 | $file_config = XLANGUAGE_CONFIG_FILE; |
||
458 | if (!file_exists($file_config)) { |
||
459 | $this->createConfig(); |
||
460 | } |
||
461 | if (!is_readable($file_config)) { |
||
462 | $config = null; |
||
463 | |||
464 | return $config; |
||
465 | } else { |
||
466 | include $file_config; |
||
467 | if (isset(${XLANGUAGE_CONFIG_VAR})) { |
||
468 | return ${XLANGUAGE_CONFIG_VAR}; |
||
469 | } else { |
||
470 | return false; |
||
471 | } |
||
472 | } |
||
473 | } |
||
474 | } |
||
475 |
This check looks for function or method calls that always return null and whose return value is assigned to a variable.
The method
getObject()
can return nothing but null, so it makes no sense to assign that value to a variable.The reason is most likely that a function or method is imcomplete or has been reduced for debug purposes.