Completed
Branch ENH/PUE-stat-clean-up (2bcac3)
by
unknown
16:59 queued 08:24
created
core/db_models/relations/EE_Model_Relation_Base.php 3 patches
Doc Comments   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -133,9 +133,9 @@  discard block
 block discarded – undo
133 133
 
134 134
     /**
135 135
      * @param        $other_table
136
-     * @param        $other_table_alias
136
+     * @param        string $other_table_alias
137 137
      * @param        $other_table_column
138
-     * @param        $this_table_alias
138
+     * @param        string $this_table_alias
139 139
      * @param        $this_table_join_column
140 140
      * @param string $extra_join_sql
141 141
      * @return string
@@ -189,7 +189,7 @@  discard block
 block discarded – undo
189 189
      * Alters the $query_params to disable default where conditions, unless otherwise specified
190 190
      *
191 191
      * @param string $query_params
192
-     * @return array
192
+     * @return string
193 193
      */
194 194
     protected function _disable_default_where_conditions_on_query_param($query_params)
195 195
     {
@@ -206,7 +206,7 @@  discard block
 block discarded – undo
206 206
      * Note: If the related model is extends EEM_Soft_Delete_Base, then the related
207 207
      * model objects will only be soft-deleted.
208 208
      *
209
-     * @param EE_Base_Class|int|string $model_object_or_id
209
+     * @param EE_Base_Class|null $model_object_or_id
210 210
      * @param array                    $query_params
211 211
      * @return int of how many related models got deleted
212 212
      * @throws \EE_Error
@@ -237,7 +237,7 @@  discard block
 block discarded – undo
237 237
      * Note: If the related model is extends EEM_Soft_Delete_Base, then the related
238 238
      * model objects will only be soft-deleted.
239 239
      *
240
-     * @param EE_Base_Class|int|string $model_object_or_id
240
+     * @param EE_Base_Class|null $model_object_or_id
241 241
      * @param array                    $query_params
242 242
      * @return int of how many related models got deleted
243 243
      * @throws \EE_Error
Please login to merge, or discard this patch.
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -156,7 +156,7 @@  discard block
 block discarded – undo
156 156
         $this_table_join_column,
157 157
         $extra_join_sql = ''
158 158
     ) {
159
-        return " LEFT JOIN " . $other_table . " AS " . $other_table_alias . " ON " . $other_table_alias . "." . $other_table_column . "=" . $this_table_alias . "." . $this_table_join_column . ($extra_join_sql ? " AND $extra_join_sql" : '');
159
+        return " LEFT JOIN ".$other_table." AS ".$other_table_alias." ON ".$other_table_alias.".".$other_table_column."=".$this_table_alias.".".$this_table_join_column.($extra_join_sql ? " AND $extra_join_sql" : '');
160 160
     }
161 161
 
162 162
 
@@ -190,7 +190,7 @@  discard block
 block discarded – undo
190 190
                                                              . "."
191 191
                                                              . $this->get_this_model()->get_primary_key_field()->get_name();
192 192
         $model_object_id                                   = $this->_get_model_object_id($model_object_or_id);
193
-        $query_params[0][ $query_param_where_this_model_pk ] = $model_object_id;
193
+        $query_params[0][$query_param_where_this_model_pk] = $model_object_id;
194 194
         return $this->get_other_model()->get_all($query_params);
195 195
     }
196 196
 
@@ -203,7 +203,7 @@  discard block
 block discarded – undo
203 203
      */
204 204
     protected function _disable_default_where_conditions_on_query_param($query_params)
