@@ -13,75 +13,75 @@ |
||
13 | 13 | class OptionEngine |
14 | 14 | { |
15 | 15 | |
16 | - /** |
|
17 | - * @var bool |
|
18 | - */ |
|
19 | - private $is_network_option; |
|
16 | + /** |
|
17 | + * @var bool |
|
18 | + */ |
|
19 | + private $is_network_option; |
|
20 | 20 | |
21 | - /** |
|
22 | - * @var int |
|
23 | - */ |
|
24 | - private $network_ID; |
|
21 | + /** |
|
22 | + * @var int |
|
23 | + */ |
|
24 | + private $network_ID; |
|
25 | 25 | |
26 | 26 | |
27 | - /** |
|
28 | - * @param bool $is_network_option |
|
29 | - */ |
|
30 | - public function __construct(bool $is_network_option = false) |
|
31 | - { |
|
32 | - $this->is_network_option = $is_network_option; |
|
33 | - $this->network_ID = get_current_network_id(); |
|
34 | - } |
|
27 | + /** |
|
28 | + * @param bool $is_network_option |
|
29 | + */ |
|
30 | + public function __construct(bool $is_network_option = false) |
|
31 | + { |
|
32 | + $this->is_network_option = $is_network_option; |
|
33 | + $this->network_ID = get_current_network_id(); |
|
34 | + } |
|
35 | 35 | |
36 | 36 | |
37 | - /** |
|
38 | - * @param string $option_name |
|
39 | - * @param mixed $default_value |
|
40 | - * @return false|mixed|void |
|
41 | - */ |
|
42 | - public function getOption(string $option_name, $default_value) |
|
43 | - { |
|
44 | - return $this->is_network_option |
|
45 | - ? get_network_option($this->network_ID, $option_name, $default_value) |
|
46 | - : get_option($option_name, $default_value); |
|
47 | - } |
|
37 | + /** |
|
38 | + * @param string $option_name |
|
39 | + * @param mixed $default_value |
|
40 | + * @return false|mixed|void |
|
41 | + */ |
|
42 | + public function getOption(string $option_name, $default_value) |
|
43 | + { |
|
44 | + return $this->is_network_option |
|
45 | + ? get_network_option($this->network_ID, $option_name, $default_value) |
|
46 | + : get_option($option_name, $default_value); |
|
47 | + } |
|
48 | 48 | |
49 | 49 | |
50 | - /** |
|
51 | - * @param string $option_name |
|
52 | - * @param mixed $value |
|
53 | - * @param string $autoload |
|
54 | - * @return bool |
|
55 | - */ |
|
56 | - public function addOption(string $option_name, $value, string $autoload): bool |
|
57 | - { |
|
58 | - return $this->is_network_option |
|
59 | - ? add_network_option($this->network_ID, $option_name, $value) |
|
60 | - : add_option($option_name, $value, '', $autoload); |
|
61 | - } |
|
50 | + /** |
|
51 | + * @param string $option_name |
|
52 | + * @param mixed $value |
|
53 | + * @param string $autoload |
|
54 | + * @return bool |
|
55 | + */ |
|
56 | + public function addOption(string $option_name, $value, string $autoload): bool |
|
57 | + { |
|
58 | + return $this->is_network_option |
|
59 | + ? add_network_option($this->network_ID, $option_name, $value) |
|
60 | + : add_option($option_name, $value, '', $autoload); |
|
61 | + } |
|
62 | 62 | |
63 | 63 | |
64 | - /** |
|
65 | - * @param string $option_name |
|
66 | - * @param mixed $value |
|
67 | - * @return bool |
|
68 | - */ |
|
69 | - public function updateOption(string $option_name, $value): bool |
|
70 | - { |
|
71 | - return $this->is_network_option |
|
72 | - ? update_network_option($this->network_ID, $option_name, $value) |
|
73 | - : update_option($option_name, $value); |
|
74 | - } |
|
64 | + /** |
|
65 | + * @param string $option_name |
|
66 | + * @param mixed $value |
|
67 | + * @return bool |
|
68 | + */ |
|
69 | + public function updateOption(string $option_name, $value): bool |
|
70 | + { |
|
71 | + return $this->is_network_option |
|
72 | + ? update_network_option($this->network_ID, $option_name, $value) |
|
73 | + : update_option($option_name, $value); |
|
74 | + } |
|
75 | 75 | |
76 | 76 | |
77 | - /** |
|
78 | - * @param string $option_name |
|
79 | - * @return bool |
|
80 | - */ |
|
81 | - public function deleteOption(string $option_name): bool |
|
82 | - { |
|
83 | - return $this->is_network_option |
|
84 | - ? delete_network_option($this->network_ID, $option_name) |
|
85 | - : delete_option($option_name); |
|
86 | - } |
|
77 | + /** |
|
78 | + * @param string $option_name |
|
79 | + * @return bool |
|
80 | + */ |
|
81 | + public function deleteOption(string $option_name): bool |
|
82 | + { |
|
83 | + return $this->is_network_option |
|
84 | + ? delete_network_option($this->network_ID, $option_name) |
|
85 | + : delete_option($option_name); |
|
86 | + } |
|
87 | 87 | } |
@@ -17,181 +17,181 @@ |
||
17 | 17 | */ |
18 | 18 | abstract class WordPressOption |
19 | 19 | { |
20 | - const NOT_SET_YET = 'wordpress-option-value-not-yet-set'; |
|
21 | - |
|
22 | - /** |
|
23 | - * WordPress makes it difficult to determine if an option successfully saved or not, |
|
24 | - * which is sometimes really important to know, especially if the information you are saving is critical. |
|
25 | - * The following options allow us to have a better chance of knowing when an update actually failed |
|
26 | - * or when everything is OK but it just didn't update because the value hasn't changed. |
|
27 | - */ |
|
28 | - const UPDATE_SUCCESS = 1; |
|
29 | - |
|
30 | - const UPDATE_NONE = 0; |
|
31 | - |
|
32 | - const UPDATE_ERROR = -1; |
|
33 | - |
|
34 | - /** |
|
35 | - * @var boolean |
|
36 | - */ |
|
37 | - private $autoload = false; |
|
38 | - |
|
39 | - /** |
|
40 | - * @var mixed |
|
41 | - */ |
|
42 | - private $default_value = null; |
|
43 | - |
|
44 | - /** |
|
45 | - * @var string |
|
46 | - */ |
|
47 | - private $option_name = ''; |
|
48 | - |
|
49 | - /** |
|
50 | - * @var mixed |
|
51 | - */ |
|
52 | - private $value = WordPressOption::NOT_SET_YET; |
|
53 | - |
|
54 | - /** |
|
55 | - * @var OptionEngine |
|
56 | - */ |
|
57 | - private $option_engine; |
|
58 | - |
|
59 | - |
|
60 | - /** |
|
61 | - * WordPressOption constructor. |
|
62 | - * |
|
63 | - * @param string $option_name |
|
64 | - * @param mixed $default_value |
|
65 | - * @param bool $autoload if true, will load the option on EVERY request |
|
66 | - * @param bool $is_network_option if true, will save the option to the network as opposed to the current blog |
|
67 | - */ |
|
68 | - public function __construct( |
|
69 | - string $option_name, |
|
70 | - $default_value, |
|
71 | - bool $autoload = false, |
|
72 | - bool $is_network_option = false |
|
73 | - ) { |
|
74 | - $this->setAutoload($autoload); |
|
75 | - $this->setDefaultValue($default_value); |
|
76 | - $this->setOptionName($option_name); |
|
77 | - $this->option_engine = new OptionEngine($is_network_option); |
|
78 | - } |
|
79 | - |
|
80 | - |
|
81 | - /** |
|
82 | - * @param bool|string $autoload |
|
83 | - */ |
|
84 | - public function setAutoload($autoload): void |
|
85 | - { |
|
86 | - $this->autoload = filter_var($autoload, FILTER_VALIDATE_BOOLEAN); |
|
87 | - } |
|
88 | - |
|
89 | - |
|
90 | - /** |
|
91 | - * @param mixed $default_value |
|
92 | - */ |
|
93 | - public function setDefaultValue($default_value): void |
|
94 | - { |
|
95 | - $this->default_value = $default_value; |
|
96 | - } |
|
97 | - |
|
98 | - |
|
99 | - /** |
|
100 | - * @param string $option_name |
|
101 | - */ |
|
102 | - public function setOptionName(string $option_name): void |
|
103 | - { |
|
104 | - $this->option_name = sanitize_key($option_name); |
|
105 | - } |
|
106 | - |
|
107 | - |
|
108 | - /** |
|
109 | - * @return string |
|
110 | - */ |
|
111 | - public function optionExists(): string |
|
112 | - { |
|
113 | - return $this->option_engine->getOption( |
|
114 | - $this->option_name, |
|
115 | - WordPressOption::NOT_SET_YET |
|
116 | - ) !== WordPressOption::NOT_SET_YET; |
|
117 | - } |
|
118 | - |
|
119 | - |
|
120 | - /** |
|
121 | - * @return string |
|
122 | - */ |
|
123 | - public function getOptionName(): string |
|
124 | - { |
|
125 | - return $this->option_name; |
|
126 | - } |
|
127 | - |
|
128 | - |
|
129 | - /** |
|
130 | - * @return false|mixed|void |
|
131 | - */ |
|
132 | - public function loadOption() |
|
133 | - { |
|
134 | - if ($this->value === WordPressOption::NOT_SET_YET) { |
|
135 | - $this->value = $this->option_engine->getOption($this->option_name, $this->default_value); |
|
136 | - } |
|
137 | - return $this->value; |
|
138 | - } |
|
139 | - |
|
140 | - |
|
141 | - /** |
|
142 | - * @param $value |
|
143 | - * @return int |
|
144 | - */ |
|
145 | - public function updateOption($value): int |
|
146 | - { |
|
147 | - // don't update if value has not changed since last update |
|
148 | - if ($this->valueIsUnchanged($value)) { |
|
149 | - return WordPressOption::UPDATE_NONE; |
|
150 | - } |
|
151 | - $this->value = $value; |
|
152 | - // because the options for updating differ when adding an option for the first time |
|
153 | - // we use the WordPressOption::NOT_SET_YET to determine if things already exist in the db |
|
154 | - $updated = $this->optionExists() |
|
155 | - ? $this->option_engine->updateOption($this->option_name, $this->value) |
|
156 | - : $this->option_engine->addOption($this->option_name, $this->value, $this->autoload()); |
|
157 | - |
|
158 | - if ($updated) { |
|
159 | - return WordPressOption::UPDATE_SUCCESS; |
|
160 | - } |
|
161 | - return WordPressOption::UPDATE_ERROR; |
|
162 | - } |
|
163 | - |
|
164 | - |
|
165 | - private function valueIsUnchanged($value): bool |
|
166 | - { |
|
167 | - if (is_array($value) && is_array($this->value)) { |
|
168 | - $diff = EEH_Array::array_diff_recursive($value, $this->value); |
|
169 | - // $diff = array_diff($value, $this->value); |
|
170 | - return empty($diff); |
|
171 | - } |
|
172 | - // emulate WP's method for checking equality |
|
173 | - return $value === $this->value && maybe_serialize($value) === maybe_serialize($this->value); |
|
174 | - } |
|
175 | - |
|
176 | - |
|
177 | - /** |
|
178 | - * @return string |
|
179 | - */ |
|
180 | - private function autoload(): string |
|
181 | - { |
|
182 | - return $this->autoload ? 'yes' : 'no'; |
|
183 | - } |
|
184 | - |
|
185 | - |
|
186 | - /** |
|
187 | - * Deletes the option from the database |
|
188 | - * for the rest of the request |
|
189 | - * |
|
190 | - * @return bool |
|
191 | - * @since $VID:$ |
|
192 | - */ |
|
193 | - public function deleteOption(): bool |
|
194 | - { |
|
195 | - return $this->option_engine->deleteOption($this->option_name); |
|
196 | - } |
|
20 | + const NOT_SET_YET = 'wordpress-option-value-not-yet-set'; |
|
21 | + |
|
22 | + /** |
|
23 | + * WordPress makes it difficult to determine if an option successfully saved or not, |
|
24 | + * which is sometimes really important to know, especially if the information you are saving is critical. |
|
25 | + * The following options allow us to have a better chance of knowing when an update actually failed |
|
26 | + * or when everything is OK but it just didn't update because the value hasn't changed. |
|
27 | + */ |
|
28 | + const UPDATE_SUCCESS = 1; |
|
29 | + |
|
30 | + const UPDATE_NONE = 0; |
|
31 | + |
|
32 | + const UPDATE_ERROR = -1; |
|
33 | + |
|
34 | + /** |
|
35 | + * @var boolean |
|
36 | + */ |
|
37 | + private $autoload = false; |
|
38 | + |
|
39 | + /** |
|
40 | + * @var mixed |
|
41 | + */ |
|
42 | + private $default_value = null; |
|
43 | + |
|
44 | + /** |
|
45 | + * @var string |
|
46 | + */ |
|
47 | + private $option_name = ''; |
|
48 | + |
|
49 | + /** |
|
50 | + * @var mixed |
|
51 | + */ |
|
52 | + private $value = WordPressOption::NOT_SET_YET; |
|
53 | + |
|
54 | + /** |
|
55 | + * @var OptionEngine |
|
56 | + */ |
|
57 | + private $option_engine; |
|
58 | + |
|
59 | + |
|
60 | + /** |
|
61 | + * WordPressOption constructor. |
|
62 | + * |
|
63 | + * @param string $option_name |
|
64 | + * @param mixed $default_value |
|
65 | + * @param bool $autoload if true, will load the option on EVERY request |
|
66 | + * @param bool $is_network_option if true, will save the option to the network as opposed to the current blog |
|
67 | + */ |
|
68 | + public function __construct( |
|
69 | + string $option_name, |
|
70 | + $default_value, |
|
71 | + bool $autoload = false, |
|
72 | + bool $is_network_option = false |
|
73 | + ) { |
|
74 | + $this->setAutoload($autoload); |
|
75 | + $this->setDefaultValue($default_value); |
|
76 | + $this->setOptionName($option_name); |
|
77 | + $this->option_engine = new OptionEngine($is_network_option); |
|
78 | + } |
|
79 | + |
|
80 | + |
|
81 | + /** |
|
82 | + * @param bool|string $autoload |
|
83 | + */ |
|
84 | + public function setAutoload($autoload): void |
|
85 | + { |
|
86 | + $this->autoload = filter_var($autoload, FILTER_VALIDATE_BOOLEAN); |
|
87 | + } |
|
88 | + |
|
89 | + |
|
90 | + /** |
|
91 | + * @param mixed $default_value |
|
92 | + */ |
|
93 | + public function setDefaultValue($default_value): void |
|
94 | + { |
|
95 | + $this->default_value = $default_value; |
|
96 | + } |
|
97 | + |
|
98 | + |
|
99 | + /** |
|
100 | + * @param string $option_name |
|
101 | + */ |
|
102 | + public function setOptionName(string $option_name): void |
|
103 | + { |
|
104 | + $this->option_name = sanitize_key($option_name); |
|
105 | + } |
|
106 | + |
|
107 | + |
|
108 | + /** |
|
109 | + * @return string |
|
110 | + */ |
|
111 | + public function optionExists(): string |
|
112 | + { |
|
113 | + return $this->option_engine->getOption( |
|
114 | + $this->option_name, |
|
115 | + WordPressOption::NOT_SET_YET |
|
116 | + ) !== WordPressOption::NOT_SET_YET; |
|
117 | + } |
|
118 | + |
|
119 | + |
|
120 | + /** |
|
121 | + * @return string |
|
122 | + */ |
|
123 | + public function getOptionName(): string |
|
124 | + { |
|
125 | + return $this->option_name; |
|
126 | + } |
|
127 | + |
|
128 | + |
|
129 | + /** |
|
130 | + * @return false|mixed|void |
|
131 | + */ |
|
132 | + public function loadOption() |
|
133 | + { |
|
134 | + if ($this->value === WordPressOption::NOT_SET_YET) { |
|
135 | + $this->value = $this->option_engine->getOption($this->option_name, $this->default_value); |
|
136 | + } |
|
137 | + return $this->value; |
|
138 | + } |
|
139 | + |
|
140 | + |
|
141 | + /** |
|
142 | + * @param $value |
|
143 | + * @return int |
|
144 | + */ |
|
145 | + public function updateOption($value): int |
|
146 | + { |
|
147 | + // don't update if value has not changed since last update |
|
148 | + if ($this->valueIsUnchanged($value)) { |
|
149 | + return WordPressOption::UPDATE_NONE; |
|
150 | + } |
|
151 | + $this->value = $value; |
|
152 | + // because the options for updating differ when adding an option for the first time |
|
153 | + // we use the WordPressOption::NOT_SET_YET to determine if things already exist in the db |
|
154 | + $updated = $this->optionExists() |
|
155 | + ? $this->option_engine->updateOption($this->option_name, $this->value) |
|
156 | + : $this->option_engine->addOption($this->option_name, $this->value, $this->autoload()); |
|
157 | + |
|
158 | + if ($updated) { |
|
159 | + return WordPressOption::UPDATE_SUCCESS; |
|
160 | + } |
|
161 | + return WordPressOption::UPDATE_ERROR; |
|
162 | + } |
|
163 | + |
|
164 | + |
|
165 | + private function valueIsUnchanged($value): bool |
|
166 | + { |
|
167 | + if (is_array($value) && is_array($this->value)) { |
|
168 | + $diff = EEH_Array::array_diff_recursive($value, $this->value); |
|
169 | + // $diff = array_diff($value, $this->value); |
|
170 | + return empty($diff); |
|
171 | + } |
|
172 | + // emulate WP's method for checking equality |
|
173 | + return $value === $this->value && maybe_serialize($value) === maybe_serialize($this->value); |
|
174 | + } |
|
175 | + |
|
176 | + |
|
177 | + /** |
|
178 | + * @return string |
|
179 | + */ |
|
180 | + private function autoload(): string |
|
181 | + { |
|
182 | + return $this->autoload ? 'yes' : 'no'; |
|
183 | + } |
|
184 | + |
|
185 | + |
|
186 | + /** |
|
187 | + * Deletes the option from the database |
|
188 | + * for the rest of the request |
|
189 | + * |
|
190 | + * @return bool |
|
191 | + * @since $VID:$ |
|
192 | + */ |
|
193 | + public function deleteOption(): bool |
|
194 | + { |
|
195 | + return $this->option_engine->deleteOption($this->option_name); |
|
196 | + } |
|
197 | 197 | } |
@@ -11,221 +11,221 @@ discard block |
||
11 | 11 | */ |
12 | 12 | class EEH_Array extends EEH_Base |
13 | 13 | { |
14 | - /** |
|
15 | - * This method basically works the same as the PHP core function array_diff except it allows you to compare arrays |
|
16 | - * of EE_Base_Class objects NOTE: This will ONLY work on an array of EE_Base_Class objects |
|
17 | - * |
|
18 | - * @uses array_udiff core php function for setting up our own array comparison |
|
19 | - * @uses self::_compare_objects as the custom method for array_udiff |
|
20 | - * @param array $array1 an array of objects |
|
21 | - * @param array $array2 an array of objects |
|
22 | - * @return array an array of objects found in array 1 that aren't found in array 2. |
|
23 | - */ |
|
24 | - public static function object_array_diff($array1, $array2) |
|
25 | - { |
|
26 | - return array_udiff($array1, $array2, array('self', '_compare_objects')); |
|
27 | - } |
|
14 | + /** |
|
15 | + * This method basically works the same as the PHP core function array_diff except it allows you to compare arrays |
|
16 | + * of EE_Base_Class objects NOTE: This will ONLY work on an array of EE_Base_Class objects |
|
17 | + * |
|
18 | + * @uses array_udiff core php function for setting up our own array comparison |
|
19 | + * @uses self::_compare_objects as the custom method for array_udiff |
|
20 | + * @param array $array1 an array of objects |
|
21 | + * @param array $array2 an array of objects |
|
22 | + * @return array an array of objects found in array 1 that aren't found in array 2. |
|
23 | + */ |
|
24 | + public static function object_array_diff($array1, $array2) |
|
25 | + { |
|
26 | + return array_udiff($array1, $array2, array('self', '_compare_objects')); |
|
27 | + } |
|
28 | 28 | |
29 | - /** |
|
30 | - * Given that $arr is an array, determines if it's associative or numerically AND sequentially indexed |
|
31 | - * |
|
32 | - * @param array $array |
|
33 | - * @return boolean |
|
34 | - */ |
|
35 | - public static function is_associative_array(array $array): bool |
|
36 | - { |
|
37 | - return ! empty($array) && array_keys($array) !== range(0, count($array) - 1); |
|
38 | - } |
|
29 | + /** |
|
30 | + * Given that $arr is an array, determines if it's associative or numerically AND sequentially indexed |
|
31 | + * |
|
32 | + * @param array $array |
|
33 | + * @return boolean |
|
34 | + */ |
|
35 | + public static function is_associative_array(array $array): bool |
|
36 | + { |
|
37 | + return ! empty($array) && array_keys($array) !== range(0, count($array) - 1); |
|
38 | + } |
|
39 | 39 | |
40 | - /** |
|
41 | - * Gets an item from the array and leave the array intact. Use in place of end() |
|
42 | - * when you don't want to change the array |
|
43 | - * |
|
44 | - * @param array $arr |
|
45 | - * @return mixed what ever is in the array |
|
46 | - */ |
|
47 | - public static function get_one_item_from_array($arr) |
|
48 | - { |
|
49 | - $item = end($arr); |
|
50 | - reset($arr); |
|
51 | - return $item; |
|
52 | - } |
|
40 | + /** |
|
41 | + * Gets an item from the array and leave the array intact. Use in place of end() |
|
42 | + * when you don't want to change the array |
|
43 | + * |
|
44 | + * @param array $arr |
|
45 | + * @return mixed what ever is in the array |
|
46 | + */ |
|
47 | + public static function get_one_item_from_array($arr) |
|
48 | + { |
|
49 | + $item = end($arr); |
|
50 | + reset($arr); |
|
51 | + return $item; |
|
52 | + } |
|
53 | 53 | |
54 | - /** |
|
55 | - * Detects if this is a multi-dimensional array |
|
56 | - * meaning that at least one top-level value is an array. Eg [ [], ...] |
|
57 | - * |
|
58 | - * @param mixed $arr |
|
59 | - * @return boolean |
|
60 | - */ |
|
61 | - public static function is_multi_dimensional_array($arr) |
|
62 | - { |
|
63 | - if (is_array($arr)) { |
|
64 | - foreach ($arr as $item) { |
|
65 | - if (is_array($item)) { |
|
66 | - return true; // yep, there's at least 2 levels to this array |
|
67 | - } |
|
68 | - } |
|
69 | - } |
|
70 | - return false; // there's only 1 level, or it's not an array at all! |
|
71 | - } |
|
54 | + /** |
|
55 | + * Detects if this is a multi-dimensional array |
|
56 | + * meaning that at least one top-level value is an array. Eg [ [], ...] |
|
57 | + * |
|
58 | + * @param mixed $arr |
|
59 | + * @return boolean |
|
60 | + */ |
|
61 | + public static function is_multi_dimensional_array($arr) |
|
62 | + { |
|
63 | + if (is_array($arr)) { |
|
64 | + foreach ($arr as $item) { |
|
65 | + if (is_array($item)) { |
|
66 | + return true; // yep, there's at least 2 levels to this array |
|
67 | + } |
|
68 | + } |
|
69 | + } |
|
70 | + return false; // there's only 1 level, or it's not an array at all! |
|
71 | + } |
|
72 | 72 | |
73 | - /** |
|
74 | - * Shorthand for isset( $arr[ $index ] ) ? $arr[ $index ] : $default |
|
75 | - * |
|
76 | - * @param array $arr |
|
77 | - * @param mixed $index |
|
78 | - * @param mixed $default |
|
79 | - * @return mixed |
|
80 | - */ |
|
81 | - public static function is_set($arr, $index, $default) |
|
82 | - { |
|
83 | - return isset($arr[ $index ]) ? $arr[ $index ] : $default; |
|
84 | - } |
|
73 | + /** |
|
74 | + * Shorthand for isset( $arr[ $index ] ) ? $arr[ $index ] : $default |
|
75 | + * |
|
76 | + * @param array $arr |
|
77 | + * @param mixed $index |
|
78 | + * @param mixed $default |
|
79 | + * @return mixed |
|
80 | + */ |
|
81 | + public static function is_set($arr, $index, $default) |
|
82 | + { |
|
83 | + return isset($arr[ $index ]) ? $arr[ $index ] : $default; |
|
84 | + } |
|
85 | 85 | |
86 | - /** |
|
87 | - * Exactly like `maybe_unserialize`, but also accounts for a WP bug: http://core.trac.wordpress.org/ticket/26118 |
|
88 | - * |
|
89 | - * @param mixed $value usually a string, but could be an array or object |
|
90 | - * @return mixed the UN-serialized data |
|
91 | - */ |
|
92 | - public static function maybe_unserialize($value) |
|
93 | - { |
|
94 | - $data = maybe_unserialize($value); |
|
95 | - // it's possible that this still has serialized data if it's the session. |
|
96 | - // WP has a bug, http://core.trac.wordpress.org/ticket/26118 that doesn't unserialize this automatically. |
|
97 | - $token = 'C'; |
|
98 | - $data = is_string($data) ? trim($data) : $data; |
|
99 | - if (is_string($data) && strlen($data) > 1 && $data[0] == $token && preg_match("/^{$token}:[0-9]+:/s", $data)) { |
|
100 | - return unserialize($data); |
|
101 | - } else { |
|
102 | - return $data; |
|
103 | - } |
|
104 | - } |
|
86 | + /** |
|
87 | + * Exactly like `maybe_unserialize`, but also accounts for a WP bug: http://core.trac.wordpress.org/ticket/26118 |
|
88 | + * |
|
89 | + * @param mixed $value usually a string, but could be an array or object |
|
90 | + * @return mixed the UN-serialized data |
|
91 | + */ |
|
92 | + public static function maybe_unserialize($value) |
|
93 | + { |
|
94 | + $data = maybe_unserialize($value); |
|
95 | + // it's possible that this still has serialized data if it's the session. |
|
96 | + // WP has a bug, http://core.trac.wordpress.org/ticket/26118 that doesn't unserialize this automatically. |
|
97 | + $token = 'C'; |
|
98 | + $data = is_string($data) ? trim($data) : $data; |
|
99 | + if (is_string($data) && strlen($data) > 1 && $data[0] == $token && preg_match("/^{$token}:[0-9]+:/s", $data)) { |
|
100 | + return unserialize($data); |
|
101 | + } else { |
|
102 | + return $data; |
|
103 | + } |
|
104 | + } |
|
105 | 105 | |
106 | 106 | |
107 | - /** |
|
108 | - * insert_into_array |
|
109 | - * |
|
110 | - * @param array $target_array the array to insert new data into |
|
111 | - * @param array $array_to_insert the new data to be inserted |
|
112 | - * @param int|string|null $offset a known key within $target_array where new data will be inserted |
|
113 | - * @param bool $add_before whether to add new data before or after the offset key |
|
114 | - * @param bool $preserve_keys whether or not to reset numerically indexed arrays |
|
115 | - * @return array |
|
116 | - */ |
|
117 | - public static function insert_into_array( |
|
118 | - array $target_array = array(), |
|
119 | - array $array_to_insert = array(), |
|
120 | - $offset = null, |
|
121 | - bool $add_before = true, |
|
122 | - bool $preserve_keys = true |
|
123 | - ) { |
|
124 | - $target_array_keys = array_keys($target_array); |
|
125 | - // if no offset key was supplied |
|
126 | - if (empty($offset)) { |
|
127 | - // use start or end of $target_array based on whether we are adding before or not |
|
128 | - $offset = $add_before ? 0 : count($target_array); |
|
129 | - } |
|
130 | - // if offset key is a string, then find the corresponding numeric location for that element |
|
131 | - $offset = is_int($offset) ? $offset : array_search($offset, $target_array_keys, true); |
|
132 | - // add one to the offset if adding after |
|
133 | - $offset = $add_before ? $offset : $offset + 1; |
|
134 | - // but ensure offset does not exceed the length of the array |
|
135 | - $offset = $offset > count($target_array) ? count($target_array) : $offset; |
|
136 | - // reindex array ??? |
|
137 | - if ($preserve_keys) { |
|
138 | - // take a slice of the target array from the beginning till the offset, |
|
139 | - // then add the new data |
|
140 | - // then add another slice that starts at the offset and goes till the end |
|
141 | - return array_slice($target_array, 0, $offset, true) + $array_to_insert + array_slice( |
|
142 | - $target_array, |
|
143 | - $offset, |
|
144 | - null, |
|
145 | - true |
|
146 | - ); |
|
147 | - } else { |
|
148 | - // since we don't want to preserve keys, we can use array_splice |
|
149 | - array_splice($target_array, $offset, 0, $array_to_insert); |
|
150 | - return $target_array; |
|
151 | - } |
|
152 | - } |
|
107 | + /** |
|
108 | + * insert_into_array |
|
109 | + * |
|
110 | + * @param array $target_array the array to insert new data into |
|
111 | + * @param array $array_to_insert the new data to be inserted |
|
112 | + * @param int|string|null $offset a known key within $target_array where new data will be inserted |
|
113 | + * @param bool $add_before whether to add new data before or after the offset key |
|
114 | + * @param bool $preserve_keys whether or not to reset numerically indexed arrays |
|
115 | + * @return array |
|
116 | + */ |
|
117 | + public static function insert_into_array( |
|
118 | + array $target_array = array(), |
|
119 | + array $array_to_insert = array(), |
|
120 | + $offset = null, |
|
121 | + bool $add_before = true, |
|
122 | + bool $preserve_keys = true |
|
123 | + ) { |
|
124 | + $target_array_keys = array_keys($target_array); |
|
125 | + // if no offset key was supplied |
|
126 | + if (empty($offset)) { |
|
127 | + // use start or end of $target_array based on whether we are adding before or not |
|
128 | + $offset = $add_before ? 0 : count($target_array); |
|
129 | + } |
|
130 | + // if offset key is a string, then find the corresponding numeric location for that element |
|
131 | + $offset = is_int($offset) ? $offset : array_search($offset, $target_array_keys, true); |
|
132 | + // add one to the offset if adding after |
|
133 | + $offset = $add_before ? $offset : $offset + 1; |
|
134 | + // but ensure offset does not exceed the length of the array |
|
135 | + $offset = $offset > count($target_array) ? count($target_array) : $offset; |
|
136 | + // reindex array ??? |
|
137 | + if ($preserve_keys) { |
|
138 | + // take a slice of the target array from the beginning till the offset, |
|
139 | + // then add the new data |
|
140 | + // then add another slice that starts at the offset and goes till the end |
|
141 | + return array_slice($target_array, 0, $offset, true) + $array_to_insert + array_slice( |
|
142 | + $target_array, |
|
143 | + $offset, |
|
144 | + null, |
|
145 | + true |
|
146 | + ); |
|
147 | + } else { |
|
148 | + // since we don't want to preserve keys, we can use array_splice |
|
149 | + array_splice($target_array, $offset, 0, $array_to_insert); |
|
150 | + return $target_array; |
|
151 | + } |
|
152 | + } |
|
153 | 153 | |
154 | 154 | |
155 | - /** |
|
156 | - * array_merge() is slow and should never be used while looping over data |
|
157 | - * if you don't need to preserve keys from all arrays, then using a foreach loop is much faster |
|
158 | - * so really this acts more like array_replace( $array1, $array2 ) |
|
159 | - * or a union with the arrays flipped ( $array2 + $array1 ) |
|
160 | - * this saves a few lines of code and improves readability |
|
161 | - * |
|
162 | - * @param array $array1 |
|
163 | - * @param array $array2 |
|
164 | - * @return array |
|
165 | - */ |
|
166 | - public static function merge_arrays_and_overwrite_keys(array $array1, array $array2) |
|
167 | - { |
|
168 | - foreach ($array2 as $key => $value) { |
|
169 | - $array1[ $key ] = $value; |
|
170 | - } |
|
171 | - return $array1; |
|
172 | - } |
|
155 | + /** |
|
156 | + * array_merge() is slow and should never be used while looping over data |
|
157 | + * if you don't need to preserve keys from all arrays, then using a foreach loop is much faster |
|
158 | + * so really this acts more like array_replace( $array1, $array2 ) |
|
159 | + * or a union with the arrays flipped ( $array2 + $array1 ) |
|
160 | + * this saves a few lines of code and improves readability |
|
161 | + * |
|
162 | + * @param array $array1 |
|
163 | + * @param array $array2 |
|
164 | + * @return array |
|
165 | + */ |
|
166 | + public static function merge_arrays_and_overwrite_keys(array $array1, array $array2) |
|
167 | + { |
|
168 | + foreach ($array2 as $key => $value) { |
|
169 | + $array1[ $key ] = $value; |
|
170 | + } |
|
171 | + return $array1; |
|
172 | + } |
|
173 | 173 | |
174 | 174 | |
175 | - /** |
|
176 | - * given a flat array like $array = array('A', 'B', 'C') |
|
177 | - * will convert into a multidimensional array like $array[A][B][C] |
|
178 | - * if $final_value is provided and is anything other than null, |
|
179 | - * then that will be set as the value for the innermost array key |
|
180 | - * like so: $array[A][B][C] = $final_value |
|
181 | - * |
|
182 | - * @param array $flat_array |
|
183 | - * @param mixed $final_value |
|
184 | - * @return array |
|
185 | - */ |
|
186 | - public static function convert_array_values_to_keys(array $flat_array, $final_value = null) |
|
187 | - { |
|
188 | - $multidimensional = array(); |
|
189 | - $reference = &$multidimensional; |
|
190 | - foreach ($flat_array as $key) { |
|
191 | - $reference[ $key ] = array(); |
|
192 | - $reference = &$reference[ $key ]; |
|
193 | - } |
|
194 | - if ($final_value !== null) { |
|
195 | - $reference = $final_value; |
|
196 | - } |
|
197 | - return $multidimensional; |
|
198 | - } |
|
175 | + /** |
|
176 | + * given a flat array like $array = array('A', 'B', 'C') |
|
177 | + * will convert into a multidimensional array like $array[A][B][C] |
|
178 | + * if $final_value is provided and is anything other than null, |
|
179 | + * then that will be set as the value for the innermost array key |
|
180 | + * like so: $array[A][B][C] = $final_value |
|
181 | + * |
|
182 | + * @param array $flat_array |
|
183 | + * @param mixed $final_value |
|
184 | + * @return array |
|
185 | + */ |
|
186 | + public static function convert_array_values_to_keys(array $flat_array, $final_value = null) |
|
187 | + { |
|
188 | + $multidimensional = array(); |
|
189 | + $reference = &$multidimensional; |
|
190 | + foreach ($flat_array as $key) { |
|
191 | + $reference[ $key ] = array(); |
|
192 | + $reference = &$reference[ $key ]; |
|
193 | + } |
|
194 | + if ($final_value !== null) { |
|
195 | + $reference = $final_value; |
|
196 | + } |
|
197 | + return $multidimensional; |
|
198 | + } |
|
199 | 199 | |
200 | 200 | |
201 | - /** |
|
202 | - * @see http://stackoverflow.com/questions/173400/how-to-check-if-php-array-is-associative-or-sequential |
|
203 | - * @param array $array |
|
204 | - * @return bool |
|
205 | - */ |
|
206 | - public static function is_array_numerically_and_sequentially_indexed(array $array) |
|
207 | - { |
|
208 | - return empty($array) || array_keys($array) === range(0, count($array) - 1); |
|
209 | - } |
|
201 | + /** |
|
202 | + * @see http://stackoverflow.com/questions/173400/how-to-check-if-php-array-is-associative-or-sequential |
|
203 | + * @param array $array |
|
204 | + * @return bool |
|
205 | + */ |
|
206 | + public static function is_array_numerically_and_sequentially_indexed(array $array) |
|
207 | + { |
|
208 | + return empty($array) || array_keys($array) === range(0, count($array) - 1); |
|
209 | + } |
|
210 | 210 | |
211 | 211 | |
212 | - /** |
|
213 | - * recursively walks through an array and adds slashes to all no array elements |
|
214 | - * |
|
215 | - * @param mixed $element |
|
216 | - * @return array|string |
|
217 | - * @since 4.10.29.p |
|
218 | - */ |
|
219 | - public static function addSlashesRecursively($element) |
|
220 | - { |
|
221 | - if (is_array($element)) { |
|
222 | - foreach ($element as $key => $value) { |
|
223 | - $element[ $key ] = EEH_Array::addSlashesRecursively($value); |
|
224 | - } |
|
225 | - return $element; |
|
226 | - } |
|
227 | - return is_string($element) ? addslashes($element) : $element; |
|
228 | - } |
|
212 | + /** |
|
213 | + * recursively walks through an array and adds slashes to all no array elements |
|
214 | + * |
|
215 | + * @param mixed $element |
|
216 | + * @return array|string |
|
217 | + * @since 4.10.29.p |
|
218 | + */ |
|
219 | + public static function addSlashesRecursively($element) |
|
220 | + { |
|
221 | + if (is_array($element)) { |
|
222 | + foreach ($element as $key => $value) { |
|
223 | + $element[ $key ] = EEH_Array::addSlashesRecursively($value); |
|
224 | + } |
|
225 | + return $element; |
|
226 | + } |
|
227 | + return is_string($element) ? addslashes($element) : $element; |
|
228 | + } |
|
229 | 229 | |
230 | 230 | |
231 | 231 | /** |
@@ -294,7 +294,7 @@ discard block |
||
294 | 294 | * print_r( EEH_Array::flattenArray($example, true) ); |
295 | 295 | * |
296 | 296 | * "a:A, b:B, c:[ d:D, e:E, f:[ G, H, I ] ], [ J, K ], L, M, n:[ o:P ]" |
297 | - * |
|
297 | + * |
|
298 | 298 | * @param array $array the array to be flattened |
299 | 299 | * @param bool $to_string [true] will flatten the entire array down into a string |
300 | 300 | * [false] will only flatten sub-arrays down into strings and return a array |
@@ -80,7 +80,7 @@ discard block |
||
80 | 80 | */ |
81 | 81 | public static function is_set($arr, $index, $default) |
82 | 82 | { |
83 | - return isset($arr[ $index ]) ? $arr[ $index ] : $default; |
|
83 | + return isset($arr[$index]) ? $arr[$index] : $default; |
|
84 | 84 | } |
85 | 85 | |
86 | 86 | /** |
@@ -166,7 +166,7 @@ discard block |
||
166 | 166 | public static function merge_arrays_and_overwrite_keys(array $array1, array $array2) |
167 | 167 | { |
168 | 168 | foreach ($array2 as $key => $value) { |
169 | - $array1[ $key ] = $value; |
|
169 | + $array1[$key] = $value; |
|
170 | 170 | } |
171 | 171 | return $array1; |
172 | 172 | } |
@@ -188,8 +188,8 @@ discard block |
||
188 | 188 | $multidimensional = array(); |
189 | 189 | $reference = &$multidimensional; |
190 | 190 | foreach ($flat_array as $key) { |
191 | - $reference[ $key ] = array(); |
|
192 | - $reference = &$reference[ $key ]; |
|
191 | + $reference[$key] = array(); |
|
192 | + $reference = &$reference[$key]; |
|
193 | 193 | } |
194 | 194 | if ($final_value !== null) { |
195 | 195 | $reference = $final_value; |
@@ -220,7 +220,7 @@ discard block |
||
220 | 220 | { |
221 | 221 | if (is_array($element)) { |
222 | 222 | foreach ($element as $key => $value) { |
223 | - $element[ $key ] = EEH_Array::addSlashesRecursively($value); |
|
223 | + $element[$key] = EEH_Array::addSlashesRecursively($value); |
|
224 | 224 | } |
225 | 225 | return $element; |
226 | 226 | } |
@@ -242,17 +242,17 @@ discard block |
||
242 | 242 | foreach ($array_1 as $key => $value) { |
243 | 243 | if (array_key_exists($key, $array_2)) { |
244 | 244 | if (is_array($value)) { |
245 | - $inner_diff = EEH_Array::array_diff_recursive($value, $array_2[ $key ]); |
|
245 | + $inner_diff = EEH_Array::array_diff_recursive($value, $array_2[$key]); |
|
246 | 246 | if (count($inner_diff)) { |
247 | - $diff[ $key ] = $inner_diff; |
|
247 | + $diff[$key] = $inner_diff; |
|
248 | 248 | } |
249 | 249 | } else { |
250 | - if ($value != $array_2[ $key ]) { |
|
251 | - $diff[ $key ] = $value; |
|
250 | + if ($value != $array_2[$key]) { |
|
251 | + $diff[$key] = $value; |
|
252 | 252 | } |
253 | 253 | } |
254 | 254 | } else { |
255 | - $diff[ $key ] = $value; |
|
255 | + $diff[$key] = $value; |
|
256 | 256 | } |
257 | 257 | } |
258 | 258 | return $diff; |
@@ -306,11 +306,11 @@ discard block |
||
306 | 306 | { |
307 | 307 | $flat_array = []; |
308 | 308 | foreach ($array as $key => $value) { |
309 | - $flat_array[ $key ] = is_array($value) |
|
309 | + $flat_array[$key] = is_array($value) |
|
310 | 310 | ? EEH_Array::flattenArray($value, true, false) |
311 | 311 | : $value; |
312 | 312 | } |
313 | - if (! $to_string) { |
|
313 | + if ( ! $to_string) { |
|
314 | 314 | return $flat_array; |
315 | 315 | } |
316 | 316 | $flat = ''; |