PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 2.05.09
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v2.05.09
6.35 6.34 6.33.1 6.33 6.32.1 6.32 6.31 6.25 6.25.1 6.26 6.26.1 6.27 6.28 6.29 6.3 6.3.1 6.3.2 6.30 6.4 6.4.1 6.4.2 6.5 6.5.1 6.5.2 6.5.3 All 141 releases
formidable / classes / models / FrmEntryShortcodeFormatter.php

FrmEntryShortcodeFormatter.php in Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More 2.05.09, at classes/models/FrmEntryShortcodeFormatter.php

313 lines 5.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * @since 2.04
5 */
6 class FrmEntryShortcodeFormatter {
7
8 /**
9 * @var int
10 * @since 2.04
11 */
12 protected $form_id = 0;
13
14 /**
15 * @var array
16 * @since 2.04
17 */
18 protected $skip_fields = array( 'captcha', 'html' );
19
20 /**
21 * @var array
22 * @since 2.04
23 */
24 protected $fields = array();
25
26 /**
27 * @var bool
28 * @since 2.05
29 */
30 protected $is_plain_text = false;
31
32 /**
33 * @var string
34 * @since 2.04
35 */
36 protected $format = 'text';
37
38 /**
39 * @var FrmTableHTMLGenerator
40 * @since 2.04
41 */
42 protected $table_generator = null;
43
44 /**
45 * @var array
46 * @since 2.04
47 */
48 protected $array_content = array();
49
50 /**
51 * FrmEntryShortcodeFormatter constructor
52 *
53 * @param int|string $form_id
54 * @param array $atts
55 */
56 public function __construct( $form_id, $atts ) {
57 if ( ! $form_id ) {
58 return;
59 }
60
61 $this->init_form_id( $form_id );
62 $this->init_fields();
63
64 if ( empty( $this->fields ) ) {
65 return;
66 }
67
68 $this->init_plain_text( $atts );
69 $this->init_format( $atts );
70
71 if ( $this->is_table_format() ) {
72 $this->init_table_generator();
73 }
74 }
75
76 /**
77 * Initialize the form_id property
78 *
79 * @since 2.04
80 * @param $form_id
81 */
82 protected function init_form_id( $form_id ) {
83 $this->form_id = (int) $form_id;
84 }
85
86 /**
87 * Initialize the fields property
88 *
89 * @since 2.04
90 */
91 protected function init_fields() {
92 $this->fields = FrmField::get_all_for_form( $this->form_id, '', 'exclude', 'exclude' );
93 }
94
95 /**
96 * Initialize the is_plain_text property
97 *
98 * @since 2.05
99 *
100 * @param array $atts
101 */
102 protected function init_plain_text( $atts ) {
103 if ( isset( $atts['plain_text'] ) && $atts['plain_text'] ) {
104 $this->is_plain_text = true;
105 }
106 }
107
108 /**
109 * Initialize the format property
110 *
111 * @since 2.04
112 *
113 * @param array $atts
114 */
115 protected function init_format( $atts ) {
116 if ( isset( $atts['format'] ) && is_string( $atts['format'] ) && $atts['format'] !== '' ) {
117 $this->format = $atts['format'];
118 } else {
119 $this->format = 'text';
120 }
121 }
122
123 /**
124 * Initialize the table_generator property
125 *
126 * @since 2.04
127 */
128 protected function init_table_generator() {
129 $this->table_generator = new FrmTableHTMLGenerator( 'shortcode' );
130 }
131
132 /**
133 * Return the default HTML for an entry
134 *
135 * @since 2.04
136 */
137 public function content() {
138 if ( ! $this->form_id || empty( $this->fields ) ) {
139 return '';
140 }
141
142 if ( $this->format == 'array' ) {
143 $content = $this->get_array();
144 } else if ( $this->is_plain_text_format() ) {
145 $content = $this->get_plain_text();
146 } else {
147 $content = $this->get_table();
148 }
149
150 return $content;
151 }
152
153 /**
154 * Return the default HTML array
155 *
156 * @since 2.04
157 */
158 protected function get_array() {
159 foreach ( $this->fields as $field ) {
160 $this->add_field_array( $field );
161 }
162
163 return $this->array_content;
164 }
165
166 /**
167 * Return the default plain text for an email message
168 *
169 * @since 2.04
170 */
171 protected function get_plain_text() {
172 return $this->generate_content_for_all_fields();
173 }
174
175 /**
176 * Return the default HTML for an email message
177 *
178 * @since 2.04
179 */
180 protected function get_table() {
181 $content = $this->table_generator->generate_table_header();
182 $content .= $this->generate_content_for_all_fields();
183 $content .= $this->table_generator->generate_table_footer();
184
185 return $content;
186 }
187
188 /**
189 * Generate the content for all fields
190 *
191 * @since 2.05
192 *
193 * @return string
194 */
195 protected function generate_content_for_all_fields() {
196 $content = '';
197
198 foreach ( $this->fields as $field ) {
199 $content .= $this->generate_field_content( $field );
200 }
201
202 return $content;
203 }
204
205 /**
206 * Generate a field's HTML or plain text shortcodes
207 *
208 * @since 2.04
209 *
210 * @param stdClass $field
211 *
212 * @return string
213 */
214 protected function generate_field_content( $field ) {
215 if ( in_array( $field->type, $this->skip_fields ) ) {
216 return '';
217 }
218
219 $row = $this->generate_two_cell_shortcode_row( $field );
220
221 return $row;
222 }
223
224 /**
225 * Generate a two cell row of shortcodes for an HTML or plain text table
226 *
227 * @since 2.04
228 *
229 * @param stdClass $field
230 * @param mixed $value
231 *
232 * @return string
233 */
234 protected function generate_two_cell_shortcode_row( $field, $value = null ) {
235 $row = '[if ' . $field->id . ']';
236
237 $label = '[' . $field->id . ' show=field_label]';
238
239 if ( $value === null ) {
240 $value = '[' . $field->id . ']';
241 }
242
243 if ( $this->is_plain_text_format() ) {
244 $row .= $label . ': ' . $value . "\r\n";
245 } else {
246 $row .= $this->table_generator->generate_two_cell_table_row( $label, $value );
247 }
248
249 $row .= '[/if ' . $field->id . ']';
250
251 if ( $this->is_table_format() ) {
252 $row .= "\r\n";
253 }
254
255 return $row;
256 }
257
258 /**
259 * Generate a field's array for the default HTML array
260 *
261 * @since 2.04
262 *
263 * @param stdClass $field
264 */
265 protected function add_field_array( $field ) {
266 if ( in_array( $field->type, $this->skip_fields ) ) {
267 return;
268 }
269
270 $this->add_single_field_array( $field, $field->id );
271 }
272
273 /**
274 * Generate a single field's array
275 *
276 * @since 2.04
277 *
278 * @param stdClass $field
279 * @param string $value
280 */
281 protected function add_single_field_array( $field, $value ) {
282 $array = array(
283 'label' => '[' . $field->id . ' show=field_label]',
284 'val' => '[' . $value . ']',
285 'type' => $field->type,
286 );
287
288 $this->array_content[ $field->id ] = apply_filters( 'frm_field_shortcodes_for_default_html_email', $array, $field );
289 }
290
291 /**
292 * Check if the format is default plain text
293 *
294 * @since 2.05
295 *
296 * @return bool
297 */
298 protected function is_plain_text_format() {
299 return ( $this->format === 'text' && $this->is_plain_text === true );
300 }
301
302 /**
303 * Check if the format is default HTML
304 *
305 * @since 2.05
306 *
307 * @return bool
308 */
309 protected function is_table_format() {
310 return ( $this->format === 'text' && $this->is_plain_text === false );
311 }
312 }
313