XCL Web Application Platform 2.5.0
The XoopsCube Legacy Project
Loading...
Searching...
No Matches
object.php
1<?php
12
13
14define('XOBJ_DTYPE_STRING', 1);
15define('XOBJ_DTYPE_TXTBOX', 1);
16define('XOBJ_DTYPE_TEXT', 2);
17define('XOBJ_DTYPE_TXTAREA', 2);
18define('XOBJ_DTYPE_INT', 3);
19define('XOBJ_DTYPE_URL', 4);
20define('XOBJ_DTYPE_EMAIL', 5);
21define('XOBJ_DTYPE_ARRAY', 6);
22define('XOBJ_DTYPE_OTHER', 7);
23define('XOBJ_DTYPE_SOURCE', 8);
24define('XOBJ_DTYPE_STIME', 9);
25define('XOBJ_DTYPE_MTIME', 10);
26define('XOBJ_DTYPE_LTIME', 11);
27define('XOBJ_DTYPE_FLOAT', 12);
28define('XOBJ_DTYPE_BOOL', 13);
30
35{
36 public function setNew()
37 {
38 }
39
40 public function unsetNew()
41 {
42 }
43
47 public function isNew()
48 {
49 }
50
51 public function initVar($key, $data_type, $default, $required, $size)
52 {
53 }
54
60 public function assignVars($values)
61 {
62 }
63
70 public function set($key, $value)
71 {
72 }
73
74 public function get($key)
75 {
76 }
77
83 public function getShow($key)
84 {
85 }
86}
87
88
97{
98
105 public $vars = [];
106
113 public $cleanVars = [];
114
121 public $_isNew = false;
122
129 public $_isDirty = false;
130
137 public $_errors = [];
138
144 public $_filters = [];
145
152 public function __construct()
153 {
154 }
155
161 public function setNew()
162 {
163 $this->_isNew = true;
164 }
165 public function unsetNew()
166 {
167 $this->_isNew = false;
168 }
169 public function isNew()
170 {
171 return $this->_isNew;
172 }
173
174
181 public function setDirty()
182 {
183 $this->_isDirty = true;
184 }
185 public function unsetDirty()
186 {
187 $this->_isDirty = false;
188 }
189 public function isDirty()
190 {
191 return $this->_isDirty;
192 }
194
206 public function initVar($key, $data_type, $value = null, $required = false, $maxlength = null, $options = '')
207 {
208 $this->vars[$key] = ['value' => $value, 'required' => $required, 'data_type' => $data_type, 'maxlength' => $maxlength, 'changed' => false, 'options' => $options];
209 }
210
218 public function assignVar($key, $value)
219 {
220 $vars = &$this->vars;
221 if (isset($value) && isset($vars[$key])) {
222 $vars[$key]['value'] =& $value;
223 }
224 }
225
232 public function assignVars($var_arr)
233 {
234 $vars = &$this->vars;
235 foreach ($var_arr as $key => $value) {
236 if (isset($value) && isset($vars[$key])) {
237 $vars[$key]['value'] = $value;
238 }
239 }
240 }
241
250 public function setVar($key, $value, $not_gpc = false)
251 {
252 if (!empty($key) && isset($value) && isset($this->vars[$key])) {
253 $var =& $this->vars[$key];
254 $var['value'] =& $value;
255 $var['not_gpc'] = $not_gpc;
256 $var['changed'] = true;
257 $this->setDirty();
258 }
259 }
260
268 public function setVars($var_arr, $not_gpc = false)
269 {
270 foreach ($var_arr as $key => $value) {
271 $this->setVar($key, $value, $not_gpc);
272 }
273 }
274
287 public function setFormVars($var_arr=null, $pref='xo_', $not_gpc=false)
288 {
289 $len = strlen($pref);
290 foreach ($var_arr as $key => $value) {
291 if ($pref == substr($key, 0, $len)) {
292 $this->setVar(substr($key, $len), $value, $not_gpc);
293 }
294 }
295 }
296
297
304 public function &getVars()
305 {
306 return $this->vars;
307 }
308
317 public function &getVar($key, $format = 's')
318 {
319 $var =& $this->vars[$key];
320 $ret = $var['value'];
321 switch ($var['data_type']) {
322
323 case XOBJ_DTYPE_TXTBOX:
324 switch (strtolower($format)) {
325 case 's':
326 case 'show':
327 case 'e':
328 case 'edit':
330 return $ts->htmlSpecialChars($ret);
331 case 'p':
332 case 'preview':
333 case 'f':
334 case 'formpreview':
336 return $ts->htmlSpecialChars($ts->stripSlashesGPC($ret));
337 default:
338 return $ret;
339 }
340 case XOBJ_DTYPE_TXTAREA:
341 switch (strtolower($format)) {
342 case 's':
343 case 'show':
345 $vars =&$this->vars;
346 $html = !empty($vars['dohtml']['value']) ? 1 : 0;
347 $xcode = (!isset($vars['doxcode']['value']) || 1 == $vars['doxcode']['value']) ? 1 : 0;
348 $smiley = (!isset($vars['dosmiley']['value']) || 1 == $vars['dosmiley']['value']) ? 1 : 0;
349 $image = (!isset($vars['doimage']['value']) || 1 == $vars['doimage']['value']) ? 1 : 0;
350 $br = (!isset($vars['dobr']['value']) || 1 == $vars['dobr']['value']) ? 1 : 0;
351 return $ts->displayTarea($ret, $html, $smiley, $xcode, $image, $br);
352 case 'e':
353 case 'edit':
354 $ret = htmlspecialchars($ret, ENT_QUOTES);
355 return $ret;
356 case 'p':
357 case 'preview':
359 $vars =&$this->vars;
360 $html = !empty($vars['dohtml']['value']) ? 1 : 0;
361 $xcode = (!isset($vars['doxcode']['value']) || 1 == $vars['doxcode']['value']) ? 1 : 0;
362 $smiley = (!isset($vars['dosmiley']['value']) || 1 == $vars['dosmiley']['value']) ? 1 : 0;
363 $image = (!isset($vars['doimage']['value']) || 1 == $vars['doimage']['value']) ? 1 : 0;
364 $br = (!isset($vars['dobr']['value']) || 1 == $vars['dobr']['value']) ? 1 : 0;
365 return $ts->previewTarea($ret, $html, $smiley, $xcode, $image, $br);
366 case 'f':
367 case 'formpreview':
369 return htmlspecialchars($ts->stripSlashesGPC($ret), ENT_QUOTES);
370 default:
371 return $ret;
372 }
373 case XOBJ_DTYPE_ARRAY:
374 $ret = unserialize($ret);
375 return $ret;
376 case XOBJ_DTYPE_SOURCE:
377 switch (strtolower($format)) {
378 case 'e':
379 case 'edit':
380 return htmlspecialchars($ret, ENT_QUOTES);
381 case 'p':
382 case 'preview':
384 return $ts->stripSlashesGPC($ret);
385 case 'f':
386 case 'formpreview':
388 $ret = htmlspecialchars($ts->stripSlashesGPC($ret), ENT_QUOTES);
389 return $ret;
390 default:
391 return $ret;
392 }
393 default:
394 if ('' != $var['options'] && '' != $ret) {
395 switch (strtolower($format)) {
396 case 's':
397 case 'show':
398 $selected = explode('|', $ret);
399 $options = explode('|', $var['options']);
400 $i = 1;
401 $ret = [];
402 foreach ($options as $op) {
403 if (in_array($i, $selected)) {
404 $ret[] = $op;
405 }
406 $i++;
407 }
408 return implode(', ', $ret);
409 case 'e':
410 case 'edit':
411 return explode('|', $ret);
412 default:
413 return $ret;
414 }
415 }
416 break;
417 }
418 return $ret;
419 }
420
421 public function getShow($key)
422 {
423 return $this->getVar($key, 's');
424 }
425
432 public function set($key, $value)
433 {
434 $this->setVar($key, $value, true);
435 }
436
437 public function get($key)
438 {
439 // ! Fix PHP7 Undefined index, variable not initialized with Null coalesce operator @gigamaster
440 // The coalesce, or ??, operator is added, which returns the result of its first operand if it exists and is not NULL,
441 // or else its second operand. This means the $_GET['mykey'] ?? "" is completely safe and will not raise an E_NOTICE.
442 // https://wiki.php.net/rfc/isset_ternary
443 return $this->vars[$key]['value'] ?? '';
444 }
445
452 public function getProperty($key)
453 {
454 return $this->vars[$key]['value'];
455 }
456
460 public function getProperties()
461 {
462 $ret= [];
463 foreach (array_keys($this->vars) as $key) {
464 $ret[$key]=$this->vars[$key]['value'];
465 }
466 return $ret;
467 }
468
476 public function cleanVars()
477 {
479 foreach ($this->vars as $k => $v) {
480 $cleanv = $v['value'];
481 if (!$v['changed']) {
482 } else {
483 $cleanv = is_string($cleanv) ? trim($cleanv) : $cleanv;
484 switch ($v['data_type']) {
485 case XOBJ_DTYPE_TXTBOX:
486 if ($v['required'] && '0' != $cleanv && '' == $cleanv) {
487 $this->setErrors("$k is required.");
488 break;
489 }
490 if (isset($v['maxlength']) && strlen($cleanv) > (int)$v['maxlength']) {
491 $this->setErrors("$k must be shorter than ".(int)$v['maxlength'] . ' characters.');
492 break;
493 }
494 if (!$v['not_gpc']) {
495 $cleanv = $ts->stripSlashesGPC($ts->censorString($cleanv));
496 } else {
497 $cleanv = $ts->censorString($cleanv);
498 }
499 break;
500 case XOBJ_DTYPE_TXTAREA:
501 if ($v['required'] && '0' != $cleanv && '' == $cleanv) {
502 $this->setErrors("$k is required.");
503 break;
504 }
505 if (!$v['not_gpc']) {
506 $cleanv = $ts->stripSlashesGPC($ts->censorString($cleanv));
507 } else {
508 $cleanv = $ts->censorString($cleanv);
509 }
510 break;
511 case XOBJ_DTYPE_SOURCE:
512 if (!$v['not_gpc']) {
513 $cleanv = $ts->stripSlashesGPC($cleanv);
514 } else {
515 $cleanv = $cleanv;
516 }
517 break;
518
519 case XOBJ_DTYPE_INT:
520 $cleanv = (int)$cleanv;
521 break;
522
523 case XOBJ_DTYPE_FLOAT:
524 $cleanv = (float)$cleanv;
525 break;
526
527 case XOBJ_DTYPE_BOOL:
528 $cleanv = $cleanv ? 1 : 0;
529 break;
530
531 case XOBJ_DTYPE_EMAIL:
532 if ($v['required'] && '' == $cleanv) {
533 $this->setErrors("$k is required.");
534 break;
535 }
536 if ('' != $cleanv && !preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+([\.][a-z0-9-]+)+$/i", $cleanv)) {
537 $this->setErrors('Invalid Email');
538 break;
539 }
540 if (!$v['not_gpc']) {
541 $cleanv = $ts->stripSlashesGPC($cleanv);
542 }
543 break;
544 case XOBJ_DTYPE_URL:
545 if ($v['required'] && '' == $cleanv) {
546 $this->setErrors("$k is required.");
547 break;
548 }
549 if ('' != $cleanv && !preg_match("/^http[s]*:\/\//i", $cleanv)) {
550 $cleanv = 'https://' . $cleanv;
551 }
552 if (!$v['not_gpc']) {
553 $cleanv =& $ts->stripSlashesGPC($cleanv);
554 }
555 break;
556 case XOBJ_DTYPE_ARRAY:
557 $cleanv = serialize($cleanv);
558 break;
559 case XOBJ_DTYPE_STIME:
560 case XOBJ_DTYPE_MTIME:
561 case XOBJ_DTYPE_LTIME:
562 $cleanv = !is_string($cleanv) ? (int)$cleanv : strtotime($cleanv);
563 break;
564 default:
565 break;
566 }
567 }
568 $this->cleanVars[$k] =& $cleanv;
569 unset($cleanv);
570 }
571 if (count($this->_errors) > 0) {
572 return false;
573 }
574 $this->unsetDirty();
575 return true;
576 }
577
584 public function registerFilter($filtername)
585 {
586 $this->_filters[] = $filtername;
587 }
588
594 public function _loadFilters()
595 {
596 //include_once XOOPS_ROOT_PATH.'/class/filters/filter.php';
597 //foreach ($this->_filters as $f) {
598 // include_once XOOPS_ROOT_PATH.'/class/filters/'.strtolower($f).'php';
599 //}
600 }
601
608 public function &xoopsClone()
609 {
610 $class = get_class($this);
611 $clone =new $class();
612 foreach ($this->vars as $k => $v) {
613 $clone->assignVar($k, $v['value']);
614 }
615 // need this to notify the handler class that this is a newly created object
616 $clone->setNew();
617 return $clone;
618 }
619
626 public function setErrors($err_str)
627 {
628 $this->_errors[] = trim($err_str);
629 }
630
637 public function getErrors()
638 {
639 return $this->_errors;
640 }
641
648 public function getHtmlErrors()
649 {
650 $ret = '<h4>Errors</h4>';
651 if (!empty($this->_errors)) {
652 foreach ($this->_errors as $error) {
653 $ret .= $error.'<br>';
654 }
655 } else {
656 $ret .= 'None<br>';
657 }
658 return $ret;
659 }
660}
661
673{
674
682 public $db;
683
684 //
691 public function __construct(&$db)
692 {
693 $this->db =& $db;
694 }
695
701 public function &create()
702 {
703 }
704
711 public function &get($int_id)
712 {
713 }
714
721 public function insert(&$object)
722 {
723 }
724
731 public function delete(&$object)
732 {
733 }
734}
assignVars($values)
Definition object.php:60
insert(&$object)
Definition object.php:721
setVar($key, $value, $not_gpc=false)
Definition object.php:250
getHtmlErrors()
Definition object.php:648
initVar($key, $data_type, $value=null, $required=false, $maxlength=null, $options='')
Definition object.php:206
registerFilter($filtername)
Definition object.php:584
& getVar($key, $format='s')
Definition object.php:317
assignVar($key, $value)
Definition object.php:218
assignVars($var_arr)
Definition object.php:232
& getVars()
Definition object.php:304
& xoopsClone()
Definition object.php:608
setVars($var_arr, $not_gpc=false)
Definition object.php:268
setFormVars($var_arr=null, $pref='xo_', $not_gpc=false)
Definition object.php:287
setErrors($err_str)
Definition object.php:626
getShow($key)
Definition object.php:421
getProperties()
Definition object.php:460
getProperty($key)
Definition object.php:452