205 205
     {
206
-        if (! isset($query_params['default_where_conditions'])) {
206
+        if ( ! isset($query_params['default_where_conditions'])) {
207 207
             $query_params['default_where_conditions'] = 'none';
208 208
         }
209 209
         return $query_params;
@@ -233,7 +233,7 @@  discard block
 block discarded – undo
233 233
                 $model_object_or_id
234 234
             );
235 235
             /* @var $model_object_or_id EE_Base_Class */
236
-            if (! $delete_is_blocked) {
236
+            if ( ! $delete_is_blocked) {
237 237
                 $this->remove_relation_to($model_object_or_id, $related_model_object);
238 238
                 $related_model_object->delete();
239 239
                 $deleted_count++;
@@ -269,7 +269,7 @@  discard block
 block discarded – undo
269 269
             if ($related_model_object instanceof EE_Soft_Delete_Base_Class) {
270 270
                 $this->remove_relation_to($model_object_or_id, $related_model_object);
271 271
                 $deleted_count++;
272
-                if (! $delete_is_blocked) {
272
+                if ( ! $delete_is_blocked) {
273 273
                     $related_model_object->delete_permanently();
274 274
                 } else {
275 275
                     // delete is blocked
@@ -278,7 +278,7 @@  discard block
 block discarded – undo
278 278
                 }
279 279
             } else {
280 280
                 // its not a soft-deletable thing anyways. do the normal logic.
281
-                if (! $delete_is_blocked) {
281
+                if ( ! $delete_is_blocked) {
282 282
                     $this->remove_relation_to($model_object_or_id, $related_model_object);
283 283
                     $related_model_object->delete();
284 284
                     $deleted_count++;
@@ -302,7 +302,7 @@  discard block
 block discarded – undo
302 302
         if ($model_object_or_id instanceof EE_Base_Class) {
303 303
             $model_object_id = $model_object_or_id->ID();
304 304
         }
305
-        if (! $model_object_id) {
305
+        if ( ! $model_object_id) {
306 306
             throw new EE_Error(sprintf(
307 307
                 __(
308 308
                     "Sorry, we cant get the related %s model objects to %s model object before it has an ID. You can solve that by just saving it before trying to get its related model objects",
Please login to merge, or discard this patch.
Indentation   +497 added lines, -497 removed lines patch added patch discarded remove patch
@@ -15,502 +15,502 @@
 block discarded – undo
15 15
  */
16 16
 abstract class EE_Model_Relation_Base implements HasSchemaInterface
17 17
 {
18
-    /**
19
-     * The model name of which this relation is a component (ie, the model that called new EE_Model_Relation_Base)
20
-     *
21
-     * @var string eg Event, Question_Group, Registration
22
-     */
23
-    private $_this_model_name;
24
-    /**
25
-     * The model name pointed to by this relation (ie, the model we want to establish a relationship to)
26
-     *
27
-     * @var string eg Event, Question_Group, Registration
28
-     */
29
-    private $_other_model_name;
30
-
31
-    /**
32
-     * this is typically used when calling the relation models to make sure they inherit any set timezone from the
33
-     * initiating model.
34
-     *
35
-     * @var string
36
-     */
37
-    protected $_timezone;
38
-
39
-    /**
40
-     * If you try to delete "this_model", and there are related "other_models",
41
-     * and this isn't null, then abandon the deletion and add this warning.
42
-     * This effectively makes it impossible to delete "this_model" while there are
43
-     * related "other_models" along this relation.
44
-     *
45
-     * @var string (internationalized)
46
-     */
47
-    protected $_blocking_delete_error_message;
48
-
49
-    protected $_blocking_delete = false;
50
-
51
-    /**
52
-     * Object representing the relationship between two models. This knows how to join the models,
53
-     * get related models across the relation, and add-and-remove the relationships.
54
-     *
55
-     * @param boolean $block_deletes                 if there are related models across this relation, block (prevent
56
-     *                                               and add an error) the deletion of this model
57
-     * @param string  $blocking_delete_error_message a customized error message on blocking deletes instead of the
58
-     *                                               default
59
-     */
60
-    public function __construct($block_deletes, $blocking_delete_error_message)
61
-    {
62
-        $this->_blocking_delete               = $block_deletes;
63
-        $this->_blocking_delete_error_message = $blocking_delete_error_message;
64
-    }
65
-
66
-
67
-    /**
68
-     * @param $this_model_name
69
-     * @param $other_model_name
70
-     * @throws EE_Error
71
-     */
72
-    public function _construct_finalize_set_models($this_model_name, $other_model_name)
73
-    {
74
-        $this->_this_model_name  = $this_model_name;
75
-        $this->_other_model_name = $other_model_name;
76
-        if (is_string($this->_blocking_delete)) {
77
-            throw new EE_Error(sprintf(
78
-                __(
79
-                    "When instantiating the relation of type %s from %s to %s, the \$block_deletes argument should be a boolean, not a string (%s)",
80
-                    "event_espresso"
81
-                ),
82
-                get_class($this),
83
-                $this_model_name,
84
-                $other_model_name,
85
-                $this->_blocking_delete
86
-            ));
87
-        }
88
-    }
89
-
90
-
91
-    /**
92
-     * Gets the model where this relation is defined.
93
-     *
94
-     * @return EEM_Base
95
-     */
96
-    public function get_this_model()
97
-    {
98
-        return $this->_get_model($this->_this_model_name);
99
-    }
100
-
101
-
102
-    /**
103
-     * Gets the model which this relation establishes the relation TO (ie,
104
-     * this relation object was defined on get_this_model(), get_other_model() is the other one)
105
-     *
106
-     * @return EEM_Base
107
-     */
108
-    public function get_other_model()
109
-    {
110
-        return $this->_get_model($this->_other_model_name);
111
-    }
112
-
113
-
114
-    /**
115
-     * Internally used by get_this_model() and get_other_model()
116
-     *
117
-     * @param string $model_name like Event, Question_Group, etc. omit the EEM_
118
-     * @return EEM_Base
119
-     */
120
-    protected function _get_model($model_name)
121
-    {
122
-        $modelInstance = EE_Registry::instance()->load_model($model_name);
123
-        $modelInstance->set_timezone($this->_timezone);
124
-        return $modelInstance;
125
-    }
126
-
127
-
128
-    /**
129
-     * entirely possible that relations may be called from a model and we need to make sure those relations have their
130
-     * timezone set correctly.
131
-     *
132
-     * @param string $timezone timezone to set.
133
-     */
134
-    public function set_timezone($timezone)
135
-    {
136
-        if ($timezone !== null) {
137
-            $this->_timezone = $timezone;
138
-        }
139
-    }
140
-
141
-
142
-    /**
143
-     * @param        $other_table
144
-     * @param        $other_table_alias
145
-     * @param        $other_table_column
146
-     * @param        $this_table_alias
147
-     * @param        $this_table_join_column
148
-     * @param string $extra_join_sql
149
-     * @return string
150
-     */
151
-    protected function _left_join(
152
-        $other_table,
153
-        $other_table_alias,
154
-        $other_table_column,
155
-        $this_table_alias,
156
-        $this_table_join_column,
157
-        $extra_join_sql = ''
158
-    ) {
159
-        return " LEFT JOIN " . $other_table . " AS " . $other_table_alias . " ON " . $other_table_alias . "." . $other_table_column . "=" . $this_table_alias . "." . $this_table_join_column . ($extra_join_sql ? " AND $extra_join_sql" : '');
160
-    }
161
-
162
-
163
-    /**
164
-     * Gets all the model objects of type of other model related to $model_object,
165
-     * according to this relation. This is the same code for EE_HABTM_Relation and EE_Has_Many_Relation.
166
-     * For both of those child classes, $model_object must be saved so that it has an ID before querying,
167
-     * otherwise an error will be thrown. Note: by default we disable default_where_conditions
168
-     * EE_Belongs_To_Relation doesn't need to be saved before querying.
169
-     *
170
-     * @param EE_Base_Class|int $model_object_or_id                      or the primary key of this model
171
-     * @param array             $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md
172
-     * @param boolean           $values_already_prepared_by_model_object @deprecated since 4.8.1
173
-     * @return EE_Base_Class[]
174
-     * @throws \EE_Error
175
-     */
176
-    public function get_all_related(
177
-        $model_object_or_id,
178
-        $query_params = array(),
179
-        $values_already_prepared_by_model_object = false
180
-    ) {
181
-        if ($values_already_prepared_by_model_object !== false) {
182
-            EE_Error::doing_it_wrong(
183
-                'EE_Model_Relation_Base::get_all_related',
184
-                __('The argument $values_already_prepared_by_model_object is no longer used.', 'event_espresso'),
185
-                '4.8.1'
186
-            );
187
-        }
188
-        $query_params                                      = $this->_disable_default_where_conditions_on_query_param($query_params);
189
-        $query_param_where_this_model_pk                   = $this->get_this_model()->get_this_model_name()
190
-                                                             . "."
191
-                                                             . $this->get_this_model()->get_primary_key_field()->get_name();
192
-        $model_object_id                                   = $this->_get_model_object_id($model_object_or_id);
193
-        $query_params[0][ $query_param_where_this_model_pk ] = $model_object_id;
194
-        return $this->get_other_model()->get_all($query_params);
195
-    }
196
-
197
-
198
-    /**
199
-     * Alters the $query_params to disable default where conditions, unless otherwise specified
200
-     *
201
-     * @param string $query_params
202
-     * @return array
203
-     */
204
-    protected function _disable_default_where_conditions_on_query_param($query_params)
205
-    {
206
-        if (! isset($query_params['default_where_conditions'])) {
207
-            $query_params['default_where_conditions'] = 'none';
208
-        }
209
-        return $query_params;
210
-    }
211
-
212
-
213
-    /**
214
-     * Deletes the related model objects which meet the query parameters. If no
215
-     * parameters are specified, then all related model objects will be deleted.
216
-     * Note: If the related model is extends EEM_Soft_Delete_Base, then the related
217
-     * model objects will only be soft-deleted.
218
-     *
219
-     * @param EE_Base_Class|int|string $model_object_or_id
220
-     * @param array                    $query_params
221
-     * @return int of how many related models got deleted
222
-     * @throws \EE_Error
223
-     */
224
-    public function delete_all_related($model_object_or_id, $query_params = array())
225
-    {
226
-        // for each thing we would delete,
227
-        $related_model_objects = $this->get_all_related($model_object_or_id, $query_params);
228
-        // determine if it's blocked by anything else before it can be deleted
229
-        $deleted_count = 0;
230
-        foreach ($related_model_objects as $related_model_object) {
231
-            $delete_is_blocked = $this->get_other_model()->delete_is_blocked_by_related_models(
232
-                $related_model_object,
233
-                $model_object_or_id
234
-            );
235
-            /* @var $model_object_or_id EE_Base_Class */
236
-            if (! $delete_is_blocked) {
237
-                $this->remove_relation_to($model_object_or_id, $related_model_object);
238
-                $related_model_object->delete();
239
-                $deleted_count++;
240
-            }
241
-        }
242
-        return $deleted_count;
243
-    }
244
-
245
-
246
-    /**
247
-     * Deletes the related model objects which meet the query parameters. If no
248
-     * parameters are specified, then all related model objects will be deleted.
249
-     * Note: If the related model is extends EEM_Soft_Delete_Base, then the related
250
-     * model objects will only be soft-deleted.
251
-     *
252
-     * @param EE_Base_Class|int|string $model_object_or_id
253
-     * @param array                    $query_params
254
-     * @return int of how many related models got deleted
255
-     * @throws \EE_Error
256
-     */
257
-    public function delete_related_permanently($model_object_or_id, $query_params = array())
258
-    {
259
-        // for each thing we would delete,
260
-        $related_model_objects = $this->get_all_related($model_object_or_id, $query_params);
261
-        // determine if it's blocked by anything else before it can be deleted
262
-        $deleted_count = 0;
263
-        foreach ($related_model_objects as $related_model_object) {
264
-            $delete_is_blocked = $this->get_other_model()->delete_is_blocked_by_related_models(
265
-                $related_model_object,
266
-                $model_object_or_id
267
-            );
268
-            /* @var $model_object_or_id EE_Base_Class */
269
-            if ($related_model_object instanceof EE_Soft_Delete_Base_Class) {
270
-                $this->remove_relation_to($model_object_or_id, $related_model_object);
271
-                $deleted_count++;
272
-                if (! $delete_is_blocked) {
273
-                    $related_model_object->delete_permanently();
274
-                } else {
275
-                    // delete is blocked
276
-                    // brent and darren, in this case, wanted to just soft delete it then
277
-                    $related_model_object->delete();
278
-                }
279
-            } else {
280
-                // its not a soft-deletable thing anyways. do the normal logic.
281
-                if (! $delete_is_blocked) {
282
-                    $this->remove_relation_to($model_object_or_id, $related_model_object);
283
-                    $related_model_object->delete();
284
-                    $deleted_count++;
285
-                }
286
-            }
287
-        }
288
-        return $deleted_count;
289
-    }
290
-
291
-
292
-    /**
293
-     * this just returns a model_object_id for incoming item that could be an object or id.
294
-     *
295
-     * @param  EE_Base_Class|int $model_object_or_id model object or the primary key of this model
296
-     * @throws EE_Error
297
-     * @return int
298
-     */
299
-    protected function _get_model_object_id($model_object_or_id)
300
-    {
301
-        $model_object_id = $model_object_or_id;
302
-        if ($model_object_or_id instanceof EE_Base_Class) {
303
-            $model_object_id = $model_object_or_id->ID();
304
-        }
305
-        if (! $model_object_id) {
306
-            throw new EE_Error(sprintf(
307
-                __(
308
-                    "Sorry, we cant get the related %s model objects to %s model object before it has an ID. You can solve that by just saving it before trying to get its related model objects",
309
-                    "event_espresso"
310
-                ),
311
-                $this->get_other_model()->get_this_model_name(),
312
-                $this->get_this_model()->get_this_model_name()
313
-            ));
314
-        }
315
-        return $model_object_id;
316
-    }
317
-
318
-
319
-    /**
320
-     * Gets the SQL string for performing the join between this model and the other model.
321
-     *
322
-     * @param string $model_relation_chain like 'Event.Event_Venue.Venue'
323
-     * @return string of SQL, eg "LEFT JOIN table_name AS table_alias ON this_model_primary_table.pk =
324
-     *                other_model_primary_table.fk" etc
325
-     */
326
-    abstract public function get_join_statement($model_relation_chain);
327
-
328
-
329
-    /**
330
-     * Adds a relationships between the two model objects provided. Each type of relationship handles this differently
331
-     * (EE_Belongs_To is a slight exception, it should more accurately be called set_relation_to(...), as this
332
-     * relationship only allows this model to be related to a single other model of this type)
333
-     *
334
-     * @param       $this_obj_or_id
335
-     * @param       $other_obj_or_id
336
-     * @param array $extra_join_model_fields_n_values
337
-     * @return \EE_Base_Class the EE_Base_Class which was added as a relation. (Convenient if you only pass an ID for
338
-     *                        $other_obj_or_id)
339
-     */
340
-    abstract public function add_relation_to(
341
-        $this_obj_or_id,
342
-        $other_obj_or_id,
343
-        $extra_join_model_fields_n_values = array()
344
-    );
345
-
346
-
347
-    /**
348
-     * Similar to 'add_relation_to(...)', performs the opposite action of removing the relationship between the two
349
-     * model objects
350
-     *
351
-     * @param       $this_obj_or_id
352
-     * @param       $other_obj_or_id
353
-     * @param array $where_query
354
-     * @return bool
355
-     */
356
-    abstract public function remove_relation_to($this_obj_or_id, $other_obj_or_id, $where_query = array());
357
-
358
-
359
-    /**
360
-     * Removes ALL relation instances for this relation obj
361
-     *
362
-     * @param EE_Base_Class|int $this_obj_or_id
363
-     * @param array             $where_query_param @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md#0-where-conditions
364
-     * @return EE_Base_Class[]
365
-     * @throws \EE_Error
366
-     */
367
-    public function remove_relations($this_obj_or_id, $where_query_param = array())
368
-    {
369
-        $related_things = $this->get_all_related($this_obj_or_id, array($where_query_param));
370
-        $objs_removed   = array();
371
-        foreach ($related_things as $related_thing) {
372
-            $objs_removed[] = $this->remove_relation_to($this_obj_or_id, $related_thing);
373
-        }
374
-        return $objs_removed;
375
-    }
376
-
377
-
378
-    /**
379
-     * If you aren't allowed to delete this model when there are related models across this
380
-     * relation object, return true. Otherwise, if you can delete this model even though
381
-     * related objects exist, returns false.
382
-     *
383
-     * @return boolean
384
-     */
385
-    public function block_delete_if_related_models_exist()
386
-    {
387
-        return $this->_blocking_delete;
388
-    }
389
-
390
-
391
-    /**
392
-     * Gets the error message to show
393
-     *
394
-     * @return string
395
-     */
396
-    public function get_deletion_error_message()
397
-    {
398
-        if ($this->_blocking_delete_error_message) {
399
-            return $this->_blocking_delete_error_message;
400
-        } else {
18
+	/**
19
+	 * The model name of which this relation is a component (ie, the model that called new EE_Model_Relation_Base)
20
+	 *
21
+	 * @var string eg Event, Question_Group, Registration
22
+	 */
23
+	private $_this_model_name;
24
+	/**
25
+	 * The model name pointed to by this relation (ie, the model we want to establish a relationship to)
26
+	 *
27
+	 * @var string eg Event, Question_Group, Registration
28
+	 */
29
+	private $_other_model_name;
30
+
31
+	/**
32
+	 * this is typically used when calling the relation models to make sure they inherit any set timezone from the
33
+	 * initiating model.
34
+	 *
35
+	 * @var string
36
+	 */
37
+	protected $_timezone;
38
+
39
+	/**
40
+	 * If you try to delete "this_model", and there are related "other_models",
41
+	 * and this isn't null, then abandon the deletion and add this warning.
42
+	 * This effectively makes it impossible to delete "this_model" while there are
43
+	 * related "other_models" along this relation.
44
+	 *
45
+	 * @var string (internationalized)
46
+	 */
47
+	protected $_blocking_delete_error_message;
48
+
49
+	protected $_blocking_delete = false;
50
+
51
+	/**
52
+	 * Object representing the relationship between two models. This knows how to join the models,
53
+	 * get related models across the relation, and add-and-remove the relationships.
54
+	 *
55
+	 * @param boolean $block_deletes                 if there are related models across this relation, block (prevent
56
+	 *                                               and add an error) the deletion of this model
57
+	 * @param string  $blocking_delete_error_message a customized error message on blocking deletes instead of the
58
+	 *                                               default
59
+	 */
60
+	public function __construct($block_deletes, $blocking_delete_error_message)
61
+	{
62
+		$this->_blocking_delete               = $block_deletes;
63
+		$this->_blocking_delete_error_message = $blocking_delete_error_message;
64
+	}
65
+
66
+
67
+	/**
68
+	 * @param $this_model_name
69
+	 * @param $other_model_name
70
+	 * @throws EE_Error
71
+	 */
72
+	public function _construct_finalize_set_models($this_model_name, $other_model_name)
73
+	{
74
+		$this->_this_model_name  = $this_model_name;
75
+		$this->_other_model_name = $other_model_name;
76
+		if (is_string($this->_blocking_delete)) {
77
+			throw new EE_Error(sprintf(
78
+				__(
79
+					"When instantiating the relation of type %s from %s to %s, the \$block_deletes argument should be a boolean, not a string (%s)",
80
+					"event_espresso"
81
+				),
82
+				get_class($this),
83
+				$this_model_name,
84
+				$other_model_name,
85
+				$this->_blocking_delete
86
+			));
87
+		}
88
+	}
89
+
90
+
91
+	/**
92
+	 * Gets the model where this relation is defined.
93
+	 *
94
+	 * @return EEM_Base
95
+	 */
96
+	public function get_this_model()
97
+	{
98
+		return $this->_get_model($this->_this_model_name);
99
+	}
100
+
101
+
102
+	/**
103
+	 * Gets the model which this relation establishes the relation TO (ie,
104
+	 * this relation object was defined on get_this_model(), get_other_model() is the other one)
105
+	 *
106
+	 * @return EEM_Base
107
+	 */
108
+	public function get_other_model()
109
+	{
110
+		return $this->_get_model($this->_other_model_name);
111
+	}
112
+
113
+
114
+	/**
115
+	 * Internally used by get_this_model() and get_other_model()
116
+	 *
117
+	 * @param string $model_name like Event, Question_Group, etc. omit the EEM_
118
+	 * @return EEM_Base
119
+	 */
120
+	protected function _get_model($model_name)
121
+	{
122
+		$modelInstance = EE_Registry::instance()->load_model($model_name);
123
+		$modelInstance->set_timezone($this->_timezone);
124
+		return $modelInstance;
125
+	}
126
+
127
+
128
+	/**
129
+	 * entirely possible that relations may be called from a model and we need to make sure those relations have their
130
+	 * timezone set correctly.
131
+	 *
132
+	 * @param string $timezone timezone to set.
133
+	 */
134
+	public function set_timezone($timezone)
135
+	{
136
+		if ($timezone !== null) {
137
+			$this->_timezone = $timezone;
138
+		}
139
+	}
140
+
141
+
142
+	/**
143
+	 * @param        $other_table
144
+	 * @param        $other_table_alias
145
+	 * @param        $other_table_column
146
+	 * @param        $this_table_alias
147
+	 * @param        $this_table_join_column
148
+	 * @param string $extra_join_sql
149
+	 * @return string
150
+	 */
151
+	protected function _left_join(
152
+		$other_table,
153
+		$other_table_alias,
154
+		$other_table_column,
155
+		$this_table_alias,
156
+		$this_table_join_column,
157
+		$extra_join_sql = ''
158
+	) {
159
+		return " LEFT JOIN " . $other_table . " AS " . $other_table_alias . " ON " . $other_table_alias . "." . $other_table_column . "=" . $this_table_alias . "." . $this_table_join_column . ($extra_join_sql ? " AND $extra_join_sql" : '');
160
+	}
161
+
162
+
163
+	/**
164
+	 * Gets all the model objects of type of other model related to $model_object,
165
+	 * according to this relation. This is the same code for EE_HABTM_Relation and EE_Has_Many_Relation.
166
+	 * For both of those child classes, $model_object must be saved so that it has an ID before querying,
167
+	 * otherwise an error will be thrown. Note: by default we disable default_where_conditions
168
+	 * EE_Belongs_To_Relation doesn't need to be saved before querying.
169
+	 *
170
+	 * @param EE_Base_Class|int $model_object_or_id                      or the primary key of this model
171
+	 * @param array             $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md
172
+	 * @param boolean           $values_already_prepared_by_model_object @deprecated since 4.8.1
173
+	 * @return EE_Base_Class[]
174
+	 * @throws \EE_Error
175
+	 */
176
+	public function get_all_related(
177
+		$model_object_or_id,
178
+		$query_params = array(),
179
+		$values_already_prepared_by_model_object = false
180
+	) {
181
+		if ($values_already_prepared_by_model_object !== false) {
182
+			EE_Error::doing_it_wrong(
183
+				'EE_Model_Relation_Base::get_all_related',
184
+				__('The argument $values_already_prepared_by_model_object is no longer used.', 'event_espresso'),
185
+				'4.8.1'
186
+			);
187
+		}
188
+		$query_params                                      = $this->_disable_default_where_conditions_on_query_param($query_params);
189
+		$query_param_where_this_model_pk                   = $this->get_this_model()->get_this_model_name()
190
+															 . "."
191
+															 . $this->get_this_model()->get_primary_key_field()->get_name();
192
+		$model_object_id                                   = $this->_get_model_object_id($model_object_or_id);
193
+		$query_params[0][ $query_param_where_this_model_pk ] = $model_object_id;
194
+		return $this->get_other_model()->get_all($query_params);
195
+	}
196
+
197
+
198
+	/**
199
+	 * Alters the $query_params to disable default where conditions, unless otherwise specified
200
+	 *
201
+	 * @param string $query_params
202
+	 * @return array
203
+	 */
204
+	protected function _disable_default_where_conditions_on_query_param($query_params)
205
+	{
206
+		if (! isset($query_params['default_where_conditions'])) {
207
+			$query_params['default_where_conditions'] = 'none';
208
+		}
209
+		return $query_params;
210
+	}
211
+
212
+
213
+	/**
214
+	 * Deletes the related model objects which meet the query parameters. If no
215
+	 * parameters are specified, then all related model objects will be deleted.
216
+	 * Note: If the related model is extends EEM_Soft_Delete_Base, then the related
217
+	 * model objects will only be soft-deleted.
218
+	 *
219
+	 * @param EE_Base_Class|int|string $model_object_or_id
220
+	 * @param array                    $query_params
221
+	 * @return int of how many related models got deleted
222
+	 * @throws \EE_Error
223
+	 */
224
+	public function delete_all_related($model_object_or_id, $query_params = array())
225
+	{
226
+		// for each thing we would delete,
227
+		$related_model_objects = $this->get_all_related($model_object_or_id, $query_params);
228
+		// determine if it's blocked by anything else before it can be deleted
229
+		$deleted_count = 0;
230
+		foreach ($related_model_objects as $related_model_object) {
231
+			$delete_is_blocked = $this->get_other_model()->delete_is_blocked_by_related_models(
232
+				$related_model_object,
233
+				$model_object_or_id
234
+			);
235
+			/* @var $model_object_or_id EE_Base_Class */
236
+			if (! $delete_is_blocked) {
237
+				$this->remove_relation_to($model_object_or_id, $related_model_object);
238
+				$related_model_object->delete();
239
+				$deleted_count++;
240
+			}
241
+		}
242
+		return $deleted_count;
243
+	}
244
+
245
+
246
+	/**
247
+	 * Deletes the related model objects which meet the query parameters. If no
248
+	 * parameters are specified, then all related model objects will be deleted.
249
+	 * Note: If the related model is extends EEM_Soft_Delete_Base, then the related
250
+	 * model objects will only be soft-deleted.
251
+	 *
252
+	 * @param EE_Base_Class|int|string $model_object_or_id
253
+	 * @param array                    $query_params
254
+	 * @return int of how many related models got deleted
255
+	 * @throws \EE_Error
256
+	 */
257
+	public function delete_related_permanently($model_object_or_id, $query_params = array())
258
+	{
259
+		// for each thing we would delete,
260
+		$related_model_objects = $this->get_all_related($model_object_or_id, $query_params);
261
+		// determine if it's blocked by anything else before it can be deleted
262
+		$deleted_count = 0;
263
+		foreach ($related_model_objects as $related_model_object) {
264
+			$delete_is_blocked = $this->get_other_model()->delete_is_blocked_by_related_models(
265
+				$related_model_object,
266
+				$model_object_or_id
267
+			);
268
+			/* @var $model_object_or_id EE_Base_Class */
269
+			if ($related_model_object instanceof EE_Soft_Delete_Base_Class) {
270
+				$this->remove_relation_to($model_object_or_id, $related_model_object);
271
+				$deleted_count++;
272
+				if (! $delete_is_blocked) {
273
+					$related_model_object->delete_permanently();
274
+				} else {
275
+					// delete is blocked
276
+					// brent and darren, in this case, wanted to just soft delete it then
277
+					$related_model_object->delete();
278
+				}
279
+			} else {
280
+				// its not a soft-deletable thing anyways. do the normal logic.
281
+				if (! $delete_is_blocked) {
282
+					$this->remove_relation_to($model_object_or_id, $related_model_object);
283
+					$related_model_object->delete();
284
+					$deleted_count++;
285
+				}
286
+			}
287
+		}
288
+		return $deleted_count;
289
+	}
290
+
291
+
292
+	/**
293
+	 * this just returns a model_object_id for incoming item that could be an object or id.
294
+	 *
295
+	 * @param  EE_Base_Class|int $model_object_or_id model object or the primary key of this model
296
+	 * @throws EE_Error
297
+	 * @return int
298
+	 */
299
+	protected function _get_model_object_id($model_object_or_id)
300
+	{
301
+		$model_object_id = $model_object_or_id;
302
+		if ($model_object_or_id instanceof EE_Base_Class) {
303
+			$model_object_id = $model_object_or_id->ID();
304
+		}
305
+		if (! $model_object_id) {
306
+			throw new EE_Error(sprintf(
307
+				__(
308
+					"Sorry, we cant get the related %s model objects to %s model object before it has an ID. You can solve that by just saving it before trying to get its related model objects",
309
+					"event_espresso"
310
+				),
311
+				$this->get_other_model()->get_this_model_name(),
312
+				$this->get_this_model()->get_this_model_name()
313
+			));
314
+		}
315
+		return $model_object_id;
316
+	}
317
+
318
+
319
+	/**
320
+	 * Gets the SQL string for performing the join between this model and the other model.
321
+	 *
322
+	 * @param string $model_relation_chain like 'Event.Event_Venue.Venue'
323
+	 * @return string of SQL, eg "LEFT JOIN table_name AS table_alias ON this_model_primary_table.pk =
324
+	 *                other_model_primary_table.fk" etc
325
+	 */
326
+	abstract public function get_join_statement($model_relation_chain);
327
+
328
+
329
+	/**
330
+	 * Adds a relationships between the two model objects provided. Each type of relationship handles this differently
331
+	 * (EE_Belongs_To is a slight exception, it should more accurately be called set_relation_to(...), as this
332
+	 * relationship only allows this model to be related to a single other model of this type)
333
+	 *
334
+	 * @param       $this_obj_or_id
335
+	 * @param       $other_obj_or_id
336
+	 * @param array $extra_join_model_fields_n_values
337
+	 * @return \EE_Base_Class the EE_Base_Class which was added as a relation. (Convenient if you only pass an ID for
338
+	 *                        $other_obj_or_id)
339
+	 */
340
+	abstract public function add_relation_to(
341
+		$this_obj_or_id,
342
+		$other_obj_or_id,
343
+		$extra_join_model_fields_n_values = array()
344
+	);
345
+
346
+
347
+	/**
348
+	 * Similar to 'add_relation_to(...)', performs the opposite action of removing the relationship between the two
349
+	 * model objects
350
+	 *
351
+	 * @param       $this_obj_or_id
352
+	 * @param       $other_obj_or_id
353
+	 * @param array $where_query
354
+	 * @return bool
355
+	 */
356
+	abstract public function remove_relation_to($this_obj_or_id, $other_obj_or_id, $where_query = array());
357
+
358
+
359
+	/**
360
+	 * Removes ALL relation instances for this relation obj
361
+	 *
362
+	 * @param EE_Base_Class|int $this_obj_or_id
363
+	 * @param array             $where_query_param @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md#0-where-conditions
364
+	 * @return EE_Base_Class[]
365
+	 * @throws \EE_Error
366
+	 */
367
+	public function remove_relations($this_obj_or_id, $where_query_param = array())
368
+	{
369
+		$related_things = $this->get_all_related($this_obj_or_id, array($where_query_param));
370
+		$objs_removed   = array();
371
+		foreach ($related_things as $related_thing) {
372
+			$objs_removed[] = $this->remove_relation_to($this_obj_or_id, $related_thing);
373
+		}
374
+		return $objs_removed;
375
+	}
376
+
377
+
378
+	/**
379
+	 * If you aren't allowed to delete this model when there are related models across this
380
+	 * relation object, return true. Otherwise, if you can delete this model even though
381
+	 * related objects exist, returns false.
382
+	 *
383
+	 * @return boolean
384
+	 */
385
+	public function block_delete_if_related_models_exist()
386
+	{
387
+		return $this->_blocking_delete;
388
+	}
389
+
390
+
391
+	/**
392
+	 * Gets the error message to show
393
+	 *
394
+	 * @return string
395
+	 */
396
+	public function get_deletion_error_message()
397
+	{
398
+		if ($this->_blocking_delete_error_message) {
399
+			return $this->_blocking_delete_error_message;
400
+		} else {
401 401
 //          return sprintf(__('Cannot delete %1$s when there are related %2$s', "event_espresso"),$this->get_this_model()->item_name(2),$this->get_other_model()->item_name(2));
402
-            return sprintf(
403
-                __(
404
-                    'This %1$s is currently linked to one or more %2$s records. If this %1$s is incorrect, then please remove it from all %3$s before attempting to delete it.',
405
-                    "event_espresso"
406
-                ),
407
-                $this->get_this_model()->item_name(1),
408
-                $this->get_other_model()->item_name(1),
409
-                $this->get_other_model()->item_name(2)
410
-            );
411
-        }
412
-    }
413
-
414
-    /**
415
-     * Returns whatever is set as the nicename for the object.
416
-     *
417
-     * @return string
418
-     */
419
-    public function getSchemaDescription()
420
-    {
421
-        $description = $this instanceof EE_Belongs_To_Relation
422
-            ? esc_html__('The related %1$s entity to the %2$s.', 'event_espresso')
423
-            : esc_html__('The related %1$s entities to the %2$s.', 'event_espresso');
424
-        return sprintf(
425
-            $description,
426
-            $this->get_other_model()->get_this_model_name(),
427
-            $this->get_this_model()->get_this_model_name()
428
-        );
429
-    }
430
-
431
-    /**
432
-     * Returns whatever is set as the $_schema_type property for the object.
433
-     * Note: this will automatically add 'null' to the schema if the object is_nullable()
434
-     *
435
-     * @return string|array
436
-     */
437
-    public function getSchemaType()
438
-    {
439
-        return $this instanceof EE_Belongs_To_Relation ? 'object' : 'array';
440
-    }
441
-
442
-    /**
443
-     * This is usually present when the $_schema_type property is 'object'.  Any child classes will need to override
444
-     * this method and return the properties for the schema.
445
-     * The reason this is not a property on the class is because there may be filters set on the values for the property
446
-     * that won't be exposed on construct.  For example enum type schemas may have the enum values filtered.
447
-     *
448
-     * @return array
449
-     */
450
-    public function getSchemaProperties()
451
-    {
452
-        return array();
453
-    }
454
-
455
-    /**
456
-     * If a child class has enum values, they should override this method and provide a simple array
457
-     * of the enum values.
458
-     * The reason this is not a property on the class is because there may be filterable enum values that
459
-     * are set on the instantiated object that could be filtered after construct.
460
-     *
461
-     * @return array
462
-     */
463
-    public function getSchemaEnum()
464
-    {
465
-        return array();
466
-    }
467
-
468
-    /**
469
-     * This returns the value of the $_schema_format property on the object.
470
-     *
471
-     * @return string
472
-     */
473
-    public function getSchemaFormat()
474
-    {
475
-        return array();
476
-    }
477
-
478
-    /**
479
-     * This returns the value of the $_schema_readonly property on the object.
480
-     *
481
-     * @return bool
482
-     */
483
-    public function getSchemaReadonly()
484
-    {
485
-        return true;
486
-    }
487
-
488
-    /**
489
-     * This returns elements used to represent this field in the json schema.
490
-     *
491
-     * @link http://json-schema.org/
492
-     * @return array
493
-     */
494
-    public function getSchema()
495
-    {
496
-        $schema = array(
497
-            'description' => $this->getSchemaDescription(),
498
-            'type' => $this->getSchemaType(),
499
-            'relation' => true,
500
-            'relation_type' => get_class($this),
501
-            'readonly' => $this->getSchemaReadonly()
502
-        );
503
-
504
-        if ($this instanceof EE_HABTM_Relation) {
505
-            $schema['joining_model_name'] = $this->get_join_model()->get_this_model_name();
506
-        }
507
-
508
-        if ($this->getSchemaType() === 'array') {
509
-            $schema['items'] = array(
510
-                'type' => 'object'
511
-            );
512
-        }
513
-
514
-        return $schema;
515
-    }
402
+			return sprintf(
403
+				__(
404
+					'This %1$s is currently linked to one or more %2$s records. If this %1$s is incorrect, then please remove it from all %3$s before attempting to delete it.',
405
+					"event_espresso"
406
+				),
407
+				$this->get_this_model()->item_name(1),
408
+				$this->get_other_model()->item_name(1),
409
+				$this->get_other_model()->item_name(2)
410
+			);
411
+		}
412
+	}
413
+
414
+	/**
415
+	 * Returns whatever is set as the nicename for the object.
416
+	 *
417
+	 * @return string
418
+	 */
419
+	public function getSchemaDescription()
420
+	{
421
+		$description = $this instanceof EE_Belongs_To_Relation
422
+			? esc_html__('The related %1$s entity to the %2$s.', 'event_espresso')
423
+			: esc_html__('The related %1$s entities to the %2$s.', 'event_espresso');
424
+		return sprintf(
425
+			$description,
426
+			$this->get_other_model()->get_this_model_name(),
427
+			$this->get_this_model()->get_this_model_name()
428
+		);
429
+	}
430
+
431
+	/**
432
+	 * Returns whatever is set as the $_schema_type property for the object.
433
+	 * Note: this will automatically add 'null' to the schema if the object is_nullable()
434
+	 *
435
+	 * @return string|array
436
+	 */
437
+	public function getSchemaType()
438
+	{
439
+		return $this instanceof EE_Belongs_To_Relation ? 'object' : 'array';
440
+	}
441
+
442
+	/**
443
+	 * This is usually present when the $_schema_type property is 'object'.  Any child classes will need to override
444
+	 * this method and return the properties for the schema.
445
+	 * The reason this is not a property on the class is because there may be filters set on the values for the property
446
+	 * that won't be exposed on construct.  For example enum type schemas may have the enum values filtered.
447
+	 *
448
+	 * @return array
449
+	 */
450
+	public function getSchemaProperties()
451
+	{
452
+		return array();
453
+	}
454
+
455
+	/**
456
+	 * If a child class has enum values, they should override this method and provide a simple array
457
+	 * of the enum values.
458
+	 * The reason this is not a property on the class is because there may be filterable enum values that
459
+	 * are set on the instantiated object that could be filtered after construct.
460
+	 *
461
+	 * @return array
462
+	 */
463
+	public function getSchemaEnum()
464
+	{
465
+		return array();
466
+	}
467
+
468
+	/**
469
+	 * This returns the value of the $_schema_format property on the object.
470
+	 *
471
+	 * @return string
472
+	 */
473
+	public function getSchemaFormat()
474
+	{
475
+		return array();
476
+	}
477
+
478
+	/**
479
+	 * This returns the value of the $_schema_readonly property on the object.
480
+	 *
481
+	 * @return bool
482
+	 */
483
+	public function getSchemaReadonly()
484
+	{
485
+		return true;
486
+	}
487
+
488
+	/**
489
+	 * This returns elements used to represent this field in the json schema.
490
+	 *
491
+	 * @link http://json-schema.org/
492
+	 * @return array
493
+	 */
494
+	public function getSchema()
495
+	{
496
+		$schema = array(
497
+			'description' => $this->getSchemaDescription(),
498
+			'type' => $this->getSchemaType(),
499
+			'relation' => true,
500
+			'relation_type' => get_class($this),
501
+			'readonly' => $this->getSchemaReadonly()
502
+		);
503
+
504
+		if ($this instanceof EE_HABTM_Relation) {
505
+			$schema['joining_model_name'] = $this->get_join_model()->get_this_model_name();
506
+		}
507
+
508
+		if ($this->getSchemaType() === 'array') {
509
+			$schema['items'] = array(
510
+				'type' => 'object'
511
+			);
512
+		}
513
+
514
+		return $schema;
515
+	}
516 516
 }
Please login to merge, or discard this patch.
core/db_models/fields/EE_Model_Field_Base.php 3 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -582,7 +582,7 @@
 block discarded – undo
582 582
     /**
583 583
      * Validates that the incoming format is an allowable string to use for the _schema_format property
584 584
      * @throws InvalidArgumentException
585
-     * @param $format
585
+     * @param string $format
586 586
      */
587 587
     private function validateSchemaFormat($format)
588 588
     {
Please login to merge, or discard this patch.
Indentation   +646 added lines, -647 removed lines patch added patch discarded remove patch
@@ -19,651 +19,650 @@
 block discarded – undo
19 19
  */
20 20
 abstract class EE_Model_Field_Base implements HasSchemaInterface
21 21
 {
22
-    /**
23
-     * The alias for the table the column belongs to.
24
-     * @var string
25
-     */
26
-    protected $_table_alias;
27
-
28
-    /**
29
-     * The actual db column name for the table
30
-     * @var string
31
-     */
32
-    protected $_table_column;
33
-
34
-
35
-    /**
36
-     * The authoritative name for the table column (used by client code to reference the field).
37
-     * @var string
38
-     */
39
-    protected $_name;
40
-
41
-
42
-    /**
43
-     * A description for the field.
44
-     * @var string
45
-     */
46
-    protected $_nicename;
47
-
48
-
49
-    /**
50
-     * Whether the field is nullable or not
51
-     * @var bool
52
-     */
53
-    protected $_nullable;
54
-
55
-
56
-    /**
57
-     * What the default value for the field should be.
58
-     * @var mixed
59
-     */
60
-    protected $_default_value;
61
-
62
-
63
-    /**
64
-     * Other configuration for the field
65
-     * @var mixed
66
-     */
67
-    protected $_other_config;
68
-
69
-
70
-    /**
71
-     * The name of the model this field is instantiated for.
72
-     * @var string
73
-     */
74
-    protected $_model_name;
75
-
76
-
77
-    /**
78
-     * This should be a json-schema valid data type for the field.
79
-     * @link http://json-schema.org/latest/json-schema-core.html#rfc.section.4.2
80
-     * @var string
81
-     */
82
-    private $_schema_type = 'string';
83
-
84
-
85
-    /**
86
-     * If the schema has a defined format then it should be defined via this property.
87
-     * @link http://json-schema.org/latest/json-schema-validation.html#rfc.section.7
88
-     * @var string
89
-     */
90
-    private $_schema_format = '';
91
-
92
-
93
-    /**
94
-     * Indicates that the value of the field is managed exclusively by the server/model and not something
95
-     * settable by client code.
96
-     * @link http://json-schema.org/latest/json-schema-hypermedia.html#rfc.section.4.4
97
-     * @var bool
98
-     */
99
-    private $_schema_readonly = false;
100
-
101
-
102
-    /**
103
-     * @param string $table_column
104
-     * @param string $nicename
105
-     * @param bool   $nullable
106
-     * @param null   $default_value
107
-     */
108
-    public function __construct($table_column, $nicename, $nullable, $default_value = null)
109
-    {
110
-        $this->_table_column  = $table_column;
111
-        $this->_nicename      = $nicename;
112
-        $this->_nullable      = $nullable;
113
-        $this->_default_value = $default_value;
114
-    }
115
-
116
-
117
-    /**
118
-     * @param $table_alias
119
-     * @param $name
120
-     * @param $model_name
121
-     */
122
-    public function _construct_finalize($table_alias, $name, $model_name)
123
-    {
124
-        $this->_table_alias = $table_alias;
125
-        $this->_name        = $name;
126
-        $this->_model_name  = $model_name;
127
-        /**
128
-         * allow for changing the defaults
129
-         */
130
-        $this->_nicename      = apply_filters(
131
-            'FHEE__EE_Model_Field_Base___construct_finalize___nicename',
132
-            $this->_nicename,
133
-            $this
134
-        );
135
-        $this->_default_value = apply_filters(
136
-            'FHEE__EE_Model_Field_Base___construct_finalize___default_value',
137
-            $this->_default_value,
138
-            $this
139
-        );
140
-    }
141
-
142
-    public function get_table_alias()
143
-    {
144
-        return $this->_table_alias;
145
-    }
146
-
147
-    public function get_table_column()
148
-    {
149
-        return $this->_table_column;
150
-    }
151
-
152
-    /**
153
-     * Returns the name of the model this field is on. Eg 'Event' or 'Ticket_Datetime'
154
-     *
155
-     * @return string
156
-     */
157
-    public function get_model_name()
158
-    {
159
-        return $this->_model_name;
160
-    }
161
-
162
-    /**
163
-     * @throws \EE_Error
164
-     * @return string
165
-     */
166
-    public function get_name()
167
-    {
168
-        if ($this->_name) {
169
-            return $this->_name;
170
-        } else {
171
-            throw new EE_Error(sprintf(__(
172
-                "Model field '%s' has no name set. Did you make a model and forget to call the parent model constructor?",
173
-                "event_espresso"
174
-            ), get_class($this)));
175
-        }
176
-    }
177
-
178
-    public function get_nicename()
179
-    {
180
-        return $this->_nicename;
181
-    }
182
-
183
-    public function is_nullable()
184
-    {
185
-        return $this->_nullable;
186
-    }
187
-
188
-    /**
189
-     * returns whether this field is an auto-increment field or not. If it is, then
190
-     * on insertion it can be null. However, on updates it must be present.
191
-     *
192
-     * @return boolean
193
-     */
194
-    public function is_auto_increment()
195
-    {
196
-        return false;
197
-    }
198
-
199
-    /**
200
-     * The default value in the model object's value domain. See lengthy comment about
201
-     * value domains at the top of EEM_Base
202
-     *
203
-     * @return mixed
204
-     */
205
-    public function get_default_value()
206
-    {
207
-        return $this->_default_value;
208
-    }
209
-
210
-    /**
211
-     * Returns the table alias joined to the table column, however this isn't the right
212
-     * table alias if the aliased table is being joined to. In that case, you can use
213
-     * EE_Model_Parser::extract_table_alias_model_relation_chain_prefix() to find the table's current alias
214
-     * in the current query
215
-     *
216
-     * @return string
217
-     */
218
-    public function get_qualified_column()
219
-    {
220
-        return $this->get_table_alias() . "." . $this->get_table_column();
221
-    }
222
-
223
-    /**
224
-     * When get() is called on a model object (eg EE_Event), before returning its value,
225
-     * call this function on it, allowing us to customize the returned value based on
226
-     * the field's type. Eg, we may want to unserialize it, strip tags, etc. By default,
227
-     * we simply return it.
228
-     *
229
-     * @param mixed $value_of_field_on_model_object
230
-     * @return mixed
231
-     */
232
-    public function prepare_for_get($value_of_field_on_model_object)
233
-    {
234
-        return $value_of_field_on_model_object;
235
-    }
236
-
237
-    /**
238
-     * When inserting or updating a field on a model object, run this function on each
239
-     * value to prepare it for insertion into the db. Generally this converts
240
-     * the validated input on the model object into the format used in the DB.
241
-     *
242
-     * @param mixed $value_of_field_on_model_object
243
-     * @return mixed
244
-     */
245
-    public function prepare_for_use_in_db($value_of_field_on_model_object)
246
-    {
247
-        return $value_of_field_on_model_object;
248
-    }
249
-
250
-    /**
251
-     * When creating a brand-new model object, or setting a particular value for one of its fields, this function
252
-     * is called before setting it on the model object. We may want to strip slashes, unserialize the value, etc.
253
-     * By default, we do nothing.
254
-     *
255
-     * If the model field is going to perform any validation on the input, this is where it should be done
256
-     * (once the value is on the model object, it may be used in other ways besides putting it into the DB
257
-     * so it's best to validate it right away).
258
-     *
259
-     * @param mixed $value_inputted_for_field_on_model_object
260
-     * @return mixed
261
-     */
262
-    public function prepare_for_set($value_inputted_for_field_on_model_object)
263
-    {
264
-        return $value_inputted_for_field_on_model_object;
265
-    }
266
-
267
-
268
-    /**
269
-     * When instantiating a model object from DB results, this function is called before setting each field.
270
-     * We may want to serialize the value, etc. By default, we return the value using prepare_for_set() method as that
271
-     * is the one child classes will most often define.
272
-     *
273
-     * @param mixed $value_found_in_db_for_model_object
274
-     * @return mixed
275
-     */
276
-    public function prepare_for_set_from_db($value_found_in_db_for_model_object)
277
-    {
278
-        return $this->prepare_for_set($value_found_in_db_for_model_object);
279
-    }
280
-
281
-    /**
282
-     * When echoing a field's value on a model object, this function is run to prepare the value for presentation in a
283
-     * webpage. For example, we may want to output floats with 2 decimal places by default, dates as "Monday Jan 12,
284
-     * 2013, at 3:23pm" instead of
285
-     * "8765678632", or any other modifications to how the value should be displayed, but not modified itself.
286
-     *
287
-     * @param mixed $value_on_field_to_be_outputted
288
-     * @return mixed
289
-     */
290
-    public function prepare_for_pretty_echoing($value_on_field_to_be_outputted)
291
-    {
292
-        return $value_on_field_to_be_outputted;
293
-    }
294
-
295
-
296
-    /**
297
-     * Returns whatever is set as the nicename for the object.
298
-     * @return string
299
-     */
300
-    public function getSchemaDescription()
301
-    {
302
-        return $this->get_nicename();
303
-    }
304
-
305
-
306
-    /**
307
-     * Returns whatever is set as the $_schema_type property for the object.
308
-     * Note: this will automatically add 'null' to the schema if the object is_nullable()
309
-     * @return string|array
310
-     */
311
-    public function getSchemaType()
312
-    {
313
-        if ($this->is_nullable()) {
314
-            $this->_schema_type = (array) $this->_schema_type;
315
-            if (! in_array('null', $this->_schema_type)) {
316
-                $this->_schema_type[] = 'null';
317
-            };
318
-        }
319
-        return $this->_schema_type;
320
-    }
321
-
322
-
323
-    /**
324
-     * Sets the _schema_type property.  Child classes should call this in their constructors to override the default state
325
-     * for this property.
326
-     * @param string|array $type
327
-     * @throws InvalidArgumentException
328
-     */
329
-    protected function setSchemaType($type)
330
-    {
331
-        $this->validateSchemaType($type);
332
-        $this->_schema_type = $type;
333
-    }
334
-
335
-
336
-    /**
337
-     * This is usually present when the $_schema_type property is 'object'.  Any child classes will need to override
338
-     * this method and return the properties for the schema.
339
-     *
340
-     * The reason this is not a property on the class is because there may be filters set on the values for the property
341
-     * that won't be exposed on construct.  For example enum type schemas may have the enum values filtered.
342
-     *
343
-     * @return array
344
-     */
345
-    public function getSchemaProperties()
346
-    {
347
-        return array();
348
-    }
349
-
350
-
351
-
352
-    /**
353
-     * By default this returns the scalar default value that was sent in on the class prepped according to the class type
354
-     * as the default.  However, when there are schema properties, then the default property is setup to mirror the
355
-     * property keys and correctly prepare the default according to that expected property value.
356
-     * The getSchema method validates whether the schema for default is setup correctly or not according to the schema type
357
-     *
358
-     * @return mixed
359
-     */
360
-    public function getSchemaDefault()
361
-    {
362
-        $default_value = $this->prepare_for_use_in_db($this->prepare_for_set($this->get_default_value()));
363
-        $schema_properties = $this->getSchemaProperties();
364
-
365
-        // if this schema has properties than shape the default value to match the properties shape.
366
-        if ($schema_properties) {
367
-            $value_to_return = array();
368
-            foreach ($schema_properties as $property_key => $property_schema) {
369
-                switch ($property_key) {
370
-                    case 'pretty':
371
-                    case 'rendered':
372
-                        $value_to_return[ $property_key ] = $this->prepare_for_pretty_echoing($this->prepare_for_set($default_value));
373
-                        break;
374
-                    default:
375
-                        $value_to_return[ $property_key ] = $default_value;
376
-                        break;
377
-                }
378
-            }
379
-            $default_value = $value_to_return;
380
-        }
381
-        return $default_value;
382
-    }
383
-
384
-
385
-
386
-
387
-    /**
388
-     * If a child class has enum values, they should override this method and provide a simple array
389
-     * of the enum values.
390
-
391
-     * The reason this is not a property on the class is because there may be filterable enum values that
392
-     * are set on the instantiated object that could be filtered after construct.
393
-     *
394
-     * @return array
395
-     */
396
-    public function getSchemaEnum()
397
-    {
398
-        return array();
399
-    }
400
-
401
-
402
-    /**
403
-     * This returns the value of the $_schema_format property on the object.
404
-     * @return string
405
-     */
406
-    public function getSchemaFormat()
407
-    {
408
-        return $this->_schema_format;
409
-    }
410
-
411
-
412
-    /**
413
-     * Sets the schema format property.
414
-     * @throws InvalidArgumentException
415
-     * @param string $format
416
-     */
417
-    protected function setSchemaFormat($format)
418
-    {
419
-        $this->validateSchemaFormat($format);
420
-        $this->_schema_format = $format;
421
-    }
422
-
423
-
424
-    /**
425
-     * This returns the value of the $_schema_readonly property on the object.
426
-     * @return bool
427
-     */
428
-    public function getSchemaReadonly()
429
-    {
430
-        return $this->_schema_readonly;
431
-    }
432
-
433
-
434
-    /**
435
-     * This sets the value for the $_schema_readonly property.
436
-     * @param bool $readonly  (only explicit boolean values are accepted)
437
-     */
438
-    protected function setSchemaReadOnly($readonly)
439
-    {
440
-        if (! is_bool($readonly)) {
441
-            throw new InvalidArgumentException(
442
-                sprintf(
443
-                    esc_html__('The incoming argument (%s) must be a boolean.', 'event_espresso'),
444
-                    print_r($readonly, true)
445
-                )
446
-            );
447
-        }
448
-
449
-        $this->_schema_readonly = $readonly;
450
-    }
451
-
452
-
453
-
454
-
455
-    /**
456
-     * Return `%d`, `%s` or `%f` to indicate the data type for the field.
457
-     * @uses _get_wpdb_data_type()
458
-     *
459
-     * @return string
460
-     */
461
-    public function get_wpdb_data_type()
462
-    {
463
-        return $this->_get_wpdb_data_type();
464
-    }
465
-
466
-
467
-    /**
468
-     * Return `%d`, `%s` or `%f` to indicate the data type for the field that should be indicated in wpdb queries.
469
-     * @param string $type  Included if a specific type is requested.
470
-     * @uses get_schema_type()
471
-     * @return string
472
-     */
473
-    protected function _get_wpdb_data_type($type = '')
474
-    {
475
-        $type = empty($type) ? $this->getSchemaType() : $type;
476
-
477
-        // if type is an array, then different parsing is required.
478
-        if (is_array($type)) {
479
-            return $this->_get_wpdb_data_type_for_type_array($type);
480
-        }
481
-
482
-        $wpdb_type = '%s';
483
-        switch ($type) {
484
-            case 'number':
485
-                $wpdb_type = '%f';
486
-                break;
487
-            case 'integer':
488
-            case 'boolean':
489
-                $wpdb_type = '%d';
490
-                break;
491
-            case 'object':
492
-                $properties = $this->getSchemaProperties();
493
-                if (isset($properties['raw'], $properties['raw']['type'])) {
494
-                    $wpdb_type = $this->_get_wpdb_data_type($properties['raw']['type']);
495
-                }
496
-                break; // leave at default
497
-        }
498
-        return $wpdb_type;
499
-    }
500
-
501
-
502
-
503
-    protected function _get_wpdb_data_type_for_type_array($type)
504
-    {
505
-        $type = (array) $type;
506
-        // first let's flip because then we can do a faster key check
507
-        $type = array_flip($type);
508
-
509
-        // check for things that mean '%s'
510
-        if (isset($type['string'], $type['object'], $type['array'])) {
511
-            return '%s';
512
-        }
513
-
514
-        // if makes it past the above condition and there's float in the array
515
-        // then the type is %f
516
-        if (isset($type['number'])) {
517
-            return '%f';
518
-        }
519
-
520
-        // if it makes it above the above conditions and there is an integer in the array
521
-        // then the type is %d
522
-        if (isset($type['integer'])) {
523
-            return '%d';
524
-        }
525
-
526
-        // anything else is a string
527
-        return '%s';
528
-    }
529
-
530
-
531
-    /**
532
-     * This returns elements used to represent this field in the json schema.
533
-     *
534
-     * @link http://json-schema.org/
535
-     * @return array
536
-     */
537
-    public function getSchema()
538
-    {
539
-        $schema = array(
540
-            'description' => $this->getSchemaDescription(),
541
-            'type' => $this->getSchemaType(),
542
-            'readonly' => $this->getSchemaReadonly(),
543
-            'default' => $this->getSchemaDefault()
544
-        );
545
-
546
-        // optional properties of the schema
547
-        $enum = $this->getSchemaEnum();
548
-        $properties = $this->getSchemaProperties();
549
-        $format = $this->getSchemaFormat();
550
-        if ($enum) {
551
-            $schema['enum'] = $enum;
552
-        }
553
-
554
-        if ($properties) {
555
-            $schema['properties'] = $properties;
556
-        }
557
-
558
-        if ($format) {
559
-            $schema['format'] = $format;
560
-        }
561
-        return $schema;
562
-    }
563
-
564
-    /**
565
-     * Some fields are in the database-only, (ie, used in queries etc), but shouldn't necessarily be part
566
-     * of the model objects (ie, client code shouldn't care to ever see their value... if client code does
567
-     * want to see their value, then they shouldn't be db-only fields!)
568
-     * Eg, when doing events as custom post types, querying the post_type is essential, but
569
-     * post_type is irrelevant for EE_Event objects (because they will ALL be of post_type 'esp_event').
570
-     * By default, all fields aren't db-only.
571
-     *
572
-     * @return boolean
573
-     */
574
-    public function is_db_only_field()
575
-    {
576
-        return false;
577
-    }
578
-
579
-
580
-    /**
581
-     * Validates the incoming string|array to ensure its an allowable type.
582
-     * @throws InvalidArgumentException
583
-     * @param string|array $type
584
-     */
585
-    private function validateSchemaType($type)
586
-    {
587
-        if (! (is_string($type) || is_array($type))) {
588
-            throw new InvalidArgumentException(
589
-                sprintf(
590
-                    esc_html__('The incoming argument (%s) must be a string or an array.', 'event_espresso'),
591
-                    print_r($type, true)
592
-                )
593
-            );
594
-        }
595
-
596
-        // validate allowable types.
597
-        // @link http://json-schema.org/latest/json-schema-core.html#rfc.section.4.2
598
-        $allowable_types = array_flip(
599
-            array(
600
-                'string',
601
-                'number',
602
-                'null',
603
-                'object',
604
-                'array',
605
-                'boolean',
606
-                'integer'
607
-            )
608
-        );
609
-
610
-        if (is_array($type)) {
611
-            foreach ($type as $item_in_type) {
612
-                $this->validateSchemaType($item_in_type);
613
-            }
614
-            return;
615
-        }
616
-
617
-        if (! isset($allowable_types[ $type ])) {
618
-            throw new InvalidArgumentException(
619
-                sprintf(
620
-                    esc_html__('The incoming argument (%1$s) must be one of the allowable types: %2$s', 'event_espresso'),
621
-                    $type,
622
-                    implode(',', array_flip($allowable_types))
623
-                )
624
-            );
625
-        }
626
-    }
627
-
628
-
629
-    /**
630
-     * Validates that the incoming format is an allowable string to use for the _schema_format property
631
-     * @throws InvalidArgumentException
632
-     * @param $format
633
-     */
634
-    private function validateSchemaFormat($format)
635
-    {
636
-        if (! is_string($format)) {
637
-            throw new InvalidArgumentException(
638
-                sprintf(
639
-                    esc_html__('The incoming argument (%s) must be a string.', 'event_espresso'),
640
-                    print_r($format, true)
641
-                )
642
-            );
643
-        }
644
-
645
-        // validate allowable format values
646
-        // @link http://json-schema.org/latest/json-schema-validation.html#rfc.section.7
647
-        $allowable_formats = array_flip(
648
-            array(
649
-                'date-time',
650
-                'email',
651
-                'hostname',
652
-                'ipv4',
653
-                'ipv6',
654
-                'uri',
655
-                'uriref'
656
-            )
657
-        );
658
-
659
-        if (! isset($allowable_formats[ $format ])) {
660
-            throw new InvalidArgumentException(
661
-                sprintf(
662
-                    esc_html__('The incoming argument (%1$s) must be one of the allowable formats: %2$s', 'event_espresso'),
663
-                    $format,
664
-                    implode(',', array_flip($allowable_formats))
665
-                )
666
-            );
667
-        }
668
-    }
22
+	/**
23
+	 * The alias for the table the column belongs to.
24
+	 * @var string
25
+	 */
26
+	protected $_table_alias;
27
+
28
+	/**
29
+	 * The actual db column name for the table
30
+	 * @var string
31
+	 */
32
+	protected $_table_column;
33
+
34
+
35
+	/**
36
+	 * The authoritative name for the table column (used by client code to reference the field).
37
+	 * @var string
38
+	 */
39
+	protected $_name;
40
+
41
+
42
+	/**
43
+	 * A description for the field.
44
+	 * @var string
45
+	 */
46
+	protected $_nicename;
47
+
48
+
49
+	/**
50
+	 * Whether the field is nullable or not
51
+	 * @var bool
52
+	 */
53
+	protected $_nullable;
54
+
55
+
56
+	/**
57
+	 * What the default value for the field should be.
58
+	 * @var mixed
59
+	 */
60
+	protected $_default_value;
61
+
62
+
63
+	/**
64
+	 * Other configuration for the field
65
+	 * @var mixed
66
+	 */
67
+	protected $_other_config;
68
+
69
+
70
+	/**
71
+	 * The name of the model this field is instantiated for.
72
+	 * @var string
73
+	 */
74
+	protected $_model_name;
75
+
76
+
77
+	/**
78
+	 * This should be a json-schema valid data type for the field.
79
+	 * @link http://json-schema.org/latest/json-schema-core.html#rfc.section.4.2
80
+	 * @var string
81
+	 */
82
+	private $_schema_type = 'string';
83
+
84
+
85
+	/**
86
+	 * If the schema has a defined format then it should be defined via this property.
87
+	 * @link http://json-schema.org/latest/json-schema-validation.html#rfc.section.7
88
+	 * @var string
89
+	 */
90
+	private $_schema_format = '';
91
+
92
+
93
+	/**
94
+	 * Indicates that the value of the field is managed exclusively by the server/model and not something
95
+	 * settable by client code.
96
+	 * @link http://json-schema.org/latest/json-schema-hypermedia.html#rfc.section.4.4
97
+	 * @var bool
98
+	 */
99
+	private $_schema_readonly = false;
100
+
101
+
102
+	/**
103
+	 * @param string $table_column
104
+	 * @param string $nicename
105
+	 * @param bool   $nullable
106
+	 * @param null   $default_value
107
+	 */
108
+	public function __construct($table_column, $nicename, $nullable, $default_value = null)
109
+	{
110
+		$this->_table_column  = $table_column;
111
+		$this->_nicename      = $nicename;
112
+		$this->_nullable      = $nullable;
113
+		$this->_default_value = $default_value;
114
+	}
115
+
116
+
117
+	/**
118
+	 * @param $table_alias
119
+	 * @param $name
120
+	 * @param $model_name
121
+	 */
122
+	public function _construct_finalize($table_alias, $name, $model_name)
123
+	{
124
+		$this->_table_alias = $table_alias;
125
+		$this->_name        = $name;
126
+		$this->_model_name  = $model_name;
127
+		/**
128
+		 * allow for changing the defaults
129
+		 */
130
+		$this->_nicename      = apply_filters(
131
+			'FHEE__EE_Model_Field_Base___construct_finalize___nicename',
132
+			$this->_nicename,
133
+			$this
134
+		);
135
+		$this->_default_value = apply_filters(
136
+			'FHEE__EE_Model_Field_Base___construct_finalize___default_value',
137
+			$this->_default_value,
138
+			$this
139
+		);
140
+	}
141
+
142
+	public function get_table_alias()
143
+	{
144
+		return $this->_table_alias;
145
+	}
146
+
147
+	public function get_table_column()
148
+	{
149
+		return $this->_table_column;
150
+	}
151
+
152
+	/**
153
+	 * Returns the name of the model this field is on. Eg 'Event' or 'Ticket_Datetime'
154
+	 *
155
+	 * @return string
156
+	 */
157
+	public function get_model_name()
158
+	{
159
+		return $this->_model_name;
160
+	}
161
+
162
+	/**
163
+	 * @throws \EE_Error
164
+	 * @return string
165
+	 */
166
+	public function get_name()
167
+	{
168
+		if ($this->_name) {
169
+			return $this->_name;
170
+		} else {
171
+			throw new EE_Error(sprintf(__(
172
+				"Model field '%s' has no name set. Did you make a model and forget to call the parent model constructor?",
173
+				"event_espresso"
174
+			), get_class($this)));
175
+		}
176
+	}
177
+
178
+	public function get_nicename()
179
+	{
180
+		return $this->_nicename;
181
+	}
182
+
183
+	public function is_nullable()
184
+	{
185
+		return $this->_nullable;
186
+	}
187
+
188
+	/**
189
+	 * returns whether this field is an auto-increment field or not. If it is, then
190
+	 * on insertion it can be null. However, on updates it must be present.
191
+	 *
192
+	 * @return boolean
193
+	 */
194
+	public function is_auto_increment()
195
+	{
196
+		return false;
197
+	}
198
+
199
+	/**
200
+	 * The default value in the model object's value domain. See lengthy comment about
201
+	 * value domains at the top of EEM_Base
202
+	 *
203
+	 * @return mixed
204
+	 */
205
+	public function get_default_value()
206
+	{
207
+		return $this->_default_value;
208
+	}
209
+
210
+	/**
211
+	 * Returns the table alias joined to the table column, however this isn't the right
212
+	 * table alias if the aliased table is being joined to. In that case, you can use
213
+	 * EE_Model_Parser::extract_table_alias_model_relation_chain_prefix() to find the table's current alias
214
+	 * in the current query
215
+	 *
216
+	 * @return string
217
+	 */
218
+	public function get_qualified_column()
219
+	{
220
+		return $this->get_table_alias() . "." . $this->get_table_column();
221
+	}
222
+
223
+	/**
224
+	 * When get() is called on a model object (eg EE_Event), before returning its value,
225
+	 * call this function on it, allowing us to customize the returned value based on
226
+	 * the field's type. Eg, we may want to unserialize it, strip tags, etc. By default,
227
+	 * we simply return it.
228
+	 *
229
+	 * @param mixed $value_of_field_on_model_object
230
+	 * @return mixed
231
+	 */
232
+	public function prepare_for_get($value_of_field_on_model_object)
233
+	{
234
+		return $value_of_field_on_model_object;
235
+	}
236
+
237
+	/**
238
+	 * When inserting or updating a field on a model object, run this function on each
239
+	 * value to prepare it for insertion into the db. Generally this converts
240
+	 * the validated input on the model object into the format used in the DB.
241
+	 *
242
+	 * @param mixed $value_of_field_on_model_object
243
+	 * @return mixed
244
+	 */
245
+	public function prepare_for_use_in_db($value_of_field_on_model_object)
246
+	{
247
+		return $value_of_field_on_model_object;
248
+	}
249
+
250
+	/**
251
+	 * When creating a brand-new model object, or setting a particular value for one of its fields, this function
252
+	 * is called before setting it on the model object. We may want to strip slashes, unserialize the value, etc.
253
+	 * By default, we do nothing.
254
+	 *
255
+	 * If the model field is going to perform any validation on the input, this is where it should be done
256
+	 * (once the value is on the model object, it may be used in other ways besides putting it into the DB
257
+	 * so it's best to validate it right away).
258
+	 *
259
+	 * @param mixed $value_inputted_for_field_on_model_object
260
+	 * @return mixed
261
+	 */
262
+	public function prepare_for_set($value_inputted_for_field_on_model_object)
263
+	{
264
+		return $value_inputted_for_field_on_model_object;
265
+	}
266
+
267
+
268
+	/**
269
+	 * When instantiating a model object from DB results, this function is called before setting each field.
270
+	 * We may want to serialize the value, etc. By default, we return the value using prepare_for_set() method as that
271
+	 * is the one child classes will most often define.
272
+	 *
273
+	 * @param mixed $value_found_in_db_for_model_object
274
+	 * @return mixed
275
+	 */
276
+	public function prepare_for_set_from_db($value_found_in_db_for_model_object)
277
+	{
278
+		return $this->prepare_for_set($value_found_in_db_for_model_object);
279
+	}
280
+
281
+	/**
282
+	 * When echoing a field's value on a model object, this function is run to prepare the value for presentation in a
283
+	 * webpage. For example, we may want to output floats with 2 decimal places by default, dates as "Monday Jan 12,
284
+	 * 2013, at 3:23pm" instead of
285
+	 * "8765678632", or any other modifications to how the value should be displayed, but not modified itself.
286
+	 *
287
+	 * @param mixed $value_on_field_to_be_outputted
288
+	 * @return mixed
289
+	 */
290
+	public function prepare_for_pretty_echoing($value_on_field_to_be_outputted)
291
+	{
292
+		return $value_on_field_to_be_outputted;
293
+	}
294
+
295
+
296
+	/**
297
+	 * Returns whatever is set as the nicename for the object.
298
+	 * @return string
299
+	 */
300
+	public function getSchemaDescription()
301
+	{
302
+		return $this->get_nicename();
303
+	}
304
+
305
+
306
+	/**
307
+	 * Returns whatever is set as the $_schema_type property for the object.
308
+	 * Note: this will automatically add 'null' to the schema if the object is_nullable()
309
+	 * @return string|array
310
+	 */
311
+	public function getSchemaType()
312
+	{
313
+		if ($this->is_nullable()) {
314
+			$this->_schema_type = (array) $this->_schema_type;
315
+			if (! in_array('null', $this->_schema_type)) {
316
+				$this->_schema_type[] = 'null';
317
+			};
318
+		}
319
+		return $this->_schema_type;
320
+	}
321
+
322
+
323
+	/**
324
+	 * Sets the _schema_type property.  Child classes should call this in their constructors to override the default state
325
+	 * for this property.
326
+	 * @param string|array $type
327
+	 * @throws InvalidArgumentException
328
+	 */
329
+	protected function setSchemaType($type)
330
+	{
331
+		$this->validateSchemaType($type);
332
+		$this->_schema_type = $type;
333
+	}
334
+
335
+
336
+	/**
337
+	 * This is usually present when the $_schema_type property is 'object'.  Any child classes will need to override
338
+	 * this method and return the properties for the schema.
339
+	 *
340
+	 * The reason this is not a property on the class is because there may be filters set on the values for the property
341
+	 * that won't be exposed on construct.  For example enum type schemas may have the enum values filtered.
342
+	 *
343
+	 * @return array
344
+	 */
345
+	public function getSchemaProperties()
346
+	{
347
+		return array();
348
+	}
349
+
350
+
351
+
352
+	/**
353
+	 * By default this returns the scalar default value that was sent in on the class prepped according to the class type
354
+	 * as the default.  However, when there are schema properties, then the default property is setup to mirror the
355
+	 * property keys and correctly prepare the default according to that expected property value.
356
+	 * The getSchema method validates whether the schema for default is setup correctly or not according to the schema type
357
+	 *
358
+	 * @return mixed
359
+	 */
360
+	public function getSchemaDefault()
361
+	{
362
+		$default_value = $this->prepare_for_use_in_db($this->prepare_for_set($this->get_default_value()));
363
+		$schema_properties = $this->getSchemaProperties();
364
+
365
+		// if this schema has properties than shape the default value to match the properties shape.
366
+		if ($schema_properties) {
367
+			$value_to_return = array();
368
+			foreach ($schema_properties as $property_key => $property_schema) {
369
+				switch ($property_key) {
370
+					case 'pretty':
371
+					case 'rendered':
372
+						$value_to_return[ $property_key ] = $this->prepare_for_pretty_echoing($this->prepare_for_set($default_value));
373
+						break;
374
+					default:
375
+						$value_to_return[ $property_key ] = $default_value;
376
+						break;
377
+				}
378
+			}
379
+			$default_value = $value_to_return;
380
+		}
381
+		return $default_value;
382
+	}
383
+
384
+
385
+
386
+
387
+	/**
388
+	 * If a child class has enum values, they should override this method and provide a simple array
389
+	 * of the enum values.
390
+	 * The reason this is not a property on the class is because there may be filterable enum values that
391
+	 * are set on the instantiated object that could be filtered after construct.
392
+	 *
393
+	 * @return array
394
+	 */
395
+	public function getSchemaEnum()
396
+	{
397
+		return array();
398
+	}
399
+
400
+
401
+	/**
402
+	 * This returns the value of the $_schema_format property on the object.
403
+	 * @return string
404
+	 */
405
+	public function getSchemaFormat()
406
+	{
407
+		return $this->_schema_format;
408
+	}
409
+
410
+
411
+	/**
412
+	 * Sets the schema format property.
413
+	 * @throws InvalidArgumentException
414
+	 * @param string $format
415
+	 */
416
+	protected function setSchemaFormat($format)
417
+	{
418
+		$this->validateSchemaFormat($format);
419
+		$this->_schema_format = $format;
420
+	}
421
+
422
+
423
+	/**
424
+	 * This returns the value of the $_schema_readonly property on the object.
425
+	 * @return bool
426
+	 */
427
+	public function getSchemaReadonly()
428
+	{
429
+		return $this->_schema_readonly;
430
+	}
431
+
432
+
433
+	/**
434
+	 * This sets the value for the $_schema_readonly property.
435
+	 * @param bool $readonly  (only explicit boolean values are accepted)
436
+	 */
437
+	protected function setSchemaReadOnly($readonly)
438
+	{
439
+		if (! is_bool($readonly)) {
440
+			throw new InvalidArgumentException(
441
+				sprintf(
442
+					esc_html__('The incoming argument (%s) must be a boolean.', 'event_espresso'),
443
+					print_r($readonly, true)
444
+				)
445
+			);
446
+		}
447
+
448
+		$this->_schema_readonly = $readonly;
449
+	}
450
+
451
+
452
+
453
+
454
+	/**
455
+	 * Return `%d`, `%s` or `%f` to indicate the data type for the field.
456
+	 * @uses _get_wpdb_data_type()
457
+	 *
458
+	 * @return string
459
+	 */
460
+	public function get_wpdb_data_type()
461
+	{
462
+		return $this->_get_wpdb_data_type();
463
+	}
464
+
465
+
466
+	/**
467
+	 * Return `%d`, `%s` or `%f` to indicate the data type for the field that should be indicated in wpdb queries.
468
+	 * @param string $type  Included if a specific type is requested.
469
+	 * @uses get_schema_type()
470
+	 * @return string
471
+	 */
472
+	protected function _get_wpdb_data_type($type = '')
473
+	{
474
+		$type = empty($type) ? $this->getSchemaType() : $type;
475
+
476
+		// if type is an array, then different parsing is required.
477
+		if (is_array($type)) {
478
+			return $this->_get_wpdb_data_type_for_type_array($type);
479
+		}
480
+
481
+		$wpdb_type = '%s';
482
+		switch ($type) {
483
+			case 'number':
484
+				$wpdb_type = '%f';
485
+				break;
486
+			case 'integer':
487
+			case 'boolean':
488
+				$wpdb_type = '%d';
489
+				break;
490
+			case 'object':
491
+				$properties = $this->getSchemaProperties();
492
+				if (isset($properties['raw'], $properties['raw']['type'])) {
493
+					$wpdb_type = $this->_get_wpdb_data_type($properties['raw']['type']);
494
+				}
495
+				break; // leave at default
496
+		}
497
+		return $wpdb_type;
498
+	}
499
+
500
+
501
+
502
+	protected function _get_wpdb_data_type_for_type_array($type)
503
+	{
504
+		$type = (array) $type;
505
+		// first let's flip because then we can do a faster key check
506
+		$type = array_flip($type);
507
+
508
+		// check for things that mean '%s'
509
+		if (isset($type['string'], $type['object'], $type['array'])) {
510
+			return '%s';
511
+		}
512
+
513
+		// if makes it past the above condition and there's float in the array
514
+		// then the type is %f
515
+		if (isset($type['number'])) {
516
+			return '%f';
517
+		}
518
+
519
+		// if it makes it above the above conditions and there is an integer in the array
520
+		// then the type is %d
521
+		if (isset($type['integer'])) {
522
+			return '%d';
523
+		}
524
+
525
+		// anything else is a string
526
+		return '%s';
527
+	}
528
+
529
+
530
+	/**
531
+	 * This returns elements used to represent this field in the json schema.
532
+	 *
533
+	 * @link http://json-schema.org/
534
+	 * @return array
535
+	 */
536
+	public function getSchema()
537
+	{
538
+		$schema = array(
539
+			'description' => $this->getSchemaDescription(),
540
+			'type' => $this->getSchemaType(),
541
+			'readonly' => $this->getSchemaReadonly(),
542
+			'default' => $this->getSchemaDefault()
543
+		);
544
+
545
+		// optional properties of the schema
546
+		$enum = $this->getSchemaEnum();
547
+		$properties = $this->getSchemaProperties();
548
+		$format = $this->getSchemaFormat();
549
+		if ($enum) {
550
+			$schema['enum'] = $enum;
551
+		}
552
+
553
+		if ($properties) {
554
+			$schema['properties'] = $properties;
555
+		}
556
+
557
+		if ($format) {
558
+			$schema['format'] = $format;
559
+		}
560
+		return $schema;
561
+	}
562
+
563
+	/**
564
+	 * Some fields are in the database-only, (ie, used in queries etc), but shouldn't necessarily be part
565
+	 * of the model objects (ie, client code shouldn't care to ever see their value... if client code does
566
+	 * want to see their value, then they shouldn't be db-only fields!)
567
+	 * Eg, when doing events as custom post types, querying the post_type is essential, but
568
+	 * post_type is irrelevant for EE_Event objects (because they will ALL be of post_type 'esp_event').
569
+	 * By default, all fields aren't db-only.
570
+	 *
571
+	 * @return boolean
572
+	 */
573
+	public function is_db_only_field()
574
+	{
575
+		return false;
576
+	}
577
+
578
+
579
+	/**
580
+	 * Validates the incoming string|array to ensure its an allowable type.
581
+	 * @throws InvalidArgumentException
582
+	 * @param string|array $type
583
+	 */
584
+	private function validateSchemaType($type)
585
+	{
586
+		if (! (is_string($type) || is_array($type))) {
587
+			throw new InvalidArgumentException(
588
+				sprintf(
589
+					esc_html__('The incoming argument (%s) must be a string or an array.', 'event_espresso'),
590
+					print_r($type, true)
591
+				)
592
+			);
593
+		}
594
+
595
+		// validate allowable types.
596
+		// @link http://json-schema.org/latest/json-schema-core.html#rfc.section.4.2
597
+		$allowable_types = array_flip(
598
+			array(
599
+				'string',
600
+				'number',
601
+				'null',
602
+				'object',
603
+				'array',
604
+				'boolean',
605
+				'integer'
606
+			)
607
+		);
608
+
609
+		if (is_array($type)) {
610
+			foreach ($type as $item_in_type) {
611
+				$this->validateSchemaType($item_in_type);
612
+			}
613
+			return;
614
+		}
615
+
616
+		if (! isset($allowable_types[ $type ])) {
617
+			throw new InvalidArgumentException(
618
+				sprintf(
619
+					esc_html__('The incoming argument (%1$s) must be one of the allowable types: %2$s', 'event_espresso'),
620
+					$type,
621
+					implode(',', array_flip($allowable_types))
622
+				)
623
+			);
624
+		}
625
+	}
626
+
627
+
628
+	/**
629
+	 * Validates that the incoming format is an allowable string to use for the _schema_format property
630
+	 * @throws InvalidArgumentException
631
+	 * @param $format
632
+	 */
633
+	private function validateSchemaFormat($format)
634
+	{
635
+		if (! is_string($format)) {
636
+			throw new InvalidArgumentException(
637
+				sprintf(
638
+					esc_html__('The incoming argument (%s) must be a string.', 'event_espresso'),
639
+					print_r($format, true)
640
+				)
641
+			);
642
+		}
643
+
644
+		// validate allowable format values
645
+		// @link http://json-schema.org/latest/json-schema-validation.html#rfc.section.7
646
+		$allowable_formats = array_flip(
647
+			array(
648
+				'date-time',
649
+				'email',
650
+				'hostname',
651
+				'ipv4',
652
+				'ipv6',
653
+				'uri',
654
+				'uriref'
655
+			)
656
+		);
657
+
658
+		if (! isset($allowable_formats[ $format ])) {
659
+			throw new InvalidArgumentException(
660
+				sprintf(
661
+					esc_html__('The incoming argument (%1$s) must be one of the allowable formats: %2$s', 'event_espresso'),
662
+					$format,
663
+					implode(',', array_flip($allowable_formats))
664
+				)
665
+			);
666
+		}
667
+	}
669 668
 }
Please login to merge, or discard this patch.
Spacing   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -127,7 +127,7 @@  discard block
 block discarded – undo
127 127
         /**
128 128
          * allow for changing the defaults
129 129
          */
130
-        $this->_nicename      = apply_filters(
130
+        $this->_nicename = apply_filters(
131 131
             'FHEE__EE_Model_Field_Base___construct_finalize___nicename',
132 132
             $this->_nicename,
133 133
             $this
@@ -217,7 +217,7 @@  discard block
 block discarded – undo
217 217
      */
218 218
     public function get_qualified_column()
219 219
     {
220
-        return $this->get_table_alias() . "." . $this->get_table_column();
220
+        return $this->get_table_alias().".".$this->get_table_column();
221 221
     }
222 222
 
223 223
     /**
@@ -312,7 +312,7 @@  discard block
 block discarded – undo
312 312
     {
313 313
         if ($this->is_nullable()) {
314 314
             $this->_schema_type = (array) $this->_schema_type;
315
-            if (! in_array('null', $this->_schema_type)) {
315
+            if ( ! in_array('null', $this->_schema_type)) {
316 316
                 $this->_schema_type[] = 'null';
317 317
             };
318 318
         }
@@ -369,10 +369,10 @@  discard block
 block discarded – undo
369 369
                 switch ($property_key) {
370 370
                     case 'pretty':
371 371
                     case 'rendered':
372
-                        $value_to_return[ $property_key ] = $this->prepare_for_pretty_echoing($this->prepare_for_set($default_value));
372
+                        $value_to_return[$property_key] = $this->prepare_for_pretty_echoing($this->prepare_for_set($default_value));
373 373
                         break;
374 374
                     default:
375
-                        $value_to_return[ $property_key ] = $default_value;
375
+                        $value_to_return[$property_key] = $default_value;
376 376
                         break;
377 377
                 }
378 378
             }
@@ -437,7 +437,7 @@  discard block
 block discarded – undo
437 437
      */
438 438
     protected function setSchemaReadOnly($readonly)
439 439
     {
440
-        if (! is_bool($readonly)) {
440
+        if ( ! is_bool($readonly)) {
441 441
             throw new InvalidArgumentException(
442 442
                 sprintf(
443 443
                     esc_html__('The incoming argument (%s) must be a boolean.', 'event_espresso'),
@@ -584,7 +584,7 @@  discard block
 block discarded – undo
584 584
      */
585 585
     private function validateSchemaType($type)
586 586
     {
587
-        if (! (is_string($type) || is_array($type))) {
587
+        if ( ! (is_string($type) || is_array($type))) {
588 588
             throw new InvalidArgumentException(
589 589
                 sprintf(
590 590
                     esc_html__('The incoming argument (%s) must be a string or an array.', 'event_espresso'),
@@ -614,7 +614,7 @@  discard block
 block discarded – undo
614 614
             return;
615 615
         }
616 616
 
617
-        if (! isset($allowable_types[ $type ])) {
617
+        if ( ! isset($allowable_types[$type])) {
618 618
             throw new InvalidArgumentException(
619 619
                 sprintf(
620 620
                     esc_html__('The incoming argument (%1$s) must be one of the allowable types: %2$s', 'event_espresso'),
@@ -633,7 +633,7 @@  discard block
 block discarded – undo
633 633
      */
634 634
     private function validateSchemaFormat($format)
635 635
     {
636
-        if (! is_string($format)) {
636
+        if ( ! is_string($format)) {
637 637
             throw new InvalidArgumentException(
638 638
                 sprintf(
639 639
                     esc_html__('The incoming argument (%s) must be a string.', 'event_espresso'),
@@ -656,7 +656,7 @@  discard block
 block discarded – undo
656 656
             )
657 657
         );
658 658
 
659
-        if (! isset($allowable_formats[ $format ])) {
659
+        if ( ! isset($allowable_formats[$format])) {
660 660
             throw new InvalidArgumentException(
661 661
                 sprintf(
662 662
                     esc_html__('The incoming argument (%1$s) must be one of the allowable formats: %2$s', 'event_espresso'),
Please login to merge, or discard this patch.
core/db_models/fields/EE_Money_Field.php 2 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -12,7 +12,7 @@
 block discarded – undo
12 12
      * @param string $table_column
13 13
      * @param string $nicename
14 14
      * @param bool   $nullable
15
-     * @param null   $default_value
15
+     * @param integer   $default_value
16 16
      */
17 17
     public function __construct($table_column, $nicename, $nullable, $default_value = null)
18 18
     {
Please login to merge, or discard this patch.
Indentation   +78 added lines, -78 removed lines patch added patch discarded remove patch
@@ -7,92 +7,92 @@
 block discarded – undo
7 7
 class EE_Money_Field extends EE_Float_Field
8 8
 {
9 9
 
10
-    /**
11
-     * @param string $table_column
12
-     * @param string $nicename
13
-     * @param bool   $nullable
14
-     * @param null   $default_value
15
-     */
16
-    public function __construct($table_column, $nicename, $nullable, $default_value = null)
17
-    {
18
-        parent::__construct($table_column, $nicename, $nullable, $default_value);
19
-        $this->setSchemaType('object');
20
-    }
10
+	/**
11
+	 * @param string $table_column
12
+	 * @param string $nicename
13
+	 * @param bool   $nullable
14
+	 * @param null   $default_value
15
+	 */
16
+	public function __construct($table_column, $nicename, $nullable, $default_value = null)
17
+	{
18
+		parent::__construct($table_column, $nicename, $nullable, $default_value);
19
+		$this->setSchemaType('object');
20
+	}
21 21
 
22 22
 
23
-    /**
24
-     * Schemas:
25
-     *    'localized_float': "3,023.00"
26
-     *    'no_currency_code': "$3,023.00"
27
-     *    null: "$3,023.00<span>USD</span>"
28
-     *
29
-     * @param string $value_on_field_to_be_outputted
30
-     * @param string $schema
31
-     * @return string
32
-     */
33
-    public function prepare_for_pretty_echoing($value_on_field_to_be_outputted, $schema = null)
34
-    {
35
-        $pretty_float = parent::prepare_for_pretty_echoing($value_on_field_to_be_outputted);
23
+	/**
24
+	 * Schemas:
25
+	 *    'localized_float': "3,023.00"
26
+	 *    'no_currency_code': "$3,023.00"
27
+	 *    null: "$3,023.00<span>USD</span>"
28
+	 *
29
+	 * @param string $value_on_field_to_be_outputted
30
+	 * @param string $schema
31
+	 * @return string
32
+	 */
33
+	public function prepare_for_pretty_echoing($value_on_field_to_be_outputted, $schema = null)
34
+	{
35
+		$pretty_float = parent::prepare_for_pretty_echoing($value_on_field_to_be_outputted);
36 36
 
37
-        if ($schema == 'localized_float') {
38
-            return $pretty_float;
39
-        }
40
-        if ($schema == 'no_currency_code') {
37
+		if ($schema == 'localized_float') {
38
+			return $pretty_float;
39
+		}
40
+		if ($schema == 'no_currency_code') {
41 41
 //          echo "schema no currency!";
42
-            $display_code = false;
43
-        } else {
44
-            $display_code = true;
45
-        }
46
-        // we don't use the $pretty_float because format_currency will take care of it.
47
-        return EEH_Template::format_currency($value_on_field_to_be_outputted, false, $display_code);
48
-    }
42
+			$display_code = false;
43
+		} else {
44
+			$display_code = true;
45
+		}
46
+		// we don't use the $pretty_float because format_currency will take care of it.
47
+		return EEH_Template::format_currency($value_on_field_to_be_outputted, false, $display_code);
48
+	}
49 49
 
50
-    /**
51
-     * If provided with a string, strips out money-related formatting to turn it into a proper float.
52
-     * Rounds the float to the correct number of decimal places for this country's currency.
53
-     * Also, interprets periods and commas according to the country's currency settings.
54
-     * So if you want to pass in a string that NEEDS to interpret periods as decimal marks, call floatval() on it first.
55
-     *
56
-     * @param string $value_inputted_for_field_on_model_object
57
-     * @return float
58
-     */
59
-    public function prepare_for_set($value_inputted_for_field_on_model_object)
60
-    {
61
-        // remove any currencies etc.
50
+	/**
51
+	 * If provided with a string, strips out money-related formatting to turn it into a proper float.
52
+	 * Rounds the float to the correct number of decimal places for this country's currency.
53
+	 * Also, interprets periods and commas according to the country's currency settings.
54
+	 * So if you want to pass in a string that NEEDS to interpret periods as decimal marks, call floatval() on it first.
55
+	 *
56
+	 * @param string $value_inputted_for_field_on_model_object
57
+	 * @return float
58
+	 */
59
+	public function prepare_for_set($value_inputted_for_field_on_model_object)
60
+	{
61
+		// remove any currencies etc.
62 62
 //      if(is_string($value_inputted_for_field_on_model_object)){
63 63
 //          $value_inputted_for_field_on_model_object = preg_replace("/[^0-9,.]/", "", $value_inputted_for_field_on_model_object);
64 64
 //      }
65
-        // now it's a float-style string or number
66
-        $float_val = parent::prepare_for_set($value_inputted_for_field_on_model_object);
67
-        // round to the correctly number of decimal places for this  currency
68
-        $rounded_value = round($float_val, EE_Registry::instance()->CFG->currency->dec_plc);
69
-        return $rounded_value;
70
-    }
65
+		// now it's a float-style string or number
66
+		$float_val = parent::prepare_for_set($value_inputted_for_field_on_model_object);
67
+		// round to the correctly number of decimal places for this  currency
68
+		$rounded_value = round($float_val, EE_Registry::instance()->CFG->currency->dec_plc);
69
+		return $rounded_value;
70
+	}
71 71
 
72
-    public function prepare_for_get($value_of_field_on_model_object)
73
-    {
74
-        $c = EE_Registry::instance()->CFG->currency;
75
-        return round(parent::prepare_for_get($value_of_field_on_model_object), $c->dec_plc);
76
-    }
72
+	public function prepare_for_get($value_of_field_on_model_object)
73
+	{
74
+		$c = EE_Registry::instance()->CFG->currency;
75
+		return round(parent::prepare_for_get($value_of_field_on_model_object), $c->dec_plc);
76
+	}
77 77
 
78
-    public function getSchemaProperties()
79
-    {
80
-        return array(
81
-            'raw' => array(
82
-                'description' =>  sprintf(
83
-                    __('%s - the raw value as it exists in the database as a simple float.', 'event_espresso'),
84
-                    $this->get_nicename()
85
-                ),
86
-                'type' => 'number',
87
-            ),
88
-            'pretty' => array(
89
-                'description' =>  sprintf(
90
-                    __('%s - formatted for display in the set currency and decimal places.', 'event_espresso'),
91
-                    $this->get_nicename()
92
-                ),
93
-                'type' => 'string',
94
-                'format' => 'money'
95
-            )
96
-        );
97
-    }
78
+	public function getSchemaProperties()
79
+	{
80
+		return array(
81
+			'raw' => array(
82
+				'description' =>  sprintf(
83
+					__('%s - the raw value as it exists in the database as a simple float.', 'event_espresso'),
84
+					$this->get_nicename()
85
+				),
86
+				'type' => 'number',
87
+			),
88
+			'pretty' => array(
89
+				'description' =>  sprintf(
90
+					__('%s - formatted for display in the set currency and decimal places.', 'event_espresso'),
91
+					$this->get_nicename()
92
+				),
93
+				'type' => 'string',
94
+				'format' => 'money'
95
+			)
96
+		);
97
+	}
98 98
 }
Please login to merge, or discard this patch.
core/db_models/fields/EE_Serialized_Text_Field.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -19,7 +19,7 @@
 block discarded – undo
19 19
     public function __construct($table_column, $nicename, $nullable, $default_value = null)
20 20
     {
21 21
         parent::__construct($table_column, $nicename, $nullable, $default_value);
22
-        $this->setSchemaType(array('object','string'));
22
+        $this->setSchemaType(array('object', 'string'));
23 23
     }
24 24
 
25 25
 
Please login to merge, or discard this patch.
Indentation   +63 added lines, -63 removed lines patch added patch discarded remove patch
@@ -9,72 +9,72 @@
 block discarded – undo
9 9
 class EE_Serialized_Text_Field extends EE_Text_Field_Base
10 10
 {
11 11
 
12
-    /**
13
-     * @param string $table_column
14
-     * @param string $nicename
15
-     * @param bool   $nullable
16
-     * @param null   $default_value
17
-     */
18
-    public function __construct($table_column, $nicename, $nullable, $default_value = null)
19
-    {
20
-        parent::__construct($table_column, $nicename, $nullable, $default_value);
21
-        $this->setSchemaType(array('object','string'));
22
-    }
12
+	/**
13
+	 * @param string $table_column
14
+	 * @param string $nicename
15
+	 * @param bool   $nullable
16
+	 * @param null   $default_value
17
+	 */
18
+	public function __construct($table_column, $nicename, $nullable, $default_value = null)
19
+	{
20
+		parent::__construct($table_column, $nicename, $nullable, $default_value);
21
+		$this->setSchemaType(array('object','string'));
22
+	}
23 23
 
24 24
 
25
-    /**
26
-     * Value SHOULD be an array, and we want to now convert it to a serialized string
27
-     *
28
-     * @param array $value_of_field_on_model_object
29
-     * @return string
30
-     */
31
-    public function prepare_for_use_in_db($value_of_field_on_model_object)
32
-    {
33
-        return maybe_serialize($value_of_field_on_model_object);
34
-    }
25
+	/**
26
+	 * Value SHOULD be an array, and we want to now convert it to a serialized string
27
+	 *
28
+	 * @param array $value_of_field_on_model_object
29
+	 * @return string
30
+	 */
31
+	public function prepare_for_use_in_db($value_of_field_on_model_object)
32
+	{
33
+		return maybe_serialize($value_of_field_on_model_object);
34
+	}
35 35
 
36
-    public function prepare_for_set($value_inputted_for_field_on_model_object)
37
-    {
38
-        $value_inputted_for_field_on_model_object = EEH_Array::maybe_unserialize($value_inputted_for_field_on_model_object);
39
-        if (is_string($value_inputted_for_field_on_model_object)) {
40
-            return parent::prepare_for_set($value_inputted_for_field_on_model_object);
41
-        } elseif (is_array($value_inputted_for_field_on_model_object)) {
42
-            return array_map(array($this, 'prepare_for_set'), $value_inputted_for_field_on_model_object);
43
-        } else {// so they passed NULL or an INT or something wack
44
-            return $value_inputted_for_field_on_model_object;
45
-        }
46
-    }
36
+	public function prepare_for_set($value_inputted_for_field_on_model_object)
37
+	{
38
+		$value_inputted_for_field_on_model_object = EEH_Array::maybe_unserialize($value_inputted_for_field_on_model_object);
39
+		if (is_string($value_inputted_for_field_on_model_object)) {
40
+			return parent::prepare_for_set($value_inputted_for_field_on_model_object);
41
+		} elseif (is_array($value_inputted_for_field_on_model_object)) {
42
+			return array_map(array($this, 'prepare_for_set'), $value_inputted_for_field_on_model_object);
43
+		} else {// so they passed NULL or an INT or something wack
44
+			return $value_inputted_for_field_on_model_object;
45
+		}
46
+	}
47 47
 
48
-    /**
49
-     * Value provided should definetely be a serialized string. We should unserialize into an array
50
-     *
51
-     * @param string $value_found_in_db_for_model_object
52
-     * @return array
53
-     */
54
-    public function prepare_for_set_from_db($value_found_in_db_for_model_object)
55
-    {
56
-        return EEH_Array::maybe_unserialize($value_found_in_db_for_model_object);
57
-    }
48
+	/**
49
+	 * Value provided should definetely be a serialized string. We should unserialize into an array
50
+	 *
51
+	 * @param string $value_found_in_db_for_model_object
52
+	 * @return array
53
+	 */
54
+	public function prepare_for_set_from_db($value_found_in_db_for_model_object)
55
+	{
56
+		return EEH_Array::maybe_unserialize($value_found_in_db_for_model_object);
57
+	}
58 58
 
59
-    /**
60
-     * Gets a string representation of the array
61
-     *
62
-     * @param type   $value_on_field_to_be_outputted
63
-     * @param string $schema , possible values are ',', others can be added
64
-     * @return string
65
-     */
66
-    public function prepare_for_pretty_echoing($value_on_field_to_be_outputted, $schema = null)
67
-    {
68
-        switch ($schema) {
69
-            case 'print_r':
70
-                $pretty_value = print_r($value_on_field_to_be_outputted, true);
71
-                break;
72
-            case 'as_table':
73
-                $pretty_value = EEH_Template::layout_array_as_table($value_on_field_to_be_outputted);
74
-                break;
75
-            default:
76
-                $pretty_value = implode(", ", $value_on_field_to_be_outputted);
77
-        }
78
-        return $pretty_value;
79
-    }
59
+	/**
60
+	 * Gets a string representation of the array
61
+	 *
62
+	 * @param type   $value_on_field_to_be_outputted
63
+	 * @param string $schema , possible values are ',', others can be added
64
+	 * @return string
65
+	 */
66
+	public function prepare_for_pretty_echoing($value_on_field_to_be_outputted, $schema = null)
67
+	{
68
+		switch ($schema) {
69
+			case 'print_r':
70
+				$pretty_value = print_r($value_on_field_to_be_outputted, true);
71
+				break;
72
+			case 'as_table':
73
+				$pretty_value = EEH_Template::layout_array_as_table($value_on_field_to_be_outputted);
74
+				break;
75
+			default:
76
+				$pretty_value = implode(", ", $value_on_field_to_be_outputted);
77
+		}
78
+		return $pretty_value;
79
+	}
80 80
 }
Please login to merge, or discard this patch.
core/db_models/fields/EE_DB_Only_Float_Field.php 1 patch
Indentation   +11 added lines, -11 removed lines patch added patch discarded remove patch
@@ -3,16 +3,16 @@
 block discarded – undo
3 3
 
4 4
 class EE_DB_Only_Float_Field extends EE_DB_Only_Field_Base
5 5
 {
6
-    /**
7
-     * @param string $table_column
8
-     * @param string $nicename
9
-     * @param bool   $nullable
10
-     * @param null   $default_value
11
-     */
12
-    public function __construct($table_column, $nicename, $nullable, $default_value = null)
13
-    {
14
-        parent::__construct($table_column, $nicename, $nullable, $default_value);
15
-        $this->setSchemaType('number');
16
-    }
6
+	/**
7
+	 * @param string $table_column
8
+	 * @param string $nicename
9
+	 * @param bool   $nullable
10
+	 * @param null   $default_value
11
+	 */
12
+	public function __construct($table_column, $nicename, $nullable, $default_value = null)
13
+	{
14
+		parent::__construct($table_column, $nicename, $nullable, $default_value);
15
+		$this->setSchemaType('number');
16
+	}
17 17
 
18 18
 }
Please login to merge, or discard this patch.
core/domain/EnqueueAssetsInterface.php 1 patch
Indentation   +39 added lines, -39 removed lines patch added patch discarded remove patch
@@ -8,45 +8,45 @@
 block discarded – undo
8 8
 interface EnqueueAssetsInterface
9 9
 {
10 10
 
11
-    /**
12
-     * a place to register scripts and stylesheets with WordPress core
13
-     * IMPORTANT !!!
14
-     * ALL JavaScript files need to be registered for loading in the footer
15
-     * by setting the 5th parameter of wp_register_script() to ` true `
16
-     *
17
-     * @return void
18
-     */
19
-    public function registerScriptsAndStylesheets();
20
-
21
-    /**
22
-     * a place to enqueue previously registered stylesheets
23
-     * this will be called during the wp_enqueue_scripts hook for frontend requests
24
-     *
25
-     * @return void
26
-     */
27
-    public function enqueueStylesheets();
28
-
29
-    /**
30
-     * a place to enqueue previously registered stylesheets
31
-     * this will be called during the admin_enqueue_scripts hook for admin requests
32
-     *
33
-     * @return void
34
-     */
35
-    public function enqueueAdminStylesheets();
36
-
37
-    /**
38
-     * a place to enqueue previously registered scripts for frontend requests
39
-     *
40
-     * @return void
41
-     */
42
-    public function enqueueScripts();
43
-
44
-    /**
45
-     * a place to enqueue previously registered scripts for admin requests
46
-     *
47
-     * @return void
48
-     */
49
-    public function enqueueAdminScripts();
11
+	/**
12
+	 * a place to register scripts and stylesheets with WordPress core
13
+	 * IMPORTANT !!!
14
+	 * ALL JavaScript files need to be registered for loading in the footer
15
+	 * by setting the 5th parameter of wp_register_script() to ` true `
16
+	 *
17
+	 * @return void
18
+	 */
19
+	public function registerScriptsAndStylesheets();
20
+
21
+	/**
22
+	 * a place to enqueue previously registered stylesheets
23
+	 * this will be called during the wp_enqueue_scripts hook for frontend requests
24
+	 *
25
+	 * @return void
26
+	 */
27
+	public function enqueueStylesheets();
28
+
29
+	/**
30
+	 * a place to enqueue previously registered stylesheets
31
+	 * this will be called during the admin_enqueue_scripts hook for admin requests
32
+	 *
33
+	 * @return void
34
+	 */
35
+	public function enqueueAdminStylesheets();
36
+
37
+	/**
38
+	 * a place to enqueue previously registered scripts for frontend requests
39
+	 *
40
+	 * @return void
41
+	 */
42
+	public function enqueueScripts();
43
+
44
+	/**
45
+	 * a place to enqueue previously registered scripts for admin requests
46
+	 *
47
+	 * @return void
48
+	 */
49
+	public function enqueueAdminScripts();
50 50
 
51 51
 }
52 52
 // End of file EnqueueAssetsInterface.php
Please login to merge, or discard this patch.
public/Espresso_Arabica_2014/content-espresso_events-thumbnail.php 1 patch
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -1,15 +1,15 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 //echo '<br/><h6 style="color:#2EA2CC;">'. __FILE__ . ' &nbsp; <span style="font-weight:normal;color:#E76700"> Line #: ' . __LINE__ . '</span></h6>';
3 3
 global $post;
4
-do_action( 'AHEE_event_details_before_featured_img', $post );
4
+do_action('AHEE_event_details_before_featured_img', $post);
5 5
 
6
-if ( has_post_thumbnail( $post->ID )) :
7
-	if ( $img_ID = get_post_thumbnail_id( $post->ID )) :
8
-		if ( $featured_img = wp_get_attachment_image_src( $img_ID, 'large' )) :
9
-			$caption = esc_attr( get_post( get_post( $img_ID ))->post_excerpt );
6
+if (has_post_thumbnail($post->ID)) :
7
+	if ($img_ID = get_post_thumbnail_id($post->ID)) :
8
+		if ($featured_img = wp_get_attachment_image_src($img_ID, 'large')) :
9
+			$caption = esc_attr(get_post(get_post($img_ID))->post_excerpt);
10 10
 			?>
11 11
 <div id="ee-event-img-dv-<?php echo $post->ID; ?>" class="ee-event-img-dv">
12
-	<a class="ee-event-img-lnk" href="<?php the_permalink(); ?>"<?php echo \EED_Events_Archive::link_target();?>>
12
+	<a class="ee-event-img-lnk" href="<?php the_permalink(); ?>"<?php echo \EED_Events_Archive::link_target(); ?>>
13 13
 		<img class="ee-event-img" src="<?php echo $featured_img[0]; ?>" width="<?php echo $featured_img[1]; ?>" height="<?php echo $featured_img[2]; ?>" alt="<?php echo $caption; ?>"/>
14 14
 	</a>
15 15
 </div>
@@ -18,4 +18,4 @@  discard block
 block discarded – undo
18 18
 	endif;
19 19
 endif;
20 20
 ?>
21
-<?php do_action( 'AHEE_event_details_after_featured_img', $post );?>
21
+<?php do_action('AHEE_event_details_after_featured_img', $post); ?>
Please login to merge, or discard this patch.
core/domain/services/capabilities/CapCheck.php 3 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -38,7 +38,7 @@
 block discarded – undo
38 38
 
39 39
 
40 40
     /**
41
-     * @param string|array $capability   - the capability to be checked, like: 'ee_edit_registrations',
41
+     * @param string $capability   - the capability to be checked, like: 'ee_edit_registrations',
42 42
      *                                   or an array of capability strings
43 43
      * @param string       $context      - what the user is attempting to do, like: 'Edit Registration'
44 44
      * @param int          $ID           - (optional) ID for item where current_user_can is being called from
Please login to merge, or discard this patch.
Indentation   +52 added lines, -52 removed lines patch added patch discarded remove patch
@@ -15,66 +15,66 @@
 block discarded – undo
15 15
 class CapCheck implements CapCheckInterface
16 16
 {
17 17
 
18
-    /**
19
-     * @var string|array $capability
20
-     */
21
-    private $capability;
18
+	/**
19
+	 * @var string|array $capability
20
+	 */
21
+	private $capability;
22 22
 
23
-    /**
24
-     * @var string $context
25
-     */
26
-    private $context;
23
+	/**
24
+	 * @var string $context
25
+	 */
26
+	private $context;
27 27
 
28
-    /**
29
-     * @var int|string $ID
30
-     */
31
-    private $ID;
28
+	/**
29
+	 * @var int|string $ID
30
+	 */
31
+	private $ID;
32 32
 
33 33
 
34
-    /**
35
-     * @param string|array $capability   - the capability to be checked, like: 'ee_edit_registrations',
36
-     *                                   or an array of capability strings
37
-     * @param string       $context      - what the user is attempting to do, like: 'Edit Registration'
38
-     * @param int          $ID           - (optional) ID for item where current_user_can is being called from
39
-     * @throws InvalidDataTypeException
40
-     */
41
-    public function __construct($capability, $context, $ID = 0)
42
-    {
43
-        if (! (is_string($capability) || is_array($capability))) {
44
-            throw new InvalidDataTypeException('$capability', $capability, 'string or array');
45
-        }
46
-        if (! is_string($context)) {
47
-            throw new InvalidDataTypeException('$context', $context, 'string');
48
-        }
49
-        $this->capability = $capability;
50
-        $this->context = strtolower(str_replace(' ', '_', $context));
51
-        $this->ID = $ID;
52
-    }
34
+	/**
35
+	 * @param string|array $capability   - the capability to be checked, like: 'ee_edit_registrations',
36
+	 *                                   or an array of capability strings
37
+	 * @param string       $context      - what the user is attempting to do, like: 'Edit Registration'
38
+	 * @param int          $ID           - (optional) ID for item where current_user_can is being called from
39
+	 * @throws InvalidDataTypeException
40
+	 */
41
+	public function __construct($capability, $context, $ID = 0)
42
+	{
43
+		if (! (is_string($capability) || is_array($capability))) {
44
+			throw new InvalidDataTypeException('$capability', $capability, 'string or array');
45
+		}
46
+		if (! is_string($context)) {
47
+			throw new InvalidDataTypeException('$context', $context, 'string');
48
+		}
49
+		$this->capability = $capability;
50
+		$this->context = strtolower(str_replace(' ', '_', $context));
51
+		$this->ID = $ID;
52
+	}
53 53
 
54 54
 
55
-    /**
56
-     * @return string|array
57
-     */
58
-    public function capability()
59
-    {
60
-        return $this->capability;
61
-    }
55
+	/**
56
+	 * @return string|array
57
+	 */
58
+	public function capability()
59
+	{
60
+		return $this->capability;
61
+	}
62 62
 
63 63
 
64
-    /**
65
-     * @return string
66
-     */
67
-    public function context()
68
-    {
69
-        return $this->context;
70
-    }
64
+	/**
65
+	 * @return string
66
+	 */
67
+	public function context()
68
+	{
69
+		return $this->context;
70
+	}
71 71
 
72 72
 
73
-    /**
74
-     * @return int|string
75
-     */
76
-    public function ID()
77
-    {
78
-        return $this->ID;
79
-    }
73
+	/**
74
+	 * @return int|string
75
+	 */
76
+	public function ID()
77
+	{
78
+		return $this->ID;
79
+	}
80 80
 }
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -40,10 +40,10 @@
 block discarded – undo
40 40
      */
41 41
     public function __construct($capability, $context, $ID = 0)
42 42
     {
43
-        if (! (is_string($capability) || is_array($capability))) {
43
+        if ( ! (is_string($capability) || is_array($capability))) {
44 44
             throw new InvalidDataTypeException('$capability', $capability, 'string or array');
45 45
         }
46
-        if (! is_string($context)) {
46
+        if ( ! is_string($context)) {
47 47
             throw new InvalidDataTypeException('$context', $context, 'string');
48 48
         }
49 49
         $this->capability = $capability;
Please login to merge, or discard this patch.
core/db_models/fields/EE_Primary_Key_String_Field.php 2 patches
Doc Comments   +3 added lines patch added patch discarded remove patch
@@ -4,6 +4,9 @@
 block discarded – undo
4 4
 class EE_Primary_Key_String_Field extends EE_Primary_Key_Field_Base
5 5
 {
6 6
 
7
+    /**
8
+     * @param string $table_column
9
+     */
7 10
     public function __construct($table_column, $nicename)
8 11
     {
9 12
         parent::__construct($table_column, $nicename, null);
Please login to merge, or discard this patch.
Indentation   +17 added lines, -17 removed lines patch added patch discarded remove patch
@@ -3,22 +3,22 @@
 block discarded – undo
3 3
 class EE_Primary_Key_String_Field extends EE_Primary_Key_Field_Base
4 4
 {
5 5
 
6
-    public function __construct($table_column, $nicename)
7
-    {
8
-        parent::__construct($table_column, $nicename, null);
9
-    }
6
+	public function __construct($table_column, $nicename)
7
+	{
8
+		parent::__construct($table_column, $nicename, null);
9
+	}
10 10
 
11
-    /**
12
-     * removes all tags when setting
13
-     *
14
-     * @param string $value_inputted_for_field_on_model_object
15
-     * @return string
16
-     */
17
-    public function prepare_for_set($value_inputted_for_field_on_model_object)
18
-    {
19
-        if ($this->is_model_obj_of_type_pointed_to($value_inputted_for_field_on_model_object)) {
20
-            $value_inputted_for_field_on_model_object = $value_inputted_for_field_on_model_object->ID();
21
-        }
22
-        return wp_strip_all_tags($value_inputted_for_field_on_model_object);
23
-    }
11
+	/**
12
+	 * removes all tags when setting
13
+	 *
14
+	 * @param string $value_inputted_for_field_on_model_object
15
+	 * @return string
16
+	 */
17
+	public function prepare_for_set($value_inputted_for_field_on_model_object)
18
+	{
19
+		if ($this->is_model_obj_of_type_pointed_to($value_inputted_for_field_on_model_object)) {
20
+			$value_inputted_for_field_on_model_object = $value_inputted_for_field_on_model_object->ID();
21
+		}
22
+		return wp_strip_all_tags($value_inputted_for_field_on_model_object);
23
+	}
24 24
 }
Please login to merge, or discard this patch.