@@ -43,11 +43,11 @@ |
||
43 | 43 | 'Ticket' => new EE_Has_Many_Relation() |
44 | 44 | ); |
45 | 45 | $this->_model_chain_to_wp_user = 'Ticket'; |
46 | - $this->_cap_restriction_generators[ EEM_Base::caps_read ] = new EE_Restriction_Generator_Default_Public('Ticket.TKT_is_default', 'Ticket.Datetime.Event'); |
|
46 | + $this->_cap_restriction_generators[EEM_Base::caps_read] = new EE_Restriction_Generator_Default_Public('Ticket.TKT_is_default', 'Ticket.Datetime.Event'); |
|
47 | 47 | // account for default tickets in the caps |
48 | - $this->_cap_restriction_generators[ EEM_Base::caps_read_admin ] = new EE_Restriction_Generator_Default_Protected('Ticket.TKT_is_default', 'Ticket.Datetime.Event'); |
|
49 | - $this->_cap_restriction_generators[ EEM_Base::caps_edit ] = new EE_Restriction_Generator_Default_Protected('Ticket.TKT_is_default', 'Ticket.Datetime.Event'); |
|
50 | - $this->_cap_restriction_generators[ EEM_Base::caps_delete ] = new EE_Restriction_Generator_Default_Protected('Ticket.TKT_is_default', 'Ticket.Datetime.Event'); |
|
48 | + $this->_cap_restriction_generators[EEM_Base::caps_read_admin] = new EE_Restriction_Generator_Default_Protected('Ticket.TKT_is_default', 'Ticket.Datetime.Event'); |
|
49 | + $this->_cap_restriction_generators[EEM_Base::caps_edit] = new EE_Restriction_Generator_Default_Protected('Ticket.TKT_is_default', 'Ticket.Datetime.Event'); |
|
50 | + $this->_cap_restriction_generators[EEM_Base::caps_delete] = new EE_Restriction_Generator_Default_Protected('Ticket.TKT_is_default', 'Ticket.Datetime.Event'); |
|
51 | 51 | parent::__construct($timezone); |
52 | 52 | } |
53 | 53 | } |
@@ -11,40 +11,40 @@ |
||
11 | 11 | */ |
12 | 12 | class EEM_Ticket_Template extends EEM_Base |
13 | 13 | { |
14 | - // private instance of the EEM_Ticket_Template object |
|
15 | - protected static $_instance = null; |
|
14 | + // private instance of the EEM_Ticket_Template object |
|
15 | + protected static $_instance = null; |
|
16 | 16 | |
17 | - /** |
|
18 | - * private constructor to prevent direct creation |
|
19 | - * @Constructor |
|
20 | - * @access private |
|
21 | - * @param string $timezone string representing the timezone we want to set for returned Date Time Strings (and any incoming timezone data that gets saved). Note this just sends the timezone info to the date time model field objects. Default is NULL (and will be assumed using the set timezone in the 'timezone_string' wp option) |
|
22 | - * @return void |
|
23 | - */ |
|
24 | - protected function __construct($timezone) |
|
25 | - { |
|
26 | - $this->singular_item = esc_html__('Ticket Template', 'event_espresso'); |
|
27 | - $this->plural_item = esc_html__('Ticket Templates', 'event_espresso'); |
|
17 | + /** |
|
18 | + * private constructor to prevent direct creation |
|
19 | + * @Constructor |
|
20 | + * @access private |
|
21 | + * @param string $timezone string representing the timezone we want to set for returned Date Time Strings (and any incoming timezone data that gets saved). Note this just sends the timezone info to the date time model field objects. Default is NULL (and will be assumed using the set timezone in the 'timezone_string' wp option) |
|
22 | + * @return void |
|
23 | + */ |
|
24 | + protected function __construct($timezone) |
|
25 | + { |
|
26 | + $this->singular_item = esc_html__('Ticket Template', 'event_espresso'); |
|
27 | + $this->plural_item = esc_html__('Ticket Templates', 'event_espresso'); |
|
28 | 28 | |
29 | - $this->_tables = array( |
|
30 | - 'Ticket_Template' => new EE_Primary_Table('esp_ticket_template', 'TTM_ID') |
|
31 | - ); |
|
32 | - $this->_fields = array( |
|
33 | - 'Ticket_Template' => array( |
|
34 | - 'TTM_ID' => new EE_Primary_Key_Int_Field('TTM_ID', esc_html__('Ticket Template ID', 'event_espresso')), |
|
35 | - 'TTM_name' => new EE_Plain_Text_Field('TTM_name', esc_html__('The name of the ticket template', 'event_espresso'), false, ''), |
|
36 | - 'TTM_description' => new EE_Plain_Text_Field('TTM_description', esc_html__('The description for the ticket template', 'event_espresso'), true, ''), |
|
37 | - 'TTM_file' => new EE_Plain_Text_Field('TTM_file', esc_html__('The file name for the actual template file saved on disk', 'event_espresso'), true, ''), |
|
38 | - )); |
|
39 | - $this->_model_relations = array( |
|
40 | - 'Ticket' => new EE_Has_Many_Relation() |
|
41 | - ); |
|
42 | - $this->_model_chain_to_wp_user = 'Ticket'; |
|
43 | - $this->_cap_restriction_generators[ EEM_Base::caps_read ] = new EE_Restriction_Generator_Default_Public('Ticket.TKT_is_default', 'Ticket.Datetime.Event'); |
|
44 | - // account for default tickets in the caps |
|
45 | - $this->_cap_restriction_generators[ EEM_Base::caps_read_admin ] = new EE_Restriction_Generator_Default_Protected('Ticket.TKT_is_default', 'Ticket.Datetime.Event'); |
|
46 | - $this->_cap_restriction_generators[ EEM_Base::caps_edit ] = new EE_Restriction_Generator_Default_Protected('Ticket.TKT_is_default', 'Ticket.Datetime.Event'); |
|
47 | - $this->_cap_restriction_generators[ EEM_Base::caps_delete ] = new EE_Restriction_Generator_Default_Protected('Ticket.TKT_is_default', 'Ticket.Datetime.Event'); |
|
48 | - parent::__construct($timezone); |
|
49 | - } |
|
29 | + $this->_tables = array( |
|
30 | + 'Ticket_Template' => new EE_Primary_Table('esp_ticket_template', 'TTM_ID') |
|
31 | + ); |
|
32 | + $this->_fields = array( |
|
33 | + 'Ticket_Template' => array( |
|
34 | + 'TTM_ID' => new EE_Primary_Key_Int_Field('TTM_ID', esc_html__('Ticket Template ID', 'event_espresso')), |
|
35 | + 'TTM_name' => new EE_Plain_Text_Field('TTM_name', esc_html__('The name of the ticket template', 'event_espresso'), false, ''), |
|
36 | + 'TTM_description' => new EE_Plain_Text_Field('TTM_description', esc_html__('The description for the ticket template', 'event_espresso'), true, ''), |
|
37 | + 'TTM_file' => new EE_Plain_Text_Field('TTM_file', esc_html__('The file name for the actual template file saved on disk', 'event_espresso'), true, ''), |
|
38 | + )); |
|
39 | + $this->_model_relations = array( |
|
40 | + 'Ticket' => new EE_Has_Many_Relation() |
|
41 | + ); |
|
42 | + $this->_model_chain_to_wp_user = 'Ticket'; |
|
43 | + $this->_cap_restriction_generators[ EEM_Base::caps_read ] = new EE_Restriction_Generator_Default_Public('Ticket.TKT_is_default', 'Ticket.Datetime.Event'); |
|
44 | + // account for default tickets in the caps |
|
45 | + $this->_cap_restriction_generators[ EEM_Base::caps_read_admin ] = new EE_Restriction_Generator_Default_Protected('Ticket.TKT_is_default', 'Ticket.Datetime.Event'); |
|
46 | + $this->_cap_restriction_generators[ EEM_Base::caps_edit ] = new EE_Restriction_Generator_Default_Protected('Ticket.TKT_is_default', 'Ticket.Datetime.Event'); |
|
47 | + $this->_cap_restriction_generators[ EEM_Base::caps_delete ] = new EE_Restriction_Generator_Default_Protected('Ticket.TKT_is_default', 'Ticket.Datetime.Event'); |
|
48 | + parent::__construct($timezone); |
|
49 | + } |
|
50 | 50 | } |
@@ -98,7 +98,7 @@ discard block |
||
98 | 98 | */ |
99 | 99 | public function get_registration_question_answer_object(EE_Registration $registration, $question_id = null) |
100 | 100 | { |
101 | - $answer_obj = $this->get_one(array( array( 'QST_ID' => $question_id, 'REG_ID' => $registration->ID() ))); |
|
101 | + $answer_obj = $this->get_one(array(array('QST_ID' => $question_id, 'REG_ID' => $registration->ID()))); |
|
102 | 102 | return apply_filters('FHEE__EEM_Answer__get_registration_question_answer_object__answer_obj', $answer_obj, $registration, $question_id); |
103 | 103 | } |
104 | 104 | |
@@ -121,9 +121,9 @@ discard block |
||
121 | 121 | if (is_numeric($question_system_id)) { |
122 | 122 | // find this question's QST_system value |
123 | 123 | $question_id = $question_system_id; |
124 | - $question_system_id = EEM_Question::instance()->get_var(array( array( 'QST_ID' => $question_system_id ) ), 'QST_system'); |
|
124 | + $question_system_id = EEM_Question::instance()->get_var(array(array('QST_ID' => $question_system_id)), 'QST_system'); |
|
125 | 125 | } else { |
126 | - $question_id = (int) EEM_Question::instance()->get_var(array( array( 'QST_system' => $question_system_id ) ), 'QST_ID'); |
|
126 | + $question_id = (int) EEM_Question::instance()->get_var(array(array('QST_system' => $question_system_id)), 'QST_ID'); |
|
127 | 127 | } |
128 | 128 | // only bother checking if the registration has an attendee |
129 | 129 | if ($registration->attendee() instanceof EE_Attendee) { |
@@ -9,142 +9,142 @@ |
||
9 | 9 | */ |
10 | 10 | class EEM_Answer extends EEM_Base |
11 | 11 | { |
12 | - /** |
|
13 | - * private instance of the EEM_Answer object |
|
14 | - * @type EEM_Answer |
|
15 | - */ |
|
16 | - protected static $_instance = null; |
|
12 | + /** |
|
13 | + * private instance of the EEM_Answer object |
|
14 | + * @type EEM_Answer |
|
15 | + */ |
|
16 | + protected static $_instance = null; |
|
17 | 17 | |
18 | - /** |
|
19 | - * Mapping from system question ids to attendee field names |
|
20 | - * @type array |
|
21 | - * @deprecated since version 4.8.8 |
|
22 | - */ |
|
23 | - protected $_question_id_to_att_field_map = array( |
|
24 | - EEM_Attendee::fname_question_id => 'ATT_fname', |
|
25 | - EEM_Attendee::lname_question_id => 'ATT_lname', |
|
26 | - EEM_Attendee::email_question_id => 'ATT_email', |
|
27 | - EEM_Attendee::address_question_id => 'ATT_address', |
|
28 | - EEM_Attendee::address2_question_id => 'ATT_address2', |
|
29 | - EEM_Attendee::city_question_id => 'ATT_city', |
|
30 | - EEM_Attendee::state_question_id => 'STA_ID', |
|
31 | - EEM_Attendee::country_question_id => 'CNT_ISO', |
|
32 | - EEM_Attendee::zip_question_id => 'ATT_zip', |
|
33 | - EEM_Attendee::phone_question_id => 'ATT_phone' |
|
34 | - ); |
|
18 | + /** |
|
19 | + * Mapping from system question ids to attendee field names |
|
20 | + * @type array |
|
21 | + * @deprecated since version 4.8.8 |
|
22 | + */ |
|
23 | + protected $_question_id_to_att_field_map = array( |
|
24 | + EEM_Attendee::fname_question_id => 'ATT_fname', |
|
25 | + EEM_Attendee::lname_question_id => 'ATT_lname', |
|
26 | + EEM_Attendee::email_question_id => 'ATT_email', |
|
27 | + EEM_Attendee::address_question_id => 'ATT_address', |
|
28 | + EEM_Attendee::address2_question_id => 'ATT_address2', |
|
29 | + EEM_Attendee::city_question_id => 'ATT_city', |
|
30 | + EEM_Attendee::state_question_id => 'STA_ID', |
|
31 | + EEM_Attendee::country_question_id => 'CNT_ISO', |
|
32 | + EEM_Attendee::zip_question_id => 'ATT_zip', |
|
33 | + EEM_Attendee::phone_question_id => 'ATT_phone' |
|
34 | + ); |
|
35 | 35 | |
36 | 36 | |
37 | 37 | |
38 | - /** |
|
39 | - * constructor |
|
40 | - */ |
|
41 | - protected function __construct($timezone = null) |
|
42 | - { |
|
43 | - $this->singular_item = esc_html__('Answer', 'event_espresso'); |
|
44 | - $this->plural_item = esc_html__('Answers', 'event_espresso'); |
|
45 | - $this->_tables = array( |
|
46 | - 'Answer' => new EE_Primary_Table('esp_answer', 'ANS_ID') |
|
47 | - ); |
|
48 | - $this->_fields = array( |
|
49 | - 'Answer' => array( |
|
50 | - 'ANS_ID' => new EE_Primary_Key_Int_Field('ANS_ID', esc_html__('Answer ID', 'event_espresso')), |
|
51 | - 'REG_ID' => new EE_Foreign_Key_Int_Field('REG_ID', esc_html__('Registration ID', 'event_espresso'), false, 0, 'Registration'), |
|
52 | - 'QST_ID' => new EE_Foreign_Key_Int_Field('QST_ID', esc_html__('Question ID', 'event_espresso'), false, 0, 'Question'), |
|
53 | - 'ANS_value' => new EE_Maybe_Serialized_Simple_HTML_Field('ANS_value', esc_html__('Answer Value', 'event_espresso'), false, '') |
|
54 | - )); |
|
55 | - $this->_model_relations = array( |
|
56 | - 'Registration' => new EE_Belongs_To_Relation(), |
|
57 | - 'Question' => new EE_Belongs_To_Relation() |
|
58 | - ); |
|
59 | - $this->_model_chain_to_wp_user = 'Registration.Event'; |
|
60 | - $this->_caps_slug = 'registrations'; |
|
61 | - parent::__construct($timezone); |
|
62 | - } |
|
38 | + /** |
|
39 | + * constructor |
|
40 | + */ |
|
41 | + protected function __construct($timezone = null) |
|
42 | + { |
|
43 | + $this->singular_item = esc_html__('Answer', 'event_espresso'); |
|
44 | + $this->plural_item = esc_html__('Answers', 'event_espresso'); |
|
45 | + $this->_tables = array( |
|
46 | + 'Answer' => new EE_Primary_Table('esp_answer', 'ANS_ID') |
|
47 | + ); |
|
48 | + $this->_fields = array( |
|
49 | + 'Answer' => array( |
|
50 | + 'ANS_ID' => new EE_Primary_Key_Int_Field('ANS_ID', esc_html__('Answer ID', 'event_espresso')), |
|
51 | + 'REG_ID' => new EE_Foreign_Key_Int_Field('REG_ID', esc_html__('Registration ID', 'event_espresso'), false, 0, 'Registration'), |
|
52 | + 'QST_ID' => new EE_Foreign_Key_Int_Field('QST_ID', esc_html__('Question ID', 'event_espresso'), false, 0, 'Question'), |
|
53 | + 'ANS_value' => new EE_Maybe_Serialized_Simple_HTML_Field('ANS_value', esc_html__('Answer Value', 'event_espresso'), false, '') |
|
54 | + )); |
|
55 | + $this->_model_relations = array( |
|
56 | + 'Registration' => new EE_Belongs_To_Relation(), |
|
57 | + 'Question' => new EE_Belongs_To_Relation() |
|
58 | + ); |
|
59 | + $this->_model_chain_to_wp_user = 'Registration.Event'; |
|
60 | + $this->_caps_slug = 'registrations'; |
|
61 | + parent::__construct($timezone); |
|
62 | + } |
|
63 | 63 | |
64 | 64 | |
65 | 65 | |
66 | - /** |
|
67 | - * Gets the string answer to the question for this registration (it could either be stored |
|
68 | - * on the attendee or in the answer table. This function finds its value regardless) |
|
69 | - * @param EE_Registration $registration |
|
70 | - * @param int $question_id |
|
71 | - * @param boolean $pretty_answer whether to call 'pretty_value' or just 'value' |
|
72 | - * @return string |
|
73 | - */ |
|
74 | - public function get_answer_value_to_question(EE_Registration $registration, $question_id = null, $pretty_answer = false) |
|
75 | - { |
|
76 | - $value = $this->get_attendee_property_answer_value($registration, $question_id, $pretty_answer); |
|
77 | - if ($value === null) { |
|
78 | - $answer_obj = $this->get_registration_question_answer_object($registration, $question_id); |
|
79 | - if ($answer_obj instanceof EE_Answer) { |
|
80 | - if ($pretty_answer) { |
|
81 | - $value = $answer_obj->pretty_value(); |
|
82 | - } else { |
|
83 | - $value = $answer_obj->value(); |
|
84 | - } |
|
85 | - } |
|
86 | - } |
|
87 | - return apply_filters('FHEE__EEM_Answer__get_answer_value_to_question__answer_value', $value, $registration, $question_id); |
|
88 | - } |
|
66 | + /** |
|
67 | + * Gets the string answer to the question for this registration (it could either be stored |
|
68 | + * on the attendee or in the answer table. This function finds its value regardless) |
|
69 | + * @param EE_Registration $registration |
|
70 | + * @param int $question_id |
|
71 | + * @param boolean $pretty_answer whether to call 'pretty_value' or just 'value' |
|
72 | + * @return string |
|
73 | + */ |
|
74 | + public function get_answer_value_to_question(EE_Registration $registration, $question_id = null, $pretty_answer = false) |
|
75 | + { |
|
76 | + $value = $this->get_attendee_property_answer_value($registration, $question_id, $pretty_answer); |
|
77 | + if ($value === null) { |
|
78 | + $answer_obj = $this->get_registration_question_answer_object($registration, $question_id); |
|
79 | + if ($answer_obj instanceof EE_Answer) { |
|
80 | + if ($pretty_answer) { |
|
81 | + $value = $answer_obj->pretty_value(); |
|
82 | + } else { |
|
83 | + $value = $answer_obj->value(); |
|
84 | + } |
|
85 | + } |
|
86 | + } |
|
87 | + return apply_filters('FHEE__EEM_Answer__get_answer_value_to_question__answer_value', $value, $registration, $question_id); |
|
88 | + } |
|
89 | 89 | |
90 | 90 | |
91 | 91 | |
92 | - /** |
|
93 | - * Gets the EE_Answer object for the question for this registration (if it exists) |
|
94 | - * @param EE_Registration $registration |
|
95 | - * @param int $question_id |
|
96 | - * @return EE_Answer |
|
97 | - */ |
|
98 | - public function get_registration_question_answer_object(EE_Registration $registration, $question_id = null) |
|
99 | - { |
|
100 | - $answer_obj = $this->get_one(array( array( 'QST_ID' => $question_id, 'REG_ID' => $registration->ID() ))); |
|
101 | - return apply_filters('FHEE__EEM_Answer__get_registration_question_answer_object__answer_obj', $answer_obj, $registration, $question_id); |
|
102 | - } |
|
92 | + /** |
|
93 | + * Gets the EE_Answer object for the question for this registration (if it exists) |
|
94 | + * @param EE_Registration $registration |
|
95 | + * @param int $question_id |
|
96 | + * @return EE_Answer |
|
97 | + */ |
|
98 | + public function get_registration_question_answer_object(EE_Registration $registration, $question_id = null) |
|
99 | + { |
|
100 | + $answer_obj = $this->get_one(array( array( 'QST_ID' => $question_id, 'REG_ID' => $registration->ID() ))); |
|
101 | + return apply_filters('FHEE__EEM_Answer__get_registration_question_answer_object__answer_obj', $answer_obj, $registration, $question_id); |
|
102 | + } |
|
103 | 103 | |
104 | 104 | |
105 | 105 | |
106 | - /** |
|
107 | - * Gets the string answer to the question for this registration's attendee |
|
108 | - * @param EE_Registration $registration |
|
109 | - * @param int|string $question_system_id if an INT this is understood to be the question's ID; if a string then it should be its QST_system value. |
|
110 | - * Passing in the QST_system value is more efficient |
|
111 | - * @param boolean $pretty_answer |
|
112 | - * @return string|null (if the registration has no attendee, or the question_system_id is not a QST_ID or QST_system for |
|
113 | - * a question corresponding to an attendee field, returns null) |
|
114 | - */ |
|
115 | - public function get_attendee_property_answer_value(EE_Registration $registration, $question_system_id = null, $pretty_answer = false) |
|
116 | - { |
|
117 | - $field_name = null; |
|
118 | - $value = null; |
|
119 | - // backward compat: we still want to find the question's ID |
|
120 | - if (is_numeric($question_system_id)) { |
|
121 | - // find this question's QST_system value |
|
122 | - $question_id = $question_system_id; |
|
123 | - $question_system_id = EEM_Question::instance()->get_var(array( array( 'QST_ID' => $question_system_id ) ), 'QST_system'); |
|
124 | - } else { |
|
125 | - $question_id = (int) EEM_Question::instance()->get_var(array( array( 'QST_system' => $question_system_id ) ), 'QST_ID'); |
|
126 | - } |
|
127 | - // only bother checking if the registration has an attendee |
|
128 | - if ($registration->attendee() instanceof EE_Attendee) { |
|
129 | - $field_name = EEM_Attendee::instance()->get_attendee_field_for_system_question($question_system_id); |
|
130 | - if ($field_name) { |
|
131 | - if ($pretty_answer) { |
|
132 | - if ($field_name === 'STA_ID') { |
|
133 | - $state = $registration->attendee()->state_obj(); |
|
134 | - $value = $state instanceof EE_State ? $state->name() : sprintf(esc_html__('Unknown State (%s)', 'event_espresso'), $registration->attendee()->state_ID()); |
|
135 | - } elseif ($field_name === 'CNT_ISO') { |
|
136 | - $country = $registration->attendee()->country_obj(); |
|
137 | - $value = $country instanceof EE_Country ? $country->name() : sprintf(esc_html__('Unknown Country (%s)', "event_espresso"), $registration->attendee()->country_ID()); |
|
138 | - } else { |
|
139 | - $value = $registration->attendee()->get_pretty($field_name); |
|
140 | - } |
|
141 | - // if field name is blank, leave the value as null too |
|
142 | - } else { |
|
143 | - $value = $registration->attendee()->get($field_name); |
|
144 | - } |
|
145 | - } |
|
146 | - // if no field was found, leave value blank |
|
147 | - } |
|
148 | - return apply_filters('FHEE__EEM_Answer__get_attendee_question_answer_value__answer_value', $value, $registration, $question_id, $question_system_id); |
|
149 | - } |
|
106 | + /** |
|
107 | + * Gets the string answer to the question for this registration's attendee |
|
108 | + * @param EE_Registration $registration |
|
109 | + * @param int|string $question_system_id if an INT this is understood to be the question's ID; if a string then it should be its QST_system value. |
|
110 | + * Passing in the QST_system value is more efficient |
|
111 | + * @param boolean $pretty_answer |
|
112 | + * @return string|null (if the registration has no attendee, or the question_system_id is not a QST_ID or QST_system for |
|
113 | + * a question corresponding to an attendee field, returns null) |
|
114 | + */ |
|
115 | + public function get_attendee_property_answer_value(EE_Registration $registration, $question_system_id = null, $pretty_answer = false) |
|
116 | + { |
|
117 | + $field_name = null; |
|
118 | + $value = null; |
|
119 | + // backward compat: we still want to find the question's ID |
|
120 | + if (is_numeric($question_system_id)) { |
|
121 | + // find this question's QST_system value |
|
122 | + $question_id = $question_system_id; |
|
123 | + $question_system_id = EEM_Question::instance()->get_var(array( array( 'QST_ID' => $question_system_id ) ), 'QST_system'); |
|
124 | + } else { |
|
125 | + $question_id = (int) EEM_Question::instance()->get_var(array( array( 'QST_system' => $question_system_id ) ), 'QST_ID'); |
|
126 | + } |
|
127 | + // only bother checking if the registration has an attendee |
|
128 | + if ($registration->attendee() instanceof EE_Attendee) { |
|
129 | + $field_name = EEM_Attendee::instance()->get_attendee_field_for_system_question($question_system_id); |
|
130 | + if ($field_name) { |
|
131 | + if ($pretty_answer) { |
|
132 | + if ($field_name === 'STA_ID') { |
|
133 | + $state = $registration->attendee()->state_obj(); |
|
134 | + $value = $state instanceof EE_State ? $state->name() : sprintf(esc_html__('Unknown State (%s)', 'event_espresso'), $registration->attendee()->state_ID()); |
|
135 | + } elseif ($field_name === 'CNT_ISO') { |
|
136 | + $country = $registration->attendee()->country_obj(); |
|
137 | + $value = $country instanceof EE_Country ? $country->name() : sprintf(esc_html__('Unknown Country (%s)', "event_espresso"), $registration->attendee()->country_ID()); |
|
138 | + } else { |
|
139 | + $value = $registration->attendee()->get_pretty($field_name); |
|
140 | + } |
|
141 | + // if field name is blank, leave the value as null too |
|
142 | + } else { |
|
143 | + $value = $registration->attendee()->get($field_name); |
|
144 | + } |
|
145 | + } |
|
146 | + // if no field was found, leave value blank |
|
147 | + } |
|
148 | + return apply_filters('FHEE__EEM_Answer__get_attendee_question_answer_value__answer_value', $value, $registration, $question_id, $question_system_id); |
|
149 | + } |
|
150 | 150 | } |
@@ -370,14 +370,14 @@ discard block |
||
370 | 370 | // and the table hasn't actually been created, this could have an error |
371 | 371 | /** @type WPDB $wpdb */ |
372 | 372 | global $wpdb; |
373 | - if ($this->_get_table_analysis()->tableExists($wpdb->prefix . 'esp_status')) { |
|
373 | + if ($this->_get_table_analysis()->tableExists($wpdb->prefix.'esp_status')) { |
|
374 | 374 | $results = $wpdb->get_results( |
375 | 375 | "SELECT STS_ID, STS_code FROM {$wpdb->prefix}esp_status WHERE STS_type = 'registration'" |
376 | 376 | ); |
377 | 377 | self::$_reg_status = array(); |
378 | 378 | foreach ($results as $status) { |
379 | - if (!in_array($status->STS_ID, $exclude, true)) { |
|
380 | - self::$_reg_status[ $status->STS_ID ] = $status->STS_code; |
|
379 | + if ( ! in_array($status->STS_ID, $exclude, true)) { |
|
380 | + self::$_reg_status[$status->STS_ID] = $status->STS_code; |
|
381 | 381 | } |
382 | 382 | } |
383 | 383 | } |
@@ -434,7 +434,7 @@ discard block |
||
434 | 434 | */ |
435 | 435 | public function get_all_registrations_for_attendee($ATT_ID = 0) |
436 | 436 | { |
437 | - if (!$ATT_ID) { |
|
437 | + if ( ! $ATT_ID) { |
|
438 | 438 | return null; |
439 | 439 | } |
440 | 440 | return $this->get_all(array(array('ATT_ID' => $ATT_ID))); |
@@ -451,7 +451,7 @@ discard block |
||
451 | 451 | */ |
452 | 452 | public function get_registration_for_reg_url_link($REG_url_link) |
453 | 453 | { |
454 | - if (!$REG_url_link) { |
|
454 | + if ( ! $REG_url_link) { |
|
455 | 455 | return null; |
456 | 456 | } |
457 | 457 | return $this->get_one(array(array('REG_url_link' => $REG_url_link))); |
@@ -502,7 +502,7 @@ discard block |
||
502 | 502 | 'REG_date' => array('>=', $sql_date), |
503 | 503 | 'STS_ID' => array('!=', EEM_Registration::status_id_incomplete), |
504 | 504 | ); |
505 | - if (!EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_day_report')) { |
|
505 | + if ( ! EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_day_report')) { |
|
506 | 506 | $where['Event.EVT_wp_user'] = get_current_user_id(); |
507 | 507 | } |
508 | 508 | $query_interval = EEH_DTT_Helper::get_sql_query_interval_for_offset($this->get_timezone(), 'REG_date'); |
@@ -514,7 +514,7 @@ discard block |
||
514 | 514 | ), |
515 | 515 | OBJECT, |
516 | 516 | array( |
517 | - 'regDate' => array('DATE(' . $query_interval . ')', '%s'), |
|
517 | + 'regDate' => array('DATE('.$query_interval.')', '%s'), |
|
518 | 518 | 'total' => array('count(REG_ID)', '%d'), |
519 | 519 | ) |
520 | 520 | ); |
@@ -534,7 +534,7 @@ discard block |
||
534 | 534 | public function get_registrations_per_day_and_per_status_report($period = '-1 month') |
535 | 535 | { |
536 | 536 | global $wpdb; |
537 | - $registration_table = $wpdb->prefix . 'esp_registration'; |
|
537 | + $registration_table = $wpdb->prefix.'esp_registration'; |
|
538 | 538 | $event_table = $wpdb->posts; |
539 | 539 | $sql_date = date('Y-m-d H:i:s', strtotime($period)); |
540 | 540 | // prepare the query interval for displaying offset |
@@ -543,9 +543,9 @@ discard block |
||
543 | 543 | $inner_date_query = "SELECT DISTINCT REG_date from {$registration_table} "; |
544 | 544 | $inner_where = ' WHERE'; |
545 | 545 | // exclude events not authored by user if permissions in effect |
546 | - if (!EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_event_report')) { |
|
546 | + if ( ! EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_event_report')) { |
|
547 | 547 | $inner_date_query .= "LEFT JOIN {$event_table} ON ID = EVT_ID"; |
548 | - $inner_where .= ' post_author = ' . get_current_user_id() . ' AND'; |
|
548 | + $inner_where .= ' post_author = '.get_current_user_id().' AND'; |
|
549 | 549 | } |
550 | 550 | $inner_where .= " REG_date >= '{$sql_date}'"; |
551 | 551 | $inner_date_query .= $inner_where; |
@@ -568,7 +568,7 @@ discard block |
||
568 | 568 | // setup the joins |
569 | 569 | $join .= implode(' LEFT JOIN ', $join_parts); |
570 | 570 | // now let's put it all together |
571 | - $query = $select . $join . ' GROUP BY Registration_REG_date'; |
|
571 | + $query = $select.$join.' GROUP BY Registration_REG_date'; |
|
572 | 572 | // and execute it |
573 | 573 | return $wpdb->get_results($query, ARRAY_A); |
574 | 574 | } |
@@ -595,7 +595,7 @@ discard block |
||
595 | 595 | 'STS_ID' => array('!=', EEM_Registration::status_id_incomplete), |
596 | 596 | ); |
597 | 597 | if ( |
598 | - !EE_Registry::instance()->CAP->current_user_can( |
|
598 | + ! EE_Registry::instance()->CAP->current_user_can( |
|
599 | 599 | 'ee_read_others_registrations', |
600 | 600 | 'reg_per_event_report' |
601 | 601 | ) |
@@ -631,16 +631,16 @@ discard block |
||
631 | 631 | public function get_registrations_per_event_and_per_status_report($period = '-1 month') |
632 | 632 | { |
633 | 633 | global $wpdb; |
634 | - $registration_table = $wpdb->prefix . 'esp_registration'; |
|
634 | + $registration_table = $wpdb->prefix.'esp_registration'; |
|
635 | 635 | $event_table = $wpdb->posts; |
636 | 636 | $sql_date = date('Y-m-d H:i:s', strtotime($period)); |
637 | 637 | // inner date query |
638 | 638 | $inner_date_query = "SELECT DISTINCT EVT_ID, REG_date from $registration_table "; |
639 | 639 | $inner_where = ' WHERE'; |
640 | 640 | // exclude events not authored by user if permissions in effect |
641 | - if (!EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_event_report')) { |
|
641 | + if ( ! EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_event_report')) { |
|
642 | 642 | $inner_date_query .= "LEFT JOIN {$event_table} ON ID = EVT_ID"; |
643 | - $inner_where .= ' post_author = ' . get_current_user_id() . ' AND'; |
|
643 | + $inner_where .= ' post_author = '.get_current_user_id().' AND'; |
|
644 | 644 | } |
645 | 645 | $inner_where .= " REG_date >= '{$sql_date}'"; |
646 | 646 | $inner_date_query .= $inner_where; |
@@ -663,7 +663,7 @@ discard block |
||
663 | 663 | // setup remaining joins |
664 | 664 | $join .= implode(' LEFT JOIN ', $join_parts); |
665 | 665 | // now put it all together |
666 | - $query = $select . $join . ' GROUP BY Registration_Event'; |
|
666 | + $query = $select.$join.' GROUP BY Registration_Event'; |
|
667 | 667 | // and execute |
668 | 668 | return $wpdb->get_results($query, ARRAY_A); |
669 | 669 | } |
@@ -678,7 +678,7 @@ discard block |
||
678 | 678 | */ |
679 | 679 | public function get_primary_registration_for_transaction_ID($TXN_ID = 0) |
680 | 680 | { |
681 | - if (!$TXN_ID) { |
|
681 | + if ( ! $TXN_ID) { |
|
682 | 682 | return null; |
683 | 683 | } |
684 | 684 | return $this->get_one(array( |
@@ -748,11 +748,11 @@ discard block |
||
748 | 748 | $query = $wpdb->prepare( |
749 | 749 | 'SELECT ' |
750 | 750 | . 'COUNT( DISTINCT checkins.REG_ID ) ' |
751 | - . 'FROM ' . EEM_Checkin::instance()->table() . ' AS checkins INNER JOIN' |
|
751 | + . 'FROM '.EEM_Checkin::instance()->table().' AS checkins INNER JOIN' |
|
752 | 752 | . '( SELECT ' |
753 | 753 | . 'max( CHK_timestamp ) AS latest_checkin, ' |
754 | 754 | . 'REG_ID AS REG_ID ' |
755 | - . 'FROM ' . EEM_Checkin::instance()->table() . ' ' |
|
755 | + . 'FROM '.EEM_Checkin::instance()->table().' ' |
|
756 | 756 | . 'WHERE DTT_ID=%d ' |
757 | 757 | . 'GROUP BY REG_ID' |
758 | 758 | . ') AS most_recent_checkin_per_reg ' |
@@ -782,12 +782,12 @@ discard block |
||
782 | 782 | $query = $wpdb->prepare( |
783 | 783 | 'SELECT ' |
784 | 784 | . 'COUNT( DISTINCT checkins.REG_ID ) ' |
785 | - . 'FROM ' . EEM_Checkin::instance()->table() . ' AS checkins INNER JOIN' |
|
785 | + . 'FROM '.EEM_Checkin::instance()->table().' AS checkins INNER JOIN' |
|
786 | 786 | . '( SELECT ' |
787 | 787 | . 'max( CHK_timestamp ) AS latest_checkin, ' |
788 | 788 | . 'REG_ID AS REG_ID ' |
789 | - . 'FROM ' . EEM_Checkin::instance()->table() . ' AS c ' |
|
790 | - . 'INNER JOIN ' . EEM_Datetime::instance()->table() . ' AS d ' |
|
789 | + . 'FROM '.EEM_Checkin::instance()->table().' AS c ' |
|
790 | + . 'INNER JOIN '.EEM_Datetime::instance()->table().' AS d ' |
|
791 | 791 | . 'ON c.DTT_ID=d.DTT_ID ' |
792 | 792 | . 'WHERE d.EVT_ID=%d ' |
793 | 793 | . 'GROUP BY REG_ID' |
@@ -816,7 +816,7 @@ discard block |
||
816 | 816 | { |
817 | 817 | // first do a native wp_query to get the latest REG_ID's matching these attendees. |
818 | 818 | global $wpdb; |
819 | - $registration_table = $wpdb->prefix . 'esp_registration'; |
|
819 | + $registration_table = $wpdb->prefix.'esp_registration'; |
|
820 | 820 | $attendee_table = $wpdb->posts; |
821 | 821 | $attendee_ids = is_array($attendee_ids) |
822 | 822 | ? array_map('absint', $attendee_ids) |
@@ -871,7 +871,7 @@ discard block |
||
871 | 871 | public function event_reg_count_for_statuses($EVT_ID, $statuses = array()) |
872 | 872 | { |
873 | 873 | $EVT_ID = absint($EVT_ID); |
874 | - if (! $EVT_ID) { |
|
874 | + if ( ! $EVT_ID) { |
|
875 | 875 | throw new InvalidArgumentException( |
876 | 876 | esc_html__('An invalid Event ID was supplied.', 'event_espresso') |
877 | 877 | ); |
@@ -880,7 +880,7 @@ discard block |
||
880 | 880 | $statuses = ! empty($statuses) ? $statuses : array(EEM_Registration::status_id_approved); |
881 | 881 | $valid_reg_statuses = EEM_Registration::reg_statuses(); |
882 | 882 | foreach ($statuses as $status) { |
883 | - if (! in_array($status, $valid_reg_statuses, true)) { |
|
883 | + if ( ! in_array($status, $valid_reg_statuses, true)) { |
|
884 | 884 | throw new InvalidStatusException($status, esc_html__('Registration', 'event_espresso')); |
885 | 885 | } |
886 | 886 | } |
@@ -13,817 +13,817 @@ discard block |
||
13 | 13 | */ |
14 | 14 | class EEM_Registration extends EEM_Soft_Delete_Base |
15 | 15 | { |
16 | - /** |
|
17 | - * @var EEM_Registration $_instance |
|
18 | - */ |
|
19 | - protected static $_instance; |
|
20 | - |
|
21 | - /** |
|
22 | - * Keys are the status IDs for registrations (eg, RAP, RCN, etc), and the values |
|
23 | - * are status codes (eg, approved, cancelled, etc) |
|
24 | - * |
|
25 | - * @var array |
|
26 | - */ |
|
27 | - private static $_reg_status; |
|
28 | - |
|
29 | - /** |
|
30 | - * The value of REG_count for a primary registrant |
|
31 | - */ |
|
32 | - const PRIMARY_REGISTRANT_COUNT = 1; |
|
33 | - |
|
34 | - /** |
|
35 | - * Status ID (STS_ID on esp_status table) to indicate an INCOMPLETE registration. |
|
36 | - * Initial status for registrations when they are first created |
|
37 | - * Payments are NOT allowed. |
|
38 | - * Automatically toggled to whatever the default Event registration status is upon completion of the attendee |
|
39 | - * information reg step NO space reserved. Registration is NOT active |
|
40 | - */ |
|
41 | - const status_id_incomplete = 'RIC'; |
|
42 | - |
|
43 | - /** |
|
44 | - * Status ID (STS_ID on esp_status table) to indicate an UNAPPROVED registration. |
|
45 | - * Payments are NOT allowed. |
|
46 | - * Event Admin must manually toggle STS_ID for it to change |
|
47 | - * No space reserved. |
|
48 | - * Registration is active |
|
49 | - */ |
|
50 | - const status_id_not_approved = 'RNA'; |
|
51 | - |
|
52 | - /** |
|
53 | - * Status ID (STS_ID on esp_status table) to indicate registration is PENDING_PAYMENT . |
|
54 | - * Payments are allowed. |
|
55 | - * STS_ID will automatically be toggled to RAP if payment is made in full by the attendee |
|
56 | - * No space reserved. |
|
57 | - * Registration is active |
|
58 | - */ |
|
59 | - const status_id_pending_payment = 'RPP'; |
|
60 | - |
|
61 | - /** |
|
62 | - * Status ID (STS_ID on esp_status table) to indicate registration is on the WAIT_LIST . |
|
63 | - * Payments are allowed. |
|
64 | - * STS_ID will automatically be toggled to RAP if payment is made in full by the attendee |
|
65 | - * No space reserved. |
|
66 | - * Registration is active |
|
67 | - */ |
|
68 | - const status_id_wait_list = 'RWL'; |
|
69 | - |
|
70 | - /** |
|
71 | - * Status ID (STS_ID on esp_status table) to indicate an APPROVED registration. |
|
72 | - * the TXN may or may not be completed ( paid in full ) |
|
73 | - * Payments are allowed. |
|
74 | - * A space IS reserved. |
|
75 | - * Registration is active |
|
76 | - */ |
|
77 | - const status_id_approved = 'RAP'; |
|
78 | - |
|
79 | - /** |
|
80 | - * Status ID (STS_ID on esp_status table) to indicate a registration was CANCELLED by the attendee. |
|
81 | - * Payments are NOT allowed. |
|
82 | - * NO space reserved. |
|
83 | - * Registration is NOT active |
|
84 | - */ |
|
85 | - const status_id_cancelled = 'RCN'; |
|
86 | - |
|
87 | - /** |
|
88 | - * Status ID (STS_ID on esp_status table) to indicate a registration was DECLINED by the Event Admin |
|
89 | - * Payments are NOT allowed. |
|
90 | - * No space reserved. |
|
91 | - * Registration is NOT active |
|
92 | - */ |
|
93 | - const status_id_declined = 'RDC'; |
|
94 | - |
|
95 | - /** |
|
96 | - * @var TableAnalysis $table_analysis |
|
97 | - */ |
|
98 | - protected $_table_analysis; |
|
99 | - |
|
100 | - |
|
101 | - /** |
|
102 | - * private constructor to prevent direct creation |
|
103 | - * |
|
104 | - * @Constructor |
|
105 | - * @access protected |
|
106 | - * @param string $timezone string representing the timezone we want to set for returned Date Time Strings (and any |
|
107 | - * incoming timezone data that gets saved). Note this just sends the timezone info to the |
|
108 | - * date time model field objects. Default is NULL (and will be assumed using the set |
|
109 | - * timezone in the 'timezone_string' wp option) |
|
110 | - * @throws EE_Error |
|
111 | - */ |
|
112 | - protected function __construct($timezone = null) |
|
113 | - { |
|
114 | - $this->_table_analysis = EE_Registry::instance()->create('TableAnalysis', array(), true); |
|
115 | - $this->singular_item = esc_html__('Registration', 'event_espresso'); |
|
116 | - $this->plural_item = esc_html__('Registrations', 'event_espresso'); |
|
117 | - $this->_tables = array( |
|
118 | - 'Registration' => new EE_Primary_Table('esp_registration', 'REG_ID'), |
|
119 | - ); |
|
120 | - $this->_fields = array( |
|
121 | - 'Registration' => array( |
|
122 | - 'REG_ID' => new EE_Primary_Key_Int_Field( |
|
123 | - 'REG_ID', |
|
124 | - esc_html__('Registration ID', 'event_espresso') |
|
125 | - ), |
|
126 | - 'EVT_ID' => new EE_Foreign_Key_Int_Field( |
|
127 | - 'EVT_ID', |
|
128 | - esc_html__('Event ID', 'event_espresso'), |
|
129 | - false, |
|
130 | - 0, |
|
131 | - 'Event' |
|
132 | - ), |
|
133 | - 'ATT_ID' => new EE_Foreign_Key_Int_Field( |
|
134 | - 'ATT_ID', |
|
135 | - esc_html__('Attendee ID', 'event_espresso'), |
|
136 | - false, |
|
137 | - 0, |
|
138 | - 'Attendee' |
|
139 | - ), |
|
140 | - 'TXN_ID' => new EE_Foreign_Key_Int_Field( |
|
141 | - 'TXN_ID', |
|
142 | - esc_html__('Transaction ID', 'event_espresso'), |
|
143 | - false, |
|
144 | - 0, |
|
145 | - 'Transaction' |
|
146 | - ), |
|
147 | - 'TKT_ID' => new EE_Foreign_Key_Int_Field( |
|
148 | - 'TKT_ID', |
|
149 | - esc_html__('Ticket ID', 'event_espresso'), |
|
150 | - false, |
|
151 | - 0, |
|
152 | - 'Ticket' |
|
153 | - ), |
|
154 | - 'STS_ID' => new EE_Foreign_Key_String_Field( |
|
155 | - 'STS_ID', |
|
156 | - esc_html__('Status ID', 'event_espresso'), |
|
157 | - false, |
|
158 | - EEM_Registration::status_id_incomplete, |
|
159 | - 'Status' |
|
160 | - ), |
|
161 | - 'REG_date' => new EE_Datetime_Field( |
|
162 | - 'REG_date', |
|
163 | - esc_html__('Time registration occurred', 'event_espresso'), |
|
164 | - false, |
|
165 | - EE_Datetime_Field::now, |
|
166 | - $timezone |
|
167 | - ), |
|
168 | - 'REG_final_price' => new EE_Money_Field( |
|
169 | - 'REG_final_price', |
|
170 | - esc_html__('Registration\'s share of the transaction total', 'event_espresso'), |
|
171 | - false, |
|
172 | - 0 |
|
173 | - ), |
|
174 | - 'REG_paid' => new EE_Money_Field( |
|
175 | - 'REG_paid', |
|
176 | - esc_html__('Amount paid to date towards registration', 'event_espresso'), |
|
177 | - false, |
|
178 | - 0 |
|
179 | - ), |
|
180 | - 'REG_session' => new EE_Plain_Text_Field( |
|
181 | - 'REG_session', |
|
182 | - esc_html__('Session ID of registration', 'event_espresso'), |
|
183 | - false, |
|
184 | - '' |
|
185 | - ), |
|
186 | - 'REG_code' => new EE_Plain_Text_Field( |
|
187 | - 'REG_code', |
|
188 | - esc_html__('Unique Code for this registration', 'event_espresso'), |
|
189 | - false, |
|
190 | - '' |
|
191 | - ), |
|
192 | - 'REG_url_link' => new EE_Plain_Text_Field( |
|
193 | - 'REG_url_link', |
|
194 | - esc_html__('String to be used in URL for identifying registration', 'event_espresso'), |
|
195 | - false, |
|
196 | - '' |
|
197 | - ), |
|
198 | - 'REG_count' => new EE_Integer_Field( |
|
199 | - 'REG_count', |
|
200 | - esc_html__('Count of this registration in the group registration ', 'event_espresso'), |
|
201 | - true, |
|
202 | - 1 |
|
203 | - ), |
|
204 | - 'REG_group_size' => new EE_Integer_Field( |
|
205 | - 'REG_group_size', |
|
206 | - esc_html__('Number of registrations on this group', 'event_espresso'), |
|
207 | - false, |
|
208 | - 1 |
|
209 | - ), |
|
210 | - 'REG_att_is_going' => new EE_Boolean_Field( |
|
211 | - 'REG_att_is_going', |
|
212 | - esc_html__('Flag indicating the registrant plans on attending', 'event_espresso'), |
|
213 | - false, |
|
214 | - false |
|
215 | - ), |
|
216 | - 'REG_deleted' => new EE_Trashed_Flag_Field( |
|
217 | - 'REG_deleted', |
|
218 | - esc_html__('Flag indicating if registration has been archived or not.', 'event_espresso'), |
|
219 | - false, |
|
220 | - false |
|
221 | - ), |
|
222 | - ), |
|
223 | - ); |
|
224 | - $this->_model_relations = array( |
|
225 | - 'Event' => new EE_Belongs_To_Relation(), |
|
226 | - 'Attendee' => new EE_Belongs_To_Relation(), |
|
227 | - 'Transaction' => new EE_Belongs_To_Relation(), |
|
228 | - 'Ticket' => new EE_Belongs_To_Relation(), |
|
229 | - 'Status' => new EE_Belongs_To_Relation(), |
|
230 | - 'Answer' => new EE_Has_Many_Relation(), |
|
231 | - 'Checkin' => new EE_Has_Many_Relation(), |
|
232 | - 'Registration_Payment' => new EE_Has_Many_Relation(), |
|
233 | - 'Payment' => new EE_HABTM_Relation('Registration_Payment'), |
|
234 | - 'Message' => new EE_Has_Many_Any_Relation(false) |
|
235 | - // allow deletes even if there are messages in the queue related |
|
236 | - ); |
|
237 | - $this->_model_chain_to_wp_user = 'Event'; |
|
238 | - parent::__construct($timezone); |
|
239 | - } |
|
240 | - |
|
241 | - |
|
242 | - /** |
|
243 | - * a list of ALL valid registration statuses currently in use within the system |
|
244 | - * generated by combining the filterable active and inactive reg status arrays |
|
245 | - * |
|
246 | - * @return array |
|
247 | - */ |
|
248 | - public static function reg_statuses() |
|
249 | - { |
|
250 | - return array_unique( |
|
251 | - array_merge( |
|
252 | - EEM_Registration::active_reg_statuses(), |
|
253 | - EEM_Registration::inactive_reg_statuses() |
|
254 | - ) |
|
255 | - ); |
|
256 | - } |
|
257 | - |
|
258 | - |
|
259 | - /** |
|
260 | - * reg_statuses_that_allow_payment |
|
261 | - * a filterable list of registration statuses that allow a registrant to make a payment |
|
262 | - * |
|
263 | - * @access public |
|
264 | - * @return array |
|
265 | - */ |
|
266 | - public static function reg_statuses_that_allow_payment() |
|
267 | - { |
|
268 | - return apply_filters( |
|
269 | - 'FHEE__EEM_Registration__reg_statuses_that_allow_payment', |
|
270 | - array( |
|
271 | - EEM_Registration::status_id_approved, |
|
272 | - EEM_Registration::status_id_pending_payment, |
|
273 | - ) |
|
274 | - ); |
|
275 | - } |
|
276 | - |
|
277 | - |
|
278 | - /** |
|
279 | - * active_reg_statuses |
|
280 | - * a filterable list of registration statuses that are considered active |
|
281 | - * |
|
282 | - * @access public |
|
283 | - * @return array |
|
284 | - */ |
|
285 | - public static function active_reg_statuses() |
|
286 | - { |
|
287 | - return apply_filters( |
|
288 | - 'FHEE__EEM_Registration__active_reg_statuses', |
|
289 | - array( |
|
290 | - EEM_Registration::status_id_approved, |
|
291 | - EEM_Registration::status_id_pending_payment, |
|
292 | - EEM_Registration::status_id_wait_list, |
|
293 | - EEM_Registration::status_id_not_approved, |
|
294 | - ) |
|
295 | - ); |
|
296 | - } |
|
297 | - |
|
298 | - |
|
299 | - /** |
|
300 | - * inactive_reg_statuses |
|
301 | - * a filterable list of registration statuses that are not considered active |
|
302 | - * |
|
303 | - * @access public |
|
304 | - * @return array |
|
305 | - */ |
|
306 | - public static function inactive_reg_statuses() |
|
307 | - { |
|
308 | - return apply_filters( |
|
309 | - 'FHEE__EEM_Registration__inactive_reg_statuses', |
|
310 | - array( |
|
311 | - EEM_Registration::status_id_incomplete, |
|
312 | - EEM_Registration::status_id_cancelled, |
|
313 | - EEM_Registration::status_id_declined, |
|
314 | - ) |
|
315 | - ); |
|
316 | - } |
|
317 | - |
|
318 | - |
|
319 | - /** |
|
320 | - * closed_reg_statuses |
|
321 | - * a filterable list of registration statuses that are considered "closed" |
|
322 | - * meaning they should not be considered in any calculations involving monies owing |
|
323 | - * |
|
324 | - * @access public |
|
325 | - * @return array |
|
326 | - */ |
|
327 | - public static function closed_reg_statuses() |
|
328 | - { |
|
329 | - return apply_filters( |
|
330 | - 'FHEE__EEM_Registration__closed_reg_statuses', |
|
331 | - array( |
|
332 | - EEM_Registration::status_id_cancelled, |
|
333 | - EEM_Registration::status_id_declined, |
|
334 | - EEM_Registration::status_id_wait_list, |
|
335 | - ) |
|
336 | - ); |
|
337 | - } |
|
338 | - |
|
339 | - |
|
340 | - /** |
|
341 | - * get list of registration statuses |
|
342 | - * |
|
343 | - * @access public |
|
344 | - * @param array $exclude The status ids to exclude from the returned results |
|
345 | - * @param bool $translated If true will return the values as singular localized strings |
|
346 | - * @return array |
|
347 | - * @throws EE_Error |
|
348 | - */ |
|
349 | - public static function reg_status_array($exclude = array(), $translated = false) |
|
350 | - { |
|
351 | - EEM_Registration::instance()->_get_registration_status_array($exclude); |
|
352 | - return $translated |
|
353 | - ? EEM_Status::instance()->localized_status(self::$_reg_status, false, 'sentence') |
|
354 | - : self::$_reg_status; |
|
355 | - } |
|
356 | - |
|
357 | - |
|
358 | - /** |
|
359 | - * get list of registration statuses |
|
360 | - * |
|
361 | - * @access private |
|
362 | - * @param array $exclude |
|
363 | - * @return void |
|
364 | - * @throws EE_Error |
|
365 | - */ |
|
366 | - private function _get_registration_status_array($exclude = array()) |
|
367 | - { |
|
368 | - // in the very rare circumstance that we are deleting a model's table's data |
|
369 | - // and the table hasn't actually been created, this could have an error |
|
370 | - /** @type WPDB $wpdb */ |
|
371 | - global $wpdb; |
|
372 | - if ($this->_get_table_analysis()->tableExists($wpdb->prefix . 'esp_status')) { |
|
373 | - $results = $wpdb->get_results( |
|
374 | - "SELECT STS_ID, STS_code FROM {$wpdb->prefix}esp_status WHERE STS_type = 'registration'" |
|
375 | - ); |
|
376 | - self::$_reg_status = array(); |
|
377 | - foreach ($results as $status) { |
|
378 | - if (!in_array($status->STS_ID, $exclude, true)) { |
|
379 | - self::$_reg_status[ $status->STS_ID ] = $status->STS_code; |
|
380 | - } |
|
381 | - } |
|
382 | - } |
|
383 | - } |
|
384 | - |
|
385 | - |
|
386 | - /** |
|
387 | - * Gets the injected table analyzer, or throws an exception |
|
388 | - * |
|
389 | - * @return TableAnalysis |
|
390 | - * @throws EE_Error |
|
391 | - */ |
|
392 | - protected function _get_table_analysis() |
|
393 | - { |
|
394 | - if ($this->_table_analysis instanceof TableAnalysis) { |
|
395 | - return $this->_table_analysis; |
|
396 | - } |
|
397 | - throw new EE_Error( |
|
398 | - sprintf( |
|
399 | - esc_html__('Table analysis class on class %1$s is not set properly.', 'event_espresso'), |
|
400 | - get_class($this) |
|
401 | - ) |
|
402 | - ); |
|
403 | - } |
|
404 | - |
|
405 | - |
|
406 | - /** |
|
407 | - * This returns a wpdb->results array of all registration date month and years matching the incoming query params |
|
408 | - * and grouped by month and year. |
|
409 | - * |
|
410 | - * @param array $where_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md#0-where-conditions |
|
411 | - * @return array |
|
412 | - * @throws EE_Error |
|
413 | - */ |
|
414 | - public function get_reg_months_and_years($where_params) |
|
415 | - { |
|
416 | - $query_params[0] = $where_params; |
|
417 | - $query_params['group_by'] = array('reg_year', 'reg_month'); |
|
418 | - $query_params['order_by'] = array('REG_date' => 'DESC'); |
|
419 | - $columns_to_select = array( |
|
420 | - 'reg_year' => array('YEAR(REG_date)', '%s'), |
|
421 | - 'reg_month' => array('MONTHNAME(REG_date)', '%s'), |
|
422 | - ); |
|
423 | - return $this->_get_all_wpdb_results($query_params, OBJECT, $columns_to_select); |
|
424 | - } |
|
425 | - |
|
426 | - |
|
427 | - /** |
|
428 | - * retrieve ALL registrations for a particular Attendee from db |
|
429 | - * |
|
430 | - * @param int $ATT_ID |
|
431 | - * @return EE_Base_Class[]|EE_Registration[]|null |
|
432 | - * @throws EE_Error |
|
433 | - */ |
|
434 | - public function get_all_registrations_for_attendee($ATT_ID = 0) |
|
435 | - { |
|
436 | - if (!$ATT_ID) { |
|
437 | - return null; |
|
438 | - } |
|
439 | - return $this->get_all(array(array('ATT_ID' => $ATT_ID))); |
|
440 | - } |
|
441 | - |
|
442 | - |
|
443 | - /** |
|
444 | - * Gets a registration given their REG_url_link. Yes, this should usually |
|
445 | - * be passed via a GET parameter. |
|
446 | - * |
|
447 | - * @param string $REG_url_link |
|
448 | - * @return EE_Base_Class|EE_Registration|null |
|
449 | - * @throws EE_Error |
|
450 | - */ |
|
451 | - public function get_registration_for_reg_url_link($REG_url_link) |
|
452 | - { |
|
453 | - if (!$REG_url_link) { |
|
454 | - return null; |
|
455 | - } |
|
456 | - return $this->get_one(array(array('REG_url_link' => $REG_url_link))); |
|
457 | - } |
|
458 | - |
|
459 | - |
|
460 | - /** |
|
461 | - * retrieve registration for a specific transaction attendee from db |
|
462 | - * |
|
463 | - * @access public |
|
464 | - * @param int $TXN_ID |
|
465 | - * @param int $ATT_ID |
|
466 | - * @param int $att_nmbr in case the ATT_ID is the same for multiple registrations (same details used) then the |
|
467 | - * attendee number is required |
|
468 | - * @return mixed array on success, FALSE on fail |
|
469 | - * @throws EE_Error |
|
470 | - */ |
|
471 | - public function get_registration_for_transaction_attendee($TXN_ID = 0, $ATT_ID = 0, $att_nmbr = 0) |
|
472 | - { |
|
473 | - return $this->get_one(array( |
|
474 | - array( |
|
475 | - 'TXN_ID' => $TXN_ID, |
|
476 | - 'ATT_ID' => $ATT_ID, |
|
477 | - ), |
|
478 | - 'limit' => array(min($att_nmbr - 1, 0), 1), |
|
479 | - )); |
|
480 | - } |
|
481 | - |
|
482 | - |
|
483 | - /** |
|
484 | - * get the number of registrations per day for the Registration Admin page Reports Tab. |
|
485 | - * (doesn't utilize models because it's a fairly specialized query) |
|
486 | - * |
|
487 | - * @access public |
|
488 | - * @param $period string which can be passed to php's strtotime function (eg "-1 month") |
|
489 | - * @return stdClass[] with properties regDate and total |
|
490 | - * @throws EE_Error |
|
491 | - */ |
|
492 | - public function get_registrations_per_day_report($period = '-1 month') |
|
493 | - { |
|
494 | - $sql_date = $this->convert_datetime_for_query( |
|
495 | - 'REG_date', |
|
496 | - date('Y-m-d H:i:s', strtotime($period)), |
|
497 | - 'Y-m-d H:i:s', |
|
498 | - 'UTC' |
|
499 | - ); |
|
500 | - $where = array( |
|
501 | - 'REG_date' => array('>=', $sql_date), |
|
502 | - 'STS_ID' => array('!=', EEM_Registration::status_id_incomplete), |
|
503 | - ); |
|
504 | - if (!EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_day_report')) { |
|
505 | - $where['Event.EVT_wp_user'] = get_current_user_id(); |
|
506 | - } |
|
507 | - $query_interval = EEH_DTT_Helper::get_sql_query_interval_for_offset($this->get_timezone(), 'REG_date'); |
|
508 | - $results = $this->_get_all_wpdb_results( |
|
509 | - array( |
|
510 | - $where, |
|
511 | - 'group_by' => 'regDate', |
|
512 | - 'order_by' => array('REG_date' => 'ASC'), |
|
513 | - ), |
|
514 | - OBJECT, |
|
515 | - array( |
|
516 | - 'regDate' => array('DATE(' . $query_interval . ')', '%s'), |
|
517 | - 'total' => array('count(REG_ID)', '%d'), |
|
518 | - ) |
|
519 | - ); |
|
520 | - return $results; |
|
521 | - } |
|
522 | - |
|
523 | - |
|
524 | - /** |
|
525 | - * Get the number of registrations per day including the count of registrations for each Registration Status. |
|
526 | - * Note: EEM_Registration::status_id_incomplete registrations are excluded from the results. |
|
527 | - * |
|
528 | - * @param string $period |
|
529 | - * @return stdClass[] with properties Registration_REG_date and a column for each registration status as the STS_ID |
|
530 | - * @throws EE_Error |
|
531 | - * (i.e. RAP) |
|
532 | - */ |
|
533 | - public function get_registrations_per_day_and_per_status_report($period = '-1 month') |
|
534 | - { |
|
535 | - global $wpdb; |
|
536 | - $registration_table = $wpdb->prefix . 'esp_registration'; |
|
537 | - $event_table = $wpdb->posts; |
|
538 | - $sql_date = date('Y-m-d H:i:s', strtotime($period)); |
|
539 | - // prepare the query interval for displaying offset |
|
540 | - $query_interval = EEH_DTT_Helper::get_sql_query_interval_for_offset($this->get_timezone(), 'dates.REG_date'); |
|
541 | - // inner date query |
|
542 | - $inner_date_query = "SELECT DISTINCT REG_date from {$registration_table} "; |
|
543 | - $inner_where = ' WHERE'; |
|
544 | - // exclude events not authored by user if permissions in effect |
|
545 | - if (!EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_event_report')) { |
|
546 | - $inner_date_query .= "LEFT JOIN {$event_table} ON ID = EVT_ID"; |
|
547 | - $inner_where .= ' post_author = ' . get_current_user_id() . ' AND'; |
|
548 | - } |
|
549 | - $inner_where .= " REG_date >= '{$sql_date}'"; |
|
550 | - $inner_date_query .= $inner_where; |
|
551 | - // start main query |
|
552 | - $select = "SELECT DATE({$query_interval}) as Registration_REG_date, "; |
|
553 | - $join = ''; |
|
554 | - $join_parts = array(); |
|
555 | - $select_parts = array(); |
|
556 | - // loop through registration stati to do parts for each status. |
|
557 | - foreach (EEM_Registration::reg_status_array() as $STS_ID => $STS_code) { |
|
558 | - if ($STS_ID === EEM_Registration::status_id_incomplete) { |
|
559 | - continue; |
|
560 | - } |
|
561 | - $select_parts[] = "COUNT({$STS_code}.REG_ID) as {$STS_ID}"; |
|
562 | - $join_parts[] = "{$registration_table} AS {$STS_code} ON {$STS_code}.REG_date = dates.REG_date AND {$STS_code}.STS_ID = '{$STS_ID}'"; |
|
563 | - } |
|
564 | - // setup the selects |
|
565 | - $select .= implode(', ', $select_parts); |
|
566 | - $select .= " FROM ($inner_date_query) AS dates LEFT JOIN "; |
|
567 | - // setup the joins |
|
568 | - $join .= implode(' LEFT JOIN ', $join_parts); |
|
569 | - // now let's put it all together |
|
570 | - $query = $select . $join . ' GROUP BY Registration_REG_date'; |
|
571 | - // and execute it |
|
572 | - return $wpdb->get_results($query, ARRAY_A); |
|
573 | - } |
|
574 | - |
|
575 | - |
|
576 | - /** |
|
577 | - * get the number of registrations per event for the Registration Admin page Reports Tab |
|
578 | - * |
|
579 | - * @access public |
|
580 | - * @param $period string which can be passed to php's strtotime function (eg "-1 month") |
|
581 | - * @return stdClass[] each with properties event_name, reg_limit, and total |
|
582 | - * @throws EE_Error |
|
583 | - */ |
|
584 | - public function get_registrations_per_event_report($period = '-1 month') |
|
585 | - { |
|
586 | - $date_sql = $this->convert_datetime_for_query( |
|
587 | - 'REG_date', |
|
588 | - date('Y-m-d H:i:s', strtotime($period)), |
|
589 | - 'Y-m-d H:i:s', |
|
590 | - 'UTC' |
|
591 | - ); |
|
592 | - $where = array( |
|
593 | - 'REG_date' => array('>=', $date_sql), |
|
594 | - 'STS_ID' => array('!=', EEM_Registration::status_id_incomplete), |
|
595 | - ); |
|
596 | - if ( |
|
597 | - !EE_Registry::instance()->CAP->current_user_can( |
|
598 | - 'ee_read_others_registrations', |
|
599 | - 'reg_per_event_report' |
|
600 | - ) |
|
601 | - ) { |
|
602 | - $where['Event.EVT_wp_user'] = get_current_user_id(); |
|
603 | - } |
|
604 | - $results = $this->_get_all_wpdb_results( |
|
605 | - array( |
|
606 | - $where, |
|
607 | - 'group_by' => 'Event.EVT_name', |
|
608 | - 'order_by' => 'Event.EVT_name', |
|
609 | - 'limit' => array(0, 24), |
|
610 | - ), |
|
611 | - OBJECT, |
|
612 | - array( |
|
613 | - 'event_name' => array('Event_CPT.post_title', '%s'), |
|
614 | - 'total' => array('COUNT(REG_ID)', '%s'), |
|
615 | - ) |
|
616 | - ); |
|
617 | - return $results; |
|
618 | - } |
|
619 | - |
|
620 | - |
|
621 | - /** |
|
622 | - * Get the number of registrations per event grouped by registration status. |
|
623 | - * Note: EEM_Registration::status_id_incomplete registrations are excluded from the results. |
|
624 | - * |
|
625 | - * @param string $period |
|
626 | - * @return stdClass[] with properties `Registration_Event` and a column for each registration status as the STS_ID |
|
627 | - * @throws EE_Error |
|
628 | - * (i.e. RAP) |
|
629 | - */ |
|
630 | - public function get_registrations_per_event_and_per_status_report($period = '-1 month') |
|
631 | - { |
|
632 | - global $wpdb; |
|
633 | - $registration_table = $wpdb->prefix . 'esp_registration'; |
|
634 | - $event_table = $wpdb->posts; |
|
635 | - $sql_date = date('Y-m-d H:i:s', strtotime($period)); |
|
636 | - // inner date query |
|
637 | - $inner_date_query = "SELECT DISTINCT EVT_ID, REG_date from $registration_table "; |
|
638 | - $inner_where = ' WHERE'; |
|
639 | - // exclude events not authored by user if permissions in effect |
|
640 | - if (!EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_event_report')) { |
|
641 | - $inner_date_query .= "LEFT JOIN {$event_table} ON ID = EVT_ID"; |
|
642 | - $inner_where .= ' post_author = ' . get_current_user_id() . ' AND'; |
|
643 | - } |
|
644 | - $inner_where .= " REG_date >= '{$sql_date}'"; |
|
645 | - $inner_date_query .= $inner_where; |
|
646 | - // build main query |
|
647 | - $select = 'SELECT Event.post_title as Registration_Event, '; |
|
648 | - $join = ''; |
|
649 | - $join_parts = array(); |
|
650 | - $select_parts = array(); |
|
651 | - // loop through registration stati to do parts for each status. |
|
652 | - foreach (EEM_Registration::reg_status_array() as $STS_ID => $STS_code) { |
|
653 | - if ($STS_ID === EEM_Registration::status_id_incomplete) { |
|
654 | - continue; |
|
655 | - } |
|
656 | - $select_parts[] = "COUNT({$STS_code}.REG_ID) as {$STS_ID}"; |
|
657 | - $join_parts[] = "{$registration_table} AS {$STS_code} ON {$STS_code}.EVT_ID = dates.EVT_ID AND {$STS_code}.STS_ID = '{$STS_ID}' AND {$STS_code}.REG_date = dates.REG_date"; |
|
658 | - } |
|
659 | - // setup the selects |
|
660 | - $select .= implode(', ', $select_parts); |
|
661 | - $select .= " FROM ($inner_date_query) AS dates LEFT JOIN $event_table as Event ON Event.ID = dates.EVT_ID LEFT JOIN "; |
|
662 | - // setup remaining joins |
|
663 | - $join .= implode(' LEFT JOIN ', $join_parts); |
|
664 | - // now put it all together |
|
665 | - $query = $select . $join . ' GROUP BY Registration_Event'; |
|
666 | - // and execute |
|
667 | - return $wpdb->get_results($query, ARRAY_A); |
|
668 | - } |
|
669 | - |
|
670 | - |
|
671 | - /** |
|
672 | - * Returns the EE_Registration of the primary attendee on the transaction id provided |
|
673 | - * |
|
674 | - * @param int $TXN_ID |
|
675 | - * @return EE_Base_Class|EE_Registration|null |
|
676 | - * @throws EE_Error |
|
677 | - */ |
|
678 | - public function get_primary_registration_for_transaction_ID($TXN_ID = 0) |
|
679 | - { |
|
680 | - if (!$TXN_ID) { |
|
681 | - return null; |
|
682 | - } |
|
683 | - return $this->get_one(array( |
|
684 | - array( |
|
685 | - 'TXN_ID' => $TXN_ID, |
|
686 | - 'REG_count' => EEM_Registration::PRIMARY_REGISTRANT_COUNT, |
|
687 | - ), |
|
688 | - )); |
|
689 | - } |
|
690 | - |
|
691 | - |
|
692 | - /** |
|
693 | - * get_event_registration_count |
|
694 | - * |
|
695 | - * @access public |
|
696 | - * @param int $EVT_ID |
|
697 | - * @param boolean $for_incomplete_payments |
|
698 | - * @return int |
|
699 | - * @throws EE_Error |
|
700 | - */ |
|
701 | - public function get_event_registration_count($EVT_ID, $for_incomplete_payments = false) |
|
702 | - { |
|
703 | - // we only count approved registrations towards registration limits |
|
704 | - $query_params = array(array('EVT_ID' => $EVT_ID, 'STS_ID' => self::status_id_approved)); |
|
705 | - if ($for_incomplete_payments) { |
|
706 | - $query_params[0]['Transaction.STS_ID'] = array('!=', EEM_Transaction::complete_status_code); |
|
707 | - } |
|
708 | - return $this->count($query_params); |
|
709 | - } |
|
710 | - |
|
711 | - |
|
712 | - /** |
|
713 | - * Deletes all registrations with no transactions. Note that this needs to be very efficient |
|
714 | - * and so it uses wpdb directly. Also, we can't put a limit on this because MySQL doesn't allow a limit on a delete |
|
715 | - * when joining tables like this. |
|
716 | - * |
|
717 | - * @global WPDB $wpdb |
|
718 | - * @return int number deleted |
|
719 | - * @throws EE_Error |
|
720 | - */ |
|
721 | - public function delete_registrations_with_no_transaction() |
|
722 | - { |
|
723 | - /** @type WPDB $wpdb */ |
|
724 | - global $wpdb; |
|
725 | - return $wpdb->query( |
|
726 | - 'DELETE r FROM ' |
|
727 | - . $this->table() |
|
728 | - . ' r LEFT JOIN ' |
|
729 | - . EEM_Transaction::instance()->table() |
|
730 | - . ' t ON r.TXN_ID = t.TXN_ID WHERE t.TXN_ID IS NULL' |
|
731 | - ); |
|
732 | - } |
|
733 | - |
|
734 | - |
|
735 | - /** |
|
736 | - * Count registrations checked into (or out of) a datetime |
|
737 | - * |
|
738 | - * @param int $DTT_ID datetime ID |
|
739 | - * @param boolean $checked_in whether to count registrations checked IN or OUT |
|
740 | - * @return int |
|
741 | - * @throws EE_Error |
|
742 | - */ |
|
743 | - public function count_registrations_checked_into_datetime($DTT_ID, $checked_in = true) |
|
744 | - { |
|
745 | - global $wpdb; |
|
746 | - // subquery to get latest checkin |
|
747 | - $query = $wpdb->prepare( |
|
748 | - 'SELECT ' |
|
749 | - . 'COUNT( DISTINCT checkins.REG_ID ) ' |
|
750 | - . 'FROM ' . EEM_Checkin::instance()->table() . ' AS checkins INNER JOIN' |
|
751 | - . '( SELECT ' |
|
752 | - . 'max( CHK_timestamp ) AS latest_checkin, ' |
|
753 | - . 'REG_ID AS REG_ID ' |
|
754 | - . 'FROM ' . EEM_Checkin::instance()->table() . ' ' |
|
755 | - . 'WHERE DTT_ID=%d ' |
|
756 | - . 'GROUP BY REG_ID' |
|
757 | - . ') AS most_recent_checkin_per_reg ' |
|
758 | - . 'ON checkins.REG_ID=most_recent_checkin_per_reg.REG_ID ' |
|
759 | - . 'AND checkins.CHK_timestamp = most_recent_checkin_per_reg.latest_checkin ' |
|
760 | - . 'WHERE ' |
|
761 | - . 'checkins.CHK_in=%d', |
|
762 | - $DTT_ID, |
|
763 | - $checked_in |
|
764 | - ); |
|
765 | - return (int) $wpdb->get_var($query); |
|
766 | - } |
|
767 | - |
|
768 | - |
|
769 | - /** |
|
770 | - * Count registrations checked into (or out of) an event. |
|
771 | - * |
|
772 | - * @param int $EVT_ID event ID |
|
773 | - * @param boolean $checked_in whether to count registrations checked IN or OUT |
|
774 | - * @return int |
|
775 | - * @throws EE_Error |
|
776 | - */ |
|
777 | - public function count_registrations_checked_into_event($EVT_ID, $checked_in = true) |
|
778 | - { |
|
779 | - global $wpdb; |
|
780 | - // subquery to get latest checkin |
|
781 | - $query = $wpdb->prepare( |
|
782 | - 'SELECT ' |
|
783 | - . 'COUNT( DISTINCT checkins.REG_ID ) ' |
|
784 | - . 'FROM ' . EEM_Checkin::instance()->table() . ' AS checkins INNER JOIN' |
|
785 | - . '( SELECT ' |
|
786 | - . 'max( CHK_timestamp ) AS latest_checkin, ' |
|
787 | - . 'REG_ID AS REG_ID ' |
|
788 | - . 'FROM ' . EEM_Checkin::instance()->table() . ' AS c ' |
|
789 | - . 'INNER JOIN ' . EEM_Datetime::instance()->table() . ' AS d ' |
|
790 | - . 'ON c.DTT_ID=d.DTT_ID ' |
|
791 | - . 'WHERE d.EVT_ID=%d ' |
|
792 | - . 'GROUP BY REG_ID' |
|
793 | - . ') AS most_recent_checkin_per_reg ' |
|
794 | - . 'ON checkins.REG_ID=most_recent_checkin_per_reg.REG_ID ' |
|
795 | - . 'AND checkins.CHK_timestamp = most_recent_checkin_per_reg.latest_checkin ' |
|
796 | - . 'WHERE ' |
|
797 | - . 'checkins.CHK_in=%d', |
|
798 | - $EVT_ID, |
|
799 | - $checked_in |
|
800 | - ); |
|
801 | - return (int) $wpdb->get_var($query); |
|
802 | - } |
|
803 | - |
|
804 | - |
|
805 | - /** |
|
806 | - * The purpose of this method is to retrieve an array of |
|
807 | - * EE_Registration objects that represent the latest registration |
|
808 | - * for each ATT_ID given in the function argument. |
|
809 | - * |
|
810 | - * @param array $attendee_ids |
|
811 | - * @return EE_Base_Class[]|EE_Registration[] |
|
812 | - * @throws EE_Error |
|
813 | - */ |
|
814 | - public function get_latest_registration_for_each_of_given_contacts($attendee_ids = array()) |
|
815 | - { |
|
816 | - // first do a native wp_query to get the latest REG_ID's matching these attendees. |
|
817 | - global $wpdb; |
|
818 | - $registration_table = $wpdb->prefix . 'esp_registration'; |
|
819 | - $attendee_table = $wpdb->posts; |
|
820 | - $attendee_ids = is_array($attendee_ids) |
|
821 | - ? array_map('absint', $attendee_ids) |
|
822 | - : array((int) $attendee_ids); |
|
823 | - $ATT_IDs = implode(',', $attendee_ids); |
|
824 | - // first we do a query to get the registration ids |
|
825 | - // (because a group by before order by causes the order by to be ignored.) |
|
826 | - $registration_id_query = " |
|
16 | + /** |
|
17 | + * @var EEM_Registration $_instance |
|
18 | + */ |
|
19 | + protected static $_instance; |
|
20 | + |
|
21 | + /** |
|
22 | + * Keys are the status IDs for registrations (eg, RAP, RCN, etc), and the values |
|
23 | + * are status codes (eg, approved, cancelled, etc) |
|
24 | + * |
|
25 | + * @var array |
|
26 | + */ |
|
27 | + private static $_reg_status; |
|
28 | + |
|
29 | + /** |
|
30 | + * The value of REG_count for a primary registrant |
|
31 | + */ |
|
32 | + const PRIMARY_REGISTRANT_COUNT = 1; |
|
33 | + |
|
34 | + /** |
|
35 | + * Status ID (STS_ID on esp_status table) to indicate an INCOMPLETE registration. |
|
36 | + * Initial status for registrations when they are first created |
|
37 | + * Payments are NOT allowed. |
|
38 | + * Automatically toggled to whatever the default Event registration status is upon completion of the attendee |
|
39 | + * information reg step NO space reserved. Registration is NOT active |
|
40 | + */ |
|
41 | + const status_id_incomplete = 'RIC'; |
|
42 | + |
|
43 | + /** |
|
44 | + * Status ID (STS_ID on esp_status table) to indicate an UNAPPROVED registration. |
|
45 | + * Payments are NOT allowed. |
|
46 | + * Event Admin must manually toggle STS_ID for it to change |
|
47 | + * No space reserved. |
|
48 | + * Registration is active |
|
49 | + */ |
|
50 | + const status_id_not_approved = 'RNA'; |
|
51 | + |
|
52 | + /** |
|
53 | + * Status ID (STS_ID on esp_status table) to indicate registration is PENDING_PAYMENT . |
|
54 | + * Payments are allowed. |
|
55 | + * STS_ID will automatically be toggled to RAP if payment is made in full by the attendee |
|
56 | + * No space reserved. |
|
57 | + * Registration is active |
|
58 | + */ |
|
59 | + const status_id_pending_payment = 'RPP'; |
|
60 | + |
|
61 | + /** |
|
62 | + * Status ID (STS_ID on esp_status table) to indicate registration is on the WAIT_LIST . |
|
63 | + * Payments are allowed. |
|
64 | + * STS_ID will automatically be toggled to RAP if payment is made in full by the attendee |
|
65 | + * No space reserved. |
|
66 | + * Registration is active |
|
67 | + */ |
|
68 | + const status_id_wait_list = 'RWL'; |
|
69 | + |
|
70 | + /** |
|
71 | + * Status ID (STS_ID on esp_status table) to indicate an APPROVED registration. |
|
72 | + * the TXN may or may not be completed ( paid in full ) |
|
73 | + * Payments are allowed. |
|
74 | + * A space IS reserved. |
|
75 | + * Registration is active |
|
76 | + */ |
|
77 | + const status_id_approved = 'RAP'; |
|
78 | + |
|
79 | + /** |
|
80 | + * Status ID (STS_ID on esp_status table) to indicate a registration was CANCELLED by the attendee. |
|
81 | + * Payments are NOT allowed. |
|
82 | + * NO space reserved. |
|
83 | + * Registration is NOT active |
|
84 | + */ |
|
85 | + const status_id_cancelled = 'RCN'; |
|
86 | + |
|
87 | + /** |
|
88 | + * Status ID (STS_ID on esp_status table) to indicate a registration was DECLINED by the Event Admin |
|
89 | + * Payments are NOT allowed. |
|
90 | + * No space reserved. |
|
91 | + * Registration is NOT active |
|
92 | + */ |
|
93 | + const status_id_declined = 'RDC'; |
|
94 | + |
|
95 | + /** |
|
96 | + * @var TableAnalysis $table_analysis |
|
97 | + */ |
|
98 | + protected $_table_analysis; |
|
99 | + |
|
100 | + |
|
101 | + /** |
|
102 | + * private constructor to prevent direct creation |
|
103 | + * |
|
104 | + * @Constructor |
|
105 | + * @access protected |
|
106 | + * @param string $timezone string representing the timezone we want to set for returned Date Time Strings (and any |
|
107 | + * incoming timezone data that gets saved). Note this just sends the timezone info to the |
|
108 | + * date time model field objects. Default is NULL (and will be assumed using the set |
|
109 | + * timezone in the 'timezone_string' wp option) |
|
110 | + * @throws EE_Error |
|
111 | + */ |
|
112 | + protected function __construct($timezone = null) |
|
113 | + { |
|
114 | + $this->_table_analysis = EE_Registry::instance()->create('TableAnalysis', array(), true); |
|
115 | + $this->singular_item = esc_html__('Registration', 'event_espresso'); |
|
116 | + $this->plural_item = esc_html__('Registrations', 'event_espresso'); |
|
117 | + $this->_tables = array( |
|
118 | + 'Registration' => new EE_Primary_Table('esp_registration', 'REG_ID'), |
|
119 | + ); |
|
120 | + $this->_fields = array( |
|
121 | + 'Registration' => array( |
|
122 | + 'REG_ID' => new EE_Primary_Key_Int_Field( |
|
123 | + 'REG_ID', |
|
124 | + esc_html__('Registration ID', 'event_espresso') |
|
125 | + ), |
|
126 | + 'EVT_ID' => new EE_Foreign_Key_Int_Field( |
|
127 | + 'EVT_ID', |
|
128 | + esc_html__('Event ID', 'event_espresso'), |
|
129 | + false, |
|
130 | + 0, |
|
131 | + 'Event' |
|
132 | + ), |
|
133 | + 'ATT_ID' => new EE_Foreign_Key_Int_Field( |
|
134 | + 'ATT_ID', |
|
135 | + esc_html__('Attendee ID', 'event_espresso'), |
|
136 | + false, |
|
137 | + 0, |
|
138 | + 'Attendee' |
|
139 | + ), |
|
140 | + 'TXN_ID' => new EE_Foreign_Key_Int_Field( |
|
141 | + 'TXN_ID', |
|
142 | + esc_html__('Transaction ID', 'event_espresso'), |
|
143 | + false, |
|
144 | + 0, |
|
145 | + 'Transaction' |
|
146 | + ), |
|
147 | + 'TKT_ID' => new EE_Foreign_Key_Int_Field( |
|
148 | + 'TKT_ID', |
|
149 | + esc_html__('Ticket ID', 'event_espresso'), |
|
150 | + false, |
|
151 | + 0, |
|
152 | + 'Ticket' |
|
153 | + ), |
|
154 | + 'STS_ID' => new EE_Foreign_Key_String_Field( |
|
155 | + 'STS_ID', |
|
156 | + esc_html__('Status ID', 'event_espresso'), |
|
157 | + false, |
|
158 | + EEM_Registration::status_id_incomplete, |
|
159 | + 'Status' |
|
160 | + ), |
|
161 | + 'REG_date' => new EE_Datetime_Field( |
|
162 | + 'REG_date', |
|
163 | + esc_html__('Time registration occurred', 'event_espresso'), |
|
164 | + false, |
|
165 | + EE_Datetime_Field::now, |
|
166 | + $timezone |
|
167 | + ), |
|
168 | + 'REG_final_price' => new EE_Money_Field( |
|
169 | + 'REG_final_price', |
|
170 | + esc_html__('Registration\'s share of the transaction total', 'event_espresso'), |
|
171 | + false, |
|
172 | + 0 |
|
173 | + ), |
|
174 | + 'REG_paid' => new EE_Money_Field( |
|
175 | + 'REG_paid', |
|
176 | + esc_html__('Amount paid to date towards registration', 'event_espresso'), |
|
177 | + false, |
|
178 | + 0 |
|
179 | + ), |
|
180 | + 'REG_session' => new EE_Plain_Text_Field( |
|
181 | + 'REG_session', |
|
182 | + esc_html__('Session ID of registration', 'event_espresso'), |
|
183 | + false, |
|
184 | + '' |
|
185 | + ), |
|
186 | + 'REG_code' => new EE_Plain_Text_Field( |
|
187 | + 'REG_code', |
|
188 | + esc_html__('Unique Code for this registration', 'event_espresso'), |
|
189 | + false, |
|
190 | + '' |
|
191 | + ), |
|
192 | + 'REG_url_link' => new EE_Plain_Text_Field( |
|
193 | + 'REG_url_link', |
|
194 | + esc_html__('String to be used in URL for identifying registration', 'event_espresso'), |
|
195 | + false, |
|
196 | + '' |
|
197 | + ), |
|
198 | + 'REG_count' => new EE_Integer_Field( |
|
199 | + 'REG_count', |
|
200 | + esc_html__('Count of this registration in the group registration ', 'event_espresso'), |
|
201 | + true, |
|
202 | + 1 |
|
203 | + ), |
|
204 | + 'REG_group_size' => new EE_Integer_Field( |
|
205 | + 'REG_group_size', |
|
206 | + esc_html__('Number of registrations on this group', 'event_espresso'), |
|
207 | + false, |
|
208 | + 1 |
|
209 | + ), |
|
210 | + 'REG_att_is_going' => new EE_Boolean_Field( |
|
211 | + 'REG_att_is_going', |
|
212 | + esc_html__('Flag indicating the registrant plans on attending', 'event_espresso'), |
|
213 | + false, |
|
214 | + false |
|
215 | + ), |
|
216 | + 'REG_deleted' => new EE_Trashed_Flag_Field( |
|
217 | + 'REG_deleted', |
|
218 | + esc_html__('Flag indicating if registration has been archived or not.', 'event_espresso'), |
|
219 | + false, |
|
220 | + false |
|
221 | + ), |
|
222 | + ), |
|
223 | + ); |
|
224 | + $this->_model_relations = array( |
|
225 | + 'Event' => new EE_Belongs_To_Relation(), |
|
226 | + 'Attendee' => new EE_Belongs_To_Relation(), |
|
227 | + 'Transaction' => new EE_Belongs_To_Relation(), |
|
228 | + 'Ticket' => new EE_Belongs_To_Relation(), |
|
229 | + 'Status' => new EE_Belongs_To_Relation(), |
|
230 | + 'Answer' => new EE_Has_Many_Relation(), |
|
231 | + 'Checkin' => new EE_Has_Many_Relation(), |
|
232 | + 'Registration_Payment' => new EE_Has_Many_Relation(), |
|
233 | + 'Payment' => new EE_HABTM_Relation('Registration_Payment'), |
|
234 | + 'Message' => new EE_Has_Many_Any_Relation(false) |
|
235 | + // allow deletes even if there are messages in the queue related |
|
236 | + ); |
|
237 | + $this->_model_chain_to_wp_user = 'Event'; |
|
238 | + parent::__construct($timezone); |
|
239 | + } |
|
240 | + |
|
241 | + |
|
242 | + /** |
|
243 | + * a list of ALL valid registration statuses currently in use within the system |
|
244 | + * generated by combining the filterable active and inactive reg status arrays |
|
245 | + * |
|
246 | + * @return array |
|
247 | + */ |
|
248 | + public static function reg_statuses() |
|
249 | + { |
|
250 | + return array_unique( |
|
251 | + array_merge( |
|
252 | + EEM_Registration::active_reg_statuses(), |
|
253 | + EEM_Registration::inactive_reg_statuses() |
|
254 | + ) |
|
255 | + ); |
|
256 | + } |
|
257 | + |
|
258 | + |
|
259 | + /** |
|
260 | + * reg_statuses_that_allow_payment |
|
261 | + * a filterable list of registration statuses that allow a registrant to make a payment |
|
262 | + * |
|
263 | + * @access public |
|
264 | + * @return array |
|
265 | + */ |
|
266 | + public static function reg_statuses_that_allow_payment() |
|
267 | + { |
|
268 | + return apply_filters( |
|
269 | + 'FHEE__EEM_Registration__reg_statuses_that_allow_payment', |
|
270 | + array( |
|
271 | + EEM_Registration::status_id_approved, |
|
272 | + EEM_Registration::status_id_pending_payment, |
|
273 | + ) |
|
274 | + ); |
|
275 | + } |
|
276 | + |
|
277 | + |
|
278 | + /** |
|
279 | + * active_reg_statuses |
|
280 | + * a filterable list of registration statuses that are considered active |
|
281 | + * |
|
282 | + * @access public |
|
283 | + * @return array |
|
284 | + */ |
|
285 | + public static function active_reg_statuses() |
|
286 | + { |
|
287 | + return apply_filters( |
|
288 | + 'FHEE__EEM_Registration__active_reg_statuses', |
|
289 | + array( |
|
290 | + EEM_Registration::status_id_approved, |
|
291 | + EEM_Registration::status_id_pending_payment, |
|
292 | + EEM_Registration::status_id_wait_list, |
|
293 | + EEM_Registration::status_id_not_approved, |
|
294 | + ) |
|
295 | + ); |
|
296 | + } |
|
297 | + |
|
298 | + |
|
299 | + /** |
|
300 | + * inactive_reg_statuses |
|
301 | + * a filterable list of registration statuses that are not considered active |
|
302 | + * |
|
303 | + * @access public |
|
304 | + * @return array |
|
305 | + */ |
|
306 | + public static function inactive_reg_statuses() |
|
307 | + { |
|
308 | + return apply_filters( |
|
309 | + 'FHEE__EEM_Registration__inactive_reg_statuses', |
|
310 | + array( |
|
311 | + EEM_Registration::status_id_incomplete, |
|
312 | + EEM_Registration::status_id_cancelled, |
|
313 | + EEM_Registration::status_id_declined, |
|
314 | + ) |
|
315 | + ); |
|
316 | + } |
|
317 | + |
|
318 | + |
|
319 | + /** |
|
320 | + * closed_reg_statuses |
|
321 | + * a filterable list of registration statuses that are considered "closed" |
|
322 | + * meaning they should not be considered in any calculations involving monies owing |
|
323 | + * |
|
324 | + * @access public |
|
325 | + * @return array |
|
326 | + */ |
|
327 | + public static function closed_reg_statuses() |
|
328 | + { |
|
329 | + return apply_filters( |
|
330 | + 'FHEE__EEM_Registration__closed_reg_statuses', |
|
331 | + array( |
|
332 | + EEM_Registration::status_id_cancelled, |
|
333 | + EEM_Registration::status_id_declined, |
|
334 | + EEM_Registration::status_id_wait_list, |
|
335 | + ) |
|
336 | + ); |
|
337 | + } |
|
338 | + |
|
339 | + |
|
340 | + /** |
|
341 | + * get list of registration statuses |
|
342 | + * |
|
343 | + * @access public |
|
344 | + * @param array $exclude The status ids to exclude from the returned results |
|
345 | + * @param bool $translated If true will return the values as singular localized strings |
|
346 | + * @return array |
|
347 | + * @throws EE_Error |
|
348 | + */ |
|
349 | + public static function reg_status_array($exclude = array(), $translated = false) |
|
350 | + { |
|
351 | + EEM_Registration::instance()->_get_registration_status_array($exclude); |
|
352 | + return $translated |
|
353 | + ? EEM_Status::instance()->localized_status(self::$_reg_status, false, 'sentence') |
|
354 | + : self::$_reg_status; |
|
355 | + } |
|
356 | + |
|
357 | + |
|
358 | + /** |
|
359 | + * get list of registration statuses |
|
360 | + * |
|
361 | + * @access private |
|
362 | + * @param array $exclude |
|
363 | + * @return void |
|
364 | + * @throws EE_Error |
|
365 | + */ |
|
366 | + private function _get_registration_status_array($exclude = array()) |
|
367 | + { |
|
368 | + // in the very rare circumstance that we are deleting a model's table's data |
|
369 | + // and the table hasn't actually been created, this could have an error |
|
370 | + /** @type WPDB $wpdb */ |
|
371 | + global $wpdb; |
|
372 | + if ($this->_get_table_analysis()->tableExists($wpdb->prefix . 'esp_status')) { |
|
373 | + $results = $wpdb->get_results( |
|
374 | + "SELECT STS_ID, STS_code FROM {$wpdb->prefix}esp_status WHERE STS_type = 'registration'" |
|
375 | + ); |
|
376 | + self::$_reg_status = array(); |
|
377 | + foreach ($results as $status) { |
|
378 | + if (!in_array($status->STS_ID, $exclude, true)) { |
|
379 | + self::$_reg_status[ $status->STS_ID ] = $status->STS_code; |
|
380 | + } |
|
381 | + } |
|
382 | + } |
|
383 | + } |
|
384 | + |
|
385 | + |
|
386 | + /** |
|
387 | + * Gets the injected table analyzer, or throws an exception |
|
388 | + * |
|
389 | + * @return TableAnalysis |
|
390 | + * @throws EE_Error |
|
391 | + */ |
|
392 | + protected function _get_table_analysis() |
|
393 | + { |
|
394 | + if ($this->_table_analysis instanceof TableAnalysis) { |
|
395 | + return $this->_table_analysis; |
|
396 | + } |
|
397 | + throw new EE_Error( |
|
398 | + sprintf( |
|
399 | + esc_html__('Table analysis class on class %1$s is not set properly.', 'event_espresso'), |
|
400 | + get_class($this) |
|
401 | + ) |
|
402 | + ); |
|
403 | + } |
|
404 | + |
|
405 | + |
|
406 | + /** |
|
407 | + * This returns a wpdb->results array of all registration date month and years matching the incoming query params |
|
408 | + * and grouped by month and year. |
|
409 | + * |
|
410 | + * @param array $where_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md#0-where-conditions |
|
411 | + * @return array |
|
412 | + * @throws EE_Error |
|
413 | + */ |
|
414 | + public function get_reg_months_and_years($where_params) |
|
415 | + { |
|
416 | + $query_params[0] = $where_params; |
|
417 | + $query_params['group_by'] = array('reg_year', 'reg_month'); |
|
418 | + $query_params['order_by'] = array('REG_date' => 'DESC'); |
|
419 | + $columns_to_select = array( |
|
420 | + 'reg_year' => array('YEAR(REG_date)', '%s'), |
|
421 | + 'reg_month' => array('MONTHNAME(REG_date)', '%s'), |
|
422 | + ); |
|
423 | + return $this->_get_all_wpdb_results($query_params, OBJECT, $columns_to_select); |
|
424 | + } |
|
425 | + |
|
426 | + |
|
427 | + /** |
|
428 | + * retrieve ALL registrations for a particular Attendee from db |
|
429 | + * |
|
430 | + * @param int $ATT_ID |
|
431 | + * @return EE_Base_Class[]|EE_Registration[]|null |
|
432 | + * @throws EE_Error |
|
433 | + */ |
|
434 | + public function get_all_registrations_for_attendee($ATT_ID = 0) |
|
435 | + { |
|
436 | + if (!$ATT_ID) { |
|
437 | + return null; |
|
438 | + } |
|
439 | + return $this->get_all(array(array('ATT_ID' => $ATT_ID))); |
|
440 | + } |
|
441 | + |
|
442 | + |
|
443 | + /** |
|
444 | + * Gets a registration given their REG_url_link. Yes, this should usually |
|
445 | + * be passed via a GET parameter. |
|
446 | + * |
|
447 | + * @param string $REG_url_link |
|
448 | + * @return EE_Base_Class|EE_Registration|null |
|
449 | + * @throws EE_Error |
|
450 | + */ |
|
451 | + public function get_registration_for_reg_url_link($REG_url_link) |
|
452 | + { |
|
453 | + if (!$REG_url_link) { |
|
454 | + return null; |
|
455 | + } |
|
456 | + return $this->get_one(array(array('REG_url_link' => $REG_url_link))); |
|
457 | + } |
|
458 | + |
|
459 | + |
|
460 | + /** |
|
461 | + * retrieve registration for a specific transaction attendee from db |
|
462 | + * |
|
463 | + * @access public |
|
464 | + * @param int $TXN_ID |
|
465 | + * @param int $ATT_ID |
|
466 | + * @param int $att_nmbr in case the ATT_ID is the same for multiple registrations (same details used) then the |
|
467 | + * attendee number is required |
|
468 | + * @return mixed array on success, FALSE on fail |
|
469 | + * @throws EE_Error |
|
470 | + */ |
|
471 | + public function get_registration_for_transaction_attendee($TXN_ID = 0, $ATT_ID = 0, $att_nmbr = 0) |
|
472 | + { |
|
473 | + return $this->get_one(array( |
|
474 | + array( |
|
475 | + 'TXN_ID' => $TXN_ID, |
|
476 | + 'ATT_ID' => $ATT_ID, |
|
477 | + ), |
|
478 | + 'limit' => array(min($att_nmbr - 1, 0), 1), |
|
479 | + )); |
|
480 | + } |
|
481 | + |
|
482 | + |
|
483 | + /** |
|
484 | + * get the number of registrations per day for the Registration Admin page Reports Tab. |
|
485 | + * (doesn't utilize models because it's a fairly specialized query) |
|
486 | + * |
|
487 | + * @access public |
|
488 | + * @param $period string which can be passed to php's strtotime function (eg "-1 month") |
|
489 | + * @return stdClass[] with properties regDate and total |
|
490 | + * @throws EE_Error |
|
491 | + */ |
|
492 | + public function get_registrations_per_day_report($period = '-1 month') |
|
493 | + { |
|
494 | + $sql_date = $this->convert_datetime_for_query( |
|
495 | + 'REG_date', |
|
496 | + date('Y-m-d H:i:s', strtotime($period)), |
|
497 | + 'Y-m-d H:i:s', |
|
498 | + 'UTC' |
|
499 | + ); |
|
500 | + $where = array( |
|
501 | + 'REG_date' => array('>=', $sql_date), |
|
502 | + 'STS_ID' => array('!=', EEM_Registration::status_id_incomplete), |
|
503 | + ); |
|
504 | + if (!EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_day_report')) { |
|
505 | + $where['Event.EVT_wp_user'] = get_current_user_id(); |
|
506 | + } |
|
507 | + $query_interval = EEH_DTT_Helper::get_sql_query_interval_for_offset($this->get_timezone(), 'REG_date'); |
|
508 | + $results = $this->_get_all_wpdb_results( |
|
509 | + array( |
|
510 | + $where, |
|
511 | + 'group_by' => 'regDate', |
|
512 | + 'order_by' => array('REG_date' => 'ASC'), |
|
513 | + ), |
|
514 | + OBJECT, |
|
515 | + array( |
|
516 | + 'regDate' => array('DATE(' . $query_interval . ')', '%s'), |
|
517 | + 'total' => array('count(REG_ID)', '%d'), |
|
518 | + ) |
|
519 | + ); |
|
520 | + return $results; |
|
521 | + } |
|
522 | + |
|
523 | + |
|
524 | + /** |
|
525 | + * Get the number of registrations per day including the count of registrations for each Registration Status. |
|
526 | + * Note: EEM_Registration::status_id_incomplete registrations are excluded from the results. |
|
527 | + * |
|
528 | + * @param string $period |
|
529 | + * @return stdClass[] with properties Registration_REG_date and a column for each registration status as the STS_ID |
|
530 | + * @throws EE_Error |
|
531 | + * (i.e. RAP) |
|
532 | + */ |
|
533 | + public function get_registrations_per_day_and_per_status_report($period = '-1 month') |
|
534 | + { |
|
535 | + global $wpdb; |
|
536 | + $registration_table = $wpdb->prefix . 'esp_registration'; |
|
537 | + $event_table = $wpdb->posts; |
|
538 | + $sql_date = date('Y-m-d H:i:s', strtotime($period)); |
|
539 | + // prepare the query interval for displaying offset |
|
540 | + $query_interval = EEH_DTT_Helper::get_sql_query_interval_for_offset($this->get_timezone(), 'dates.REG_date'); |
|
541 | + // inner date query |
|
542 | + $inner_date_query = "SELECT DISTINCT REG_date from {$registration_table} "; |
|
543 | + $inner_where = ' WHERE'; |
|
544 | + // exclude events not authored by user if permissions in effect |
|
545 | + if (!EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_event_report')) { |
|
546 | + $inner_date_query .= "LEFT JOIN {$event_table} ON ID = EVT_ID"; |
|
547 | + $inner_where .= ' post_author = ' . get_current_user_id() . ' AND'; |
|
548 | + } |
|
549 | + $inner_where .= " REG_date >= '{$sql_date}'"; |
|
550 | + $inner_date_query .= $inner_where; |
|
551 | + // start main query |
|
552 | + $select = "SELECT DATE({$query_interval}) as Registration_REG_date, "; |
|
553 | + $join = ''; |
|
554 | + $join_parts = array(); |
|
555 | + $select_parts = array(); |
|
556 | + // loop through registration stati to do parts for each status. |
|
557 | + foreach (EEM_Registration::reg_status_array() as $STS_ID => $STS_code) { |
|
558 | + if ($STS_ID === EEM_Registration::status_id_incomplete) { |
|
559 | + continue; |
|
560 | + } |
|
561 | + $select_parts[] = "COUNT({$STS_code}.REG_ID) as {$STS_ID}"; |
|
562 | + $join_parts[] = "{$registration_table} AS {$STS_code} ON {$STS_code}.REG_date = dates.REG_date AND {$STS_code}.STS_ID = '{$STS_ID}'"; |
|
563 | + } |
|
564 | + // setup the selects |
|
565 | + $select .= implode(', ', $select_parts); |
|
566 | + $select .= " FROM ($inner_date_query) AS dates LEFT JOIN "; |
|
567 | + // setup the joins |
|
568 | + $join .= implode(' LEFT JOIN ', $join_parts); |
|
569 | + // now let's put it all together |
|
570 | + $query = $select . $join . ' GROUP BY Registration_REG_date'; |
|
571 | + // and execute it |
|
572 | + return $wpdb->get_results($query, ARRAY_A); |
|
573 | + } |
|
574 | + |
|
575 | + |
|
576 | + /** |
|
577 | + * get the number of registrations per event for the Registration Admin page Reports Tab |
|
578 | + * |
|
579 | + * @access public |
|
580 | + * @param $period string which can be passed to php's strtotime function (eg "-1 month") |
|
581 | + * @return stdClass[] each with properties event_name, reg_limit, and total |
|
582 | + * @throws EE_Error |
|
583 | + */ |
|
584 | + public function get_registrations_per_event_report($period = '-1 month') |
|
585 | + { |
|
586 | + $date_sql = $this->convert_datetime_for_query( |
|
587 | + 'REG_date', |
|
588 | + date('Y-m-d H:i:s', strtotime($period)), |
|
589 | + 'Y-m-d H:i:s', |
|
590 | + 'UTC' |
|
591 | + ); |
|
592 | + $where = array( |
|
593 | + 'REG_date' => array('>=', $date_sql), |
|
594 | + 'STS_ID' => array('!=', EEM_Registration::status_id_incomplete), |
|
595 | + ); |
|
596 | + if ( |
|
597 | + !EE_Registry::instance()->CAP->current_user_can( |
|
598 | + 'ee_read_others_registrations', |
|
599 | + 'reg_per_event_report' |
|
600 | + ) |
|
601 | + ) { |
|
602 | + $where['Event.EVT_wp_user'] = get_current_user_id(); |
|
603 | + } |
|
604 | + $results = $this->_get_all_wpdb_results( |
|
605 | + array( |
|
606 | + $where, |
|
607 | + 'group_by' => 'Event.EVT_name', |
|
608 | + 'order_by' => 'Event.EVT_name', |
|
609 | + 'limit' => array(0, 24), |
|
610 | + ), |
|
611 | + OBJECT, |
|
612 | + array( |
|
613 | + 'event_name' => array('Event_CPT.post_title', '%s'), |
|
614 | + 'total' => array('COUNT(REG_ID)', '%s'), |
|
615 | + ) |
|
616 | + ); |
|
617 | + return $results; |
|
618 | + } |
|
619 | + |
|
620 | + |
|
621 | + /** |
|
622 | + * Get the number of registrations per event grouped by registration status. |
|
623 | + * Note: EEM_Registration::status_id_incomplete registrations are excluded from the results. |
|
624 | + * |
|
625 | + * @param string $period |
|
626 | + * @return stdClass[] with properties `Registration_Event` and a column for each registration status as the STS_ID |
|
627 | + * @throws EE_Error |
|
628 | + * (i.e. RAP) |
|
629 | + */ |
|
630 | + public function get_registrations_per_event_and_per_status_report($period = '-1 month') |
|
631 | + { |
|
632 | + global $wpdb; |
|
633 | + $registration_table = $wpdb->prefix . 'esp_registration'; |
|
634 | + $event_table = $wpdb->posts; |
|
635 | + $sql_date = date('Y-m-d H:i:s', strtotime($period)); |
|
636 | + // inner date query |
|
637 | + $inner_date_query = "SELECT DISTINCT EVT_ID, REG_date from $registration_table "; |
|
638 | + $inner_where = ' WHERE'; |
|
639 | + // exclude events not authored by user if permissions in effect |
|
640 | + if (!EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_event_report')) { |
|
641 | + $inner_date_query .= "LEFT JOIN {$event_table} ON ID = EVT_ID"; |
|
642 | + $inner_where .= ' post_author = ' . get_current_user_id() . ' AND'; |
|
643 | + } |
|
644 | + $inner_where .= " REG_date >= '{$sql_date}'"; |
|
645 | + $inner_date_query .= $inner_where; |
|
646 | + // build main query |
|
647 | + $select = 'SELECT Event.post_title as Registration_Event, '; |
|
648 | + $join = ''; |
|
649 | + $join_parts = array(); |
|
650 | + $select_parts = array(); |
|
651 | + // loop through registration stati to do parts for each status. |
|
652 | + foreach (EEM_Registration::reg_status_array() as $STS_ID => $STS_code) { |
|
653 | + if ($STS_ID === EEM_Registration::status_id_incomplete) { |
|
654 | + continue; |
|
655 | + } |
|
656 | + $select_parts[] = "COUNT({$STS_code}.REG_ID) as {$STS_ID}"; |
|
657 | + $join_parts[] = "{$registration_table} AS {$STS_code} ON {$STS_code}.EVT_ID = dates.EVT_ID AND {$STS_code}.STS_ID = '{$STS_ID}' AND {$STS_code}.REG_date = dates.REG_date"; |
|
658 | + } |
|
659 | + // setup the selects |
|
660 | + $select .= implode(', ', $select_parts); |
|
661 | + $select .= " FROM ($inner_date_query) AS dates LEFT JOIN $event_table as Event ON Event.ID = dates.EVT_ID LEFT JOIN "; |
|
662 | + // setup remaining joins |
|
663 | + $join .= implode(' LEFT JOIN ', $join_parts); |
|
664 | + // now put it all together |
|
665 | + $query = $select . $join . ' GROUP BY Registration_Event'; |
|
666 | + // and execute |
|
667 | + return $wpdb->get_results($query, ARRAY_A); |
|
668 | + } |
|
669 | + |
|
670 | + |
|
671 | + /** |
|
672 | + * Returns the EE_Registration of the primary attendee on the transaction id provided |
|
673 | + * |
|
674 | + * @param int $TXN_ID |
|
675 | + * @return EE_Base_Class|EE_Registration|null |
|
676 | + * @throws EE_Error |
|
677 | + */ |
|
678 | + public function get_primary_registration_for_transaction_ID($TXN_ID = 0) |
|
679 | + { |
|
680 | + if (!$TXN_ID) { |
|
681 | + return null; |
|
682 | + } |
|
683 | + return $this->get_one(array( |
|
684 | + array( |
|
685 | + 'TXN_ID' => $TXN_ID, |
|
686 | + 'REG_count' => EEM_Registration::PRIMARY_REGISTRANT_COUNT, |
|
687 | + ), |
|
688 | + )); |
|
689 | + } |
|
690 | + |
|
691 | + |
|
692 | + /** |
|
693 | + * get_event_registration_count |
|
694 | + * |
|
695 | + * @access public |
|
696 | + * @param int $EVT_ID |
|
697 | + * @param boolean $for_incomplete_payments |
|
698 | + * @return int |
|
699 | + * @throws EE_Error |
|
700 | + */ |
|
701 | + public function get_event_registration_count($EVT_ID, $for_incomplete_payments = false) |
|
702 | + { |
|
703 | + // we only count approved registrations towards registration limits |
|
704 | + $query_params = array(array('EVT_ID' => $EVT_ID, 'STS_ID' => self::status_id_approved)); |
|
705 | + if ($for_incomplete_payments) { |
|
706 | + $query_params[0]['Transaction.STS_ID'] = array('!=', EEM_Transaction::complete_status_code); |
|
707 | + } |
|
708 | + return $this->count($query_params); |
|
709 | + } |
|
710 | + |
|
711 | + |
|
712 | + /** |
|
713 | + * Deletes all registrations with no transactions. Note that this needs to be very efficient |
|
714 | + * and so it uses wpdb directly. Also, we can't put a limit on this because MySQL doesn't allow a limit on a delete |
|
715 | + * when joining tables like this. |
|
716 | + * |
|
717 | + * @global WPDB $wpdb |
|
718 | + * @return int number deleted |
|
719 | + * @throws EE_Error |
|
720 | + */ |
|
721 | + public function delete_registrations_with_no_transaction() |
|
722 | + { |
|
723 | + /** @type WPDB $wpdb */ |
|
724 | + global $wpdb; |
|
725 | + return $wpdb->query( |
|
726 | + 'DELETE r FROM ' |
|
727 | + . $this->table() |
|
728 | + . ' r LEFT JOIN ' |
|
729 | + . EEM_Transaction::instance()->table() |
|
730 | + . ' t ON r.TXN_ID = t.TXN_ID WHERE t.TXN_ID IS NULL' |
|
731 | + ); |
|
732 | + } |
|
733 | + |
|
734 | + |
|
735 | + /** |
|
736 | + * Count registrations checked into (or out of) a datetime |
|
737 | + * |
|
738 | + * @param int $DTT_ID datetime ID |
|
739 | + * @param boolean $checked_in whether to count registrations checked IN or OUT |
|
740 | + * @return int |
|
741 | + * @throws EE_Error |
|
742 | + */ |
|
743 | + public function count_registrations_checked_into_datetime($DTT_ID, $checked_in = true) |
|
744 | + { |
|
745 | + global $wpdb; |
|
746 | + // subquery to get latest checkin |
|
747 | + $query = $wpdb->prepare( |
|
748 | + 'SELECT ' |
|
749 | + . 'COUNT( DISTINCT checkins.REG_ID ) ' |
|
750 | + . 'FROM ' . EEM_Checkin::instance()->table() . ' AS checkins INNER JOIN' |
|
751 | + . '( SELECT ' |
|
752 | + . 'max( CHK_timestamp ) AS latest_checkin, ' |
|
753 | + . 'REG_ID AS REG_ID ' |
|
754 | + . 'FROM ' . EEM_Checkin::instance()->table() . ' ' |
|
755 | + . 'WHERE DTT_ID=%d ' |
|
756 | + . 'GROUP BY REG_ID' |
|
757 | + . ') AS most_recent_checkin_per_reg ' |
|
758 | + . 'ON checkins.REG_ID=most_recent_checkin_per_reg.REG_ID ' |
|
759 | + . 'AND checkins.CHK_timestamp = most_recent_checkin_per_reg.latest_checkin ' |
|
760 | + . 'WHERE ' |
|
761 | + . 'checkins.CHK_in=%d', |
|
762 | + $DTT_ID, |
|
763 | + $checked_in |
|
764 | + ); |
|
765 | + return (int) $wpdb->get_var($query); |
|
766 | + } |
|
767 | + |
|
768 | + |
|
769 | + /** |
|
770 | + * Count registrations checked into (or out of) an event. |
|
771 | + * |
|
772 | + * @param int $EVT_ID event ID |
|
773 | + * @param boolean $checked_in whether to count registrations checked IN or OUT |
|
774 | + * @return int |
|
775 | + * @throws EE_Error |
|
776 | + */ |
|
777 | + public function count_registrations_checked_into_event($EVT_ID, $checked_in = true) |
|
778 | + { |
|
779 | + global $wpdb; |
|
780 | + // subquery to get latest checkin |
|
781 | + $query = $wpdb->prepare( |
|
782 | + 'SELECT ' |
|
783 | + . 'COUNT( DISTINCT checkins.REG_ID ) ' |
|
784 | + . 'FROM ' . EEM_Checkin::instance()->table() . ' AS checkins INNER JOIN' |
|
785 | + . '( SELECT ' |
|
786 | + . 'max( CHK_timestamp ) AS latest_checkin, ' |
|
787 | + . 'REG_ID AS REG_ID ' |
|
788 | + . 'FROM ' . EEM_Checkin::instance()->table() . ' AS c ' |
|
789 | + . 'INNER JOIN ' . EEM_Datetime::instance()->table() . ' AS d ' |
|
790 | + . 'ON c.DTT_ID=d.DTT_ID ' |
|
791 | + . 'WHERE d.EVT_ID=%d ' |
|
792 | + . 'GROUP BY REG_ID' |
|
793 | + . ') AS most_recent_checkin_per_reg ' |
|
794 | + . 'ON checkins.REG_ID=most_recent_checkin_per_reg.REG_ID ' |
|
795 | + . 'AND checkins.CHK_timestamp = most_recent_checkin_per_reg.latest_checkin ' |
|
796 | + . 'WHERE ' |
|
797 | + . 'checkins.CHK_in=%d', |
|
798 | + $EVT_ID, |
|
799 | + $checked_in |
|
800 | + ); |
|
801 | + return (int) $wpdb->get_var($query); |
|
802 | + } |
|
803 | + |
|
804 | + |
|
805 | + /** |
|
806 | + * The purpose of this method is to retrieve an array of |
|
807 | + * EE_Registration objects that represent the latest registration |
|
808 | + * for each ATT_ID given in the function argument. |
|
809 | + * |
|
810 | + * @param array $attendee_ids |
|
811 | + * @return EE_Base_Class[]|EE_Registration[] |
|
812 | + * @throws EE_Error |
|
813 | + */ |
|
814 | + public function get_latest_registration_for_each_of_given_contacts($attendee_ids = array()) |
|
815 | + { |
|
816 | + // first do a native wp_query to get the latest REG_ID's matching these attendees. |
|
817 | + global $wpdb; |
|
818 | + $registration_table = $wpdb->prefix . 'esp_registration'; |
|
819 | + $attendee_table = $wpdb->posts; |
|
820 | + $attendee_ids = is_array($attendee_ids) |
|
821 | + ? array_map('absint', $attendee_ids) |
|
822 | + : array((int) $attendee_ids); |
|
823 | + $ATT_IDs = implode(',', $attendee_ids); |
|
824 | + // first we do a query to get the registration ids |
|
825 | + // (because a group by before order by causes the order by to be ignored.) |
|
826 | + $registration_id_query = " |
|
827 | 827 | SELECT registrations.registration_ids as registration_id |
828 | 828 | FROM ( |
829 | 829 | SELECT |
@@ -837,61 +837,61 @@ discard block |
||
837 | 837 | ) AS registrations |
838 | 838 | GROUP BY registrations.attendee_ids |
839 | 839 | "; |
840 | - $registration_ids = $wpdb->get_results($registration_id_query, ARRAY_A); |
|
841 | - if (empty($registration_ids)) { |
|
842 | - return array(); |
|
843 | - } |
|
844 | - $ids_for_model_query = array(); |
|
845 | - // let's flatten the ids so they can be used in the model query. |
|
846 | - foreach ($registration_ids as $registration_id) { |
|
847 | - if (isset($registration_id['registration_id'])) { |
|
848 | - $ids_for_model_query[] = $registration_id['registration_id']; |
|
849 | - } |
|
850 | - } |
|
851 | - // construct query |
|
852 | - $_where = array( |
|
853 | - 'REG_ID' => array('IN', $ids_for_model_query), |
|
854 | - ); |
|
855 | - return $this->get_all(array($_where)); |
|
856 | - } |
|
857 | - |
|
858 | - |
|
859 | - |
|
860 | - /** |
|
861 | - * returns a count of registrations for the supplied event having the status as specified |
|
862 | - * |
|
863 | - * @param int $EVT_ID |
|
864 | - * @param array $statuses |
|
865 | - * @return int |
|
866 | - * @throws InvalidArgumentException |
|
867 | - * @throws InvalidStatusException |
|
868 | - * @throws EE_Error |
|
869 | - */ |
|
870 | - public function event_reg_count_for_statuses($EVT_ID, $statuses = array()) |
|
871 | - { |
|
872 | - $EVT_ID = absint($EVT_ID); |
|
873 | - if (! $EVT_ID) { |
|
874 | - throw new InvalidArgumentException( |
|
875 | - esc_html__('An invalid Event ID was supplied.', 'event_espresso') |
|
876 | - ); |
|
877 | - } |
|
878 | - $statuses = is_array($statuses) ? $statuses : array($statuses); |
|
879 | - $statuses = ! empty($statuses) ? $statuses : array(EEM_Registration::status_id_approved); |
|
880 | - $valid_reg_statuses = EEM_Registration::reg_statuses(); |
|
881 | - foreach ($statuses as $status) { |
|
882 | - if (! in_array($status, $valid_reg_statuses, true)) { |
|
883 | - throw new InvalidStatusException($status, esc_html__('Registration', 'event_espresso')); |
|
884 | - } |
|
885 | - } |
|
886 | - return $this->count( |
|
887 | - array( |
|
888 | - array( |
|
889 | - 'EVT_ID' => $EVT_ID, |
|
890 | - 'STS_ID' => array('IN', $statuses), |
|
891 | - ), |
|
892 | - ), |
|
893 | - 'REG_ID', |
|
894 | - true |
|
895 | - ); |
|
896 | - } |
|
840 | + $registration_ids = $wpdb->get_results($registration_id_query, ARRAY_A); |
|
841 | + if (empty($registration_ids)) { |
|
842 | + return array(); |
|
843 | + } |
|
844 | + $ids_for_model_query = array(); |
|
845 | + // let's flatten the ids so they can be used in the model query. |
|
846 | + foreach ($registration_ids as $registration_id) { |
|
847 | + if (isset($registration_id['registration_id'])) { |
|
848 | + $ids_for_model_query[] = $registration_id['registration_id']; |
|
849 | + } |
|
850 | + } |
|
851 | + // construct query |
|
852 | + $_where = array( |
|
853 | + 'REG_ID' => array('IN', $ids_for_model_query), |
|
854 | + ); |
|
855 | + return $this->get_all(array($_where)); |
|
856 | + } |
|
857 | + |
|
858 | + |
|
859 | + |
|
860 | + /** |
|
861 | + * returns a count of registrations for the supplied event having the status as specified |
|
862 | + * |
|
863 | + * @param int $EVT_ID |
|
864 | + * @param array $statuses |
|
865 | + * @return int |
|
866 | + * @throws InvalidArgumentException |
|
867 | + * @throws InvalidStatusException |
|
868 | + * @throws EE_Error |
|
869 | + */ |
|
870 | + public function event_reg_count_for_statuses($EVT_ID, $statuses = array()) |
|
871 | + { |
|
872 | + $EVT_ID = absint($EVT_ID); |
|
873 | + if (! $EVT_ID) { |
|
874 | + throw new InvalidArgumentException( |
|
875 | + esc_html__('An invalid Event ID was supplied.', 'event_espresso') |
|
876 | + ); |
|
877 | + } |
|
878 | + $statuses = is_array($statuses) ? $statuses : array($statuses); |
|
879 | + $statuses = ! empty($statuses) ? $statuses : array(EEM_Registration::status_id_approved); |
|
880 | + $valid_reg_statuses = EEM_Registration::reg_statuses(); |
|
881 | + foreach ($statuses as $status) { |
|
882 | + if (! in_array($status, $valid_reg_statuses, true)) { |
|
883 | + throw new InvalidStatusException($status, esc_html__('Registration', 'event_espresso')); |
|
884 | + } |
|
885 | + } |
|
886 | + return $this->count( |
|
887 | + array( |
|
888 | + array( |
|
889 | + 'EVT_ID' => $EVT_ID, |
|
890 | + 'STS_ID' => array('IN', $statuses), |
|
891 | + ), |
|
892 | + ), |
|
893 | + 'REG_ID', |
|
894 | + true |
|
895 | + ); |
|
896 | + } |
|
897 | 897 | } |
@@ -32,7 +32,7 @@ discard block |
||
32 | 32 | */ |
33 | 33 | protected function __construct($timezone = null) |
34 | 34 | { |
35 | - if (! $this->_default_where_conditions_strategy instanceof EE_Default_Where_Conditions) { |
|
35 | + if ( ! $this->_default_where_conditions_strategy instanceof EE_Default_Where_Conditions) { |
|
36 | 36 | $this->_default_where_conditions_strategy = new EE_Soft_Delete_Where_Conditions(); |
37 | 37 | } |
38 | 38 | parent::__construct($timezone); |
@@ -133,7 +133,7 @@ discard block |
||
133 | 133 | protected function _alter_query_params_so_only_trashed_items_included($query_params) |
134 | 134 | { |
135 | 135 | $deletedFlagFieldName = $this->deleted_field_name(); |
136 | - $query_params[0][ $deletedFlagFieldName ] = true; |
|
136 | + $query_params[0][$deletedFlagFieldName] = true; |
|
137 | 137 | return $query_params; |
138 | 138 | } |
139 | 139 | |
@@ -173,7 +173,7 @@ discard block |
||
173 | 173 | */ |
174 | 174 | protected function _alter_query_params_so_deleted_and_undeleted_items_included($query_params) |
175 | 175 | { |
176 | - if (! isset($query_params['default_where_conditions'])) { |
|
176 | + if ( ! isset($query_params['default_where_conditions'])) { |
|
177 | 177 | $query_params['default_where_conditions'] = 'minimum'; |
178 | 178 | } |
179 | 179 | return $query_params; |
@@ -301,7 +301,7 @@ discard block |
||
301 | 301 | */ |
302 | 302 | public function delete_or_restore_by_ID($delete = true, $ID = false) |
303 | 303 | { |
304 | - if (! $ID) { |
|
304 | + if ( ! $ID) { |
|
305 | 305 | return false; |
306 | 306 | } |
307 | 307 | if ( |
@@ -26,365 +26,365 @@ |
||
26 | 26 | */ |
27 | 27 | abstract class EEM_Soft_Delete_Base extends EEM_Base |
28 | 28 | { |
29 | - /** |
|
30 | - * @param null $timezone |
|
31 | - */ |
|
32 | - protected function __construct($timezone = null) |
|
33 | - { |
|
34 | - if (! $this->_default_where_conditions_strategy instanceof EE_Default_Where_Conditions) { |
|
35 | - $this->_default_where_conditions_strategy = new EE_Soft_Delete_Where_Conditions(); |
|
36 | - } |
|
37 | - parent::__construct($timezone); |
|
38 | - } |
|
39 | - |
|
40 | - |
|
41 | - |
|
42 | - /** |
|
43 | - * Searches for field on this model of type 'deleted_flag'. if it is found, |
|
44 | - * returns it's name. |
|
45 | - * |
|
46 | - * @return string |
|
47 | - * @throws EE_Error |
|
48 | - */ |
|
49 | - public function deleted_field_name() |
|
50 | - { |
|
51 | - $field = $this->get_a_field_of_type('EE_Trashed_Flag_Field'); |
|
52 | - if ($field) { |
|
53 | - return $field->get_name(); |
|
54 | - } else { |
|
55 | - throw new EE_Error(sprintf(esc_html__( |
|
56 | - 'We are trying to find the deleted flag field on %s, but none was found. Are you sure there is a field of type EE_Trashed_Flag_Field in %s constructor?', |
|
57 | - 'event_espresso' |
|
58 | - ), get_class($this), get_class($this))); |
|
59 | - } |
|
60 | - } |
|
61 | - |
|
62 | - |
|
63 | - |
|
64 | - /** |
|
65 | - * Gets one item that's been deleted, according to $query_params |
|
66 | - * |
|
67 | - * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
68 | - * @return EE_Soft_Delete_Base_Class |
|
69 | - */ |
|
70 | - public function get_one_deleted($query_params = array()) |
|
71 | - { |
|
72 | - $query_params = $this->_alter_query_params_so_only_trashed_items_included($query_params); |
|
73 | - return parent::get_one($query_params); |
|
74 | - } |
|
75 | - |
|
76 | - |
|
77 | - |
|
78 | - /** |
|
79 | - * Gets one item from the DB, regardless of whether it's been soft-deleted or not |
|
80 | - * |
|
81 | - * @param array $query_params like EEM_base::get_all's $query_params |
|
82 | - * @return EE_Soft_Delete_Base_Class |
|
83 | - */ |
|
84 | - public function get_one_deleted_or_undeleted($query_params = array()) |
|
85 | - { |
|
86 | - $query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params); |
|
87 | - return parent::get_one($query_params); |
|
88 | - } |
|
89 | - |
|
90 | - |
|
91 | - |
|
92 | - /** |
|
93 | - * Gets the item indicated by its ID. But if it's soft-deleted, pretends it doesn't exist. |
|
94 | - * |
|
95 | - * @param int|string $id |
|
96 | - * @return EE_Soft_Delete_Base_Class |
|
97 | - */ |
|
98 | - public function get_one_by_ID_but_ignore_deleted($id) |
|
99 | - { |
|
100 | - return $this->get_one( |
|
101 | - $this->alter_query_params_to_restrict_by_ID( |
|
102 | - $id, |
|
103 | - array('default_where_conditions' => 'default') |
|
104 | - ) |
|
105 | - ); |
|
106 | - } |
|
107 | - |
|
108 | - |
|
109 | - |
|
110 | - /** |
|
111 | - * Counts all the deleted/trashed items |
|
112 | - * |
|
113 | - * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
114 | - * @param string $field_to_count |
|
115 | - * @param bool $distinct if we want to only count the distinct values for the column then you can trigger that by the setting $distinct to TRUE; |
|
116 | - * @return int |
|
117 | - */ |
|
118 | - public function count_deleted($query_params = null, $field_to_count = null, $distinct = false) |
|
119 | - { |
|
120 | - $query_params = $this->_alter_query_params_so_only_trashed_items_included($query_params); |
|
121 | - return parent::count($query_params, $field_to_count, $distinct); |
|
122 | - } |
|
123 | - |
|
124 | - |
|
125 | - |
|
126 | - /** |
|
127 | - * Alters the query params so that only trashed/soft-deleted items are considered |
|
128 | - * |
|
129 | - * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
130 | - * @return array @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
131 | - */ |
|
132 | - protected function _alter_query_params_so_only_trashed_items_included($query_params) |
|
133 | - { |
|
134 | - $deletedFlagFieldName = $this->deleted_field_name(); |
|
135 | - $query_params[0][ $deletedFlagFieldName ] = true; |
|
136 | - return $query_params; |
|
137 | - } |
|
138 | - |
|
139 | - |
|
140 | - |
|
141 | - /** |
|
142 | - * Alters the query params so that only trashed/soft-deleted items are considered |
|
143 | - * |
|
144 | - * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
145 | - * @return array @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
146 | - */ |
|
147 | - public function alter_query_params_so_only_trashed_items_included($query_params) |
|
148 | - { |
|
149 | - return $this->_alter_query_params_so_only_trashed_items_included($query_params); |
|
150 | - } |
|
151 | - |
|
152 | - |
|
153 | - |
|
154 | - /** |
|
155 | - * Alters the query params so each item's deleted status is ignored. |
|
156 | - * |
|
157 | - * @param array $query_params |
|
158 | - * @return array |
|
159 | - */ |
|
160 | - public function alter_query_params_so_deleted_and_undeleted_items_included($query_params = array()) |
|
161 | - { |
|
162 | - return $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params); |
|
163 | - } |
|
164 | - |
|
165 | - |
|
166 | - |
|
167 | - /** |
|
168 | - * Alters the query params so each item's deleted status is ignored. |
|
169 | - * |
|
170 | - * @param array $query_params |
|
171 | - * @return array |
|
172 | - */ |
|
173 | - protected function _alter_query_params_so_deleted_and_undeleted_items_included($query_params) |
|
174 | - { |
|
175 | - if (! isset($query_params['default_where_conditions'])) { |
|
176 | - $query_params['default_where_conditions'] = 'minimum'; |
|
177 | - } |
|
178 | - return $query_params; |
|
179 | - } |
|
180 | - |
|
181 | - |
|
182 | - |
|
183 | - /** |
|
184 | - * Counts all deleted and undeleted items |
|
185 | - * |
|
186 | - * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
187 | - * @param string $field_to_count |
|
188 | - * @param bool $distinct if we want to only count the distinct values for the column then you can trigger that by the setting $distinct to TRUE; |
|
189 | - * @return int |
|
190 | - */ |
|
191 | - public function count_deleted_and_undeleted($query_params = null, $field_to_count = null, $distinct = false) |
|
192 | - { |
|
193 | - $query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params); |
|
194 | - return parent::count($query_params, $field_to_count, $distinct); |
|
195 | - } |
|
196 | - |
|
197 | - |
|
198 | - |
|
199 | - /** |
|
200 | - * Sum all the deleted items. |
|
201 | - * |
|
202 | - * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
203 | - * @param string $field_to_sum |
|
204 | - * @return int |
|
205 | - */ |
|
206 | - public function sum_deleted($query_params = null, $field_to_sum = null) |
|
207 | - { |
|
208 | - $query_params = $this->_alter_query_params_so_only_trashed_items_included($query_params); |
|
209 | - return parent::sum($query_params, $field_to_sum); |
|
210 | - } |
|
211 | - |
|
212 | - |
|
213 | - |
|
214 | - /** |
|
215 | - * Sums all the deleted and undeleted items. |
|
216 | - * |
|
217 | - * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
218 | - * @param string $field_to_sum |
|
219 | - * @return int |
|
220 | - */ |
|
221 | - public function sum_deleted_and_undeleted($query_params = null, $field_to_sum = null) |
|
222 | - { |
|
223 | - $query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params); |
|
224 | - parent::sum($query_params, $field_to_sum); |
|
225 | - } |
|
226 | - |
|
227 | - |
|
228 | - |
|
229 | - /** |
|
230 | - * Gets all deleted and undeleted mode objects from the db that meet the criteria, regardless of |
|
231 | - * whether they've been soft-deleted or not |
|
232 | - * |
|
233 | - * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
234 | - * @return EE_Soft_Delete_Base_Class[] |
|
235 | - */ |
|
236 | - public function get_all_deleted_and_undeleted($query_params = array()) |
|
237 | - { |
|
238 | - $query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params); |
|
239 | - return parent::get_all($query_params); |
|
240 | - } |
|
241 | - |
|
242 | - |
|
243 | - |
|
244 | - /** |
|
245 | - * For 'soft deletable' models, gets all which ARE deleted, according to conditions specified in $query_params. |
|
246 | - * |
|
247 | - * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
248 | - * @return EE_Soft_Delete_Base_Class[] |
|
249 | - */ |
|
250 | - public function get_all_deleted($query_params = array()) |
|
251 | - { |
|
252 | - $query_params = $this->_alter_query_params_so_only_trashed_items_included($query_params); |
|
253 | - return parent::get_all($query_params); |
|
254 | - } |
|
255 | - |
|
256 | - |
|
257 | - |
|
258 | - /** |
|
259 | - * Permanently deletes the selected rows. When selecting rows for deletion, ignores |
|
260 | - * whether they've been soft-deleted or not. (ie, you don't have to soft-delete objects |
|
261 | - * before you can permanently delete them). |
|
262 | - * Because this will cause a real deletion, related models may block this deletion (ie, add an error |
|
263 | - * and abort the delete) |
|
264 | - * |
|
265 | - * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
266 | - * @param boolean $allow_blocking if TRUE, matched objects will only be deleted if there is no related model info |
|
267 | - * that blocks it (ie, there' sno other data that depends on this data); if false, deletes regardless of other objects |
|
268 | - * which may depend on it. Its generally advisable to always leave this as TRUE, otherwise you could easily corrupt your DB |
|
269 | - * @return int number of rows deleted |
|
270 | - * @throws EE_Error |
|
271 | - */ |
|
272 | - public function delete_permanently($query_params, $allow_blocking = true) |
|
273 | - { |
|
274 | - $query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params); |
|
275 | - return parent::delete_permanently($query_params, $allow_blocking); |
|
276 | - } |
|
277 | - |
|
278 | - |
|
279 | - |
|
280 | - /** |
|
281 | - * Restores a particular item by its ID (primary key). Ignores the fact whether the item |
|
282 | - * has been soft-deleted or not. |
|
283 | - * |
|
284 | - * @param mixed $ID int if primary key is an int, string otherwise |
|
285 | - * @return boolean success |
|
286 | - */ |
|
287 | - public function restore_by_ID($ID = false) |
|
288 | - { |
|
289 | - return $this->delete_or_restore_by_ID(false, $ID); |
|
290 | - } |
|
291 | - |
|
292 | - |
|
293 | - |
|
294 | - /** |
|
295 | - * For deleting or restoring a particular item. Note that this model is a SOFT-DELETABLE model! However, |
|
296 | - * this function will ignore whether the items have been soft-deleted or not. |
|
297 | - * |
|
298 | - * @param boolean $delete true for delete, false for restore |
|
299 | - * @param mixed $ID int if primary key is an int, string otherwise |
|
300 | - * @return boolean |
|
301 | - */ |
|
302 | - public function delete_or_restore_by_ID($delete = true, $ID = false) |
|
303 | - { |
|
304 | - if (! $ID) { |
|
305 | - return false; |
|
306 | - } |
|
307 | - if ( |
|
308 | - $this->delete_or_restore( |
|
309 | - $delete, |
|
310 | - $this->alter_query_params_to_restrict_by_ID($ID) |
|
311 | - ) |
|
312 | - ) { |
|
313 | - return true; |
|
314 | - } else { |
|
315 | - return false; |
|
316 | - } |
|
317 | - } |
|
318 | - |
|
319 | - |
|
320 | - |
|
321 | - /** |
|
322 | - * Overrides parent's 'delete' method to instead do a soft delete on all rows that |
|
323 | - * meet the criteria in $where_col_n_values. This particular function ignores whether the items have been soft-deleted or not. |
|
324 | - * Note: because this item will be soft-deleted only, |
|
325 | - * doesn't block because of model dependencies |
|
326 | - * |
|
327 | - * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
328 | - * @param bool $block_deletes |
|
329 | - * @return boolean |
|
330 | - */ |
|
331 | - public function delete($query_params = array(), $block_deletes = false) |
|
332 | - { |
|
333 | - // no matter what, we WON'T block soft deletes. |
|
334 | - return $this->delete_or_restore(true, $query_params); |
|
335 | - } |
|
336 | - |
|
337 | - |
|
338 | - |
|
339 | - /** |
|
340 | - * 'Un-deletes' the chosen items. Note that this model is a SOFT-DELETABLE model! That means that, by default, trashed/soft-deleted |
|
341 | - * items are ignored in queries. However, this particular function ignores whether the items have been soft-deleted or not. |
|
342 | - * |
|
343 | - * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
344 | - * @return boolean |
|
345 | - */ |
|
346 | - public function restore($query_params = array()) |
|
347 | - { |
|
348 | - return $this->delete_or_restore(false, $query_params); |
|
349 | - } |
|
350 | - |
|
351 | - |
|
352 | - |
|
353 | - /** |
|
354 | - * Performs deletes or restores on items. Both soft-deleted and non-soft-deleted items considered. |
|
355 | - * |
|
356 | - * @param boolean $delete true to indicate deletion, false to indicate restoration |
|
357 | - * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
358 | - * @return boolean |
|
359 | - */ |
|
360 | - public function delete_or_restore($delete = true, $query_params = array()) |
|
361 | - { |
|
362 | - $deletedFlagFieldName = $this->deleted_field_name(); |
|
363 | - $query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params); |
|
364 | - if ($this->update(array($deletedFlagFieldName => $delete), $query_params)) { |
|
365 | - return true; |
|
366 | - } else { |
|
367 | - return false; |
|
368 | - } |
|
369 | - } |
|
370 | - |
|
371 | - |
|
372 | - |
|
373 | - /** |
|
374 | - * Updates all the items of this model which match the $query params, regardless of whether |
|
375 | - * they've been soft-deleted or not |
|
376 | - * |
|
377 | - * @param array $fields_n_values like EEM_Base::update's $fields_n_value |
|
378 | - * @param array $query_params like EEM_base::get_all's $query_params |
|
379 | - * @param boolean $keep_model_objs_in_sync if TRUE, makes sure we ALSO update model objects |
|
380 | - * in this model's entity map according to $fields_n_values that match $query_params. This |
|
381 | - * obviously has some overhead, so you can disable it by setting this to FALSE, but |
|
382 | - * be aware that model objects being used could get out-of-sync with the database |
|
383 | - * @return int number of items updated |
|
384 | - */ |
|
385 | - public function update_deleted_and_undeleted($fields_n_values, $query_params, $keep_model_objs_in_sync = true) |
|
386 | - { |
|
387 | - $query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params); |
|
388 | - return $this->update($fields_n_values, $query_params, $keep_model_objs_in_sync); |
|
389 | - } |
|
29 | + /** |
|
30 | + * @param null $timezone |
|
31 | + */ |
|
32 | + protected function __construct($timezone = null) |
|
33 | + { |
|
34 | + if (! $this->_default_where_conditions_strategy instanceof EE_Default_Where_Conditions) { |
|
35 | + $this->_default_where_conditions_strategy = new EE_Soft_Delete_Where_Conditions(); |
|
36 | + } |
|
37 | + parent::__construct($timezone); |
|
38 | + } |
|
39 | + |
|
40 | + |
|
41 | + |
|
42 | + /** |
|
43 | + * Searches for field on this model of type 'deleted_flag'. if it is found, |
|
44 | + * returns it's name. |
|
45 | + * |
|
46 | + * @return string |
|
47 | + * @throws EE_Error |
|
48 | + */ |
|
49 | + public function deleted_field_name() |
|
50 | + { |
|
51 | + $field = $this->get_a_field_of_type('EE_Trashed_Flag_Field'); |
|
52 | + if ($field) { |
|
53 | + return $field->get_name(); |
|
54 | + } else { |
|
55 | + throw new EE_Error(sprintf(esc_html__( |
|
56 | + 'We are trying to find the deleted flag field on %s, but none was found. Are you sure there is a field of type EE_Trashed_Flag_Field in %s constructor?', |
|
57 | + 'event_espresso' |
|
58 | + ), get_class($this), get_class($this))); |
|
59 | + } |
|
60 | + } |
|
61 | + |
|
62 | + |
|
63 | + |
|
64 | + /** |
|
65 | + * Gets one item that's been deleted, according to $query_params |
|
66 | + * |
|
67 | + * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
68 | + * @return EE_Soft_Delete_Base_Class |
|
69 | + */ |
|
70 | + public function get_one_deleted($query_params = array()) |
|
71 | + { |
|
72 | + $query_params = $this->_alter_query_params_so_only_trashed_items_included($query_params); |
|
73 | + return parent::get_one($query_params); |
|
74 | + } |
|
75 | + |
|
76 | + |
|
77 | + |
|
78 | + /** |
|
79 | + * Gets one item from the DB, regardless of whether it's been soft-deleted or not |
|
80 | + * |
|
81 | + * @param array $query_params like EEM_base::get_all's $query_params |
|
82 | + * @return EE_Soft_Delete_Base_Class |
|
83 | + */ |
|
84 | + public function get_one_deleted_or_undeleted($query_params = array()) |
|
85 | + { |
|
86 | + $query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params); |
|
87 | + return parent::get_one($query_params); |
|
88 | + } |
|
89 | + |
|
90 | + |
|
91 | + |
|
92 | + /** |
|
93 | + * Gets the item indicated by its ID. But if it's soft-deleted, pretends it doesn't exist. |
|
94 | + * |
|
95 | + * @param int|string $id |
|
96 | + * @return EE_Soft_Delete_Base_Class |
|
97 | + */ |
|
98 | + public function get_one_by_ID_but_ignore_deleted($id) |
|
99 | + { |
|
100 | + return $this->get_one( |
|
101 | + $this->alter_query_params_to_restrict_by_ID( |
|
102 | + $id, |
|
103 | + array('default_where_conditions' => 'default') |
|
104 | + ) |
|
105 | + ); |
|
106 | + } |
|
107 | + |
|
108 | + |
|
109 | + |
|
110 | + /** |
|
111 | + * Counts all the deleted/trashed items |
|
112 | + * |
|
113 | + * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
114 | + * @param string $field_to_count |
|
115 | + * @param bool $distinct if we want to only count the distinct values for the column then you can trigger that by the setting $distinct to TRUE; |
|
116 | + * @return int |
|
117 | + */ |
|
118 | + public function count_deleted($query_params = null, $field_to_count = null, $distinct = false) |
|
119 | + { |
|
120 | + $query_params = $this->_alter_query_params_so_only_trashed_items_included($query_params); |
|
121 | + return parent::count($query_params, $field_to_count, $distinct); |
|
122 | + } |
|
123 | + |
|
124 | + |
|
125 | + |
|
126 | + /** |
|
127 | + * Alters the query params so that only trashed/soft-deleted items are considered |
|
128 | + * |
|
129 | + * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
130 | + * @return array @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
131 | + */ |
|
132 | + protected function _alter_query_params_so_only_trashed_items_included($query_params) |
|
133 | + { |
|
134 | + $deletedFlagFieldName = $this->deleted_field_name(); |
|
135 | + $query_params[0][ $deletedFlagFieldName ] = true; |
|
136 | + return $query_params; |
|
137 | + } |
|
138 | + |
|
139 | + |
|
140 | + |
|
141 | + /** |
|
142 | + * Alters the query params so that only trashed/soft-deleted items are considered |
|
143 | + * |
|
144 | + * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
145 | + * @return array @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
146 | + */ |
|
147 | + public function alter_query_params_so_only_trashed_items_included($query_params) |
|
148 | + { |
|
149 | + return $this->_alter_query_params_so_only_trashed_items_included($query_params); |
|
150 | + } |
|
151 | + |
|
152 | + |
|
153 | + |
|
154 | + /** |
|
155 | + * Alters the query params so each item's deleted status is ignored. |
|
156 | + * |
|
157 | + * @param array $query_params |
|
158 | + * @return array |
|
159 | + */ |
|
160 | + public function alter_query_params_so_deleted_and_undeleted_items_included($query_params = array()) |
|
161 | + { |
|
162 | + return $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params); |
|
163 | + } |
|
164 | + |
|
165 | + |
|
166 | + |
|
167 | + /** |
|
168 | + * Alters the query params so each item's deleted status is ignored. |
|
169 | + * |
|
170 | + * @param array $query_params |
|
171 | + * @return array |
|
172 | + */ |
|
173 | + protected function _alter_query_params_so_deleted_and_undeleted_items_included($query_params) |
|
174 | + { |
|
175 | + if (! isset($query_params['default_where_conditions'])) { |
|
176 | + $query_params['default_where_conditions'] = 'minimum'; |
|
177 | + } |
|
178 | + return $query_params; |
|
179 | + } |
|
180 | + |
|
181 | + |
|
182 | + |
|
183 | + /** |
|
184 | + * Counts all deleted and undeleted items |
|
185 | + * |
|
186 | + * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
187 | + * @param string $field_to_count |
|
188 | + * @param bool $distinct if we want to only count the distinct values for the column then you can trigger that by the setting $distinct to TRUE; |
|
189 | + * @return int |
|
190 | + */ |
|
191 | + public function count_deleted_and_undeleted($query_params = null, $field_to_count = null, $distinct = false) |
|
192 | + { |
|
193 | + $query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params); |
|
194 | + return parent::count($query_params, $field_to_count, $distinct); |
|
195 | + } |
|
196 | + |
|
197 | + |
|
198 | + |
|
199 | + /** |
|
200 | + * Sum all the deleted items. |
|
201 | + * |
|
202 | + * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
203 | + * @param string $field_to_sum |
|
204 | + * @return int |
|
205 | + */ |
|
206 | + public function sum_deleted($query_params = null, $field_to_sum = null) |
|
207 | + { |
|
208 | + $query_params = $this->_alter_query_params_so_only_trashed_items_included($query_params); |
|
209 | + return parent::sum($query_params, $field_to_sum); |
|
210 | + } |
|
211 | + |
|
212 | + |
|
213 | + |
|
214 | + /** |
|
215 | + * Sums all the deleted and undeleted items. |
|
216 | + * |
|
217 | + * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
218 | + * @param string $field_to_sum |
|
219 | + * @return int |
|
220 | + */ |
|
221 | + public function sum_deleted_and_undeleted($query_params = null, $field_to_sum = null) |
|
222 | + { |
|
223 | + $query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params); |
|
224 | + parent::sum($query_params, $field_to_sum); |
|
225 | + } |
|
226 | + |
|
227 | + |
|
228 | + |
|
229 | + /** |
|
230 | + * Gets all deleted and undeleted mode objects from the db that meet the criteria, regardless of |
|
231 | + * whether they've been soft-deleted or not |
|
232 | + * |
|
233 | + * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
234 | + * @return EE_Soft_Delete_Base_Class[] |
|
235 | + */ |
|
236 | + public function get_all_deleted_and_undeleted($query_params = array()) |
|
237 | + { |
|
238 | + $query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params); |
|
239 | + return parent::get_all($query_params); |
|
240 | + } |
|
241 | + |
|
242 | + |
|
243 | + |
|
244 | + /** |
|
245 | + * For 'soft deletable' models, gets all which ARE deleted, according to conditions specified in $query_params. |
|
246 | + * |
|
247 | + * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
248 | + * @return EE_Soft_Delete_Base_Class[] |
|
249 | + */ |
|
250 | + public function get_all_deleted($query_params = array()) |
|
251 | + { |
|
252 | + $query_params = $this->_alter_query_params_so_only_trashed_items_included($query_params); |
|
253 | + return parent::get_all($query_params); |
|
254 | + } |
|
255 | + |
|
256 | + |
|
257 | + |
|
258 | + /** |
|
259 | + * Permanently deletes the selected rows. When selecting rows for deletion, ignores |
|
260 | + * whether they've been soft-deleted or not. (ie, you don't have to soft-delete objects |
|
261 | + * before you can permanently delete them). |
|
262 | + * Because this will cause a real deletion, related models may block this deletion (ie, add an error |
|
263 | + * and abort the delete) |
|
264 | + * |
|
265 | + * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
266 | + * @param boolean $allow_blocking if TRUE, matched objects will only be deleted if there is no related model info |
|
267 | + * that blocks it (ie, there' sno other data that depends on this data); if false, deletes regardless of other objects |
|
268 | + * which may depend on it. Its generally advisable to always leave this as TRUE, otherwise you could easily corrupt your DB |
|
269 | + * @return int number of rows deleted |
|
270 | + * @throws EE_Error |
|
271 | + */ |
|
272 | + public function delete_permanently($query_params, $allow_blocking = true) |
|
273 | + { |
|
274 | + $query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params); |
|
275 | + return parent::delete_permanently($query_params, $allow_blocking); |
|
276 | + } |
|
277 | + |
|
278 | + |
|
279 | + |
|
280 | + /** |
|
281 | + * Restores a particular item by its ID (primary key). Ignores the fact whether the item |
|
282 | + * has been soft-deleted or not. |
|
283 | + * |
|
284 | + * @param mixed $ID int if primary key is an int, string otherwise |
|
285 | + * @return boolean success |
|
286 | + */ |
|
287 | + public function restore_by_ID($ID = false) |
|
288 | + { |
|
289 | + return $this->delete_or_restore_by_ID(false, $ID); |
|
290 | + } |
|
291 | + |
|
292 | + |
|
293 | + |
|
294 | + /** |
|
295 | + * For deleting or restoring a particular item. Note that this model is a SOFT-DELETABLE model! However, |
|
296 | + * this function will ignore whether the items have been soft-deleted or not. |
|
297 | + * |
|
298 | + * @param boolean $delete true for delete, false for restore |
|
299 | + * @param mixed $ID int if primary key is an int, string otherwise |
|
300 | + * @return boolean |
|
301 | + */ |
|
302 | + public function delete_or_restore_by_ID($delete = true, $ID = false) |
|
303 | + { |
|
304 | + if (! $ID) { |
|
305 | + return false; |
|
306 | + } |
|
307 | + if ( |
|
308 | + $this->delete_or_restore( |
|
309 | + $delete, |
|
310 | + $this->alter_query_params_to_restrict_by_ID($ID) |
|
311 | + ) |
|
312 | + ) { |
|
313 | + return true; |
|
314 | + } else { |
|
315 | + return false; |
|
316 | + } |
|
317 | + } |
|
318 | + |
|
319 | + |
|
320 | + |
|
321 | + /** |
|
322 | + * Overrides parent's 'delete' method to instead do a soft delete on all rows that |
|
323 | + * meet the criteria in $where_col_n_values. This particular function ignores whether the items have been soft-deleted or not. |
|
324 | + * Note: because this item will be soft-deleted only, |
|
325 | + * doesn't block because of model dependencies |
|
326 | + * |
|
327 | + * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
328 | + * @param bool $block_deletes |
|
329 | + * @return boolean |
|
330 | + */ |
|
331 | + public function delete($query_params = array(), $block_deletes = false) |
|
332 | + { |
|
333 | + // no matter what, we WON'T block soft deletes. |
|
334 | + return $this->delete_or_restore(true, $query_params); |
|
335 | + } |
|
336 | + |
|
337 | + |
|
338 | + |
|
339 | + /** |
|
340 | + * 'Un-deletes' the chosen items. Note that this model is a SOFT-DELETABLE model! That means that, by default, trashed/soft-deleted |
|
341 | + * items are ignored in queries. However, this particular function ignores whether the items have been soft-deleted or not. |
|
342 | + * |
|
343 | + * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
344 | + * @return boolean |
|
345 | + */ |
|
346 | + public function restore($query_params = array()) |
|
347 | + { |
|
348 | + return $this->delete_or_restore(false, $query_params); |
|
349 | + } |
|
350 | + |
|
351 | + |
|
352 | + |
|
353 | + /** |
|
354 | + * Performs deletes or restores on items. Both soft-deleted and non-soft-deleted items considered. |
|
355 | + * |
|
356 | + * @param boolean $delete true to indicate deletion, false to indicate restoration |
|
357 | + * @param array $query_params @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md |
|
358 | + * @return boolean |
|
359 | + */ |
|
360 | + public function delete_or_restore($delete = true, $query_params = array()) |
|
361 | + { |
|
362 | + $deletedFlagFieldName = $this->deleted_field_name(); |
|
363 | + $query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params); |
|
364 | + if ($this->update(array($deletedFlagFieldName => $delete), $query_params)) { |
|
365 | + return true; |
|
366 | + } else { |
|
367 | + return false; |
|
368 | + } |
|
369 | + } |
|
370 | + |
|
371 | + |
|
372 | + |
|
373 | + /** |
|
374 | + * Updates all the items of this model which match the $query params, regardless of whether |
|
375 | + * they've been soft-deleted or not |
|
376 | + * |
|
377 | + * @param array $fields_n_values like EEM_Base::update's $fields_n_value |
|
378 | + * @param array $query_params like EEM_base::get_all's $query_params |
|
379 | + * @param boolean $keep_model_objs_in_sync if TRUE, makes sure we ALSO update model objects |
|
380 | + * in this model's entity map according to $fields_n_values that match $query_params. This |
|
381 | + * obviously has some overhead, so you can disable it by setting this to FALSE, but |
|
382 | + * be aware that model objects being used could get out-of-sync with the database |
|
383 | + * @return int number of items updated |
|
384 | + */ |
|
385 | + public function update_deleted_and_undeleted($fields_n_values, $query_params, $keep_model_objs_in_sync = true) |
|
386 | + { |
|
387 | + $query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params); |
|
388 | + return $this->update($fields_n_values, $query_params, $keep_model_objs_in_sync); |
|
389 | + } |
|
390 | 390 | } |
@@ -43,7 +43,7 @@ discard block |
||
43 | 43 | public static function instance() |
44 | 44 | { |
45 | 45 | // check if class object is instantiated, and instantiated properly |
46 | - if (! self::$_instance instanceof EEH_HTML) { |
|
46 | + if ( ! self::$_instance instanceof EEH_HTML) { |
|
47 | 47 | self::$_instance = new EEH_HTML(); |
48 | 48 | } |
49 | 49 | return self::$_instance; |
@@ -105,12 +105,12 @@ discard block |
||
105 | 105 | $other_attributes = '', |
106 | 106 | $force_close = false |
107 | 107 | ) { |
108 | - $attributes = ! empty($id) ? ' id="' . EEH_HTML::sanitize_id($id) . '"' : ''; |
|
109 | - $attributes .= ! empty($class) ? ' class="' . $class . '"' : ''; |
|
110 | - $attributes .= ! empty($style) ? ' style="' . $style . '"' : ''; |
|
111 | - $attributes .= ! empty($other_attributes) ? ' ' . $other_attributes : ''; |
|
112 | - $html = EEH_HTML::nl(0, $tag) . '<' . $tag . $attributes . '>'; |
|
113 | - $html .= ! empty($content) ? EEH_HTML::nl(1, $tag) . $content : ''; |
|
108 | + $attributes = ! empty($id) ? ' id="'.EEH_HTML::sanitize_id($id).'"' : ''; |
|
109 | + $attributes .= ! empty($class) ? ' class="'.$class.'"' : ''; |
|
110 | + $attributes .= ! empty($style) ? ' style="'.$style.'"' : ''; |
|
111 | + $attributes .= ! empty($other_attributes) ? ' '.$other_attributes : ''; |
|
112 | + $html = EEH_HTML::nl(0, $tag).'<'.$tag.$attributes.'>'; |
|
113 | + $html .= ! empty($content) ? EEH_HTML::nl(1, $tag).$content : ''; |
|
114 | 114 | $indent = ! empty($content) || $force_close ? true : false; |
115 | 115 | $html .= ! empty($content) || $force_close ? EEH_HTML::_close_tag($tag, $id, $class, $indent) : ''; |
116 | 116 | return $html; |
@@ -133,12 +133,12 @@ discard block |
||
133 | 133 | { |
134 | 134 | $comment = ''; |
135 | 135 | if ($id) { |
136 | - $comment = EEH_HTML::comment('close ' . $id) . EEH_HTML::nl(0, $tag); |
|
136 | + $comment = EEH_HTML::comment('close '.$id).EEH_HTML::nl(0, $tag); |
|
137 | 137 | } elseif ($class) { |
138 | - $comment = EEH_HTML::comment('close ' . $class) . EEH_HTML::nl(0, $tag); |
|
138 | + $comment = EEH_HTML::comment('close '.$class).EEH_HTML::nl(0, $tag); |
|
139 | 139 | } |
140 | 140 | $html = $indent ? EEH_HTML::nl(-1, $tag) : ''; |
141 | - $html .= '</' . $tag . '>' . $comment; |
|
141 | + $html .= '</'.$tag.'>'.$comment; |
|
142 | 142 | return $html; |
143 | 143 | } |
144 | 144 | |
@@ -575,7 +575,7 @@ discard block |
||
575 | 575 | public static function no_row($content = '', $colspan = 2) |
576 | 576 | { |
577 | 577 | return EEH_HTML::tr( |
578 | - EEH_HTML::td($content, '', '', 'padding:0; border:none;', 'colspan="' . $colspan . '"'), |
|
578 | + EEH_HTML::td($content, '', '', 'padding:0; border:none;', 'colspan="'.$colspan.'"'), |
|
579 | 579 | '', |
580 | 580 | '', |
581 | 581 | 'padding:0; border:none;' |
@@ -601,12 +601,12 @@ discard block |
||
601 | 601 | public static function link($href = '', $link_text = '', $title = '', $id = '', $class = '', $style = '', $other_attributes = '') |
602 | 602 | { |
603 | 603 | $link_text = ! empty($link_text) ? $link_text : $href; |
604 | - $attributes = ! empty($href) ? ' href="' . $href . '"' : ''; |
|
605 | - $attributes .= ! empty($id) ? ' id="' . EEH_HTML::sanitize_id($id) . '"' : ''; |
|
606 | - $attributes .= ! empty($class) ? ' class="' . $class . '"' : ''; |
|
607 | - $attributes .= ! empty($style) ? ' style="' . $style . '"' : ''; |
|
608 | - $attributes .= ! empty($title) ? ' title="' . esc_attr($title) . '"' : ''; |
|
609 | - $attributes .= ! empty($other_attributes) ? ' ' . $other_attributes : ''; |
|
604 | + $attributes = ! empty($href) ? ' href="'.$href.'"' : ''; |
|
605 | + $attributes .= ! empty($id) ? ' id="'.EEH_HTML::sanitize_id($id).'"' : ''; |
|
606 | + $attributes .= ! empty($class) ? ' class="'.$class.'"' : ''; |
|
607 | + $attributes .= ! empty($style) ? ' style="'.$style.'"' : ''; |
|
608 | + $attributes .= ! empty($title) ? ' title="'.esc_attr($title).'"' : ''; |
|
609 | + $attributes .= ! empty($other_attributes) ? ' '.$other_attributes : ''; |
|
610 | 610 | return "<a{$attributes}>{$link_text}</a>"; |
611 | 611 | } |
612 | 612 | |
@@ -626,13 +626,13 @@ discard block |
||
626 | 626 | */ |
627 | 627 | public static function img($src = '', $alt = '', $id = '', $class = '', $style = '', $other_attributes = '') |
628 | 628 | { |
629 | - $attributes = ! empty($src) ? ' src="' . esc_url_raw($src) . '"' : ''; |
|
630 | - $attributes .= ! empty($alt) ? ' alt="' . esc_attr($alt) . '"' : ''; |
|
631 | - $attributes .= ! empty($id) ? ' id="' . EEH_HTML::sanitize_id($id) . '"' : ''; |
|
632 | - $attributes .= ! empty($class) ? ' class="' . $class . '"' : ''; |
|
633 | - $attributes .= ! empty($style) ? ' style="' . $style . '"' : ''; |
|
634 | - $attributes .= ! empty($other_attributes) ? ' ' . $other_attributes : ''; |
|
635 | - return '<img' . $attributes . '/>'; |
|
629 | + $attributes = ! empty($src) ? ' src="'.esc_url_raw($src).'"' : ''; |
|
630 | + $attributes .= ! empty($alt) ? ' alt="'.esc_attr($alt).'"' : ''; |
|
631 | + $attributes .= ! empty($id) ? ' id="'.EEH_HTML::sanitize_id($id).'"' : ''; |
|
632 | + $attributes .= ! empty($class) ? ' class="'.$class.'"' : ''; |
|
633 | + $attributes .= ! empty($style) ? ' style="'.$style.'"' : ''; |
|
634 | + $attributes .= ! empty($other_attributes) ? ' '.$other_attributes : ''; |
|
635 | + return '<img'.$attributes.'/>'; |
|
636 | 636 | } |
637 | 637 | |
638 | 638 | |
@@ -652,11 +652,11 @@ discard block |
||
652 | 652 | */ |
653 | 653 | protected static function _inline_tag($tag = 'span', $content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
654 | 654 | { |
655 | - $attributes = ! empty($id) ? ' id="' . EEH_HTML::sanitize_id($id) . '"' : ''; |
|
656 | - $attributes .= ! empty($class) ? ' class="' . $class . '"' : ''; |
|
657 | - $attributes .= ! empty($style) ? ' style="' . $style . '"' : ''; |
|
658 | - $attributes .= ! empty($other_attributes) ? ' ' . $other_attributes : ''; |
|
659 | - return '<' . $tag . ' ' . $attributes . '>' . $content . '</' . $tag . '>'; |
|
655 | + $attributes = ! empty($id) ? ' id="'.EEH_HTML::sanitize_id($id).'"' : ''; |
|
656 | + $attributes .= ! empty($class) ? ' class="'.$class.'"' : ''; |
|
657 | + $attributes .= ! empty($style) ? ' style="'.$style.'"' : ''; |
|
658 | + $attributes .= ! empty($other_attributes) ? ' '.$other_attributes : ''; |
|
659 | + return '<'.$tag.' '.$attributes.'>'.$content.'</'.$tag.'>'; |
|
660 | 660 | } |
661 | 661 | |
662 | 662 | |
@@ -724,7 +724,7 @@ discard block |
||
724 | 724 | */ |
725 | 725 | public static function comment($comment = '') |
726 | 726 | { |
727 | - return ! empty($comment) ? EEH_HTML::nl() . '<!-- ' . $comment . ' -->' : ''; |
|
727 | + return ! empty($comment) ? EEH_HTML::nl().'<!-- '.$comment.' -->' : ''; |
|
728 | 728 | } |
729 | 729 | |
730 | 730 | |
@@ -783,7 +783,7 @@ discard block |
||
783 | 783 | { |
784 | 784 | $html = "\n"; |
785 | 785 | EEH_HTML::indent($indent, $tag); |
786 | - for ($x = 0; $x < EEH_HTML::$_indent[ $tag ]; $x++) { |
|
786 | + for ($x = 0; $x < EEH_HTML::$_indent[$tag]; $x++) { |
|
787 | 787 | $html .= "\t"; |
788 | 788 | } |
789 | 789 | return $html; |
@@ -801,15 +801,15 @@ discard block |
||
801 | 801 | public static function indent($indent, $tag = 'none') |
802 | 802 | { |
803 | 803 | static $default_indentation = false; |
804 | - if (! $default_indentation) { |
|
804 | + if ( ! $default_indentation) { |
|
805 | 805 | EEH_HTML::_set_default_indentation(); |
806 | 806 | $default_indentation = true; |
807 | 807 | } |
808 | - if (! isset(EEH_HTML::$_indent[ $tag ])) { |
|
809 | - EEH_HTML::$_indent[ $tag ] = 0; |
|
808 | + if ( ! isset(EEH_HTML::$_indent[$tag])) { |
|
809 | + EEH_HTML::$_indent[$tag] = 0; |
|
810 | 810 | } |
811 | - EEH_HTML::$_indent[ $tag ] += (int) $indent; |
|
812 | - EEH_HTML::$_indent[ $tag ] = EEH_HTML::$_indent[ $tag ] >= 0 ? EEH_HTML::$_indent[ $tag ] : 0; |
|
811 | + EEH_HTML::$_indent[$tag] += (int) $indent; |
|
812 | + EEH_HTML::$_indent[$tag] = EEH_HTML::$_indent[$tag] >= 0 ? EEH_HTML::$_indent[$tag] : 0; |
|
813 | 813 | } |
814 | 814 | |
815 | 815 |
@@ -1,875 +1,875 @@ |
||
1 | 1 | <?php |
2 | 2 | |
3 | 3 | /** |
4 | - * |
|
5 | - * Class EEH_HTML |
|
6 | - * |
|
4 | + * |
|
5 | + * Class EEH_HTML |
|
6 | + * |
|
7 | 7 | * Sometimes when writing PHP you need to generate some standard HTML, |
8 | 8 | * but either not enough to warrant creating a template file, |
9 | 9 | * or the amount of PHP conditionals and/or loops peppered throughout the HTML |
10 | 10 | * just make it really ugly and difficult to read. |
11 | 11 | * This class simply adds a bunch of methods for generating basic HTML tags. |
12 | 12 | * Most of the methods have the same name as the HTML tag they generate, and most have the same set of parameters. |
13 | - * |
|
14 | - * @package Event Espresso |
|
15 | - * @subpackage core |
|
16 | - * @author Brent Christensen |
|
17 | - * |
|
18 | - * |
|
19 | - */ |
|
13 | + * |
|
14 | + * @package Event Espresso |
|
15 | + * @subpackage core |
|
16 | + * @author Brent Christensen |
|
17 | + * |
|
18 | + * |
|
19 | + */ |
|
20 | 20 | class EEH_HTML |
21 | 21 | { |
22 | 22 | |
23 | - /** |
|
24 | - * instance of the EEH_Autoloader object |
|
25 | - * @var $_instance |
|
26 | - * @access private |
|
27 | - */ |
|
28 | - private static $_instance; |
|
29 | - |
|
30 | - /** |
|
31 | - * @var array $_indent |
|
32 | - * @access private |
|
33 | - */ |
|
34 | - private static $_indent = array(); |
|
35 | - |
|
36 | - |
|
37 | - |
|
38 | - /** |
|
39 | - * @singleton method used to instantiate class object |
|
40 | - * @access public |
|
41 | - * @return EEH_HTML |
|
42 | - */ |
|
43 | - public static function instance() |
|
44 | - { |
|
45 | - // check if class object is instantiated, and instantiated properly |
|
46 | - if (! self::$_instance instanceof EEH_HTML) { |
|
47 | - self::$_instance = new EEH_HTML(); |
|
48 | - } |
|
49 | - return self::$_instance; |
|
50 | - } |
|
51 | - |
|
52 | - |
|
53 | - |
|
54 | - /** |
|
55 | - * class constructor |
|
56 | - * |
|
57 | - * @access private |
|
58 | - * @return \EEH_HTML |
|
59 | - */ |
|
60 | - private function __construct() |
|
61 | - { |
|
62 | - // set some initial formatting for table indentation |
|
63 | - EEH_HTML::$_indent = array( |
|
64 | - 'table' => 0, |
|
65 | - 'thead' => 1, |
|
66 | - 'tbody' => 1, |
|
67 | - 'tr' => 2, |
|
68 | - 'th' => 3, |
|
69 | - 'td' => 3, |
|
70 | - 'div' => 0, |
|
71 | - 'h1' => 0, |
|
72 | - 'h2' => 0, |
|
73 | - 'h3' => 0, |
|
74 | - 'h4' => 0, |
|
75 | - 'h5' => 0, |
|
76 | - 'h6' => 0, |
|
77 | - 'p' => 0, |
|
78 | - 'ul' => 0, |
|
79 | - 'li' => 1 |
|
80 | - ); |
|
81 | - } |
|
82 | - |
|
83 | - |
|
84 | - |
|
85 | - /** |
|
86 | - * Generates an opening HTML <XX> tag and adds any passed attributes |
|
87 | - * if passed content, it will also add that, as well as the closing </XX> tag |
|
88 | - * |
|
89 | - * @access protected |
|
90 | - * @param string $tag |
|
91 | - * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
92 | - * @param string $id - html id attribute |
|
93 | - * @param string $class - html class attribute |
|
94 | - * @param string $style - html style attribute for applying inline styles |
|
95 | - * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
96 | - * @param bool $force_close |
|
97 | - * @return string |
|
98 | - */ |
|
99 | - protected static function _open_tag( |
|
100 | - $tag = 'div', |
|
101 | - $content = '', |
|
102 | - $id = '', |
|
103 | - $class = '', |
|
104 | - $style = '', |
|
105 | - $other_attributes = '', |
|
106 | - $force_close = false |
|
107 | - ) { |
|
108 | - $attributes = ! empty($id) ? ' id="' . EEH_HTML::sanitize_id($id) . '"' : ''; |
|
109 | - $attributes .= ! empty($class) ? ' class="' . $class . '"' : ''; |
|
110 | - $attributes .= ! empty($style) ? ' style="' . $style . '"' : ''; |
|
111 | - $attributes .= ! empty($other_attributes) ? ' ' . $other_attributes : ''; |
|
112 | - $html = EEH_HTML::nl(0, $tag) . '<' . $tag . $attributes . '>'; |
|
113 | - $html .= ! empty($content) ? EEH_HTML::nl(1, $tag) . $content : ''; |
|
114 | - $indent = ! empty($content) || $force_close ? true : false; |
|
115 | - $html .= ! empty($content) || $force_close ? EEH_HTML::_close_tag($tag, $id, $class, $indent) : ''; |
|
116 | - return $html; |
|
117 | - } |
|
118 | - |
|
119 | - |
|
120 | - |
|
121 | - /** |
|
122 | - * Generates HTML closing </XX> tag - if passed the id or class attribute |
|
123 | - * used for the opening tag, will append a comment |
|
124 | - * |
|
23 | + /** |
|
24 | + * instance of the EEH_Autoloader object |
|
25 | + * @var $_instance |
|
26 | + * @access private |
|
27 | + */ |
|
28 | + private static $_instance; |
|
29 | + |
|
30 | + /** |
|
31 | + * @var array $_indent |
|
32 | + * @access private |
|
33 | + */ |
|
34 | + private static $_indent = array(); |
|
35 | + |
|
36 | + |
|
37 | + |
|
38 | + /** |
|
39 | + * @singleton method used to instantiate class object |
|
40 | + * @access public |
|
41 | + * @return EEH_HTML |
|
42 | + */ |
|
43 | + public static function instance() |
|
44 | + { |
|
45 | + // check if class object is instantiated, and instantiated properly |
|
46 | + if (! self::$_instance instanceof EEH_HTML) { |
|
47 | + self::$_instance = new EEH_HTML(); |
|
48 | + } |
|
49 | + return self::$_instance; |
|
50 | + } |
|
51 | + |
|
52 | + |
|
53 | + |
|
54 | + /** |
|
55 | + * class constructor |
|
56 | + * |
|
57 | + * @access private |
|
58 | + * @return \EEH_HTML |
|
59 | + */ |
|
60 | + private function __construct() |
|
61 | + { |
|
62 | + // set some initial formatting for table indentation |
|
63 | + EEH_HTML::$_indent = array( |
|
64 | + 'table' => 0, |
|
65 | + 'thead' => 1, |
|
66 | + 'tbody' => 1, |
|
67 | + 'tr' => 2, |
|
68 | + 'th' => 3, |
|
69 | + 'td' => 3, |
|
70 | + 'div' => 0, |
|
71 | + 'h1' => 0, |
|
72 | + 'h2' => 0, |
|
73 | + 'h3' => 0, |
|
74 | + 'h4' => 0, |
|
75 | + 'h5' => 0, |
|
76 | + 'h6' => 0, |
|
77 | + 'p' => 0, |
|
78 | + 'ul' => 0, |
|
79 | + 'li' => 1 |
|
80 | + ); |
|
81 | + } |
|
82 | + |
|
83 | + |
|
84 | + |
|
85 | + /** |
|
86 | + * Generates an opening HTML <XX> tag and adds any passed attributes |
|
87 | + * if passed content, it will also add that, as well as the closing </XX> tag |
|
88 | + * |
|
89 | + * @access protected |
|
90 | + * @param string $tag |
|
91 | + * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
92 | + * @param string $id - html id attribute |
|
93 | + * @param string $class - html class attribute |
|
94 | + * @param string $style - html style attribute for applying inline styles |
|
95 | + * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
96 | + * @param bool $force_close |
|
97 | + * @return string |
|
98 | + */ |
|
99 | + protected static function _open_tag( |
|
100 | + $tag = 'div', |
|
101 | + $content = '', |
|
102 | + $id = '', |
|
103 | + $class = '', |
|
104 | + $style = '', |
|
105 | + $other_attributes = '', |
|
106 | + $force_close = false |
|
107 | + ) { |
|
108 | + $attributes = ! empty($id) ? ' id="' . EEH_HTML::sanitize_id($id) . '"' : ''; |
|
109 | + $attributes .= ! empty($class) ? ' class="' . $class . '"' : ''; |
|
110 | + $attributes .= ! empty($style) ? ' style="' . $style . '"' : ''; |
|
111 | + $attributes .= ! empty($other_attributes) ? ' ' . $other_attributes : ''; |
|
112 | + $html = EEH_HTML::nl(0, $tag) . '<' . $tag . $attributes . '>'; |
|
113 | + $html .= ! empty($content) ? EEH_HTML::nl(1, $tag) . $content : ''; |
|
114 | + $indent = ! empty($content) || $force_close ? true : false; |
|
115 | + $html .= ! empty($content) || $force_close ? EEH_HTML::_close_tag($tag, $id, $class, $indent) : ''; |
|
116 | + return $html; |
|
117 | + } |
|
118 | + |
|
119 | + |
|
120 | + |
|
121 | + /** |
|
122 | + * Generates HTML closing </XX> tag - if passed the id or class attribute |
|
123 | + * used for the opening tag, will append a comment |
|
124 | + * |
|
125 | 125 | *@access protected |
126 | - * @param string $tag |
|
127 | - * @param string $id - html id attribute |
|
128 | - * @param string $class - html class attribute |
|
129 | - * @param bool $indent |
|
130 | - * @return string |
|
131 | - */ |
|
132 | - protected static function _close_tag($tag = 'div', $id = '', $class = '', $indent = true) |
|
133 | - { |
|
134 | - $comment = ''; |
|
135 | - if ($id) { |
|
136 | - $comment = EEH_HTML::comment('close ' . $id) . EEH_HTML::nl(0, $tag); |
|
137 | - } elseif ($class) { |
|
138 | - $comment = EEH_HTML::comment('close ' . $class) . EEH_HTML::nl(0, $tag); |
|
139 | - } |
|
140 | - $html = $indent ? EEH_HTML::nl(-1, $tag) : ''; |
|
141 | - $html .= '</' . $tag . '>' . $comment; |
|
142 | - return $html; |
|
143 | - } |
|
144 | - |
|
145 | - |
|
146 | - |
|
147 | - /** |
|
148 | - * div - generates HTML opening <div> tag and adds any passed attributes |
|
149 | - * to add an id use: echo EEH_HTML::div( 'this is some content', 'footer' ); |
|
150 | - * to add a class use: echo EEH_HTML::div( 'this is some content', '', 'float_left' ); |
|
151 | - * to add a both an id and a class use: echo EEH_HTML::div( 'this is some content', 'footer', 'float_left' ); |
|
152 | - * |
|
153 | - * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
154 | - * @param string $id - html id attribute |
|
155 | - * @param string $class - html class attribute |
|
156 | - * @param string $style - html style attribute for applying inline styles |
|
157 | - * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
158 | - * @return string |
|
159 | - */ |
|
160 | - public static function div($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
161 | - { |
|
162 | - return EEH_HTML::_open_tag('div', $content, $id, $class, $style, $other_attributes); |
|
163 | - } |
|
164 | - |
|
165 | - |
|
166 | - |
|
167 | - /** |
|
168 | - * Generates HTML closing </div> tag - if passed the id or class attribute used for the opening div tag, will append a comment |
|
169 | - * usage: echo EEH_HTML::divx(); |
|
170 | - * |
|
171 | - * @param string $id - html id attribute |
|
172 | - * @param string $class - html class attribute |
|
173 | - * @return string |
|
174 | - */ |
|
175 | - public static function divx($id = '', $class = '') |
|
176 | - { |
|
177 | - return EEH_HTML::_close_tag('div', $id, $class); |
|
178 | - } |
|
179 | - |
|
180 | - |
|
181 | - |
|
182 | - /** |
|
183 | - * Generates HTML <h1></h1> tags, inserts content, and adds any passed attributes |
|
184 | - * usage: echo EEH_HTML::h1( 'This is a Heading' ); |
|
185 | - * |
|
186 | - * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
187 | - * @param string $id - html id attribute |
|
188 | - * @param string $class - html class attribute |
|
189 | - * @param string $style - html style attribute for applying inline styles |
|
190 | - * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
191 | - * @return string |
|
192 | - */ |
|
193 | - public static function h1($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
194 | - { |
|
195 | - return EEH_HTML::_open_tag('h1', $content, $id, $class, $style, $other_attributes, true); |
|
196 | - } |
|
197 | - |
|
198 | - |
|
199 | - |
|
200 | - /** |
|
201 | - * Generates HTML <h2></h2> tags, inserts content, and adds any passed attributes |
|
202 | - * usage: echo EEH_HTML::h2( 'This is a Heading' ); |
|
203 | - * |
|
204 | - * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
205 | - * @param string $id - html id attribute |
|
206 | - * @param string $class - html class attribute |
|
207 | - * @param string $style - html style attribute for applying inline styles |
|
208 | - * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
209 | - * @return string |
|
210 | - */ |
|
211 | - public static function h2($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
212 | - { |
|
213 | - return EEH_HTML::_open_tag('h2', $content, $id, $class, $style, $other_attributes, true); |
|
214 | - } |
|
215 | - |
|
216 | - |
|
217 | - |
|
218 | - /** |
|
219 | - * Generates HTML <h3></h3> tags, inserts content, and adds any passed attributes |
|
220 | - * usage: echo EEH_HTML::h3( 'This is a Heading' ); |
|
221 | - * |
|
222 | - * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
223 | - * @param string $id - html id attribute |
|
224 | - * @param string $class - html class attribute |
|
225 | - * @param string $style - html style attribute for applying inline styles |
|
226 | - * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
227 | - * @return string |
|
228 | - */ |
|
229 | - public static function h3($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
230 | - { |
|
231 | - return EEH_HTML::_open_tag('h3', $content, $id, $class, $style, $other_attributes, true); |
|
232 | - } |
|
233 | - |
|
234 | - |
|
235 | - |
|
236 | - /** |
|
237 | - * Generates HTML <h4></h4> tags, inserts content, and adds any passed attributes |
|
238 | - * usage: echo EEH_HTML::h4( 'This is a Heading' ); |
|
239 | - * |
|
240 | - * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
241 | - * @param string $id - html id attribute |
|
242 | - * @param string $class - html class attribute |
|
243 | - * @param string $style - html style attribute for applying inline styles |
|
244 | - * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
245 | - * @return string |
|
246 | - */ |
|
247 | - public static function h4($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
248 | - { |
|
249 | - return EEH_HTML::_open_tag('h4', $content, $id, $class, $style, $other_attributes, true); |
|
250 | - } |
|
251 | - |
|
252 | - |
|
253 | - |
|
254 | - /** |
|
255 | - * Generates HTML <h5></h5> tags, inserts content, and adds any passed attributes |
|
256 | - * usage: echo EEH_HTML::h5( 'This is a Heading' ); |
|
257 | - * |
|
258 | - * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
259 | - * @param string $id - html id attribute |
|
260 | - * @param string $class - html class attribute |
|
261 | - * @param string $style - html style attribute for applying inline styles |
|
262 | - * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
263 | - * @return string |
|
264 | - */ |
|
265 | - public static function h5($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
266 | - { |
|
267 | - return EEH_HTML::_open_tag('h5', $content, $id, $class, $style, $other_attributes, true); |
|
268 | - } |
|
269 | - |
|
270 | - |
|
271 | - |
|
272 | - /** |
|
273 | - * Generates HTML <h6></h6> tags, inserts content, and adds any passed attributes |
|
274 | - * usage: echo EEH_HTML::h6( 'This is a Heading' ); |
|
275 | - * |
|
276 | - * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
277 | - * @param string $id - html id attribute |
|
278 | - * @param string $class - html class attribute |
|
279 | - * @param string $style - html style attribute for applying inline styles |
|
280 | - * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
281 | - * @return string |
|
282 | - */ |
|
283 | - public static function h6($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
284 | - { |
|
285 | - return EEH_HTML::_open_tag('h6', $content, $id, $class, $style, $other_attributes, true); |
|
286 | - } |
|
287 | - |
|
288 | - |
|
289 | - |
|
290 | - /** |
|
291 | - * Generates HTML <p></p> tags, inserts content, and adds any passed attributes |
|
292 | - * usage: echo EEH_HTML::p( 'this is a paragraph' ); |
|
293 | - * |
|
294 | - * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
295 | - * @param string $id - html id attribute |
|
296 | - * @param string $class - html class attribute |
|
297 | - * @param string $style - html style attribute for applying inline styles |
|
298 | - * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
299 | - * @return string |
|
300 | - */ |
|
301 | - public static function p($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
302 | - { |
|
303 | - return EEH_HTML::_open_tag('p', $content, $id, $class, $style, $other_attributes, true); |
|
304 | - } |
|
305 | - |
|
306 | - |
|
307 | - |
|
308 | - /** |
|
309 | - * ul - generates HTML opening <ul> tag and adds any passed attributes |
|
310 | - * usage: echo EEH_HTML::ul( 'my-list-id', 'my-list-class' ); |
|
311 | - * |
|
312 | - * @param string $id - html id attribute |
|
313 | - * @param string $class - html class attribute |
|
314 | - * @param string $style - html style attribute for applying inline styles |
|
315 | - * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
316 | - * @return string |
|
317 | - */ |
|
318 | - public static function ul($id = '', $class = '', $style = '', $other_attributes = '') |
|
319 | - { |
|
320 | - return EEH_HTML::_open_tag('ul', '', $id, $class, $style, $other_attributes); |
|
321 | - } |
|
322 | - |
|
323 | - |
|
324 | - |
|
325 | - /** |
|
326 | - * Generates HTML closing </ul> tag - if passed the id or class attribute used for the opening ul tag, will append a comment |
|
327 | - * usage: echo EEH_HTML::ulx(); |
|
328 | - * |
|
329 | - * @param string $id - html id attribute |
|
330 | - * @param string $class - html class attribute |
|
331 | - * @return string |
|
332 | - */ |
|
333 | - public static function ulx($id = '', $class = '') |
|
334 | - { |
|
335 | - return EEH_HTML::_close_tag('ul', $id, $class); |
|
336 | - } |
|
337 | - |
|
338 | - |
|
339 | - |
|
340 | - /** |
|
341 | - * Generates HTML <li> tag, inserts content, and adds any passed attributes |
|
342 | - * if passed content, it will also add that, as well as the closing </li> tag |
|
343 | - * usage: echo EEH_HTML::li( 'this is a line item' ); |
|
344 | - * |
|
345 | - * @param string $id - html id attribute |
|
346 | - * @param string $class - html class attribute |
|
347 | - * @param string $style - html style attribute for applying inline styles |
|
348 | - * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
349 | - * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
350 | - * @return string |
|
351 | - */ |
|
352 | - public static function li($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
353 | - { |
|
354 | - return EEH_HTML::_open_tag('li', $content, $id, $class, $style, $other_attributes); |
|
355 | - } |
|
356 | - |
|
357 | - |
|
358 | - |
|
359 | - /** |
|
360 | - * Generates HTML closing </li> tag - if passed the id or class attribute used for the opening ul tag, will append a comment |
|
361 | - * usage: echo EEH_HTML::lix(); |
|
362 | - * |
|
363 | - * @param string $id - html id attribute |
|
364 | - * @param string $class - html class attribute |
|
365 | - * @return string |
|
366 | - */ |
|
367 | - public static function lix($id = '', $class = '') |
|
368 | - { |
|
369 | - return EEH_HTML::_close_tag('li', $id, $class); |
|
370 | - } |
|
371 | - |
|
372 | - |
|
373 | - |
|
374 | - /** |
|
375 | - * table - generates an HTML <table> tag and adds any passed attributes |
|
376 | - * usage: echo EEH_HTML::table(); |
|
377 | - * |
|
378 | - * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
379 | - * @param string $id - html id attribute |
|
380 | - * @param string $class - html class attribute |
|
381 | - * @param string $style - html style attribute for applying inline styles |
|
382 | - * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
383 | - * @return string |
|
384 | - */ |
|
385 | - public static function table($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
386 | - { |
|
387 | - return EEH_HTML::_open_tag('table', $content, $id, $class, $style, $other_attributes); |
|
388 | - } |
|
389 | - |
|
390 | - |
|
391 | - |
|
392 | - /** |
|
393 | - * tablex - generates an HTML </table> tag - if passed the id or class attribute used for the opening ul tag, will append a comment |
|
394 | - * |
|
395 | - * @param string $id - html id attribute |
|
396 | - * @param string $class - html class attribute |
|
397 | - * @return string |
|
398 | - */ |
|
399 | - public static function tablex($id = '', $class = '') |
|
400 | - { |
|
401 | - return EEH_HTML::_close_tag('table', $id, $class); |
|
402 | - } |
|
403 | - |
|
404 | - |
|
405 | - |
|
406 | - /** |
|
407 | - * thead - generates an HTML <thead> tag and adds any passed attributes |
|
408 | - * usage: echo EEH_HTML::thead(); |
|
409 | - * |
|
410 | - * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
411 | - * @param string $id - html id attribute |
|
412 | - * @param string $class - html class attribute |
|
413 | - * @param string $style - html style attribute for applying inline styles |
|
414 | - * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
415 | - * @return string |
|
416 | - */ |
|
417 | - public static function thead($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
418 | - { |
|
419 | - return EEH_HTML::_open_tag('thead', $content, $id, $class, $style, $other_attributes); |
|
420 | - } |
|
421 | - |
|
422 | - |
|
423 | - |
|
424 | - /** |
|
425 | - * theadx - generates an HTML </thead> tag - if passed the id or class attribute used for the opening ul tag, will append a comment |
|
426 | - * |
|
427 | - * @param string $id - html id attribute |
|
428 | - * @param string $class - html class attribute |
|
429 | - * @return string |
|
430 | - */ |
|
431 | - public static function theadx($id = '', $class = '') |
|
432 | - { |
|
433 | - return EEH_HTML::_close_tag('thead', $id, $class); |
|
434 | - } |
|
435 | - |
|
436 | - |
|
437 | - |
|
438 | - /** |
|
439 | - * tbody - generates an HTML <tbody> tag and adds any passed attributes |
|
440 | - * usage: echo EEH_HTML::tbody(); |
|
441 | - * |
|
442 | - * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
443 | - * @param string $id - html id attribute |
|
444 | - * @param string $class - html class attribute |
|
445 | - * @param string $style - html style attribute for applying inline styles |
|
446 | - * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
447 | - * @return string |
|
448 | - */ |
|
449 | - public static function tbody($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
450 | - { |
|
451 | - return EEH_HTML::_open_tag('tbody', $content, $id, $class, $style, $other_attributes); |
|
452 | - } |
|
453 | - |
|
454 | - |
|
455 | - |
|
456 | - /** |
|
457 | - * tbodyx - generates an HTML </tbody> tag - if passed the id or class attribute used for the opening ul tag, will append a comment |
|
458 | - * |
|
459 | - * @param string $id - html id attribute |
|
460 | - * @param string $class - html class attribute |
|
461 | - * @return string |
|
462 | - */ |
|
463 | - public static function tbodyx($id = '', $class = '') |
|
464 | - { |
|
465 | - return EEH_HTML::_close_tag('tbody', $id, $class); |
|
466 | - } |
|
467 | - |
|
468 | - |
|
469 | - |
|
470 | - /** |
|
471 | - * tr - generates an HTML <tr> tag and adds any passed attributes |
|
472 | - * usage: echo EEH_HTML::tr(); |
|
473 | - * |
|
474 | - * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
475 | - * @param string $id - html id attribute |
|
476 | - * @param string $class - html class attribute |
|
477 | - * @param string $style - html style attribute for applying inline styles |
|
478 | - * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
479 | - * @return string |
|
480 | - */ |
|
481 | - public static function tr($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
482 | - { |
|
483 | - return EEH_HTML::_open_tag('tr', $content, $id, $class, $style, $other_attributes); |
|
484 | - } |
|
485 | - |
|
486 | - |
|
487 | - |
|
488 | - /** |
|
489 | - * trx - generates an HTML </tr> tag - if passed the id or class attribute used for the opening ul tag, will append a comment |
|
490 | - * |
|
491 | - * @param string $id - html id attribute |
|
492 | - * @param string $class - html class attribute |
|
493 | - * @return string |
|
494 | - */ |
|
495 | - public static function trx($id = '', $class = '') |
|
496 | - { |
|
497 | - return EEH_HTML::_close_tag('tr', $id, $class); |
|
498 | - } |
|
499 | - |
|
500 | - |
|
501 | - |
|
502 | - /** |
|
503 | - * th - generates an HTML <th> tag and adds any passed attributes |
|
504 | - * usage: echo EEH_HTML::th(); |
|
505 | - * |
|
506 | - * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
507 | - * @param string $id - html id attribute |
|
508 | - * @param string $class - html class attribute |
|
509 | - * @param string $style - html style attribute for applying inline styles |
|
510 | - * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
511 | - * @return string |
|
512 | - */ |
|
513 | - public static function th($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
514 | - { |
|
515 | - return EEH_HTML::_open_tag('th', $content, $id, $class, $style, $other_attributes); |
|
516 | - } |
|
517 | - |
|
518 | - |
|
519 | - |
|
520 | - /** |
|
521 | - * thx - generates an HTML </th> tag - if passed the id or class attribute used for the opening ul tag, will append a comment |
|
522 | - * |
|
523 | - * @param string $id - html id attribute |
|
524 | - * @param string $class - html class attribute |
|
525 | - * @return string |
|
526 | - */ |
|
527 | - public static function thx($id = '', $class = '') |
|
528 | - { |
|
529 | - return EEH_HTML::_close_tag('th', $id, $class); |
|
530 | - } |
|
531 | - |
|
532 | - |
|
533 | - |
|
534 | - /** |
|
535 | - * td - generates an HTML <td> tag and adds any passed attributes |
|
536 | - * usage: echo EEH_HTML::td(); |
|
537 | - * |
|
538 | - * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
539 | - * @param string $id - html id attribute |
|
540 | - * @param string $class - html class attribute |
|
541 | - * @param string $style - html style attribute for applying inline styles |
|
542 | - * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
543 | - * @return string |
|
544 | - */ |
|
545 | - public static function td($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
546 | - { |
|
547 | - return EEH_HTML::_open_tag('td', $content, $id, $class, $style, $other_attributes); |
|
548 | - } |
|
549 | - |
|
550 | - |
|
551 | - |
|
552 | - /** |
|
553 | - * tdx - generates an HTML </td> tag - if passed the id or class attribute used for the opening ul tag, will append a comment |
|
554 | - * |
|
555 | - * @param string $id - html id attribute |
|
556 | - * @param string $class - html class attribute |
|
557 | - * @return string |
|
558 | - */ |
|
559 | - public static function tdx($id = '', $class = '') |
|
560 | - { |
|
561 | - return EEH_HTML::_close_tag('td', $id, $class); |
|
562 | - } |
|
563 | - |
|
564 | - |
|
565 | - |
|
566 | - /** |
|
567 | - * no_row - for generating a "hidden" table row, good for embedding tables within tables |
|
568 | - * generates a new table row with one td cell that spans however many columns you set |
|
569 | - * removes all styles from the tr and td |
|
570 | - * |
|
571 | - * @param string $content |
|
572 | - * @param int $colspan |
|
573 | - * @return string |
|
574 | - */ |
|
575 | - public static function no_row($content = '', $colspan = 2) |
|
576 | - { |
|
577 | - return EEH_HTML::tr( |
|
578 | - EEH_HTML::td($content, '', '', 'padding:0; border:none;', 'colspan="' . $colspan . '"'), |
|
579 | - '', |
|
580 | - '', |
|
581 | - 'padding:0; border:none;' |
|
582 | - ); |
|
583 | - } |
|
584 | - |
|
585 | - |
|
586 | - |
|
587 | - /** |
|
588 | - * Generates HTML <label></label> tags, inserts content, and adds any passed attributes |
|
589 | - * usage: echo EEH_HTML::span( 'this is some inline text' ); |
|
590 | - * |
|
591 | - * @access public |
|
592 | - * @param string $href URL to link to |
|
593 | - * @param string $link_text - the text that will become "hyperlinked" |
|
594 | - * @param string $title - html title attribute |
|
595 | - * @param string $id - html id attribute |
|
596 | - * @param string $class - html class attribute |
|
597 | - * @param string $style - html style attribute for applying inline styles |
|
598 | - * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
599 | - * @return string |
|
600 | - */ |
|
601 | - public static function link($href = '', $link_text = '', $title = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
602 | - { |
|
603 | - $link_text = ! empty($link_text) ? $link_text : $href; |
|
604 | - $attributes = ! empty($href) ? ' href="' . $href . '"' : ''; |
|
605 | - $attributes .= ! empty($id) ? ' id="' . EEH_HTML::sanitize_id($id) . '"' : ''; |
|
606 | - $attributes .= ! empty($class) ? ' class="' . $class . '"' : ''; |
|
607 | - $attributes .= ! empty($style) ? ' style="' . $style . '"' : ''; |
|
608 | - $attributes .= ! empty($title) ? ' title="' . esc_attr($title) . '"' : ''; |
|
609 | - $attributes .= ! empty($other_attributes) ? ' ' . $other_attributes : ''; |
|
610 | - return "<a{$attributes}>{$link_text}</a>"; |
|
611 | - } |
|
612 | - |
|
613 | - |
|
614 | - |
|
615 | - /** |
|
616 | - * img - generates an HTML <img> tag and adds any passed attributes |
|
617 | - * usage: echo EEH_HTML::img(); |
|
618 | - * |
|
619 | - * @param string $src - html src attribute ie: the path or URL to the image |
|
620 | - * @param string $alt - html alt attribute |
|
621 | - * @param string $id - html id attribute |
|
622 | - * @param string $class - html class attribute |
|
623 | - * @param string $style - html style attribute for applying inline styles |
|
624 | - * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
625 | - * @return string |
|
626 | - */ |
|
627 | - public static function img($src = '', $alt = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
628 | - { |
|
629 | - $attributes = ! empty($src) ? ' src="' . esc_url_raw($src) . '"' : ''; |
|
630 | - $attributes .= ! empty($alt) ? ' alt="' . esc_attr($alt) . '"' : ''; |
|
631 | - $attributes .= ! empty($id) ? ' id="' . EEH_HTML::sanitize_id($id) . '"' : ''; |
|
632 | - $attributes .= ! empty($class) ? ' class="' . $class . '"' : ''; |
|
633 | - $attributes .= ! empty($style) ? ' style="' . $style . '"' : ''; |
|
634 | - $attributes .= ! empty($other_attributes) ? ' ' . $other_attributes : ''; |
|
635 | - return '<img' . $attributes . '/>'; |
|
636 | - } |
|
637 | - |
|
638 | - |
|
639 | - |
|
640 | - /** |
|
641 | - * Generates HTML <label></label> tags, inserts content, and adds any passed attributes |
|
642 | - * usage: echo EEH_HTML::span( 'this is some inline text' ); |
|
643 | - * |
|
644 | - * @access protected |
|
645 | - * @param string $tag |
|
646 | - * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
647 | - * @param string $id - html id attribute |
|
648 | - * @param string $class - html class attribute |
|
649 | - * @param string $style - html style attribute for applying inline styles |
|
650 | - * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
651 | - * @return string |
|
652 | - */ |
|
653 | - protected static function _inline_tag($tag = 'span', $content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
654 | - { |
|
655 | - $attributes = ! empty($id) ? ' id="' . EEH_HTML::sanitize_id($id) . '"' : ''; |
|
656 | - $attributes .= ! empty($class) ? ' class="' . $class . '"' : ''; |
|
657 | - $attributes .= ! empty($style) ? ' style="' . $style . '"' : ''; |
|
658 | - $attributes .= ! empty($other_attributes) ? ' ' . $other_attributes : ''; |
|
659 | - return '<' . $tag . ' ' . $attributes . '>' . $content . '</' . $tag . '>'; |
|
660 | - } |
|
661 | - |
|
662 | - |
|
663 | - |
|
664 | - /** |
|
665 | - * Generates HTML <label></label> tags, inserts content, and adds any passed attributes |
|
666 | - * usage: echo EEH_HTML::span( 'this is some inline text' ); |
|
667 | - * |
|
668 | - * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
669 | - * @param string $id - html id attribute |
|
670 | - * @param string $class - html class attribute |
|
671 | - * @param string $style - html style attribute for applying inline styles |
|
672 | - * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
673 | - * @return string |
|
674 | - */ |
|
675 | - public static function label($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
676 | - { |
|
677 | - return EEH_HTML::_inline_tag('label', $content, $id, $class, $style, $other_attributes); |
|
678 | - } |
|
679 | - |
|
680 | - |
|
681 | - |
|
682 | - /** |
|
683 | - * Generates HTML <span></span> tags, inserts content, and adds any passed attributes |
|
684 | - * usage: echo EEH_HTML::span( 'this is some inline text' ); |
|
685 | - * |
|
686 | - * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
687 | - * @param string $id - html id attribute |
|
688 | - * @param string $class - html class attribute |
|
689 | - * @param string $style - html style attribute for applying inline styles |
|
690 | - * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
691 | - * @return string |
|
692 | - */ |
|
693 | - public static function span($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
694 | - { |
|
695 | - return EEH_HTML::_inline_tag('span', $content, $id, $class, $style, $other_attributes); |
|
696 | - } |
|
697 | - |
|
698 | - |
|
699 | - |
|
700 | - /** |
|
701 | - * Generates HTML <span></span> tags, inserts content, and adds any passed attributes |
|
702 | - * usage: echo EEH_HTML::span( 'this is some inline text' ); |
|
703 | - * |
|
704 | - * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
705 | - * @param string $id - html id attribute |
|
706 | - * @param string $class - html class attribute |
|
707 | - * @param string $style - html style attribute for applying inline styles |
|
708 | - * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
709 | - * @return string |
|
710 | - */ |
|
711 | - public static function strong($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
712 | - { |
|
713 | - return EEH_HTML::_inline_tag('strong', $content, $id, $class, $style, $other_attributes); |
|
714 | - } |
|
715 | - |
|
716 | - |
|
717 | - |
|
718 | - /** |
|
719 | - * Generates an html <-- comment --> tag |
|
720 | - * usage: echo comment( 'this is a comment' ); |
|
721 | - * |
|
722 | - * @param string $comment |
|
723 | - * @return string |
|
724 | - */ |
|
725 | - public static function comment($comment = '') |
|
726 | - { |
|
727 | - return ! empty($comment) ? EEH_HTML::nl() . '<!-- ' . $comment . ' -->' : ''; |
|
728 | - } |
|
729 | - |
|
730 | - |
|
731 | - |
|
732 | - /** |
|
733 | - * br - generates a line break |
|
734 | - * |
|
735 | - * @param int $nmbr - the number of line breaks to return |
|
736 | - * @return string |
|
737 | - */ |
|
738 | - public static function br($nmbr = 1) |
|
739 | - { |
|
740 | - return str_repeat('<br />', $nmbr); |
|
741 | - } |
|
742 | - |
|
743 | - |
|
744 | - |
|
745 | - /** |
|
746 | - * nbsp - generates non-breaking space entities based on number supplied |
|
747 | - * |
|
748 | - * @param int $nmbr - the number of non-breaking spaces to return |
|
749 | - * @return string |
|
750 | - */ |
|
751 | - public static function nbsp($nmbr = 1) |
|
752 | - { |
|
753 | - return str_repeat(' ', $nmbr); |
|
754 | - } |
|
755 | - |
|
756 | - |
|
757 | - |
|
758 | - /** |
|
759 | - * sanitize_id |
|
760 | - * |
|
761 | - * functionally does the same as the wp_core function sanitize_key except it does NOT use |
|
762 | - * strtolower and allows capitals. |
|
763 | - * |
|
764 | - * @param string $id |
|
765 | - * @return string |
|
766 | - */ |
|
767 | - public static function sanitize_id($id = '') |
|
768 | - { |
|
769 | - $key = str_replace(' ', '-', trim($id)); |
|
770 | - return preg_replace('/[^a-zA-Z0-9_\-]/', '', $key); |
|
771 | - } |
|
772 | - |
|
773 | - |
|
774 | - |
|
775 | - /** |
|
776 | - * return a newline and tabs ("nl" stands for "new line") |
|
777 | - * |
|
778 | - * @param int $indent the number of tabs to ADD to the current indent (can be negative or zero) |
|
779 | - * @param string $tag |
|
780 | - * @return string - newline character plus # of indents passed (can be + or -) |
|
781 | - */ |
|
782 | - public static function nl($indent = 0, $tag = 'none') |
|
783 | - { |
|
784 | - $html = "\n"; |
|
785 | - EEH_HTML::indent($indent, $tag); |
|
786 | - for ($x = 0; $x < EEH_HTML::$_indent[ $tag ]; $x++) { |
|
787 | - $html .= "\t"; |
|
788 | - } |
|
789 | - return $html; |
|
790 | - } |
|
791 | - |
|
792 | - |
|
793 | - |
|
794 | - /** |
|
795 | - * Changes the indents used in EEH_HTML::nl. Often its convenient to change |
|
796 | - * the indentation level without actually creating a new line |
|
797 | - * |
|
798 | - * @param int $indent can be negative to decrease the indentation level |
|
799 | - * @param string $tag |
|
800 | - */ |
|
801 | - public static function indent($indent, $tag = 'none') |
|
802 | - { |
|
803 | - static $default_indentation = false; |
|
804 | - if (! $default_indentation) { |
|
805 | - EEH_HTML::_set_default_indentation(); |
|
806 | - $default_indentation = true; |
|
807 | - } |
|
808 | - if (! isset(EEH_HTML::$_indent[ $tag ])) { |
|
809 | - EEH_HTML::$_indent[ $tag ] = 0; |
|
810 | - } |
|
811 | - EEH_HTML::$_indent[ $tag ] += (int) $indent; |
|
812 | - EEH_HTML::$_indent[ $tag ] = EEH_HTML::$_indent[ $tag ] >= 0 ? EEH_HTML::$_indent[ $tag ] : 0; |
|
813 | - } |
|
814 | - |
|
815 | - |
|
816 | - /** |
|
817 | - * class _set_default_indentation |
|
818 | - * |
|
819 | - * @access private |
|
820 | - */ |
|
821 | - private static function _set_default_indentation() |
|
822 | - { |
|
823 | - // set some initial formatting for table indentation |
|
824 | - EEH_HTML::$_indent = array( |
|
825 | - 'none' => 0, |
|
826 | - 'form' => 0, |
|
827 | - 'radio' => 0, |
|
828 | - 'checkbox' => 0, |
|
829 | - 'select' => 0, |
|
830 | - 'option' => 0, |
|
831 | - 'optgroup' => 0, |
|
832 | - 'table' => 1, |
|
833 | - 'thead' => 2, |
|
834 | - 'tbody' => 2, |
|
835 | - 'tr' => 3, |
|
836 | - 'th' => 4, |
|
837 | - 'td' => 4, |
|
838 | - 'div' => 0, |
|
839 | - 'h1' => 0, |
|
840 | - 'h2' => 0, |
|
841 | - 'h3' => 0, |
|
842 | - 'h4' => 0, |
|
843 | - 'h5' => 0, |
|
844 | - 'h6' => 0, |
|
845 | - 'p' => 0, |
|
846 | - 'ul' => 0, |
|
847 | - 'li' => 1 |
|
848 | - ); |
|
849 | - } |
|
850 | - |
|
851 | - |
|
852 | - |
|
853 | - /** |
|
854 | - * Retrieves the list of tags considered "simple", that are probably safe for |
|
855 | - * use in inputs |
|
856 | - * @global array $allowedtags |
|
857 | - * @return array |
|
858 | - */ |
|
859 | - public static function get_simple_tags() |
|
860 | - { |
|
861 | - global $allowedtags; |
|
862 | - $tags_we_allow = array_merge_recursive( |
|
863 | - $allowedtags, |
|
864 | - [ |
|
865 | - 'ol' => [], |
|
866 | - 'ul' => [], |
|
867 | - 'li' => [], |
|
868 | - 'br' => [], |
|
869 | - 'p' => [], |
|
870 | - 'a' => ['target'] |
|
871 | - ] |
|
872 | - ); |
|
873 | - return apply_filters('FHEE__EEH_HTML__get_simple_tags', $tags_we_allow); |
|
874 | - } |
|
126 | + * @param string $tag |
|
127 | + * @param string $id - html id attribute |
|
128 | + * @param string $class - html class attribute |
|
129 | + * @param bool $indent |
|
130 | + * @return string |
|
131 | + */ |
|
132 | + protected static function _close_tag($tag = 'div', $id = '', $class = '', $indent = true) |
|
133 | + { |
|
134 | + $comment = ''; |
|
135 | + if ($id) { |
|
136 | + $comment = EEH_HTML::comment('close ' . $id) . EEH_HTML::nl(0, $tag); |
|
137 | + } elseif ($class) { |
|
138 | + $comment = EEH_HTML::comment('close ' . $class) . EEH_HTML::nl(0, $tag); |
|
139 | + } |
|
140 | + $html = $indent ? EEH_HTML::nl(-1, $tag) : ''; |
|
141 | + $html .= '</' . $tag . '>' . $comment; |
|
142 | + return $html; |
|
143 | + } |
|
144 | + |
|
145 | + |
|
146 | + |
|
147 | + /** |
|
148 | + * div - generates HTML opening <div> tag and adds any passed attributes |
|
149 | + * to add an id use: echo EEH_HTML::div( 'this is some content', 'footer' ); |
|
150 | + * to add a class use: echo EEH_HTML::div( 'this is some content', '', 'float_left' ); |
|
151 | + * to add a both an id and a class use: echo EEH_HTML::div( 'this is some content', 'footer', 'float_left' ); |
|
152 | + * |
|
153 | + * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
154 | + * @param string $id - html id attribute |
|
155 | + * @param string $class - html class attribute |
|
156 | + * @param string $style - html style attribute for applying inline styles |
|
157 | + * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
158 | + * @return string |
|
159 | + */ |
|
160 | + public static function div($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
161 | + { |
|
162 | + return EEH_HTML::_open_tag('div', $content, $id, $class, $style, $other_attributes); |
|
163 | + } |
|
164 | + |
|
165 | + |
|
166 | + |
|
167 | + /** |
|
168 | + * Generates HTML closing </div> tag - if passed the id or class attribute used for the opening div tag, will append a comment |
|
169 | + * usage: echo EEH_HTML::divx(); |
|
170 | + * |
|
171 | + * @param string $id - html id attribute |
|
172 | + * @param string $class - html class attribute |
|
173 | + * @return string |
|
174 | + */ |
|
175 | + public static function divx($id = '', $class = '') |
|
176 | + { |
|
177 | + return EEH_HTML::_close_tag('div', $id, $class); |
|
178 | + } |
|
179 | + |
|
180 | + |
|
181 | + |
|
182 | + /** |
|
183 | + * Generates HTML <h1></h1> tags, inserts content, and adds any passed attributes |
|
184 | + * usage: echo EEH_HTML::h1( 'This is a Heading' ); |
|
185 | + * |
|
186 | + * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
187 | + * @param string $id - html id attribute |
|
188 | + * @param string $class - html class attribute |
|
189 | + * @param string $style - html style attribute for applying inline styles |
|
190 | + * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
191 | + * @return string |
|
192 | + */ |
|
193 | + public static function h1($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
194 | + { |
|
195 | + return EEH_HTML::_open_tag('h1', $content, $id, $class, $style, $other_attributes, true); |
|
196 | + } |
|
197 | + |
|
198 | + |
|
199 | + |
|
200 | + /** |
|
201 | + * Generates HTML <h2></h2> tags, inserts content, and adds any passed attributes |
|
202 | + * usage: echo EEH_HTML::h2( 'This is a Heading' ); |
|
203 | + * |
|
204 | + * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
205 | + * @param string $id - html id attribute |
|
206 | + * @param string $class - html class attribute |
|
207 | + * @param string $style - html style attribute for applying inline styles |
|
208 | + * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
209 | + * @return string |
|
210 | + */ |
|
211 | + public static function h2($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
212 | + { |
|
213 | + return EEH_HTML::_open_tag('h2', $content, $id, $class, $style, $other_attributes, true); |
|
214 | + } |
|
215 | + |
|
216 | + |
|
217 | + |
|
218 | + /** |
|
219 | + * Generates HTML <h3></h3> tags, inserts content, and adds any passed attributes |
|
220 | + * usage: echo EEH_HTML::h3( 'This is a Heading' ); |
|
221 | + * |
|
222 | + * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
223 | + * @param string $id - html id attribute |
|
224 | + * @param string $class - html class attribute |
|
225 | + * @param string $style - html style attribute for applying inline styles |
|
226 | + * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
227 | + * @return string |
|
228 | + */ |
|
229 | + public static function h3($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
230 | + { |
|
231 | + return EEH_HTML::_open_tag('h3', $content, $id, $class, $style, $other_attributes, true); |
|
232 | + } |
|
233 | + |
|
234 | + |
|
235 | + |
|
236 | + /** |
|
237 | + * Generates HTML <h4></h4> tags, inserts content, and adds any passed attributes |
|
238 | + * usage: echo EEH_HTML::h4( 'This is a Heading' ); |
|
239 | + * |
|
240 | + * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
241 | + * @param string $id - html id attribute |
|
242 | + * @param string $class - html class attribute |
|
243 | + * @param string $style - html style attribute for applying inline styles |
|
244 | + * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
245 | + * @return string |
|
246 | + */ |
|
247 | + public static function h4($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
248 | + { |
|
249 | + return EEH_HTML::_open_tag('h4', $content, $id, $class, $style, $other_attributes, true); |
|
250 | + } |
|
251 | + |
|
252 | + |
|
253 | + |
|
254 | + /** |
|
255 | + * Generates HTML <h5></h5> tags, inserts content, and adds any passed attributes |
|
256 | + * usage: echo EEH_HTML::h5( 'This is a Heading' ); |
|
257 | + * |
|
258 | + * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
259 | + * @param string $id - html id attribute |
|
260 | + * @param string $class - html class attribute |
|
261 | + * @param string $style - html style attribute for applying inline styles |
|
262 | + * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
263 | + * @return string |
|
264 | + */ |
|
265 | + public static function h5($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
266 | + { |
|
267 | + return EEH_HTML::_open_tag('h5', $content, $id, $class, $style, $other_attributes, true); |
|
268 | + } |
|
269 | + |
|
270 | + |
|
271 | + |
|
272 | + /** |
|
273 | + * Generates HTML <h6></h6> tags, inserts content, and adds any passed attributes |
|
274 | + * usage: echo EEH_HTML::h6( 'This is a Heading' ); |
|
275 | + * |
|
276 | + * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
277 | + * @param string $id - html id attribute |
|
278 | + * @param string $class - html class attribute |
|
279 | + * @param string $style - html style attribute for applying inline styles |
|
280 | + * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
281 | + * @return string |
|
282 | + */ |
|
283 | + public static function h6($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
284 | + { |
|
285 | + return EEH_HTML::_open_tag('h6', $content, $id, $class, $style, $other_attributes, true); |
|
286 | + } |
|
287 | + |
|
288 | + |
|
289 | + |
|
290 | + /** |
|
291 | + * Generates HTML <p></p> tags, inserts content, and adds any passed attributes |
|
292 | + * usage: echo EEH_HTML::p( 'this is a paragraph' ); |
|
293 | + * |
|
294 | + * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
295 | + * @param string $id - html id attribute |
|
296 | + * @param string $class - html class attribute |
|
297 | + * @param string $style - html style attribute for applying inline styles |
|
298 | + * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
299 | + * @return string |
|
300 | + */ |
|
301 | + public static function p($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
302 | + { |
|
303 | + return EEH_HTML::_open_tag('p', $content, $id, $class, $style, $other_attributes, true); |
|
304 | + } |
|
305 | + |
|
306 | + |
|
307 | + |
|
308 | + /** |
|
309 | + * ul - generates HTML opening <ul> tag and adds any passed attributes |
|
310 | + * usage: echo EEH_HTML::ul( 'my-list-id', 'my-list-class' ); |
|
311 | + * |
|
312 | + * @param string $id - html id attribute |
|
313 | + * @param string $class - html class attribute |
|
314 | + * @param string $style - html style attribute for applying inline styles |
|
315 | + * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
316 | + * @return string |
|
317 | + */ |
|
318 | + public static function ul($id = '', $class = '', $style = '', $other_attributes = '') |
|
319 | + { |
|
320 | + return EEH_HTML::_open_tag('ul', '', $id, $class, $style, $other_attributes); |
|
321 | + } |
|
322 | + |
|
323 | + |
|
324 | + |
|
325 | + /** |
|
326 | + * Generates HTML closing </ul> tag - if passed the id or class attribute used for the opening ul tag, will append a comment |
|
327 | + * usage: echo EEH_HTML::ulx(); |
|
328 | + * |
|
329 | + * @param string $id - html id attribute |
|
330 | + * @param string $class - html class attribute |
|
331 | + * @return string |
|
332 | + */ |
|
333 | + public static function ulx($id = '', $class = '') |
|
334 | + { |
|
335 | + return EEH_HTML::_close_tag('ul', $id, $class); |
|
336 | + } |
|
337 | + |
|
338 | + |
|
339 | + |
|
340 | + /** |
|
341 | + * Generates HTML <li> tag, inserts content, and adds any passed attributes |
|
342 | + * if passed content, it will also add that, as well as the closing </li> tag |
|
343 | + * usage: echo EEH_HTML::li( 'this is a line item' ); |
|
344 | + * |
|
345 | + * @param string $id - html id attribute |
|
346 | + * @param string $class - html class attribute |
|
347 | + * @param string $style - html style attribute for applying inline styles |
|
348 | + * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
349 | + * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
350 | + * @return string |
|
351 | + */ |
|
352 | + public static function li($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
353 | + { |
|
354 | + return EEH_HTML::_open_tag('li', $content, $id, $class, $style, $other_attributes); |
|
355 | + } |
|
356 | + |
|
357 | + |
|
358 | + |
|
359 | + /** |
|
360 | + * Generates HTML closing </li> tag - if passed the id or class attribute used for the opening ul tag, will append a comment |
|
361 | + * usage: echo EEH_HTML::lix(); |
|
362 | + * |
|
363 | + * @param string $id - html id attribute |
|
364 | + * @param string $class - html class attribute |
|
365 | + * @return string |
|
366 | + */ |
|
367 | + public static function lix($id = '', $class = '') |
|
368 | + { |
|
369 | + return EEH_HTML::_close_tag('li', $id, $class); |
|
370 | + } |
|
371 | + |
|
372 | + |
|
373 | + |
|
374 | + /** |
|
375 | + * table - generates an HTML <table> tag and adds any passed attributes |
|
376 | + * usage: echo EEH_HTML::table(); |
|
377 | + * |
|
378 | + * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
379 | + * @param string $id - html id attribute |
|
380 | + * @param string $class - html class attribute |
|
381 | + * @param string $style - html style attribute for applying inline styles |
|
382 | + * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
383 | + * @return string |
|
384 | + */ |
|
385 | + public static function table($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
386 | + { |
|
387 | + return EEH_HTML::_open_tag('table', $content, $id, $class, $style, $other_attributes); |
|
388 | + } |
|
389 | + |
|
390 | + |
|
391 | + |
|
392 | + /** |
|
393 | + * tablex - generates an HTML </table> tag - if passed the id or class attribute used for the opening ul tag, will append a comment |
|
394 | + * |
|
395 | + * @param string $id - html id attribute |
|
396 | + * @param string $class - html class attribute |
|
397 | + * @return string |
|
398 | + */ |
|
399 | + public static function tablex($id = '', $class = '') |
|
400 | + { |
|
401 | + return EEH_HTML::_close_tag('table', $id, $class); |
|
402 | + } |
|
403 | + |
|
404 | + |
|
405 | + |
|
406 | + /** |
|
407 | + * thead - generates an HTML <thead> tag and adds any passed attributes |
|
408 | + * usage: echo EEH_HTML::thead(); |
|
409 | + * |
|
410 | + * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
411 | + * @param string $id - html id attribute |
|
412 | + * @param string $class - html class attribute |
|
413 | + * @param string $style - html style attribute for applying inline styles |
|
414 | + * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
415 | + * @return string |
|
416 | + */ |
|
417 | + public static function thead($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
418 | + { |
|
419 | + return EEH_HTML::_open_tag('thead', $content, $id, $class, $style, $other_attributes); |
|
420 | + } |
|
421 | + |
|
422 | + |
|
423 | + |
|
424 | + /** |
|
425 | + * theadx - generates an HTML </thead> tag - if passed the id or class attribute used for the opening ul tag, will append a comment |
|
426 | + * |
|
427 | + * @param string $id - html id attribute |
|
428 | + * @param string $class - html class attribute |
|
429 | + * @return string |
|
430 | + */ |
|
431 | + public static function theadx($id = '', $class = '') |
|
432 | + { |
|
433 | + return EEH_HTML::_close_tag('thead', $id, $class); |
|
434 | + } |
|
435 | + |
|
436 | + |
|
437 | + |
|
438 | + /** |
|
439 | + * tbody - generates an HTML <tbody> tag and adds any passed attributes |
|
440 | + * usage: echo EEH_HTML::tbody(); |
|
441 | + * |
|
442 | + * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
443 | + * @param string $id - html id attribute |
|
444 | + * @param string $class - html class attribute |
|
445 | + * @param string $style - html style attribute for applying inline styles |
|
446 | + * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
447 | + * @return string |
|
448 | + */ |
|
449 | + public static function tbody($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
450 | + { |
|
451 | + return EEH_HTML::_open_tag('tbody', $content, $id, $class, $style, $other_attributes); |
|
452 | + } |
|
453 | + |
|
454 | + |
|
455 | + |
|
456 | + /** |
|
457 | + * tbodyx - generates an HTML </tbody> tag - if passed the id or class attribute used for the opening ul tag, will append a comment |
|
458 | + * |
|
459 | + * @param string $id - html id attribute |
|
460 | + * @param string $class - html class attribute |
|
461 | + * @return string |
|
462 | + */ |
|
463 | + public static function tbodyx($id = '', $class = '') |
|
464 | + { |
|
465 | + return EEH_HTML::_close_tag('tbody', $id, $class); |
|
466 | + } |
|
467 | + |
|
468 | + |
|
469 | + |
|
470 | + /** |
|
471 | + * tr - generates an HTML <tr> tag and adds any passed attributes |
|
472 | + * usage: echo EEH_HTML::tr(); |
|
473 | + * |
|
474 | + * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
475 | + * @param string $id - html id attribute |
|
476 | + * @param string $class - html class attribute |
|
477 | + * @param string $style - html style attribute for applying inline styles |
|
478 | + * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
479 | + * @return string |
|
480 | + */ |
|
481 | + public static function tr($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
482 | + { |
|
483 | + return EEH_HTML::_open_tag('tr', $content, $id, $class, $style, $other_attributes); |
|
484 | + } |
|
485 | + |
|
486 | + |
|
487 | + |
|
488 | + /** |
|
489 | + * trx - generates an HTML </tr> tag - if passed the id or class attribute used for the opening ul tag, will append a comment |
|
490 | + * |
|
491 | + * @param string $id - html id attribute |
|
492 | + * @param string $class - html class attribute |
|
493 | + * @return string |
|
494 | + */ |
|
495 | + public static function trx($id = '', $class = '') |
|
496 | + { |
|
497 | + return EEH_HTML::_close_tag('tr', $id, $class); |
|
498 | + } |
|
499 | + |
|
500 | + |
|
501 | + |
|
502 | + /** |
|
503 | + * th - generates an HTML <th> tag and adds any passed attributes |
|
504 | + * usage: echo EEH_HTML::th(); |
|
505 | + * |
|
506 | + * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
507 | + * @param string $id - html id attribute |
|
508 | + * @param string $class - html class attribute |
|
509 | + * @param string $style - html style attribute for applying inline styles |
|
510 | + * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
511 | + * @return string |
|
512 | + */ |
|
513 | + public static function th($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
514 | + { |
|
515 | + return EEH_HTML::_open_tag('th', $content, $id, $class, $style, $other_attributes); |
|
516 | + } |
|
517 | + |
|
518 | + |
|
519 | + |
|
520 | + /** |
|
521 | + * thx - generates an HTML </th> tag - if passed the id or class attribute used for the opening ul tag, will append a comment |
|
522 | + * |
|
523 | + * @param string $id - html id attribute |
|
524 | + * @param string $class - html class attribute |
|
525 | + * @return string |
|
526 | + */ |
|
527 | + public static function thx($id = '', $class = '') |
|
528 | + { |
|
529 | + return EEH_HTML::_close_tag('th', $id, $class); |
|
530 | + } |
|
531 | + |
|
532 | + |
|
533 | + |
|
534 | + /** |
|
535 | + * td - generates an HTML <td> tag and adds any passed attributes |
|
536 | + * usage: echo EEH_HTML::td(); |
|
537 | + * |
|
538 | + * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
539 | + * @param string $id - html id attribute |
|
540 | + * @param string $class - html class attribute |
|
541 | + * @param string $style - html style attribute for applying inline styles |
|
542 | + * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
543 | + * @return string |
|
544 | + */ |
|
545 | + public static function td($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
546 | + { |
|
547 | + return EEH_HTML::_open_tag('td', $content, $id, $class, $style, $other_attributes); |
|
548 | + } |
|
549 | + |
|
550 | + |
|
551 | + |
|
552 | + /** |
|
553 | + * tdx - generates an HTML </td> tag - if passed the id or class attribute used for the opening ul tag, will append a comment |
|
554 | + * |
|
555 | + * @param string $id - html id attribute |
|
556 | + * @param string $class - html class attribute |
|
557 | + * @return string |
|
558 | + */ |
|
559 | + public static function tdx($id = '', $class = '') |
|
560 | + { |
|
561 | + return EEH_HTML::_close_tag('td', $id, $class); |
|
562 | + } |
|
563 | + |
|
564 | + |
|
565 | + |
|
566 | + /** |
|
567 | + * no_row - for generating a "hidden" table row, good for embedding tables within tables |
|
568 | + * generates a new table row with one td cell that spans however many columns you set |
|
569 | + * removes all styles from the tr and td |
|
570 | + * |
|
571 | + * @param string $content |
|
572 | + * @param int $colspan |
|
573 | + * @return string |
|
574 | + */ |
|
575 | + public static function no_row($content = '', $colspan = 2) |
|
576 | + { |
|
577 | + return EEH_HTML::tr( |
|
578 | + EEH_HTML::td($content, '', '', 'padding:0; border:none;', 'colspan="' . $colspan . '"'), |
|
579 | + '', |
|
580 | + '', |
|
581 | + 'padding:0; border:none;' |
|
582 | + ); |
|
583 | + } |
|
584 | + |
|
585 | + |
|
586 | + |
|
587 | + /** |
|
588 | + * Generates HTML <label></label> tags, inserts content, and adds any passed attributes |
|
589 | + * usage: echo EEH_HTML::span( 'this is some inline text' ); |
|
590 | + * |
|
591 | + * @access public |
|
592 | + * @param string $href URL to link to |
|
593 | + * @param string $link_text - the text that will become "hyperlinked" |
|
594 | + * @param string $title - html title attribute |
|
595 | + * @param string $id - html id attribute |
|
596 | + * @param string $class - html class attribute |
|
597 | + * @param string $style - html style attribute for applying inline styles |
|
598 | + * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
599 | + * @return string |
|
600 | + */ |
|
601 | + public static function link($href = '', $link_text = '', $title = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
602 | + { |
|
603 | + $link_text = ! empty($link_text) ? $link_text : $href; |
|
604 | + $attributes = ! empty($href) ? ' href="' . $href . '"' : ''; |
|
605 | + $attributes .= ! empty($id) ? ' id="' . EEH_HTML::sanitize_id($id) . '"' : ''; |
|
606 | + $attributes .= ! empty($class) ? ' class="' . $class . '"' : ''; |
|
607 | + $attributes .= ! empty($style) ? ' style="' . $style . '"' : ''; |
|
608 | + $attributes .= ! empty($title) ? ' title="' . esc_attr($title) . '"' : ''; |
|
609 | + $attributes .= ! empty($other_attributes) ? ' ' . $other_attributes : ''; |
|
610 | + return "<a{$attributes}>{$link_text}</a>"; |
|
611 | + } |
|
612 | + |
|
613 | + |
|
614 | + |
|
615 | + /** |
|
616 | + * img - generates an HTML <img> tag and adds any passed attributes |
|
617 | + * usage: echo EEH_HTML::img(); |
|
618 | + * |
|
619 | + * @param string $src - html src attribute ie: the path or URL to the image |
|
620 | + * @param string $alt - html alt attribute |
|
621 | + * @param string $id - html id attribute |
|
622 | + * @param string $class - html class attribute |
|
623 | + * @param string $style - html style attribute for applying inline styles |
|
624 | + * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
625 | + * @return string |
|
626 | + */ |
|
627 | + public static function img($src = '', $alt = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
628 | + { |
|
629 | + $attributes = ! empty($src) ? ' src="' . esc_url_raw($src) . '"' : ''; |
|
630 | + $attributes .= ! empty($alt) ? ' alt="' . esc_attr($alt) . '"' : ''; |
|
631 | + $attributes .= ! empty($id) ? ' id="' . EEH_HTML::sanitize_id($id) . '"' : ''; |
|
632 | + $attributes .= ! empty($class) ? ' class="' . $class . '"' : ''; |
|
633 | + $attributes .= ! empty($style) ? ' style="' . $style . '"' : ''; |
|
634 | + $attributes .= ! empty($other_attributes) ? ' ' . $other_attributes : ''; |
|
635 | + return '<img' . $attributes . '/>'; |
|
636 | + } |
|
637 | + |
|
638 | + |
|
639 | + |
|
640 | + /** |
|
641 | + * Generates HTML <label></label> tags, inserts content, and adds any passed attributes |
|
642 | + * usage: echo EEH_HTML::span( 'this is some inline text' ); |
|
643 | + * |
|
644 | + * @access protected |
|
645 | + * @param string $tag |
|
646 | + * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
647 | + * @param string $id - html id attribute |
|
648 | + * @param string $class - html class attribute |
|
649 | + * @param string $style - html style attribute for applying inline styles |
|
650 | + * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
651 | + * @return string |
|
652 | + */ |
|
653 | + protected static function _inline_tag($tag = 'span', $content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
654 | + { |
|
655 | + $attributes = ! empty($id) ? ' id="' . EEH_HTML::sanitize_id($id) . '"' : ''; |
|
656 | + $attributes .= ! empty($class) ? ' class="' . $class . '"' : ''; |
|
657 | + $attributes .= ! empty($style) ? ' style="' . $style . '"' : ''; |
|
658 | + $attributes .= ! empty($other_attributes) ? ' ' . $other_attributes : ''; |
|
659 | + return '<' . $tag . ' ' . $attributes . '>' . $content . '</' . $tag . '>'; |
|
660 | + } |
|
661 | + |
|
662 | + |
|
663 | + |
|
664 | + /** |
|
665 | + * Generates HTML <label></label> tags, inserts content, and adds any passed attributes |
|
666 | + * usage: echo EEH_HTML::span( 'this is some inline text' ); |
|
667 | + * |
|
668 | + * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
669 | + * @param string $id - html id attribute |
|
670 | + * @param string $class - html class attribute |
|
671 | + * @param string $style - html style attribute for applying inline styles |
|
672 | + * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
673 | + * @return string |
|
674 | + */ |
|
675 | + public static function label($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
676 | + { |
|
677 | + return EEH_HTML::_inline_tag('label', $content, $id, $class, $style, $other_attributes); |
|
678 | + } |
|
679 | + |
|
680 | + |
|
681 | + |
|
682 | + /** |
|
683 | + * Generates HTML <span></span> tags, inserts content, and adds any passed attributes |
|
684 | + * usage: echo EEH_HTML::span( 'this is some inline text' ); |
|
685 | + * |
|
686 | + * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
687 | + * @param string $id - html id attribute |
|
688 | + * @param string $class - html class attribute |
|
689 | + * @param string $style - html style attribute for applying inline styles |
|
690 | + * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
691 | + * @return string |
|
692 | + */ |
|
693 | + public static function span($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
694 | + { |
|
695 | + return EEH_HTML::_inline_tag('span', $content, $id, $class, $style, $other_attributes); |
|
696 | + } |
|
697 | + |
|
698 | + |
|
699 | + |
|
700 | + /** |
|
701 | + * Generates HTML <span></span> tags, inserts content, and adds any passed attributes |
|
702 | + * usage: echo EEH_HTML::span( 'this is some inline text' ); |
|
703 | + * |
|
704 | + * @param string $content - inserted after opening tag, and appends closing tag, otherwise tag is left open |
|
705 | + * @param string $id - html id attribute |
|
706 | + * @param string $class - html class attribute |
|
707 | + * @param string $style - html style attribute for applying inline styles |
|
708 | + * @param string $other_attributes - additional attributes like "colspan", inline JS, "rel" tags, etc |
|
709 | + * @return string |
|
710 | + */ |
|
711 | + public static function strong($content = '', $id = '', $class = '', $style = '', $other_attributes = '') |
|
712 | + { |
|
713 | + return EEH_HTML::_inline_tag('strong', $content, $id, $class, $style, $other_attributes); |
|
714 | + } |
|
715 | + |
|
716 | + |
|
717 | + |
|
718 | + /** |
|
719 | + * Generates an html <-- comment --> tag |
|
720 | + * usage: echo comment( 'this is a comment' ); |
|
721 | + * |
|
722 | + * @param string $comment |
|
723 | + * @return string |
|
724 | + */ |
|
725 | + public static function comment($comment = '') |
|
726 | + { |
|
727 | + return ! empty($comment) ? EEH_HTML::nl() . '<!-- ' . $comment . ' -->' : ''; |
|
728 | + } |
|
729 | + |
|
730 | + |
|
731 | + |
|
732 | + /** |
|
733 | + * br - generates a line break |
|
734 | + * |
|
735 | + * @param int $nmbr - the number of line breaks to return |
|
736 | + * @return string |
|
737 | + */ |
|
738 | + public static function br($nmbr = 1) |
|
739 | + { |
|
740 | + return str_repeat('<br />', $nmbr); |
|
741 | + } |
|
742 | + |
|
743 | + |
|
744 | + |
|
745 | + /** |
|
746 | + * nbsp - generates non-breaking space entities based on number supplied |
|
747 | + * |
|
748 | + * @param int $nmbr - the number of non-breaking spaces to return |
|
749 | + * @return string |
|
750 | + */ |
|
751 | + public static function nbsp($nmbr = 1) |
|
752 | + { |
|
753 | + return str_repeat(' ', $nmbr); |
|
754 | + } |
|
755 | + |
|
756 | + |
|
757 | + |
|
758 | + /** |
|
759 | + * sanitize_id |
|
760 | + * |
|
761 | + * functionally does the same as the wp_core function sanitize_key except it does NOT use |
|
762 | + * strtolower and allows capitals. |
|
763 | + * |
|
764 | + * @param string $id |
|
765 | + * @return string |
|
766 | + */ |
|
767 | + public static function sanitize_id($id = '') |
|
768 | + { |
|
769 | + $key = str_replace(' ', '-', trim($id)); |
|
770 | + return preg_replace('/[^a-zA-Z0-9_\-]/', '', $key); |
|
771 | + } |
|
772 | + |
|
773 | + |
|
774 | + |
|
775 | + /** |
|
776 | + * return a newline and tabs ("nl" stands for "new line") |
|
777 | + * |
|
778 | + * @param int $indent the number of tabs to ADD to the current indent (can be negative or zero) |
|
779 | + * @param string $tag |
|
780 | + * @return string - newline character plus # of indents passed (can be + or -) |
|
781 | + */ |
|
782 | + public static function nl($indent = 0, $tag = 'none') |
|
783 | + { |
|
784 | + $html = "\n"; |
|
785 | + EEH_HTML::indent($indent, $tag); |
|
786 | + for ($x = 0; $x < EEH_HTML::$_indent[ $tag ]; $x++) { |
|
787 | + $html .= "\t"; |
|
788 | + } |
|
789 | + return $html; |
|
790 | + } |
|
791 | + |
|
792 | + |
|
793 | + |
|
794 | + /** |
|
795 | + * Changes the indents used in EEH_HTML::nl. Often its convenient to change |
|
796 | + * the indentation level without actually creating a new line |
|
797 | + * |
|
798 | + * @param int $indent can be negative to decrease the indentation level |
|
799 | + * @param string $tag |
|
800 | + */ |
|
801 | + public static function indent($indent, $tag = 'none') |
|
802 | + { |
|
803 | + static $default_indentation = false; |
|
804 | + if (! $default_indentation) { |
|
805 | + EEH_HTML::_set_default_indentation(); |
|
806 | + $default_indentation = true; |
|
807 | + } |
|
808 | + if (! isset(EEH_HTML::$_indent[ $tag ])) { |
|
809 | + EEH_HTML::$_indent[ $tag ] = 0; |
|
810 | + } |
|
811 | + EEH_HTML::$_indent[ $tag ] += (int) $indent; |
|
812 | + EEH_HTML::$_indent[ $tag ] = EEH_HTML::$_indent[ $tag ] >= 0 ? EEH_HTML::$_indent[ $tag ] : 0; |
|
813 | + } |
|
814 | + |
|
815 | + |
|
816 | + /** |
|
817 | + * class _set_default_indentation |
|
818 | + * |
|
819 | + * @access private |
|
820 | + */ |
|
821 | + private static function _set_default_indentation() |
|
822 | + { |
|
823 | + // set some initial formatting for table indentation |
|
824 | + EEH_HTML::$_indent = array( |
|
825 | + 'none' => 0, |
|
826 | + 'form' => 0, |
|
827 | + 'radio' => 0, |
|
828 | + 'checkbox' => 0, |
|
829 | + 'select' => 0, |
|
830 | + 'option' => 0, |
|
831 | + 'optgroup' => 0, |
|
832 | + 'table' => 1, |
|
833 | + 'thead' => 2, |
|
834 | + 'tbody' => 2, |
|
835 | + 'tr' => 3, |
|
836 | + 'th' => 4, |
|
837 | + 'td' => 4, |
|
838 | + 'div' => 0, |
|
839 | + 'h1' => 0, |
|
840 | + 'h2' => 0, |
|
841 | + 'h3' => 0, |
|
842 | + 'h4' => 0, |
|
843 | + 'h5' => 0, |
|
844 | + 'h6' => 0, |
|
845 | + 'p' => 0, |
|
846 | + 'ul' => 0, |
|
847 | + 'li' => 1 |
|
848 | + ); |
|
849 | + } |
|
850 | + |
|
851 | + |
|
852 | + |
|
853 | + /** |
|
854 | + * Retrieves the list of tags considered "simple", that are probably safe for |
|
855 | + * use in inputs |
|
856 | + * @global array $allowedtags |
|
857 | + * @return array |
|
858 | + */ |
|
859 | + public static function get_simple_tags() |
|
860 | + { |
|
861 | + global $allowedtags; |
|
862 | + $tags_we_allow = array_merge_recursive( |
|
863 | + $allowedtags, |
|
864 | + [ |
|
865 | + 'ol' => [], |
|
866 | + 'ul' => [], |
|
867 | + 'li' => [], |
|
868 | + 'br' => [], |
|
869 | + 'p' => [], |
|
870 | + 'a' => ['target'] |
|
871 | + ] |
|
872 | + ); |
|
873 | + return apply_filters('FHEE__EEH_HTML__get_simple_tags', $tags_we_allow); |
|
874 | + } |
|
875 | 875 | } |
@@ -30,11 +30,11 @@ discard block |
||
30 | 30 | } elseif (isset($backtrace[3]) && is_array($backtrace[3]) && isset($backtrace[3]['class']) && ! isset($backtrace[3]['file'])) { |
31 | 31 | return $backtrace[3]['class']; |
32 | 32 | } elseif (isset($backtrace[2]) && is_array($backtrace[2]) && isset($backtrace[2]['file']) && isset($backtrace[2]['line'])) { |
33 | - if (self::$file_line == $backtrace[2]['file'] . $backtrace[2]['line']) { |
|
33 | + if (self::$file_line == $backtrace[2]['file'].$backtrace[2]['line']) { |
|
34 | 34 | self::$i++; |
35 | 35 | } else { |
36 | 36 | self::$i = 0; |
37 | - self::$file_line = $backtrace[2]['file'] . $backtrace[2]['line']; |
|
37 | + self::$file_line = $backtrace[2]['file'].$backtrace[2]['line']; |
|
38 | 38 | } |
39 | 39 | // was class method called via call_user_func ? |
40 | 40 | if ($backtrace[2]['function'] == 'call_user_func' && isset($backtrace[2]['args']) && is_array($backtrace[2]['args'])) { |
@@ -45,15 +45,15 @@ discard block |
||
45 | 45 | $prefix_chars = strpos($called_class, '_') + 1; |
46 | 46 | $prefix = substr($called_class, 0, $prefix_chars); |
47 | 47 | $classname = substr($called_class, $prefix_chars, strlen($called_class)); |
48 | - $classname = $prefix . str_replace(' ', '_', ucwords(strtolower(str_replace('_', ' ', $classname)))); |
|
48 | + $classname = $prefix.str_replace(' ', '_', ucwords(strtolower(str_replace('_', ' ', $classname)))); |
|
49 | 49 | return $classname; |
50 | 50 | } |
51 | 51 | } |
52 | 52 | } else { |
53 | 53 | $lines = file($backtrace[2]['file']); |
54 | - preg_match_all('/([a-zA-Z0-9\_]+)::' . $backtrace[2]['function'] . '/', $lines[ $backtrace[2]['line'] - 1 ], $matches); |
|
55 | - if (isset($matches[1]) && isset($matches[1][ self::$i ])) { |
|
56 | - return $matches[1][ self::$i ]; |
|
54 | + preg_match_all('/([a-zA-Z0-9\_]+)::'.$backtrace[2]['function'].'/', $lines[$backtrace[2]['line'] - 1], $matches); |
|
55 | + if (isset($matches[1]) && isset($matches[1][self::$i])) { |
|
56 | + return $matches[1][self::$i]; |
|
57 | 57 | } |
58 | 58 | } |
59 | 59 | } |
@@ -75,9 +75,9 @@ discard block |
||
75 | 75 | global $wp_filter; |
76 | 76 | $class_names = array(); |
77 | 77 | // are any callbacks registered for this hook ? |
78 | - if (isset($wp_filter[ $hook ])) { |
|
78 | + if (isset($wp_filter[$hook])) { |
|
79 | 79 | // loop thru all of the callbacks attached to the deprecated hookpoint |
80 | - foreach ($wp_filter[ $hook ] as $priority) { |
|
80 | + foreach ($wp_filter[$hook] as $priority) { |
|
81 | 81 | foreach ($priority as $callback) { |
82 | 82 | // is the callback a non-static class method ? |
83 | 83 | if (isset($callback['function']) && is_array($callback['function'])) { |
@@ -131,7 +131,7 @@ discard block |
||
131 | 131 | } |
132 | 132 | |
133 | 133 | // if PHP version < 5.3 |
134 | -if (! function_exists('get_called_class')) { |
|
134 | +if ( ! function_exists('get_called_class')) { |
|
135 | 135 | /** |
136 | 136 | * @return string |
137 | 137 | */ |
@@ -11,131 +11,131 @@ |
||
11 | 11 | */ |
12 | 12 | class EEH_Class_Tools |
13 | 13 | { |
14 | - public static $i = 0; |
|
15 | - public static $file_line = null; |
|
14 | + public static $i = 0; |
|
15 | + public static $file_line = null; |
|
16 | 16 | |
17 | - /** |
|
18 | - * get_called_class - for PHP versions < 5.3 |
|
19 | - * |
|
20 | - * @access public |
|
21 | - * @author origins: http://stackoverflow.com/a/1542045 |
|
22 | - * return string |
|
23 | - */ |
|
24 | - public static function get_called_class() |
|
25 | - { |
|
26 | - $backtrace = debug_backtrace(); |
|
27 | - if (isset($backtrace[2]) && is_array($backtrace[2]) && isset($backtrace[2]['class']) && ! isset($backtrace[2]['file'])) { |
|
28 | - return $backtrace[2]['class']; |
|
29 | - } elseif (isset($backtrace[3]) && is_array($backtrace[3]) && isset($backtrace[3]['class']) && ! isset($backtrace[3]['file'])) { |
|
30 | - return $backtrace[3]['class']; |
|
31 | - } elseif (isset($backtrace[2]) && is_array($backtrace[2]) && isset($backtrace[2]['file']) && isset($backtrace[2]['line'])) { |
|
32 | - if (self::$file_line == $backtrace[2]['file'] . $backtrace[2]['line']) { |
|
33 | - self::$i++; |
|
34 | - } else { |
|
35 | - self::$i = 0; |
|
36 | - self::$file_line = $backtrace[2]['file'] . $backtrace[2]['line']; |
|
37 | - } |
|
38 | - // was class method called via call_user_func ? |
|
39 | - if ($backtrace[2]['function'] == 'call_user_func' && isset($backtrace[2]['args']) && is_array($backtrace[2]['args'])) { |
|
40 | - if (isset($backtrace[2]['args'][0]) && isset($backtrace[2]['args'][0][0])) { |
|
41 | - $called_class = $backtrace[2]['args'][0][0]; |
|
42 | - // is it an EE function ? |
|
43 | - if (strpos($called_class, 'EE') === 0) { |
|
44 | - $prefix_chars = strpos($called_class, '_') + 1; |
|
45 | - $prefix = substr($called_class, 0, $prefix_chars); |
|
46 | - $classname = substr($called_class, $prefix_chars, strlen($called_class)); |
|
47 | - $classname = $prefix . str_replace(' ', '_', ucwords(strtolower(str_replace('_', ' ', $classname)))); |
|
48 | - return $classname; |
|
49 | - } |
|
50 | - } |
|
51 | - } else { |
|
52 | - $lines = file($backtrace[2]['file']); |
|
53 | - preg_match_all('/([a-zA-Z0-9\_]+)::' . $backtrace[2]['function'] . '/', $lines[ $backtrace[2]['line'] - 1 ], $matches); |
|
54 | - if (isset($matches[1]) && isset($matches[1][ self::$i ])) { |
|
55 | - return $matches[1][ self::$i ]; |
|
56 | - } |
|
57 | - } |
|
58 | - } |
|
59 | - return false; |
|
60 | - } |
|
17 | + /** |
|
18 | + * get_called_class - for PHP versions < 5.3 |
|
19 | + * |
|
20 | + * @access public |
|
21 | + * @author origins: http://stackoverflow.com/a/1542045 |
|
22 | + * return string |
|
23 | + */ |
|
24 | + public static function get_called_class() |
|
25 | + { |
|
26 | + $backtrace = debug_backtrace(); |
|
27 | + if (isset($backtrace[2]) && is_array($backtrace[2]) && isset($backtrace[2]['class']) && ! isset($backtrace[2]['file'])) { |
|
28 | + return $backtrace[2]['class']; |
|
29 | + } elseif (isset($backtrace[3]) && is_array($backtrace[3]) && isset($backtrace[3]['class']) && ! isset($backtrace[3]['file'])) { |
|
30 | + return $backtrace[3]['class']; |
|
31 | + } elseif (isset($backtrace[2]) && is_array($backtrace[2]) && isset($backtrace[2]['file']) && isset($backtrace[2]['line'])) { |
|
32 | + if (self::$file_line == $backtrace[2]['file'] . $backtrace[2]['line']) { |
|
33 | + self::$i++; |
|
34 | + } else { |
|
35 | + self::$i = 0; |
|
36 | + self::$file_line = $backtrace[2]['file'] . $backtrace[2]['line']; |
|
37 | + } |
|
38 | + // was class method called via call_user_func ? |
|
39 | + if ($backtrace[2]['function'] == 'call_user_func' && isset($backtrace[2]['args']) && is_array($backtrace[2]['args'])) { |
|
40 | + if (isset($backtrace[2]['args'][0]) && isset($backtrace[2]['args'][0][0])) { |
|
41 | + $called_class = $backtrace[2]['args'][0][0]; |
|
42 | + // is it an EE function ? |
|
43 | + if (strpos($called_class, 'EE') === 0) { |
|
44 | + $prefix_chars = strpos($called_class, '_') + 1; |
|
45 | + $prefix = substr($called_class, 0, $prefix_chars); |
|
46 | + $classname = substr($called_class, $prefix_chars, strlen($called_class)); |
|
47 | + $classname = $prefix . str_replace(' ', '_', ucwords(strtolower(str_replace('_', ' ', $classname)))); |
|
48 | + return $classname; |
|
49 | + } |
|
50 | + } |
|
51 | + } else { |
|
52 | + $lines = file($backtrace[2]['file']); |
|
53 | + preg_match_all('/([a-zA-Z0-9\_]+)::' . $backtrace[2]['function'] . '/', $lines[ $backtrace[2]['line'] - 1 ], $matches); |
|
54 | + if (isset($matches[1]) && isset($matches[1][ self::$i ])) { |
|
55 | + return $matches[1][ self::$i ]; |
|
56 | + } |
|
57 | + } |
|
58 | + } |
|
59 | + return false; |
|
60 | + } |
|
61 | 61 | |
62 | 62 | |
63 | 63 | |
64 | 64 | |
65 | - /** |
|
66 | - * get_class_names_for_all_callbacks_on_hook |
|
67 | - * returns an array of names for all classes that have methods registered as callbacks for the given action or filter hook |
|
68 | - * @access public |
|
69 | - * @param string $hook |
|
70 | - * @return array |
|
71 | - */ |
|
72 | - public static function get_class_names_for_all_callbacks_on_hook($hook = null) |
|
73 | - { |
|
74 | - global $wp_filter; |
|
75 | - $class_names = array(); |
|
76 | - // are any callbacks registered for this hook ? |
|
77 | - if (isset($wp_filter[ $hook ])) { |
|
78 | - // loop thru all of the callbacks attached to the deprecated hookpoint |
|
79 | - foreach ($wp_filter[ $hook ] as $priority) { |
|
80 | - foreach ($priority as $callback) { |
|
81 | - // is the callback a non-static class method ? |
|
82 | - if (isset($callback['function']) && is_array($callback['function'])) { |
|
83 | - if (isset($callback['function'][0]) && is_object($callback['function'][0])) { |
|
84 | - $class_names[] = get_class($callback['function'][0]); |
|
85 | - } |
|
86 | - // test for static method |
|
87 | - } elseif (strpos($callback['function'], '::') !== false) { |
|
88 | - $class = explode('::', $callback['function']); |
|
89 | - $class_names[] = $class[0]; |
|
90 | - } else { |
|
91 | - // just a function |
|
92 | - } |
|
93 | - } |
|
94 | - } |
|
95 | - } |
|
96 | - return $class_names; |
|
97 | - } |
|
65 | + /** |
|
66 | + * get_class_names_for_all_callbacks_on_hook |
|
67 | + * returns an array of names for all classes that have methods registered as callbacks for the given action or filter hook |
|
68 | + * @access public |
|
69 | + * @param string $hook |
|
70 | + * @return array |
|
71 | + */ |
|
72 | + public static function get_class_names_for_all_callbacks_on_hook($hook = null) |
|
73 | + { |
|
74 | + global $wp_filter; |
|
75 | + $class_names = array(); |
|
76 | + // are any callbacks registered for this hook ? |
|
77 | + if (isset($wp_filter[ $hook ])) { |
|
78 | + // loop thru all of the callbacks attached to the deprecated hookpoint |
|
79 | + foreach ($wp_filter[ $hook ] as $priority) { |
|
80 | + foreach ($priority as $callback) { |
|
81 | + // is the callback a non-static class method ? |
|
82 | + if (isset($callback['function']) && is_array($callback['function'])) { |
|
83 | + if (isset($callback['function'][0]) && is_object($callback['function'][0])) { |
|
84 | + $class_names[] = get_class($callback['function'][0]); |
|
85 | + } |
|
86 | + // test for static method |
|
87 | + } elseif (strpos($callback['function'], '::') !== false) { |
|
88 | + $class = explode('::', $callback['function']); |
|
89 | + $class_names[] = $class[0]; |
|
90 | + } else { |
|
91 | + // just a function |
|
92 | + } |
|
93 | + } |
|
94 | + } |
|
95 | + } |
|
96 | + return $class_names; |
|
97 | + } |
|
98 | 98 | |
99 | 99 | |
100 | 100 | |
101 | 101 | |
102 | - /** |
|
103 | - * property_exists() with fallback for PHP versions < 5.3 |
|
104 | - * @access public |
|
105 | - * @param mixed object | string $class |
|
106 | - * @param string $property |
|
107 | - * @return boolean |
|
108 | - */ |
|
109 | - public static function has_property($class = null, $property = null) |
|
110 | - { |
|
111 | - // if $class or $property don't exist, then get out, cuz that would be like... fatal dude |
|
112 | - if (empty($class) || empty($property)) { |
|
113 | - return false; |
|
114 | - } |
|
115 | - // if your hosting company doesn't cut the mustard |
|
116 | - if (version_compare(PHP_VERSION, '5.3.0') < 0) { |
|
117 | - // just in case $class is an actual instantiated object |
|
118 | - if (is_object($class)) { |
|
119 | - return isset($class->{$property}) ? true : false; |
|
120 | - } else { |
|
121 | - // use reflection for < PHP 5.3 to get details using just the class name |
|
122 | - $reflector = new ReflectionClass($class); |
|
123 | - return $reflector->hasProperty($property); |
|
124 | - } |
|
125 | - } else { |
|
126 | - // or try regular property exists method which works as expected in PHP 5.3+ |
|
127 | - return property_exists($class, $property); |
|
128 | - } |
|
129 | - } |
|
102 | + /** |
|
103 | + * property_exists() with fallback for PHP versions < 5.3 |
|
104 | + * @access public |
|
105 | + * @param mixed object | string $class |
|
106 | + * @param string $property |
|
107 | + * @return boolean |
|
108 | + */ |
|
109 | + public static function has_property($class = null, $property = null) |
|
110 | + { |
|
111 | + // if $class or $property don't exist, then get out, cuz that would be like... fatal dude |
|
112 | + if (empty($class) || empty($property)) { |
|
113 | + return false; |
|
114 | + } |
|
115 | + // if your hosting company doesn't cut the mustard |
|
116 | + if (version_compare(PHP_VERSION, '5.3.0') < 0) { |
|
117 | + // just in case $class is an actual instantiated object |
|
118 | + if (is_object($class)) { |
|
119 | + return isset($class->{$property}) ? true : false; |
|
120 | + } else { |
|
121 | + // use reflection for < PHP 5.3 to get details using just the class name |
|
122 | + $reflector = new ReflectionClass($class); |
|
123 | + return $reflector->hasProperty($property); |
|
124 | + } |
|
125 | + } else { |
|
126 | + // or try regular property exists method which works as expected in PHP 5.3+ |
|
127 | + return property_exists($class, $property); |
|
128 | + } |
|
129 | + } |
|
130 | 130 | } |
131 | 131 | |
132 | 132 | // if PHP version < 5.3 |
133 | 133 | if (! function_exists('get_called_class')) { |
134 | - /** |
|
135 | - * @return string |
|
136 | - */ |
|
137 | - function get_called_class() |
|
138 | - { |
|
139 | - return EEH_Class_Tools::get_called_class(); |
|
140 | - } |
|
134 | + /** |
|
135 | + * @return string |
|
136 | + */ |
|
137 | + function get_called_class() |
|
138 | + { |
|
139 | + return EEH_Class_Tools::get_called_class(); |
|
140 | + } |
|
141 | 141 | } |
@@ -33,384 +33,384 @@ |
||
33 | 33 | */ |
34 | 34 | class EEH_Inflector |
35 | 35 | { |
36 | - // ------ CLASS METHODS ------ // |
|
37 | - // ---- Public methods ---- // |
|
38 | - // {{{ pluralize() |
|
39 | - |
|
40 | - /** |
|
41 | - * Just calls self::pluralize and strtolower on $word and returns it |
|
42 | - * @param string $word |
|
43 | - * @return string |
|
44 | - */ |
|
45 | - public static function pluralize_and_lower($word) |
|
46 | - { |
|
47 | - return strtolower(self::pluralize($word)); |
|
48 | - } |
|
49 | - |
|
50 | - |
|
51 | - |
|
52 | - /** |
|
53 | - * @param string $word |
|
54 | - * @return mixed |
|
55 | - */ |
|
56 | - public static function singularize_and_upper($word) |
|
57 | - { |
|
58 | - return str_replace(' ', '_', self::humanize(self::singularize($word), 'all')); |
|
59 | - } |
|
60 | - |
|
61 | - |
|
62 | - |
|
63 | - /** |
|
64 | - * Pluralizes English nouns. |
|
65 | - * |
|
66 | - * @access public |
|
67 | - * @static |
|
68 | - * @param string $word English noun to pluralize |
|
69 | - * @return string Plural noun |
|
70 | - */ |
|
71 | - public static function pluralize($word) |
|
72 | - { |
|
73 | - $plural = array( |
|
74 | - '/(quiz)$/i' => '\1zes', |
|
75 | - '/^(ox)$/i' => '\1en', |
|
76 | - '/([m|l])ouse$/i' => '\1ice', |
|
77 | - '/(matr|vert|ind)ix|ex$/i' => '\1ices', |
|
78 | - '/(x|ch|ss|sh)$/i' => '\1es', |
|
79 | - '/([^aeiouy]|qu)ies$/i' => '\1y', |
|
80 | - '/([^aeiouy]|qu)y$/i' => '\1ies', |
|
81 | - '/(hive)$/i' => '\1s', |
|
82 | - '/(?:([^f])fe|([lr])f)$/i' => '\1\2ves', |
|
83 | - '/sis$/i' => 'ses', |
|
84 | - '/([ti])um$/i' => '\1a', |
|
85 | - '/(buffal|tomat)o$/i' => '\1oes', |
|
86 | - '/(bu)s$/i' => '\1ses', |
|
87 | - '/(alias|status)/i' => '\1es', |
|
88 | - '/(octop|vir)us$/i' => '\1i', |
|
89 | - '/(ax|test)is$/i' => '\1es', |
|
90 | - '/s$/i' => 's', |
|
91 | - '/$/' => 's'); |
|
92 | - |
|
93 | - $uncountable = array('equipment', 'information', 'rice', 'money', 'species', 'series', 'fish', 'sheep'); |
|
94 | - |
|
95 | - $irregular = array( |
|
96 | - 'person' => 'people', |
|
97 | - 'man' => 'men', |
|
98 | - 'child' => 'children', |
|
99 | - 'sex' => 'sexes', |
|
100 | - 'move' => 'moves'); |
|
101 | - |
|
102 | - $lowercased_word = strtolower($word); |
|
103 | - |
|
104 | - foreach ($uncountable as $_uncountable) { |
|
105 | - if ( |
|
106 | - substr($lowercased_word, (-1 * strlen($_uncountable))) == $_uncountable && // even though the word "price" ends in "rice", it can be pluralized, so check the previous character isnt a letter |
|
107 | - ! ctype_alpha($lowercased_word[ strlen($lowercased_word) - strlen($_uncountable) ]) |
|
108 | - ) { |
|
109 | - return $word; |
|
110 | - } |
|
111 | - } |
|
112 | - |
|
113 | - foreach ($irregular as $_plural => $_singular) { |
|
114 | - if (preg_match('/(' . $_plural . ')$/i', $word, $arr)) { |
|
115 | - return preg_replace('/(' . $_plural . ')$/i', substr($arr[0], 0, 1) . substr($_singular, 1), $word); |
|
116 | - } |
|
117 | - } |
|
118 | - |
|
119 | - foreach ($plural as $rule => $replacement) { |
|
120 | - if (preg_match($rule, $word)) { |
|
121 | - return preg_replace($rule, $replacement, $word); |
|
122 | - } |
|
123 | - } |
|
124 | - return false; |
|
125 | - } |
|
126 | - |
|
127 | - // }}} |
|
128 | - // {{{ singularize() |
|
129 | - |
|
130 | - /** |
|
131 | - * Singularizes English nouns. |
|
132 | - * |
|
133 | - * @access public |
|
134 | - * @static |
|
135 | - * @param string $word English noun to singularize |
|
136 | - * @return string Singular noun. |
|
137 | - */ |
|
138 | - public static function singularize($word) |
|
139 | - { |
|
140 | - $singular = array( |
|
141 | - '/(quiz)zes$/i' => '\1', |
|
142 | - '/(matr)ices$/i' => '\1ix', |
|
143 | - '/(vert|ind)ices$/i' => '\1ex', |
|
144 | - '/^(ox)en/i' => '\1', |
|
145 | - '/(alias|status)es$/i' => '\1', |
|
146 | - '/([octop|vir])i$/i' => '\1us', |
|
147 | - '/(cris|ax|test)es$/i' => '\1is', |
|
148 | - '/(shoe)s$/i' => '\1', |
|
149 | - '/(o)es$/i' => '\1', |
|
150 | - '/(bus)es$/i' => '\1', |
|
151 | - '/([m|l])ice$/i' => '\1ouse', |
|
152 | - '/(x|ch|ss|sh)es$/i' => '\1', |
|
153 | - '/(m)ovies$/i' => '\1ovie', |
|
154 | - '/(s)eries$/i' => '\1eries', |
|
155 | - '/([^aeiouy]|qu)ies$/i' => '\1y', |
|
156 | - '/([lr])ves$/i' => '\1f', |
|
157 | - '/(tive)s$/i' => '\1', |
|
158 | - '/(hive)s$/i' => '\1', |
|
159 | - '/([^f])ves$/i' => '\1fe', |
|
160 | - '/(^analy)ses$/i' => '\1sis', |
|
161 | - '/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i' => '\1\2sis', |
|
162 | - '/([ti])a$/i' => '\1um', |
|
163 | - '/(n)ews$/i' => '\1ews', |
|
164 | - '/s$/i' => '', |
|
165 | - ); |
|
166 | - |
|
167 | - $uncountable = array('equipment', 'information', 'rice', 'money', 'species', 'series', 'fish', 'sheep'); |
|
168 | - |
|
169 | - $irregular = array( |
|
170 | - 'person' => 'people', |
|
171 | - 'man' => 'men', |
|
172 | - 'child' => 'children', |
|
173 | - 'sex' => 'sexes', |
|
174 | - 'move' => 'moves'); |
|
175 | - |
|
176 | - $lowercased_word = strtolower($word); |
|
177 | - foreach ($uncountable as $_uncountable) { |
|
178 | - if (substr($lowercased_word, (-1 * strlen($_uncountable))) == $_uncountable) { |
|
179 | - return $word; |
|
180 | - } |
|
181 | - } |
|
182 | - |
|
183 | - foreach ($irregular as $_plural => $_singular) { |
|
184 | - if (preg_match('/(' . $_singular . ')$/i', $word, $arr)) { |
|
185 | - return preg_replace('/(' . $_singular . ')$/i', substr($arr[0], 0, 1) . substr($_plural, 1), $word); |
|
186 | - } |
|
187 | - } |
|
188 | - |
|
189 | - foreach ($singular as $rule => $replacement) { |
|
190 | - if (preg_match($rule, $word)) { |
|
191 | - return preg_replace($rule, $replacement, $word); |
|
192 | - } |
|
193 | - } |
|
194 | - |
|
195 | - return $word; |
|
196 | - } |
|
197 | - |
|
198 | - // }}} |
|
199 | - // {{{ titleize() |
|
200 | - |
|
201 | - /** |
|
202 | - * Converts an underscored or CamelCase word into a English |
|
203 | - * sentence. |
|
204 | - * |
|
205 | - * The titleize static function converts text like "WelcomePage", |
|
206 | - * "welcome_page" or "welcome page" to this "Welcome |
|
207 | - * Page". |
|
208 | - * If second parameter is set to 'first' it will only |
|
209 | - * capitalize the first character of the title. |
|
210 | - * |
|
211 | - * @access public |
|
212 | - * @static |
|
213 | - * @param string $word Word to format as tile |
|
214 | - * @param string $uppercase If set to 'first' it will only uppercase the |
|
215 | - * first character. Otherwise it will uppercase all |
|
216 | - * the words in the title. |
|
217 | - * @return string Text formatted as title |
|
218 | - */ |
|
219 | - public static function titleize($word, $uppercase = '') |
|
220 | - { |
|
221 | - $uppercase = $uppercase === 'first' ? 'ucfirst' : 'ucwords'; |
|
222 | - return $uppercase(EEH_Inflector::humanize(EEH_Inflector::underscore($word))); |
|
223 | - } |
|
224 | - |
|
225 | - // }}} |
|
226 | - // {{{ camelize() |
|
227 | - |
|
228 | - /** |
|
229 | - * Returns given word as CamelCased |
|
230 | - * |
|
231 | - * Converts a word like "send_email" to "SendEmail". It |
|
232 | - * will remove non alphanumeric character from the word, so |
|
233 | - * "who's online" will be converted to "WhoSOnline" |
|
234 | - * |
|
235 | - * @access public |
|
236 | - * @static |
|
237 | - * @see variablize |
|
238 | - * @param string $word Word to convert to camel case |
|
239 | - * @return string UpperCamelCasedWord |
|
240 | - */ |
|
241 | - public static function camelize($word) |
|
242 | - { |
|
243 | - return str_replace(' ', '', ucwords(preg_replace('/[^A-Z^a-z^0-9]+/', ' ', $word))); |
|
244 | - } |
|
245 | - |
|
246 | - |
|
247 | - |
|
248 | - /** |
|
249 | - * Camelizes all but the first word. This is handy converting a method which followed EE4 legacy naming convention |
|
250 | - * with the new PSR-based naming conventions |
|
251 | - * @param $word |
|
252 | - * @return string |
|
253 | - */ |
|
254 | - public static function camelize_all_but_first($word) |
|
255 | - { |
|
256 | - return lcfirst(EEH_Inflector::camelize($word)); |
|
257 | - } |
|
258 | - // }}} |
|
259 | - // {{{ underscore() |
|
260 | - |
|
261 | - /** |
|
262 | - * Converts a word "into_it_s_underscored_version" |
|
263 | - * |
|
264 | - * Convert any "CamelCased" or "ordinary Word" into an |
|
265 | - * "underscored_word". |
|
266 | - * |
|
267 | - * This can be really useful for creating friendly URLs. |
|
268 | - * |
|
269 | - * @access public |
|
270 | - * @static |
|
271 | - * @param string $word Word to underscore |
|
272 | - * @return string Underscored word |
|
273 | - */ |
|
274 | - public static function underscore($word) |
|
275 | - { |
|
276 | - return strtolower(preg_replace('/[^A-Z^a-z^0-9]+/', '_', preg_replace('/([a-zd])([A-Z])/', '1_2', preg_replace('/([A-Z]+)([A-Z][a-z])/', '1_2', $word)))); |
|
277 | - } |
|
278 | - |
|
279 | - // }}} |
|
280 | - // {{{ humanize() |
|
281 | - |
|
282 | - /** |
|
283 | - * Returns a human-readable string from $word |
|
284 | - * |
|
285 | - * Returns a human-readable string from $word, by replacing |
|
286 | - * underscores with a space, and by upper-casing the initial |
|
287 | - * character by default. |
|
288 | - * |
|
289 | - * If you need to uppercase all the words you just have to |
|
290 | - * pass 'all' as a second parameter. |
|
291 | - * |
|
292 | - * @access public |
|
293 | - * @static |
|
294 | - * @param string $word String to "humanize" |
|
295 | - * @param string $uppercase If set to 'all' it will uppercase all the words |
|
296 | - * instead of just the first one. |
|
297 | - * @return string Human-readable word |
|
298 | - */ |
|
299 | - public static function humanize($word, $uppercase = '') |
|
300 | - { |
|
301 | - // make special exceptions for acronyms |
|
302 | - $word = str_replace('wp_', 'WP_', $word); |
|
303 | - $uppercase = $uppercase === 'all' ? 'ucwords' : 'ucfirst'; |
|
304 | - return $uppercase(str_replace('_', ' ', preg_replace('/_id$/', '', $word))); |
|
305 | - } |
|
306 | - |
|
307 | - // }}} |
|
308 | - // {{{ variablize() |
|
309 | - |
|
310 | - /** |
|
311 | - * Same as camelize but first char is underscored |
|
312 | - * |
|
313 | - * Converts a word like "send_email" to "sendEmail". It |
|
314 | - * will remove non alphanumeric character from the word, so |
|
315 | - * "who's online" will be converted to "whoSOnline" |
|
316 | - * |
|
317 | - * @access public |
|
318 | - * @static |
|
319 | - * @see camelize |
|
320 | - * @param string $word Word to lowerCamelCase |
|
321 | - * @return string Returns a lowerCamelCasedWord |
|
322 | - */ |
|
323 | - public static function variablize($word) |
|
324 | - { |
|
325 | - $word = EEH_Inflector::camelize($word); |
|
326 | - return strtolower($word[0]) . substr($word, 1); |
|
327 | - } |
|
328 | - |
|
329 | - // }}} |
|
330 | - // {{{ tableize() |
|
331 | - |
|
332 | - /** |
|
333 | - * Converts a class name to its table name according to rails |
|
334 | - * naming conventions. |
|
335 | - * |
|
336 | - * Converts "Person" to "people" |
|
337 | - * |
|
338 | - * @access public |
|
339 | - * @static |
|
340 | - * @see classify |
|
341 | - * @param string $class_name Class name for getting related table_name. |
|
342 | - * @return string plural_table_name |
|
343 | - */ |
|
344 | - public static function tableize($class_name) |
|
345 | - { |
|
346 | - return EEH_Inflector::pluralize(EEH_Inflector::underscore($class_name)); |
|
347 | - } |
|
348 | - |
|
349 | - // }}} |
|
350 | - // {{{ classify() |
|
351 | - |
|
352 | - /** |
|
353 | - * Converts a table name to its class name according to rails |
|
354 | - * naming conventions. |
|
355 | - * |
|
356 | - * Converts "people" to "Person" |
|
357 | - * |
|
358 | - * @access public |
|
359 | - * @static |
|
360 | - * @see tableize |
|
361 | - * @param string $table_name Table name for getting related ClassName. |
|
362 | - * @return string SingularClassName |
|
363 | - */ |
|
364 | - public static function classify($table_name) |
|
365 | - { |
|
366 | - return EEH_Inflector::camelize(EEH_Inflector::singularize($table_name)); |
|
367 | - } |
|
368 | - |
|
369 | - // }}} |
|
370 | - // {{{ ordinalize() |
|
371 | - |
|
372 | - /** |
|
373 | - * Converts number to its ordinal English form. |
|
374 | - * |
|
375 | - * This method converts 13 to 13th, 2 to 2nd ... |
|
376 | - * |
|
377 | - * @access public |
|
378 | - * @static |
|
379 | - * @param integer $number Number to get its ordinal value |
|
380 | - * @return string Ordinal representation of given string. |
|
381 | - */ |
|
382 | - public static function ordinalize($number) |
|
383 | - { |
|
384 | - if (in_array(($number % 100), range(11, 13))) { |
|
385 | - return $number . 'th'; |
|
386 | - } else { |
|
387 | - switch (($number % 10)) { |
|
388 | - case 1: |
|
389 | - return $number . 'st'; |
|
390 | - break; |
|
391 | - case 2: |
|
392 | - return $number . 'nd'; |
|
393 | - break; |
|
394 | - case 3: |
|
395 | - return $number . 'rd'; |
|
396 | - default: |
|
397 | - return $number . 'th'; |
|
398 | - break; |
|
399 | - } |
|
400 | - } |
|
401 | - } |
|
402 | - |
|
403 | - |
|
404 | - |
|
405 | - /** |
|
406 | - * @param $string |
|
407 | - * @return string |
|
408 | - */ |
|
409 | - public static function add_indefinite_article($string) |
|
410 | - { |
|
411 | - if (strtolower($string) === 'null') { |
|
412 | - return $string; |
|
413 | - } |
|
414 | - return (stripos('aeiou', $string[0]) !== false ? 'an ' : 'a ') . $string; |
|
415 | - } |
|
36 | + // ------ CLASS METHODS ------ // |
|
37 | + // ---- Public methods ---- // |
|
38 | + // {{{ pluralize() |
|
39 | + |
|
40 | + /** |
|
41 | + * Just calls self::pluralize and strtolower on $word and returns it |
|
42 | + * @param string $word |
|
43 | + * @return string |
|
44 | + */ |
|
45 | + public static function pluralize_and_lower($word) |
|
46 | + { |
|
47 | + return strtolower(self::pluralize($word)); |
|
48 | + } |
|
49 | + |
|
50 | + |
|
51 | + |
|
52 | + /** |
|
53 | + * @param string $word |
|
54 | + * @return mixed |
|
55 | + */ |
|
56 | + public static function singularize_and_upper($word) |
|
57 | + { |
|
58 | + return str_replace(' ', '_', self::humanize(self::singularize($word), 'all')); |
|
59 | + } |
|
60 | + |
|
61 | + |
|
62 | + |
|
63 | + /** |
|
64 | + * Pluralizes English nouns. |
|
65 | + * |
|
66 | + * @access public |
|
67 | + * @static |
|
68 | + * @param string $word English noun to pluralize |
|
69 | + * @return string Plural noun |
|
70 | + */ |
|
71 | + public static function pluralize($word) |
|
72 | + { |
|
73 | + $plural = array( |
|
74 | + '/(quiz)$/i' => '\1zes', |
|
75 | + '/^(ox)$/i' => '\1en', |
|
76 | + '/([m|l])ouse$/i' => '\1ice', |
|
77 | + '/(matr|vert|ind)ix|ex$/i' => '\1ices', |
|
78 | + '/(x|ch|ss|sh)$/i' => '\1es', |
|
79 | + '/([^aeiouy]|qu)ies$/i' => '\1y', |
|
80 | + '/([^aeiouy]|qu)y$/i' => '\1ies', |
|
81 | + '/(hive)$/i' => '\1s', |
|
82 | + '/(?:([^f])fe|([lr])f)$/i' => '\1\2ves', |
|
83 | + '/sis$/i' => 'ses', |
|
84 | + '/([ti])um$/i' => '\1a', |
|
85 | + '/(buffal|tomat)o$/i' => '\1oes', |
|
86 | + '/(bu)s$/i' => '\1ses', |
|
87 | + '/(alias|status)/i' => '\1es', |
|
88 | + '/(octop|vir)us$/i' => '\1i', |
|
89 | + '/(ax|test)is$/i' => '\1es', |
|
90 | + '/s$/i' => 's', |
|
91 | + '/$/' => 's'); |
|
92 | + |
|
93 | + $uncountable = array('equipment', 'information', 'rice', 'money', 'species', 'series', 'fish', 'sheep'); |
|
94 | + |
|
95 | + $irregular = array( |
|
96 | + 'person' => 'people', |
|
97 | + 'man' => 'men', |
|
98 | + 'child' => 'children', |
|
99 | + 'sex' => 'sexes', |
|
100 | + 'move' => 'moves'); |
|
101 | + |
|
102 | + $lowercased_word = strtolower($word); |
|
103 | + |
|
104 | + foreach ($uncountable as $_uncountable) { |
|
105 | + if ( |
|
106 | + substr($lowercased_word, (-1 * strlen($_uncountable))) == $_uncountable && // even though the word "price" ends in "rice", it can be pluralized, so check the previous character isnt a letter |
|
107 | + ! ctype_alpha($lowercased_word[ strlen($lowercased_word) - strlen($_uncountable) ]) |
|
108 | + ) { |
|
109 | + return $word; |
|
110 | + } |
|
111 | + } |
|
112 | + |
|
113 | + foreach ($irregular as $_plural => $_singular) { |
|
114 | + if (preg_match('/(' . $_plural . ')$/i', $word, $arr)) { |
|
115 | + return preg_replace('/(' . $_plural . ')$/i', substr($arr[0], 0, 1) . substr($_singular, 1), $word); |
|
116 | + } |
|
117 | + } |
|
118 | + |
|
119 | + foreach ($plural as $rule => $replacement) { |
|
120 | + if (preg_match($rule, $word)) { |
|
121 | + return preg_replace($rule, $replacement, $word); |
|
122 | + } |
|
123 | + } |
|
124 | + return false; |
|
125 | + } |
|
126 | + |
|
127 | + // }}} |
|
128 | + // {{{ singularize() |
|
129 | + |
|
130 | + /** |
|
131 | + * Singularizes English nouns. |
|
132 | + * |
|
133 | + * @access public |
|
134 | + * @static |
|
135 | + * @param string $word English noun to singularize |
|
136 | + * @return string Singular noun. |
|
137 | + */ |
|
138 | + public static function singularize($word) |
|
139 | + { |
|
140 | + $singular = array( |
|
141 | + '/(quiz)zes$/i' => '\1', |
|
142 | + '/(matr)ices$/i' => '\1ix', |
|
143 | + '/(vert|ind)ices$/i' => '\1ex', |
|
144 | + '/^(ox)en/i' => '\1', |
|
145 | + '/(alias|status)es$/i' => '\1', |
|
146 | + '/([octop|vir])i$/i' => '\1us', |
|
147 | + '/(cris|ax|test)es$/i' => '\1is', |
|
148 | + '/(shoe)s$/i' => '\1', |
|
149 | + '/(o)es$/i' => '\1', |
|
150 | + '/(bus)es$/i' => '\1', |
|
151 | + '/([m|l])ice$/i' => '\1ouse', |
|
152 | + '/(x|ch|ss|sh)es$/i' => '\1', |
|
153 | + '/(m)ovies$/i' => '\1ovie', |
|
154 | + '/(s)eries$/i' => '\1eries', |
|
155 | + '/([^aeiouy]|qu)ies$/i' => '\1y', |
|
156 | + '/([lr])ves$/i' => '\1f', |
|
157 | + '/(tive)s$/i' => '\1', |
|
158 | + '/(hive)s$/i' => '\1', |
|
159 | + '/([^f])ves$/i' => '\1fe', |
|
160 | + '/(^analy)ses$/i' => '\1sis', |
|
161 | + '/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i' => '\1\2sis', |
|
162 | + '/([ti])a$/i' => '\1um', |
|
163 | + '/(n)ews$/i' => '\1ews', |
|
164 | + '/s$/i' => '', |
|
165 | + ); |
|
166 | + |
|
167 | + $uncountable = array('equipment', 'information', 'rice', 'money', 'species', 'series', 'fish', 'sheep'); |
|
168 | + |
|
169 | + $irregular = array( |
|
170 | + 'person' => 'people', |
|
171 | + 'man' => 'men', |
|
172 | + 'child' => 'children', |
|
173 | + 'sex' => 'sexes', |
|
174 | + 'move' => 'moves'); |
|
175 | + |
|
176 | + $lowercased_word = strtolower($word); |
|
177 | + foreach ($uncountable as $_uncountable) { |
|
178 | + if (substr($lowercased_word, (-1 * strlen($_uncountable))) == $_uncountable) { |
|
179 | + return $word; |
|
180 | + } |
|
181 | + } |
|
182 | + |
|
183 | + foreach ($irregular as $_plural => $_singular) { |
|
184 | + if (preg_match('/(' . $_singular . ')$/i', $word, $arr)) { |
|
185 | + return preg_replace('/(' . $_singular . ')$/i', substr($arr[0], 0, 1) . substr($_plural, 1), $word); |
|
186 | + } |
|
187 | + } |
|
188 | + |
|
189 | + foreach ($singular as $rule => $replacement) { |
|
190 | + if (preg_match($rule, $word)) { |
|
191 | + return preg_replace($rule, $replacement, $word); |
|
192 | + } |
|
193 | + } |
|
194 | + |
|
195 | + return $word; |
|
196 | + } |
|
197 | + |
|
198 | + // }}} |
|
199 | + // {{{ titleize() |
|
200 | + |
|
201 | + /** |
|
202 | + * Converts an underscored or CamelCase word into a English |
|
203 | + * sentence. |
|
204 | + * |
|
205 | + * The titleize static function converts text like "WelcomePage", |
|
206 | + * "welcome_page" or "welcome page" to this "Welcome |
|
207 | + * Page". |
|
208 | + * If second parameter is set to 'first' it will only |
|
209 | + * capitalize the first character of the title. |
|
210 | + * |
|
211 | + * @access public |
|
212 | + * @static |
|
213 | + * @param string $word Word to format as tile |
|
214 | + * @param string $uppercase If set to 'first' it will only uppercase the |
|
215 | + * first character. Otherwise it will uppercase all |
|
216 | + * the words in the title. |
|
217 | + * @return string Text formatted as title |
|
218 | + */ |
|
219 | + public static function titleize($word, $uppercase = '') |
|
220 | + { |
|
221 | + $uppercase = $uppercase === 'first' ? 'ucfirst' : 'ucwords'; |
|
222 | + return $uppercase(EEH_Inflector::humanize(EEH_Inflector::underscore($word))); |
|
223 | + } |
|
224 | + |
|
225 | + // }}} |
|
226 | + // {{{ camelize() |
|
227 | + |
|
228 | + /** |
|
229 | + * Returns given word as CamelCased |
|
230 | + * |
|
231 | + * Converts a word like "send_email" to "SendEmail". It |
|
232 | + * will remove non alphanumeric character from the word, so |
|
233 | + * "who's online" will be converted to "WhoSOnline" |
|
234 | + * |
|
235 | + * @access public |
|
236 | + * @static |
|
237 | + * @see variablize |
|
238 | + * @param string $word Word to convert to camel case |
|
239 | + * @return string UpperCamelCasedWord |
|
240 | + */ |
|
241 | + public static function camelize($word) |
|
242 | + { |
|
243 | + return str_replace(' ', '', ucwords(preg_replace('/[^A-Z^a-z^0-9]+/', ' ', $word))); |
|
244 | + } |
|
245 | + |
|
246 | + |
|
247 | + |
|
248 | + /** |
|
249 | + * Camelizes all but the first word. This is handy converting a method which followed EE4 legacy naming convention |
|
250 | + * with the new PSR-based naming conventions |
|
251 | + * @param $word |
|
252 | + * @return string |
|
253 | + */ |
|
254 | + public static function camelize_all_but_first($word) |
|
255 | + { |
|
256 | + return lcfirst(EEH_Inflector::camelize($word)); |
|
257 | + } |
|
258 | + // }}} |
|
259 | + // {{{ underscore() |
|
260 | + |
|
261 | + /** |
|
262 | + * Converts a word "into_it_s_underscored_version" |
|
263 | + * |
|
264 | + * Convert any "CamelCased" or "ordinary Word" into an |
|
265 | + * "underscored_word". |
|
266 | + * |
|
267 | + * This can be really useful for creating friendly URLs. |
|
268 | + * |
|
269 | + * @access public |
|
270 | + * @static |
|
271 | + * @param string $word Word to underscore |
|
272 | + * @return string Underscored word |
|
273 | + */ |
|
274 | + public static function underscore($word) |
|
275 | + { |
|
276 | + return strtolower(preg_replace('/[^A-Z^a-z^0-9]+/', '_', preg_replace('/([a-zd])([A-Z])/', '1_2', preg_replace('/([A-Z]+)([A-Z][a-z])/', '1_2', $word)))); |
|
277 | + } |
|
278 | + |
|
279 | + // }}} |
|
280 | + // {{{ humanize() |
|
281 | + |
|
282 | + /** |
|
283 | + * Returns a human-readable string from $word |
|
284 | + * |
|
285 | + * Returns a human-readable string from $word, by replacing |
|
286 | + * underscores with a space, and by upper-casing the initial |
|
287 | + * character by default. |
|
288 | + * |
|
289 | + * If you need to uppercase all the words you just have to |
|
290 | + * pass 'all' as a second parameter. |
|
291 | + * |
|
292 | + * @access public |
|
293 | + * @static |
|
294 | + * @param string $word String to "humanize" |
|
295 | + * @param string $uppercase If set to 'all' it will uppercase all the words |
|
296 | + * instead of just the first one. |
|
297 | + * @return string Human-readable word |
|
298 | + */ |
|
299 | + public static function humanize($word, $uppercase = '') |
|
300 | + { |
|
301 | + // make special exceptions for acronyms |
|
302 | + $word = str_replace('wp_', 'WP_', $word); |
|
303 | + $uppercase = $uppercase === 'all' ? 'ucwords' : 'ucfirst'; |
|
304 | + return $uppercase(str_replace('_', ' ', preg_replace('/_id$/', '', $word))); |
|
305 | + } |
|
306 | + |
|
307 | + // }}} |
|
308 | + // {{{ variablize() |
|
309 | + |
|
310 | + /** |
|
311 | + * Same as camelize but first char is underscored |
|
312 | + * |
|
313 | + * Converts a word like "send_email" to "sendEmail". It |
|
314 | + * will remove non alphanumeric character from the word, so |
|
315 | + * "who's online" will be converted to "whoSOnline" |
|
316 | + * |
|
317 | + * @access public |
|
318 | + * @static |
|
319 | + * @see camelize |
|
320 | + * @param string $word Word to lowerCamelCase |
|
321 | + * @return string Returns a lowerCamelCasedWord |
|
322 | + */ |
|
323 | + public static function variablize($word) |
|
324 | + { |
|
325 | + $word = EEH_Inflector::camelize($word); |
|
326 | + return strtolower($word[0]) . substr($word, 1); |
|
327 | + } |
|
328 | + |
|
329 | + // }}} |
|
330 | + // {{{ tableize() |
|
331 | + |
|
332 | + /** |
|
333 | + * Converts a class name to its table name according to rails |
|
334 | + * naming conventions. |
|
335 | + * |
|
336 | + * Converts "Person" to "people" |
|
337 | + * |
|
338 | + * @access public |
|
339 | + * @static |
|
340 | + * @see classify |
|
341 | + * @param string $class_name Class name for getting related table_name. |
|
342 | + * @return string plural_table_name |
|
343 | + */ |
|
344 | + public static function tableize($class_name) |
|
345 | + { |
|
346 | + return EEH_Inflector::pluralize(EEH_Inflector::underscore($class_name)); |
|
347 | + } |
|
348 | + |
|
349 | + // }}} |
|
350 | + // {{{ classify() |
|
351 | + |
|
352 | + /** |
|
353 | + * Converts a table name to its class name according to rails |
|
354 | + * naming conventions. |
|
355 | + * |
|
356 | + * Converts "people" to "Person" |
|
357 | + * |
|
358 | + * @access public |
|
359 | + * @static |
|
360 | + * @see tableize |
|
361 | + * @param string $table_name Table name for getting related ClassName. |
|
362 | + * @return string SingularClassName |
|
363 | + */ |
|
364 | + public static function classify($table_name) |
|
365 | + { |
|
366 | + return EEH_Inflector::camelize(EEH_Inflector::singularize($table_name)); |
|
367 | + } |
|
368 | + |
|
369 | + // }}} |
|
370 | + // {{{ ordinalize() |
|
371 | + |
|
372 | + /** |
|
373 | + * Converts number to its ordinal English form. |
|
374 | + * |
|
375 | + * This method converts 13 to 13th, 2 to 2nd ... |
|
376 | + * |
|
377 | + * @access public |
|
378 | + * @static |
|
379 | + * @param integer $number Number to get its ordinal value |
|
380 | + * @return string Ordinal representation of given string. |
|
381 | + */ |
|
382 | + public static function ordinalize($number) |
|
383 | + { |
|
384 | + if (in_array(($number % 100), range(11, 13))) { |
|
385 | + return $number . 'th'; |
|
386 | + } else { |
|
387 | + switch (($number % 10)) { |
|
388 | + case 1: |
|
389 | + return $number . 'st'; |
|
390 | + break; |
|
391 | + case 2: |
|
392 | + return $number . 'nd'; |
|
393 | + break; |
|
394 | + case 3: |
|
395 | + return $number . 'rd'; |
|
396 | + default: |
|
397 | + return $number . 'th'; |
|
398 | + break; |
|
399 | + } |
|
400 | + } |
|
401 | + } |
|
402 | + |
|
403 | + |
|
404 | + |
|
405 | + /** |
|
406 | + * @param $string |
|
407 | + * @return string |
|
408 | + */ |
|
409 | + public static function add_indefinite_article($string) |
|
410 | + { |
|
411 | + if (strtolower($string) === 'null') { |
|
412 | + return $string; |
|
413 | + } |
|
414 | + return (stripos('aeiou', $string[0]) !== false ? 'an ' : 'a ') . $string; |
|
415 | + } |
|
416 | 416 | } |
@@ -104,15 +104,15 @@ discard block |
||
104 | 104 | foreach ($uncountable as $_uncountable) { |
105 | 105 | if ( |
106 | 106 | substr($lowercased_word, (-1 * strlen($_uncountable))) == $_uncountable && // even though the word "price" ends in "rice", it can be pluralized, so check the previous character isnt a letter |
107 | - ! ctype_alpha($lowercased_word[ strlen($lowercased_word) - strlen($_uncountable) ]) |
|
107 | + ! ctype_alpha($lowercased_word[strlen($lowercased_word) - strlen($_uncountable)]) |
|
108 | 108 | ) { |
109 | 109 | return $word; |
110 | 110 | } |
111 | 111 | } |
112 | 112 | |
113 | 113 | foreach ($irregular as $_plural => $_singular) { |
114 | - if (preg_match('/(' . $_plural . ')$/i', $word, $arr)) { |
|
115 | - return preg_replace('/(' . $_plural . ')$/i', substr($arr[0], 0, 1) . substr($_singular, 1), $word); |
|
114 | + if (preg_match('/('.$_plural.')$/i', $word, $arr)) { |
|
115 | + return preg_replace('/('.$_plural.')$/i', substr($arr[0], 0, 1).substr($_singular, 1), $word); |
|
116 | 116 | } |
117 | 117 | } |
118 | 118 | |
@@ -181,8 +181,8 @@ discard block |
||
181 | 181 | } |
182 | 182 | |
183 | 183 | foreach ($irregular as $_plural => $_singular) { |
184 | - if (preg_match('/(' . $_singular . ')$/i', $word, $arr)) { |
|
185 | - return preg_replace('/(' . $_singular . ')$/i', substr($arr[0], 0, 1) . substr($_plural, 1), $word); |
|
184 | + if (preg_match('/('.$_singular.')$/i', $word, $arr)) { |
|
185 | + return preg_replace('/('.$_singular.')$/i', substr($arr[0], 0, 1).substr($_plural, 1), $word); |
|
186 | 186 | } |
187 | 187 | } |
188 | 188 | |
@@ -323,7 +323,7 @@ discard block |
||
323 | 323 | public static function variablize($word) |
324 | 324 | { |
325 | 325 | $word = EEH_Inflector::camelize($word); |
326 | - return strtolower($word[0]) . substr($word, 1); |
|
326 | + return strtolower($word[0]).substr($word, 1); |
|
327 | 327 | } |
328 | 328 | |
329 | 329 | // }}} |
@@ -382,19 +382,19 @@ discard block |
||
382 | 382 | public static function ordinalize($number) |
383 | 383 | { |
384 | 384 | if (in_array(($number % 100), range(11, 13))) { |
385 | - return $number . 'th'; |
|
385 | + return $number.'th'; |
|
386 | 386 | } else { |
387 | 387 | switch (($number % 10)) { |
388 | 388 | case 1: |
389 | - return $number . 'st'; |
|
389 | + return $number.'st'; |
|
390 | 390 | break; |
391 | 391 | case 2: |
392 | - return $number . 'nd'; |
|
392 | + return $number.'nd'; |
|
393 | 393 | break; |
394 | 394 | case 3: |
395 | - return $number . 'rd'; |
|
395 | + return $number.'rd'; |
|
396 | 396 | default: |
397 | - return $number . 'th'; |
|
397 | + return $number.'th'; |
|
398 | 398 | break; |
399 | 399 | } |
400 | 400 | } |
@@ -411,6 +411,6 @@ discard block |
||
411 | 411 | if (strtolower($string) === 'null') { |
412 | 412 | return $string; |
413 | 413 | } |
414 | - return (stripos('aeiou', $string[0]) !== false ? 'an ' : 'a ') . $string; |
|
414 | + return (stripos('aeiou', $string[0]) !== false ? 'an ' : 'a ').$string; |
|
415 | 415 | } |
416 | 416 | } |
@@ -208,14 +208,14 @@ discard block |
||
208 | 208 | if ($sc_obj instanceof EE_Shortcodes) { |
209 | 209 | // we need to setup any dynamic shortcodes so that they work with the array_key_exists |
210 | 210 | preg_match_all('/(\[[A-Za-z0-9\_]+_\*)/', $shortcode, $matches); |
211 | - $sc_to_verify = ! empty($matches[0]) ? $matches[0][0] . ']' : $shortcode; |
|
211 | + $sc_to_verify = ! empty($matches[0]) ? $matches[0][0].']' : $shortcode; |
|
212 | 212 | |
213 | - if (! array_key_exists($sc_to_verify, $sc_obj->get_shortcodes())) { |
|
213 | + if ( ! array_key_exists($sc_to_verify, $sc_obj->get_shortcodes())) { |
|
214 | 214 | continue; // the given shortcode isn't in this object |
215 | 215 | } |
216 | 216 | |
217 | 217 | // if this isn't a "list" type shortcode then we'll send along the data vanilla instead of in an array. |
218 | - if (! in_array($sc_to_verify, $list_type_shortcodes)) { |
|
218 | + if ( ! in_array($sc_to_verify, $list_type_shortcodes)) { |
|
219 | 219 | $data_send = ! is_object($this->_data) && isset($this->_data['data']) ? $this->_data['data'] : $this->_data; |
220 | 220 | } else { |
221 | 221 | $data_send = $this->_data; |
@@ -271,7 +271,7 @@ discard block |
||
271 | 271 | foreach ($valid_shortcodes as $shortcode_ref) { |
272 | 272 | $ref = ucwords(str_replace('_', ' ', $shortcode_ref)); |
273 | 273 | $ref = str_replace(' ', '_', $ref); |
274 | - $classname = 'EE_' . $ref . '_Shortcodes'; |
|
274 | + $classname = 'EE_'.$ref.'_Shortcodes'; |
|
275 | 275 | if (class_exists($classname)) { |
276 | 276 | $this->_shortcode_objs[] = new $classname(); |
277 | 277 | } |
@@ -11,268 +11,268 @@ |
||
11 | 11 | */ |
12 | 12 | class EEH_Parse_Shortcodes |
13 | 13 | { |
14 | - /** |
|
15 | - * holds the template |
|
16 | - * |
|
17 | - * @access private |
|
18 | - * @var mixed (string|array) |
|
19 | - */ |
|
20 | - private $_template; |
|
21 | - |
|
22 | - |
|
23 | - /** |
|
24 | - * holds the incoming data object |
|
25 | - * |
|
26 | - * @access private |
|
27 | - * @var object |
|
28 | - */ |
|
29 | - private $_data; |
|
30 | - |
|
31 | - |
|
32 | - /** |
|
33 | - * will hold an array of EE_Shortcodes library objects. |
|
34 | - * |
|
35 | - * @access private |
|
36 | - * @var EE_Shortcodes[] |
|
37 | - */ |
|
38 | - private $_shortcode_objs = array(); |
|
39 | - |
|
40 | - |
|
41 | - public function __construct() |
|
42 | - { |
|
43 | - } |
|
44 | - |
|
45 | - |
|
46 | - /** |
|
47 | - * This kicks off the parsing of shortcodes in message templates |
|
48 | - * |
|
49 | - * @param string $template This is the incoming string to be parsed |
|
50 | - * @param EE_Messages_Addressee $data This is the incoming data object |
|
51 | - * @param array $valid_shortcodes An array of strings that correspond to EE_Shortcode libraries |
|
52 | - * @param EE_message_type $message_type The message type that called the parser |
|
53 | - * @param EE_messenger $messenger The active messenger for this parsing session. |
|
54 | - * @param EE_Message $message |
|
55 | - * @return string The parsed template string |
|
56 | - */ |
|
57 | - public function parse_message_template( |
|
58 | - $template, |
|
59 | - EE_Messages_Addressee $data, |
|
60 | - $valid_shortcodes, |
|
61 | - EE_message_type $message_type, |
|
62 | - EE_messenger $messenger, |
|
63 | - EE_Message $message |
|
64 | - ) { |
|
65 | - $extra_data = array( |
|
66 | - 'messenger' => $messenger, |
|
67 | - 'message_type' => $message_type, |
|
68 | - 'message' => $message, |
|
69 | - ); |
|
70 | - $this->_init_data($template, $data, $valid_shortcodes, $extra_data); |
|
71 | - $this->_template = is_array($template) ? $template['main'] : $template; |
|
72 | - return $this->_parse_message_template(); |
|
73 | - } |
|
74 | - |
|
75 | - |
|
76 | - public function parse_attendee_list_template( |
|
77 | - $template, |
|
78 | - EE_Registration $registration, |
|
79 | - $valid_shortcodes, |
|
80 | - $extra_data = array() |
|
81 | - ) { |
|
82 | - $this->_init_data($template, $registration, $valid_shortcodes, $extra_data); |
|
83 | - $this->_template = is_array($template) ? $template['attendee_list'] : $template; |
|
84 | - return $this->_parse_message_template(); |
|
85 | - } |
|
86 | - |
|
87 | - public function parse_event_list_template($template, EE_Event $event, $valid_shortcodes, $extra_data = array()) |
|
88 | - { |
|
89 | - $this->_init_data($template, $event, $valid_shortcodes, $extra_data); |
|
90 | - $this->_template = is_array($template) ? $template['event_list'] : $template; |
|
91 | - return $this->_parse_message_template(); |
|
92 | - } |
|
93 | - |
|
94 | - |
|
95 | - public function parse_ticket_list_template($template, EE_Ticket $ticket, $valid_shortcodes, $extra_data = array()) |
|
96 | - { |
|
97 | - $this->_init_data($template, $ticket, $valid_shortcodes, $extra_data); |
|
98 | - $this->_template = is_array($template) ? $template['ticket_list'] : $template; |
|
99 | - return $this->_parse_message_template(); |
|
100 | - } |
|
101 | - |
|
102 | - |
|
103 | - public function parse_line_item_list_template( |
|
104 | - $template, |
|
105 | - EE_Line_Item $line_item, |
|
106 | - $valid_shortcodes, |
|
107 | - $extra_data = array() |
|
108 | - ) { |
|
109 | - $this->_init_data($template, $line_item, $valid_shortcodes, $extra_data); |
|
110 | - $this->_template = is_array($template) ? $template['ticket_line_item_no_pms'] : $template; |
|
111 | - return $this->_parse_message_template(); |
|
112 | - } |
|
113 | - |
|
114 | - |
|
115 | - public function parse_payment_list_template( |
|
116 | - $template, |
|
117 | - EE_Payment $payment_item, |
|
118 | - $valid_shortcodes, |
|
119 | - $extra_data = array() |
|
120 | - ) { |
|
121 | - $this->_init_data($template, $payment_item, $valid_shortcodes, $extra_data); |
|
122 | - $this->_template = is_array($template) ? $template['payment_list'] : $template; |
|
123 | - return $this->_parse_message_template(); |
|
124 | - } |
|
125 | - |
|
126 | - |
|
127 | - public function parse_datetime_list_template( |
|
128 | - $template, |
|
129 | - EE_Datetime $datetime, |
|
130 | - $valid_shortcodes, |
|
131 | - $extra_data = array() |
|
132 | - ) { |
|
133 | - $this->_init_data($template, $datetime, $valid_shortcodes, $extra_data); |
|
134 | - $this->_template = is_array($template) ? $template['datetime_list'] : $template; |
|
135 | - return $this->_parse_message_template(); |
|
136 | - } |
|
137 | - |
|
138 | - |
|
139 | - public function parse_question_list_template($template, EE_Answer $answer, $valid_shortcodes, $extra_data = array()) |
|
140 | - { |
|
141 | - $this->_init_data($template, $answer, $valid_shortcodes, $extra_data); |
|
142 | - $this->_template = is_array($template) ? $template['question_list'] : $template; |
|
143 | - return $this->_parse_message_template(); |
|
144 | - } |
|
145 | - |
|
146 | - |
|
147 | - private function _init_data($template, $data, $valid_shortcodes, $extra_data = array()) |
|
148 | - { |
|
149 | - $this->_reset_props(); |
|
150 | - $this->_data['template'] = $template; |
|
151 | - $this->_data['data'] = $data; |
|
152 | - $this->_data['extra_data'] = $extra_data; |
|
153 | - $this->_set_shortcodes($valid_shortcodes); |
|
154 | - } |
|
155 | - |
|
156 | - |
|
157 | - private function _reset_props() |
|
158 | - { |
|
159 | - $this->_template = $this->_data = null; |
|
160 | - $this->_shortcode_objs = array(); |
|
161 | - } |
|
162 | - |
|
163 | - |
|
164 | - /** |
|
165 | - * takes the given template and parses it with the $_shortcodes property |
|
166 | - * |
|
167 | - * @access private |
|
168 | - * @return string |
|
169 | - */ |
|
170 | - private function _parse_message_template() |
|
171 | - { |
|
172 | - // now let's get a list of shortcodes that are found in the given template |
|
173 | - preg_match_all('/(\[.+?\])/', $this->_template, $matches); |
|
174 | - $shortcodes = (array) $matches[0]; // this should be an array of shortcodes in the template string. |
|
175 | - |
|
176 | - $matched_code = array(); |
|
177 | - $sc_values = array(); |
|
178 | - |
|
179 | - $list_type_shortcodes = array( |
|
180 | - '[ATTENDEE_LIST]', |
|
181 | - '[EVENT_LIST]', |
|
182 | - '[TICKET_LIST]', |
|
183 | - '[DATETIME_LIST]', |
|
184 | - '[QUESTION_LIST]', |
|
185 | - '[RECIPIENT_QUESTION_LIST]', |
|
186 | - '[PRIMARY_REGISTRANT_QUESTION_LIST]', |
|
187 | - '[RECIPIENT_TICKET_LIST]', |
|
188 | - '[PRIMARY_REGISTRANT_TICKET_LIST]', |
|
189 | - '[RECIPIENT_DATETIME_LIST]', |
|
190 | - '[PRIMARY_REGISTRANT_DATETIME_LIST]', |
|
191 | - '[TICKET_LINE_ITEM_LIST]', |
|
192 | - '[TAX_LINE_ITEM_LIST]', |
|
193 | - '[ADDITIONAL_LINE_ITEM_LIST]', |
|
194 | - '[PRICE_MODIFIER_LINE_ITEM_LIST]', |
|
195 | - '[PAYMENT_LIST_*]', |
|
196 | - ); |
|
197 | - |
|
198 | - $list_type_shortcodes = apply_filters( |
|
199 | - 'FHEE__EEH_Parse_Shortcodes___parse_message_template__list_type_shortcodes', |
|
200 | - $list_type_shortcodes |
|
201 | - ); |
|
202 | - |
|
203 | - // now lets go ahead and loop through our parsers for each shortcode and setup the values |
|
204 | - foreach ($shortcodes as $shortcode) { |
|
205 | - foreach ($this->_shortcode_objs as $sc_obj) { |
|
206 | - if ($sc_obj instanceof EE_Shortcodes) { |
|
207 | - // we need to setup any dynamic shortcodes so that they work with the array_key_exists |
|
208 | - preg_match_all('/(\[[A-Za-z0-9\_]+_\*)/', $shortcode, $matches); |
|
209 | - $sc_to_verify = ! empty($matches[0]) ? $matches[0][0] . ']' : $shortcode; |
|
210 | - |
|
211 | - if (! array_key_exists($sc_to_verify, $sc_obj->get_shortcodes())) { |
|
212 | - continue; // the given shortcode isn't in this object |
|
213 | - } |
|
214 | - |
|
215 | - // if this isn't a "list" type shortcode then we'll send along the data vanilla instead of in an array. |
|
216 | - if (! in_array($sc_to_verify, $list_type_shortcodes)) { |
|
217 | - $data_send = ! is_object($this->_data) && isset($this->_data['data']) ? $this->_data['data'] : $this->_data; |
|
218 | - } else { |
|
219 | - $data_send = $this->_data; |
|
220 | - } |
|
221 | - |
|
222 | - // is this a conditional type shortcode? If it is then we actually parse the template here. |
|
223 | - if ($this->_is_conditional_shortcode($shortcode)) { |
|
224 | - // most shortcode parsers are not going to have a match for this shortcode and will return an |
|
225 | - // empty string so we need to make sure that we're only replacing the template when there is a non empty string. |
|
226 | - $parsed = $sc_obj->parser($shortcode, $data_send, $this->_data['extra_data']); |
|
227 | - if ($parsed) { |
|
228 | - $this->_template = $parsed; |
|
229 | - } |
|
230 | - } |
|
231 | - |
|
232 | - $parsed = $sc_obj->parser($shortcode, $data_send, $this->_data['extra_data']); |
|
233 | - |
|
234 | - $matched_code[] = $shortcode; |
|
235 | - $sc_values[] = $parsed; |
|
236 | - } |
|
237 | - } |
|
238 | - } |
|
239 | - |
|
240 | - // now we've got parsed values for all the shortcodes in the template so we can go ahead and swap the shortcodes out. |
|
241 | - $parsed = str_replace(array_values($matched_code), array_values($sc_values), $this->_template); |
|
242 | - return $parsed; |
|
243 | - } |
|
244 | - |
|
245 | - |
|
246 | - /** |
|
247 | - * Simply returns whether the given shortcode matches the structure for a conditional shortcode. |
|
248 | - * |
|
249 | - * Does it match this format: `[IF_` |
|
250 | - * |
|
251 | - * @param $shortcode |
|
252 | - */ |
|
253 | - protected function _is_conditional_shortcode($shortcode) |
|
254 | - { |
|
255 | - return strpos($shortcode, '[IF_') === 0; |
|
256 | - } |
|
257 | - |
|
258 | - |
|
259 | - /** |
|
260 | - * This sets the shortcodes property from the incoming array of valid shortcodes that corresponds to names of |
|
261 | - * various EE_Shortcode library objects |
|
262 | - * |
|
263 | - * @access private |
|
264 | - * @param array $valid_shortcodes an array of strings corresponding to EE_Shortcode Library objects |
|
265 | - * @return void |
|
266 | - */ |
|
267 | - private function _set_shortcodes($valid_shortcodes) |
|
268 | - { |
|
269 | - foreach ($valid_shortcodes as $shortcode_ref) { |
|
270 | - $ref = ucwords(str_replace('_', ' ', $shortcode_ref)); |
|
271 | - $ref = str_replace(' ', '_', $ref); |
|
272 | - $classname = 'EE_' . $ref . '_Shortcodes'; |
|
273 | - if (class_exists($classname)) { |
|
274 | - $this->_shortcode_objs[] = new $classname(); |
|
275 | - } |
|
276 | - } |
|
277 | - } |
|
14 | + /** |
|
15 | + * holds the template |
|
16 | + * |
|
17 | + * @access private |
|
18 | + * @var mixed (string|array) |
|
19 | + */ |
|
20 | + private $_template; |
|
21 | + |
|
22 | + |
|
23 | + /** |
|
24 | + * holds the incoming data object |
|
25 | + * |
|
26 | + * @access private |
|
27 | + * @var object |
|
28 | + */ |
|
29 | + private $_data; |
|
30 | + |
|
31 | + |
|
32 | + /** |
|
33 | + * will hold an array of EE_Shortcodes library objects. |
|
34 | + * |
|
35 | + * @access private |
|
36 | + * @var EE_Shortcodes[] |
|
37 | + */ |
|
38 | + private $_shortcode_objs = array(); |
|
39 | + |
|
40 | + |
|
41 | + public function __construct() |
|
42 | + { |
|
43 | + } |
|
44 | + |
|
45 | + |
|
46 | + /** |
|
47 | + * This kicks off the parsing of shortcodes in message templates |
|
48 | + * |
|
49 | + * @param string $template This is the incoming string to be parsed |
|
50 | + * @param EE_Messages_Addressee $data This is the incoming data object |
|
51 | + * @param array $valid_shortcodes An array of strings that correspond to EE_Shortcode libraries |
|
52 | + * @param EE_message_type $message_type The message type that called the parser |
|
53 | + * @param EE_messenger $messenger The active messenger for this parsing session. |
|
54 | + * @param EE_Message $message |
|
55 | + * @return string The parsed template string |
|
56 | + */ |
|
57 | + public function parse_message_template( |
|
58 | + $template, |
|
59 | + EE_Messages_Addressee $data, |
|
60 | + $valid_shortcodes, |
|
61 | + EE_message_type $message_type, |
|
62 | + EE_messenger $messenger, |
|
63 | + EE_Message $message |
|
64 | + ) { |
|
65 | + $extra_data = array( |
|
66 | + 'messenger' => $messenger, |
|
67 | + 'message_type' => $message_type, |
|
68 | + 'message' => $message, |
|
69 | + ); |
|
70 | + $this->_init_data($template, $data, $valid_shortcodes, $extra_data); |
|
71 | + $this->_template = is_array($template) ? $template['main'] : $template; |
|
72 | + return $this->_parse_message_template(); |
|
73 | + } |
|
74 | + |
|
75 | + |
|
76 | + public function parse_attendee_list_template( |
|
77 | + $template, |
|
78 | + EE_Registration $registration, |
|
79 | + $valid_shortcodes, |
|
80 | + $extra_data = array() |
|
81 | + ) { |
|
82 | + $this->_init_data($template, $registration, $valid_shortcodes, $extra_data); |
|
83 | + $this->_template = is_array($template) ? $template['attendee_list'] : $template; |
|
84 | + return $this->_parse_message_template(); |
|
85 | + } |
|
86 | + |
|
87 | + public function parse_event_list_template($template, EE_Event $event, $valid_shortcodes, $extra_data = array()) |
|
88 | + { |
|
89 | + $this->_init_data($template, $event, $valid_shortcodes, $extra_data); |
|
90 | + $this->_template = is_array($template) ? $template['event_list'] : $template; |
|
91 | + return $this->_parse_message_template(); |
|
92 | + } |
|
93 | + |
|
94 | + |
|
95 | + public function parse_ticket_list_template($template, EE_Ticket $ticket, $valid_shortcodes, $extra_data = array()) |
|
96 | + { |
|
97 | + $this->_init_data($template, $ticket, $valid_shortcodes, $extra_data); |
|
98 | + $this->_template = is_array($template) ? $template['ticket_list'] : $template; |
|
99 | + return $this->_parse_message_template(); |
|
100 | + } |
|
101 | + |
|
102 | + |
|
103 | + public function parse_line_item_list_template( |
|
104 | + $template, |
|
105 | + EE_Line_Item $line_item, |
|
106 | + $valid_shortcodes, |
|
107 | + $extra_data = array() |
|
108 | + ) { |
|
109 | + $this->_init_data($template, $line_item, $valid_shortcodes, $extra_data); |
|
110 | + $this->_template = is_array($template) ? $template['ticket_line_item_no_pms'] : $template; |
|
111 | + return $this->_parse_message_template(); |
|
112 | + } |
|
113 | + |
|
114 | + |
|
115 | + public function parse_payment_list_template( |
|
116 | + $template, |
|
117 | + EE_Payment $payment_item, |
|
118 | + $valid_shortcodes, |
|
119 | + $extra_data = array() |
|
120 | + ) { |
|
121 | + $this->_init_data($template, $payment_item, $valid_shortcodes, $extra_data); |
|
122 | + $this->_template = is_array($template) ? $template['payment_list'] : $template; |
|
123 | + return $this->_parse_message_template(); |
|
124 | + } |
|
125 | + |
|
126 | + |
|
127 | + public function parse_datetime_list_template( |
|
128 | + $template, |
|
129 | + EE_Datetime $datetime, |
|
130 | + $valid_shortcodes, |
|
131 | + $extra_data = array() |
|
132 | + ) { |
|
133 | + $this->_init_data($template, $datetime, $valid_shortcodes, $extra_data); |
|
134 | + $this->_template = is_array($template) ? $template['datetime_list'] : $template; |
|
135 | + return $this->_parse_message_template(); |
|
136 | + } |
|
137 | + |
|
138 | + |
|
139 | + public function parse_question_list_template($template, EE_Answer $answer, $valid_shortcodes, $extra_data = array()) |
|
140 | + { |
|
141 | + $this->_init_data($template, $answer, $valid_shortcodes, $extra_data); |
|
142 | + $this->_template = is_array($template) ? $template['question_list'] : $template; |
|
143 | + return $this->_parse_message_template(); |
|
144 | + } |
|
145 | + |
|
146 | + |
|
147 | + private function _init_data($template, $data, $valid_shortcodes, $extra_data = array()) |
|
148 | + { |
|
149 | + $this->_reset_props(); |
|
150 | + $this->_data['template'] = $template; |
|
151 | + $this->_data['data'] = $data; |
|
152 | + $this->_data['extra_data'] = $extra_data; |
|
153 | + $this->_set_shortcodes($valid_shortcodes); |
|
154 | + } |
|
155 | + |
|
156 | + |
|
157 | + private function _reset_props() |
|
158 | + { |
|
159 | + $this->_template = $this->_data = null; |
|
160 | + $this->_shortcode_objs = array(); |
|
161 | + } |
|
162 | + |
|
163 | + |
|
164 | + /** |
|
165 | + * takes the given template and parses it with the $_shortcodes property |
|
166 | + * |
|
167 | + * @access private |
|
168 | + * @return string |
|
169 | + */ |
|
170 | + private function _parse_message_template() |
|
171 | + { |
|
172 | + // now let's get a list of shortcodes that are found in the given template |
|
173 | + preg_match_all('/(\[.+?\])/', $this->_template, $matches); |
|
174 | + $shortcodes = (array) $matches[0]; // this should be an array of shortcodes in the template string. |
|
175 | + |
|
176 | + $matched_code = array(); |
|
177 | + $sc_values = array(); |
|
178 | + |
|
179 | + $list_type_shortcodes = array( |
|
180 | + '[ATTENDEE_LIST]', |
|
181 | + '[EVENT_LIST]', |
|
182 | + '[TICKET_LIST]', |
|
183 | + '[DATETIME_LIST]', |
|
184 | + '[QUESTION_LIST]', |
|
185 | + '[RECIPIENT_QUESTION_LIST]', |
|
186 | + '[PRIMARY_REGISTRANT_QUESTION_LIST]', |
|
187 | + '[RECIPIENT_TICKET_LIST]', |
|
188 | + '[PRIMARY_REGISTRANT_TICKET_LIST]', |
|
189 | + '[RECIPIENT_DATETIME_LIST]', |
|
190 | + '[PRIMARY_REGISTRANT_DATETIME_LIST]', |
|
191 | + '[TICKET_LINE_ITEM_LIST]', |
|
192 | + '[TAX_LINE_ITEM_LIST]', |
|
193 | + '[ADDITIONAL_LINE_ITEM_LIST]', |
|
194 | + '[PRICE_MODIFIER_LINE_ITEM_LIST]', |
|
195 | + '[PAYMENT_LIST_*]', |
|
196 | + ); |
|
197 | + |
|
198 | + $list_type_shortcodes = apply_filters( |
|
199 | + 'FHEE__EEH_Parse_Shortcodes___parse_message_template__list_type_shortcodes', |
|
200 | + $list_type_shortcodes |
|
201 | + ); |
|
202 | + |
|
203 | + // now lets go ahead and loop through our parsers for each shortcode and setup the values |
|
204 | + foreach ($shortcodes as $shortcode) { |
|
205 | + foreach ($this->_shortcode_objs as $sc_obj) { |
|
206 | + if ($sc_obj instanceof EE_Shortcodes) { |
|
207 | + // we need to setup any dynamic shortcodes so that they work with the array_key_exists |
|
208 | + preg_match_all('/(\[[A-Za-z0-9\_]+_\*)/', $shortcode, $matches); |
|
209 | + $sc_to_verify = ! empty($matches[0]) ? $matches[0][0] . ']' : $shortcode; |
|
210 | + |
|
211 | + if (! array_key_exists($sc_to_verify, $sc_obj->get_shortcodes())) { |
|
212 | + continue; // the given shortcode isn't in this object |
|
213 | + } |
|
214 | + |
|
215 | + // if this isn't a "list" type shortcode then we'll send along the data vanilla instead of in an array. |
|
216 | + if (! in_array($sc_to_verify, $list_type_shortcodes)) { |
|
217 | + $data_send = ! is_object($this->_data) && isset($this->_data['data']) ? $this->_data['data'] : $this->_data; |
|
218 | + } else { |
|
219 | + $data_send = $this->_data; |
|
220 | + } |
|
221 | + |
|
222 | + // is this a conditional type shortcode? If it is then we actually parse the template here. |
|
223 | + if ($this->_is_conditional_shortcode($shortcode)) { |
|
224 | + // most shortcode parsers are not going to have a match for this shortcode and will return an |
|
225 | + // empty string so we need to make sure that we're only replacing the template when there is a non empty string. |
|
226 | + $parsed = $sc_obj->parser($shortcode, $data_send, $this->_data['extra_data']); |
|
227 | + if ($parsed) { |
|
228 | + $this->_template = $parsed; |
|
229 | + } |
|
230 | + } |
|
231 | + |
|
232 | + $parsed = $sc_obj->parser($shortcode, $data_send, $this->_data['extra_data']); |
|
233 | + |
|
234 | + $matched_code[] = $shortcode; |
|
235 | + $sc_values[] = $parsed; |
|
236 | + } |
|
237 | + } |
|
238 | + } |
|
239 | + |
|
240 | + // now we've got parsed values for all the shortcodes in the template so we can go ahead and swap the shortcodes out. |
|
241 | + $parsed = str_replace(array_values($matched_code), array_values($sc_values), $this->_template); |
|
242 | + return $parsed; |
|
243 | + } |
|
244 | + |
|
245 | + |
|
246 | + /** |
|
247 | + * Simply returns whether the given shortcode matches the structure for a conditional shortcode. |
|
248 | + * |
|
249 | + * Does it match this format: `[IF_` |
|
250 | + * |
|
251 | + * @param $shortcode |
|
252 | + */ |
|
253 | + protected function _is_conditional_shortcode($shortcode) |
|
254 | + { |
|
255 | + return strpos($shortcode, '[IF_') === 0; |
|
256 | + } |
|
257 | + |
|
258 | + |
|
259 | + /** |
|
260 | + * This sets the shortcodes property from the incoming array of valid shortcodes that corresponds to names of |
|
261 | + * various EE_Shortcode library objects |
|
262 | + * |
|
263 | + * @access private |
|
264 | + * @param array $valid_shortcodes an array of strings corresponding to EE_Shortcode Library objects |
|
265 | + * @return void |
|
266 | + */ |
|
267 | + private function _set_shortcodes($valid_shortcodes) |
|
268 | + { |
|
269 | + foreach ($valid_shortcodes as $shortcode_ref) { |
|
270 | + $ref = ucwords(str_replace('_', ' ', $shortcode_ref)); |
|
271 | + $ref = str_replace(' ', '_', $ref); |
|
272 | + $classname = 'EE_' . $ref . '_Shortcodes'; |
|
273 | + if (class_exists($classname)) { |
|
274 | + $this->_shortcode_objs[] = new $classname(); |
|
275 | + } |
|
276 | + } |
|
277 | + } |
|
278 | 278 | } |
@@ -74,13 +74,13 @@ discard block |
||
74 | 74 | ) { |
75 | 75 | // its associative, so we want to output its keys as column headers |
76 | 76 | $keys = array_keys($item_in_top_level_array); |
77 | - $new_file_contents .= EEH_Export::get_csv_row($keys); |
|
77 | + $new_file_contents .= EEH_Export::get_csv_row($keys); |
|
78 | 78 | } |
79 | 79 | // start writing data |
80 | 80 | foreach ($data as $data_row) { |
81 | 81 | $new_file_contents .= EEH_Export::get_csv_row($data_row); |
82 | 82 | } |
83 | - return EEH_File::write_to_file($filepath, EEH_File::get_file_contents($filepath) . $new_file_contents); |
|
83 | + return EEH_File::write_to_file($filepath, EEH_File::get_file_contents($filepath).$new_file_contents); |
|
84 | 84 | } else { |
85 | 85 | // no data TO write... so we can assume that's a success |
86 | 86 | return true; |
@@ -118,10 +118,10 @@ discard block |
||
118 | 118 | } |
119 | 119 | |
120 | 120 | $output[] = preg_match("/(?:${delimiter_esc}|${enclosure_esc}|\s)/", $field_value) ? |
121 | - ( $enclosure . str_replace($enclosure, $enclosure . $enclosure, $field_value) . $enclosure ) : $field_value; |
|
121 | + ($enclosure.str_replace($enclosure, $enclosure.$enclosure, $field_value).$enclosure) : $field_value; |
|
122 | 122 | } |
123 | 123 | |
124 | - return implode($delimiter, $output) . PHP_EOL; |
|
124 | + return implode($delimiter, $output).PHP_EOL; |
|
125 | 125 | } |
126 | 126 | |
127 | 127 |
@@ -13,165 +13,165 @@ |
||
13 | 13 | */ |
14 | 14 | class EEH_Export |
15 | 15 | { |
16 | - /** |
|
17 | - * Gets the 'normal' column named for fields |
|
18 | - * @param EE_Model_Field_Base $field |
|
19 | - * @return string |
|
20 | - * @throws EE_Error |
|
21 | - */ |
|
22 | - public static function get_column_name_for_field(EE_Model_Field_Base $field) |
|
23 | - { |
|
24 | - $column_name = wp_specialchars_decode($field->get_nicename(), ENT_QUOTES); |
|
25 | - if ( |
|
26 | - apply_filters( |
|
27 | - 'FHEE__EEH_Export__get_column_name_for_field__add_field_name', |
|
28 | - false, |
|
29 | - $column_name, |
|
30 | - $field |
|
31 | - ) |
|
32 | - ) { |
|
33 | - $column_name .= "[" |
|
34 | - . wp_specialchars_decode($field->get_name(), ENT_QUOTES) |
|
35 | - . "]"; |
|
36 | - } |
|
37 | - return $column_name; |
|
38 | - } |
|
39 | - |
|
40 | - /** |
|
41 | - * Writes $data to the csv file open in $filehandle. uses the array indices of $data for column headers |
|
42 | - * |
|
43 | - * @param string $filepath |
|
44 | - * @param array $data 2D array, first numerically-indexed, |
|
45 | - * and next-level-down preferably indexed by string |
|
46 | - * @param boolean $write_column_headers whether or not we should add the keys in the bottom-most array |
|
47 | - * as a row for headers in the CSV. |
|
48 | - * Eg, if $data looked like: |
|
49 | - * array( |
|
50 | - * 0=>array('EVT_ID'=>1,'EVT_name'=>'monkey'...), |
|
51 | - * 1=>array(...,...) |
|
52 | - * ) |
|
53 | - * |
|
54 | - * @return boolean if we successfully wrote to the CSV or not. If there's no $data, |
|
55 | - * we consider that a success (because we wrote everything there was...nothing) |
|
56 | - * @throws EE_Error |
|
57 | - */ |
|
58 | - public static function write_data_array_to_csv($filepath, $data, $write_column_headers = true) |
|
59 | - { |
|
60 | - |
|
61 | - $new_file_contents = ''; |
|
62 | - // determine if $data is actually a 2d array |
|
63 | - if ($data && is_array($data) && is_array(EEH_Array::get_one_item_from_array($data))) { |
|
64 | - // make sure top level is numerically indexed, |
|
65 | - |
|
66 | - if (EEH_Array::is_associative_array($data)) { |
|
67 | - throw new EE_Error(sprintf(esc_html__("top-level array must be numerically indexed. Does these look like numbers to you? %s", "event_espresso"), implode(",", array_keys($data)))); |
|
68 | - } |
|
69 | - $item_in_top_level_array = EEH_Array::get_one_item_from_array($data); |
|
70 | - // now, is the last item in the top-level array of $data an associative or numeric array? |
|
71 | - if ( |
|
72 | - $write_column_headers && |
|
73 | - EEH_Array::is_associative_array($item_in_top_level_array) |
|
74 | - ) { |
|
75 | - // its associative, so we want to output its keys as column headers |
|
76 | - $keys = array_keys($item_in_top_level_array); |
|
77 | - $new_file_contents .= EEH_Export::get_csv_row($keys); |
|
78 | - } |
|
79 | - // start writing data |
|
80 | - foreach ($data as $data_row) { |
|
81 | - $new_file_contents .= EEH_Export::get_csv_row($data_row); |
|
82 | - } |
|
83 | - return EEH_File::write_to_file($filepath, EEH_File::get_file_contents($filepath) . $new_file_contents); |
|
84 | - } else { |
|
85 | - // no data TO write... so we can assume that's a success |
|
86 | - return true; |
|
87 | - } |
|
88 | - } |
|
89 | - |
|
90 | - |
|
91 | - |
|
92 | - /** |
|
93 | - * |
|
94 | - * Writes a row to the csv file |
|
95 | - * @param array $row - individual row of csv data |
|
96 | - * @param string $delimiter - csv delimiter |
|
97 | - * @param string $enclosure - csv enclosure |
|
98 | - * @param bool $mysql_null - allows php NULL to be overridden with MySQl's insertable NULL value |
|
99 | - * @return string of text for teh csv file |
|
100 | - */ |
|
101 | - public static function get_csv_row(array $row, $delimiter = ',', $enclosure = '"', $mysql_null = false) |
|
102 | - { |
|
103 | - // Allow user to filter the csv delimiter and enclosure for other countries csv standards |
|
104 | - $delimiter = apply_filters('FHEE__EE_CSV__fputcsv2__delimiter', $delimiter); |
|
105 | - $enclosure = apply_filters('FHEE__EE_CSV__fputcsv2__enclosure', $enclosure); |
|
106 | - |
|
107 | - $delimiter_esc = preg_quote($delimiter, '/'); |
|
108 | - $enclosure_esc = preg_quote($enclosure, '/'); |
|
109 | - |
|
110 | - $output = array(); |
|
111 | - foreach ($row as $field_value) { |
|
112 | - if (is_object($field_value) || is_array($field_value)) { |
|
113 | - $field_value = serialize($field_value); |
|
114 | - } |
|
115 | - if ($field_value === null && $mysql_null) { |
|
116 | - $output[] = 'NULL'; |
|
117 | - continue; |
|
118 | - } |
|
119 | - |
|
120 | - $output[] = preg_match("/(?:${delimiter_esc}|${enclosure_esc}|\s)/", $field_value) ? |
|
121 | - ( $enclosure . str_replace($enclosure, $enclosure . $enclosure, $field_value) . $enclosure ) : $field_value; |
|
122 | - } |
|
123 | - |
|
124 | - return implode($delimiter, $output) . PHP_EOL; |
|
125 | - } |
|
126 | - |
|
127 | - |
|
128 | - |
|
129 | - /** |
|
130 | - * Shortcut for preparing a database result for display |
|
131 | - * @param EEM_Base $model |
|
132 | - * @param string $field_name |
|
133 | - * @param string $raw_db_value |
|
134 | - * @param boolean|string $pretty_schema true to display pretty, a string to use a specific "Schema", or false to NOT display pretty |
|
135 | - * @return string |
|
136 | - */ |
|
137 | - public static function prepare_value_from_db_for_display($model, $field_name, $raw_db_value, $pretty_schema = true) |
|
138 | - { |
|
139 | - $field_obj = $model->field_settings_for($field_name); |
|
140 | - $value_on_model_obj = $field_obj->prepare_for_set_from_db($raw_db_value); |
|
141 | - if ($field_obj instanceof EE_Datetime_Field) { |
|
142 | - $field_obj->set_date_format(EEH_Export::get_date_format_for_export($field_obj->get_date_format($pretty_schema)), $pretty_schema); |
|
143 | - $field_obj->set_time_format(EEH_Export::get_time_format_for_export($field_obj->get_time_format($pretty_schema)), $pretty_schema); |
|
144 | - } |
|
145 | - if ($pretty_schema === true) { |
|
146 | - return $field_obj->prepare_for_pretty_echoing($value_on_model_obj); |
|
147 | - } elseif (is_string($pretty_schema)) { |
|
148 | - return $field_obj->prepare_for_pretty_echoing($value_on_model_obj, $pretty_schema); |
|
149 | - } else { |
|
150 | - return $field_obj->prepare_for_get($value_on_model_obj); |
|
151 | - } |
|
152 | - } |
|
153 | - |
|
154 | - |
|
155 | - |
|
156 | - /** |
|
157 | - * Gets the date format to use in exports. filterable |
|
158 | - * @param string $current_format |
|
159 | - * @return string |
|
160 | - */ |
|
161 | - public static function get_date_format_for_export($current_format = null) |
|
162 | - { |
|
163 | - return apply_filters('FHEE__EE_CSV__get_date_format_for_csv__format', 'Y-m-d', $current_format); |
|
164 | - } |
|
165 | - |
|
166 | - |
|
167 | - |
|
168 | - /** |
|
169 | - * Gets the time format we want to use in exports. Filterable |
|
170 | - * @param string $current_format |
|
171 | - * @return string |
|
172 | - */ |
|
173 | - public static function get_time_format_for_export($current_format = null) |
|
174 | - { |
|
175 | - return apply_filters('FHEE__EE_CSV__get_time_format_for_csv__format', 'H:i:s', $current_format); |
|
176 | - } |
|
16 | + /** |
|
17 | + * Gets the 'normal' column named for fields |
|
18 | + * @param EE_Model_Field_Base $field |
|
19 | + * @return string |
|
20 | + * @throws EE_Error |
|
21 | + */ |
|
22 | + public static function get_column_name_for_field(EE_Model_Field_Base $field) |
|
23 | + { |
|
24 | + $column_name = wp_specialchars_decode($field->get_nicename(), ENT_QUOTES); |
|
25 | + if ( |
|
26 | + apply_filters( |
|
27 | + 'FHEE__EEH_Export__get_column_name_for_field__add_field_name', |
|
28 | + false, |
|
29 | + $column_name, |
|
30 | + $field |
|
31 | + ) |
|
32 | + ) { |
|
33 | + $column_name .= "[" |
|
34 | + . wp_specialchars_decode($field->get_name(), ENT_QUOTES) |
|
35 | + . "]"; |
|
36 | + } |
|
37 | + return $column_name; |
|
38 | + } |
|
39 | + |
|
40 | + /** |
|
41 | + * Writes $data to the csv file open in $filehandle. uses the array indices of $data for column headers |
|
42 | + * |
|
43 | + * @param string $filepath |
|
44 | + * @param array $data 2D array, first numerically-indexed, |
|
45 | + * and next-level-down preferably indexed by string |
|
46 | + * @param boolean $write_column_headers whether or not we should add the keys in the bottom-most array |
|
47 | + * as a row for headers in the CSV. |
|
48 | + * Eg, if $data looked like: |
|
49 | + * array( |
|
50 | + * 0=>array('EVT_ID'=>1,'EVT_name'=>'monkey'...), |
|
51 | + * 1=>array(...,...) |
|
52 | + * ) |
|
53 | + * |
|
54 | + * @return boolean if we successfully wrote to the CSV or not. If there's no $data, |
|
55 | + * we consider that a success (because we wrote everything there was...nothing) |
|
56 | + * @throws EE_Error |
|
57 | + */ |
|
58 | + public static function write_data_array_to_csv($filepath, $data, $write_column_headers = true) |
|
59 | + { |
|
60 | + |
|
61 | + $new_file_contents = ''; |
|
62 | + // determine if $data is actually a 2d array |
|
63 | + if ($data && is_array($data) && is_array(EEH_Array::get_one_item_from_array($data))) { |
|
64 | + // make sure top level is numerically indexed, |
|
65 | + |
|
66 | + if (EEH_Array::is_associative_array($data)) { |
|
67 | + throw new EE_Error(sprintf(esc_html__("top-level array must be numerically indexed. Does these look like numbers to you? %s", "event_espresso"), implode(",", array_keys($data)))); |
|
68 | + } |
|
69 | + $item_in_top_level_array = EEH_Array::get_one_item_from_array($data); |
|
70 | + // now, is the last item in the top-level array of $data an associative or numeric array? |
|
71 | + if ( |
|
72 | + $write_column_headers && |
|
73 | + EEH_Array::is_associative_array($item_in_top_level_array) |
|
74 | + ) { |
|
75 | + // its associative, so we want to output its keys as column headers |
|
76 | + $keys = array_keys($item_in_top_level_array); |
|
77 | + $new_file_contents .= EEH_Export::get_csv_row($keys); |
|
78 | + } |
|
79 | + // start writing data |
|
80 | + foreach ($data as $data_row) { |
|
81 | + $new_file_contents .= EEH_Export::get_csv_row($data_row); |
|
82 | + } |
|
83 | + return EEH_File::write_to_file($filepath, EEH_File::get_file_contents($filepath) . $new_file_contents); |
|
84 | + } else { |
|
85 | + // no data TO write... so we can assume that's a success |
|
86 | + return true; |
|
87 | + } |
|
88 | + } |
|
89 | + |
|
90 | + |
|
91 | + |
|
92 | + /** |
|
93 | + * |
|
94 | + * Writes a row to the csv file |
|
95 | + * @param array $row - individual row of csv data |
|
96 | + * @param string $delimiter - csv delimiter |
|
97 | + * @param string $enclosure - csv enclosure |
|
98 | + * @param bool $mysql_null - allows php NULL to be overridden with MySQl's insertable NULL value |
|
99 | + * @return string of text for teh csv file |
|
100 | + */ |
|
101 | + public static function get_csv_row(array $row, $delimiter = ',', $enclosure = '"', $mysql_null = false) |
|
102 | + { |
|
103 | + // Allow user to filter the csv delimiter and enclosure for other countries csv standards |
|
104 | + $delimiter = apply_filters('FHEE__EE_CSV__fputcsv2__delimiter', $delimiter); |
|
105 | + $enclosure = apply_filters('FHEE__EE_CSV__fputcsv2__enclosure', $enclosure); |
|
106 | + |
|
107 | + $delimiter_esc = preg_quote($delimiter, '/'); |
|
108 | + $enclosure_esc = preg_quote($enclosure, '/'); |
|
109 | + |
|
110 | + $output = array(); |
|
111 | + foreach ($row as $field_value) { |
|
112 | + if (is_object($field_value) || is_array($field_value)) { |
|
113 | + $field_value = serialize($field_value); |
|
114 | + } |
|
115 | + if ($field_value === null && $mysql_null) { |
|
116 | + $output[] = 'NULL'; |
|
117 | + continue; |
|
118 | + } |
|
119 | + |
|
120 | + $output[] = preg_match("/(?:${delimiter_esc}|${enclosure_esc}|\s)/", $field_value) ? |
|
121 | + ( $enclosure . str_replace($enclosure, $enclosure . $enclosure, $field_value) . $enclosure ) : $field_value; |
|
122 | + } |
|
123 | + |
|
124 | + return implode($delimiter, $output) . PHP_EOL; |
|
125 | + } |
|
126 | + |
|
127 | + |
|
128 | + |
|
129 | + /** |
|
130 | + * Shortcut for preparing a database result for display |
|
131 | + * @param EEM_Base $model |
|
132 | + * @param string $field_name |
|
133 | + * @param string $raw_db_value |
|
134 | + * @param boolean|string $pretty_schema true to display pretty, a string to use a specific "Schema", or false to NOT display pretty |
|
135 | + * @return string |
|
136 | + */ |
|
137 | + public static function prepare_value_from_db_for_display($model, $field_name, $raw_db_value, $pretty_schema = true) |
|
138 | + { |
|
139 | + $field_obj = $model->field_settings_for($field_name); |
|
140 | + $value_on_model_obj = $field_obj->prepare_for_set_from_db($raw_db_value); |
|
141 | + if ($field_obj instanceof EE_Datetime_Field) { |
|
142 | + $field_obj->set_date_format(EEH_Export::get_date_format_for_export($field_obj->get_date_format($pretty_schema)), $pretty_schema); |
|
143 | + $field_obj->set_time_format(EEH_Export::get_time_format_for_export($field_obj->get_time_format($pretty_schema)), $pretty_schema); |
|
144 | + } |
|
145 | + if ($pretty_schema === true) { |
|
146 | + return $field_obj->prepare_for_pretty_echoing($value_on_model_obj); |
|
147 | + } elseif (is_string($pretty_schema)) { |
|
148 | + return $field_obj->prepare_for_pretty_echoing($value_on_model_obj, $pretty_schema); |
|
149 | + } else { |
|
150 | + return $field_obj->prepare_for_get($value_on_model_obj); |
|
151 | + } |
|
152 | + } |
|
153 | + |
|
154 | + |
|
155 | + |
|
156 | + /** |
|
157 | + * Gets the date format to use in exports. filterable |
|
158 | + * @param string $current_format |
|
159 | + * @return string |
|
160 | + */ |
|
161 | + public static function get_date_format_for_export($current_format = null) |
|
162 | + { |
|
163 | + return apply_filters('FHEE__EE_CSV__get_date_format_for_csv__format', 'Y-m-d', $current_format); |
|
164 | + } |
|
165 | + |
|
166 | + |
|
167 | + |
|
168 | + /** |
|
169 | + * Gets the time format we want to use in exports. Filterable |
|
170 | + * @param string $current_format |
|
171 | + * @return string |
|
172 | + */ |
|
173 | + public static function get_time_format_for_export($current_format = null) |
|
174 | + { |
|
175 | + return apply_filters('FHEE__EE_CSV__get_time_format_for_csv__format', 'H:i:s', $current_format); |
|
176 | + } |
|
177 | 177 | } |