Completed
Branch models-cleanup/more-ee-base-cl... (91a157)
by
unknown
53:04 queued 43:29
created
core/db_classes/EE_Import.class.php 3 patches
Doc Comments   +4 added lines, -8 removed lines patch added patch discarded remove patch
@@ -87,7 +87,6 @@  discard block
 block discarded – undo
87 87
      *
88 88
      * @param    string $title  - heading for the form
89 89
      * @param    string $intro  - additional text explaing what to do
90
-     * @param    string $page   - EE Admin page to direct form to - in the form "espresso_{pageslug}"
91 90
      * @param    string $action - EE Admin page route array "action" that form will direct to
92 91
      * @param    string $type   - type of file to import
93 92
      *                          @ return    string
@@ -130,7 +129,7 @@  discard block
 block discarded – undo
130 129
     /**
131 130
      * @Import Event Espresso data - some code "borrowed" from event espresso csv_import.php
132 131
      * @access public
133
-     * @return boolean success
132
+     * @return boolean|null success
134 133
      */
135 134
     public function import()
136 135
     {
@@ -304,9 +303,7 @@  discard block
 block discarded – undo
304 303
      * @access public
305 304
      * @param array $csv_data_array - the array containing the csv data produced from
306 305
      *                              EE_CSV::import_csv_to_model_data_array()
307
-     * @param array $fields_to_save - an array containing the csv column names as keys with the corresponding db table
308
-     *                              fields they will be saved to
309
-     * @return TRUE on success, FALSE on fail
306
+     * @return boolean on success, FALSE on fail
310 307
      * @throws \EE_Error
311 308
      */
312 309
     public function save_csv_data_array_to_db($csv_data_array, $model_name = false)
@@ -459,7 +456,7 @@  discard block
 block discarded – undo
459 456
      * to the newly-inserted real ID.
460 457
      *
461 458
      * @param type $csv_data_array
462
-     * @param type $export_from_site_a_to_b
459
+     * @param boolean $export_from_site_a_to_b
463 460
      * @param type $old_db_to_new_db_mapping
464 461
      * @return array updated $old_db_to_new_db_mapping
465 462
      */
@@ -626,7 +623,6 @@  discard block
 block discarded – undo
626 623
      * @param type     $id_in_csv
627 624
      * @param type     $model_object_data
628 625
      * @param EEM_Base $model
629
-     * @param type     $old_db_to_new_db_mapping
630 626
      * @return
631 627
      */
632 628
     protected function _decide_whether_to_insert_or_update_given_data_from_same_db(
@@ -758,7 +754,7 @@  discard block
 block discarded – undo
758 754
      * @param type   $object_id
759 755
      * @param string $model_name
760 756
      * @param array  $old_db_to_new_db_mapping
761
-     * @param type   $export_from_site_a_to_b
757
+     * @param boolean   $export_from_site_a_to_b
762 758
      * @return int
763 759
      */
764 760
     protected function _find_mapping_in($object_id, $model_name, $old_db_to_new_db_mapping, $export_from_site_a_to_b)
Please login to merge, or discard this patch.
Indentation   +954 added lines, -954 removed lines patch added patch discarded remove patch
@@ -14,91 +14,91 @@  discard block
 block discarded – undo
14 14
 class EE_Import implements ResettableInterface
15 15
 {
16 16
 
17
-    const do_insert = 'insert';
18
-    const do_update = 'update';
19
-    const do_nothing = 'nothing';
20
-
21
-
22
-    // instance of the EE_Import object
23
-    private static $_instance = null;
24
-
25
-    private static $_csv_array = array();
26
-
27
-    /**
28
-     *
29
-     * @var array of model names
30
-     */
31
-    private static $_model_list = array();
32
-
33
-    private static $_columns_to_save = array();
34
-
35
-    protected $_total_inserts = 0;
36
-    protected $_total_updates = 0;
37
-    protected $_total_insert_errors = 0;
38
-    protected $_total_update_errors = 0;
39
-
40
-
41
-    /**
42
-     *        private constructor to prevent direct creation
43
-     *
44
-     * @Constructor
45
-     * @access private
46
-     * @return void
47
-     */
48
-    private function __construct()
49
-    {
50
-        $this->_total_inserts = 0;
51
-        $this->_total_updates = 0;
52
-        $this->_total_insert_errors = 0;
53
-        $this->_total_update_errors = 0;
54
-    }
55
-
56
-
57
-    /**
58
-     *    @ singleton method used to instantiate class object
59
-     *    @ access public
60
-     *
61
-     * @return EE_Import
62
-     */
63
-    public static function instance()
64
-    {
65
-        // check if class object is instantiated
66
-        if (self::$_instance === null or ! is_object(self::$_instance) or ! (self::$_instance instanceof EE_Import)) {
67
-            self::$_instance = new self();
68
-        }
69
-        return self::$_instance;
70
-    }
71
-
72
-    /**
73
-     * Resets the importer
74
-     *
75
-     * @return EE_Import
76
-     */
77
-    public static function reset()
78
-    {
79
-        self::$_instance = null;
80
-        return self::instance();
81
-    }
82
-
83
-
84
-    /**
85
-     *    @ generates HTML for a file upload input and form
86
-     *    @ access    public
87
-     *
88
-     * @param    string $title  - heading for the form
89
-     * @param    string $intro  - additional text explaing what to do
90
-     * @param    string $page   - EE Admin page to direct form to - in the form "espresso_{pageslug}"
91
-     * @param    string $action - EE Admin page route array "action" that form will direct to
92
-     * @param    string $type   - type of file to import
93
-     *                          @ return    string
94
-     */
95
-    public function upload_form($title, $intro, $form_url, $action, $type)
96
-    {
97
-
98
-        $form_url = EE_Admin_Page::add_query_args_and_nonce(array('action' => $action), $form_url);
99
-
100
-        ob_start();
101
-        ?>
17
+	const do_insert = 'insert';
18
+	const do_update = 'update';
19
+	const do_nothing = 'nothing';
20
+
21
+
22
+	// instance of the EE_Import object
23
+	private static $_instance = null;
24
+
25
+	private static $_csv_array = array();
26
+
27
+	/**
28
+	 *
29
+	 * @var array of model names
30
+	 */
31
+	private static $_model_list = array();
32
+
33
+	private static $_columns_to_save = array();
34
+
35
+	protected $_total_inserts = 0;
36
+	protected $_total_updates = 0;
37
+	protected $_total_insert_errors = 0;
38
+	protected $_total_update_errors = 0;
39
+
40
+
41
+	/**
42
+	 *        private constructor to prevent direct creation
43
+	 *
44
+	 * @Constructor
45
+	 * @access private
46
+	 * @return void
47
+	 */
48
+	private function __construct()
49
+	{
50
+		$this->_total_inserts = 0;
51
+		$this->_total_updates = 0;
52
+		$this->_total_insert_errors = 0;
53
+		$this->_total_update_errors = 0;
54
+	}
55
+
56
+
57
+	/**
58
+	 *    @ singleton method used to instantiate class object
59
+	 *    @ access public
60
+	 *
61
+	 * @return EE_Import
62
+	 */
63
+	public static function instance()
64
+	{
65
+		// check if class object is instantiated
66
+		if (self::$_instance === null or ! is_object(self::$_instance) or ! (self::$_instance instanceof EE_Import)) {
67
+			self::$_instance = new self();
68
+		}
69
+		return self::$_instance;
70
+	}
71
+
72
+	/**
73
+	 * Resets the importer
74
+	 *
75
+	 * @return EE_Import
76
+	 */
77
+	public static function reset()
78
+	{
79
+		self::$_instance = null;
80
+		return self::instance();
81
+	}
82
+
83
+
84
+	/**
85
+	 *    @ generates HTML for a file upload input and form
86
+	 *    @ access    public
87
+	 *
88
+	 * @param    string $title  - heading for the form
89
+	 * @param    string $intro  - additional text explaing what to do
90
+	 * @param    string $page   - EE Admin page to direct form to - in the form "espresso_{pageslug}"
91
+	 * @param    string $action - EE Admin page route array "action" that form will direct to
92
+	 * @param    string $type   - type of file to import
93
+	 *                          @ return    string
94
+	 */
95
+	public function upload_form($title, $intro, $form_url, $action, $type)
96
+	{
97
+
98
+		$form_url = EE_Admin_Page::add_query_args_and_nonce(array('action' => $action), $form_url);
99
+
100
+		ob_start();
101
+		?>
102 102
         <div class="ee-upload-form-dv">
103 103
             <h3><?php echo $title; ?></h3>
104 104
             <p><?php echo $intro; ?></p>
@@ -114,878 +114,878 @@  discard block
 block discarded – undo
114 114
                 <b><?php _e('Attention', 'event_espresso'); ?></b><br/>
115 115
                 <?php echo sprintf(__('Accepts .%s file types only.', 'event_espresso'), $type); ?>
116 116
                 <?php echo __(
117
-                    'Please only import CSV files exported from Event Espresso, or compatible 3rd-party software.',
118
-                    'event_espresso'
119
-                ); ?>
117
+					'Please only import CSV files exported from Event Espresso, or compatible 3rd-party software.',
118
+					'event_espresso'
119
+				); ?>
120 120
             </p>
121 121
 
122 122
         </div>
123 123
 
124 124
         <?php
125
-        $uploader = ob_get_clean();
126
-        return $uploader;
127
-    }
128
-
129
-
130
-    /**
131
-     * @Import Event Espresso data - some code "borrowed" from event espresso csv_import.php
132
-     * @access public
133
-     * @return boolean success
134
-     */
135
-    public function import()
136
-    {
137
-
138
-        require_once(EE_CLASSES . 'EE_CSV.class.php');
139
-        $this->EE_CSV = EE_CSV::instance();
140
-
141
-        if (isset($_REQUEST['import'])) {
142
-            if (isset($_POST['csv_submitted'])) {
143
-                switch ($_FILES['file']['error'][0]) {
144
-                    case UPLOAD_ERR_OK:
145
-                        $error_msg = false;
146
-                        break;
147
-                    case UPLOAD_ERR_INI_SIZE:
148
-                        $error_msg = __(
149
-                            "'The uploaded file exceeds the upload_max_filesize directive in php.ini.'",
150
-                            "event_espresso"
151
-                        );
152
-                        break;
153
-                    case UPLOAD_ERR_FORM_SIZE:
154
-                        $error_msg = __(
155
-                            'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.',
156
-                            "event_espresso"
157
-                        );
158
-                        break;
159
-                    case UPLOAD_ERR_PARTIAL:
160
-                        $error_msg = __('The uploaded file was only partially uploaded.', "event_espresso");
161
-                        break;
162
-                    case UPLOAD_ERR_NO_FILE:
163
-                        $error_msg = __('No file was uploaded.', "event_espresso");
164
-                        break;
165
-                    case UPLOAD_ERR_NO_TMP_DIR:
166
-                        $error_msg = __('Missing a temporary folder.', "event_espresso");
167
-                        break;
168
-                    case UPLOAD_ERR_CANT_WRITE:
169
-                        $error_msg = __('Failed to write file to disk.', "event_espresso");
170
-                        break;
171
-                    case UPLOAD_ERR_EXTENSION:
172
-                        $error_msg = __('File upload stopped by extension.', "event_espresso");
173
-                        break;
174
-                    default:
175
-                        $error_msg = __(
176
-                            'An unknown error occurred and the file could not be uploaded',
177
-                            "event_espresso"
178
-                        );
179
-                        break;
180
-                }
181
-
182
-                if (! $error_msg) {
183
-                    $filename = $_FILES['file']['name'][0];
184
-                    $file_ext = substr(strrchr($filename, '.'), 1);
185
-                    $file_type = $_FILES['file']['type'][0];
186
-                    $temp_file = $_FILES['file']['tmp_name'][0];
187
-                    $filesize = $_FILES['file']['size'][0] / 1024;// convert from bytes to KB
188
-
189
-                    if ($file_ext == 'csv') {
190
-                        $max_upload = $this->EE_CSV->get_max_upload_size();// max upload size in KB
191
-                        if ($filesize < $max_upload || true) {
192
-                            $wp_upload_dir = str_replace(array('\\', '/'), '/', wp_upload_dir());
193
-                            $path_to_file = $wp_upload_dir['basedir'] . '/espresso/' . $filename;
194
-
195
-                            if (move_uploaded_file($temp_file, $path_to_file)) {
196
-                                // convert csv to array
197
-                                $this->csv_array = $this->EE_CSV->import_csv_to_model_data_array($path_to_file);
198
-
199
-                                // was data successfully stored in an array?
200
-                                if (is_array($this->csv_array)) {
201
-                                    $import_what = str_replace('csv_import_', '', $_REQUEST['action']);
202
-                                    $import_what = str_replace('_', ' ', ucwords($import_what));
203
-                                    $processed_data = $this->csv_array;
204
-                                    $this->columns_to_save = false;
205
-
206
-                                    // if any imports require funcky processing, we'll catch them in the switch
207
-                                    switch ($_REQUEST['action']) {
208
-                                        case "import_events":
209
-                                        case "event_list":
210
-                                            $import_what = 'Event Details';
211
-                                            break;
212
-
213
-                                        case 'groupon_import_csv':
214
-                                            $import_what = 'Groupon Codes';
215
-                                            $processed_data = $this->process_groupon_codes();
216
-                                            break;
217
-                                    }
218
-                                    // save processed codes to db
219
-                                    if ($this->save_csv_data_array_to_db($processed_data, $this->columns_to_save)) {
220
-                                        return true;
221
-                                    }
222
-                                } else {
223
-                                    // no array? must be an error
224
-                                    EE_Error::add_error(
225
-                                        sprintf(__("No file seems to have been uploaded", "event_espresso")),
226
-                                        __FILE__,
227
-                                        __FUNCTION__,
228
-                                        __LINE__
229
-                                    );
230
-                                    return false;
231
-                                }
232
-                            } else {
233
-                                EE_Error::add_error(
234
-                                    sprintf(__("%s was not successfully uploaded", "event_espresso"), $filename),
235
-                                    __FILE__,
236
-                                    __FUNCTION__,
237
-                                    __LINE__
238
-                                );
239
-                                return false;
240
-                            }
241
-                        } else {
242
-                            EE_Error::add_error(
243
-                                sprintf(
244
-                                    __(
245
-                                        "%s was too large of a file and could not be uploaded. The max filesize is %s' KB.",
246
-                                        "event_espresso"
247
-                                    ),
248
-                                    $filename,
249
-                                    $max_upload
250
-                                ),
251
-                                __FILE__,
252
-                                __FUNCTION__,
253
-                                __LINE__
254
-                            );
255
-                            return false;
256
-                        }
257
-                    } else {
258
-                        EE_Error::add_error(
259
-                            sprintf(__("%s  had an invalid file extension, not uploaded", "event_espresso"), $filename),
260
-                            __FILE__,
261
-                            __FUNCTION__,
262
-                            __LINE__
263
-                        );
264
-                        return false;
265
-                    }
266
-                } else {
267
-                    EE_Error::add_error($error_msg, __FILE__, __FUNCTION__, __LINE__);
268
-                    return false;
269
-                }
270
-            }
271
-        }
272
-        return;
273
-    }
274
-
275
-
276
-    /**
277
-     *    Given an array of data (usually from a CSV import) attempts to save that data to the db.
278
-     *    If $model_name ISN'T provided, assumes that this is a 3d array, with toplevel keys being model names,
279
-     *    next level being numeric indexes adn each value representing a model object, and the last layer down
280
-     *    being keys of model fields and their proposed values.
281
-     *    If $model_name IS provided, assumes a 2d array of the bottom two layers previously mentioned.
282
-     *    If the CSV data says (in the metadata row) that it's from the SAME database,
283
-     *    we treat the IDs in the CSV as the normal IDs, and try to update those records. However, if those
284
-     *    IDs DON'T exist in the database, they're treated as temporary IDs,
285
-     *    which can used elsewhere to refer to the same object. Once an item
286
-     *    with a temporary ID gets inserted, we record its mapping from temporary
287
-     *    ID to real ID, and use the real ID in place of the temporary ID
288
-     *    when that temporary ID was used as a foreign key.
289
-     *    If the CSV data says (in the metadata again) that it's from a DIFFERENT database,
290
-     *    we treat all the IDs in the CSV as temporary ID- eg, if the CSV specifies an event with
291
-     *    ID 1, and the database already has an event with ID 1, we assume that's just a coincidence,
292
-     *    and insert a new event, and map it's temporary ID of 1 over to its new real ID.
293
-     *    An important exception are non-auto-increment primary keys. If one entry in the
294
-     *    CSV file has the same ID as one in the DB, we assume they are meant to be
295
-     *    the same item, and instead update the item in the DB with that same ID.
296
-     *    Also note, we remember the mappings permanently. So the 2nd, 3rd, and 10000th
297
-     *    time you import a CSV from a different site, we remember their mappings, and
298
-     * will try to update the item in the DB instead of inserting another item (eg
299
-     * if we previously imported an event with temporary ID 1, and then it got a
300
-     * real ID of 123, we remember that. So the next time we import an event with
301
-     * temporary ID, from the same site, we know that it's real ID is 123, and will
302
-     * update that event, instead of adding a new event).
303
-     *
304
-     * @access public
305
-     * @param array $csv_data_array - the array containing the csv data produced from
306
-     *                              EE_CSV::import_csv_to_model_data_array()
307
-     * @param array $fields_to_save - an array containing the csv column names as keys with the corresponding db table
308
-     *                              fields they will be saved to
309
-     * @return TRUE on success, FALSE on fail
310
-     * @throws \EE_Error
311
-     */
312
-    public function save_csv_data_array_to_db($csv_data_array, $model_name = false)
313
-    {
314
-        $success = false;
315
-        $error = false;
316
-        // whther to treat this import as if it's data froma different database or not
317
-        // ie, if it IS from a different database, ignore foreign keys whihf
318
-        $export_from_site_a_to_b = true;
319
-        // first level of array is not table information but a table name was passed to the function
320
-        // array is only two levels deep, so let's fix that by adding a level, else the next steps will fail
321
-        if ($model_name) {
322
-            $csv_data_array = array($csv_data_array);
323
-        }
324
-        // begin looking through the $csv_data_array, expecting the toplevel key to be the model's name...
325
-        $old_site_url = 'none-specified';
326
-        // hanlde metadata
327
-        if (isset($csv_data_array[ EE_CSV::metadata_header ])) {
328
-            $csv_metadata = array_shift($csv_data_array[ EE_CSV::metadata_header ]);
329
-            // ok so its metadata, dont try to save it to ehte db obviously...
330
-            if (isset($csv_metadata['site_url']) && $csv_metadata['site_url'] == site_url()) {
331
-                EE_Error::add_attention(
332
-                    sprintf(
333
-                        __(
334
-                            "CSV Data appears to be from the same database, so attempting to update data",
335
-                            "event_espresso"
336
-                        )
337
-                    )
338
-                );
339
-                $export_from_site_a_to_b = false;
340
-            } else {
341
-                $old_site_url = isset($csv_metadata['site_url']) ? $csv_metadata['site_url'] : $old_site_url;
342
-                EE_Error::add_attention(
343
-                    sprintf(
344
-                        __(
345
-                            "CSV Data appears to be from a different database (%s instead of %s), so we assume IDs in the CSV data DO NOT correspond to IDs in this database",
346
-                            "event_espresso"
347
-                        ),
348
-                        $old_site_url,
349
-                        site_url()
350
-                    )
351
-                );
352
-            };
353
-            unset($csv_data_array[ EE_CSV::metadata_header ]);
354
-        }
355
-        /**
356
-         * @var $old_db_to_new_db_mapping 2d array: toplevel keys being model names, bottom-level keys being the original key, and
357
-         * the value will be the newly-inserted ID.
358
-         * If we have already imported data from the same website via CSV, it shoudl be kept in this wp option
359
-         */
360
-        $old_db_to_new_db_mapping = get_option('ee_id_mapping_from' . sanitize_title($old_site_url), array());
361
-        if ($old_db_to_new_db_mapping) {
362
-            EE_Error::add_attention(
363
-                sprintf(
364
-                    __(
365
-                        "We noticed you have imported data via CSV from %s before. Because of this, IDs in your CSV have been mapped to their new IDs in %s",
366
-                        "event_espresso"
367
-                    ),
368
-                    $old_site_url,
369
-                    site_url()
370
-                )
371
-            );
372
-        }
373
-        $old_db_to_new_db_mapping = $this->save_data_rows_to_db(
374
-            $csv_data_array,
375
-            $export_from_site_a_to_b,
376
-            $old_db_to_new_db_mapping
377
-        );
378
-
379
-        // save the mapping from old db to new db in case they try re-importing the same data from the same website again
380
-        update_option('ee_id_mapping_from' . sanitize_title($old_site_url), $old_db_to_new_db_mapping);
381
-
382
-        if ($this->_total_updates > 0) {
383
-            EE_Error::add_success(
384
-                sprintf(
385
-                    __("%s existing records in the database were updated.", "event_espresso"),
386
-                    $this->_total_updates
387
-                )
388
-            );
389
-            $success = true;
390
-        }
391
-        if ($this->_total_inserts > 0) {
392
-            EE_Error::add_success(
393
-                sprintf(__("%s new records were added to the database.", "event_espresso"), $this->_total_inserts)
394
-            );
395
-            $success = true;
396
-        }
397
-
398
-        if ($this->_total_update_errors > 0) {
399
-            EE_Error::add_error(
400
-                sprintf(
401
-                    __(
402
-                        "'One or more errors occurred, and a total of %s existing records in the database were <strong>not</strong> updated.'",
403
-                        "event_espresso"
404
-                    ),
405
-                    $this->_total_update_errors
406
-                ),
407
-                __FILE__,
408
-                __FUNCTION__,
409
-                __LINE__
410
-            );
411
-            $error = true;
412
-        }
413
-        if ($this->_total_insert_errors > 0) {
414
-            EE_Error::add_error(
415
-                sprintf(
416
-                    __(
417
-                        "One or more errors occurred, and a total of %s new records were <strong>not</strong> added to the database.'",
418
-                        "event_espresso"
419
-                    ),
420
-                    $this->_total_insert_errors
421
-                ),
422
-                __FILE__,
423
-                __FUNCTION__,
424
-                __LINE__
425
-            );
426
-            $error = true;
427
-        }
428
-
429
-        // lastly, we need to update the datetime and ticket sold amounts
430
-        // as those may have been affected by this
431
-        EEM_Ticket::instance()->update_tickets_sold(EEM_Ticket::instance()->get_all());
432
-
433
-        // if there was at least one success and absolutely no errors
434
-        if ($success && ! $error) {
435
-            return true;
436
-        } else {
437
-            return false;
438
-        }
439
-    }
440
-
441
-
442
-    /**
443
-     * Processes the array of data, given the knowledge that it's from the same database or a different one,
444
-     * and the mapping from temporary IDs to real IDs.
445
-     * If the data is from a different database, we treat the primary keys and their corresponding
446
-     * foreign keys as "temp Ids", basically identifiers that get mapped to real primary keys
447
-     * in the real target database. As items are inserted, their temporary primary keys
448
-     * are mapped to the real IDs in the target database. Also, before doing any update or
449
-     * insert, we replace all the temp ID which are foreign keys with their mapped real IDs.
450
-     * An exception: string primary keys are treated as real IDs, or else we'd need to
451
-     * dynamically generate new string primary keys which would be very awkard for the country table etc.
452
-     * Also, models with no primary key are strange too. We combine use their primar key INDEX (a
453
-     * combination of fields) to create a unique string identifying the row and store
454
-     * those in the mapping.
455
-     *
456
-     * If the data is from the same database, we usually treat primary keys as real IDs.
457
-     * An exception is if there is nothing in the database for that ID. If that's the case,
458
-     * we need to insert a new row for that ID, and then map from the non-existent ID
459
-     * to the newly-inserted real ID.
460
-     *
461
-     * @param type $csv_data_array
462
-     * @param type $export_from_site_a_to_b
463
-     * @param type $old_db_to_new_db_mapping
464
-     * @return array updated $old_db_to_new_db_mapping
465
-     */
466
-    public function save_data_rows_to_db($csv_data_array, $export_from_site_a_to_b, $old_db_to_new_db_mapping)
467
-    {
468
-        foreach ($csv_data_array as $model_name_in_csv_data => $model_data_from_import) {
469
-            // now check that assumption was correct. If
470
-            if (EE_Registry::instance()->is_model_name($model_name_in_csv_data)) {
471
-                $model_name = $model_name_in_csv_data;
472
-            } else {
473
-                // no table info in the array and no table name passed to the function?? FAIL
474
-                EE_Error::add_error(
475
-                    __(
476
-                        'No table information was specified and/or found, therefore the import could not be completed',
477
-                        'event_espresso'
478
-                    ),
479
-                    __FILE__,
480
-                    __FUNCTION__,
481
-                    __LINE__
482
-                );
483
-                return false;
484
-            }
485
-            /* @var $model EEM_Base */
486
-            $model = EE_Registry::instance()->load_model($model_name);
487
-
488
-            // so without further ado, scanning all the data provided for primary keys and their inital values
489
-            foreach ($model_data_from_import as $model_object_data) {
490
-                // before we do ANYTHING, make sure the csv row wasn't just completely blank
491
-                $row_is_completely_empty = true;
492
-                foreach ($model_object_data as $field) {
493
-                    if ($field) {
494
-                        $row_is_completely_empty = false;
495
-                    }
496
-                }
497
-                if ($row_is_completely_empty) {
498
-                    continue;
499
-                }
500
-                // find the PK in the row of data (or a combined key if
501
-                // there is no primary key)
502
-                if ($model->has_primary_key_field()) {
503
-                    $id_in_csv = $model_object_data[ $model->primary_key_name() ];
504
-                } else {
505
-                    $id_in_csv = $model->get_index_primary_key_string($model_object_data);
506
-                }
507
-
508
-
509
-                $model_object_data = $this->_replace_temp_ids_with_mappings(
510
-                    $model_object_data,
511
-                    $model,
512
-                    $old_db_to_new_db_mapping,
513
-                    $export_from_site_a_to_b
514
-                );
515
-                // now we need to decide if we're going to add a new model object given the $model_object_data,
516
-                // or just update.
517
-                if ($export_from_site_a_to_b) {
518
-                    $what_to_do = $this->_decide_whether_to_insert_or_update_given_data_from_other_db(
519
-                        $id_in_csv,
520
-                        $model_object_data,
521
-                        $model,
522
-                        $old_db_to_new_db_mapping
523
-                    );
524
-                } else {// this is just a re-import
525
-                    $what_to_do = $this->_decide_whether_to_insert_or_update_given_data_from_same_db(
526
-                        $id_in_csv,
527
-                        $model_object_data,
528
-                        $model,
529
-                        $old_db_to_new_db_mapping
530
-                    );
531
-                }
532
-                if ($what_to_do == self::do_nothing) {
533
-                    continue;
534
-                }
535
-
536
-                // double-check we actually want to insert, if that's what we're planning
537
-                // based on whether this item would be unique in the DB or not
538
-                if ($what_to_do == self::do_insert) {
539
-                    // we're supposed to be inserting. But wait, will this thing
540
-                    // be acceptable if inserted?
541
-                    $conflicting = $model->get_one_conflicting($model_object_data, false);
542
-                    if ($conflicting) {
543
-                        // ok, this item would conflict if inserted. Just update the item that it conflicts with.
544
-                        $what_to_do = self::do_update;
545
-                        // and if this model has a primary key, remember its mapping
546
-                        if ($model->has_primary_key_field()) {
547
-                            $old_db_to_new_db_mapping[ $model_name ][ $id_in_csv ] = $conflicting->ID();
548
-                            $model_object_data[ $model->primary_key_name() ] = $conflicting->ID();
549
-                        } else {
550
-                            // we want to update this conflicting item, instead of inserting a conflicting item
551
-                            // so we need to make sure they match entirely (its possible that they only conflicted on one field, but we need them to match on other fields
552
-                            // for the WHERE conditions in the update). At the time of this comment, there were no models like this
553
-                            foreach ($model->get_combined_primary_key_fields() as $key_field) {
554
-                                $model_object_data[ $key_field->get_name() ] = $conflicting->get(
555
-                                    $key_field->get_name()
556
-                                );
557
-                            }
558
-                        }
559
-                    }
560
-                }
561
-                if ($what_to_do == self::do_insert) {
562
-                    $old_db_to_new_db_mapping = $this->_insert_from_data_array(
563
-                        $id_in_csv,
564
-                        $model_object_data,
565
-                        $model,
566
-                        $old_db_to_new_db_mapping
567
-                    );
568
-                } elseif ($what_to_do == self::do_update) {
569
-                    $old_db_to_new_db_mapping = $this->_update_from_data_array(
570
-                        $id_in_csv,
571
-                        $model_object_data,
572
-                        $model,
573
-                        $old_db_to_new_db_mapping
574
-                    );
575
-                } else {
576
-                    throw new EE_Error(
577
-                        sprintf(
578
-                            __(
579
-                                'Programming error. We shoudl be inserting or updating, but instead we are being told to "%s", whifh is invalid',
580
-                                'event_espresso'
581
-                            ),
582
-                            $what_to_do
583
-                        )
584
-                    );
585
-                }
586
-            }
587
-        }
588
-        return $old_db_to_new_db_mapping;
589
-    }
590
-
591
-
592
-    /**
593
-     * Decides whether or not to insert, given that this data is from another database.
594
-     * So, if the primary key of this $model_object_data already exists in the database,
595
-     * it's just a coincidence and we should still insert. The only time we should
596
-     * update is when we know what it maps to, or there's something that would
597
-     * conflict (and we should instead just update that conflicting thing)
598
-     *
599
-     * @param string   $id_in_csv
600
-     * @param array    $model_object_data        by reference so it can be modified
601
-     * @param EEM_Base $model
602
-     * @param array    $old_db_to_new_db_mapping by reference so it can be modified
603
-     * @return string one of the consts on this class that starts with do_*
604
-     */
605
-    protected function _decide_whether_to_insert_or_update_given_data_from_other_db(
606
-        $id_in_csv,
607
-        $model_object_data,
608
-        $model,
609
-        $old_db_to_new_db_mapping
610
-    ) {
611
-        $model_name = $model->get_this_model_name();
612
-        // if it's a site-to-site export-and-import, see if this modelobject's id
613
-        // in the old data that we know of
614
-        if (isset($old_db_to_new_db_mapping[ $model_name ][ $id_in_csv ])) {
615
-            return self::do_update;
616
-        } else {
617
-            return self::do_insert;
618
-        }
619
-    }
620
-
621
-    /**
622
-     * If this thing basically already exists in the database, we want to update it;
623
-     * otherwise insert it (ie, someone tweaked the CSV file, or the item was
624
-     * deleted in the database so it should be re-inserted)
625
-     *
626
-     * @param type     $id_in_csv
627
-     * @param type     $model_object_data
628
-     * @param EEM_Base $model
629
-     * @param type     $old_db_to_new_db_mapping
630
-     * @return
631
-     */
632
-    protected function _decide_whether_to_insert_or_update_given_data_from_same_db(
633
-        $id_in_csv,
634
-        $model_object_data,
635
-        $model
636
-    ) {
637
-        // in this case, check if this thing ACTUALLY exists in the database
638
-        if ($model->get_one_conflicting($model_object_data)) {
639
-            return self::do_update;
640
-        } else {
641
-            return self::do_insert;
642
-        }
643
-    }
644
-
645
-    /**
646
-     * Using the $old_db_to_new_db_mapping array, replaces all the temporary IDs
647
-     * with their mapped real IDs. Eg, if importing from site A to B, the mapping
648
-     * file may indicate that the ID "my_event_id" maps to an actual event ID of 123.
649
-     * So this function searches for any event temp Ids called "my_event_id" and
650
-     * replaces them with 123.
651
-     * Also, if there is no temp ID for the INT foreign keys from another database,
652
-     * replaces them with 0 or the field's default.
653
-     *
654
-     * @param type     $model_object_data
655
-     * @param EEM_Base $model
656
-     * @param type     $old_db_to_new_db_mapping
657
-     * @param boolean  $export_from_site_a_to_b
658
-     * @return array updated model object data with temp IDs removed
659
-     */
660
-    protected function _replace_temp_ids_with_mappings(
661
-        $model_object_data,
662
-        $model,
663
-        $old_db_to_new_db_mapping,
664
-        $export_from_site_a_to_b
665
-    ) {
666
-        // if this model object's primary key is in the mapping, replace it
667
-        if (
668
-            $model->has_primary_key_field() &&
669
-            $model->get_primary_key_field()->is_auto_increment() &&
670
-            isset($old_db_to_new_db_mapping[ $model->get_this_model_name() ]) &&
671
-            isset(
672
-                $old_db_to_new_db_mapping[ $model->get_this_model_name() ][ $model_object_data[ $model->primary_key_name() ] ]
673
-            )
674
-        ) {
675
-            $model_object_data[ $model->primary_key_name() ] = $old_db_to_new_db_mapping[ $model->get_this_model_name(
676
-            ) ][ $model_object_data[ $model->primary_key_name() ] ];
677
-        }
678
-
679
-        try {
680
-            $model_name_field = $model->get_field_containing_related_model_name();
681
-            $models_pointed_to_by_model_name_field = $model_name_field->get_model_names_pointed_to();
682
-        } catch (EE_Error $e) {
683
-            $model_name_field = null;
684
-            $models_pointed_to_by_model_name_field = array();
685
-        }
686
-        foreach ($model->field_settings(true) as $field_obj) {
687
-            if ($field_obj instanceof EE_Foreign_Key_Int_Field) {
688
-                $models_pointed_to = $field_obj->get_model_names_pointed_to();
689
-                $found_a_mapping = false;
690
-                foreach ($models_pointed_to as $model_pointed_to_by_fk) {
691
-                    if ($model_name_field) {
692
-                        $value_of_model_name_field = $model_object_data[ $model_name_field->get_name() ];
693
-                        if ($value_of_model_name_field == $model_pointed_to_by_fk) {
694
-                            $model_object_data[ $field_obj->get_name() ] = $this->_find_mapping_in(
695
-                                $model_object_data[ $field_obj->get_name() ],
696
-                                $model_pointed_to_by_fk,
697
-                                $old_db_to_new_db_mapping,
698
-                                $export_from_site_a_to_b
699
-                            );
700
-                            $found_a_mapping = true;
701
-                            break;
702
-                        }
703
-                    } else {
704
-                        $model_object_data[ $field_obj->get_name() ] = $this->_find_mapping_in(
705
-                            $model_object_data[ $field_obj->get_name() ],
706
-                            $model_pointed_to_by_fk,
707
-                            $old_db_to_new_db_mapping,
708
-                            $export_from_site_a_to_b
709
-                        );
710
-                        $found_a_mapping = true;
711
-                    }
712
-                    // once we've found a mapping for this field no need to continue
713
-                    if ($found_a_mapping) {
714
-                        break;
715
-                    }
716
-                }
717
-            } else {
718
-                // it's a string foreign key (which we leave alone, because those are things
719
-                // like country names, which we'd really rather not make 2 USAs etc (we'd actually
720
-                // prefer to just update one)
721
-                // or it's just a regular value that ought to be replaced
722
-            }
723
-        }
724
-        //
725
-        if ($model instanceof EEM_Term_Taxonomy) {
726
-            $model_object_data = $this->_handle_split_term_ids($model_object_data);
727
-        }
728
-        return $model_object_data;
729
-    }
730
-
731
-    /**
732
-     * If the data was exported PRE-4.2, but then imported POST-4.2, then the term_id
733
-     * this term-taxonomy refers to may be out-of-date so we need to update it.
734
-     * see https://make.wordpress.org/core/2015/02/16/taxonomy-term-splitting-in-4-2-a-developer-guide/
735
-     *
736
-     * @param type $model_object_data
737
-     * @return array new model object data
738
-     */
739
-    protected function _handle_split_term_ids($model_object_data)
740
-    {
741
-        if (
742
-            isset($model_object_data['term_id'])
743
-            && isset($model_object_data['taxonomy'])
744
-            && apply_filters(
745
-                'FHEE__EE_Import__handle_split_term_ids__function_exists',
746
-                function_exists('wp_get_split_term'),
747
-                $model_object_data
748
-            )
749
-        ) {
750
-            $new_term_id = wp_get_split_term($model_object_data['term_id'], $model_object_data['taxonomy']);
751
-            if ($new_term_id) {
752
-                $model_object_data['term_id'] = $new_term_id;
753
-            }
754
-        }
755
-        return $model_object_data;
756
-    }
757
-
758
-    /**
759
-     * Given the object's ID and its model's name, find it int he mapping data,
760
-     * bearing in mind where it came from
761
-     *
762
-     * @param type   $object_id
763
-     * @param string $model_name
764
-     * @param array  $old_db_to_new_db_mapping
765
-     * @param type   $export_from_site_a_to_b
766
-     * @return int
767
-     */
768
-    protected function _find_mapping_in($object_id, $model_name, $old_db_to_new_db_mapping, $export_from_site_a_to_b)
769
-    {
770
-        if (isset($old_db_to_new_db_mapping[ $model_name ][ $object_id ])) {
771
-            return $old_db_to_new_db_mapping[ $model_name ][ $object_id ];
772
-        } elseif ($object_id == '0' || $object_id == '') {
773
-            // leave as-is
774
-            return $object_id;
775
-        } elseif ($export_from_site_a_to_b) {
776
-            // we couldn't find a mapping for this, and it's from a different site,
777
-            // so blank it out
778
-            return null;
779
-        } elseif (! $export_from_site_a_to_b) {
780
-            // we coudln't find a mapping for this, but it's from thsi DB anyway
781
-            // so let's just leave it as-is
782
-            return $object_id;
783
-        }
784
-    }
785
-
786
-    /**
787
-     *
788
-     * @param type     $id_in_csv
789
-     * @param type     $model_object_data
790
-     * @param EEM_Base $model
791
-     * @param type     $old_db_to_new_db_mapping
792
-     * @return array updated $old_db_to_new_db_mapping
793
-     */
794
-    protected function _insert_from_data_array($id_in_csv, $model_object_data, $model, $old_db_to_new_db_mapping)
795
-    {
796
-        // remove the primary key, if there is one (we don't want it for inserts OR updates)
797
-        // we'll put it back in if we need it
798
-        if ($model->has_primary_key_field() && $model->get_primary_key_field()->is_auto_increment()) {
799
-            $effective_id = $model_object_data[ $model->primary_key_name() ];
800
-            unset($model_object_data[ $model->primary_key_name() ]);
801
-        } else {
802
-            $effective_id = $model->get_index_primary_key_string($model_object_data);
803
-        }
804
-        // the model takes care of validating the CSV's input
805
-        try {
806
-            $new_id = $model->insert($model_object_data);
807
-            if ($new_id) {
808
-                $old_db_to_new_db_mapping[ $model->get_this_model_name() ][ $id_in_csv ] = $new_id;
809
-                $this->_total_inserts++;
810
-                EE_Error::add_success(
811
-                    sprintf(
812
-                        __("Successfully added new %s (with id %s) with csv data %s", "event_espresso"),
813
-                        $model->get_this_model_name(),
814
-                        $new_id,
815
-                        implode(",", $model_object_data)
816
-                    )
817
-                );
818
-            } else {
819
-                $this->_total_insert_errors++;
820
-                // put the ID used back in there for the error message
821
-                if ($model->has_primary_key_field()) {
822
-                    $model_object_data[ $model->primary_key_name() ] = $effective_id;
823
-                }
824
-                EE_Error::add_error(
825
-                    sprintf(
826
-                        __("Could not insert new %s with the csv data: %s", "event_espresso"),
827
-                        $model->get_this_model_name(),
828
-                        http_build_query($model_object_data)
829
-                    ),
830
-                    __FILE__,
831
-                    __FUNCTION__,
832
-                    __LINE__
833
-                );
834
-            }
835
-        } catch (EE_Error $e) {
836
-            $this->_total_insert_errors++;
837
-            if ($model->has_primary_key_field()) {
838
-                $model_object_data[ $model->primary_key_name() ] = $effective_id;
839
-            }
840
-            EE_Error::add_error(
841
-                sprintf(
842
-                    __("Could not insert new %s with the csv data: %s because %s", "event_espresso"),
843
-                    $model->get_this_model_name(),
844
-                    implode(",", $model_object_data),
845
-                    $e->getMessage()
846
-                ),
847
-                __FILE__,
848
-                __FUNCTION__,
849
-                __LINE__
850
-            );
851
-        }
852
-        return $old_db_to_new_db_mapping;
853
-    }
854
-
855
-    /**
856
-     * Given the model object data, finds the row to update and updates it
857
-     *
858
-     * @param string|int $id_in_csv
859
-     * @param array      $model_object_data
860
-     * @param EEM_Base   $model
861
-     * @param array      $old_db_to_new_db_mapping
862
-     * @return array updated $old_db_to_new_db_mapping
863
-     */
864
-    protected function _update_from_data_array($id_in_csv, $model_object_data, $model, $old_db_to_new_db_mapping)
865
-    {
866
-        try {
867
-            // let's keep two copies of the model object data:
868
-            // one for performing an update, one for everthing else
869
-            $model_object_data_for_update = $model_object_data;
870
-            if ($model->has_primary_key_field()) {
871
-                $conditions = array($model->primary_key_name() => $model_object_data[ $model->primary_key_name() ]);
872
-                // remove the primary key because we shouldn't use it for updating
873
-                unset($model_object_data_for_update[ $model->primary_key_name() ]);
874
-            } elseif ($model->get_combined_primary_key_fields() > 1) {
875
-                $conditions = array();
876
-                foreach ($model->get_combined_primary_key_fields() as $key_field) {
877
-                    $conditions[ $key_field->get_name() ] = $model_object_data[ $key_field->get_name() ];
878
-                }
879
-            } else {
880
-                $model->primary_key_name(
881
-                );// this shoudl just throw an exception, explaining that we dont have a primary key (or a combine dkey)
882
-            }
883
-
884
-            $success = $model->update($model_object_data_for_update, array($conditions));
885
-            if ($success) {
886
-                $this->_total_updates++;
887
-                EE_Error::add_success(
888
-                    sprintf(
889
-                        __("Successfully updated %s with csv data %s", "event_espresso"),
890
-                        $model->get_this_model_name(),
891
-                        implode(",", $model_object_data_for_update)
892
-                    )
893
-                );
894
-                // we should still record the mapping even though it was an update
895
-                // because if we were going to insert somethign but it was going to conflict
896
-                // we would have last-minute decided to update. So we'd like to know what we updated
897
-                // and so we record what record ended up being updated using the mapping
898
-                if ($model->has_primary_key_field()) {
899
-                    $new_key_for_mapping = $model_object_data[ $model->primary_key_name() ];
900
-                } else {
901
-                    // no primary key just a combined key
902
-                    $new_key_for_mapping = $model->get_index_primary_key_string($model_object_data);
903
-                }
904
-                $old_db_to_new_db_mapping[ $model->get_this_model_name() ][ $id_in_csv ] = $new_key_for_mapping;
905
-            } else {
906
-                $matched_items = $model->get_all(array($conditions));
907
-                if (! $matched_items) {
908
-                    // no items were matched (so we shouldn't have updated)... but then we should have inserted? what the heck?
909
-                    $this->_total_update_errors++;
910
-                    EE_Error::add_error(
911
-                        sprintf(
912
-                            __(
913
-                                "Could not update %s with the csv data: '%s' for an unknown reason (using WHERE conditions %s)",
914
-                                "event_espresso"
915
-                            ),
916
-                            $model->get_this_model_name(),
917
-                            http_build_query($model_object_data),
918
-                            http_build_query($conditions)
919
-                        ),
920
-                        __FILE__,
921
-                        __FUNCTION__,
922
-                        __LINE__
923
-                    );
924
-                } else {
925
-                    $this->_total_updates++;
926
-                    EE_Error::add_success(
927
-                        sprintf(
928
-                            __(
929
-                                "%s with csv data '%s' was found in the database and didn't need updating because all the data is identical.",
930
-                                "event_espresso"
931
-                            ),
932
-                            $model->get_this_model_name(),
933
-                            implode(",", $model_object_data)
934
-                        )
935
-                    );
936
-                }
937
-            }
938
-        } catch (EE_Error $e) {
939
-            $this->_total_update_errors++;
940
-            $basic_message = sprintf(
941
-                __("Could not update %s with the csv data: %s because %s", "event_espresso"),
942
-                $model->get_this_model_name(),
943
-                implode(",", $model_object_data),
944
-                $e->getMessage()
945
-            );
946
-            $debug_message = $basic_message . ' Stack trace: ' . $e->getTraceAsString();
947
-            EE_Error::add_error("$basic_message | $debug_message", __FILE__, __FUNCTION__, __LINE__);
948
-        }
949
-        return $old_db_to_new_db_mapping;
950
-    }
951
-
952
-    /**
953
-     * Gets the number of inserts performed since importer was instantiated or reset
954
-     *
955
-     * @return int
956
-     */
957
-    public function get_total_inserts()
958
-    {
959
-        return $this->_total_inserts;
960
-    }
961
-
962
-    /**
963
-     *  Gets the number of insert errors since importer was instantiated or reset
964
-     *
965
-     * @return int
966
-     */
967
-    public function get_total_insert_errors()
968
-    {
969
-        return $this->_total_insert_errors;
970
-    }
971
-
972
-    /**
973
-     *  Gets the number of updates performed since importer was instantiated or reset
974
-     *
975
-     * @return int
976
-     */
977
-    public function get_total_updates()
978
-    {
979
-        return $this->_total_updates;
980
-    }
981
-
982
-    /**
983
-     *  Gets the number of update errors since importer was instantiated or reset
984
-     *
985
-     * @return int
986
-     */
987
-    public function get_total_update_errors()
988
-    {
989
-        return $this->_total_update_errors;
990
-    }
125
+		$uploader = ob_get_clean();
126
+		return $uploader;
127
+	}
128
+
129
+
130
+	/**
131
+	 * @Import Event Espresso data - some code "borrowed" from event espresso csv_import.php
132
+	 * @access public
133
+	 * @return boolean success
134
+	 */
135
+	public function import()
136
+	{
137
+
138
+		require_once(EE_CLASSES . 'EE_CSV.class.php');
139
+		$this->EE_CSV = EE_CSV::instance();
140
+
141
+		if (isset($_REQUEST['import'])) {
142
+			if (isset($_POST['csv_submitted'])) {
143
+				switch ($_FILES['file']['error'][0]) {
144
+					case UPLOAD_ERR_OK:
145
+						$error_msg = false;
146
+						break;
147
+					case UPLOAD_ERR_INI_SIZE:
148
+						$error_msg = __(
149
+							"'The uploaded file exceeds the upload_max_filesize directive in php.ini.'",
150
+							"event_espresso"
151
+						);
152
+						break;
153
+					case UPLOAD_ERR_FORM_SIZE:
154
+						$error_msg = __(
155
+							'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.',
156
+							"event_espresso"
157
+						);
158
+						break;
159
+					case UPLOAD_ERR_PARTIAL:
160
+						$error_msg = __('The uploaded file was only partially uploaded.', "event_espresso");
161
+						break;
162
+					case UPLOAD_ERR_NO_FILE:
163
+						$error_msg = __('No file was uploaded.', "event_espresso");
164
+						break;
165
+					case UPLOAD_ERR_NO_TMP_DIR:
166
+						$error_msg = __('Missing a temporary folder.', "event_espresso");
167
+						break;
168
+					case UPLOAD_ERR_CANT_WRITE:
169
+						$error_msg = __('Failed to write file to disk.', "event_espresso");
170
+						break;
171
+					case UPLOAD_ERR_EXTENSION:
172
+						$error_msg = __('File upload stopped by extension.', "event_espresso");
173
+						break;
174
+					default:
175
+						$error_msg = __(
176
+							'An unknown error occurred and the file could not be uploaded',
177
+							"event_espresso"
178
+						);
179
+						break;
180
+				}
181
+
182
+				if (! $error_msg) {
183
+					$filename = $_FILES['file']['name'][0];
184
+					$file_ext = substr(strrchr($filename, '.'), 1);
185
+					$file_type = $_FILES['file']['type'][0];
186
+					$temp_file = $_FILES['file']['tmp_name'][0];
187
+					$filesize = $_FILES['file']['size'][0] / 1024;// convert from bytes to KB
188
+
189
+					if ($file_ext == 'csv') {
190
+						$max_upload = $this->EE_CSV->get_max_upload_size();// max upload size in KB
191
+						if ($filesize < $max_upload || true) {
192
+							$wp_upload_dir = str_replace(array('\\', '/'), '/', wp_upload_dir());
193
+							$path_to_file = $wp_upload_dir['basedir'] . '/espresso/' . $filename;
194
+
195
+							if (move_uploaded_file($temp_file, $path_to_file)) {
196
+								// convert csv to array
197
+								$this->csv_array = $this->EE_CSV->import_csv_to_model_data_array($path_to_file);
198
+
199
+								// was data successfully stored in an array?
200
+								if (is_array($this->csv_array)) {
201
+									$import_what = str_replace('csv_import_', '', $_REQUEST['action']);
202
+									$import_what = str_replace('_', ' ', ucwords($import_what));
203
+									$processed_data = $this->csv_array;
204
+									$this->columns_to_save = false;
205
+
206
+									// if any imports require funcky processing, we'll catch them in the switch
207
+									switch ($_REQUEST['action']) {
208
+										case "import_events":
209
+										case "event_list":
210
+											$import_what = 'Event Details';
211
+											break;
212
+
213
+										case 'groupon_import_csv':
214
+											$import_what = 'Groupon Codes';
215
+											$processed_data = $this->process_groupon_codes();
216
+											break;
217
+									}
218
+									// save processed codes to db
219
+									if ($this->save_csv_data_array_to_db($processed_data, $this->columns_to_save)) {
220
+										return true;
221
+									}
222
+								} else {
223
+									// no array? must be an error
224
+									EE_Error::add_error(
225
+										sprintf(__("No file seems to have been uploaded", "event_espresso")),
226
+										__FILE__,
227
+										__FUNCTION__,
228
+										__LINE__
229
+									);
230
+									return false;
231
+								}
232
+							} else {
233
+								EE_Error::add_error(
234
+									sprintf(__("%s was not successfully uploaded", "event_espresso"), $filename),
235
+									__FILE__,
236
+									__FUNCTION__,
237
+									__LINE__
238
+								);
239
+								return false;
240
+							}
241
+						} else {
242
+							EE_Error::add_error(
243
+								sprintf(
244
+									__(
245
+										"%s was too large of a file and could not be uploaded. The max filesize is %s' KB.",
246
+										"event_espresso"
247
+									),
248
+									$filename,
249
+									$max_upload
250
+								),
251
+								__FILE__,
252
+								__FUNCTION__,
253
+								__LINE__
254
+							);
255
+							return false;
256
+						}
257
+					} else {
258
+						EE_Error::add_error(
259
+							sprintf(__("%s  had an invalid file extension, not uploaded", "event_espresso"), $filename),
260
+							__FILE__,
261
+							__FUNCTION__,
262
+							__LINE__
263
+						);
264
+						return false;
265
+					}
266
+				} else {
267
+					EE_Error::add_error($error_msg, __FILE__, __FUNCTION__, __LINE__);
268
+					return false;
269
+				}
270
+			}
271
+		}
272
+		return;
273
+	}
274
+
275
+
276
+	/**
277
+	 *    Given an array of data (usually from a CSV import) attempts to save that data to the db.
278
+	 *    If $model_name ISN'T provided, assumes that this is a 3d array, with toplevel keys being model names,
279
+	 *    next level being numeric indexes adn each value representing a model object, and the last layer down
280
+	 *    being keys of model fields and their proposed values.
281
+	 *    If $model_name IS provided, assumes a 2d array of the bottom two layers previously mentioned.
282
+	 *    If the CSV data says (in the metadata row) that it's from the SAME database,
283
+	 *    we treat the IDs in the CSV as the normal IDs, and try to update those records. However, if those
284
+	 *    IDs DON'T exist in the database, they're treated as temporary IDs,
285
+	 *    which can used elsewhere to refer to the same object. Once an item
286
+	 *    with a temporary ID gets inserted, we record its mapping from temporary
287
+	 *    ID to real ID, and use the real ID in place of the temporary ID
288
+	 *    when that temporary ID was used as a foreign key.
289
+	 *    If the CSV data says (in the metadata again) that it's from a DIFFERENT database,
290
+	 *    we treat all the IDs in the CSV as temporary ID- eg, if the CSV specifies an event with
291
+	 *    ID 1, and the database already has an event with ID 1, we assume that's just a coincidence,
292
+	 *    and insert a new event, and map it's temporary ID of 1 over to its new real ID.
293
+	 *    An important exception are non-auto-increment primary keys. If one entry in the
294
+	 *    CSV file has the same ID as one in the DB, we assume they are meant to be
295
+	 *    the same item, and instead update the item in the DB with that same ID.
296
+	 *    Also note, we remember the mappings permanently. So the 2nd, 3rd, and 10000th
297
+	 *    time you import a CSV from a different site, we remember their mappings, and
298
+	 * will try to update the item in the DB instead of inserting another item (eg
299
+	 * if we previously imported an event with temporary ID 1, and then it got a
300
+	 * real ID of 123, we remember that. So the next time we import an event with
301
+	 * temporary ID, from the same site, we know that it's real ID is 123, and will
302
+	 * update that event, instead of adding a new event).
303
+	 *
304
+	 * @access public
305
+	 * @param array $csv_data_array - the array containing the csv data produced from
306
+	 *                              EE_CSV::import_csv_to_model_data_array()
307
+	 * @param array $fields_to_save - an array containing the csv column names as keys with the corresponding db table
308
+	 *                              fields they will be saved to
309
+	 * @return TRUE on success, FALSE on fail
310
+	 * @throws \EE_Error
311
+	 */
312
+	public function save_csv_data_array_to_db($csv_data_array, $model_name = false)
313
+	{
314
+		$success = false;
315
+		$error = false;
316
+		// whther to treat this import as if it's data froma different database or not
317
+		// ie, if it IS from a different database, ignore foreign keys whihf
318
+		$export_from_site_a_to_b = true;
319
+		// first level of array is not table information but a table name was passed to the function
320
+		// array is only two levels deep, so let's fix that by adding a level, else the next steps will fail
321
+		if ($model_name) {
322
+			$csv_data_array = array($csv_data_array);
323
+		}
324
+		// begin looking through the $csv_data_array, expecting the toplevel key to be the model's name...
325
+		$old_site_url = 'none-specified';
326
+		// hanlde metadata
327
+		if (isset($csv_data_array[ EE_CSV::metadata_header ])) {
328
+			$csv_metadata = array_shift($csv_data_array[ EE_CSV::metadata_header ]);
329
+			// ok so its metadata, dont try to save it to ehte db obviously...
330
+			if (isset($csv_metadata['site_url']) && $csv_metadata['site_url'] == site_url()) {
331
+				EE_Error::add_attention(
332
+					sprintf(
333
+						__(
334
+							"CSV Data appears to be from the same database, so attempting to update data",
335
+							"event_espresso"
336
+						)
337
+					)
338
+				);
339
+				$export_from_site_a_to_b = false;
340
+			} else {
341
+				$old_site_url = isset($csv_metadata['site_url']) ? $csv_metadata['site_url'] : $old_site_url;
342
+				EE_Error::add_attention(
343
+					sprintf(
344
+						__(
345
+							"CSV Data appears to be from a different database (%s instead of %s), so we assume IDs in the CSV data DO NOT correspond to IDs in this database",
346
+							"event_espresso"
347
+						),
348
+						$old_site_url,
349
+						site_url()
350
+					)
351
+				);
352
+			};
353
+			unset($csv_data_array[ EE_CSV::metadata_header ]);
354
+		}
355
+		/**
356
+		 * @var $old_db_to_new_db_mapping 2d array: toplevel keys being model names, bottom-level keys being the original key, and
357
+		 * the value will be the newly-inserted ID.
358
+		 * If we have already imported data from the same website via CSV, it shoudl be kept in this wp option
359
+		 */
360
+		$old_db_to_new_db_mapping = get_option('ee_id_mapping_from' . sanitize_title($old_site_url), array());
361
+		if ($old_db_to_new_db_mapping) {
362
+			EE_Error::add_attention(
363
+				sprintf(
364
+					__(
365
+						"We noticed you have imported data via CSV from %s before. Because of this, IDs in your CSV have been mapped to their new IDs in %s",
366
+						"event_espresso"
367
+					),
368
+					$old_site_url,
369
+					site_url()
370
+				)
371
+			);
372
+		}
373
+		$old_db_to_new_db_mapping = $this->save_data_rows_to_db(
374
+			$csv_data_array,
375
+			$export_from_site_a_to_b,
376
+			$old_db_to_new_db_mapping
377
+		);
378
+
379
+		// save the mapping from old db to new db in case they try re-importing the same data from the same website again
380
+		update_option('ee_id_mapping_from' . sanitize_title($old_site_url), $old_db_to_new_db_mapping);
381
+
382
+		if ($this->_total_updates > 0) {
383
+			EE_Error::add_success(
384
+				sprintf(
385
+					__("%s existing records in the database were updated.", "event_espresso"),
386
+					$this->_total_updates
387
+				)
388
+			);
389
+			$success = true;
390
+		}
391
+		if ($this->_total_inserts > 0) {
392
+			EE_Error::add_success(
393
+				sprintf(__("%s new records were added to the database.", "event_espresso"), $this->_total_inserts)
394
+			);
395
+			$success = true;
396
+		}
397
+
398
+		if ($this->_total_update_errors > 0) {
399
+			EE_Error::add_error(
400
+				sprintf(
401
+					__(
402
+						"'One or more errors occurred, and a total of %s existing records in the database were <strong>not</strong> updated.'",
403
+						"event_espresso"
404
+					),
405
+					$this->_total_update_errors
406
+				),
407
+				__FILE__,
408
+				__FUNCTION__,
409
+				__LINE__
410
+			);
411
+			$error = true;
412
+		}
413
+		if ($this->_total_insert_errors > 0) {
414
+			EE_Error::add_error(
415
+				sprintf(
416
+					__(
417
+						"One or more errors occurred, and a total of %s new records were <strong>not</strong> added to the database.'",
418
+						"event_espresso"
419
+					),
420
+					$this->_total_insert_errors
421
+				),
422
+				__FILE__,
423
+				__FUNCTION__,
424
+				__LINE__
425
+			);
426
+			$error = true;
427
+		}
428
+
429
+		// lastly, we need to update the datetime and ticket sold amounts
430
+		// as those may have been affected by this
431
+		EEM_Ticket::instance()->update_tickets_sold(EEM_Ticket::instance()->get_all());
432
+
433
+		// if there was at least one success and absolutely no errors
434
+		if ($success && ! $error) {
435
+			return true;
436
+		} else {
437
+			return false;
438
+		}
439
+	}
440
+
441
+
442
+	/**
443
+	 * Processes the array of data, given the knowledge that it's from the same database or a different one,
444
+	 * and the mapping from temporary IDs to real IDs.
445
+	 * If the data is from a different database, we treat the primary keys and their corresponding
446
+	 * foreign keys as "temp Ids", basically identifiers that get mapped to real primary keys
447
+	 * in the real target database. As items are inserted, their temporary primary keys
448
+	 * are mapped to the real IDs in the target database. Also, before doing any update or
449
+	 * insert, we replace all the temp ID which are foreign keys with their mapped real IDs.
450
+	 * An exception: string primary keys are treated as real IDs, or else we'd need to
451
+	 * dynamically generate new string primary keys which would be very awkard for the country table etc.
452
+	 * Also, models with no primary key are strange too. We combine use their primar key INDEX (a
453
+	 * combination of fields) to create a unique string identifying the row and store
454
+	 * those in the mapping.
455
+	 *
456
+	 * If the data is from the same database, we usually treat primary keys as real IDs.
457
+	 * An exception is if there is nothing in the database for that ID. If that's the case,
458
+	 * we need to insert a new row for that ID, and then map from the non-existent ID
459
+	 * to the newly-inserted real ID.
460
+	 *
461
+	 * @param type $csv_data_array
462
+	 * @param type $export_from_site_a_to_b
463
+	 * @param type $old_db_to_new_db_mapping
464
+	 * @return array updated $old_db_to_new_db_mapping
465
+	 */
466
+	public function save_data_rows_to_db($csv_data_array, $export_from_site_a_to_b, $old_db_to_new_db_mapping)
467
+	{
468
+		foreach ($csv_data_array as $model_name_in_csv_data => $model_data_from_import) {
469
+			// now check that assumption was correct. If
470
+			if (EE_Registry::instance()->is_model_name($model_name_in_csv_data)) {
471
+				$model_name = $model_name_in_csv_data;
472
+			} else {
473
+				// no table info in the array and no table name passed to the function?? FAIL
474
+				EE_Error::add_error(
475
+					__(
476
+						'No table information was specified and/or found, therefore the import could not be completed',
477
+						'event_espresso'
478
+					),
479
+					__FILE__,
480
+					__FUNCTION__,
481
+					__LINE__
482
+				);
483
+				return false;
484
+			}
485
+			/* @var $model EEM_Base */
486
+			$model = EE_Registry::instance()->load_model($model_name);
487
+
488
+			// so without further ado, scanning all the data provided for primary keys and their inital values
489
+			foreach ($model_data_from_import as $model_object_data) {
490
+				// before we do ANYTHING, make sure the csv row wasn't just completely blank
491
+				$row_is_completely_empty = true;
492
+				foreach ($model_object_data as $field) {
493
+					if ($field) {
494
+						$row_is_completely_empty = false;
495
+					}
496
+				}
497
+				if ($row_is_completely_empty) {
498
+					continue;
499
+				}
500
+				// find the PK in the row of data (or a combined key if
501
+				// there is no primary key)
502
+				if ($model->has_primary_key_field()) {
503
+					$id_in_csv = $model_object_data[ $model->primary_key_name() ];
504
+				} else {
505
+					$id_in_csv = $model->get_index_primary_key_string($model_object_data);
506
+				}
507
+
508
+
509
+				$model_object_data = $this->_replace_temp_ids_with_mappings(
510
+					$model_object_data,
511
+					$model,
512
+					$old_db_to_new_db_mapping,
513
+					$export_from_site_a_to_b
514
+				);
515
+				// now we need to decide if we're going to add a new model object given the $model_object_data,
516
+				// or just update.
517
+				if ($export_from_site_a_to_b) {
518
+					$what_to_do = $this->_decide_whether_to_insert_or_update_given_data_from_other_db(
519
+						$id_in_csv,
520
+						$model_object_data,
521
+						$model,
522
+						$old_db_to_new_db_mapping
523
+					);
524
+				} else {// this is just a re-import
525
+					$what_to_do = $this->_decide_whether_to_insert_or_update_given_data_from_same_db(
526
+						$id_in_csv,
527
+						$model_object_data,
528
+						$model,
529
+						$old_db_to_new_db_mapping
530
+					);
531
+				}
532
+				if ($what_to_do == self::do_nothing) {
533
+					continue;
534
+				}
535
+
536
+				// double-check we actually want to insert, if that's what we're planning
537
+				// based on whether this item would be unique in the DB or not
538
+				if ($what_to_do == self::do_insert) {
539
+					// we're supposed to be inserting. But wait, will this thing
540
+					// be acceptable if inserted?
541
+					$conflicting = $model->get_one_conflicting($model_object_data, false);
542
+					if ($conflicting) {
543
+						// ok, this item would conflict if inserted. Just update the item that it conflicts with.
544
+						$what_to_do = self::do_update;
545
+						// and if this model has a primary key, remember its mapping
546
+						if ($model->has_primary_key_field()) {
547
+							$old_db_to_new_db_mapping[ $model_name ][ $id_in_csv ] = $conflicting->ID();
548
+							$model_object_data[ $model->primary_key_name() ] = $conflicting->ID();
549
+						} else {
550
+							// we want to update this conflicting item, instead of inserting a conflicting item
551
+							// so we need to make sure they match entirely (its possible that they only conflicted on one field, but we need them to match on other fields
552
+							// for the WHERE conditions in the update). At the time of this comment, there were no models like this
553
+							foreach ($model->get_combined_primary_key_fields() as $key_field) {
554
+								$model_object_data[ $key_field->get_name() ] = $conflicting->get(
555
+									$key_field->get_name()
556
+								);
557
+							}
558
+						}
559
+					}
560
+				}
561
+				if ($what_to_do == self::do_insert) {
562
+					$old_db_to_new_db_mapping = $this->_insert_from_data_array(
563
+						$id_in_csv,
564
+						$model_object_data,
565
+						$model,
566
+						$old_db_to_new_db_mapping
567
+					);
568
+				} elseif ($what_to_do == self::do_update) {
569
+					$old_db_to_new_db_mapping = $this->_update_from_data_array(
570
+						$id_in_csv,
571
+						$model_object_data,
572
+						$model,
573
+						$old_db_to_new_db_mapping
574
+					);
575
+				} else {
576
+					throw new EE_Error(
577
+						sprintf(
578
+							__(
579
+								'Programming error. We shoudl be inserting or updating, but instead we are being told to "%s", whifh is invalid',
580
+								'event_espresso'
581
+							),
582
+							$what_to_do
583
+						)
584
+					);
585
+				}
586
+			}
587
+		}
588
+		return $old_db_to_new_db_mapping;
589
+	}
590
+
591
+
592
+	/**
593
+	 * Decides whether or not to insert, given that this data is from another database.
594
+	 * So, if the primary key of this $model_object_data already exists in the database,
595
+	 * it's just a coincidence and we should still insert. The only time we should
596
+	 * update is when we know what it maps to, or there's something that would
597
+	 * conflict (and we should instead just update that conflicting thing)
598
+	 *
599
+	 * @param string   $id_in_csv
600
+	 * @param array    $model_object_data        by reference so it can be modified
601
+	 * @param EEM_Base $model
602
+	 * @param array    $old_db_to_new_db_mapping by reference so it can be modified
603
+	 * @return string one of the consts on this class that starts with do_*
604
+	 */
605
+	protected function _decide_whether_to_insert_or_update_given_data_from_other_db(
606
+		$id_in_csv,
607
+		$model_object_data,
608
+		$model,
609
+		$old_db_to_new_db_mapping
610
+	) {
611
+		$model_name = $model->get_this_model_name();
612
+		// if it's a site-to-site export-and-import, see if this modelobject's id
613
+		// in the old data that we know of
614
+		if (isset($old_db_to_new_db_mapping[ $model_name ][ $id_in_csv ])) {
615
+			return self::do_update;
616
+		} else {
617
+			return self::do_insert;
618
+		}
619
+	}
620
+
621
+	/**
622
+	 * If this thing basically already exists in the database, we want to update it;
623
+	 * otherwise insert it (ie, someone tweaked the CSV file, or the item was
624
+	 * deleted in the database so it should be re-inserted)
625
+	 *
626
+	 * @param type     $id_in_csv
627
+	 * @param type     $model_object_data
628
+	 * @param EEM_Base $model
629
+	 * @param type     $old_db_to_new_db_mapping
630
+	 * @return
631
+	 */
632
+	protected function _decide_whether_to_insert_or_update_given_data_from_same_db(
633
+		$id_in_csv,
634
+		$model_object_data,
635
+		$model
636
+	) {
637
+		// in this case, check if this thing ACTUALLY exists in the database
638
+		if ($model->get_one_conflicting($model_object_data)) {
639
+			return self::do_update;
640
+		} else {
641
+			return self::do_insert;
642
+		}
643
+	}
644
+
645
+	/**
646
+	 * Using the $old_db_to_new_db_mapping array, replaces all the temporary IDs
647
+	 * with their mapped real IDs. Eg, if importing from site A to B, the mapping
648
+	 * file may indicate that the ID "my_event_id" maps to an actual event ID of 123.
649
+	 * So this function searches for any event temp Ids called "my_event_id" and
650
+	 * replaces them with 123.
651
+	 * Also, if there is no temp ID for the INT foreign keys from another database,
652
+	 * replaces them with 0 or the field's default.
653
+	 *
654
+	 * @param type     $model_object_data
655
+	 * @param EEM_Base $model
656
+	 * @param type     $old_db_to_new_db_mapping
657
+	 * @param boolean  $export_from_site_a_to_b
658
+	 * @return array updated model object data with temp IDs removed
659
+	 */
660
+	protected function _replace_temp_ids_with_mappings(
661
+		$model_object_data,
662
+		$model,
663
+		$old_db_to_new_db_mapping,
664
+		$export_from_site_a_to_b
665
+	) {
666
+		// if this model object's primary key is in the mapping, replace it
667
+		if (
668
+			$model->has_primary_key_field() &&
669
+			$model->get_primary_key_field()->is_auto_increment() &&
670
+			isset($old_db_to_new_db_mapping[ $model->get_this_model_name() ]) &&
671
+			isset(
672
+				$old_db_to_new_db_mapping[ $model->get_this_model_name() ][ $model_object_data[ $model->primary_key_name() ] ]
673
+			)
674
+		) {
675
+			$model_object_data[ $model->primary_key_name() ] = $old_db_to_new_db_mapping[ $model->get_this_model_name(
676
+			) ][ $model_object_data[ $model->primary_key_name() ] ];
677
+		}
678
+
679
+		try {
680
+			$model_name_field = $model->get_field_containing_related_model_name();
681
+			$models_pointed_to_by_model_name_field = $model_name_field->get_model_names_pointed_to();
682
+		} catch (EE_Error $e) {
683
+			$model_name_field = null;
684
+			$models_pointed_to_by_model_name_field = array();
685
+		}
686
+		foreach ($model->field_settings(true) as $field_obj) {
687
+			if ($field_obj instanceof EE_Foreign_Key_Int_Field) {
688
+				$models_pointed_to = $field_obj->get_model_names_pointed_to();
689
+				$found_a_mapping = false;
690
+				foreach ($models_pointed_to as $model_pointed_to_by_fk) {
691
+					if ($model_name_field) {
692
+						$value_of_model_name_field = $model_object_data[ $model_name_field->get_name() ];
693
+						if ($value_of_model_name_field == $model_pointed_to_by_fk) {
694
+							$model_object_data[ $field_obj->get_name() ] = $this->_find_mapping_in(
695
+								$model_object_data[ $field_obj->get_name() ],
696
+								$model_pointed_to_by_fk,
697
+								$old_db_to_new_db_mapping,
698
+								$export_from_site_a_to_b
699
+							);
700
+							$found_a_mapping = true;
701
+							break;
702
+						}
703
+					} else {
704
+						$model_object_data[ $field_obj->get_name() ] = $this->_find_mapping_in(
705
+							$model_object_data[ $field_obj->get_name() ],
706
+							$model_pointed_to_by_fk,
707
+							$old_db_to_new_db_mapping,
708
+							$export_from_site_a_to_b
709
+						);
710
+						$found_a_mapping = true;
711
+					}
712
+					// once we've found a mapping for this field no need to continue
713
+					if ($found_a_mapping) {
714
+						break;
715
+					}
716
+				}
717
+			} else {
718
+				// it's a string foreign key (which we leave alone, because those are things
719
+				// like country names, which we'd really rather not make 2 USAs etc (we'd actually
720
+				// prefer to just update one)
721
+				// or it's just a regular value that ought to be replaced
722
+			}
723
+		}
724
+		//
725
+		if ($model instanceof EEM_Term_Taxonomy) {
726
+			$model_object_data = $this->_handle_split_term_ids($model_object_data);
727
+		}
728
+		return $model_object_data;
729
+	}
730
+
731
+	/**
732
+	 * If the data was exported PRE-4.2, but then imported POST-4.2, then the term_id
733
+	 * this term-taxonomy refers to may be out-of-date so we need to update it.
734
+	 * see https://make.wordpress.org/core/2015/02/16/taxonomy-term-splitting-in-4-2-a-developer-guide/
735
+	 *
736
+	 * @param type $model_object_data
737
+	 * @return array new model object data
738
+	 */
739
+	protected function _handle_split_term_ids($model_object_data)
740
+	{
741
+		if (
742
+			isset($model_object_data['term_id'])
743
+			&& isset($model_object_data['taxonomy'])
744
+			&& apply_filters(
745
+				'FHEE__EE_Import__handle_split_term_ids__function_exists',
746
+				function_exists('wp_get_split_term'),
747
+				$model_object_data
748
+			)
749
+		) {
750
+			$new_term_id = wp_get_split_term($model_object_data['term_id'], $model_object_data['taxonomy']);
751
+			if ($new_term_id) {
752
+				$model_object_data['term_id'] = $new_term_id;
753
+			}
754
+		}
755
+		return $model_object_data;
756
+	}
757
+
758
+	/**
759
+	 * Given the object's ID and its model's name, find it int he mapping data,
760
+	 * bearing in mind where it came from
761
+	 *
762
+	 * @param type   $object_id
763
+	 * @param string $model_name
764
+	 * @param array  $old_db_to_new_db_mapping
765
+	 * @param type   $export_from_site_a_to_b
766
+	 * @return int
767
+	 */
768
+	protected function _find_mapping_in($object_id, $model_name, $old_db_to_new_db_mapping, $export_from_site_a_to_b)
769
+	{
770
+		if (isset($old_db_to_new_db_mapping[ $model_name ][ $object_id ])) {
771
+			return $old_db_to_new_db_mapping[ $model_name ][ $object_id ];
772
+		} elseif ($object_id == '0' || $object_id == '') {
773
+			// leave as-is
774
+			return $object_id;
775
+		} elseif ($export_from_site_a_to_b) {
776
+			// we couldn't find a mapping for this, and it's from a different site,
777
+			// so blank it out
778
+			return null;
779
+		} elseif (! $export_from_site_a_to_b) {
780
+			// we coudln't find a mapping for this, but it's from thsi DB anyway
781
+			// so let's just leave it as-is
782
+			return $object_id;
783
+		}
784
+	}
785
+
786
+	/**
787
+	 *
788
+	 * @param type     $id_in_csv
789
+	 * @param type     $model_object_data
790
+	 * @param EEM_Base $model
791
+	 * @param type     $old_db_to_new_db_mapping
792
+	 * @return array updated $old_db_to_new_db_mapping
793
+	 */
794
+	protected function _insert_from_data_array($id_in_csv, $model_object_data, $model, $old_db_to_new_db_mapping)
795
+	{
796
+		// remove the primary key, if there is one (we don't want it for inserts OR updates)
797
+		// we'll put it back in if we need it
798
+		if ($model->has_primary_key_field() && $model->get_primary_key_field()->is_auto_increment()) {
799
+			$effective_id = $model_object_data[ $model->primary_key_name() ];
800
+			unset($model_object_data[ $model->primary_key_name() ]);
801
+		} else {
802
+			$effective_id = $model->get_index_primary_key_string($model_object_data);
803
+		}
804
+		// the model takes care of validating the CSV's input
805
+		try {
806
+			$new_id = $model->insert($model_object_data);
807
+			if ($new_id) {
808
+				$old_db_to_new_db_mapping[ $model->get_this_model_name() ][ $id_in_csv ] = $new_id;
809
+				$this->_total_inserts++;
810
+				EE_Error::add_success(
811
+					sprintf(
812
+						__("Successfully added new %s (with id %s) with csv data %s", "event_espresso"),
813
+						$model->get_this_model_name(),
814
+						$new_id,
815
+						implode(",", $model_object_data)
816
+					)
817
+				);
818
+			} else {
819
+				$this->_total_insert_errors++;
820
+				// put the ID used back in there for the error message
821
+				if ($model->has_primary_key_field()) {
822
+					$model_object_data[ $model->primary_key_name() ] = $effective_id;
823
+				}
824
+				EE_Error::add_error(
825
+					sprintf(
826
+						__("Could not insert new %s with the csv data: %s", "event_espresso"),
827
+						$model->get_this_model_name(),
828
+						http_build_query($model_object_data)
829
+					),
830
+					__FILE__,
831
+					__FUNCTION__,
832
+					__LINE__
833
+				);
834
+			}
835
+		} catch (EE_Error $e) {
836
+			$this->_total_insert_errors++;
837
+			if ($model->has_primary_key_field()) {
838
+				$model_object_data[ $model->primary_key_name() ] = $effective_id;
839
+			}
840
+			EE_Error::add_error(
841
+				sprintf(
842
+					__("Could not insert new %s with the csv data: %s because %s", "event_espresso"),
843
+					$model->get_this_model_name(),
844
+					implode(",", $model_object_data),
845
+					$e->getMessage()
846
+				),
847
+				__FILE__,
848
+				__FUNCTION__,
849
+				__LINE__
850
+			);
851
+		}
852
+		return $old_db_to_new_db_mapping;
853
+	}
854
+
855
+	/**
856
+	 * Given the model object data, finds the row to update and updates it
857
+	 *
858
+	 * @param string|int $id_in_csv
859
+	 * @param array      $model_object_data
860
+	 * @param EEM_Base   $model
861
+	 * @param array      $old_db_to_new_db_mapping
862
+	 * @return array updated $old_db_to_new_db_mapping
863
+	 */
864
+	protected function _update_from_data_array($id_in_csv, $model_object_data, $model, $old_db_to_new_db_mapping)
865
+	{
866
+		try {
867
+			// let's keep two copies of the model object data:
868
+			// one for performing an update, one for everthing else
869
+			$model_object_data_for_update = $model_object_data;
870
+			if ($model->has_primary_key_field()) {
871
+				$conditions = array($model->primary_key_name() => $model_object_data[ $model->primary_key_name() ]);
872
+				// remove the primary key because we shouldn't use it for updating
873
+				unset($model_object_data_for_update[ $model->primary_key_name() ]);
874
+			} elseif ($model->get_combined_primary_key_fields() > 1) {
875
+				$conditions = array();
876
+				foreach ($model->get_combined_primary_key_fields() as $key_field) {
877
+					$conditions[ $key_field->get_name() ] = $model_object_data[ $key_field->get_name() ];
878
+				}
879
+			} else {
880
+				$model->primary_key_name(
881
+				);// this shoudl just throw an exception, explaining that we dont have a primary key (or a combine dkey)
882
+			}
883
+
884
+			$success = $model->update($model_object_data_for_update, array($conditions));
885
+			if ($success) {
886
+				$this->_total_updates++;
887
+				EE_Error::add_success(
888
+					sprintf(
889
+						__("Successfully updated %s with csv data %s", "event_espresso"),
890
+						$model->get_this_model_name(),
891
+						implode(",", $model_object_data_for_update)
892
+					)
893
+				);
894
+				// we should still record the mapping even though it was an update
895
+				// because if we were going to insert somethign but it was going to conflict
896
+				// we would have last-minute decided to update. So we'd like to know what we updated
897
+				// and so we record what record ended up being updated using the mapping
898
+				if ($model->has_primary_key_field()) {
899
+					$new_key_for_mapping = $model_object_data[ $model->primary_key_name() ];
900
+				} else {
901
+					// no primary key just a combined key
902
+					$new_key_for_mapping = $model->get_index_primary_key_string($model_object_data);
903
+				}
904
+				$old_db_to_new_db_mapping[ $model->get_this_model_name() ][ $id_in_csv ] = $new_key_for_mapping;
905
+			} else {
906
+				$matched_items = $model->get_all(array($conditions));
907
+				if (! $matched_items) {
908
+					// no items were matched (so we shouldn't have updated)... but then we should have inserted? what the heck?
909
+					$this->_total_update_errors++;
910
+					EE_Error::add_error(
911
+						sprintf(
912
+							__(
913
+								"Could not update %s with the csv data: '%s' for an unknown reason (using WHERE conditions %s)",
914
+								"event_espresso"
915
+							),
916
+							$model->get_this_model_name(),
917
+							http_build_query($model_object_data),
918
+							http_build_query($conditions)
919
+						),
920
+						__FILE__,
921
+						__FUNCTION__,
922
+						__LINE__
923
+					);
924
+				} else {
925
+					$this->_total_updates++;
926
+					EE_Error::add_success(
927
+						sprintf(
928
+							__(
929
+								"%s with csv data '%s' was found in the database and didn't need updating because all the data is identical.",
930
+								"event_espresso"
931
+							),
932
+							$model->get_this_model_name(),
933
+							implode(",", $model_object_data)
934
+						)
935
+					);
936
+				}
937
+			}
938
+		} catch (EE_Error $e) {
939
+			$this->_total_update_errors++;
940
+			$basic_message = sprintf(
941
+				__("Could not update %s with the csv data: %s because %s", "event_espresso"),
942
+				$model->get_this_model_name(),
943
+				implode(",", $model_object_data),
944
+				$e->getMessage()
945
+			);
946
+			$debug_message = $basic_message . ' Stack trace: ' . $e->getTraceAsString();
947
+			EE_Error::add_error("$basic_message | $debug_message", __FILE__, __FUNCTION__, __LINE__);
948
+		}
949
+		return $old_db_to_new_db_mapping;
950
+	}
951
+
952
+	/**
953
+	 * Gets the number of inserts performed since importer was instantiated or reset
954
+	 *
955
+	 * @return int
956
+	 */
957
+	public function get_total_inserts()
958
+	{
959
+		return $this->_total_inserts;
960
+	}
961
+
962
+	/**
963
+	 *  Gets the number of insert errors since importer was instantiated or reset
964
+	 *
965
+	 * @return int
966
+	 */
967
+	public function get_total_insert_errors()
968
+	{
969
+		return $this->_total_insert_errors;
970
+	}
971
+
972
+	/**
973
+	 *  Gets the number of updates performed since importer was instantiated or reset
974
+	 *
975
+	 * @return int
976
+	 */
977
+	public function get_total_updates()
978
+	{
979
+		return $this->_total_updates;
980
+	}
981
+
982
+	/**
983
+	 *  Gets the number of update errors since importer was instantiated or reset
984
+	 *
985
+	 * @return int
986
+	 */
987
+	public function get_total_update_errors()
988
+	{
989
+		return $this->_total_update_errors;
990
+	}
991 991
 }
Please login to merge, or discard this patch.
Spacing   +40 added lines, -40 removed lines patch added patch discarded remove patch
@@ -135,7 +135,7 @@  discard block
 block discarded – undo
135 135
     public function import()
136 136
     {
137 137
 
138
-        require_once(EE_CLASSES . 'EE_CSV.class.php');
138
+        require_once(EE_CLASSES.'EE_CSV.class.php');
139 139
         $this->EE_CSV = EE_CSV::instance();
140 140
 
141 141
         if (isset($_REQUEST['import'])) {
@@ -179,18 +179,18 @@  discard block
 block discarded – undo
179 179
                         break;
180 180
                 }
181 181
 
182
-                if (! $error_msg) {
182
+                if ( ! $error_msg) {
183 183
                     $filename = $_FILES['file']['name'][0];
184 184
                     $file_ext = substr(strrchr($filename, '.'), 1);
185 185
                     $file_type = $_FILES['file']['type'][0];
186 186
                     $temp_file = $_FILES['file']['tmp_name'][0];
187
-                    $filesize = $_FILES['file']['size'][0] / 1024;// convert from bytes to KB
187
+                    $filesize = $_FILES['file']['size'][0] / 1024; // convert from bytes to KB
188 188
 
189 189
                     if ($file_ext == 'csv') {
190
-                        $max_upload = $this->EE_CSV->get_max_upload_size();// max upload size in KB
190
+                        $max_upload = $this->EE_CSV->get_max_upload_size(); // max upload size in KB
191 191
                         if ($filesize < $max_upload || true) {
192 192
                             $wp_upload_dir = str_replace(array('\\', '/'), '/', wp_upload_dir());
193
-                            $path_to_file = $wp_upload_dir['basedir'] . '/espresso/' . $filename;
193
+                            $path_to_file = $wp_upload_dir['basedir'].'/espresso/'.$filename;
194 194
 
195 195
                             if (move_uploaded_file($temp_file, $path_to_file)) {
196 196
                                 // convert csv to array
@@ -324,8 +324,8 @@  discard block
 block discarded – undo
324 324
         // begin looking through the $csv_data_array, expecting the toplevel key to be the model's name...
325 325
         $old_site_url = 'none-specified';
326 326
         // hanlde metadata
327
-        if (isset($csv_data_array[ EE_CSV::metadata_header ])) {
328
-            $csv_metadata = array_shift($csv_data_array[ EE_CSV::metadata_header ]);
327
+        if (isset($csv_data_array[EE_CSV::metadata_header])) {
328
+            $csv_metadata = array_shift($csv_data_array[EE_CSV::metadata_header]);
329 329
             // ok so its metadata, dont try to save it to ehte db obviously...
330 330
             if (isset($csv_metadata['site_url']) && $csv_metadata['site_url'] == site_url()) {
331 331
                 EE_Error::add_attention(
@@ -350,14 +350,14 @@  discard block
 block discarded – undo
350 350
                     )
351 351
                 );
352 352
             };
353
-            unset($csv_data_array[ EE_CSV::metadata_header ]);
353
+            unset($csv_data_array[EE_CSV::metadata_header]);
354 354
         }
355 355
         /**
356 356
          * @var $old_db_to_new_db_mapping 2d array: toplevel keys being model names, bottom-level keys being the original key, and
357 357
          * the value will be the newly-inserted ID.
358 358
          * If we have already imported data from the same website via CSV, it shoudl be kept in this wp option
359 359
          */
360
-        $old_db_to_new_db_mapping = get_option('ee_id_mapping_from' . sanitize_title($old_site_url), array());
360
+        $old_db_to_new_db_mapping = get_option('ee_id_mapping_from'.sanitize_title($old_site_url), array());
361 361
         if ($old_db_to_new_db_mapping) {
362 362
             EE_Error::add_attention(
363 363
                 sprintf(
@@ -377,7 +377,7 @@  discard block
 block discarded – undo
377 377
         );
378 378
 
379 379
         // save the mapping from old db to new db in case they try re-importing the same data from the same website again
380
-        update_option('ee_id_mapping_from' . sanitize_title($old_site_url), $old_db_to_new_db_mapping);
380
+        update_option('ee_id_mapping_from'.sanitize_title($old_site_url), $old_db_to_new_db_mapping);
381 381
 
382 382
         if ($this->_total_updates > 0) {
383 383
             EE_Error::add_success(
@@ -500,7 +500,7 @@  discard block
 block discarded – undo
500 500
                 // find the PK in the row of data (or a combined key if
501 501
                 // there is no primary key)
502 502
                 if ($model->has_primary_key_field()) {
503
-                    $id_in_csv = $model_object_data[ $model->primary_key_name() ];
503
+                    $id_in_csv = $model_object_data[$model->primary_key_name()];
504 504
                 } else {
505 505
                     $id_in_csv = $model->get_index_primary_key_string($model_object_data);
506 506
                 }
@@ -544,14 +544,14 @@  discard block
 block discarded – undo
544 544
                         $what_to_do = self::do_update;
545 545
                         // and if this model has a primary key, remember its mapping
546 546
                         if ($model->has_primary_key_field()) {
547
-                            $old_db_to_new_db_mapping[ $model_name ][ $id_in_csv ] = $conflicting->ID();
548
-                            $model_object_data[ $model->primary_key_name() ] = $conflicting->ID();
547
+                            $old_db_to_new_db_mapping[$model_name][$id_in_csv] = $conflicting->ID();
548
+                            $model_object_data[$model->primary_key_name()] = $conflicting->ID();
549 549
                         } else {
550 550
                             // we want to update this conflicting item, instead of inserting a conflicting item
551 551
                             // so we need to make sure they match entirely (its possible that they only conflicted on one field, but we need them to match on other fields
552 552
                             // for the WHERE conditions in the update). At the time of this comment, there were no models like this
553 553
                             foreach ($model->get_combined_primary_key_fields() as $key_field) {
554
-                                $model_object_data[ $key_field->get_name() ] = $conflicting->get(
554
+                                $model_object_data[$key_field->get_name()] = $conflicting->get(
555 555
                                     $key_field->get_name()
556 556
                                 );
557 557
                             }
@@ -611,7 +611,7 @@  discard block
 block discarded – undo
611 611
         $model_name = $model->get_this_model_name();
612 612
         // if it's a site-to-site export-and-import, see if this modelobject's id
613 613
         // in the old data that we know of
614
-        if (isset($old_db_to_new_db_mapping[ $model_name ][ $id_in_csv ])) {
614
+        if (isset($old_db_to_new_db_mapping[$model_name][$id_in_csv])) {
615 615
             return self::do_update;
616 616
         } else {
617 617
             return self::do_insert;
@@ -667,13 +667,13 @@  discard block
 block discarded – undo
667 667
         if (
668 668
             $model->has_primary_key_field() &&
669 669
             $model->get_primary_key_field()->is_auto_increment() &&
670
-            isset($old_db_to_new_db_mapping[ $model->get_this_model_name() ]) &&
670
+            isset($old_db_to_new_db_mapping[$model->get_this_model_name()]) &&
671 671
             isset(
672
-                $old_db_to_new_db_mapping[ $model->get_this_model_name() ][ $model_object_data[ $model->primary_key_name() ] ]
672
+                $old_db_to_new_db_mapping[$model->get_this_model_name()][$model_object_data[$model->primary_key_name()]]
673 673
             )
674 674
         ) {
675
-            $model_object_data[ $model->primary_key_name() ] = $old_db_to_new_db_mapping[ $model->get_this_model_name(
676
-            ) ][ $model_object_data[ $model->primary_key_name() ] ];
675
+            $model_object_data[$model->primary_key_name()] = $old_db_to_new_db_mapping[$model->get_this_model_name(
676
+            )][$model_object_data[$model->primary_key_name()]];
677 677
         }
678 678
 
679 679
         try {
@@ -689,10 +689,10 @@  discard block
 block discarded – undo
689 689
                 $found_a_mapping = false;
690 690
                 foreach ($models_pointed_to as $model_pointed_to_by_fk) {
691 691
                     if ($model_name_field) {
692
-                        $value_of_model_name_field = $model_object_data[ $model_name_field->get_name() ];
692
+                        $value_of_model_name_field = $model_object_data[$model_name_field->get_name()];
693 693
                         if ($value_of_model_name_field == $model_pointed_to_by_fk) {
694
-                            $model_object_data[ $field_obj->get_name() ] = $this->_find_mapping_in(
695
-                                $model_object_data[ $field_obj->get_name() ],
694
+                            $model_object_data[$field_obj->get_name()] = $this->_find_mapping_in(
695
+                                $model_object_data[$field_obj->get_name()],
696 696
                                 $model_pointed_to_by_fk,
697 697
                                 $old_db_to_new_db_mapping,
698 698
                                 $export_from_site_a_to_b
@@ -701,8 +701,8 @@  discard block
 block discarded – undo
701 701
                             break;
702 702
                         }
703 703
                     } else {
704
-                        $model_object_data[ $field_obj->get_name() ] = $this->_find_mapping_in(
705
-                            $model_object_data[ $field_obj->get_name() ],
704
+                        $model_object_data[$field_obj->get_name()] = $this->_find_mapping_in(
705
+                            $model_object_data[$field_obj->get_name()],
706 706
                             $model_pointed_to_by_fk,
707 707
                             $old_db_to_new_db_mapping,
708 708
                             $export_from_site_a_to_b
@@ -767,8 +767,8 @@  discard block
 block discarded – undo
767 767
      */
768 768
     protected function _find_mapping_in($object_id, $model_name, $old_db_to_new_db_mapping, $export_from_site_a_to_b)
769 769
     {
770
-        if (isset($old_db_to_new_db_mapping[ $model_name ][ $object_id ])) {
771
-            return $old_db_to_new_db_mapping[ $model_name ][ $object_id ];
770
+        if (isset($old_db_to_new_db_mapping[$model_name][$object_id])) {
771
+            return $old_db_to_new_db_mapping[$model_name][$object_id];
772 772
         } elseif ($object_id == '0' || $object_id == '') {
773 773
             // leave as-is
774 774
             return $object_id;
@@ -776,7 +776,7 @@  discard block
 block discarded – undo
776 776
             // we couldn't find a mapping for this, and it's from a different site,
777 777
             // so blank it out
778 778
             return null;
779
-        } elseif (! $export_from_site_a_to_b) {
779
+        } elseif ( ! $export_from_site_a_to_b) {
780 780
             // we coudln't find a mapping for this, but it's from thsi DB anyway
781 781
             // so let's just leave it as-is
782 782
             return $object_id;
@@ -796,8 +796,8 @@  discard block
 block discarded – undo
796 796
         // remove the primary key, if there is one (we don't want it for inserts OR updates)
797 797
         // we'll put it back in if we need it
798 798
         if ($model->has_primary_key_field() && $model->get_primary_key_field()->is_auto_increment()) {
799
-            $effective_id = $model_object_data[ $model->primary_key_name() ];
800
-            unset($model_object_data[ $model->primary_key_name() ]);
799
+            $effective_id = $model_object_data[$model->primary_key_name()];
800
+            unset($model_object_data[$model->primary_key_name()]);
801 801
         } else {
802 802
             $effective_id = $model->get_index_primary_key_string($model_object_data);
803 803
         }
@@ -805,7 +805,7 @@  discard block
 block discarded – undo
805 805
         try {
806 806
             $new_id = $model->insert($model_object_data);
807 807
             if ($new_id) {
808
-                $old_db_to_new_db_mapping[ $model->get_this_model_name() ][ $id_in_csv ] = $new_id;
808
+                $old_db_to_new_db_mapping[$model->get_this_model_name()][$id_in_csv] = $new_id;
809 809
                 $this->_total_inserts++;
810 810
                 EE_Error::add_success(
811 811
                     sprintf(
@@ -819,7 +819,7 @@  discard block
 block discarded – undo
819 819
                 $this->_total_insert_errors++;
820 820
                 // put the ID used back in there for the error message
821 821
                 if ($model->has_primary_key_field()) {
822
-                    $model_object_data[ $model->primary_key_name() ] = $effective_id;
822
+                    $model_object_data[$model->primary_key_name()] = $effective_id;
823 823
                 }
824 824
                 EE_Error::add_error(
825 825
                     sprintf(
@@ -835,7 +835,7 @@  discard block
 block discarded – undo
835 835
         } catch (EE_Error $e) {
836 836
             $this->_total_insert_errors++;
837 837
             if ($model->has_primary_key_field()) {
838
-                $model_object_data[ $model->primary_key_name() ] = $effective_id;
838
+                $model_object_data[$model->primary_key_name()] = $effective_id;
839 839
             }
840 840
             EE_Error::add_error(
841 841
                 sprintf(
@@ -868,17 +868,17 @@  discard block
 block discarded – undo
868 868
             // one for performing an update, one for everthing else
869 869
             $model_object_data_for_update = $model_object_data;
870 870
             if ($model->has_primary_key_field()) {
871
-                $conditions = array($model->primary_key_name() => $model_object_data[ $model->primary_key_name() ]);
871
+                $conditions = array($model->primary_key_name() => $model_object_data[$model->primary_key_name()]);
872 872
                 // remove the primary key because we shouldn't use it for updating
873
-                unset($model_object_data_for_update[ $model->primary_key_name() ]);
873
+                unset($model_object_data_for_update[$model->primary_key_name()]);
874 874
             } elseif ($model->get_combined_primary_key_fields() > 1) {
875 875
                 $conditions = array();
876 876
                 foreach ($model->get_combined_primary_key_fields() as $key_field) {
877
-                    $conditions[ $key_field->get_name() ] = $model_object_data[ $key_field->get_name() ];
877
+                    $conditions[$key_field->get_name()] = $model_object_data[$key_field->get_name()];
878 878
                 }
879 879
             } else {
880 880
                 $model->primary_key_name(
881
-                );// this shoudl just throw an exception, explaining that we dont have a primary key (or a combine dkey)
881
+                ); // this shoudl just throw an exception, explaining that we dont have a primary key (or a combine dkey)
882 882
             }
883 883
 
884 884
             $success = $model->update($model_object_data_for_update, array($conditions));
@@ -896,15 +896,15 @@  discard block
 block discarded – undo
896 896
                 // we would have last-minute decided to update. So we'd like to know what we updated
897 897
                 // and so we record what record ended up being updated using the mapping
898 898
                 if ($model->has_primary_key_field()) {
899
-                    $new_key_for_mapping = $model_object_data[ $model->primary_key_name() ];
899
+                    $new_key_for_mapping = $model_object_data[$model->primary_key_name()];
900 900
                 } else {
901 901
                     // no primary key just a combined key
902 902
                     $new_key_for_mapping = $model->get_index_primary_key_string($model_object_data);
903 903
                 }
904
-                $old_db_to_new_db_mapping[ $model->get_this_model_name() ][ $id_in_csv ] = $new_key_for_mapping;
904
+                $old_db_to_new_db_mapping[$model->get_this_model_name()][$id_in_csv] = $new_key_for_mapping;
905 905
             } else {
906 906
                 $matched_items = $model->get_all(array($conditions));
907
-                if (! $matched_items) {
907
+                if ( ! $matched_items) {
908 908
                     // no items were matched (so we shouldn't have updated)... but then we should have inserted? what the heck?
909 909
                     $this->_total_update_errors++;
910 910
                     EE_Error::add_error(
@@ -943,7 +943,7 @@  discard block
 block discarded – undo
943 943
                 implode(",", $model_object_data),
944 944
                 $e->getMessage()
945 945
             );
946
-            $debug_message = $basic_message . ' Stack trace: ' . $e->getTraceAsString();
946
+            $debug_message = $basic_message.' Stack trace: '.$e->getTraceAsString();
947 947
             EE_Error::add_error("$basic_message | $debug_message", __FILE__, __FUNCTION__, __LINE__);
948 948
         }
949 949
         return $old_db_to_new_db_mapping;
Please login to merge, or discard this patch.
core/db_classes/EE_Post_Meta.class.php 2 patches
Doc Comments   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -46,7 +46,7 @@  discard block
 block discarded – undo
46 46
      * Sets meta_id
47 47
      *
48 48
      * @param int $meta_id
49
-     * @return boolean
49
+     * @return boolean|null
50 50
      */
51 51
     public function set_meta_id($meta_id)
52 52
     {
@@ -68,7 +68,7 @@  discard block
 block discarded – undo
68 68
      * Sets post_id
69 69
      *
70 70
      * @param int $post_id
71
-     * @return boolean
71
+     * @return boolean|null
72 72
      */
73 73
     public function set_post_id($post_id)
74 74
     {
@@ -90,7 +90,7 @@  discard block
 block discarded – undo
90 90
      * Sets meta_key
91 91
      *
92 92
      * @param string $meta_key
93
-     * @return boolean
93
+     * @return boolean|null
94 94
      */
95 95
     public function set_meta_key($meta_key)
96 96
     {
@@ -112,7 +112,7 @@  discard block
 block discarded – undo
112 112
      * Sets meta_value
113 113
      *
114 114
      * @param mixed $meta_value
115
-     * @return boolean
115
+     * @return boolean|null
116 116
      */
117 117
     public function set_meta_value($meta_value)
118 118
     {
Please login to merge, or discard this patch.
Indentation   +108 added lines, -108 removed lines patch added patch discarded remove patch
@@ -10,112 +10,112 @@
 block discarded – undo
10 10
 class EE_Post_Meta extends EE_Base_Class
11 11
 {
12 12
 
13
-    /**
14
-     * @param array $props_n_values
15
-     * @return EE_Post_Meta|mixed
16
-     */
17
-    public static function new_instance($props_n_values = array())
18
-    {
19
-        $has_object = parent::_check_for_object($props_n_values, __CLASS__);
20
-        return $has_object ? $has_object : new self($props_n_values);
21
-    }
22
-
23
-
24
-    /**
25
-     * @param array $props_n_values
26
-     * @return EE_Post_Meta
27
-     */
28
-    public static function new_instance_from_db($props_n_values = array())
29
-    {
30
-        return new self($props_n_values, true);
31
-    }
32
-
33
-
34
-    /**
35
-     * Gets meta_id
36
-     *
37
-     * @return int
38
-     */
39
-    public function meta_id()
40
-    {
41
-        return $this->get('meta_id');
42
-    }
43
-
44
-
45
-    /**
46
-     * Sets meta_id
47
-     *
48
-     * @param int $meta_id
49
-     * @return boolean
50
-     */
51
-    public function set_meta_id($meta_id)
52
-    {
53
-        return $this->set('meta_id', $meta_id);
54
-    }
55
-
56
-    /**
57
-     * Gets post_id
58
-     *
59
-     * @return int
60
-     */
61
-    public function post_id()
62
-    {
63
-        return $this->get('post_id');
64
-    }
65
-
66
-
67
-    /**
68
-     * Sets post_id
69
-     *
70
-     * @param int $post_id
71
-     * @return boolean
72
-     */
73
-    public function set_post_id($post_id)
74
-    {
75
-        return $this->set('post_id', $post_id);
76
-    }
77
-
78
-    /**
79
-     * Gets meta_key
80
-     *
81
-     * @return string
82
-     */
83
-    public function meta_key()
84
-    {
85
-        return $this->get('meta_key');
86
-    }
87
-
88
-
89
-    /**
90
-     * Sets meta_key
91
-     *
92
-     * @param string $meta_key
93
-     * @return boolean
94
-     */
95
-    public function set_meta_key($meta_key)
96
-    {
97
-        return $this->set('meta_key', $meta_key);
98
-    }
99
-
100
-    /**
101
-     * Gets meta_value
102
-     *
103
-     * @return mixed
104
-     */
105
-    public function meta_value()
106
-    {
107
-        return $this->get('meta_value');
108
-    }
109
-
110
-
111
-    /**
112
-     * Sets meta_value
113
-     *
114
-     * @param mixed $meta_value
115
-     * @return boolean
116
-     */
117
-    public function set_meta_value($meta_value)
118
-    {
119
-        return $this->set('meta_value', $meta_value);
120
-    }
13
+	/**
14
+	 * @param array $props_n_values
15
+	 * @return EE_Post_Meta|mixed
16
+	 */
17
+	public static function new_instance($props_n_values = array())
18
+	{
19
+		$has_object = parent::_check_for_object($props_n_values, __CLASS__);
20
+		return $has_object ? $has_object : new self($props_n_values);
21
+	}
22
+
23
+
24
+	/**
25
+	 * @param array $props_n_values
26
+	 * @return EE_Post_Meta
27
+	 */
28
+	public static function new_instance_from_db($props_n_values = array())
29
+	{
30
+		return new self($props_n_values, true);
31
+	}
32
+
33
+
34
+	/**
35
+	 * Gets meta_id
36
+	 *
37
+	 * @return int
38
+	 */
39
+	public function meta_id()
40
+	{
41
+		return $this->get('meta_id');
42
+	}
43
+
44
+
45
+	/**
46
+	 * Sets meta_id
47
+	 *
48
+	 * @param int $meta_id
49
+	 * @return boolean
50
+	 */
51
+	public function set_meta_id($meta_id)
52
+	{
53
+		return $this->set('meta_id', $meta_id);
54
+	}
55
+
56
+	/**
57
+	 * Gets post_id
58
+	 *
59
+	 * @return int
60
+	 */
61
+	public function post_id()
62
+	{
63
+		return $this->get('post_id');
64
+	}
65
+
66
+
67
+	/**
68
+	 * Sets post_id
69
+	 *
70
+	 * @param int $post_id
71
+	 * @return boolean
72
+	 */
73
+	public function set_post_id($post_id)
74
+	{
75
+		return $this->set('post_id', $post_id);
76
+	}
77
+
78
+	/**
79
+	 * Gets meta_key
80
+	 *
81
+	 * @return string
82
+	 */
83
+	public function meta_key()
84
+	{
85
+		return $this->get('meta_key');
86
+	}
87
+
88
+
89
+	/**
90
+	 * Sets meta_key
91
+	 *
92
+	 * @param string $meta_key
93
+	 * @return boolean
94
+	 */
95
+	public function set_meta_key($meta_key)
96
+	{
97
+		return $this->set('meta_key', $meta_key);
98
+	}
99
+
100
+	/**
101
+	 * Gets meta_value
102
+	 *
103
+	 * @return mixed
104
+	 */
105
+	public function meta_value()
106
+	{
107
+		return $this->get('meta_value');
108
+	}
109
+
110
+
111
+	/**
112
+	 * Sets meta_value
113
+	 *
114
+	 * @param mixed $meta_value
115
+	 * @return boolean
116
+	 */
117
+	public function set_meta_value($meta_value)
118
+	{
119
+		return $this->set('meta_value', $meta_value);
120
+	}
121 121
 }
Please login to merge, or discard this patch.
core/db_classes/EE_Question.class.php 3 patches
Doc Comments   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -371,7 +371,7 @@  discard block
 block discarded – undo
371 371
      * Question, that relationship will be overwritten.
372 372
      *
373 373
      * @param EE_Question_Option $option
374
-     * @return boolean success
374
+     * @return EE_Base_Class success
375 375
      */
376 376
     public function add_option(EE_Question_Option $option)
377 377
     {
@@ -396,7 +396,7 @@  discard block
 block discarded – undo
396 396
      * Marks the option as deleted.
397 397
      *
398 398
      * @param EE_Question_Option $option
399
-     * @return boolean success
399
+     * @return EE_Base_Class success
400 400
      */
401 401
     public function remove_option(EE_Question_Option $option)
402 402
     {
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -335,7 +335,7 @@  discard block
 block discarded – undo
335 335
      */
336 336
     public function options($notDeletedOptionsOnly = true, $selected_value_to_always_include = null)
337 337
     {
338
-        if (! $this->ID()) {
338
+        if ( ! $this->ID()) {
339 339
             return array();
340 340
         }
341 341
         $query_params = array();
@@ -509,7 +509,7 @@  discard block
 block discarded – undo
509 509
             ),
510 510
             $input_constructor_args
511 511
         );
512
-        if (! $answer instanceof EE_Answer && $registration instanceof EE_Registration) {
512
+        if ( ! $answer instanceof EE_Answer && $registration instanceof EE_Registration) {
513 513
             $answer = EEM_Answer::instance()->get_registration_question_answer_object($registration, $this->ID());
514 514
         }
515 515
         // has this question been answered ?
@@ -647,7 +647,7 @@  discard block
 block discarded – undo
647 647
                     $this,
648 648
                     $input_constructor_args
649 649
                 );
650
-                if (! $default_input) {
650
+                if ( ! $default_input) {
651 651
                     $default_input = new EE_Text_Input($input_constructor_args);
652 652
                 }
653 653
                 $result = $default_input;
Please login to merge, or discard this patch.
Indentation   +664 added lines, -664 removed lines patch added patch discarded remove patch
@@ -14,668 +14,668 @@
 block discarded – undo
14 14
 class EE_Question extends EE_Soft_Delete_Base_Class implements EEI_Duplicatable
15 15
 {
16 16
 
17
-    /**
18
-     *
19
-     * @param array  $props_n_values          incoming values
20
-     * @param string $timezone                incoming timezone (if not set the timezone set for the website will be
21
-     *                                        used.)
22
-     * @param array  $date_formats            incoming date_formats in an array where the first value is the
23
-     *                                        date_format and the second value is the time format
24
-     * @return EE_Question
25
-     */
26
-    public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array())
27
-    {
28
-        $has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats);
29
-        return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats);
30
-    }
31
-
32
-
33
-    /**
34
-     * @param array  $props_n_values  incoming values from the database
35
-     * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
36
-     *                                the website will be used.
37
-     * @return EE_Question
38
-     */
39
-    public static function new_instance_from_db($props_n_values = array(), $timezone = null)
40
-    {
41
-        return new self($props_n_values, true, $timezone);
42
-    }
43
-
44
-
45
-    /**
46
-     *        Set    Question display text
47
-     *
48
-     * @access        public
49
-     * @param string $QST_display_text
50
-     */
51
-    public function set_display_text($QST_display_text = '')
52
-    {
53
-        $this->set('QST_display_text', $QST_display_text);
54
-    }
55
-
56
-
57
-    /**
58
-     *        Set    Question admin text
59
-     *
60
-     * @access        public
61
-     * @param        string $QST_admin_label
62
-     */
63
-    public function set_admin_label($QST_admin_label = '')
64
-    {
65
-        $this->set('QST_admin_label', $QST_admin_label);
66
-    }
67
-
68
-
69
-    /**
70
-     *        Set    system name
71
-     *
72
-     * @access        public
73
-     * @param        mixed $QST_system
74
-     */
75
-    public function set_system_ID($QST_system = '')
76
-    {
77
-        $this->set('QST_system', $QST_system);
78
-    }
79
-
80
-
81
-    /**
82
-     *        Set    question's type
83
-     *
84
-     * @access        public
85
-     * @param        string $QST_type
86
-     */
87
-    public function set_question_type($QST_type = '')
88
-    {
89
-        $this->set('QST_type', $QST_type);
90
-    }
91
-
92
-
93
-    /**
94
-     *        Sets whether this question must be answered when presented in a form
95
-     *
96
-     * @access        public
97
-     * @param        bool $QST_required
98
-     */
99
-    public function set_required($QST_required = false)
100
-    {
101
-        $this->set('QST_required', $QST_required);
102
-    }
103
-
104
-
105
-    /**
106
-     *        Set    Question display text
107
-     *
108
-     * @access        public
109
-     * @param        string $QST_required_text
110
-     */
111
-    public function set_required_text($QST_required_text = '')
112
-    {
113
-        $this->set('QST_required_text', $QST_required_text);
114
-    }
115
-
116
-
117
-    /**
118
-     *        Sets the order of this question when placed in a sequence of questions
119
-     *
120
-     * @access        public
121
-     * @param        int $QST_order
122
-     */
123
-    public function set_order($QST_order = 0)
124
-    {
125
-        $this->set('QST_order', $QST_order);
126
-    }
127
-
128
-
129
-    /**
130
-     *        Sets whether the question is admin-only
131
-     *
132
-     * @access        public
133
-     * @param        bool $QST_admin_only
134
-     */
135
-    public function set_admin_only($QST_admin_only = false)
136
-    {
137
-        $this->set('QST_admin_only', $QST_admin_only);
138
-    }
139
-
140
-
141
-    /**
142
-     *        Sets the wordpress user ID on the question
143
-     *
144
-     * @access        public
145
-     * @param        int $QST_wp_user
146
-     */
147
-    public function set_wp_user($QST_wp_user = 1)
148
-    {
149
-        $this->set('QST_wp_user', $QST_wp_user);
150
-    }
151
-
152
-
153
-    /**
154
-     *        Sets whether the question has been deleted
155
-     *        (we use this boolean instead of actually
156
-     *        deleting it because when users delete this question
157
-     *        they really want to remove the question from future
158
-     *        forms, BUT keep their old answers which depend
159
-     *        on this record actually existing.
160
-     *
161
-     * @access        public
162
-     * @param    bool $QST_deleted
163
-     */
164
-    public function set_deleted($QST_deleted = false)
165
-    {
166
-        $this->set('QST_deleted', $QST_deleted);
167
-    }
168
-
169
-
170
-    /**
171
-     * returns the text for displaying the question to users
172
-     *
173
-     * @access public
174
-     * @return string
175
-     */
176
-    public function display_text()
177
-    {
178
-        return $this->get('QST_display_text');
179
-    }
180
-
181
-
182
-    /**
183
-     * returns the text for the administrative label
184
-     *
185
-     * @access public
186
-     * @return string
187
-     */
188
-    public function admin_label()
189
-    {
190
-        return $this->get('QST_admin_label');
191
-    }
192
-
193
-
194
-    /**
195
-     * returns the attendee column name for this question
196
-     *
197
-     * @access public
198
-     * @return string
199
-     */
200
-    public function system_ID()
201
-    {
202
-        return $this->get('QST_system');
203
-    }
204
-
205
-
206
-    /**
207
-     * returns either a string of 'text', 'textfield', etc.
208
-     *
209
-     * @access public
210
-     * @return boolean
211
-     */
212
-    public function required()
213
-    {
214
-        return $this->get('QST_required');
215
-    }
216
-
217
-
218
-    /**
219
-     * returns the text which should be displayed when a user
220
-     * doesn't answer this question in a form
221
-     *
222
-     * @access public
223
-     * @return string
224
-     */
225
-    public function required_text()
226
-    {
227
-        return $this->get('QST_required_text');
228
-    }
229
-
230
-
231
-    /**
232
-     * returns the type of this question
233
-     *
234
-     * @access public
235
-     * @return string
236
-     */
237
-    public function type()
238
-    {
239
-        return $this->get('QST_type');
240
-    }
241
-
242
-
243
-    /**
244
-     * returns an integer showing where this question should
245
-     * be placed in a sequence of questions
246
-     *
247
-     * @access public
248
-     * @return int
249
-     */
250
-    public function order()
251
-    {
252
-        return $this->get('QST_order');
253
-    }
254
-
255
-
256
-    /**
257
-     * returns whether this question should only appears to admins,
258
-     * or to everyone
259
-     *
260
-     * @access public
261
-     * @return boolean
262
-     */
263
-    public function admin_only()
264
-    {
265
-        return $this->get('QST_admin_only');
266
-    }
267
-
268
-
269
-    /**
270
-     * returns the id the wordpress user who created this question
271
-     *
272
-     * @access public
273
-     * @return int
274
-     */
275
-    public function wp_user()
276
-    {
277
-        return $this->get('QST_wp_user');
278
-    }
279
-
280
-
281
-    /**
282
-     * returns whether this question has been marked as 'deleted'
283
-     *
284
-     * @access public
285
-     * @return boolean
286
-     */
287
-    public function deleted()
288
-    {
289
-        return $this->get('QST_deleted');
290
-    }
291
-
292
-
293
-    /**
294
-     * Gets an array of related EE_Answer  to this EE_Question
295
-     *
296
-     * @return EE_Answer[]
297
-     */
298
-    public function answers()
299
-    {
300
-        return $this->get_many_related('Answer');
301
-    }
302
-
303
-
304
-    /**
305
-     * Boolean check for if there are answers on this question in th db
306
-     *
307
-     * @return boolean true = has answers, false = no answers.
308
-     */
309
-    public function has_answers()
310
-    {
311
-        return $this->count_related('Answer') > 0 ? true : false;
312
-    }
313
-
314
-
315
-    /**
316
-     * gets an array of EE_Question_Group which relate to this question
317
-     *
318
-     * @return EE_Question_Group[]
319
-     */
320
-    public function question_groups()
321
-    {
322
-        return $this->get_many_related('Question_Group');
323
-    }
324
-
325
-
326
-    /**
327
-     * Returns all the options for this question. By default, it returns only the not-yet-deleted ones.
328
-     *
329
-     * @param boolean      $notDeletedOptionsOnly            1
330
-     *                                                       whether to return ALL options, or only the ones which have
331
-     *                                                       not yet been deleleted
332
-     * @param string|array $selected_value_to_always_include , when retrieving options to an ANSWERED question,
333
-     *                                                       we want to usually only show non-deleted options AND the
334
-     *                                                       value that was selected for the answer, whether it was
335
-     *                                                       trashed or not.
336
-     * @return EE_Question_Option[]
337
-     */
338
-    public function options($notDeletedOptionsOnly = true, $selected_value_to_always_include = null)
339
-    {
340
-        if (! $this->ID()) {
341
-            return array();
342
-        }
343
-        $query_params = array();
344
-        if ($selected_value_to_always_include) {
345
-            if (is_array($selected_value_to_always_include)) {
346
-                $query_params[0]['OR*options-query']['QSO_value'] = array('IN', $selected_value_to_always_include);
347
-            } else {
348
-                $query_params[0]['OR*options-query']['QSO_value'] = $selected_value_to_always_include;
349
-            }
350
-        }
351
-        if ($notDeletedOptionsOnly) {
352
-            $query_params[0]['OR*options-query']['QSO_deleted'] = false;
353
-        }
354
-        // order by QSO_order
355
-        $query_params['order_by'] = array('QSO_order' => 'ASC');
356
-        return $this->get_many_related('Question_Option', $query_params);
357
-    }
358
-
359
-
360
-    /**
361
-     * returns an array of EE_Question_Options which relate to this question
362
-     *
363
-     * @return \EE_Question_Option[]
364
-     */
365
-    public function temp_options()
366
-    {
367
-        return $this->_model_relations['Question_Option'];
368
-    }
369
-
370
-
371
-    /**
372
-     * Adds an option for this question. Note: if the option were previously associated with a different
373
-     * Question, that relationship will be overwritten.
374
-     *
375
-     * @param EE_Question_Option $option
376
-     * @return boolean success
377
-     */
378
-    public function add_option(EE_Question_Option $option)
379
-    {
380
-        return $this->_add_relation_to($option, 'Question_Option');
381
-    }
382
-
383
-
384
-    /**
385
-     * Adds an option directly to this question without saving to the db
386
-     *
387
-     * @param EE_Question_Option $option
388
-     * @return boolean success
389
-     */
390
-    public function add_temp_option(EE_Question_Option $option)
391
-    {
392
-        $this->_model_relations['Question_Option'][] = $option;
393
-        return true;
394
-    }
395
-
396
-
397
-    /**
398
-     * Marks the option as deleted.
399
-     *
400
-     * @param EE_Question_Option $option
401
-     * @return boolean success
402
-     */
403
-    public function remove_option(EE_Question_Option $option)
404
-    {
405
-        return $this->_remove_relation_to($option, 'Question_Option');
406
-    }
407
-
408
-
409
-    /**
410
-     * @return bool
411
-     */
412
-    public function is_system_question()
413
-    {
414
-        $system_ID = $this->get('QST_system');
415
-        return ! empty($system_ID) ? true : false;
416
-    }
417
-
418
-
419
-    /**
420
-     * The purpose of this method is set the question order this question order to be the max out of all questions
421
-     *
422
-     * @access public
423
-     * @return void
424
-     */
425
-    public function set_order_to_latest()
426
-    {
427
-        $latest_order = $this->get_model()->get_latest_question_order();
428
-        $latest_order++;
429
-        $this->set('QST_order', $latest_order);
430
-    }
431
-
432
-
433
-    /**
434
-     * Retrieves the list of allowed question types from the model.
435
-     *
436
-     * @return string[]
437
-     */
438
-    private function _allowed_question_types()
439
-    {
440
-        $questionModel = $this->get_model();
441
-        /* @var $questionModel EEM_Question */
442
-        return $questionModel->allowed_question_types();
443
-    }
444
-
445
-    /**
446
-     * Duplicates this question and its question options
447
-     *
448
-     * @return \EE_Question
449
-     */
450
-    public function duplicate($options = array())
451
-    {
452
-        $new_question = clone $this;
453
-        $new_question->set('QST_ID', null);
454
-        $new_question->set_display_text(sprintf(__('%s **Duplicate**', 'event_espresso'), $this->display_text()));
455
-        $new_question->set_admin_label(sprintf(__('%s **Duplicate**', 'event_espresso'), $this->admin_label()));
456
-        $new_question->set_system_ID(null);
457
-        $new_question->set_wp_user(get_current_user_id());
458
-        // if we're duplicating a trashed question, assume we don't want the new one to be trashed
459
-        $new_question->set_deleted(false);
460
-        $success = $new_question->save();
461
-        if ($success) {
462
-            // we don't totally want to duplicate the question options, because we want them to be for the NEW question
463
-            foreach ($this->options() as $question_option) {
464
-                $question_option->duplicate(array('QST_ID' => $new_question->ID()));
465
-            }
466
-            return $new_question;
467
-        } else {
468
-            return null;
469
-        }
470
-    }
471
-
472
-    /**
473
-     * Returns the question's maximum allowed response size
474
-     *
475
-     * @return int|float
476
-     */
477
-    public function max()
478
-    {
479
-        return $this->get('QST_max');
480
-    }
481
-
482
-    /**
483
-     * Sets the question's maximum allowed response size
484
-     *
485
-     * @param int|float $new_max
486
-     * @return void
487
-     */
488
-    public function set_max($new_max)
489
-    {
490
-        $this->set('QST_max', $new_max);
491
-    }
492
-
493
-
494
-    /**
495
-     * Creates a form input from this question which can be used in HTML forms
496
-     *
497
-     * @param EE_Registration $registration
498
-     * @param EE_Answer       $answer
499
-     * @param array           $input_constructor_args
500
-     * @return EE_Form_Input_Base
501
-     */
502
-    public function generate_form_input($registration = null, $answer = null, $input_constructor_args = array())
503
-    {
504
-        $identifier = $this->is_system_question() ? $this->system_ID() : $this->ID();
505
-
506
-        $input_constructor_args = array_merge(
507
-            array(
508
-                'required'                          => $this->required() ? true : false,
509
-                'html_label_text'                   => $this->display_text(),
510
-                'required_validation_error_message' => $this->required_text(),
511
-            ),
512
-            $input_constructor_args
513
-        );
514
-        if (! $answer instanceof EE_Answer && $registration instanceof EE_Registration) {
515
-            $answer = EEM_Answer::instance()->get_registration_question_answer_object($registration, $this->ID());
516
-        }
517
-        // has this question been answered ?
518
-        if (
519
-            $answer instanceof EE_Answer
520
-            && $answer->value() !== ''
521
-        ) {
522
-            // answer gets htmlspecialchars called on it, undo that please
523
-            // because the form input's display strategy may call esc_attr too
524
-            // which also does html special characters
525
-            $values_with_html_special_chars = $answer->value();
526
-            if (is_array($values_with_html_special_chars)) {
527
-                $default_value = array_map('htmlspecialchars_decode', $values_with_html_special_chars);
528
-            } else {
529
-                $default_value = htmlspecialchars_decode($values_with_html_special_chars);
530
-            }
531
-            $input_constructor_args['default'] = $default_value;
532
-        }
533
-        $max_max_for_question = EEM_Question::instance()->absolute_max_for_system_question($this->system_ID());
534
-        if (
535
-            in_array(
536
-                $this->type(),
537
-                EEM_Question::instance()->questionTypesWithMaxLength(),
538
-                true
539
-            )
540
-        ) {
541
-            $input_constructor_args['validation_strategies'][] = new EE_Max_Length_Validation_Strategy(
542
-                null,
543
-                min($max_max_for_question, $this->max())
544
-            );
545
-        }
546
-        $input_constructor_args = apply_filters(
547
-            'FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__input_constructor_args',
548
-            $input_constructor_args,
549
-            $registration,
550
-            $this,
551
-            $answer
552
-        );
553
-
554
-        $result = null;
555
-        switch ($this->type()) {
556
-            // Text
557
-            case EEM_Question::QST_type_text:
558
-                $result = new EE_Text_Input($input_constructor_args);
559
-                break;
560
-            // Textarea
561
-            case EEM_Question::QST_type_textarea:
562
-                $result = new EE_Text_Area_Input($input_constructor_args);
563
-                break;
564
-            // Radio Buttons
565
-            case EEM_Question::QST_type_radio:
566
-                $result = new EE_Radio_Button_Input($this->options(), $input_constructor_args);
567
-                break;
568
-            // Dropdown
569
-            case EEM_Question::QST_type_dropdown:
570
-                $result = new EE_Select_Input($this->options(), $input_constructor_args);
571
-                break;
572
-            // State Dropdown
573
-            case EEM_Question::QST_type_state:
574
-                $state_options = apply_filters(
575
-                    'FHEE__EE_Question__generate_form_input__state_options',
576
-                    null,
577
-                    $this,
578
-                    $registration,
579
-                    $answer
580
-                );
581
-                $result = new EE_State_Select_Input($state_options, $input_constructor_args);
582
-                break;
583
-            // Country Dropdown
584
-            case EEM_Question::QST_type_country:
585
-                $country_options = apply_filters(
586
-                    'FHEE__EE_Question__generate_form_input__country_options',
587
-                    null,
588
-                    $this,
589
-                    $registration,
590
-                    $answer
591
-                );
592
-                $result = new EE_Country_Select_Input($country_options, $input_constructor_args);
593
-                break;
594
-            // Checkboxes
595
-            case EEM_Question::QST_type_checkbox:
596
-                $result = new EE_Checkbox_Multi_Input($this->options(), $input_constructor_args);
597
-                break;
598
-            // Date
599
-            case EEM_Question::QST_type_date:
600
-                $result = new EE_Datepicker_Input($input_constructor_args);
601
-                break;
602
-            case EEM_Question::QST_type_html_textarea:
603
-                $input_constructor_args['validation_strategies'][] = new EE_Simple_HTML_Validation_Strategy();
604
-                $result = new EE_Text_Area_Input($input_constructor_args);
605
-                $result->remove_validation_strategy('EE_Plaintext_Validation_Strategy');
606
-                break;
607
-            case EEM_Question::QST_type_email:
608
-                    $result = new EE_Email_Input($input_constructor_args);
609
-                break;
610
-            // Email confirm
611
-            case EEM_Question::QST_type_email_confirm:
612
-                $result = new EE_Email_Confirm_Input($input_constructor_args);
613
-                break;
614
-            case EEM_Question::QST_type_us_phone:
615
-                $result = new EE_Phone_Input($input_constructor_args);
616
-                break;
617
-            case EEM_Question::QST_type_int:
618
-                $result = new EE_Integer_Input($input_constructor_args);
619
-                break;
620
-            case EEM_Question::QST_type_decimal:
621
-                $result = new EE_Float_Input($input_constructor_args);
622
-                break;
623
-            case EEM_Question::QST_type_url:
624
-                $input_constructor_args['validation_strategies'][] = LoaderFactory::getLoader()->getNew('EE_URL_Validation_Strategy');
625
-                $result = new EE_Text_Input($input_constructor_args);
626
-                break;
627
-            case EEM_Question::QST_type_year:
628
-                $result = new EE_Year_Input(
629
-                    $input_constructor_args,
630
-                    apply_filters(
631
-                        'FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__year_question__four_digit',
632
-                        true,
633
-                        $this
634
-                    ),
635
-                    apply_filters(
636
-                        'FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__year_question__early_range',
637
-                        100,
638
-                        $this
639
-                    ),
640
-                    apply_filters(
641
-                        'FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__year_question__end_range',
642
-                        100,
643
-                        $this
644
-                    )
645
-                );
646
-                break;
647
-            case EEM_Question::QST_type_multi_select:
648
-                $result = new EE_Select_Multiple_Input($this->options(), $input_constructor_args);
649
-                break;
650
-            // fallback
651
-            default:
652
-                $default_input = apply_filters(
653
-                    'FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__default',
654
-                    null,
655
-                    $this->type(),
656
-                    $this,
657
-                    $input_constructor_args
658
-                );
659
-                if (! $default_input) {
660
-                    $default_input = new EE_Text_Input($input_constructor_args);
661
-                }
662
-                $result = $default_input;
663
-        }
664
-        return apply_filters('FHEE__EE_Question__generate_form_input__return', $result, $registration, $this, $answer);
665
-    }
666
-
667
-
668
-    /**
669
-     * Returns whether or not this question type should have question option entries
670
-     *
671
-     * @return bool
672
-     */
673
-    public function should_have_question_options()
674
-    {
675
-        return in_array(
676
-            $this->type(),
677
-            $this->_model->question_types_with_options(),
678
-            true
679
-        );
680
-    }
17
+	/**
18
+	 *
19
+	 * @param array  $props_n_values          incoming values
20
+	 * @param string $timezone                incoming timezone (if not set the timezone set for the website will be
21
+	 *                                        used.)
22
+	 * @param array  $date_formats            incoming date_formats in an array where the first value is the
23
+	 *                                        date_format and the second value is the time format
24
+	 * @return EE_Question
25
+	 */
26
+	public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array())
27
+	{
28
+		$has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats);
29
+		return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats);
30
+	}
31
+
32
+
33
+	/**
34
+	 * @param array  $props_n_values  incoming values from the database
35
+	 * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
36
+	 *                                the website will be used.
37
+	 * @return EE_Question
38
+	 */
39
+	public static function new_instance_from_db($props_n_values = array(), $timezone = null)
40
+	{
41
+		return new self($props_n_values, true, $timezone);
42
+	}
43
+
44
+
45
+	/**
46
+	 *        Set    Question display text
47
+	 *
48
+	 * @access        public
49
+	 * @param string $QST_display_text
50
+	 */
51
+	public function set_display_text($QST_display_text = '')
52
+	{
53
+		$this->set('QST_display_text', $QST_display_text);
54
+	}
55
+
56
+
57
+	/**
58
+	 *        Set    Question admin text
59
+	 *
60
+	 * @access        public
61
+	 * @param        string $QST_admin_label
62
+	 */
63
+	public function set_admin_label($QST_admin_label = '')
64
+	{
65
+		$this->set('QST_admin_label', $QST_admin_label);
66
+	}
67
+
68
+
69
+	/**
70
+	 *        Set    system name
71
+	 *
72
+	 * @access        public
73
+	 * @param        mixed $QST_system
74
+	 */
75
+	public function set_system_ID($QST_system = '')
76
+	{
77
+		$this->set('QST_system', $QST_system);
78
+	}
79
+
80
+
81
+	/**
82
+	 *        Set    question's type
83
+	 *
84
+	 * @access        public
85
+	 * @param        string $QST_type
86
+	 */
87
+	public function set_question_type($QST_type = '')
88
+	{
89
+		$this->set('QST_type', $QST_type);
90
+	}
91
+
92
+
93
+	/**
94
+	 *        Sets whether this question must be answered when presented in a form
95
+	 *
96
+	 * @access        public
97
+	 * @param        bool $QST_required
98
+	 */
99
+	public function set_required($QST_required = false)
100
+	{
101
+		$this->set('QST_required', $QST_required);
102
+	}
103
+
104
+
105
+	/**
106
+	 *        Set    Question display text
107
+	 *
108
+	 * @access        public
109
+	 * @param        string $QST_required_text
110
+	 */
111
+	public function set_required_text($QST_required_text = '')
112
+	{
113
+		$this->set('QST_required_text', $QST_required_text);
114
+	}
115
+
116
+
117
+	/**
118
+	 *        Sets the order of this question when placed in a sequence of questions
119
+	 *
120
+	 * @access        public
121
+	 * @param        int $QST_order
122
+	 */
123
+	public function set_order($QST_order = 0)
124
+	{
125
+		$this->set('QST_order', $QST_order);
126
+	}
127
+
128
+
129
+	/**
130
+	 *        Sets whether the question is admin-only
131
+	 *
132
+	 * @access        public
133
+	 * @param        bool $QST_admin_only
134
+	 */
135
+	public function set_admin_only($QST_admin_only = false)
136
+	{
137
+		$this->set('QST_admin_only', $QST_admin_only);
138
+	}
139
+
140
+
141
+	/**
142
+	 *        Sets the wordpress user ID on the question
143
+	 *
144
+	 * @access        public
145
+	 * @param        int $QST_wp_user
146
+	 */
147
+	public function set_wp_user($QST_wp_user = 1)
148
+	{
149
+		$this->set('QST_wp_user', $QST_wp_user);
150
+	}
151
+
152
+
153
+	/**
154
+	 *        Sets whether the question has been deleted
155
+	 *        (we use this boolean instead of actually
156
+	 *        deleting it because when users delete this question
157
+	 *        they really want to remove the question from future
158
+	 *        forms, BUT keep their old answers which depend
159
+	 *        on this record actually existing.
160
+	 *
161
+	 * @access        public
162
+	 * @param    bool $QST_deleted
163
+	 */
164
+	public function set_deleted($QST_deleted = false)
165
+	{
166
+		$this->set('QST_deleted', $QST_deleted);
167
+	}
168
+
169
+
170
+	/**
171
+	 * returns the text for displaying the question to users
172
+	 *
173
+	 * @access public
174
+	 * @return string
175
+	 */
176
+	public function display_text()
177
+	{
178
+		return $this->get('QST_display_text');
179
+	}
180
+
181
+
182
+	/**
183
+	 * returns the text for the administrative label
184
+	 *
185
+	 * @access public
186
+	 * @return string
187
+	 */
188
+	public function admin_label()
189
+	{
190
+		return $this->get('QST_admin_label');
191
+	}
192
+
193
+
194
+	/**
195
+	 * returns the attendee column name for this question
196
+	 *
197
+	 * @access public
198
+	 * @return string
199
+	 */
200
+	public function system_ID()
201
+	{
202
+		return $this->get('QST_system');
203
+	}
204
+
205
+
206
+	/**
207
+	 * returns either a string of 'text', 'textfield', etc.
208
+	 *
209
+	 * @access public
210
+	 * @return boolean
211
+	 */
212
+	public function required()
213
+	{
214
+		return $this->get('QST_required');
215
+	}
216
+
217
+
218
+	/**
219
+	 * returns the text which should be displayed when a user
220
+	 * doesn't answer this question in a form
221
+	 *
222
+	 * @access public
223
+	 * @return string
224
+	 */
225
+	public function required_text()
226
+	{
227
+		return $this->get('QST_required_text');
228
+	}
229
+
230
+
231
+	/**
232
+	 * returns the type of this question
233
+	 *
234
+	 * @access public
235
+	 * @return string
236
+	 */
237
+	public function type()
238
+	{
239
+		return $this->get('QST_type');
240
+	}
241
+
242
+
243
+	/**
244
+	 * returns an integer showing where this question should
245
+	 * be placed in a sequence of questions
246
+	 *
247
+	 * @access public
248
+	 * @return int
249
+	 */
250
+	public function order()
251
+	{
252
+		return $this->get('QST_order');
253
+	}
254
+
255
+
256
+	/**
257
+	 * returns whether this question should only appears to admins,
258
+	 * or to everyone
259
+	 *
260
+	 * @access public
261
+	 * @return boolean
262
+	 */
263
+	public function admin_only()
264
+	{
265
+		return $this->get('QST_admin_only');
266
+	}
267
+
268
+
269
+	/**
270
+	 * returns the id the wordpress user who created this question
271
+	 *
272
+	 * @access public
273
+	 * @return int
274
+	 */
275
+	public function wp_user()
276
+	{
277
+		return $this->get('QST_wp_user');
278
+	}
279
+
280
+
281
+	/**
282
+	 * returns whether this question has been marked as 'deleted'
283
+	 *
284
+	 * @access public
285
+	 * @return boolean
286
+	 */
287
+	public function deleted()
288
+	{
289
+		return $this->get('QST_deleted');
290
+	}
291
+
292
+
293
+	/**
294
+	 * Gets an array of related EE_Answer  to this EE_Question
295
+	 *
296
+	 * @return EE_Answer[]
297
+	 */
298
+	public function answers()
299
+	{
300
+		return $this->get_many_related('Answer');
301
+	}
302
+
303
+
304
+	/**
305
+	 * Boolean check for if there are answers on this question in th db
306
+	 *
307
+	 * @return boolean true = has answers, false = no answers.
308
+	 */
309
+	public function has_answers()
310
+	{
311
+		return $this->count_related('Answer') > 0 ? true : false;
312
+	}
313
+
314
+
315
+	/**
316
+	 * gets an array of EE_Question_Group which relate to this question
317
+	 *
318
+	 * @return EE_Question_Group[]
319
+	 */
320
+	public function question_groups()
321
+	{
322
+		return $this->get_many_related('Question_Group');
323
+	}
324
+
325
+
326
+	/**
327
+	 * Returns all the options for this question. By default, it returns only the not-yet-deleted ones.
328
+	 *
329
+	 * @param boolean      $notDeletedOptionsOnly            1
330
+	 *                                                       whether to return ALL options, or only the ones which have
331
+	 *                                                       not yet been deleleted
332
+	 * @param string|array $selected_value_to_always_include , when retrieving options to an ANSWERED question,
333
+	 *                                                       we want to usually only show non-deleted options AND the
334
+	 *                                                       value that was selected for the answer, whether it was
335
+	 *                                                       trashed or not.
336
+	 * @return EE_Question_Option[]
337
+	 */
338
+	public function options($notDeletedOptionsOnly = true, $selected_value_to_always_include = null)
339
+	{
340
+		if (! $this->ID()) {
341
+			return array();
342
+		}
343
+		$query_params = array();
344
+		if ($selected_value_to_always_include) {
345
+			if (is_array($selected_value_to_always_include)) {
346
+				$query_params[0]['OR*options-query']['QSO_value'] = array('IN', $selected_value_to_always_include);
347
+			} else {
348
+				$query_params[0]['OR*options-query']['QSO_value'] = $selected_value_to_always_include;
349
+			}
350
+		}
351
+		if ($notDeletedOptionsOnly) {
352
+			$query_params[0]['OR*options-query']['QSO_deleted'] = false;
353
+		}
354
+		// order by QSO_order
355
+		$query_params['order_by'] = array('QSO_order' => 'ASC');
356
+		return $this->get_many_related('Question_Option', $query_params);
357
+	}
358
+
359
+
360
+	/**
361
+	 * returns an array of EE_Question_Options which relate to this question
362
+	 *
363
+	 * @return \EE_Question_Option[]
364
+	 */
365
+	public function temp_options()
366
+	{
367
+		return $this->_model_relations['Question_Option'];
368
+	}
369
+
370
+
371
+	/**
372
+	 * Adds an option for this question. Note: if the option were previously associated with a different
373
+	 * Question, that relationship will be overwritten.
374
+	 *
375
+	 * @param EE_Question_Option $option
376
+	 * @return boolean success
377
+	 */
378
+	public function add_option(EE_Question_Option $option)
379
+	{
380
+		return $this->_add_relation_to($option, 'Question_Option');
381
+	}
382
+
383
+
384
+	/**
385
+	 * Adds an option directly to this question without saving to the db
386
+	 *
387
+	 * @param EE_Question_Option $option
388
+	 * @return boolean success
389
+	 */
390
+	public function add_temp_option(EE_Question_Option $option)
391
+	{
392
+		$this->_model_relations['Question_Option'][] = $option;
393
+		return true;
394
+	}
395
+
396
+
397
+	/**
398
+	 * Marks the option as deleted.
399
+	 *
400
+	 * @param EE_Question_Option $option
401
+	 * @return boolean success
402
+	 */
403
+	public function remove_option(EE_Question_Option $option)
404
+	{
405
+		return $this->_remove_relation_to($option, 'Question_Option');
406
+	}
407
+
408
+
409
+	/**
410
+	 * @return bool
411
+	 */
412
+	public function is_system_question()
413
+	{
414
+		$system_ID = $this->get('QST_system');
415
+		return ! empty($system_ID) ? true : false;
416
+	}
417
+
418
+
419
+	/**
420
+	 * The purpose of this method is set the question order this question order to be the max out of all questions
421
+	 *
422
+	 * @access public
423
+	 * @return void
424
+	 */
425
+	public function set_order_to_latest()
426
+	{
427
+		$latest_order = $this->get_model()->get_latest_question_order();
428
+		$latest_order++;
429
+		$this->set('QST_order', $latest_order);
430
+	}
431
+
432
+
433
+	/**
434
+	 * Retrieves the list of allowed question types from the model.
435
+	 *
436
+	 * @return string[]
437
+	 */
438
+	private function _allowed_question_types()
439
+	{
440
+		$questionModel = $this->get_model();
441
+		/* @var $questionModel EEM_Question */
442
+		return $questionModel->allowed_question_types();
443
+	}
444
+
445
+	/**
446
+	 * Duplicates this question and its question options
447
+	 *
448
+	 * @return \EE_Question
449
+	 */
450
+	public function duplicate($options = array())
451
+	{
452
+		$new_question = clone $this;
453
+		$new_question->set('QST_ID', null);
454
+		$new_question->set_display_text(sprintf(__('%s **Duplicate**', 'event_espresso'), $this->display_text()));
455
+		$new_question->set_admin_label(sprintf(__('%s **Duplicate**', 'event_espresso'), $this->admin_label()));
456
+		$new_question->set_system_ID(null);
457
+		$new_question->set_wp_user(get_current_user_id());
458
+		// if we're duplicating a trashed question, assume we don't want the new one to be trashed
459
+		$new_question->set_deleted(false);
460
+		$success = $new_question->save();
461
+		if ($success) {
462
+			// we don't totally want to duplicate the question options, because we want them to be for the NEW question
463
+			foreach ($this->options() as $question_option) {
464
+				$question_option->duplicate(array('QST_ID' => $new_question->ID()));
465
+			}
466
+			return $new_question;
467
+		} else {
468
+			return null;
469
+		}
470
+	}
471
+
472
+	/**
473
+	 * Returns the question's maximum allowed response size
474
+	 *
475
+	 * @return int|float
476
+	 */
477
+	public function max()
478
+	{
479
+		return $this->get('QST_max');
480
+	}
481
+
482
+	/**
483
+	 * Sets the question's maximum allowed response size
484
+	 *
485
+	 * @param int|float $new_max
486
+	 * @return void
487
+	 */
488
+	public function set_max($new_max)
489
+	{
490
+		$this->set('QST_max', $new_max);
491
+	}
492
+
493
+
494
+	/**
495
+	 * Creates a form input from this question which can be used in HTML forms
496
+	 *
497
+	 * @param EE_Registration $registration
498
+	 * @param EE_Answer       $answer
499
+	 * @param array           $input_constructor_args
500
+	 * @return EE_Form_Input_Base
501
+	 */
502
+	public function generate_form_input($registration = null, $answer = null, $input_constructor_args = array())
503
+	{
504
+		$identifier = $this->is_system_question() ? $this->system_ID() : $this->ID();
505
+
506
+		$input_constructor_args = array_merge(
507
+			array(
508
+				'required'                          => $this->required() ? true : false,
509
+				'html_label_text'                   => $this->display_text(),
510
+				'required_validation_error_message' => $this->required_text(),
511
+			),
512
+			$input_constructor_args
513
+		);
514
+		if (! $answer instanceof EE_Answer && $registration instanceof EE_Registration) {
515
+			$answer = EEM_Answer::instance()->get_registration_question_answer_object($registration, $this->ID());
516
+		}
517
+		// has this question been answered ?
518
+		if (
519
+			$answer instanceof EE_Answer
520
+			&& $answer->value() !== ''
521
+		) {
522
+			// answer gets htmlspecialchars called on it, undo that please
523
+			// because the form input's display strategy may call esc_attr too
524
+			// which also does html special characters
525
+			$values_with_html_special_chars = $answer->value();
526
+			if (is_array($values_with_html_special_chars)) {
527
+				$default_value = array_map('htmlspecialchars_decode', $values_with_html_special_chars);
528
+			} else {
529
+				$default_value = htmlspecialchars_decode($values_with_html_special_chars);
530
+			}
531
+			$input_constructor_args['default'] = $default_value;
532
+		}
533
+		$max_max_for_question = EEM_Question::instance()->absolute_max_for_system_question($this->system_ID());
534
+		if (
535
+			in_array(
536
+				$this->type(),
537
+				EEM_Question::instance()->questionTypesWithMaxLength(),
538
+				true
539
+			)
540
+		) {
541
+			$input_constructor_args['validation_strategies'][] = new EE_Max_Length_Validation_Strategy(
542
+				null,
543
+				min($max_max_for_question, $this->max())
544
+			);
545
+		}
546
+		$input_constructor_args = apply_filters(
547
+			'FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__input_constructor_args',
548
+			$input_constructor_args,
549
+			$registration,
550
+			$this,
551
+			$answer
552
+		);
553
+
554
+		$result = null;
555
+		switch ($this->type()) {
556
+			// Text
557
+			case EEM_Question::QST_type_text:
558
+				$result = new EE_Text_Input($input_constructor_args);
559
+				break;
560
+			// Textarea
561
+			case EEM_Question::QST_type_textarea:
562
+				$result = new EE_Text_Area_Input($input_constructor_args);
563
+				break;
564
+			// Radio Buttons
565
+			case EEM_Question::QST_type_radio:
566
+				$result = new EE_Radio_Button_Input($this->options(), $input_constructor_args);
567
+				break;
568
+			// Dropdown
569
+			case EEM_Question::QST_type_dropdown:
570
+				$result = new EE_Select_Input($this->options(), $input_constructor_args);
571
+				break;
572
+			// State Dropdown
573
+			case EEM_Question::QST_type_state:
574
+				$state_options = apply_filters(
575
+					'FHEE__EE_Question__generate_form_input__state_options',
576
+					null,
577
+					$this,
578
+					$registration,
579
+					$answer
580
+				);
581
+				$result = new EE_State_Select_Input($state_options, $input_constructor_args);
582
+				break;
583
+			// Country Dropdown
584
+			case EEM_Question::QST_type_country:
585
+				$country_options = apply_filters(
586
+					'FHEE__EE_Question__generate_form_input__country_options',
587
+					null,
588
+					$this,
589
+					$registration,
590
+					$answer
591
+				);
592
+				$result = new EE_Country_Select_Input($country_options, $input_constructor_args);
593
+				break;
594
+			// Checkboxes
595
+			case EEM_Question::QST_type_checkbox:
596
+				$result = new EE_Checkbox_Multi_Input($this->options(), $input_constructor_args);
597
+				break;
598
+			// Date
599
+			case EEM_Question::QST_type_date:
600
+				$result = new EE_Datepicker_Input($input_constructor_args);
601
+				break;
602
+			case EEM_Question::QST_type_html_textarea:
603
+				$input_constructor_args['validation_strategies'][] = new EE_Simple_HTML_Validation_Strategy();
604
+				$result = new EE_Text_Area_Input($input_constructor_args);
605
+				$result->remove_validation_strategy('EE_Plaintext_Validation_Strategy');
606
+				break;
607
+			case EEM_Question::QST_type_email:
608
+					$result = new EE_Email_Input($input_constructor_args);
609
+				break;
610
+			// Email confirm
611
+			case EEM_Question::QST_type_email_confirm:
612
+				$result = new EE_Email_Confirm_Input($input_constructor_args);
613
+				break;
614
+			case EEM_Question::QST_type_us_phone:
615
+				$result = new EE_Phone_Input($input_constructor_args);
616
+				break;
617
+			case EEM_Question::QST_type_int:
618
+				$result = new EE_Integer_Input($input_constructor_args);
619
+				break;
620
+			case EEM_Question::QST_type_decimal:
621
+				$result = new EE_Float_Input($input_constructor_args);
622
+				break;
623
+			case EEM_Question::QST_type_url:
624
+				$input_constructor_args['validation_strategies'][] = LoaderFactory::getLoader()->getNew('EE_URL_Validation_Strategy');
625
+				$result = new EE_Text_Input($input_constructor_args);
626
+				break;
627
+			case EEM_Question::QST_type_year:
628
+				$result = new EE_Year_Input(
629
+					$input_constructor_args,
630
+					apply_filters(
631
+						'FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__year_question__four_digit',
632
+						true,
633
+						$this
634
+					),
635
+					apply_filters(
636
+						'FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__year_question__early_range',
637
+						100,
638
+						$this
639
+					),
640
+					apply_filters(
641
+						'FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__year_question__end_range',
642
+						100,
643
+						$this
644
+					)
645
+				);
646
+				break;
647
+			case EEM_Question::QST_type_multi_select:
648
+				$result = new EE_Select_Multiple_Input($this->options(), $input_constructor_args);
649
+				break;
650
+			// fallback
651
+			default:
652
+				$default_input = apply_filters(
653
+					'FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__default',
654
+					null,
655
+					$this->type(),
656
+					$this,
657
+					$input_constructor_args
658
+				);
659
+				if (! $default_input) {
660
+					$default_input = new EE_Text_Input($input_constructor_args);
661
+				}
662
+				$result = $default_input;
663
+		}
664
+		return apply_filters('FHEE__EE_Question__generate_form_input__return', $result, $registration, $this, $answer);
665
+	}
666
+
667
+
668
+	/**
669
+	 * Returns whether or not this question type should have question option entries
670
+	 *
671
+	 * @return bool
672
+	 */
673
+	public function should_have_question_options()
674
+	{
675
+		return in_array(
676
+			$this->type(),
677
+			$this->_model->question_types_with_options(),
678
+			true
679
+		);
680
+	}
681 681
 }
Please login to merge, or discard this patch.
core/db_classes/EE_Question_Form_Input.class.php 3 patches
Doc Comments   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -241,7 +241,7 @@  discard block
 block discarded – undo
241 241
      *        generate_question_form_inputs_for_object
242 242
      *
243 243
      * @access    protected
244
-     * @param bool|object $object $object
244
+     * @param EE_Base_Class|null $object $object
245 245
      * @param    array    $input_types
246 246
      * @return        array
247 247
      */
@@ -354,7 +354,7 @@  discard block
 block discarded – undo
354 354
      *
355 355
      * @access public
356 356
      * @param \EE_Question_Option $QSO EE_Question_Option
357
-     * @return boolean
357
+     * @return boolean|null
358 358
      */
359 359
     public function add_temp_option(EE_Question_Option $QSO)
360 360
     {
@@ -367,8 +367,8 @@  discard block
 block discarded – undo
367 367
      *
368 368
      * @access public
369 369
      * @param    string $property
370
-     * @param    mixed  $value
371
-     * @return mixed
370
+     * @param    boolean  $value
371
+     * @return boolean|null
372 372
      */
373 373
     public function set($property = null, $value = null)
374 374
     {
@@ -416,7 +416,7 @@  discard block
 block discarded – undo
416 416
      *    get_meta
417 417
      *
418 418
      * @access public
419
-     * @param mixed $key
419
+     * @param string $key
420 420
      * @return mixed
421 421
      */
422 422
     public function get_meta($key = false)
Please login to merge, or discard this patch.
Indentation   +434 added lines, -434 removed lines patch added patch discarded remove patch
@@ -13,438 +13,438 @@
 block discarded – undo
13 13
 class EE_Question_Form_Input
14 14
 {
15 15
 
16
-    /**
17
-     *    EE_Question object
18
-     *
19
-     * @access private
20
-     * @var object
21
-     */
22
-    private $_QST = null;
23
-
24
-    /**
25
-     *    EE_Answer object
26
-     *
27
-     * @access private
28
-     * @var object
29
-     */
30
-    private $_ANS = null;
31
-
32
-    /**
33
-     *    $_QST_meta
34
-     * @access private
35
-     * @var array
36
-     */
37
-    private $_QST_meta = array();
38
-
39
-    /**
40
-     *    $QST_input_name
41
-     * @access private
42
-     * @var string
43
-     */
44
-    private $QST_input_name = '';
45
-
46
-    /**
47
-     *    $QST_input_id
48
-     * @access private
49
-     * @var string
50
-     */
51
-    private $QST_input_id = '';
52
-
53
-    /**
54
-     *    $QST_input_class
55
-     * @access private
56
-     * @var string
57
-     */
58
-    private $QST_input_class = '';
59
-
60
-    /**
61
-     * @var bool $QST_disabled
62
-     */
63
-    private $QST_disabled = false;
64
-
65
-
66
-    /**
67
-     * constructor for questions
68
-     *
69
-     * @param \EE_Question $QST EE_Question object
70
-     * @param \EE_Answer   $ANS EE_Answer object
71
-     * @param array        $q_meta
72
-     * @access public
73
-     * @return \EE_Question_Form_Input
74
-     */
75
-    public function __construct(EE_Question $QST = null, EE_Answer $ANS = null, $q_meta = array())
76
-    {
77
-        if (empty($QST) || empty($ANS)) {
78
-            EE_Error::add_error(
79
-                __('An error occurred. A valid EE_Question or EE_Answer object was not received.', 'event_espresso'),
80
-                __FILE__,
81
-                __FUNCTION__,
82
-                __LINE__
83
-            );
84
-            return null;
85
-        }
86
-        $this->_QST = $QST;
87
-        $this->_ANS = $ANS;
88
-        $this->set_question_form_input_meta($q_meta);
89
-        $this->set_question_form_input_init();
90
-    }
91
-
92
-
93
-    /**
94
-     * sets meta data for the question form input
95
-     *
96
-     * @access public
97
-     * @param array $q_meta
98
-     * @return void
99
-     */
100
-    public function set_question_form_input_meta($q_meta = array())
101
-    {
102
-        $default_q_meta = array(
103
-            'att_nmbr'       => 1,
104
-            'ticket_id'      => '',
105
-            'date'           => '',
106
-            'time'           => '',
107
-            'input_name'     => '',
108
-            'input_id'       => '',
109
-            'input_class'    => '',
110
-            'input_prefix'   => 'qstn',
111
-            'append_qstn_id' => true,
112
-            'htmlentities'   => true,
113
-            'allow_null'     => false,
114
-        );
115
-        $this->_QST_meta = array_merge($default_q_meta, $q_meta);
116
-    }
117
-
118
-
119
-    /**
120
-     * set_question_form_input_init
121
-     *
122
-     * @access public
123
-     * @return void
124
-     */
125
-    public function set_question_form_input_init()
126
-    {
127
-        $qstn_id = $this->_QST->system_ID() ? $this->_QST->system_ID() : $this->_QST->ID();
128
-        $this->_set_input_name($qstn_id);
129
-        $this->_set_input_id($qstn_id);
130
-        $this->_set_input_class($qstn_id);
131
-        $this->set_question_form_input_answer($qstn_id);
132
-    }
133
-
134
-
135
-    /**
136
-     * set_input_name
137
-     *
138
-     * @access private
139
-     * @param $qstn_id
140
-     * @return void
141
-     */
142
-    private function _set_input_name($qstn_id)
143
-    {
144
-        if (! empty($qstn_id)) {
145
-            $ANS_ID = $this->get('ANS_ID');
146
-            $qstn_id = ! empty($ANS_ID) ? '[' . $qstn_id . '][' . $ANS_ID . ']' : '[' . $qstn_id . ']';
147
-        }
148
-        $this->QST_input_name = $this->_QST_meta['append_qstn_id'] && ! empty($qstn_id)
149
-            ? $this->_QST_meta['input_prefix'] . $this->_QST_meta['input_name'] . $qstn_id
150
-            : $this->_QST_meta['input_prefix'] . $this->_QST_meta['input_name'];
151
-    }
152
-
153
-
154
-    /**
155
-     * get property values for question form input
156
-     *
157
-     * @access public
158
-     * @param    string $property
159
-     * @return mixed
160
-     */
161
-    public function get($property = null)
162
-    {
163
-        if (! empty($property)) {
164
-            if (EEM_Question::instance()->has_field($property)) {
165
-                return $this->_QST->get($property);
166
-            } elseif (EEM_Answer::instance()->has_field($property)) {
167
-                return $this->_ANS->get($property);
168
-            } elseif ($this->_question_form_input_property_exists(__CLASS__, $property)) {
169
-                return $this->{$property};
170
-            }
171
-        }
172
-        return null;
173
-    }
174
-
175
-
176
-    /**
177
-     *    _question_form_input_property_exists
178
-     *
179
-     * @access private
180
-     * @param    string $classname
181
-     * @param    string $property
182
-     * @return boolean
183
-     */
184
-    private function _question_form_input_property_exists($classname, $property)
185
-    {
186
-        // first try regular property exists method which works as expected in PHP 5.3+
187
-        $prop = EEH_Class_Tools::has_property($classname, $property);
188
-        if (! $prop) {
189
-            // use reflection for < PHP 5.3 as a double check when property is not found, possible due to access restriction
190
-            $reflector = new ReflectionClass($classname);
191
-            $prop = $reflector->hasProperty($property);
192
-        }
193
-        return $prop;
194
-    }
195
-
196
-
197
-    /**
198
-     * set_input_id
199
-     *
200
-     * @access private
201
-     * @param $qstn_id
202
-     * @return void
203
-     */
204
-    private function _set_input_id($qstn_id)
205
-    {
206
-        $input_id = isset($this->_QST_meta['input_id']) && ! empty($this->_QST_meta['input_id'])
207
-            ? $this->_QST_meta['input_id']
208
-            : sanitize_key(strip_tags($this->_QST->get('QST_display_text')));
209
-        $this->QST_input_id = $this->_QST_meta['append_qstn_id'] && ! empty($qstn_id)
210
-            ? $input_id . '-' . $qstn_id
211
-            : $input_id;
212
-    }
213
-
214
-
215
-    /**
216
-     * set_input_class
217
-     *
218
-     * @access private
219
-     * @return void
220
-     */
221
-    private function _set_input_class()
222
-    {
223
-        $this->QST_input_class = isset($this->_QST_meta['input_class']) ? $this->_QST_meta['input_class'] : '';
224
-    }
225
-
226
-
227
-    /**
228
-     * set_question_form_input_answer
229
-     *
230
-     * @access public
231
-     * @param mixed    int | string    $qstn_id
232
-     * @return void
233
-     */
234
-    public function set_question_form_input_answer($qstn_id)
235
-    {
236
-        // check for answer in $_REQUEST in case we are reprocessing a form after an error
237
-        if (
238
-            isset($this->_QST_meta['EVT_ID'])
239
-            && isset($this->_QST_meta['att_nmbr'])
240
-            && isset($this->_QST_meta['date'])
241
-            && isset($this->_QST_meta['time'])
242
-            && isset($this->_QST_meta['price_id'])
243
-        ) {
244
-            if (
245
-                isset($_REQUEST['qstn'][ $this->_QST_meta['EVT_ID'] ][ $this->_QST_meta['att_nmbr'] ][ $this->_QST_meta['date'] ][ $this->_QST_meta['time'] ][ $this->_QST_meta['price_id'] ][ $qstn_id ])
246
-            ) {
247
-                $answer = $_REQUEST['qstn'][ $this->_QST_meta['EVT_ID'] ][ $this->_QST_meta['att_nmbr'] ][ $this->_QST_meta['date'] ][ $this->_QST_meta['time'] ][ $this->_QST_meta['price_id'] ][ $qstn_id ];
248
-                $this->_ANS->set('ANS_value', $answer);
249
-            }
250
-        }
251
-    }
252
-
253
-
254
-    /**
255
-     *        generate_question_form_inputs_for_object
256
-     *
257
-     * @access    protected
258
-     * @param bool|object $object $object
259
-     * @param    array    $input_types
260
-     * @return        array
261
-     */
262
-    public static function generate_question_form_inputs_for_object($object = false, $input_types = array())
263
-    {
264
-        if (! is_object($object)) {
265
-            return false;
266
-        }
267
-        $inputs = array();
268
-        $fields = $object->get_model()->field_settings(false);
269
-        // $pk = $object->ID(); <<< NO!
270
-        // EEH_Debug_Tools::printr( $object, get_class( $object ) . '<br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
271
-        // EEH_Debug_Tools::printr( $fields, '$fields  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
272
-        // EEH_Debug_Tools::printr( $input_types, '$input_types  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
273
-        foreach ($fields as $field_ID => $field) {
274
-            if ($field instanceof EE_Model_Field_Base) {
275
-                // echo '<h4>$field_ID : ' . $field_ID . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
276
-                // EEH_Debug_Tools::printr( $field, '$field  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
277
-                if (isset($input_types[ $field_ID ])) {
278
-                    // get saved value for field
279
-                    $value = $object->get($field_ID);
280
-                    // echo '<h4>$value : ' . $value . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
281
-                    // if no saved value, then use default
282
-                    $value = $value !== null ? $value : $field->get_default_value();
283
-                    // if ( $field_ID == 'CNT_active' )
284
-                    // echo '<h4>$value : ' . $value . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
285
-                    // determine question type
286
-                    $type = isset($input_types[ $field_ID ]) ? $input_types[ $field_ID ]['type'] : 'TEXT';
287
-                    // input name
288
-                    $input_name = isset($input_types[ $field_ID ]) && isset($input_types[ $field_ID ]['input_name'])
289
-                        ? $input_types[ $field_ID ]['input_name'] . '[' . $field_ID . ']'
290
-                        : $field_ID;
291
-                    // css class for input
292
-                    $class = isset($input_types[ $field_ID ]['class']) && ! empty($input_types[ $field_ID ]['class'])
293
-                        ? ' ' . $input_types[ $field_ID ]['class']
294
-                        : '';
295
-                    // whether to apply htmlentities to answer
296
-                    $htmlentities = isset($input_types[ $field_ID ]['htmlentities'])
297
-                        ? $input_types[ $field_ID ]['htmlentities']
298
-                        : true;
299
-                    // whether to apply htmlentities to answer
300
-                    $label_b4 = isset($input_types[ $field_ID ]['label_b4'])
301
-                        ? $input_types[ $field_ID ]['label_b4']
302
-                        : false;
303
-                    // whether to apply htmlentities to answer
304
-                    $use_desc_4_label = isset($input_types[ $field_ID ]['use_desc_4_label'])
305
-                        ? $input_types[ $field_ID ]['use_desc_4_label']
306
-                        : false;
307
-                    // whether input is disabled
308
-                    $disabled = isset($input_types[ $field_ID ]['disabled'])
309
-                        ? $input_types[ $field_ID ]['disabled']
310
-                        : false;
311
-
312
-                    // create EE_Question_Form_Input object
313
-                    $QFI = new EE_Question_Form_Input(
314
-                        EE_Question::new_instance(
315
-                            array(
316
-                                'QST_ID'           => 0,
317
-                                'QST_display_text' => $field->get_nicename(),
318
-                                'QST_type'         => $type,
319
-                            )
320
-                        ),
321
-                        EE_Answer::new_instance(
322
-                            array(
323
-                                'ANS_ID'    => 0,
324
-                                'QST_ID'    => 0,
325
-                                'REG_ID'    => 0,
326
-                                'ANS_value' => $value,
327
-                            )
328
-                        ),
329
-                        array(
330
-                            'input_id'         => $field_ID . '-' . $object->ID(),
331
-                            'input_name'       => $input_name,
332
-                            'input_class'      => $field_ID . $class,
333
-                            'input_prefix'     => '',
334
-                            'append_qstn_id'   => false,
335
-                            'htmlentities'     => $htmlentities,
336
-                            'label_b4'         => $label_b4,
337
-                            'use_desc_4_label' => $use_desc_4_label,
338
-                        )
339
-                    );
340
-                    // does question type have options ?
341
-                    if (
342
-                        in_array($type, array('DROPDOWN', 'RADIO_BTN', 'CHECKBOX'))
343
-                        && isset($input_types[ $field_ID ])
344
-                        && isset($input_types[ $field_ID ]['options'])
345
-                    ) {
346
-                        foreach ($input_types[ $field_ID ]['options'] as $option) {
347
-                            $option = stripslashes_deep($option);
348
-                            $option_id = ! empty($option['id']) ? $option['id'] : 0;
349
-                            $QSO = EE_Question_Option::new_instance(
350
-                                array(
351
-                                    'QSO_value'   => (string) $option_id,
352
-                                    'QSO_desc'    => $option['text'],
353
-                                    'QSO_deleted' => false,
354
-                                )
355
-                            );
356
-                            // all QST (and ANS) properties can be accessed indirectly thru QFI
357
-                            $QFI->add_temp_option($QSO);
358
-                        }
359
-                    }
360
-                    // we don't want ppl manually changing primary keys cuz that would just lead to total craziness man
361
-                    if ($disabled || $field_ID == $object->get_model()->primary_key_name()) {
362
-                        $QFI->set('QST_disabled', true);
363
-                    }
364
-                    // EEH_Debug_Tools::printr( $QFI, '$QFI  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
365
-                    $inputs[ $field_ID ] = $QFI;
366
-                    // if ( $field_ID == 'CNT_active' ) {
367
-                    // EEH_Debug_Tools::printr( $QFI, '$QFI  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
368
-                    // }
369
-                }
370
-            }
371
-        }
372
-        return $inputs;
373
-    }
374
-
375
-
376
-    /**
377
-     *    add_temp_option
378
-     *
379
-     * @access public
380
-     * @param \EE_Question_Option $QSO EE_Question_Option
381
-     * @return boolean
382
-     */
383
-    public function add_temp_option(EE_Question_Option $QSO)
384
-    {
385
-        $this->_QST->add_temp_option($QSO);
386
-    }
387
-
388
-
389
-    /**
390
-     * set property values for question form input
391
-     *
392
-     * @access public
393
-     * @param    string $property
394
-     * @param    mixed  $value
395
-     * @return mixed
396
-     */
397
-    public function set($property = null, $value = null)
398
-    {
399
-        if (! empty($property)) {
400
-            if (EEM_Question::instance()->has_field($property)) {
401
-                $this->_QST->set($property, $value);
402
-            } elseif (EEM_Answer::instance()->has_field($property)) {
403
-                $this->_ANS->set($property, $value);
404
-            } elseif ($this->_question_form_input_property_exists(__CLASS__, $property)) {
405
-                // echo "<hr>$property is a prop of QFI";
406
-                $this->{$property} = $value;
407
-                return true;
408
-            }
409
-        }
410
-        return null;
411
-    }
412
-
413
-
414
-    /**
415
-     *    _question_form_input_property_exists
416
-     *
417
-     * @access public
418
-     * @param boolean      $notDeletedOptionsOnly            1
419
-     *                                                       whether to return ALL options, or only the ones which have
420
-     *                                                       not yet been deleted
421
-     * @param string|array $selected_value_to_always_include , when retrieving options to an ANSWERED question,
422
-     *                                                       we want to usually only show non-deleted options AND the
423
-     *                                                       value that was selected for the answer, whether it was
424
-     *                                                       trashed or not.
425
-     * @return EE_Question_Option
426
-     */
427
-    public function options($notDeletedOptionsOnly = true, $selected_value_to_always_include = null)
428
-    {
429
-        $temp_options = $this->_QST->temp_options();
430
-        return ! empty($temp_options)
431
-            ? $temp_options
432
-            : $this->_QST->options(
433
-                $notDeletedOptionsOnly,
434
-                $selected_value_to_always_include
435
-            );
436
-    }
437
-
438
-
439
-    /**
440
-     *    get_meta
441
-     *
442
-     * @access public
443
-     * @param mixed $key
444
-     * @return mixed
445
-     */
446
-    public function get_meta($key = false)
447
-    {
448
-        return $key && isset($this->_QST_meta[ $key ]) ? $this->_QST_meta[ $key ] : false;
449
-    }
16
+	/**
17
+	 *    EE_Question object
18
+	 *
19
+	 * @access private
20
+	 * @var object
21
+	 */
22
+	private $_QST = null;
23
+
24
+	/**
25
+	 *    EE_Answer object
26
+	 *
27
+	 * @access private
28
+	 * @var object
29
+	 */
30
+	private $_ANS = null;
31
+
32
+	/**
33
+	 *    $_QST_meta
34
+	 * @access private
35
+	 * @var array
36
+	 */
37
+	private $_QST_meta = array();
38
+
39
+	/**
40
+	 *    $QST_input_name
41
+	 * @access private
42
+	 * @var string
43
+	 */
44
+	private $QST_input_name = '';
45
+
46
+	/**
47
+	 *    $QST_input_id
48
+	 * @access private
49
+	 * @var string
50
+	 */
51
+	private $QST_input_id = '';
52
+
53
+	/**
54
+	 *    $QST_input_class
55
+	 * @access private
56
+	 * @var string
57
+	 */
58
+	private $QST_input_class = '';
59
+
60
+	/**
61
+	 * @var bool $QST_disabled
62
+	 */
63
+	private $QST_disabled = false;
64
+
65
+
66
+	/**
67
+	 * constructor for questions
68
+	 *
69
+	 * @param \EE_Question $QST EE_Question object
70
+	 * @param \EE_Answer   $ANS EE_Answer object
71
+	 * @param array        $q_meta
72
+	 * @access public
73
+	 * @return \EE_Question_Form_Input
74
+	 */
75
+	public function __construct(EE_Question $QST = null, EE_Answer $ANS = null, $q_meta = array())
76
+	{
77
+		if (empty($QST) || empty($ANS)) {
78
+			EE_Error::add_error(
79
+				__('An error occurred. A valid EE_Question or EE_Answer object was not received.', 'event_espresso'),
80
+				__FILE__,
81
+				__FUNCTION__,
82
+				__LINE__
83
+			);
84
+			return null;
85
+		}
86
+		$this->_QST = $QST;
87
+		$this->_ANS = $ANS;
88
+		$this->set_question_form_input_meta($q_meta);
89
+		$this->set_question_form_input_init();
90
+	}
91
+
92
+
93
+	/**
94
+	 * sets meta data for the question form input
95
+	 *
96
+	 * @access public
97
+	 * @param array $q_meta
98
+	 * @return void
99
+	 */
100
+	public function set_question_form_input_meta($q_meta = array())
101
+	{
102
+		$default_q_meta = array(
103
+			'att_nmbr'       => 1,
104
+			'ticket_id'      => '',
105
+			'date'           => '',
106
+			'time'           => '',
107
+			'input_name'     => '',
108
+			'input_id'       => '',
109
+			'input_class'    => '',
110
+			'input_prefix'   => 'qstn',
111
+			'append_qstn_id' => true,
112
+			'htmlentities'   => true,
113
+			'allow_null'     => false,
114
+		);
115
+		$this->_QST_meta = array_merge($default_q_meta, $q_meta);
116
+	}
117
+
118
+
119
+	/**
120
+	 * set_question_form_input_init
121
+	 *
122
+	 * @access public
123
+	 * @return void
124
+	 */
125
+	public function set_question_form_input_init()
126
+	{
127
+		$qstn_id = $this->_QST->system_ID() ? $this->_QST->system_ID() : $this->_QST->ID();
128
+		$this->_set_input_name($qstn_id);
129
+		$this->_set_input_id($qstn_id);
130
+		$this->_set_input_class($qstn_id);
131
+		$this->set_question_form_input_answer($qstn_id);
132
+	}
133
+
134
+
135
+	/**
136
+	 * set_input_name
137
+	 *
138
+	 * @access private
139
+	 * @param $qstn_id
140
+	 * @return void
141
+	 */
142
+	private function _set_input_name($qstn_id)
143
+	{
144
+		if (! empty($qstn_id)) {
145
+			$ANS_ID = $this->get('ANS_ID');
146
+			$qstn_id = ! empty($ANS_ID) ? '[' . $qstn_id . '][' . $ANS_ID . ']' : '[' . $qstn_id . ']';
147
+		}
148
+		$this->QST_input_name = $this->_QST_meta['append_qstn_id'] && ! empty($qstn_id)
149
+			? $this->_QST_meta['input_prefix'] . $this->_QST_meta['input_name'] . $qstn_id
150
+			: $this->_QST_meta['input_prefix'] . $this->_QST_meta['input_name'];
151
+	}
152
+
153
+
154
+	/**
155
+	 * get property values for question form input
156
+	 *
157
+	 * @access public
158
+	 * @param    string $property
159
+	 * @return mixed
160
+	 */
161
+	public function get($property = null)
162
+	{
163
+		if (! empty($property)) {
164
+			if (EEM_Question::instance()->has_field($property)) {
165
+				return $this->_QST->get($property);
166
+			} elseif (EEM_Answer::instance()->has_field($property)) {
167
+				return $this->_ANS->get($property);
168
+			} elseif ($this->_question_form_input_property_exists(__CLASS__, $property)) {
169
+				return $this->{$property};
170
+			}
171
+		}
172
+		return null;
173
+	}
174
+
175
+
176
+	/**
177
+	 *    _question_form_input_property_exists
178
+	 *
179
+	 * @access private
180
+	 * @param    string $classname
181
+	 * @param    string $property
182
+	 * @return boolean
183
+	 */
184
+	private function _question_form_input_property_exists($classname, $property)
185
+	{
186
+		// first try regular property exists method which works as expected in PHP 5.3+
187
+		$prop = EEH_Class_Tools::has_property($classname, $property);
188
+		if (! $prop) {
189
+			// use reflection for < PHP 5.3 as a double check when property is not found, possible due to access restriction
190
+			$reflector = new ReflectionClass($classname);
191
+			$prop = $reflector->hasProperty($property);
192
+		}
193
+		return $prop;
194
+	}
195
+
196
+
197
+	/**
198
+	 * set_input_id
199
+	 *
200
+	 * @access private
201
+	 * @param $qstn_id
202
+	 * @return void
203
+	 */
204
+	private function _set_input_id($qstn_id)
205
+	{
206
+		$input_id = isset($this->_QST_meta['input_id']) && ! empty($this->_QST_meta['input_id'])
207
+			? $this->_QST_meta['input_id']
208
+			: sanitize_key(strip_tags($this->_QST->get('QST_display_text')));
209
+		$this->QST_input_id = $this->_QST_meta['append_qstn_id'] && ! empty($qstn_id)
210
+			? $input_id . '-' . $qstn_id
211
+			: $input_id;
212
+	}
213
+
214
+
215
+	/**
216
+	 * set_input_class
217
+	 *
218
+	 * @access private
219
+	 * @return void
220
+	 */
221
+	private function _set_input_class()
222
+	{
223
+		$this->QST_input_class = isset($this->_QST_meta['input_class']) ? $this->_QST_meta['input_class'] : '';
224
+	}
225
+
226
+
227
+	/**
228
+	 * set_question_form_input_answer
229
+	 *
230
+	 * @access public
231
+	 * @param mixed    int | string    $qstn_id
232
+	 * @return void
233
+	 */
234
+	public function set_question_form_input_answer($qstn_id)
235
+	{
236
+		// check for answer in $_REQUEST in case we are reprocessing a form after an error
237
+		if (
238
+			isset($this->_QST_meta['EVT_ID'])
239
+			&& isset($this->_QST_meta['att_nmbr'])
240
+			&& isset($this->_QST_meta['date'])
241
+			&& isset($this->_QST_meta['time'])
242
+			&& isset($this->_QST_meta['price_id'])
243
+		) {
244
+			if (
245
+				isset($_REQUEST['qstn'][ $this->_QST_meta['EVT_ID'] ][ $this->_QST_meta['att_nmbr'] ][ $this->_QST_meta['date'] ][ $this->_QST_meta['time'] ][ $this->_QST_meta['price_id'] ][ $qstn_id ])
246
+			) {
247
+				$answer = $_REQUEST['qstn'][ $this->_QST_meta['EVT_ID'] ][ $this->_QST_meta['att_nmbr'] ][ $this->_QST_meta['date'] ][ $this->_QST_meta['time'] ][ $this->_QST_meta['price_id'] ][ $qstn_id ];
248
+				$this->_ANS->set('ANS_value', $answer);
249
+			}
250
+		}
251
+	}
252
+
253
+
254
+	/**
255
+	 *        generate_question_form_inputs_for_object
256
+	 *
257
+	 * @access    protected
258
+	 * @param bool|object $object $object
259
+	 * @param    array    $input_types
260
+	 * @return        array
261
+	 */
262
+	public static function generate_question_form_inputs_for_object($object = false, $input_types = array())
263
+	{
264
+		if (! is_object($object)) {
265
+			return false;
266
+		}
267
+		$inputs = array();
268
+		$fields = $object->get_model()->field_settings(false);
269
+		// $pk = $object->ID(); <<< NO!
270
+		// EEH_Debug_Tools::printr( $object, get_class( $object ) . '<br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
271
+		// EEH_Debug_Tools::printr( $fields, '$fields  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
272
+		// EEH_Debug_Tools::printr( $input_types, '$input_types  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
273
+		foreach ($fields as $field_ID => $field) {
274
+			if ($field instanceof EE_Model_Field_Base) {
275
+				// echo '<h4>$field_ID : ' . $field_ID . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
276
+				// EEH_Debug_Tools::printr( $field, '$field  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
277
+				if (isset($input_types[ $field_ID ])) {
278
+					// get saved value for field
279
+					$value = $object->get($field_ID);
280
+					// echo '<h4>$value : ' . $value . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
281
+					// if no saved value, then use default
282
+					$value = $value !== null ? $value : $field->get_default_value();
283
+					// if ( $field_ID == 'CNT_active' )
284
+					// echo '<h4>$value : ' . $value . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
285
+					// determine question type
286
+					$type = isset($input_types[ $field_ID ]) ? $input_types[ $field_ID ]['type'] : 'TEXT';
287
+					// input name
288
+					$input_name = isset($input_types[ $field_ID ]) && isset($input_types[ $field_ID ]['input_name'])
289
+						? $input_types[ $field_ID ]['input_name'] . '[' . $field_ID . ']'
290
+						: $field_ID;
291
+					// css class for input
292
+					$class = isset($input_types[ $field_ID ]['class']) && ! empty($input_types[ $field_ID ]['class'])
293
+						? ' ' . $input_types[ $field_ID ]['class']
294
+						: '';
295
+					// whether to apply htmlentities to answer
296
+					$htmlentities = isset($input_types[ $field_ID ]['htmlentities'])
297
+						? $input_types[ $field_ID ]['htmlentities']
298
+						: true;
299
+					// whether to apply htmlentities to answer
300
+					$label_b4 = isset($input_types[ $field_ID ]['label_b4'])
301
+						? $input_types[ $field_ID ]['label_b4']
302
+						: false;
303
+					// whether to apply htmlentities to answer
304
+					$use_desc_4_label = isset($input_types[ $field_ID ]['use_desc_4_label'])
305
+						? $input_types[ $field_ID ]['use_desc_4_label']
306
+						: false;
307
+					// whether input is disabled
308
+					$disabled = isset($input_types[ $field_ID ]['disabled'])
309
+						? $input_types[ $field_ID ]['disabled']
310
+						: false;
311
+
312
+					// create EE_Question_Form_Input object
313
+					$QFI = new EE_Question_Form_Input(
314
+						EE_Question::new_instance(
315
+							array(
316
+								'QST_ID'           => 0,
317
+								'QST_display_text' => $field->get_nicename(),
318
+								'QST_type'         => $type,
319
+							)
320
+						),
321
+						EE_Answer::new_instance(
322
+							array(
323
+								'ANS_ID'    => 0,
324
+								'QST_ID'    => 0,
325
+								'REG_ID'    => 0,
326
+								'ANS_value' => $value,
327
+							)
328
+						),
329
+						array(
330
+							'input_id'         => $field_ID . '-' . $object->ID(),
331
+							'input_name'       => $input_name,
332
+							'input_class'      => $field_ID . $class,
333
+							'input_prefix'     => '',
334
+							'append_qstn_id'   => false,
335
+							'htmlentities'     => $htmlentities,
336
+							'label_b4'         => $label_b4,
337
+							'use_desc_4_label' => $use_desc_4_label,
338
+						)
339
+					);
340
+					// does question type have options ?
341
+					if (
342
+						in_array($type, array('DROPDOWN', 'RADIO_BTN', 'CHECKBOX'))
343
+						&& isset($input_types[ $field_ID ])
344
+						&& isset($input_types[ $field_ID ]['options'])
345
+					) {
346
+						foreach ($input_types[ $field_ID ]['options'] as $option) {
347
+							$option = stripslashes_deep($option);
348
+							$option_id = ! empty($option['id']) ? $option['id'] : 0;
349
+							$QSO = EE_Question_Option::new_instance(
350
+								array(
351
+									'QSO_value'   => (string) $option_id,
352
+									'QSO_desc'    => $option['text'],
353
+									'QSO_deleted' => false,
354
+								)
355
+							);
356
+							// all QST (and ANS) properties can be accessed indirectly thru QFI
357
+							$QFI->add_temp_option($QSO);
358
+						}
359
+					}
360
+					// we don't want ppl manually changing primary keys cuz that would just lead to total craziness man
361
+					if ($disabled || $field_ID == $object->get_model()->primary_key_name()) {
362
+						$QFI->set('QST_disabled', true);
363
+					}
364
+					// EEH_Debug_Tools::printr( $QFI, '$QFI  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
365
+					$inputs[ $field_ID ] = $QFI;
366
+					// if ( $field_ID == 'CNT_active' ) {
367
+					// EEH_Debug_Tools::printr( $QFI, '$QFI  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
368
+					// }
369
+				}
370
+			}
371
+		}
372
+		return $inputs;
373
+	}
374
+
375
+
376
+	/**
377
+	 *    add_temp_option
378
+	 *
379
+	 * @access public
380
+	 * @param \EE_Question_Option $QSO EE_Question_Option
381
+	 * @return boolean
382
+	 */
383
+	public function add_temp_option(EE_Question_Option $QSO)
384
+	{
385
+		$this->_QST->add_temp_option($QSO);
386
+	}
387
+
388
+
389
+	/**
390
+	 * set property values for question form input
391
+	 *
392
+	 * @access public
393
+	 * @param    string $property
394
+	 * @param    mixed  $value
395
+	 * @return mixed
396
+	 */
397
+	public function set($property = null, $value = null)
398
+	{
399
+		if (! empty($property)) {
400
+			if (EEM_Question::instance()->has_field($property)) {
401
+				$this->_QST->set($property, $value);
402
+			} elseif (EEM_Answer::instance()->has_field($property)) {
403
+				$this->_ANS->set($property, $value);
404
+			} elseif ($this->_question_form_input_property_exists(__CLASS__, $property)) {
405
+				// echo "<hr>$property is a prop of QFI";
406
+				$this->{$property} = $value;
407
+				return true;
408
+			}
409
+		}
410
+		return null;
411
+	}
412
+
413
+
414
+	/**
415
+	 *    _question_form_input_property_exists
416
+	 *
417
+	 * @access public
418
+	 * @param boolean      $notDeletedOptionsOnly            1
419
+	 *                                                       whether to return ALL options, or only the ones which have
420
+	 *                                                       not yet been deleted
421
+	 * @param string|array $selected_value_to_always_include , when retrieving options to an ANSWERED question,
422
+	 *                                                       we want to usually only show non-deleted options AND the
423
+	 *                                                       value that was selected for the answer, whether it was
424
+	 *                                                       trashed or not.
425
+	 * @return EE_Question_Option
426
+	 */
427
+	public function options($notDeletedOptionsOnly = true, $selected_value_to_always_include = null)
428
+	{
429
+		$temp_options = $this->_QST->temp_options();
430
+		return ! empty($temp_options)
431
+			? $temp_options
432
+			: $this->_QST->options(
433
+				$notDeletedOptionsOnly,
434
+				$selected_value_to_always_include
435
+			);
436
+	}
437
+
438
+
439
+	/**
440
+	 *    get_meta
441
+	 *
442
+	 * @access public
443
+	 * @param mixed $key
444
+	 * @return mixed
445
+	 */
446
+	public function get_meta($key = false)
447
+	{
448
+		return $key && isset($this->_QST_meta[ $key ]) ? $this->_QST_meta[ $key ] : false;
449
+	}
450 450
 }
Please login to merge, or discard this patch.
Spacing   +32 added lines, -32 removed lines patch added patch discarded remove patch
@@ -141,13 +141,13 @@  discard block
 block discarded – undo
141 141
      */
142 142
     private function _set_input_name($qstn_id)
143 143
     {
144
-        if (! empty($qstn_id)) {
144
+        if ( ! empty($qstn_id)) {
145 145
             $ANS_ID = $this->get('ANS_ID');
146
-            $qstn_id = ! empty($ANS_ID) ? '[' . $qstn_id . '][' . $ANS_ID . ']' : '[' . $qstn_id . ']';
146
+            $qstn_id = ! empty($ANS_ID) ? '['.$qstn_id.']['.$ANS_ID.']' : '['.$qstn_id.']';
147 147
         }
148 148
         $this->QST_input_name = $this->_QST_meta['append_qstn_id'] && ! empty($qstn_id)
149
-            ? $this->_QST_meta['input_prefix'] . $this->_QST_meta['input_name'] . $qstn_id
150
-            : $this->_QST_meta['input_prefix'] . $this->_QST_meta['input_name'];
149
+            ? $this->_QST_meta['input_prefix'].$this->_QST_meta['input_name'].$qstn_id
150
+            : $this->_QST_meta['input_prefix'].$this->_QST_meta['input_name'];
151 151
     }
152 152
 
153 153
 
@@ -160,7 +160,7 @@  discard block
 block discarded – undo
160 160
      */
161 161
     public function get($property = null)
162 162
     {
163
-        if (! empty($property)) {
163
+        if ( ! empty($property)) {
164 164
             if (EEM_Question::instance()->has_field($property)) {
165 165
                 return $this->_QST->get($property);
166 166
             } elseif (EEM_Answer::instance()->has_field($property)) {
@@ -185,7 +185,7 @@  discard block
 block discarded – undo
185 185
     {
186 186
         // first try regular property exists method which works as expected in PHP 5.3+
187 187
         $prop = EEH_Class_Tools::has_property($classname, $property);
188
-        if (! $prop) {
188
+        if ( ! $prop) {
189 189
             // use reflection for < PHP 5.3 as a double check when property is not found, possible due to access restriction
190 190
             $reflector = new ReflectionClass($classname);
191 191
             $prop = $reflector->hasProperty($property);
@@ -207,7 +207,7 @@  discard block
 block discarded – undo
207 207
             ? $this->_QST_meta['input_id']
208 208
             : sanitize_key(strip_tags($this->_QST->get('QST_display_text')));
209 209
         $this->QST_input_id = $this->_QST_meta['append_qstn_id'] && ! empty($qstn_id)
210
-            ? $input_id . '-' . $qstn_id
210
+            ? $input_id.'-'.$qstn_id
211 211
             : $input_id;
212 212
     }
213 213
 
@@ -242,9 +242,9 @@  discard block
 block discarded – undo
242 242
             && isset($this->_QST_meta['price_id'])
243 243
         ) {
244 244
             if (
245
-                isset($_REQUEST['qstn'][ $this->_QST_meta['EVT_ID'] ][ $this->_QST_meta['att_nmbr'] ][ $this->_QST_meta['date'] ][ $this->_QST_meta['time'] ][ $this->_QST_meta['price_id'] ][ $qstn_id ])
245
+                isset($_REQUEST['qstn'][$this->_QST_meta['EVT_ID']][$this->_QST_meta['att_nmbr']][$this->_QST_meta['date']][$this->_QST_meta['time']][$this->_QST_meta['price_id']][$qstn_id])
246 246
             ) {
247
-                $answer = $_REQUEST['qstn'][ $this->_QST_meta['EVT_ID'] ][ $this->_QST_meta['att_nmbr'] ][ $this->_QST_meta['date'] ][ $this->_QST_meta['time'] ][ $this->_QST_meta['price_id'] ][ $qstn_id ];
247
+                $answer = $_REQUEST['qstn'][$this->_QST_meta['EVT_ID']][$this->_QST_meta['att_nmbr']][$this->_QST_meta['date']][$this->_QST_meta['time']][$this->_QST_meta['price_id']][$qstn_id];
248 248
                 $this->_ANS->set('ANS_value', $answer);
249 249
             }
250 250
         }
@@ -261,7 +261,7 @@  discard block
 block discarded – undo
261 261
      */
262 262
     public static function generate_question_form_inputs_for_object($object = false, $input_types = array())
263 263
     {
264
-        if (! is_object($object)) {
264
+        if ( ! is_object($object)) {
265 265
             return false;
266 266
         }
267 267
         $inputs = array();
@@ -274,7 +274,7 @@  discard block
 block discarded – undo
274 274
             if ($field instanceof EE_Model_Field_Base) {
275 275
                 // echo '<h4>$field_ID : ' . $field_ID . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
276 276
                 // EEH_Debug_Tools::printr( $field, '$field  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
277
-                if (isset($input_types[ $field_ID ])) {
277
+                if (isset($input_types[$field_ID])) {
278 278
                     // get saved value for field
279 279
                     $value = $object->get($field_ID);
280 280
                     // echo '<h4>$value : ' . $value . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
@@ -283,30 +283,30 @@  discard block
 block discarded – undo
283 283
                     // if ( $field_ID == 'CNT_active' )
284 284
                     // echo '<h4>$value : ' . $value . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
285 285
                     // determine question type
286
-                    $type = isset($input_types[ $field_ID ]) ? $input_types[ $field_ID ]['type'] : 'TEXT';
286
+                    $type = isset($input_types[$field_ID]) ? $input_types[$field_ID]['type'] : 'TEXT';
287 287
                     // input name
288
-                    $input_name = isset($input_types[ $field_ID ]) && isset($input_types[ $field_ID ]['input_name'])
289
-                        ? $input_types[ $field_ID ]['input_name'] . '[' . $field_ID . ']'
288
+                    $input_name = isset($input_types[$field_ID]) && isset($input_types[$field_ID]['input_name'])
289
+                        ? $input_types[$field_ID]['input_name'].'['.$field_ID.']'
290 290
                         : $field_ID;
291 291
                     // css class for input
292
-                    $class = isset($input_types[ $field_ID ]['class']) && ! empty($input_types[ $field_ID ]['class'])
293
-                        ? ' ' . $input_types[ $field_ID ]['class']
292
+                    $class = isset($input_types[$field_ID]['class']) && ! empty($input_types[$field_ID]['class'])
293
+                        ? ' '.$input_types[$field_ID]['class']
294 294
                         : '';
295 295
                     // whether to apply htmlentities to answer
296
-                    $htmlentities = isset($input_types[ $field_ID ]['htmlentities'])
297
-                        ? $input_types[ $field_ID ]['htmlentities']
296
+                    $htmlentities = isset($input_types[$field_ID]['htmlentities'])
297
+                        ? $input_types[$field_ID]['htmlentities']
298 298
                         : true;
299 299
                     // whether to apply htmlentities to answer
300
-                    $label_b4 = isset($input_types[ $field_ID ]['label_b4'])
301
-                        ? $input_types[ $field_ID ]['label_b4']
300
+                    $label_b4 = isset($input_types[$field_ID]['label_b4'])
301
+                        ? $input_types[$field_ID]['label_b4']
302 302
                         : false;
303 303
                     // whether to apply htmlentities to answer
304
-                    $use_desc_4_label = isset($input_types[ $field_ID ]['use_desc_4_label'])
305
-                        ? $input_types[ $field_ID ]['use_desc_4_label']
304
+                    $use_desc_4_label = isset($input_types[$field_ID]['use_desc_4_label'])
305
+                        ? $input_types[$field_ID]['use_desc_4_label']
306 306
                         : false;
307 307
                     // whether input is disabled
308
-                    $disabled = isset($input_types[ $field_ID ]['disabled'])
309
-                        ? $input_types[ $field_ID ]['disabled']
308
+                    $disabled = isset($input_types[$field_ID]['disabled'])
309
+                        ? $input_types[$field_ID]['disabled']
310 310
                         : false;
311 311
 
312 312
                     // create EE_Question_Form_Input object
@@ -327,9 +327,9 @@  discard block
 block discarded – undo
327 327
                             )
328 328
                         ),
329 329
                         array(
330
-                            'input_id'         => $field_ID . '-' . $object->ID(),
330
+                            'input_id'         => $field_ID.'-'.$object->ID(),
331 331
                             'input_name'       => $input_name,
332
-                            'input_class'      => $field_ID . $class,
332
+                            'input_class'      => $field_ID.$class,
333 333
                             'input_prefix'     => '',
334 334
                             'append_qstn_id'   => false,
335 335
                             'htmlentities'     => $htmlentities,
@@ -340,10 +340,10 @@  discard block
 block discarded – undo
340 340
                     // does question type have options ?
341 341
                     if (
342 342
                         in_array($type, array('DROPDOWN', 'RADIO_BTN', 'CHECKBOX'))
343
-                        && isset($input_types[ $field_ID ])
344
-                        && isset($input_types[ $field_ID ]['options'])
343
+                        && isset($input_types[$field_ID])
344
+                        && isset($input_types[$field_ID]['options'])
345 345
                     ) {
346
-                        foreach ($input_types[ $field_ID ]['options'] as $option) {
346
+                        foreach ($input_types[$field_ID]['options'] as $option) {
347 347
                             $option = stripslashes_deep($option);
348 348
                             $option_id = ! empty($option['id']) ? $option['id'] : 0;
349 349
                             $QSO = EE_Question_Option::new_instance(
@@ -362,7 +362,7 @@  discard block
 block discarded – undo
362 362
                         $QFI->set('QST_disabled', true);
363 363
                     }
364 364
                     // EEH_Debug_Tools::printr( $QFI, '$QFI  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
365
-                    $inputs[ $field_ID ] = $QFI;
365
+                    $inputs[$field_ID] = $QFI;
366 366
                     // if ( $field_ID == 'CNT_active' ) {
367 367
                     // EEH_Debug_Tools::printr( $QFI, '$QFI  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
368 368
                     // }
@@ -396,7 +396,7 @@  discard block
 block discarded – undo
396 396
      */
397 397
     public function set($property = null, $value = null)
398 398
     {
399
-        if (! empty($property)) {
399
+        if ( ! empty($property)) {
400 400
             if (EEM_Question::instance()->has_field($property)) {
401 401
                 $this->_QST->set($property, $value);
402 402
             } elseif (EEM_Answer::instance()->has_field($property)) {
@@ -445,6 +445,6 @@  discard block
 block discarded – undo
445 445
      */
446 446
     public function get_meta($key = false)
447 447
     {
448
-        return $key && isset($this->_QST_meta[ $key ]) ? $this->_QST_meta[ $key ] : false;
448
+        return $key && isset($this->_QST_meta[$key]) ? $this->_QST_meta[$key] : false;
449 449
     }
450 450
 }
Please login to merge, or discard this patch.
core/db_classes/EE_Question_Option.class.php 2 patches
Doc Comments   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -39,7 +39,7 @@  discard block
 block discarded – undo
39 39
      * @param array  $props_n_values  incoming values from the database
40 40
      * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
41 41
      *                                the website will be used.
42
-     * @return EE_Attendee
42
+     * @return EE_Question_Option
43 43
      */
44 44
     public static function new_instance_from_db($props_n_values = array(), $timezone = null)
45 45
     {
@@ -51,7 +51,7 @@  discard block
 block discarded – undo
51 51
      * Sets the option's key value
52 52
      *
53 53
      * @param string $value
54
-     * @return bool success
54
+     * @return boolean|null success
55 55
      */
56 56
     public function set_value($value)
57 57
     {
@@ -63,7 +63,7 @@  discard block
 block discarded – undo
63 63
      * Sets the option's Display Text
64 64
      *
65 65
      * @param string $text
66
-     * @return bool success
66
+     * @return boolean|null success
67 67
      */
68 68
     public function set_desc($text)
69 69
     {
@@ -76,7 +76,7 @@  discard block
 block discarded – undo
76 76
      *
77 77
      * @access public
78 78
      * @param integer $order
79
-     * @return bool      $success
79
+     * @return boolean|null      $success
80 80
      */
81 81
     public function set_order($order)
82 82
     {
@@ -88,7 +88,7 @@  discard block
 block discarded – undo
88 88
      * Sets the ID of the related question
89 89
      *
90 90
      * @param int $question_ID
91
-     * @return bool success
91
+     * @return boolean|null success
92 92
      */
93 93
     public function set_question_ID($question_ID)
94 94
     {
@@ -100,7 +100,7 @@  discard block
 block discarded – undo
100 100
      * Sets the option's opt_group
101 101
      *
102 102
      * @param string $text
103
-     * @return bool success
103
+     * @return string success
104 104
      */
105 105
     public function set_opt_group($text)
106 106
     {
@@ -220,7 +220,7 @@  discard block
 block discarded – undo
220 220
      * Sets QSO_system
221 221
      *
222 222
      * @param string $QSO_system
223
-     * @return bool
223
+     * @return boolean|null
224 224
      */
225 225
     public function set_system($QSO_system)
226 226
     {
Please login to merge, or discard this patch.
Indentation   +218 added lines, -218 removed lines patch added patch discarded remove patch
@@ -10,222 +10,222 @@
 block discarded – undo
10 10
 class EE_Question_Option extends EE_Soft_Delete_Base_Class implements EEI_Duplicatable
11 11
 {
12 12
 
13
-    /**
14
-     * Question Option Opt Group Name
15
-     *
16
-     * @access protected
17
-     * @var string
18
-     */
19
-    protected $_QSO_opt_group = null;
20
-
21
-
22
-    /**
23
-     *
24
-     * @param array  $props_n_values          incoming values
25
-     * @param string $timezone                incoming timezone (if not set the timezone set for the website will be
26
-     *                                        used.)
27
-     * @param array  $date_formats            incoming date_formats in an array where the first value is the
28
-     *                                        date_format and the second value is the time format
29
-     * @return EE_Attendee
30
-     */
31
-    public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array())
32
-    {
33
-        $has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats);
34
-        return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats);
35
-    }
36
-
37
-
38
-    /**
39
-     * @param array  $props_n_values  incoming values from the database
40
-     * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
41
-     *                                the website will be used.
42
-     * @return EE_Attendee
43
-     */
44
-    public static function new_instance_from_db($props_n_values = array(), $timezone = null)
45
-    {
46
-        return new self($props_n_values, true, $timezone);
47
-    }
48
-
49
-
50
-    /**
51
-     * Sets the option's key value
52
-     *
53
-     * @param string $value
54
-     * @return bool success
55
-     */
56
-    public function set_value($value)
57
-    {
58
-        $this->set('QSO_value', $value);
59
-    }
60
-
61
-
62
-    /**
63
-     * Sets the option's Display Text
64
-     *
65
-     * @param string $text
66
-     * @return bool success
67
-     */
68
-    public function set_desc($text)
69
-    {
70
-        $this->set('QSO_desc', $text);
71
-    }
72
-
73
-
74
-    /**
75
-     * Sets the order for this option
76
-     *
77
-     * @access public
78
-     * @param integer $order
79
-     * @return bool      $success
80
-     */
81
-    public function set_order($order)
82
-    {
83
-        $this->set('QSO_order', $order);
84
-    }
85
-
86
-
87
-    /**
88
-     * Sets the ID of the related question
89
-     *
90
-     * @param int $question_ID
91
-     * @return bool success
92
-     */
93
-    public function set_question_ID($question_ID)
94
-    {
95
-        $this->set('QST_ID', $question_ID);
96
-    }
97
-
98
-
99
-    /**
100
-     * Sets the option's opt_group
101
-     *
102
-     * @param string $text
103
-     * @return bool success
104
-     */
105
-    public function set_opt_group($text)
106
-    {
107
-        return $this->_QSO_opt_group = $text;
108
-    }
109
-
110
-
111
-    /**
112
-     * Gets the option's key value
113
-     *
114
-     * @return string
115
-     */
116
-    public function value()
117
-    {
118
-        return $this->get('QSO_value');
119
-    }
120
-
121
-
122
-    /**
123
-     * Gets the option's display text
124
-     *
125
-     * @return string
126
-     */
127
-    public function desc()
128
-    {
129
-        return $this->get('QSO_desc');
130
-    }
131
-
132
-
133
-    /**
134
-     * Returns whether this option has been deleted or not
135
-     *
136
-     * @return boolean
137
-     */
138
-    public function deleted()
139
-    {
140
-        return $this->get('QSO_deleted');
141
-    }
142
-
143
-
144
-    /**
145
-     * Returns the order or the Question Option
146
-     *
147
-     * @access public
148
-     * @return integer
149
-     */
150
-    public function order()
151
-    {
152
-        return $this->get('QSO_option');
153
-    }
154
-
155
-
156
-    /**
157
-     * Gets the related question's ID
158
-     *
159
-     * @return int
160
-     */
161
-    public function question_ID()
162
-    {
163
-        return $this->get('QST_ID');
164
-    }
165
-
166
-
167
-    /**
168
-     * Returns the question related to this question option
169
-     *
170
-     * @return EE_Question
171
-     */
172
-    public function question()
173
-    {
174
-        return $this->get_first_related('Question');
175
-    }
176
-
177
-
178
-    /**
179
-     * Gets the option's opt_group
180
-     *
181
-     * @return string
182
-     */
183
-    public function opt_group()
184
-    {
185
-        return $this->_QSO_opt_group;
186
-    }
187
-
188
-    /**
189
-     * Duplicates this question option. By default the new question option will be for the same question,
190
-     * but that can be overriden by setting the 'QST_ID' option
191
-     *
192
-     * @param array $options {
193
-     * @type int    $QST_ID  the QST_ID attribute of this question option, otherwise it will be for the same question
194
-     *                       as the original
195
-     */
196
-    public function duplicate($options = array())
197
-    {
198
-        $new_question_option = clone $this;
199
-        $new_question_option->set('QSO_ID', null);
200
-        if (
201
-            array_key_exists(
202
-                'QST_ID',
203
-                $options
204
-            )
205
-        ) {// use array_key_exists instead of isset because NULL might be a valid value
206
-            $new_question_option->set_question_ID($options['QST_ID']);
207
-        }
208
-        $new_question_option->save();
209
-    }
210
-
211
-    /**
212
-     * Gets the QSO_system value
213
-     *
214
-     * @return string|null
215
-     */
216
-    public function system()
217
-    {
218
-        return $this->get('QSO_system');
219
-    }
220
-
221
-    /**
222
-     * Sets QSO_system
223
-     *
224
-     * @param string $QSO_system
225
-     * @return bool
226
-     */
227
-    public function set_system($QSO_system)
228
-    {
229
-        return $this->set('QSO_system', $QSO_system);
230
-    }
13
+	/**
14
+	 * Question Option Opt Group Name
15
+	 *
16
+	 * @access protected
17
+	 * @var string
18
+	 */
19
+	protected $_QSO_opt_group = null;
20
+
21
+
22
+	/**
23
+	 *
24
+	 * @param array  $props_n_values          incoming values
25
+	 * @param string $timezone                incoming timezone (if not set the timezone set for the website will be
26
+	 *                                        used.)
27
+	 * @param array  $date_formats            incoming date_formats in an array where the first value is the
28
+	 *                                        date_format and the second value is the time format
29
+	 * @return EE_Attendee
30
+	 */
31
+	public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array())
32
+	{
33
+		$has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats);
34
+		return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats);
35
+	}
36
+
37
+
38
+	/**
39
+	 * @param array  $props_n_values  incoming values from the database
40
+	 * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
41
+	 *                                the website will be used.
42
+	 * @return EE_Attendee
43
+	 */
44
+	public static function new_instance_from_db($props_n_values = array(), $timezone = null)
45
+	{
46
+		return new self($props_n_values, true, $timezone);
47
+	}
48
+
49
+
50
+	/**
51
+	 * Sets the option's key value
52
+	 *
53
+	 * @param string $value
54
+	 * @return bool success
55
+	 */
56
+	public function set_value($value)
57
+	{
58
+		$this->set('QSO_value', $value);
59
+	}
60
+
61
+
62
+	/**
63
+	 * Sets the option's Display Text
64
+	 *
65
+	 * @param string $text
66
+	 * @return bool success
67
+	 */
68
+	public function set_desc($text)
69
+	{
70
+		$this->set('QSO_desc', $text);
71
+	}
72
+
73
+
74
+	/**
75
+	 * Sets the order for this option
76
+	 *
77
+	 * @access public
78
+	 * @param integer $order
79
+	 * @return bool      $success
80
+	 */
81
+	public function set_order($order)
82
+	{
83
+		$this->set('QSO_order', $order);
84
+	}
85
+
86
+
87
+	/**
88
+	 * Sets the ID of the related question
89
+	 *
90
+	 * @param int $question_ID
91
+	 * @return bool success
92
+	 */
93
+	public function set_question_ID($question_ID)
94
+	{
95
+		$this->set('QST_ID', $question_ID);
96
+	}
97
+
98
+
99
+	/**
100
+	 * Sets the option's opt_group
101
+	 *
102
+	 * @param string $text
103
+	 * @return bool success
104
+	 */
105
+	public function set_opt_group($text)
106
+	{
107
+		return $this->_QSO_opt_group = $text;
108
+	}
109
+
110
+
111
+	/**
112
+	 * Gets the option's key value
113
+	 *
114
+	 * @return string
115
+	 */
116
+	public function value()
117
+	{
118
+		return $this->get('QSO_value');
119
+	}
120
+
121
+
122
+	/**
123
+	 * Gets the option's display text
124
+	 *
125
+	 * @return string
126
+	 */
127
+	public function desc()
128
+	{
129
+		return $this->get('QSO_desc');
130
+	}
131
+
132
+
133
+	/**
134
+	 * Returns whether this option has been deleted or not
135
+	 *
136
+	 * @return boolean
137
+	 */
138
+	public function deleted()
139
+	{
140
+		return $this->get('QSO_deleted');
141
+	}
142
+
143
+
144
+	/**
145
+	 * Returns the order or the Question Option
146
+	 *
147
+	 * @access public
148
+	 * @return integer
149
+	 */
150
+	public function order()
151
+	{
152
+		return $this->get('QSO_option');
153
+	}
154
+
155
+
156
+	/**
157
+	 * Gets the related question's ID
158
+	 *
159
+	 * @return int
160
+	 */
161
+	public function question_ID()
162
+	{
163
+		return $this->get('QST_ID');
164
+	}
165
+
166
+
167
+	/**
168
+	 * Returns the question related to this question option
169
+	 *
170
+	 * @return EE_Question
171
+	 */
172
+	public function question()
173
+	{
174
+		return $this->get_first_related('Question');
175
+	}
176
+
177
+
178
+	/**
179
+	 * Gets the option's opt_group
180
+	 *
181
+	 * @return string
182
+	 */
183
+	public function opt_group()
184
+	{
185
+		return $this->_QSO_opt_group;
186
+	}
187
+
188
+	/**
189
+	 * Duplicates this question option. By default the new question option will be for the same question,
190
+	 * but that can be overriden by setting the 'QST_ID' option
191
+	 *
192
+	 * @param array $options {
193
+	 * @type int    $QST_ID  the QST_ID attribute of this question option, otherwise it will be for the same question
194
+	 *                       as the original
195
+	 */
196
+	public function duplicate($options = array())
197
+	{
198
+		$new_question_option = clone $this;
199
+		$new_question_option->set('QSO_ID', null);
200
+		if (
201
+			array_key_exists(
202
+				'QST_ID',
203
+				$options
204
+			)
205
+		) {// use array_key_exists instead of isset because NULL might be a valid value
206
+			$new_question_option->set_question_ID($options['QST_ID']);
207
+		}
208
+		$new_question_option->save();
209
+	}
210
+
211
+	/**
212
+	 * Gets the QSO_system value
213
+	 *
214
+	 * @return string|null
215
+	 */
216
+	public function system()
217
+	{
218
+		return $this->get('QSO_system');
219
+	}
220
+
221
+	/**
222
+	 * Sets QSO_system
223
+	 *
224
+	 * @param string $QSO_system
225
+	 * @return bool
226
+	 */
227
+	public function set_system($QSO_system)
228
+	{
229
+		return $this->set('QSO_system', $QSO_system);
230
+	}
231 231
 }
Please login to merge, or discard this patch.
core/db_classes/EE_Status.class.php 3 patches
Doc Comments   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -52,7 +52,7 @@  discard block
 block discarded – undo
52 52
      * Sets code
53 53
      *
54 54
      * @param string $code
55
-     * @return boolean
55
+     * @return boolean|null
56 56
      */
57 57
     public function set_code($code)
58 58
     {
@@ -75,7 +75,7 @@  discard block
 block discarded – undo
75 75
      * Sets desc
76 76
      *
77 77
      * @param string $desc
78
-     * @return boolean
78
+     * @return boolean|null
79 79
      */
80 80
     public function set_desc($desc)
81 81
     {
@@ -98,7 +98,7 @@  discard block
 block discarded – undo
98 98
      * Sets type
99 99
      *
100 100
      * @param string $type
101
-     * @return boolean
101
+     * @return boolean|null
102 102
      */
103 103
     public function set_type($type)
104 104
     {
@@ -121,7 +121,7 @@  discard block
 block discarded – undo
121 121
      * Sets can_edit
122 122
      *
123 123
      * @param boolean $can_edit
124
-     * @return boolean
124
+     * @return boolean|null
125 125
      */
126 126
     public function set_can_edit($can_edit)
127 127
     {
@@ -144,7 +144,7 @@  discard block
 block discarded – undo
144 144
      * Sets open
145 145
      *
146 146
      * @param boolean $open
147
-     * @return boolean
147
+     * @return boolean|null
148 148
      */
149 149
     public function set_open($open)
150 150
     {
Please login to merge, or discard this patch.
Indentation   +138 added lines, -138 removed lines patch added patch discarded remove patch
@@ -12,142 +12,142 @@
 block discarded – undo
12 12
 class EE_Status extends EE_Base_Class
13 13
 {
14 14
 
15
-    /**
16
-     * @param array $props_n_values
17
-     * @return EE_Status
18
-     */
19
-    public static function new_instance($props_n_values = array())
20
-    {
21
-        $has_object = parent::_check_for_object($props_n_values, __CLASS__);
22
-        return $has_object ? $has_object : new self($props_n_values);
23
-    }
24
-
25
-
26
-    /**
27
-     * @param array $props_n_values
28
-     * @return EE_Status
29
-     */
30
-    public static function new_instance_from_db($props_n_values = array())
31
-    {
32
-        return new self($props_n_values, true);
33
-    }
34
-
35
-
36
-    /**
37
-     * Gets code
38
-     *
39
-     * @param bool   $plural
40
-     * @param string $schema
41
-     * @return string
42
-     */
43
-    public function code($plural = false, $schema = 'upper')
44
-    {
45
-        $id = $this->get('STS_ID');
46
-        $code = EEM_Status::instance()->localized_status(array($id => $this->get('STS_code')), $plural, $schema);
47
-        return $code[ $id ];
48
-    }
49
-
50
-
51
-    /**
52
-     * Sets code
53
-     *
54
-     * @param string $code
55
-     * @return boolean
56
-     */
57
-    public function set_code($code)
58
-    {
59
-        $this->set('STS_code', $code);
60
-    }
61
-
62
-
63
-    /**
64
-     * Gets desc
65
-     *
66
-     * @return string
67
-     */
68
-    public function desc()
69
-    {
70
-        return $this->get('STS_desc');
71
-    }
72
-
73
-
74
-    /**
75
-     * Sets desc
76
-     *
77
-     * @param string $desc
78
-     * @return boolean
79
-     */
80
-    public function set_desc($desc)
81
-    {
82
-        $this->set('STS_desc', $desc);
83
-    }
84
-
85
-
86
-    /**
87
-     * Gets type
88
-     *
89
-     * @return string
90
-     */
91
-    public function type()
92
-    {
93
-        return $this->get('STS_type');
94
-    }
95
-
96
-
97
-    /**
98
-     * Sets type
99
-     *
100
-     * @param string $type
101
-     * @return boolean
102
-     */
103
-    public function set_type($type)
104
-    {
105
-        $this->set('STS_type', $type);
106
-    }
107
-
108
-
109
-    /**
110
-     * Gets can_edit
111
-     *
112
-     * @return boolean
113
-     */
114
-    public function can_edit()
115
-    {
116
-        return $this->get('STS_can_edit');
117
-    }
118
-
119
-
120
-    /**
121
-     * Sets can_edit
122
-     *
123
-     * @param boolean $can_edit
124
-     * @return boolean
125
-     */
126
-    public function set_can_edit($can_edit)
127
-    {
128
-        $this->set('STS_can_edit', $can_edit);
129
-    }
130
-
131
-
132
-    /**
133
-     * Gets open
134
-     *
135
-     * @return boolean
136
-     */
137
-    public function open()
138
-    {
139
-        return $this->get('STS_open');
140
-    }
141
-
142
-
143
-    /**
144
-     * Sets open
145
-     *
146
-     * @param boolean $open
147
-     * @return boolean
148
-     */
149
-    public function set_open($open)
150
-    {
151
-        $this->set('STS_open', $open);
152
-    }
15
+	/**
16
+	 * @param array $props_n_values
17
+	 * @return EE_Status
18
+	 */
19
+	public static function new_instance($props_n_values = array())
20
+	{
21
+		$has_object = parent::_check_for_object($props_n_values, __CLASS__);
22
+		return $has_object ? $has_object : new self($props_n_values);
23
+	}
24
+
25
+
26
+	/**
27
+	 * @param array $props_n_values
28
+	 * @return EE_Status
29
+	 */
30
+	public static function new_instance_from_db($props_n_values = array())
31
+	{
32
+		return new self($props_n_values, true);
33
+	}
34
+
35
+
36
+	/**
37
+	 * Gets code
38
+	 *
39
+	 * @param bool   $plural
40
+	 * @param string $schema
41
+	 * @return string
42
+	 */
43
+	public function code($plural = false, $schema = 'upper')
44
+	{
45
+		$id = $this->get('STS_ID');
46
+		$code = EEM_Status::instance()->localized_status(array($id => $this->get('STS_code')), $plural, $schema);
47
+		return $code[ $id ];
48
+	}
49
+
50
+
51
+	/**
52
+	 * Sets code
53
+	 *
54
+	 * @param string $code
55
+	 * @return boolean
56
+	 */
57
+	public function set_code($code)
58
+	{
59
+		$this->set('STS_code', $code);
60
+	}
61
+
62
+
63
+	/**
64
+	 * Gets desc
65
+	 *
66
+	 * @return string
67
+	 */
68
+	public function desc()
69
+	{
70
+		return $this->get('STS_desc');
71
+	}
72
+
73
+
74
+	/**
75
+	 * Sets desc
76
+	 *
77
+	 * @param string $desc
78
+	 * @return boolean
79
+	 */
80
+	public function set_desc($desc)
81
+	{
82
+		$this->set('STS_desc', $desc);
83
+	}
84
+
85
+
86
+	/**
87
+	 * Gets type
88
+	 *
89
+	 * @return string
90
+	 */
91
+	public function type()
92
+	{
93
+		return $this->get('STS_type');
94
+	}
95
+
96
+
97
+	/**
98
+	 * Sets type
99
+	 *
100
+	 * @param string $type
101
+	 * @return boolean
102
+	 */
103
+	public function set_type($type)
104
+	{
105
+		$this->set('STS_type', $type);
106
+	}
107
+
108
+
109
+	/**
110
+	 * Gets can_edit
111
+	 *
112
+	 * @return boolean
113
+	 */
114
+	public function can_edit()
115
+	{
116
+		return $this->get('STS_can_edit');
117
+	}
118
+
119
+
120
+	/**
121
+	 * Sets can_edit
122
+	 *
123
+	 * @param boolean $can_edit
124
+	 * @return boolean
125
+	 */
126
+	public function set_can_edit($can_edit)
127
+	{
128
+		$this->set('STS_can_edit', $can_edit);
129
+	}
130
+
131
+
132
+	/**
133
+	 * Gets open
134
+	 *
135
+	 * @return boolean
136
+	 */
137
+	public function open()
138
+	{
139
+		return $this->get('STS_open');
140
+	}
141
+
142
+
143
+	/**
144
+	 * Sets open
145
+	 *
146
+	 * @param boolean $open
147
+	 * @return boolean
148
+	 */
149
+	public function set_open($open)
150
+	{
151
+		$this->set('STS_open', $open);
152
+	}
153 153
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -44,7 +44,7 @@
 block discarded – undo
44 44
     {
45 45
         $id = $this->get('STS_ID');
46 46
         $code = EEM_Status::instance()->localized_status(array($id => $this->get('STS_code')), $plural, $schema);
47
-        return $code[ $id ];
47
+        return $code[$id];
48 48
     }
49 49
 
50 50
 
Please login to merge, or discard this patch.
core/db_classes/EE_Term.class.php 3 patches
Doc Comments   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -66,7 +66,7 @@  discard block
 block discarded – undo
66 66
      * Sets name
67 67
      *
68 68
      * @param string $name
69
-     * @return boolean
69
+     * @return boolean|null
70 70
      */
71 71
     public function set_name($name)
72 72
     {
@@ -89,7 +89,7 @@  discard block
 block discarded – undo
89 89
      * Sets slug
90 90
      *
91 91
      * @param string $slug
92
-     * @return boolean
92
+     * @return boolean|null
93 93
      */
94 94
     public function set_slug($slug)
95 95
     {
Please login to merge, or discard this patch.
Indentation   +70 added lines, -70 removed lines patch added patch discarded remove patch
@@ -12,87 +12,87 @@
 block discarded – undo
12 12
 class EE_Term extends EE_Base_Class
13 13
 {
14 14
 
15
-    public $post_type;
15
+	public $post_type;
16 16
 
17
-    /**
18
-     * Sets some dynamic defaults
19
-     *
20
-     * @param array  $fieldValues
21
-     * @param bool   $bydb
22
-     * @param string $timezone
23
-     */
24
-    protected function __construct($fieldValues = array(), $bydb = false, $timezone = '')
25
-    {
26
-        if (! isset($fieldValues['slug'])) {
27
-            $fieldValues['slug'] = $fieldValues['name'];
28
-        }
29
-        parent::__construct($fieldValues, $bydb, $timezone);
30
-    }
17
+	/**
18
+	 * Sets some dynamic defaults
19
+	 *
20
+	 * @param array  $fieldValues
21
+	 * @param bool   $bydb
22
+	 * @param string $timezone
23
+	 */
24
+	protected function __construct($fieldValues = array(), $bydb = false, $timezone = '')
25
+	{
26
+		if (! isset($fieldValues['slug'])) {
27
+			$fieldValues['slug'] = $fieldValues['name'];
28
+		}
29
+		parent::__construct($fieldValues, $bydb, $timezone);
30
+	}
31 31
 
32 32
 
33
-    /**
34
-     * @param array $props_n_values
35
-     * @return EE_Term|mixed
36
-     */
37
-    public static function new_instance($props_n_values = array())
38
-    {
39
-        $has_object = parent::_check_for_object($props_n_values, __CLASS__);
40
-        return $has_object ? $has_object : new self($props_n_values);
41
-    }
33
+	/**
34
+	 * @param array $props_n_values
35
+	 * @return EE_Term|mixed
36
+	 */
37
+	public static function new_instance($props_n_values = array())
38
+	{
39
+		$has_object = parent::_check_for_object($props_n_values, __CLASS__);
40
+		return $has_object ? $has_object : new self($props_n_values);
41
+	}
42 42
 
43 43
 
44
-    /**
45
-     * @param array $props_n_values
46
-     * @return EE_Term
47
-     */
48
-    public static function new_instance_from_db($props_n_values = array())
49
-    {
50
-        return new self($props_n_values, true);
51
-    }
44
+	/**
45
+	 * @param array $props_n_values
46
+	 * @return EE_Term
47
+	 */
48
+	public static function new_instance_from_db($props_n_values = array())
49
+	{
50
+		return new self($props_n_values, true);
51
+	}
52 52
 
53 53
 
54
-    /**
55
-     * Gets name
56
-     *
57
-     * @return string
58
-     */
59
-    public function name()
60
-    {
61
-        return $this->get('name');
62
-    }
54
+	/**
55
+	 * Gets name
56
+	 *
57
+	 * @return string
58
+	 */
59
+	public function name()
60
+	{
61
+		return $this->get('name');
62
+	}
63 63
 
64 64
 
65
-    /**
66
-     * Sets name
67
-     *
68
-     * @param string $name
69
-     * @return boolean
70
-     */
71
-    public function set_name($name)
72
-    {
73
-        $this->set('name', $name);
74
-    }
65
+	/**
66
+	 * Sets name
67
+	 *
68
+	 * @param string $name
69
+	 * @return boolean
70
+	 */
71
+	public function set_name($name)
72
+	{
73
+		$this->set('name', $name);
74
+	}
75 75
 
76 76
 
77
-    /**
78
-     * Gets slug
79
-     *
80
-     * @return string
81
-     */
82
-    public function slug()
83
-    {
84
-        return $this->get('slug');
85
-    }
77
+	/**
78
+	 * Gets slug
79
+	 *
80
+	 * @return string
81
+	 */
82
+	public function slug()
83
+	{
84
+		return $this->get('slug');
85
+	}
86 86
 
87 87
 
88
-    /**
89
-     * Sets slug
90
-     *
91
-     * @param string $slug
92
-     * @return boolean
93
-     */
94
-    public function set_slug($slug)
95
-    {
96
-        $this->set('slug', $slug);
97
-    }
88
+	/**
89
+	 * Sets slug
90
+	 *
91
+	 * @param string $slug
92
+	 * @return boolean
93
+	 */
94
+	public function set_slug($slug)
95
+	{
96
+		$this->set('slug', $slug);
97
+	}
98 98
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -23,7 +23,7 @@
 block discarded – undo
23 23
      */
24 24
     protected function __construct($fieldValues = array(), $bydb = false, $timezone = '')
25 25
     {
26
-        if (! isset($fieldValues['slug'])) {
26
+        if ( ! isset($fieldValues['slug'])) {
27 27
             $fieldValues['slug'] = $fieldValues['name'];
28 28
         }
29 29
         parent::__construct($fieldValues, $bydb, $timezone);
Please login to merge, or discard this patch.
core/db_classes/EE_Term_Taxonomy.class.php 2 patches
Doc Comments   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -47,7 +47,7 @@  discard block
 block discarded – undo
47 47
      * Sets taxonomy
48 48
      *
49 49
      * @param string $taxonomy
50
-     * @return boolean
50
+     * @return boolean|null
51 51
      */
52 52
     public function set_taxonomy($taxonomy)
53 53
     {
@@ -70,7 +70,7 @@  discard block
 block discarded – undo
70 70
      * Sets term_count
71 71
      *
72 72
      * @param int $term_count
73
-     * @return boolean
73
+     * @return boolean|null
74 74
      */
75 75
     public function set_count($term_count)
76 76
     {
Please login to merge, or discard this patch.
Indentation   +64 added lines, -64 removed lines patch added patch discarded remove patch
@@ -11,80 +11,80 @@
 block discarded – undo
11 11
 class EE_Term_Taxonomy extends EE_Base_Class
12 12
 {
13 13
 
14
-    /**
15
-     * @param array $props_n_values
16
-     * @return EE_Term_Taxonomy
17
-     */
18
-    public static function new_instance($props_n_values = array())
19
-    {
20
-        $has_object = parent::_check_for_object($props_n_values, __CLASS__);
21
-        return $has_object ? $has_object : new self($props_n_values);
22
-    }
14
+	/**
15
+	 * @param array $props_n_values
16
+	 * @return EE_Term_Taxonomy
17
+	 */
18
+	public static function new_instance($props_n_values = array())
19
+	{
20
+		$has_object = parent::_check_for_object($props_n_values, __CLASS__);
21
+		return $has_object ? $has_object : new self($props_n_values);
22
+	}
23 23
 
24 24
 
25
-    /**
26
-     * @param array $props_n_values
27
-     * @return EE_Term_Taxonomy
28
-     */
29
-    public static function new_instance_from_db($props_n_values = array())
30
-    {
31
-        return new self($props_n_values, true);
32
-    }
25
+	/**
26
+	 * @param array $props_n_values
27
+	 * @return EE_Term_Taxonomy
28
+	 */
29
+	public static function new_instance_from_db($props_n_values = array())
30
+	{
31
+		return new self($props_n_values, true);
32
+	}
33 33
 
34 34
 
35
-    /**
36
-     * Gets taxonomy
37
-     *
38
-     * @return string
39
-     */
40
-    public function taxonomy()
41
-    {
42
-        return $this->get('taxonomy');
43
-    }
35
+	/**
36
+	 * Gets taxonomy
37
+	 *
38
+	 * @return string
39
+	 */
40
+	public function taxonomy()
41
+	{
42
+		return $this->get('taxonomy');
43
+	}
44 44
 
45 45
 
46
-    /**
47
-     * Sets taxonomy
48
-     *
49
-     * @param string $taxonomy
50
-     * @return boolean
51
-     */
52
-    public function set_taxonomy($taxonomy)
53
-    {
54
-        $this->set('taxonomy', $taxonomy);
55
-    }
46
+	/**
47
+	 * Sets taxonomy
48
+	 *
49
+	 * @param string $taxonomy
50
+	 * @return boolean
51
+	 */
52
+	public function set_taxonomy($taxonomy)
53
+	{
54
+		$this->set('taxonomy', $taxonomy);
55
+	}
56 56
 
57 57
 
58
-    /**
59
-     * Gets term_count
60
-     *
61
-     * @return int
62
-     */
63
-    public function count()
64
-    {
65
-        return $this->get('term_count');
66
-    }
58
+	/**
59
+	 * Gets term_count
60
+	 *
61
+	 * @return int
62
+	 */
63
+	public function count()
64
+	{
65
+		return $this->get('term_count');
66
+	}
67 67
 
68 68
 
69
-    /**
70
-     * Sets term_count
71
-     *
72
-     * @param int $term_count
73
-     * @return boolean
74
-     */
75
-    public function set_count($term_count)
76
-    {
77
-        $this->set('term_count', $term_count);
78
-    }
69
+	/**
70
+	 * Sets term_count
71
+	 *
72
+	 * @param int $term_count
73
+	 * @return boolean
74
+	 */
75
+	public function set_count($term_count)
76
+	{
77
+		$this->set('term_count', $term_count);
78
+	}
79 79
 
80 80
 
81
-    /**
82
-     * Gets the term for this term taxonomy
83
-     *
84
-     * @return EE_Term
85
-     */
86
-    public function term()
87
-    {
88
-        return $this->get_first_related('Term');
89
-    }
81
+	/**
82
+	 * Gets the term for this term taxonomy
83
+	 *
84
+	 * @return EE_Term
85
+	 */
86
+	public function term()
87
+	{
88
+		return $this->get_first_related('Term');
89
+	}
90 90
 }
Please login to merge, or discard this patch.
core/db_classes/EE_Venue.class.php 2 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -30,7 +30,7 @@
 block discarded – undo
30 30
      * @param array  $props_n_values  incoming values from the database
31 31
      * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
32 32
      *                                the website will be used.
33
-     * @return EE_Attendee
33
+     * @return EE_Venue
34 34
      */
35 35
     public static function new_instance_from_db($props_n_values = array(), $timezone = null)
36 36
     {
Please login to merge, or discard this patch.
Indentation   +560 added lines, -560 removed lines patch added patch discarded remove patch
@@ -10,564 +10,564 @@
 block discarded – undo
10 10
 class EE_Venue extends EE_CPT_Base implements EEI_Address
11 11
 {
12 12
 
13
-    /**
14
-     *
15
-     * @param array  $props_n_values          incoming values
16
-     * @param string $timezone                incoming timezone (if not set the timezone set for the website will be
17
-     *                                        used.)
18
-     * @param array  $date_formats            incoming date_formats in an array where the first value is the
19
-     *                                        date_format and the second value is the time format
20
-     * @return EE_Attendee
21
-     */
22
-    public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array())
23
-    {
24
-        $has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats);
25
-        return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats);
26
-    }
27
-
28
-
29
-    /**
30
-     * @param array  $props_n_values  incoming values from the database
31
-     * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
32
-     *                                the website will be used.
33
-     * @return EE_Attendee
34
-     */
35
-    public static function new_instance_from_db($props_n_values = array(), $timezone = null)
36
-    {
37
-        return new self($props_n_values, true, $timezone);
38
-    }
39
-
40
-
41
-    /**
42
-     * Gets name
43
-     *
44
-     * @return string
45
-     */
46
-    public function name()
47
-    {
48
-        return $this->get('VNU_name');
49
-    }
50
-
51
-
52
-    /**
53
-     * Gets phone
54
-     *
55
-     * @return string
56
-     */
57
-    public function phone()
58
-    {
59
-        return $this->get('VNU_phone');
60
-    }
61
-
62
-
63
-    /**
64
-     * venue_url
65
-     *
66
-     * @return string
67
-     */
68
-    public function venue_url()
69
-    {
70
-        return $this->get('VNU_url');
71
-    }
72
-
73
-
74
-    /**
75
-     * Gets desc
76
-     *
77
-     * @return string
78
-     */
79
-    public function description()
80
-    {
81
-        return $this->get('VNU_desc');
82
-    }
83
-
84
-
85
-    /**
86
-     * Gets short description (AKA: the excerpt)
87
-     *
88
-     * @return string
89
-     */
90
-    public function excerpt()
91
-    {
92
-        return $this->get('VNU_short_desc');
93
-    }
94
-
95
-
96
-    /**
97
-     * Gets identifier
98
-     *
99
-     * @return string
100
-     */
101
-    public function identifier()
102
-    {
103
-        return $this->get('VNU_identifier');
104
-    }
105
-
106
-
107
-    /**
108
-     * Gets address
109
-     *
110
-     * @return string
111
-     */
112
-    public function address()
113
-    {
114
-        return $this->get('VNU_address');
115
-    }
116
-
117
-
118
-    /**
119
-     * Gets address2
120
-     *
121
-     * @return string
122
-     */
123
-    public function address2()
124
-    {
125
-        return $this->get('VNU_address2');
126
-    }
127
-
128
-
129
-    /**
130
-     * Gets city
131
-     *
132
-     * @return string
133
-     */
134
-    public function city()
135
-    {
136
-        return $this->get('VNU_city');
137
-    }
138
-
139
-    /**
140
-     * Gets state
141
-     *
142
-     * @return int
143
-     */
144
-    public function state_ID()
145
-    {
146
-        return $this->get('STA_ID');
147
-    }
148
-
149
-
150
-    /**
151
-     * @return string
152
-     */
153
-    public function state_abbrev()
154
-    {
155
-        return $this->state_obj() instanceof EE_State ? $this->state_obj()->abbrev() : '';
156
-    }
157
-
158
-
159
-    /**
160
-     * @return string
161
-     */
162
-    public function state_name()
163
-    {
164
-        return $this->state_obj() instanceof EE_State ? $this->state_obj()->name() : '';
165
-    }
166
-
167
-
168
-    /**
169
-     * Gets the state for this venue
170
-     *
171
-     * @return EE_State
172
-     */
173
-    public function state_obj()
174
-    {
175
-        return $this->get_first_related('State');
176
-    }
177
-
178
-
179
-    /**
180
-     * either displays the state abbreviation or the state name, as determined
181
-     * by the "FHEE__EEI_Address__state__use_abbreviation" filter.
182
-     * defaults to abbreviation
183
-     *
184
-     * @return string
185
-     */
186
-    public function state()
187
-    {
188
-        if (apply_filters('FHEE__EEI_Address__state__use_abbreviation', true, $this->state_obj())) {
189
-            return $this->state_abbrev();
190
-        } else {
191
-            return $this->state_name();
192
-        }
193
-    }
194
-
195
-
196
-    /**
197
-     * country_ID
198
-     *
199
-     * @return string
200
-     */
201
-    public function country_ID()
202
-    {
203
-        return $this->get('CNT_ISO');
204
-    }
205
-
206
-
207
-    /**
208
-     * @return string
209
-     */
210
-    public function country_name()
211
-    {
212
-        return $this->country_obj() instanceof EE_Country ? $this->country_obj()->name() : '';
213
-    }
214
-
215
-
216
-    /**
217
-     * Gets the country of this venue
218
-     *
219
-     * @return EE_Country
220
-     */
221
-    public function country_obj()
222
-    {
223
-        return $this->get_first_related('Country');
224
-    }
225
-
226
-
227
-    /**
228
-     * either displays the country ISO2 code or the country name, as determined
229
-     * by the "FHEE__EEI_Address__country__use_abbreviation" filter.
230
-     * defaults to abbreviation
231
-     *
232
-     * @return string
233
-     */
234
-    public function country()
235
-    {
236
-        if (apply_filters('FHEE__EEI_Address__country__use_abbreviation', true, $this->country_obj())) {
237
-            return $this->country_ID();
238
-        } else {
239
-            return $this->country_name();
240
-        }
241
-    }
242
-
243
-
244
-    /**
245
-     * Gets zip
246
-     *
247
-     * @return string
248
-     */
249
-    public function zip()
250
-    {
251
-        return $this->get('VNU_zip');
252
-    }
253
-
254
-
255
-    /**
256
-     * Gets capacity
257
-     *
258
-     * @return int
259
-     */
260
-    public function capacity()
261
-    {
262
-        return $this->get_pretty('VNU_capacity', 'symbol');
263
-    }
264
-
265
-
266
-    /**
267
-     * Gets created
268
-     *
269
-     * @return string
270
-     */
271
-    public function created()
272
-    {
273
-        return $this->get('VNU_created');
274
-    }
275
-
276
-
277
-    /**
278
-     * Gets modified
279
-     *
280
-     * @return string
281
-     */
282
-    public function modified()
283
-    {
284
-        return $this->get('VNU_modified');
285
-    }
286
-
287
-
288
-    /**
289
-     * Gets order
290
-     *
291
-     * @return int
292
-     */
293
-    public function order()
294
-    {
295
-        return $this->get('VNU_order');
296
-    }
297
-
298
-
299
-    /**
300
-     * Gets wp_user
301
-     *
302
-     * @return int
303
-     */
304
-    public function wp_user()
305
-    {
306
-        return $this->get('VNU_wp_user');
307
-    }
308
-
309
-
310
-    /**
311
-     * @return string
312
-     */
313
-    public function virtual_phone()
314
-    {
315
-        return $this->get('VNU_virtual_phone');
316
-    }
317
-
318
-
319
-    /**
320
-     * @return string
321
-     */
322
-    public function virtual_url()
323
-    {
324
-        return $this->get('VNU_virtual_url');
325
-    }
326
-
327
-
328
-    /**
329
-     * @return bool
330
-     */
331
-    public function enable_for_gmap()
332
-    {
333
-        return $this->get('VNU_enable_for_gmap');
334
-    }
335
-
336
-
337
-    /**
338
-     * @return string
339
-     */
340
-    public function google_map_link()
341
-    {
342
-        return $this->get('VNU_google_map_link');
343
-    }
344
-
345
-
346
-    /**
347
-     * Gets all events happening at this venue. Query parameters can be added to
348
-     * fetch a subset of those events.
349
-     *
350
-     * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md
351
-     * @param bool  $upcoming
352
-     * @return EE_Event[]
353
-     */
354
-    public function events($query_params = array(), $upcoming = false)
355
-    {
356
-        if ($upcoming) {
357
-            $query_params = array(
358
-                array(
359
-                    'status'                 => 'publish',
360
-                    'Datetime.DTT_EVT_start' => array(
361
-                        '>',
362
-                        EEM_Datetime::instance()->current_time_for_query('DTT_EVT_start'),
363
-                    ),
364
-                ),
365
-            );
366
-        }
367
-        return $this->get_many_related('Event', $query_params);
368
-    }
369
-
370
-
371
-    /**
372
-     * Sets address
373
-     */
374
-    public function set_address($address = '')
375
-    {
376
-        $this->set('VNU_address', $address);
377
-    }
378
-
379
-
380
-    /**
381
-     * @param string $address2
382
-     */
383
-    public function set_address2($address2 = '')
384
-    {
385
-        $this->set('VNU_address2', $address2);
386
-    }
387
-
388
-
389
-    /**
390
-     * @param string $city
391
-     */
392
-    public function set_city($city = '')
393
-    {
394
-        $this->set('VNU_city', $city);
395
-    }
396
-
397
-
398
-    /**
399
-     * @param int $state
400
-     */
401
-    public function set_state_ID($state = 0)
402
-    {
403
-        $this->set('STA_ID', $state);
404
-    }
405
-
406
-
407
-    /**
408
-     * Sets the state, given either a state id or state object
409
-     *
410
-     * @param EE_State /int $state_id_or_obj
411
-     * @return EE_State
412
-     */
413
-    public function set_state_obj($state_id_or_obj)
414
-    {
415
-        return $this->_add_relation_to($state_id_or_obj, 'State');
416
-    }
417
-
418
-
419
-    /**
420
-     * @param int $country_ID
421
-     */
422
-    public function set_country_ID($country_ID = 0)
423
-    {
424
-        $this->set('CNT_ISO', $country_ID);
425
-    }
426
-
427
-
428
-    /**
429
-     * Sets the country on the venue
430
-     *
431
-     * @param EE_Country /string $country_id_or_obj
432
-     * @return EE_Country
433
-     */
434
-    public function set_country_obj($country_id_or_obj)
435
-    {
436
-        return $this->_add_relation_to($country_id_or_obj, 'Country');
437
-    }
438
-
439
-
440
-    /**
441
-     * @param string $zip
442
-     */
443
-    public function set_zip($zip = '')
444
-    {
445
-        $this->set('VNU_zip', $zip);
446
-    }
447
-
448
-
449
-    /**
450
-     * @param int $capacity
451
-     */
452
-    public function set_capacity($capacity = 0)
453
-    {
454
-        $this->set('VNU_capacity', $capacity);
455
-    }
456
-
457
-
458
-    /**
459
-     * @param string $created
460
-     */
461
-    public function set_created($created = '')
462
-    {
463
-        $this->set('VNU_created', $created);
464
-    }
465
-
466
-
467
-    /**
468
-     * @param string $desc
469
-     */
470
-    public function set_description($desc = '')
471
-    {
472
-        $this->set('VNU_desc', $desc);
473
-    }
474
-
475
-
476
-    /**
477
-     * @param string $identifier
478
-     */
479
-    public function set_identifier($identifier = '')
480
-    {
481
-        $this->set('VNU_identifier', $identifier);
482
-    }
483
-
484
-
485
-    /**
486
-     * @param string $modified
487
-     */
488
-    public function set_modified($modified = '')
489
-    {
490
-        $this->set('VNU_modified', $modified);
491
-    }
492
-
493
-
494
-    /**
495
-     * @param string $name
496
-     */
497
-    public function set_name($name = '')
498
-    {
499
-        $this->set('VNU_name', $name);
500
-    }
501
-
502
-
503
-    /**
504
-     * @param int $order
505
-     */
506
-    public function set_order($order = 0)
507
-    {
508
-        $this->set('VNU_order', $order);
509
-    }
510
-
511
-
512
-    /**
513
-     * @param string $phone
514
-     */
515
-    public function set_phone($phone = '')
516
-    {
517
-        $this->set('VNU_phone', $phone);
518
-    }
519
-
520
-
521
-    /**
522
-     * @param int $wp_user
523
-     */
524
-    public function set_wp_user($wp_user = 1)
525
-    {
526
-        $this->set('VNU_wp_user', $wp_user);
527
-    }
528
-
529
-
530
-    /**
531
-     * @param string $url
532
-     */
533
-    public function set_venue_url($url = '')
534
-    {
535
-        $this->set('VNU_url', $url);
536
-    }
537
-
538
-
539
-    /**
540
-     * @param string $phone
541
-     */
542
-    public function set_virtual_phone($phone = '')
543
-    {
544
-        $this->set('VNU_virtual_phone', $phone);
545
-    }
546
-
547
-
548
-    /**
549
-     * @param string $url
550
-     */
551
-    public function set_virtual_url($url = '')
552
-    {
553
-        $this->set('VNU_virtual_url', $url);
554
-    }
555
-
556
-
557
-    /**
558
-     * @param string $enable
559
-     */
560
-    public function set_enable_for_gmap($enable = '')
561
-    {
562
-        $this->set('VNU_enable_for_gmap', $enable);
563
-    }
564
-
565
-
566
-    /**
567
-     * @param string $google_map_link
568
-     */
569
-    public function set_google_map_link($google_map_link = '')
570
-    {
571
-        $this->set('VNU_google_map_link', $google_map_link);
572
-    }
13
+	/**
14
+	 *
15
+	 * @param array  $props_n_values          incoming values
16
+	 * @param string $timezone                incoming timezone (if not set the timezone set for the website will be
17
+	 *                                        used.)
18
+	 * @param array  $date_formats            incoming date_formats in an array where the first value is the
19
+	 *                                        date_format and the second value is the time format
20
+	 * @return EE_Attendee
21
+	 */
22
+	public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array())
23
+	{
24
+		$has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats);
25
+		return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats);
26
+	}
27
+
28
+
29
+	/**
30
+	 * @param array  $props_n_values  incoming values from the database
31
+	 * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
32
+	 *                                the website will be used.
33
+	 * @return EE_Attendee
34
+	 */
35
+	public static function new_instance_from_db($props_n_values = array(), $timezone = null)
36
+	{
37
+		return new self($props_n_values, true, $timezone);
38
+	}
39
+
40
+
41
+	/**
42
+	 * Gets name
43
+	 *
44
+	 * @return string
45
+	 */
46
+	public function name()
47
+	{
48
+		return $this->get('VNU_name');
49
+	}
50
+
51
+
52
+	/**
53
+	 * Gets phone
54
+	 *
55
+	 * @return string
56
+	 */
57
+	public function phone()
58
+	{
59
+		return $this->get('VNU_phone');
60
+	}
61
+
62
+
63
+	/**
64
+	 * venue_url
65
+	 *
66
+	 * @return string
67
+	 */
68
+	public function venue_url()
69
+	{
70
+		return $this->get('VNU_url');
71
+	}
72
+
73
+
74
+	/**
75
+	 * Gets desc
76
+	 *
77
+	 * @return string
78
+	 */
79
+	public function description()
80
+	{
81
+		return $this->get('VNU_desc');
82
+	}
83
+
84
+
85
+	/**
86
+	 * Gets short description (AKA: the excerpt)
87
+	 *
88
+	 * @return string
89
+	 */
90
+	public function excerpt()
91
+	{
92
+		return $this->get('VNU_short_desc');
93
+	}
94
+
95
+
96
+	/**
97
+	 * Gets identifier
98
+	 *
99
+	 * @return string
100
+	 */
101
+	public function identifier()
102
+	{
103
+		return $this->get('VNU_identifier');
104
+	}
105
+
106
+
107
+	/**
108
+	 * Gets address
109
+	 *
110
+	 * @return string
111
+	 */
112
+	public function address()
113
+	{
114
+		return $this->get('VNU_address');
115
+	}
116
+
117
+
118
+	/**
119
+	 * Gets address2
120
+	 *
121
+	 * @return string
122
+	 */
123
+	public function address2()
124
+	{
125
+		return $this->get('VNU_address2');
126
+	}
127
+
128
+
129
+	/**
130
+	 * Gets city
131
+	 *
132
+	 * @return string
133
+	 */
134
+	public function city()
135
+	{
136
+		return $this->get('VNU_city');
137
+	}
138
+
139
+	/**
140
+	 * Gets state
141
+	 *
142
+	 * @return int
143
+	 */
144
+	public function state_ID()
145
+	{
146
+		return $this->get('STA_ID');
147
+	}
148
+
149
+
150
+	/**
151
+	 * @return string
152
+	 */
153
+	public function state_abbrev()
154
+	{
155
+		return $this->state_obj() instanceof EE_State ? $this->state_obj()->abbrev() : '';
156
+	}
157
+
158
+
159
+	/**
160
+	 * @return string
161
+	 */
162
+	public function state_name()
163
+	{
164
+		return $this->state_obj() instanceof EE_State ? $this->state_obj()->name() : '';
165
+	}
166
+
167
+
168
+	/**
169
+	 * Gets the state for this venue
170
+	 *
171
+	 * @return EE_State
172
+	 */
173
+	public function state_obj()
174
+	{
175
+		return $this->get_first_related('State');
176
+	}
177
+
178
+
179
+	/**
180
+	 * either displays the state abbreviation or the state name, as determined
181
+	 * by the "FHEE__EEI_Address__state__use_abbreviation" filter.
182
+	 * defaults to abbreviation
183
+	 *
184
+	 * @return string
185
+	 */
186
+	public function state()
187
+	{
188
+		if (apply_filters('FHEE__EEI_Address__state__use_abbreviation', true, $this->state_obj())) {
189
+			return $this->state_abbrev();
190
+		} else {
191
+			return $this->state_name();
192
+		}
193
+	}
194
+
195
+
196
+	/**
197
+	 * country_ID
198
+	 *
199
+	 * @return string
200
+	 */
201
+	public function country_ID()
202
+	{
203
+		return $this->get('CNT_ISO');
204
+	}
205
+
206
+
207
+	/**
208
+	 * @return string
209
+	 */
210
+	public function country_name()
211
+	{
212
+		return $this->country_obj() instanceof EE_Country ? $this->country_obj()->name() : '';
213
+	}
214
+
215
+
216
+	/**
217
+	 * Gets the country of this venue
218
+	 *
219
+	 * @return EE_Country
220
+	 */
221
+	public function country_obj()
222
+	{
223
+		return $this->get_first_related('Country');
224
+	}
225
+
226
+
227
+	/**
228
+	 * either displays the country ISO2 code or the country name, as determined
229
+	 * by the "FHEE__EEI_Address__country__use_abbreviation" filter.
230
+	 * defaults to abbreviation
231
+	 *
232
+	 * @return string
233
+	 */
234
+	public function country()
235
+	{
236
+		if (apply_filters('FHEE__EEI_Address__country__use_abbreviation', true, $this->country_obj())) {
237
+			return $this->country_ID();
238
+		} else {
239
+			return $this->country_name();
240
+		}
241
+	}
242
+
243
+
244
+	/**
245
+	 * Gets zip
246
+	 *
247
+	 * @return string
248
+	 */
249
+	public function zip()
250
+	{
251
+		return $this->get('VNU_zip');
252
+	}
253
+
254
+
255
+	/**
256
+	 * Gets capacity
257
+	 *
258
+	 * @return int
259
+	 */
260
+	public function capacity()
261
+	{
262
+		return $this->get_pretty('VNU_capacity', 'symbol');
263
+	}
264
+
265
+
266
+	/**
267
+	 * Gets created
268
+	 *
269
+	 * @return string
270
+	 */
271
+	public function created()
272
+	{
273
+		return $this->get('VNU_created');
274
+	}
275
+
276
+
277
+	/**
278
+	 * Gets modified
279
+	 *
280
+	 * @return string
281
+	 */
282
+	public function modified()
283
+	{
284
+		return $this->get('VNU_modified');
285
+	}
286
+
287
+
288
+	/**
289
+	 * Gets order
290
+	 *
291
+	 * @return int
292
+	 */
293
+	public function order()
294
+	{
295
+		return $this->get('VNU_order');
296
+	}
297
+
298
+
299
+	/**
300
+	 * Gets wp_user
301
+	 *
302
+	 * @return int
303
+	 */
304
+	public function wp_user()
305
+	{
306
+		return $this->get('VNU_wp_user');
307
+	}
308
+
309
+
310
+	/**
311
+	 * @return string
312
+	 */
313
+	public function virtual_phone()
314
+	{
315
+		return $this->get('VNU_virtual_phone');
316
+	}
317
+
318
+
319
+	/**
320
+	 * @return string
321
+	 */
322
+	public function virtual_url()
323
+	{
324
+		return $this->get('VNU_virtual_url');
325
+	}
326
+
327
+
328
+	/**
329
+	 * @return bool
330
+	 */
331
+	public function enable_for_gmap()
332
+	{
333
+		return $this->get('VNU_enable_for_gmap');
334
+	}
335
+
336
+
337
+	/**
338
+	 * @return string
339
+	 */
340
+	public function google_map_link()
341
+	{
342
+		return $this->get('VNU_google_map_link');
343
+	}
344
+
345
+
346
+	/**
347
+	 * Gets all events happening at this venue. Query parameters can be added to
348
+	 * fetch a subset of those events.
349
+	 *
350
+	 * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md
351
+	 * @param bool  $upcoming
352
+	 * @return EE_Event[]
353
+	 */
354
+	public function events($query_params = array(), $upcoming = false)
355
+	{
356
+		if ($upcoming) {
357
+			$query_params = array(
358
+				array(
359
+					'status'                 => 'publish',
360
+					'Datetime.DTT_EVT_start' => array(
361
+						'>',
362
+						EEM_Datetime::instance()->current_time_for_query('DTT_EVT_start'),
363
+					),
364
+				),
365
+			);
366
+		}
367
+		return $this->get_many_related('Event', $query_params);
368
+	}
369
+
370
+
371
+	/**
372
+	 * Sets address
373
+	 */
374
+	public function set_address($address = '')
375
+	{
376
+		$this->set('VNU_address', $address);
377
+	}
378
+
379
+
380
+	/**
381
+	 * @param string $address2
382
+	 */
383
+	public function set_address2($address2 = '')
384
+	{
385
+		$this->set('VNU_address2', $address2);
386
+	}
387
+
388
+
389
+	/**
390
+	 * @param string $city
391
+	 */
392
+	public function set_city($city = '')
393
+	{
394
+		$this->set('VNU_city', $city);
395
+	}
396
+
397
+
398
+	/**
399
+	 * @param int $state
400
+	 */
401
+	public function set_state_ID($state = 0)
402
+	{
403
+		$this->set('STA_ID', $state);
404
+	}
405
+
406
+
407
+	/**
408
+	 * Sets the state, given either a state id or state object
409
+	 *
410
+	 * @param EE_State /int $state_id_or_obj
411
+	 * @return EE_State
412
+	 */
413
+	public function set_state_obj($state_id_or_obj)
414
+	{
415
+		return $this->_add_relation_to($state_id_or_obj, 'State');
416
+	}
417
+
418
+
419
+	/**
420
+	 * @param int $country_ID
421
+	 */
422
+	public function set_country_ID($country_ID = 0)
423
+	{
424
+		$this->set('CNT_ISO', $country_ID);
425
+	}
426
+
427
+
428
+	/**
429
+	 * Sets the country on the venue
430
+	 *
431
+	 * @param EE_Country /string $country_id_or_obj
432
+	 * @return EE_Country
433
+	 */
434
+	public function set_country_obj($country_id_or_obj)
435
+	{
436
+		return $this->_add_relation_to($country_id_or_obj, 'Country');
437
+	}
438
+
439
+
440
+	/**
441
+	 * @param string $zip
442
+	 */
443
+	public function set_zip($zip = '')
444
+	{
445
+		$this->set('VNU_zip', $zip);
446
+	}
447
+
448
+
449
+	/**
450
+	 * @param int $capacity
451
+	 */
452
+	public function set_capacity($capacity = 0)
453
+	{
454
+		$this->set('VNU_capacity', $capacity);
455
+	}
456
+
457
+
458
+	/**
459
+	 * @param string $created
460
+	 */
461
+	public function set_created($created = '')
462
+	{
463
+		$this->set('VNU_created', $created);
464
+	}
465
+
466
+
467
+	/**
468
+	 * @param string $desc
469
+	 */
470
+	public function set_description($desc = '')
471
+	{
472
+		$this->set('VNU_desc', $desc);
473
+	}
474
+
475
+
476
+	/**
477
+	 * @param string $identifier
478
+	 */
479
+	public function set_identifier($identifier = '')
480
+	{
481
+		$this->set('VNU_identifier', $identifier);
482
+	}
483
+
484
+
485
+	/**
486
+	 * @param string $modified
487
+	 */
488
+	public function set_modified($modified = '')
489
+	{
490
+		$this->set('VNU_modified', $modified);
491
+	}
492
+
493
+
494
+	/**
495
+	 * @param string $name
496
+	 */
497
+	public function set_name($name = '')
498
+	{
499
+		$this->set('VNU_name', $name);
500
+	}
501
+
502
+
503
+	/**
504
+	 * @param int $order
505
+	 */
506
+	public function set_order($order = 0)
507
+	{
508
+		$this->set('VNU_order', $order);
509
+	}
510
+
511
+
512
+	/**
513
+	 * @param string $phone
514
+	 */
515
+	public function set_phone($phone = '')
516
+	{
517
+		$this->set('VNU_phone', $phone);
518
+	}
519
+
520
+
521
+	/**
522
+	 * @param int $wp_user
523
+	 */
524
+	public function set_wp_user($wp_user = 1)
525
+	{
526
+		$this->set('VNU_wp_user', $wp_user);
527
+	}
528
+
529
+
530
+	/**
531
+	 * @param string $url
532
+	 */
533
+	public function set_venue_url($url = '')
534
+	{
535
+		$this->set('VNU_url', $url);
536
+	}
537
+
538
+
539
+	/**
540
+	 * @param string $phone
541
+	 */
542
+	public function set_virtual_phone($phone = '')
543
+	{
544
+		$this->set('VNU_virtual_phone', $phone);
545
+	}
546
+
547
+
548
+	/**
549
+	 * @param string $url
550
+	 */
551
+	public function set_virtual_url($url = '')
552
+	{
553
+		$this->set('VNU_virtual_url', $url);
554
+	}
555
+
556
+
557
+	/**
558
+	 * @param string $enable
559
+	 */
560
+	public function set_enable_for_gmap($enable = '')
561
+	{
562
+		$this->set('VNU_enable_for_gmap', $enable);
563
+	}
564
+
565
+
566
+	/**
567
+	 * @param string $google_map_link
568
+	 */
569
+	public function set_google_map_link($google_map_link = '')
570
+	{
571
+		$this->set('VNU_google_map_link', $google_map_link);
572
+	}
573 573
 }
Please login to merge, or discard this patch.