PluginProbe
VikBooking Hotel Booking Engine & PMS / trunk
VikBooking Hotel Booking Engine & PMS vtrunk
1.8.15 1.8.14 1.8.13 1.8.12 1.8.11 1.8.10 1.8.9 1.8.6 1.8.7 1.8.8 trunk 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.7.3 All 36 releases
vikbooking / libraries / adapter / application / object.php

object.php in VikBooking Hotel Booking Engine & PMS trunk, at libraries/adapter/application/object.php

245 lines 5.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @package VikWP - Libraries
4 * @subpackage adapter.application
5 * @author E4J s.r.l.
6 * @copyright Copyright (C) 2023 E4J s.r.l. All Rights Reserved.
7 * @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
8 * @link https://vikwp.com
9 */
10
11 // No direct access
12 defined('ABSPATH') or die('No script kiddies please!');
13
14 /**
15 * Object adapter class.
16 * This class handles simple and smart functions for objects.
17 *
18 * @since 10.0
19 */
20 #[\AllowDynamicProperties]
21 class JObject
22 {
23 /**
24 * An array of error messages or Exception objects.
25 *
26 * @var array
27 */
28 protected $_errors = [];
29
30 /**
31 * Class constructor, overridden in descendant classes.
32 *
33 * @param mixed $properties Either an associative array or another
34 * object to set the initial properties of the object.
35 */
36 public function __construct($properties = null)
37 {
38 if ($properties !== null)
39 {
40 $this->setProperties($properties);
41 }
42 }
43
44 /**
45 * Sets a default value if not already assigned
46 *
47 * @param string $property The name of the property.
48 * @param mixed $default The default value.
49 *
50 * @return mixed Previous value of the property.
51 *
52 * @uses get()
53 * @uses set()
54 */
55 public function def($property, $default = null)
56 {
57 $value = $this->get($property, $default);
58
59 return $this->set($property, $value);
60 }
61
62 /**
63 * Returns a property of the object or the default value if the property is not set.
64 *
65 * @param string $property The name of the property.
66 * @param mixed $default The default value.
67 *
68 * @return mixed The value of the property.
69 */
70 public function get($property, $default = null)
71 {
72 /**
73 * Return default value also in case the property is set
74 * and owns a NULL value or an empty string.
75 *
76 * @since 10.1.27
77 */
78 if (isset($this->$property) && !is_null($this->$property) && $this->$property !== '')
79 {
80 return $this->$property;
81 }
82
83 return $default;
84 }
85
86 /**
87 * Returns an associative array of object properties.
88 *
89 * @param boolean $public If true, returns only the public properties.
90 *
91 * @return array The internal properties.
92 */
93 public function getProperties($public = true)
94 {
95 $vars = get_object_vars($this);
96
97 if ($public)
98 {
99 foreach ($vars as $key => $value)
100 {
101 if (substr($key, 0, 1) === '_')
102 {
103 unset($vars[$key]);
104 }
105 }
106
107 /**
108 * Collect all none public properties of the current class and it's parents.
109 * This way, protected and private properties won't be returned.
110 *
111 * @since 10.1.68
112 */
113 $nonePublicProperties = [];
114 $reflection = new ReflectionObject($this);
115
116 do {
117 $nonePublicProperties = array_merge(
118 $reflection->getProperties(ReflectionProperty::IS_PRIVATE | ReflectionProperty::IS_PROTECTED),
119 $nonePublicProperties
120 );
121 } while ($reflection = $reflection->getParentClass());
122
123 // unset all none public properties, this is needed as get_object_vars returns now all vars
124 // from the current object and not only the CMSObject and the public ones from the inheriting classes
125 foreach ($nonePublicProperties as $prop)
126 {
127 if (array_key_exists($prop->getName(), $vars))
128 {
129 unset($vars[$prop->getName()]);
130 }
131 }
132 }
133
134 return $vars;
135 }
136
137 /**
138 * Modifies a property of the object, creating it if it does not already exist.
139 *
140 * @param string $property The name of the property.
141 * @param mixed $value The value of the property to set.
142 *
143 * @return mixed Previous value of the property.
144 *
145 * @uses get()
146 */
147 public function set($property, $value = null)
148 {
149 $previous = $this->get($property, null);
150 $this->$property = $value;
151
152 return $previous;
153 }
154
155 /**
156 * Set the object properties based on a named array/hash.
157 *
158 * @param mixed $properties Either an associative array or another object.
159 *
160 * @return boolean True on success, otherwise false.
161 *
162 * @uses set()
163 */
164 public function setProperties($properties)
165 {
166 if (is_array($properties) || is_object($properties))
167 {
168 foreach ((array) $properties as $k => $v)
169 {
170 // Use the set function which might be overridden.
171 $this->set($k, $v);
172 }
173
174 return true;
175 }
176
177 return false;
178 }
179
180 /**
181 * Get the most recent error message.
182 *
183 * @param integer $i Option error index.
184 * @param boolean $toString Indicates if the exception should return the error message.
185 *
186 * @return mixed The error message or the exception object.
187 */
188 public function getError($i = null, $toString = true)
189 {
190 // find the error
191 if ($i === null)
192 {
193 // default, return the last message
194 $error = end($this->_errors);
195 }
196 else if (!array_key_exists($i, $this->_errors))
197 {
198 // if $i has been specified but does not exist, return false
199 return false;
200 }
201 else
202 {
203 $error = $this->_errors[$i];
204 }
205
206 // check if only the string is requested
207 if ($error instanceof Exception && $toString)
208 {
209 return $error->getMessage();
210 }
211
212 return $error;
213 }
214
215 /**
216 * Return all errors, if any.
217 *
218 * @return array Array of error messages or exceptions.
219 */
220 public function getErrors()
221 {
222 return $this->_errors;
223 }
224
225 /**
226 * Pushes an error message.
227 *
228 * @param mixed $error The error string or an exception.
229 * If $error is an instance of WP_Error, it will
230 * be adapted to a generic exception.
231 *
232 * @return void
233 */
234 public function setError($error)
235 {
236 if ($error instanceof WP_Error)
237 {
238 // adapt WP_Error object
239 $error = new Exception($error->get_error_message(), (int) $error->get_error_code());
240 }
241
242 $this->_errors[] = $error;
243 }
244 }
245