1
|
|
|
<?php |
2
|
|
|
/** |
3
|
|
|
* GravityView template tags API |
4
|
|
|
* |
5
|
|
|
* @package GravityView |
6
|
|
|
* @license GPL2+ |
7
|
|
|
* @author Katz Web Services, Inc. |
8
|
|
|
* @link http://gravityview.co |
9
|
|
|
* @copyright Copyright 2014, Katz Web Services, Inc. |
10
|
|
|
* |
11
|
|
|
* @since 1.0.0 |
12
|
|
|
*/ |
13
|
|
|
|
14
|
|
|
class GravityView_API { |
15
|
|
|
|
16
|
|
|
/** |
17
|
|
|
* Fetch Field Label |
18
|
|
|
* |
19
|
|
|
* @deprecated Use \GV\Field::get_label() |
20
|
|
|
* |
21
|
|
|
* @access public |
22
|
|
|
* @static |
23
|
|
|
* @param array $field GravityView field array |
24
|
|
|
* @param array $entry Gravity Forms entry array |
25
|
|
|
* @param boolean $force_show_label Whether to always show the label, regardless of field settings |
26
|
|
|
* @return string |
27
|
|
|
*/ |
28
|
3 |
|
public static function field_label( $field, $entry = array(), $force_show_label = false ) { |
29
|
|
|
|
30
|
3 |
|
$gravityview_view = GravityView_View::getInstance(); |
31
|
|
|
|
32
|
3 |
|
$form = $gravityview_view->getForm(); |
33
|
|
|
|
34
|
3 |
|
if ( defined( 'DOING_GRAVITYVIEW_TESTS' ) && ! empty( $GLOBALS['GravityView_API_field_label_override'] ) ) { |
|
|
|
|
35
|
|
|
/** Allow to fall through for back compatibility testing purposes. */ |
36
|
|
|
} else { |
37
|
3 |
|
return \GV\Mocks\GravityView_API_field_label( $form, $field, $entry, $force_show_label ); |
38
|
|
|
} |
39
|
|
|
|
40
|
1 |
|
$label = ''; |
41
|
|
|
|
42
|
1 |
|
if( !empty( $field['show_label'] ) || $force_show_label ) { |
|
|
|
|
43
|
|
|
|
44
|
1 |
|
$label = $field['label']; |
45
|
|
|
|
46
|
|
|
// Support Gravity Forms 1.9+ |
47
|
1 |
|
if( class_exists( 'GF_Field' ) ) { |
48
|
|
|
|
49
|
1 |
|
$field_object = RGFormsModel::get_field( $form, $field['id'] ); |
50
|
|
|
|
51
|
1 |
|
if( $field_object ) { |
52
|
|
|
|
53
|
1 |
|
$input = GFFormsModel::get_input( $field_object, $field['id'] ); |
54
|
|
|
|
55
|
|
|
// This is a complex field, with labels on a per-input basis |
56
|
1 |
|
if( $input ) { |
57
|
|
|
|
58
|
|
|
// Does the input have a custom label on a per-input basis? Otherwise, default label. |
59
|
1 |
|
$label = ! empty( $input['customLabel'] ) ? $input['customLabel'] : $input['label']; |
60
|
|
|
|
61
|
|
|
} else { |
62
|
|
|
|
63
|
|
|
// This is a field with one label |
64
|
1 |
|
$label = $field_object->get_field_label( true, $field['label'] ); |
65
|
|
|
|
66
|
|
|
} |
67
|
|
|
|
68
|
|
|
} |
69
|
|
|
|
70
|
|
|
} |
71
|
|
|
|
72
|
|
|
// Use Gravity Forms label by default, but if a custom label is defined in GV, use it. |
73
|
1 |
|
if ( !empty( $field['custom_label'] ) ) { |
|
|
|
|
74
|
|
|
|
75
|
1 |
|
$label = self::replace_variables( $field['custom_label'], $form, $entry ); |
76
|
|
|
|
77
|
|
|
} |
78
|
|
|
|
79
|
|
|
/** |
80
|
|
|
* @filter `gravityview_render_after_label` Append content to a field label |
81
|
|
|
* @param[in,out] string $appended_content Content you can add after a label. Empty by default. |
82
|
|
|
* @param[in] array $field GravityView field array |
83
|
|
|
*/ |
84
|
1 |
|
$label .= apply_filters( 'gravityview_render_after_label', '', $field ); |
85
|
|
|
|
86
|
|
|
} // End $field['show_label'] |
|
|
|
|
87
|
|
|
|
88
|
|
|
/** |
89
|
|
|
* @filter `gravityview/template/field_label` Modify field label output |
90
|
|
|
* @since 1.7 |
91
|
|
|
* @param[in,out] string $label Field label HTML |
92
|
|
|
* @param[in] array $field GravityView field array |
93
|
|
|
* @param[in] array $form Gravity Forms form array |
94
|
|
|
* @param[in] array $entry Gravity Forms entry array |
95
|
|
|
* |
96
|
|
|
* @deprecated Use the context-aware version `gravityview/template/field/label` |
97
|
|
|
*/ |
98
|
1 |
|
$label = apply_filters( 'gravityview/template/field_label', $label, $field, $form, $entry ); |
99
|
|
|
|
100
|
1 |
|
return $label; |
101
|
|
|
} |
102
|
|
|
|
103
|
|
|
/** |
104
|
|
|
* Alias for GravityView_Merge_Tags::replace_variables() |
105
|
|
|
* |
106
|
|
|
* @see GravityView_Merge_Tags::replace_variables() Moved in 1.8.4 |
107
|
|
|
* @since 1.22.4 - Added $nl2br, $format, $aux_data args |
108
|
|
|
* |
109
|
|
|
* @param string $text Text to replace variables in |
110
|
|
|
* @param array $form GF Form array |
111
|
|
|
* @param array $entry GF Entry array |
112
|
|
|
* @param bool $url_encode Pass return value through `url_encode()` |
113
|
|
|
* @param bool $esc_html Pass return value through `esc_html()` |
114
|
|
|
* @param bool $nl2br Convert newlines to <br> HTML tags |
115
|
|
|
* @param string $format The format requested for the location the merge is being used. Possible values: html, text or url. |
116
|
|
|
* @param array $aux_data Additional data to be used to replace merge tags {@see https://www.gravityhelp.com/documentation/article/gform_merge_tag_data/} |
117
|
|
|
* @return string Text with variables maybe replaced |
118
|
|
|
*/ |
119
|
21 |
|
public static function replace_variables( $text, $form = array(), $entry = array(), $url_encode = false, $esc_html = true, $nl2br = true, $format = 'html', $aux_data = array() ) { |
120
|
21 |
|
return GravityView_Merge_Tags::replace_variables( $text, $form, $entry, $url_encode, $esc_html, $nl2br, $format, $aux_data ); |
121
|
|
|
} |
122
|
|
|
|
123
|
|
|
/** |
124
|
|
|
* Get column width from the field setting |
125
|
|
|
* |
126
|
|
|
* @since 1.9 |
127
|
|
|
* |
128
|
|
|
* @param array $field Array of settings for the field |
129
|
|
|
* @param string $format Format for width. "%" (default) will return |
130
|
|
|
* |
131
|
|
|
* @return string|null If not empty, string in $format format. Otherwise, null. |
132
|
|
|
*/ |
133
|
19 |
|
public static function field_width( $field, $format = '%d%%' ) { |
134
|
|
|
|
135
|
19 |
|
$width = NULL; |
|
|
|
|
136
|
|
|
|
137
|
19 |
|
if( !empty( $field['width'] ) ) { |
|
|
|
|
138
|
1 |
|
$width = absint( $field['width'] ); |
139
|
|
|
|
140
|
|
|
// If using percentages, limit to 100% |
141
|
1 |
|
if( '%d%%' === $format && $width > 100 ) { |
142
|
1 |
|
$width = 100; |
143
|
|
|
} |
144
|
|
|
|
145
|
1 |
|
$width = sprintf( $format, $width ); |
146
|
|
|
} |
147
|
|
|
|
148
|
19 |
|
return $width; |
149
|
|
|
} |
150
|
|
|
|
151
|
|
|
/** |
152
|
|
|
* Fetch Field class |
153
|
|
|
* |
154
|
|
|
* @access public |
155
|
|
|
* @static |
156
|
|
|
* @param mixed $field |
157
|
|
|
* @return string |
158
|
|
|
*/ |
159
|
20 |
|
public static function field_class( $field, $form = NULL, $entry = NULL ) { |
|
|
|
|
160
|
20 |
|
$classes = array(); |
161
|
|
|
|
162
|
20 |
|
if( !empty( $field['custom_class'] ) ) { |
|
|
|
|
163
|
|
|
|
164
|
2 |
|
$custom_class = $field['custom_class']; |
165
|
|
|
|
166
|
2 |
|
if( !empty( $entry ) ) { |
|
|
|
|
167
|
|
|
|
168
|
|
|
// We want the merge tag to be formatted as a class. The merge tag may be |
169
|
|
|
// replaced by a multiple-word value that should be output as a single class. |
170
|
|
|
// "Office Manager" will be formatted as `.OfficeManager`, not `.Office` and `.Manager` |
|
|
|
|
171
|
2 |
|
add_filter('gform_merge_tag_filter', 'sanitize_html_class'); |
|
|
|
|
172
|
|
|
|
173
|
2 |
|
$custom_class = self::replace_variables( $custom_class, $form, $entry); |
|
|
|
|
174
|
|
|
|
175
|
|
|
// And then we want life to return to normal |
176
|
2 |
|
remove_filter('gform_merge_tag_filter', 'sanitize_html_class'); |
|
|
|
|
177
|
|
|
} |
178
|
|
|
|
179
|
|
|
// And now we want the spaces to be handled nicely. |
180
|
2 |
|
$classes[] = gravityview_sanitize_html_class( $custom_class ); |
181
|
|
|
|
182
|
|
|
} |
183
|
|
|
|
184
|
20 |
|
if(!empty($field['id'])) { |
|
|
|
|
185
|
20 |
|
if( !empty( $form ) && !empty( $form['id'] ) ) { |
|
|
|
|
186
|
20 |
|
$form_id = '-'.$form['id']; |
187
|
|
|
} else { |
188
|
|
|
// @deprecated path. Form should always be given. |
189
|
|
|
gravityview()->log->warning( 'GravityView_View::getInstance() legacy API called' ); |
190
|
|
|
$gravityview_view = GravityView_View::getInstance(); |
191
|
|
|
$form_id = $gravityview_view->getFormId() ? '-'. $gravityview_view->getFormId() : ''; |
192
|
|
|
} |
193
|
|
|
|
194
|
20 |
|
$classes[] = 'gv-field'.$form_id.'-'.$field['id']; |
195
|
|
|
} |
196
|
|
|
|
197
|
20 |
|
return esc_attr(implode(' ', $classes)); |
|
|
|
|
198
|
|
|
} |
199
|
|
|
|
200
|
|
|
/** |
201
|
|
|
* Fetch Field HTML ID |
202
|
|
|
* |
203
|
|
|
* @since 1.11 |
204
|
|
|
* |
205
|
|
|
* @access public |
206
|
|
|
* @static |
207
|
|
|
* @param array $field GravityView field array passed to gravityview_field_output() |
208
|
|
|
* @param array $form Gravity Forms form array, if set. |
209
|
|
|
* @param array $entry Gravity Forms entry array |
210
|
|
|
* @return string Sanitized unique HTML `id` attribute for the field |
211
|
|
|
*/ |
212
|
18 |
|
public static function field_html_attr_id( $field, $form = array(), $entry = array() ) { |
|
|
|
|
213
|
18 |
|
$id = $field['id']; |
214
|
|
|
|
215
|
18 |
|
if ( ! empty( $id ) ) { |
216
|
18 |
|
if ( ! empty( $form ) && ! empty( $form['id'] ) ) { |
217
|
18 |
|
$form_id = '-' . $form['id']; |
218
|
|
|
} else { |
219
|
|
|
// @deprecated path. Form should always be given. |
220
|
|
|
gravityview()->log->warning( 'GravityView_View::getInstance() legacy API called' ); |
221
|
|
|
$gravityview_view = GravityView_View::getInstance(); |
222
|
|
|
$form_id = $gravityview_view->getFormId() ? '-' . $gravityview_view->getFormId() : ''; |
223
|
|
|
} |
224
|
|
|
|
225
|
18 |
|
$id = 'gv-field' . $form_id . '-' . $field['id']; |
226
|
|
|
} |
227
|
|
|
|
228
|
18 |
|
return esc_attr( $id ); |
229
|
|
|
} |
230
|
|
|
|
231
|
|
|
|
232
|
|
|
/** |
233
|
|
|
* Given an entry and a form field id, calculate the entry value for that field. |
234
|
|
|
* |
235
|
|
|
* @deprecated Use \GV\Field_Template::render() or the more low-level \GV\Field::get_value() |
236
|
|
|
* |
237
|
|
|
* @access public |
238
|
|
|
* @param array $entry |
239
|
|
|
* @param array $field |
|
|
|
|
240
|
|
|
* @return null|string |
241
|
|
|
*/ |
242
|
3 |
|
public static function field_value( $entry, $field_settings, $format = 'html' ) { |
243
|
3 |
|
gravityview()->log->notice( '\GravityView_API::field_value is deprecated. Use \GV\Field_Template::render() or \GV\Field::get_value()' ); |
244
|
3 |
|
return \GV\Mocks\GravityView_API_field_value( $entry, $field_settings, $format ); |
|
|
|
|
245
|
|
|
} |
246
|
|
|
|
247
|
|
|
/** |
248
|
|
|
* Generate an anchor tag that links to an entry. |
249
|
|
|
* |
250
|
|
|
* @since 1.6 |
251
|
|
|
* @see GVCommon::get_link_html() |
252
|
|
|
* |
253
|
|
|
* @param string $anchor_text The text or HTML inside the link |
254
|
|
|
* @param array $entry Gravity Forms entry array |
255
|
|
|
* @param array|string $passed_tag_atts Attributes to be added to the anchor tag, such as `title` or `rel`. |
256
|
|
|
* @param array $field_settings Array of field settings. Optional, but passed to the `gravityview_field_entry_link` filter |
257
|
|
|
* |
258
|
|
|
* @since 2.0 |
259
|
|
|
* @param int $base_id The post or the view that this entry is linked from. |
260
|
|
|
* |
261
|
|
|
* @return string|null Returns HTML for an anchor link. Null if $entry isn't defined or is missing an ID. |
262
|
|
|
*/ |
263
|
3 |
|
public static function entry_link_html( $entry = array(), $anchor_text = '', $passed_tag_atts = array(), $field_settings = array(), $base_id = null ) { |
264
|
|
|
|
265
|
3 |
|
if ( empty( $entry ) || ! is_array( $entry ) || ! isset( $entry['id'] ) ) { |
266
|
1 |
|
gravityview()->log->debug( 'Entry not defined; returning null', array( 'data' => $entry ) ); |
267
|
1 |
|
return NULL; |
|
|
|
|
268
|
|
|
} |
269
|
|
|
|
270
|
3 |
|
$href = self::entry_link( $entry, $base_id ); |
271
|
|
|
|
272
|
3 |
|
if( '' === $href ) { |
273
|
|
|
return NULL; |
|
|
|
|
274
|
|
|
} |
275
|
|
|
|
276
|
3 |
|
$link = gravityview_get_link( $href, $anchor_text, $passed_tag_atts ); |
277
|
|
|
|
278
|
|
|
/** |
279
|
|
|
* @filter `gravityview_field_entry_link` Modify the link HTML |
280
|
|
|
* @param string $link HTML output of the link |
281
|
|
|
* @param string $href URL of the link |
282
|
|
|
* @param array $entry The GF entry array |
283
|
|
|
* @param array $field_settings Settings for the particular GV field |
284
|
|
|
*/ |
285
|
3 |
|
$output = apply_filters( 'gravityview_field_entry_link', $link, $href, $entry, $field_settings ); |
286
|
|
|
|
287
|
3 |
|
return $output; |
288
|
|
|
} |
289
|
|
|
|
290
|
|
|
/** |
291
|
|
|
* Get the "No Results" text depending on whether there were results. |
292
|
|
|
* @param boolean $wpautop Apply wpautop() to the output? |
293
|
|
|
* |
294
|
|
|
* @since 2.0 |
295
|
|
|
* @param \GV\Template_Context $context The context |
296
|
|
|
* |
297
|
|
|
* @return string HTML of "no results" text |
298
|
|
|
*/ |
299
|
7 |
|
public static function no_results( $wpautop = true, $context = null ) { |
300
|
7 |
|
$is_search = false; |
301
|
|
|
|
302
|
7 |
|
if ( $context instanceof \GV\Template_Context ) { |
303
|
5 |
|
if ( $context->request->is_search() ) { |
304
|
5 |
|
$search = true; |
305
|
|
|
} |
306
|
|
|
} else { |
307
|
2 |
|
$gravityview_view = GravityView_View::getInstance(); |
308
|
|
|
|
309
|
2 |
|
if( $gravityview_view && ( $gravityview_view->curr_start || $gravityview_view->curr_end || $gravityview_view->curr_search ) ) { |
|
|
|
|
310
|
1 |
|
$is_search = true; |
311
|
|
|
} |
312
|
|
|
} |
313
|
|
|
|
314
|
7 |
|
if ( $is_search ) { |
315
|
1 |
|
$output = __( 'This search returned no results.', 'gravityview' ); |
316
|
|
|
} else { |
317
|
7 |
|
$output = __( 'No entries match your request.', 'gravityview' ); |
318
|
|
|
} |
319
|
|
|
|
320
|
|
|
/** |
321
|
|
|
* @filter `gravitview_no_entries_text` Modify the text displayed when there are no entries. |
322
|
|
|
* @param string $output The existing "No Entries" text |
323
|
|
|
* @param boolean $is_search Is the current page a search result, or just a multiple entries screen? |
324
|
|
|
* @return string The modified text. |
325
|
|
|
* @deprecated Use `gravityview/template/text/no_entries` |
326
|
|
|
*/ |
327
|
7 |
|
$output = apply_filters( 'gravitview_no_entries_text', $output, $is_search ); |
328
|
|
|
|
329
|
|
|
/** |
330
|
|
|
* @filter `gravityview/template/text/no_entries` Modify the text displayed when there are no entries. |
331
|
|
|
* @since 2.0 |
332
|
|
|
* @param string $output The existing "No Entries" text |
333
|
|
|
* @param boolean $is_search Is the current page a search result, or just a multiple entries screen? |
334
|
|
|
* @param \GV\Template_Context $context The context. |
335
|
|
|
* @return string The modified text. |
336
|
|
|
*/ |
337
|
7 |
|
$output = apply_filters( 'gravityview/template/text/no_entries', $output, $is_search, $context ); |
338
|
|
|
|
339
|
7 |
|
return $wpautop ? wpautop( $output ) : $output; |
340
|
|
|
} |
341
|
|
|
|
342
|
|
|
/** |
343
|
|
|
* Generate a URL to the Directory context |
344
|
|
|
* |
345
|
|
|
* Uses `wp_cache_get` and `wp_cache_get` (since 1.3) to speed up repeated requests to get permalink, which improves load time. Since we may be doing this hundreds of times per request, it adds up! |
346
|
|
|
* |
347
|
|
|
* @param int $post_id Post ID |
348
|
|
|
* @param boolean $add_query_args Add pagination and sorting arguments |
349
|
|
|
* |
350
|
|
|
* @since 2.0 |
351
|
|
|
* @param \GV\Template_Context $context The context this is being used in. |
352
|
|
|
* |
353
|
|
|
* @return string Permalink to multiple entries view |
354
|
|
|
*/ |
355
|
21 |
|
public static function directory_link( $post_id = NULL, $add_query_args = true, $context = null ) { |
|
|
|
|
356
|
21 |
|
global $post; |
|
|
|
|
357
|
|
|
|
358
|
21 |
|
if ( empty( $post_id ) ) { |
359
|
|
|
// DataTables passes the Post ID |
360
|
13 |
|
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { |
361
|
|
|
$post_id = \GV\Utils::_POST( 'post_id', false ); |
362
|
|
|
} else { |
363
|
13 |
|
if ( $context instanceof \GV\Template_Context ) { |
364
|
|
|
// Shortcodes, embeds |
365
|
10 |
|
if ( is_a( $post, 'WP_Post' ) ) { |
366
|
1 |
|
$post_id = $post->ID; |
367
|
|
|
|
368
|
|
|
// Actual views |
369
|
|
|
} else { |
370
|
10 |
|
$post_id = $context->view ? $context->view->ID : false; |
|
|
|
|
371
|
|
|
} |
372
|
|
|
} else { |
373
|
|
|
/** @deprecated path of execution */ |
374
|
3 |
|
$gravityview_view = GravityView_View::getInstance(); |
375
|
|
|
|
376
|
|
|
// The Post ID has been passed via the shortcode |
377
|
3 |
|
if ( ! empty( $gravityview_view ) && $gravityview_view->getPostId() ) { |
|
|
|
|
378
|
1 |
|
$post_id = $gravityview_view->getPostId(); |
379
|
|
|
} else { |
380
|
|
|
// This is a GravityView post type |
381
|
2 |
|
if ( GravityView_frontend::getInstance()->isGravityviewPostType() ) { |
382
|
|
|
$post_id = isset( $gravityview_view ) ? $gravityview_view->getViewId() : $post->ID; |
383
|
|
|
} else { |
384
|
|
|
// This is an embedded GravityView; use the embedded post's ID as the base. |
385
|
2 |
|
if ( GravityView_frontend::getInstance()->isPostHasShortcode() && is_a( $post, 'WP_Post' ) ) { |
386
|
|
|
$post_id = $post->ID; |
387
|
2 |
|
} elseif ( $gravityview_view->getViewId() ) { |
388
|
|
|
// The GravityView has been embedded in a widget or in a template, and |
389
|
|
|
// is not in the current content. Thus, we defer to the View's own ID. |
390
|
1 |
|
$post_id = $gravityview_view->getViewId(); |
391
|
|
|
} |
392
|
|
|
} |
393
|
|
|
} |
394
|
|
|
} |
395
|
|
|
} |
396
|
|
|
} |
397
|
|
|
|
398
|
|
|
// No post ID, get outta here. |
399
|
21 |
|
if ( empty( $post_id ) ) { |
400
|
1 |
|
return null; |
401
|
|
|
} |
402
|
|
|
|
403
|
|
|
// If we've saved the permalink in memory, use it |
404
|
|
|
// @since 1.3 |
405
|
20 |
|
$link = wp_cache_get( 'gv_directory_link_'.$post_id ); |
406
|
|
|
|
407
|
20 |
|
if ( (int) $post_id === (int) get_option( 'page_on_front' ) ) { |
408
|
|
|
$link = home_url(); |
409
|
|
|
} |
410
|
|
|
|
411
|
20 |
|
if ( empty( $link ) ) { |
412
|
20 |
|
$link = get_permalink( $post_id ); |
413
|
|
|
|
414
|
|
|
// If not yet saved, cache the permalink. |
415
|
|
|
// @since 1.3 |
416
|
20 |
|
wp_cache_set( 'gv_directory_link_'.$post_id, $link ); |
417
|
|
|
} |
418
|
|
|
|
419
|
|
|
// Deal with returning to proper pagination for embedded views |
420
|
20 |
|
if ( $link && $add_query_args ) { |
421
|
|
|
|
422
|
16 |
|
$args = array(); |
423
|
|
|
|
424
|
16 |
|
if( $pagenum = \GV\Utils::_GET( 'pagenum' ) ) { |
425
|
1 |
|
$args['pagenum'] = intval( $pagenum ); |
426
|
|
|
} |
427
|
|
|
|
428
|
16 |
|
if( $sort = \GV\Utils::_GET( 'sort' ) ) { |
429
|
|
|
$args['sort'] = $sort; |
430
|
|
|
$args['dir'] = \GV\Utils::_GET( 'dir' ); |
431
|
|
|
} |
432
|
|
|
|
433
|
16 |
|
$link = add_query_arg( $args, $link ); |
434
|
|
|
} |
435
|
|
|
|
436
|
|
|
/** |
437
|
|
|
* @filter `gravityview_directory_link` Modify the URL to the View "directory" context |
438
|
|
|
* @since 1.19.4 |
439
|
|
|
* @param string $link URL to the View's "directory" context (Multiple Entries screen) |
440
|
|
|
* @param int $post_id ID of the post to link to. If the View is embedded, it is the post or page ID |
441
|
|
|
*/ |
442
|
20 |
|
$link = apply_filters( 'gravityview_directory_link', $link, $post_id ); |
443
|
|
|
|
444
|
|
|
/** |
445
|
|
|
* @filter `gravityview/view/links/directory` Modify the URL to the View "directory" context |
446
|
|
|
* @since 2.0 |
447
|
|
|
* @param string $link URL to the View's "directory" context (Multiple Entries screen) |
448
|
|
|
* @param \GV\Template_Context $context |
449
|
|
|
*/ |
450
|
20 |
|
return apply_filters( 'gravityview/view/links/directory', $link, $context ); |
451
|
|
|
} |
452
|
|
|
|
453
|
|
|
/** |
454
|
|
|
* Calculate an *unique* hash for an entry based on the entry ID |
455
|
|
|
* |
456
|
|
|
* This allows you to be more discrete as to the number of the entry - if you don't want users to know that you have made a certain number of sales, for example, or that their entry in the giveaway is entry #3. |
457
|
|
|
* |
458
|
|
|
* The hashed value MUST be unique, otherwise multiple entries will share the same URL, which leads to obvious problems. |
459
|
|
|
* |
460
|
|
|
* @param int|string $id Entry ID to generate the hash for. |
461
|
|
|
* @param array $entry Entry data passed to provide additional information when generating the hash. Optional - don't rely on it being available. |
462
|
|
|
* @return string Hashed unique value for entry |
463
|
|
|
*/ |
464
|
2 |
|
private static function get_custom_entry_slug( $id, $entry = array() ) { |
465
|
|
|
|
466
|
|
|
// Generate an unique hash to use as the default value |
467
|
2 |
|
$slug = substr( wp_hash( $id, 'gravityview'.$id ), 0, 8 ); |
468
|
|
|
|
469
|
|
|
/** |
470
|
|
|
* @filter `gravityview_entry_slug` Modify the unique hash ID generated, if you want to improve usability or change the format. This will allow for custom URLs, such as `{entryid}-{first-name}` or even, if unique, `{first-name}-{last-name}` |
471
|
|
|
* @param string $hash Existing hash generated by GravityView |
472
|
|
|
* @param string $id The entry ID |
473
|
|
|
* @param array $entry Entry data array. May be empty. |
474
|
|
|
*/ |
475
|
2 |
|
$slug = apply_filters( 'gravityview_entry_slug', $slug, $id, $entry ); |
476
|
|
|
|
477
|
|
|
// Make sure we have something - use the original ID as backup. |
478
|
2 |
|
if( empty( $slug ) ) { |
479
|
|
|
$slug = $id; |
480
|
|
|
} |
481
|
|
|
|
482
|
2 |
|
return sanitize_title( $slug ); |
483
|
|
|
} |
484
|
|
|
|
485
|
|
|
/** |
486
|
|
|
* Get the entry slug for the entry. By default, it is the entry ID. |
487
|
|
|
* |
488
|
|
|
* |
489
|
|
|
* @see gravityview_get_entry() |
490
|
|
|
* @uses GravityView_API::get_custom_entry_slug() If using custom slug, gets the custom slug value |
491
|
|
|
* @since 1.4 |
492
|
|
|
* @param int|string $id_or_string ID of the entry, or custom slug string |
493
|
|
|
* @param array $entry Gravity Forms Entry array, optional. Used only to provide data to customize the `gravityview_entry_slug` filter |
494
|
|
|
* @return string Unique slug ID, passed through `sanitize_title()` |
495
|
|
|
*/ |
496
|
61 |
|
public static function get_entry_slug( $id_or_string, $entry = array() ) { |
497
|
|
|
|
498
|
|
|
/** |
499
|
|
|
* Default: use the entry ID as the unique identifier |
500
|
|
|
*/ |
501
|
61 |
|
$slug = $id_or_string; |
502
|
|
|
|
503
|
|
|
/** |
504
|
|
|
* @filter `gravityview_custom_entry_slug` Whether to enable and use custom entry slugs. |
505
|
|
|
* @param boolean True: Allow for slugs based on entry values. False: always use entry IDs (default) |
506
|
|
|
*/ |
507
|
61 |
|
$custom = apply_filters('gravityview_custom_entry_slug', false ); |
|
|
|
|
508
|
|
|
|
509
|
|
|
// If we're using custom slug... |
510
|
61 |
|
if ( $custom ) { |
511
|
|
|
|
512
|
|
|
// Get the entry hash |
513
|
2 |
|
$hash = self::get_custom_entry_slug( $id_or_string, $entry ); |
514
|
|
|
|
515
|
|
|
// See if the entry already has a hash set |
516
|
2 |
|
$value = gform_get_meta( $id_or_string, 'gravityview_unique_id' ); |
517
|
|
|
|
518
|
|
|
// If it does have a hash set, and the hash is expected, use it. |
519
|
|
|
// This check allows users to change the hash structure using the |
520
|
|
|
// gravityview_entry_hash filter and have the old hashes expire. |
521
|
2 |
|
if( empty( $value ) || $value !== $hash ) { |
522
|
2 |
|
gravityview()->log->debug( 'Setting hash for entry {entry}: {hash}', array( 'entry' => $id_or_string, 'hash' => $hash ) ); |
523
|
2 |
|
gform_update_meta( $id_or_string, 'gravityview_unique_id', $hash, \GV\Utils::get( $entry, 'form_id' ) ); |
524
|
|
|
} |
525
|
|
|
|
526
|
2 |
|
$slug = $hash; |
527
|
|
|
|
528
|
2 |
|
unset( $value, $hash ); |
529
|
|
|
} |
530
|
|
|
|
531
|
61 |
|
return sanitize_title( $slug ); |
532
|
|
|
} |
533
|
|
|
|
534
|
|
|
/** |
535
|
|
|
* If using the entry custom slug feature, make sure the new entries have the custom slug created and saved as meta |
536
|
|
|
* |
537
|
|
|
* Triggered by add_action( 'gform_entry_created', array( 'GravityView_API', 'entry_create_custom_slug' ), 10, 2 ); |
538
|
|
|
* |
539
|
|
|
* @param $entry array Gravity Forms entry object |
540
|
|
|
* @param $form array Gravity Forms form object |
541
|
|
|
*/ |
542
|
|
|
public static function entry_create_custom_slug( $entry, $form ) { |
|
|
|
|
543
|
|
|
/** |
544
|
|
|
* @filter `gravityview_custom_entry_slug` On entry creation, check if we are using the custom entry slug feature and update the meta |
545
|
|
|
* @param boolean $custom Should we process the custom entry slug? |
546
|
|
|
*/ |
547
|
|
|
$custom = apply_filters( 'gravityview_custom_entry_slug', false ); |
548
|
|
|
if( $custom ) { |
549
|
|
|
// create the gravityview_unique_id and save it |
550
|
|
|
|
551
|
|
|
// Get the entry hash |
552
|
|
|
$hash = self::get_custom_entry_slug( $entry['id'], $entry ); |
553
|
|
|
|
554
|
|
|
gravityview()->log->debug( 'Setting hash for entry {entry_id}: {hash}', array( 'entry_id' => $entry['id'], 'hash' => $hash ) ); |
555
|
|
|
|
556
|
|
|
gform_update_meta( $entry['id'], 'gravityview_unique_id', $hash, \GV\Utils::get( $entry, 'form_id' ) ); |
557
|
|
|
|
558
|
|
|
} |
559
|
|
|
} |
560
|
|
|
|
561
|
|
|
|
562
|
|
|
|
563
|
|
|
|
564
|
|
|
/** |
565
|
|
|
* return href for single entry |
566
|
|
|
* @param array|int $entry Entry array or entry ID |
567
|
|
|
* @param int|null $post_id If wanting to define the parent post, pass a post ID |
568
|
|
|
* @param boolean $add_directory_args True: Add args to help return to directory; False: only include args required to get to entry {@since 1.7.3} |
569
|
|
|
* @return string Link to the entry with the directory parent slug, or empty string if embedded post or View doesn't exist |
570
|
|
|
*/ |
571
|
6 |
|
public static function entry_link( $entry, $post_id = NULL, $add_directory_args = true ) { |
|
|
|
|
572
|
|
|
|
573
|
6 |
|
if ( ! empty( $entry ) && ! is_array( $entry ) ) { |
574
|
|
|
$entry = GVCommon::get_entry( $entry ); |
575
|
6 |
|
} else if( empty( $entry ) ) { |
576
|
|
|
// @deprecated path |
577
|
|
|
$entry = GravityView_frontend::getInstance()->getEntry(); |
578
|
|
|
} |
579
|
|
|
|
580
|
|
|
// Second parameter used to be passed as $field; this makes sure it's not an array |
581
|
6 |
|
if ( ! is_numeric( $post_id ) ) { |
582
|
1 |
|
$post_id = NULL; |
|
|
|
|
583
|
|
|
} |
584
|
|
|
|
585
|
|
|
// Get the permalink to the View |
586
|
6 |
|
$directory_link = self::directory_link( $post_id, false ); |
587
|
|
|
|
588
|
|
|
// No post ID? Get outta here. |
589
|
6 |
|
if ( empty( $directory_link ) ) { |
590
|
1 |
|
return ''; |
591
|
|
|
} |
592
|
|
|
|
593
|
5 |
|
$query_arg_name = \GV\Entry::get_endpoint_name(); |
594
|
|
|
|
595
|
5 |
|
$entry_slug = self::get_entry_slug( $entry['id'], $entry ); |
596
|
|
|
|
597
|
5 |
|
if ( get_option('permalink_structure') && !is_preview() ) { |
|
|
|
|
598
|
|
|
|
599
|
|
|
$args = array(); |
600
|
|
|
|
601
|
|
|
/** |
602
|
|
|
* Make sure the $directory_link doesn't contain any query otherwise it will break when adding the entry slug. |
603
|
|
|
* @since 1.16.5 |
604
|
|
|
*/ |
605
|
|
|
$link_parts = explode( '?', $directory_link ); |
606
|
|
|
|
607
|
|
|
$query = !empty( $link_parts[1] ) ? '?'.$link_parts[1] : ''; |
|
|
|
|
608
|
|
|
|
609
|
|
|
$directory_link = trailingslashit( $link_parts[0] ) . $query_arg_name . '/'. $entry_slug .'/' . $query; |
610
|
|
|
|
611
|
|
|
} else { |
612
|
|
|
|
613
|
5 |
|
$args = array( $query_arg_name => $entry_slug ); |
614
|
|
|
} |
615
|
|
|
|
616
|
|
|
/** |
617
|
|
|
* @since 1.7.3 |
618
|
|
|
*/ |
619
|
5 |
|
if ( $add_directory_args ) { |
620
|
|
|
|
621
|
5 |
|
if ( ! empty( $_GET['pagenum'] ) ) { |
622
|
|
|
$args['pagenum'] = intval( $_GET['pagenum'] ); |
|
|
|
|
623
|
|
|
} |
624
|
|
|
|
625
|
|
|
/** |
626
|
|
|
* @since 1.7 |
627
|
|
|
*/ |
628
|
5 |
|
if ( $sort = \GV\Utils::_GET( 'sort' ) ) { |
629
|
|
|
$args['sort'] = $sort; |
630
|
|
|
$args['dir'] = \GV\Utils::_GET( 'dir' ); |
631
|
|
|
} |
632
|
|
|
|
633
|
|
|
} |
634
|
|
|
|
635
|
5 |
|
if ( class_exists( 'GravityView_View_Data' ) && GravityView_View_Data::getInstance()->has_multiple_views() ) { |
|
|
|
|
636
|
|
|
$args['gvid'] = gravityview_get_view_id(); |
637
|
|
|
} |
638
|
|
|
|
639
|
5 |
|
return add_query_arg( $args, $directory_link ); |
640
|
|
|
|
641
|
|
|
} |
642
|
|
|
|
643
|
|
|
|
644
|
|
|
} |
645
|
|
|
|
646
|
|
|
|
647
|
|
|
// inside loop functions |
648
|
|
|
|
649
|
|
|
/** |
650
|
|
|
* @deprecated Use \GV\Field::get_label() |
651
|
|
|
*/ |
652
|
|
|
function gv_label( $field, $entry = NULL ) { |
|
|
|
|
653
|
2 |
|
return GravityView_API::field_label( $field, $entry ); |
|
|
|
|
654
|
|
|
} |
655
|
|
|
|
656
|
|
|
function gv_class( $field, $form = NULL, $entry = array() ) { |
|
|
|
|
657
|
19 |
|
return GravityView_API::field_class( $field, $form, $entry ); |
|
|
|
|
658
|
|
|
} |
659
|
|
|
|
660
|
|
|
/** |
661
|
|
|
* Generate a CSS class to be added to the wrapper <div> of a View |
662
|
|
|
* |
663
|
|
|
* @since 1.5.4 |
664
|
|
|
* @since 1.16 Added $echo parameter. |
665
|
|
|
* @since 2.0 Added $context parameter. |
666
|
|
|
* |
667
|
|
|
* @param string $passed_css_class Default: `gv-container gv-container-{view id}`. If View is hidden until search, adds ` hidden` |
668
|
|
|
* @param boolean $echo Whether to echo the output. Default: true |
669
|
|
|
* @param \GV\Template_Context $context The template context. |
670
|
|
|
* |
671
|
|
|
* @return string CSS class, sanitized by gravityview_sanitize_html_class() |
672
|
|
|
*/ |
673
|
|
|
function gv_container_class( $passed_css_class = '', $echo = true, $context = null ) { |
674
|
22 |
|
if ( $context instanceof \GV\Template_Context ) { |
675
|
19 |
|
$hide_until_searched = false; |
676
|
19 |
|
$total_entries = 0; |
677
|
19 |
|
$view_id = 0; |
678
|
19 |
|
if ( $context->view ) { |
679
|
19 |
|
$view_id = $context->view->ID; |
|
|
|
|
680
|
19 |
|
$hide_until_searched = $context->view->settings->get( 'hide_until_searched' ); |
681
|
|
|
} |
682
|
19 |
|
if ( $context->entries ) { |
683
|
10 |
|
$total_entries = $context->entries->total(); |
684
|
10 |
|
} else if ( $context->entry ) { |
685
|
19 |
|
$total_entries = 1; |
686
|
|
|
} |
687
|
|
|
} else { |
688
|
|
|
/** @deprecated legacy execution path */ |
689
|
3 |
|
$view_id = GravityView_View::getInstance()->getViewId(); |
690
|
3 |
|
$hide_until_searched = GravityView_View::getInstance()->isHideUntilSearched(); |
691
|
3 |
|
$total_entries = GravityView_View::getInstance()->getTotalEntries(); |
692
|
|
|
} |
693
|
|
|
|
694
|
22 |
|
$passed_css_class = trim( $passed_css_class ); |
695
|
|
|
|
696
|
22 |
|
$default_css_class = ! empty( $view_id ) ? sprintf( 'gv-container gv-container-%d', $view_id ) : 'gv-container'; |
697
|
|
|
|
698
|
22 |
|
if ( $hide_until_searched ) { |
699
|
3 |
|
$default_css_class .= ' hidden'; |
700
|
|
|
} |
701
|
|
|
|
702
|
22 |
|
if ( 0 === $total_entries ) { |
703
|
5 |
|
$default_css_class .= ' gv-container-no-results'; |
704
|
|
|
} |
705
|
|
|
|
706
|
22 |
|
$css_class = trim( $passed_css_class . ' '. $default_css_class ); |
707
|
|
|
|
708
|
|
|
/** |
709
|
|
|
* @filter `gravityview/render/container/class` Modify the CSS class to be added to the wrapper <div> of a View |
710
|
|
|
* @since 1.5.4 |
711
|
|
|
* @param[in,out] string $css_class Default: `gv-container gv-container-{view id}`. If View is hidden until search, adds ` hidden`. If the View has no results, adds `gv-container-no-results` |
712
|
|
|
* @since 2.0 |
713
|
|
|
* @param \GV\Template_Context $context The context. |
714
|
|
|
*/ |
715
|
22 |
|
$css_class = apply_filters( 'gravityview/render/container/class', $css_class, $context ); |
716
|
|
|
|
717
|
22 |
|
$css_class = gravityview_sanitize_html_class( $css_class ); |
718
|
|
|
|
719
|
22 |
|
if ( $echo ) { |
720
|
22 |
|
echo $css_class; |
|
|
|
|
721
|
|
|
} |
722
|
|
|
|
723
|
22 |
|
return $css_class; |
724
|
|
|
} |
725
|
|
|
|
726
|
|
|
/** |
727
|
|
|
* @deprecated Use \GV\Field_Template::render() |
728
|
|
|
*/ |
729
|
|
|
function gv_value( $entry, $field ) { |
730
|
|
|
|
731
|
2 |
|
$value = GravityView_API::field_value( $entry, $field ); |
|
|
|
|
732
|
|
|
|
733
|
2 |
|
if( $value === '' ) { |
734
|
|
|
/** |
735
|
|
|
* @filter `gravityview_empty_value` What to display when a field is empty |
736
|
|
|
* @param string $value (empty string) |
737
|
|
|
*/ |
738
|
1 |
|
$value = apply_filters( 'gravityview_empty_value', '' ); |
739
|
|
|
} |
740
|
|
|
|
741
|
2 |
|
return $value; |
742
|
|
|
} |
743
|
|
|
|
744
|
|
|
function gv_directory_link( $post = NULL, $add_pagination = true, $context = null ) { |
|
|
|
|
745
|
11 |
|
return GravityView_API::directory_link( $post, $add_pagination, $context ); |
746
|
|
|
} |
747
|
|
|
|
748
|
|
|
function gv_entry_link( $entry, $post_id = NULL ) { |
|
|
|
|
749
|
2 |
|
return GravityView_API::entry_link( $entry, $post_id ); |
750
|
|
|
} |
751
|
|
|
|
752
|
|
|
function gv_no_results( $wpautop = true, $context = null ) { |
753
|
6 |
|
return GravityView_API::no_results( $wpautop, $context ); |
754
|
|
|
} |
755
|
|
|
|
756
|
|
|
/** |
757
|
|
|
* Generate HTML for the back link from single entry view |
758
|
|
|
* @since 1.0.1 |
759
|
|
|
* @since 2.0 |
760
|
|
|
* @param \GV\Template_Context $context The context this link is being displayed from. |
761
|
|
|
* @return string|null If no GV post exists, null. Otherwise, HTML string of back link. |
762
|
|
|
*/ |
763
|
|
|
function gravityview_back_link( $context = null ) { |
764
|
|
|
|
765
|
10 |
|
$href = gv_directory_link( null, true, $context ); |
766
|
|
|
|
767
|
|
|
/** |
768
|
|
|
* @filter `gravityview_go_back_url` Modify the back link URL |
769
|
|
|
* @since 1.17.5 |
770
|
|
|
* @see gv_directory_link() Generated the original back link |
771
|
|
|
* @param string $href Existing label URL |
772
|
|
|
* @deprecated Use `gravityview/template/links/back/url` |
773
|
|
|
*/ |
774
|
10 |
|
$href = apply_filters( 'gravityview_go_back_url', $href ); |
775
|
|
|
|
776
|
|
|
/** |
777
|
|
|
* @filter `gravityview/template/links/back/url` Modify the back link URL |
778
|
|
|
* @since 2.0 |
779
|
|
|
* @see gv_directory_link() Generated the original back link |
780
|
|
|
* @param string $href Existing label URL |
781
|
|
|
* @param \GV\Template_Context The context. |
782
|
|
|
*/ |
783
|
10 |
|
$href = apply_filters( 'gravityview/template/links/back/url', $href, $context ); |
784
|
|
|
|
785
|
10 |
|
if ( empty( $href ) ) { |
786
|
3 |
|
return NULL; |
|
|
|
|
787
|
|
|
} |
788
|
|
|
|
789
|
8 |
|
if ( $context instanceof \GV\Template_Context ) { |
790
|
8 |
|
$view_id = $context->view->ID; |
|
|
|
|
791
|
8 |
|
$view_label = $context->template->get_back_label(); |
|
|
|
|
792
|
|
|
} else { |
793
|
|
|
/** @deprecated legacy path */ |
794
|
|
|
$gravityview_view = GravityView_View::getInstance(); |
795
|
|
|
$view_id = $gravityview_view->getViewId(); |
796
|
|
|
$view_label = $gravityview_view->getBackLinkLabel() ? $gravityview_view->getBackLinkLabel() : false; |
|
|
|
|
797
|
|
|
} |
798
|
|
|
|
799
|
|
|
/** Default */ |
800
|
8 |
|
$label = $view_label ? $view_label : __( '← Go back', 'gravityview' ); |
801
|
|
|
|
802
|
|
|
/** |
803
|
|
|
* @filter `gravityview_go_back_label` Modify the back link text |
804
|
|
|
* @since 1.0.9 |
805
|
|
|
* @param string $label Existing label text |
806
|
|
|
* @deprecated Use `gravityview/template/links/back/label` |
807
|
|
|
*/ |
808
|
8 |
|
$label = apply_filters( 'gravityview_go_back_label', $label ); |
809
|
|
|
|
810
|
|
|
/** |
811
|
|
|
* @filter `gravityview_go_back_label` Modify the back link text |
812
|
|
|
* @since 2.0 |
813
|
|
|
* @see gv_directory_link() Generated the original back link |
814
|
|
|
* @param string $label Existing label text |
815
|
|
|
* @param \GV\Template_Context The context. |
816
|
|
|
*/ |
817
|
8 |
|
$label = apply_filters( 'gravityview/template/links/back/label', $label, $context ); |
818
|
|
|
|
819
|
8 |
|
$link = gravityview_get_link( $href, esc_html( $label ), array( |
820
|
8 |
|
'data-viewid' => $view_id, |
821
|
|
|
) ); |
822
|
|
|
|
823
|
8 |
|
return $link; |
824
|
|
|
} |
825
|
|
|
|
826
|
|
|
/** |
827
|
|
|
* Handle getting values for complex Gravity Forms fields |
828
|
|
|
* |
829
|
|
|
* If the field is complex, like a product, the field ID, for example, 11, won't exist. Instead, |
830
|
|
|
* it will be 11.1, 11.2, and 11.3. This handles being passed 11 and 11.2 with the same function. |
831
|
|
|
* |
832
|
|
|
* @since 1.0.4 |
833
|
|
|
* @param array $entry GF entry array |
834
|
|
|
* @param string $field_id [description] |
835
|
|
|
* @param string $display_value The value generated by Gravity Forms |
836
|
|
|
* @return string Value |
837
|
|
|
*/ |
838
|
|
|
function gravityview_get_field_value( $entry, $field_id, $display_value ) { |
839
|
|
|
|
840
|
6 |
|
if( floatval( $field_id ) === floor( floatval( $field_id ) ) ) { |
841
|
|
|
|
842
|
|
|
// For the complete field value as generated by Gravity Forms |
843
|
3 |
|
return $display_value; |
844
|
|
|
|
845
|
|
|
} else { |
846
|
|
|
|
847
|
|
|
// For one part of the address (City, ZIP, etc.) |
848
|
6 |
|
return isset( $entry[ $field_id ] ) ? $entry[ $field_id ] : ''; |
849
|
|
|
|
850
|
|
|
} |
851
|
|
|
|
852
|
|
|
} |
853
|
|
|
|
854
|
|
|
/** |
855
|
|
|
* Take a passed CSV of terms and generate a linked list of terms |
856
|
|
|
* |
857
|
|
|
* Gravity Forms passes categories as "Name:ID" so we handle that using the ID, which |
858
|
|
|
* is more accurate than checking the name, which is more likely to change. |
859
|
|
|
* |
860
|
|
|
* @param string $value Existing value |
861
|
|
|
* @param string $taxonomy Type of term (`post_tag` or `category`) |
862
|
|
|
* @return string CSV of linked terms |
863
|
|
|
*/ |
864
|
|
|
function gravityview_convert_value_to_term_list( $value, $taxonomy = 'post_tag' ) { |
865
|
|
|
|
866
|
1 |
|
$output = array(); |
867
|
|
|
|
868
|
1 |
|
if ( is_array( $value ) ) { |
869
|
1 |
|
$terms = array_filter( array_values( $value ), 'strlen' ); |
870
|
|
|
} else { |
871
|
1 |
|
$terms = explode( ', ', $value ); |
872
|
|
|
} |
873
|
|
|
|
874
|
1 |
|
foreach ($terms as $term_name ) { |
|
|
|
|
875
|
|
|
|
876
|
|
|
// If we're processing a category, |
877
|
1 |
|
if( $taxonomy === 'category' ) { |
|
|
|
|
878
|
|
|
|
879
|
|
|
// Use rgexplode to prevent errors if : doesn't exist |
880
|
1 |
|
list( $term_name, $term_id ) = rgexplode( ':', $term_name, 2 ); |
881
|
|
|
|
882
|
|
|
// The explode was succesful; we have the category ID |
883
|
1 |
|
if( !empty( $term_id )) { |
|
|
|
|
884
|
1 |
|
$term = get_term_by( 'id', $term_id, $taxonomy ); |
885
|
|
|
} else { |
886
|
|
|
// We have to fall back to the name |
887
|
1 |
|
$term = get_term_by( 'name', $term_name, $taxonomy ); |
888
|
|
|
} |
889
|
|
|
|
890
|
|
|
} else { |
891
|
|
|
// Use the name of the tag to get the full term information |
892
|
1 |
|
$term = get_term_by( 'name', $term_name, $taxonomy ); |
893
|
|
|
} |
894
|
|
|
|
895
|
|
|
// There's still a tag/category here. |
896
|
1 |
|
if( $term ) { |
897
|
|
|
|
898
|
1 |
|
$term_link = get_term_link( $term, $taxonomy ); |
899
|
|
|
|
900
|
|
|
// If there was an error, continue to the next term. |
901
|
1 |
|
if ( is_wp_error( $term_link ) ) { |
902
|
|
|
continue; |
903
|
|
|
} |
904
|
|
|
|
905
|
1 |
|
$output[] = gravityview_get_link( $term_link, esc_html( $term->name ) ); |
906
|
|
|
} |
907
|
|
|
} |
908
|
|
|
|
909
|
1 |
|
return implode(', ', $output ); |
|
|
|
|
910
|
|
|
} |
911
|
|
|
|
912
|
|
|
/** |
913
|
|
|
* Get the links for post_tags and post_category output based on post ID |
914
|
|
|
* @param int $post_id The ID of the post |
915
|
|
|
* @param boolean $link Add links or no? |
916
|
|
|
* @param string $taxonomy Taxonomy of term to fetch. |
917
|
|
|
* @return string String with terms |
918
|
|
|
*/ |
919
|
|
|
function gravityview_get_the_term_list( $post_id, $link = true, $taxonomy = 'post_tag' ) { |
920
|
|
|
|
921
|
1 |
|
$output = get_the_term_list( $post_id, $taxonomy, NULL, ', ' ); |
|
|
|
|
922
|
|
|
|
923
|
1 |
|
if( empty( $link ) ) { |
924
|
1 |
|
return strip_tags( $output); |
|
|
|
|
925
|
|
|
} |
926
|
|
|
|
927
|
1 |
|
return $output; |
928
|
|
|
|
929
|
|
|
} |
930
|
|
|
|
931
|
|
|
|
932
|
|
|
/** |
933
|
|
|
* Get all views processed so far for the current page load |
934
|
|
|
* |
935
|
|
|
* @see GravityView_View_Data::add_view() |
936
|
|
|
* @return array Array of View data, each View data with `id`, `view_id`, `form_id`, `template_id`, `atts`, `fields`, `widgets`, `form` keys. |
937
|
|
|
*/ |
938
|
|
|
function gravityview_get_current_views() { |
939
|
|
|
|
940
|
1 |
|
$fe = GravityView_frontend::getInstance(); |
941
|
|
|
|
942
|
|
|
// Solve problem when loading content via admin-ajax.php |
943
|
1 |
|
if( ! $fe->getGvOutputData() ) { |
944
|
|
|
|
945
|
1 |
|
gravityview()->log->debug( 'gv_output_data not defined; parsing content.' ); |
946
|
|
|
|
947
|
1 |
|
$fe->parse_content(); |
948
|
|
|
} |
949
|
|
|
|
950
|
|
|
// Make 100% sure that we're dealing with a properly called situation |
951
|
1 |
|
if( !is_a( $fe->getGvOutputData(), 'GravityView_View_Data' ) ) { |
|
|
|
|
952
|
|
|
|
953
|
|
|
gravityview()->log->debug( 'gv_output_data not an object or get_view not callable.', array( 'data' => $fe->getGvOutputData() ) ); |
954
|
|
|
|
955
|
|
|
return array(); |
956
|
|
|
} |
957
|
|
|
|
958
|
1 |
|
return $fe->getGvOutputData()->get_views(); |
|
|
|
|
959
|
|
|
} |
960
|
|
|
|
961
|
|
|
/** |
962
|
|
|
* Get data for a specific view |
963
|
|
|
* |
964
|
|
|
* @see GravityView_View_Data::get_view() |
965
|
|
|
* @return array View data with `id`, `view_id`, `form_id`, `template_id`, `atts`, `fields`, `widgets`, `form` keys. |
966
|
|
|
*/ |
967
|
|
|
function gravityview_get_current_view_data( $view_id = 0 ) { |
968
|
|
|
|
969
|
|
|
$fe = GravityView_frontend::getInstance(); |
970
|
|
|
|
971
|
|
|
// If not set, grab the current view ID |
972
|
|
|
if ( empty( $view_id ) ) { |
973
|
|
|
$view_id = $fe->get_context_view_id(); |
974
|
|
|
} |
975
|
|
|
|
976
|
|
|
if ( ! $fe->getGvOutputData() ) { return array(); } |
977
|
|
|
|
978
|
|
|
return $fe->getGvOutputData()->get_view( $view_id ); |
|
|
|
|
979
|
|
|
} |
980
|
|
|
|
981
|
|
|
// Templates' hooks |
982
|
|
|
function gravityview_before() { |
983
|
|
|
/** |
984
|
|
|
* @action `gravityview/template/before` Append content to the view. |
985
|
|
|
* @param object $gravityview The $gravityview object available in templates. |
986
|
|
|
*/ |
987
|
21 |
|
if ( count( $args = func_get_args() ) ) { |
988
|
19 |
|
$gravityview = reset( $args ); |
989
|
19 |
|
if ( $gravityview instanceof \GV\Template_Context ) { |
990
|
|
|
/** |
991
|
|
|
* @action `gravityview/template/before` Prepend content to the view. |
992
|
|
|
* @param \GV\Template_Context $gravityview The $gravityview object available in templates. |
993
|
|
|
*/ |
994
|
19 |
|
do_action( 'gravityview/template/before', $gravityview ); |
995
|
|
|
|
996
|
|
|
/** |
997
|
|
|
* @deprecated Use `gravityview/template/before` |
998
|
|
|
*/ |
999
|
19 |
|
return do_action( 'gravityview_before', $gravityview->view->ID ); |
|
|
|
|
1000
|
|
|
} |
1001
|
|
|
} |
1002
|
|
|
|
1003
|
|
|
/** |
1004
|
|
|
* @action `gravityview_before` Prepend content to the View container `<div>` |
1005
|
|
|
* @deprecated Use `gravityview/template/before`. |
1006
|
|
|
* @param int $view_id The ID of the View being displayed |
1007
|
|
|
*/ |
1008
|
2 |
|
do_action( 'gravityview_before', gravityview_get_view_id() ); |
1009
|
2 |
|
} |
1010
|
|
|
|
1011
|
|
|
function gravityview_header() { |
1012
|
|
|
/** |
1013
|
|
|
* @action `gravityview/template/header` Append content to the view. |
1014
|
|
|
* @param object $gravityview The $gravityview object available in templates. |
1015
|
|
|
*/ |
1016
|
17 |
|
if ( count( $args = func_get_args() ) ) { |
1017
|
15 |
|
$gravityview = reset( $args ); |
1018
|
15 |
|
if ( $gravityview instanceof \GV\Template_Context ) { |
1019
|
|
|
/** |
1020
|
|
|
* @action `gravityview/template/header` Prepend content to the view container <div>. |
1021
|
|
|
* @param \GV\Template_Context $gravityview The $gravityview object available in templates. |
1022
|
|
|
*/ |
1023
|
15 |
|
do_action( 'gravityview/template/header', $gravityview ); |
1024
|
|
|
|
1025
|
|
|
/** |
1026
|
|
|
* @deprecated Use `gravityview/template/header` |
1027
|
|
|
*/ |
1028
|
15 |
|
return do_action( 'gravityview_header', $gravityview->view->ID ); |
|
|
|
|
1029
|
|
|
} |
1030
|
|
|
} |
1031
|
|
|
|
1032
|
|
|
/** |
1033
|
|
|
* @action `gravityview_header` Prepend content to the View container `<div>` |
1034
|
|
|
* @deprecated Use `gravityview/template/header`. |
1035
|
|
|
* @param int $view_id The ID of the View being displayed |
1036
|
|
|
*/ |
1037
|
2 |
|
do_action( 'gravityview_header', gravityview_get_view_id() ); |
1038
|
2 |
|
} |
1039
|
|
|
|
1040
|
|
|
function gravityview_footer() { |
1041
|
|
|
/** |
1042
|
|
|
* @action `gravityview/template/footer` Append content to the view. |
1043
|
|
|
* @param object $gravityview The $gravityview object available in templates. |
1044
|
|
|
*/ |
1045
|
17 |
|
if ( count( $args = func_get_args() ) ) { |
1046
|
15 |
|
$gravityview = reset( $args ); |
1047
|
15 |
|
if ( $gravityview instanceof \GV\Template_Context ) { |
1048
|
|
|
/** |
1049
|
|
|
* @action `gravityview/template/footer` Prepend outside of the view container <div>. |
1050
|
|
|
* @param \GV\Template_Context $gravityview The $gravityview object available in templates. |
1051
|
|
|
*/ |
1052
|
15 |
|
do_action( 'gravityview/template/footer', $gravityview ); |
1053
|
|
|
|
1054
|
|
|
/** |
1055
|
|
|
* @deprecated Use `gravityview/template/footer` |
1056
|
|
|
*/ |
1057
|
15 |
|
return do_action( 'gravityview_footer', $gravityview->view->ID ); |
|
|
|
|
1058
|
|
|
} |
1059
|
|
|
} |
1060
|
|
|
|
1061
|
|
|
/** |
1062
|
|
|
* @action `gravityview_after` Display content after a View. Used to render footer widget areas. Rendered outside the View container `<div>` |
1063
|
|
|
* @deprecated Use `gravityview/template/footer`. |
1064
|
|
|
* @param int $view_id The ID of the View being displayed |
1065
|
|
|
*/ |
1066
|
2 |
|
do_action( 'gravityview_footer', gravityview_get_view_id() ); |
1067
|
2 |
|
} |
1068
|
|
|
|
1069
|
|
|
function gravityview_after() { |
1070
|
21 |
|
if ( count( $args = func_get_args() ) ) { |
1071
|
19 |
|
$gravityview = reset( $args ); |
1072
|
19 |
|
if ( $gravityview instanceof \GV\Template_Context ) { |
1073
|
|
|
/** |
1074
|
|
|
* @action `gravityview/template/after` Append content to the view. |
1075
|
|
|
* @param \GV\Template_Context $gravityview The $gravityview object available in templates. |
1076
|
|
|
*/ |
1077
|
19 |
|
do_action( 'gravityview/template/after', $gravityview ); |
1078
|
|
|
|
1079
|
|
|
/** |
1080
|
|
|
* @deprecated Use `gravityview/template/after` |
1081
|
|
|
*/ |
1082
|
19 |
|
return do_action( 'gravityview_after', $gravityview->view->ID ); |
|
|
|
|
1083
|
|
|
} |
1084
|
|
|
} |
1085
|
|
|
|
1086
|
|
|
/** |
1087
|
|
|
* @action `gravityview_after` Append content to the View container `<div>` |
1088
|
|
|
* @deprecated Use `gravityview/template/after` |
1089
|
|
|
* @param int $view_id The ID of the View being displayed |
1090
|
|
|
*/ |
1091
|
2 |
|
do_action( 'gravityview_after', gravityview_get_view_id() ); |
1092
|
2 |
|
} |
1093
|
|
|
|
1094
|
|
|
/** |
1095
|
|
|
* Get the current View ID being rendered |
1096
|
|
|
* |
1097
|
|
|
* @global GravityView_View $gravityview_view |
1098
|
|
|
* |
1099
|
|
|
* @return int View ID, if exists. `0` if `GravityView_View` doesn't exist, like in the admin, or no View is set. |
1100
|
|
|
*/ |
1101
|
|
|
function gravityview_get_view_id() { |
1102
|
|
|
|
1103
|
2 |
|
if ( ! class_exists( 'GravityView_View' ) ) { |
1104
|
|
|
return 0; |
1105
|
|
|
} |
1106
|
|
|
|
1107
|
2 |
|
return GravityView_View::getInstance()->getViewId(); |
1108
|
|
|
} |
1109
|
|
|
|
1110
|
|
|
/** |
1111
|
|
|
* @global GravityView_View $gravityview_view |
1112
|
|
|
* @return string View context "directory", "single", or "edit" |
1113
|
|
|
*/ |
1114
|
|
|
function gravityview_get_context() { |
1115
|
|
|
|
1116
|
4 |
|
$context = ''; |
1117
|
|
|
|
1118
|
|
|
/** |
1119
|
|
|
* @filter `gravityview_is_edit_entry` Whether we're currently on the Edit Entry screen \n |
1120
|
|
|
* The Edit Entry functionality overrides this value. |
1121
|
|
|
* @param boolean $is_edit_entry |
1122
|
|
|
*/ |
1123
|
4 |
|
$is_edit_entry = apply_filters( 'gravityview_is_edit_entry', false ); |
1124
|
|
|
|
1125
|
4 |
|
if( $is_edit_entry ) { |
1126
|
|
|
$context = 'edit'; |
1127
|
4 |
|
} else if( class_exists( 'GravityView_frontend' ) && $single = GravityView_frontend::is_single_entry() ) { |
1128
|
|
|
$context = 'single'; |
1129
|
4 |
|
} else if( class_exists( 'GravityView_View' ) ) { |
1130
|
4 |
|
$context = GravityView_View::getInstance()->getContext(); |
1131
|
|
|
} |
1132
|
|
|
|
1133
|
4 |
|
return $context; |
1134
|
|
|
} |
1135
|
|
|
|
1136
|
|
|
|
1137
|
|
|
/** |
1138
|
|
|
* Return an array of files prepared for output. Wrapper for GravityView_Field_FileUpload::get_files_array() |
1139
|
|
|
* |
1140
|
|
|
* Processes files by file type and generates unique output for each. |
1141
|
|
|
* |
1142
|
|
|
* Returns array for each file, with the following keys: |
1143
|
|
|
* |
1144
|
|
|
* `file_path` => The file path of the file, with a line break |
1145
|
|
|
* `html` => The file output HTML formatted |
1146
|
|
|
* |
1147
|
|
|
* @see GravityView_Field_FileUpload::get_files_array() |
1148
|
|
|
* |
1149
|
|
|
* @since 1.2 |
1150
|
|
|
* @param string $value Field value passed by Gravity Forms. String of file URL, or serialized string of file URL array |
1151
|
|
|
* @param string $gv_class Field class to add to the output HTML |
1152
|
|
|
* @since 2.0 |
1153
|
|
|
* @param \GV\Template_Context $context The context |
1154
|
|
|
* @return array Array of file output, with `file_path` and `html` keys (see comments above) |
1155
|
|
|
*/ |
1156
|
|
|
function gravityview_get_files_array( $value, $gv_class = '', $context = null ) { |
1157
|
|
|
/** @define "GRAVITYVIEW_DIR" "../" */ |
1158
|
|
|
|
1159
|
1 |
|
if( !class_exists( 'GravityView_Field' ) ) { |
|
|
|
|
1160
|
|
|
include_once( GRAVITYVIEW_DIR .'includes/fields/class-gravityview-field.php' ); |
1161
|
|
|
} |
1162
|
|
|
|
1163
|
1 |
|
if( !class_exists( 'GravityView_Field_FileUpload' ) ) { |
|
|
|
|
1164
|
|
|
include_once( GRAVITYVIEW_DIR .'includes/fields/class-gravityview-field-fileupload.php' ); |
1165
|
|
|
} |
1166
|
|
|
|
1167
|
1 |
|
return GravityView_Field_FileUpload::get_files_array( $value, $gv_class, $context ); |
1168
|
|
|
} |
1169
|
|
|
|
1170
|
|
|
/** |
1171
|
|
|
* Generate a mapping link from an address |
1172
|
|
|
* |
1173
|
|
|
* The address should be plain text with new line (`\n`) or `<br />` line breaks separating sections |
1174
|
|
|
* |
1175
|
|
|
* @todo use GF's field get_export_value() instead |
1176
|
|
|
* |
1177
|
|
|
* @see https://gravityview.co/support/documentation/201608159 Read how to modify the link |
1178
|
|
|
* @param string $address Address |
1179
|
|
|
* @return string URL of link to map of address |
1180
|
|
|
*/ |
1181
|
|
|
function gravityview_get_map_link( $address ) { |
1182
|
|
|
|
1183
|
|
|
$address_qs = str_replace( array( '<br />', "\n" ), ' ', $address ); // Replace \n with spaces |
1184
|
|
|
$address_qs = urlencode( $address_qs ); |
1185
|
|
|
|
1186
|
|
|
$url = "https://maps.google.com/maps?q={$address_qs}"; |
1187
|
|
|
|
1188
|
|
|
$link_text = esc_html__( 'Map It', 'gravityview' ); |
1189
|
|
|
|
1190
|
|
|
$link = gravityview_get_link( $url, $link_text, 'class=map-it-link' ); |
1191
|
|
|
|
1192
|
|
|
/** |
1193
|
|
|
* @filter `gravityview_map_link` Modify the map link generated. You can use a different mapping service, for example. |
1194
|
|
|
* @param[in,out] string $link Map link |
1195
|
|
|
* @param[in] string $address Address to generate link for |
1196
|
|
|
* @param[in] string $url URL generated by the function |
1197
|
|
|
*/ |
1198
|
|
|
$link = apply_filters( 'gravityview_map_link', $link, $address, $url ); |
1199
|
|
|
|
1200
|
|
|
return $link; |
1201
|
|
|
} |
1202
|
|
|
|
1203
|
|
|
|
1204
|
|
|
/** |
1205
|
|
|
* Output field based on a certain html markup |
1206
|
|
|
* |
1207
|
|
|
* markup - string to be used on a sprintf statement. |
1208
|
|
|
* Use: |
1209
|
|
|
* {{label}} - field label |
1210
|
|
|
* {{value}} - entry field value |
1211
|
|
|
* {{class}} - field class |
1212
|
|
|
* |
1213
|
|
|
* wpautop - true will filter the value using wpautop function |
1214
|
|
|
* |
1215
|
|
|
* @since 1.1.5 |
1216
|
|
|
* @param array $passed_args Associative array with field data. `field` and `form` are required. |
1217
|
|
|
* @since 2.0 |
1218
|
|
|
* @param \GV\Template_Context The template context. |
1219
|
|
|
* @return string Field output. If empty value and hide empty is true, return empty. |
1220
|
|
|
*/ |
1221
|
|
|
function gravityview_field_output( $passed_args, $context = null ) { |
1222
|
|
|
$defaults = array( |
1223
|
18 |
|
'entry' => null, |
1224
|
|
|
'field' => null, |
1225
|
|
|
'form' => null, |
1226
|
|
|
'hide_empty' => true, |
1227
|
|
|
'markup' => '<div id="{{ field_id }}" class="{{ class }}">{{ label }}{{ value }}</div>', |
1228
|
|
|
'label_markup' => '', |
1229
|
|
|
'wpautop' => false, |
1230
|
|
|
'zone_id' => null, |
1231
|
|
|
); |
1232
|
|
|
|
1233
|
18 |
|
$args = wp_parse_args( $passed_args, $defaults ); |
1234
|
|
|
|
1235
|
|
|
/** |
1236
|
|
|
* @filter `gravityview/field_output/args` Modify the args before generation begins |
1237
|
|
|
* @since 1.7 |
1238
|
|
|
* @param array $args Associative array; `field` and `form` is required. |
1239
|
|
|
* @param array $passed_args Original associative array with field data. `field` and `form` are required. |
1240
|
|
|
* @since 2.0 |
1241
|
|
|
* @param \GV\Template_Context $context The context. |
1242
|
|
|
* @deprecated |
1243
|
|
|
*/ |
1244
|
18 |
|
$args = apply_filters( 'gravityview/field_output/args', $args, $passed_args, $context ); |
1245
|
|
|
|
1246
|
|
|
/** |
1247
|
|
|
* @filter `gravityview/template/field_output/context` Modify the context before generation begins. |
1248
|
|
|
* @since 2.0 |
1249
|
|
|
* @param[in,out] \GV\Template_Context $context The context. |
1250
|
|
|
* @param array $args The sanitized arguments, these should not be trusted any longer. |
1251
|
|
|
* @param array $passed_args The passed arguments, these should not be trusted any longer. |
1252
|
|
|
*/ |
1253
|
18 |
|
$context = apply_filters( 'gravityview/template/field_output/context', $context, $args, $passed_args ); |
1254
|
|
|
|
1255
|
18 |
|
if ( $context instanceof \GV\Template_Context ) { |
1256
|
16 |
|
if ( ! $context->field || ! $context->view || ! $context->view->form ) { |
1257
|
|
|
gravityview()->log->error( 'Field or form are empty.', array( 'data' => array( $context->field, $context->view->form ) ) ); |
1258
|
16 |
|
return ''; |
1259
|
|
|
} |
1260
|
|
|
} else { |
1261
|
|
|
// @deprecated path |
1262
|
|
|
// Required fields. |
1263
|
2 |
|
if ( empty( $args['field'] ) || empty( $args['form'] ) ) { |
1264
|
|
|
gravityview()->log->error( 'Field or form are empty.', array( 'data' => $args ) ); |
1265
|
|
|
return ''; |
1266
|
|
|
} |
1267
|
|
|
} |
1268
|
|
|
|
1269
|
18 |
|
if ( $context instanceof \GV\Template_Context ) { |
1270
|
16 |
|
$entry = $args['entry'] ? : ( $context->entry ? $context->entry->as_entry() : array() ); |
1271
|
16 |
|
$field = $args['field'] ? : ( $context->field ? $context->field->as_configuration() : array() ); |
1272
|
16 |
|
$form = $args['form'] ? : ( $context->view->form ? $context->view->form->form : array() ); |
|
|
|
|
1273
|
|
|
} else { |
1274
|
|
|
// @deprecated path |
1275
|
2 |
|
$entry = empty( $args['entry'] ) ? array() : $args['entry']; |
1276
|
2 |
|
$field = $args['field']; |
1277
|
2 |
|
$form = $args['form']; |
1278
|
|
|
} |
1279
|
|
|
|
1280
|
|
|
/** |
1281
|
|
|
* Create the content variables for replacing. |
1282
|
|
|
* @since 1.11 |
1283
|
|
|
*/ |
1284
|
|
|
$placeholders = array( |
1285
|
18 |
|
'value' => '', |
1286
|
|
|
'width' => '', |
1287
|
|
|
'width:style' => '', |
1288
|
|
|
'label' => '', |
1289
|
|
|
'label_value' => '', |
1290
|
|
|
'class' => '', |
1291
|
|
|
'field_id' => '', |
1292
|
|
|
); |
1293
|
|
|
|
1294
|
18 |
|
if ( $context instanceof \GV\Template_Context ) { |
1295
|
16 |
|
$placeholders['value'] = \GV\Utils::get( $args, 'value', '' ); |
1296
|
|
|
} else { |
1297
|
|
|
// @deprecated path |
1298
|
2 |
|
$placeholders['value'] = gv_value( $entry, $field ); |
|
|
|
|
1299
|
|
|
} |
1300
|
|
|
|
1301
|
|
|
// If the value is empty and we're hiding empty, return empty. |
1302
|
18 |
|
if ( $placeholders['value'] === '' && ! empty( $args['hide_empty'] ) ) { |
1303
|
5 |
|
return ''; |
1304
|
|
|
} |
1305
|
|
|
|
1306
|
18 |
|
if ( $placeholders['value'] !== '' && ! empty( $args['wpautop'] ) ) { |
1307
|
5 |
|
$placeholders['value'] = wpautop( $placeholders['value'] ); |
1308
|
|
|
} |
1309
|
|
|
|
1310
|
|
|
// Get width setting, if exists |
1311
|
18 |
|
$placeholders['width'] = GravityView_API::field_width( $field ); |
1312
|
|
|
|
1313
|
|
|
// If replacing with CSS inline formatting, let's do it. |
1314
|
18 |
|
$placeholders['width:style'] = GravityView_API::field_width( $field, 'width:' . $placeholders['width'] . '%;' ); |
1315
|
|
|
|
1316
|
|
|
// Grab the Class using `gv_class` |
1317
|
18 |
|
$placeholders['class'] = gv_class( $field, $form, $entry ); |
1318
|
18 |
|
$placeholders['field_id'] = GravityView_API::field_html_attr_id( $field, $form, $entry ); |
1319
|
|
|
|
|
|
|
|
1320
|
|
|
|
1321
|
|
|
// Get field label if needed |
1322
|
18 |
|
if ( ! empty( $args['label_markup'] ) && ! empty( $args['field']['show_label'] ) ) { |
1323
|
1 |
|
$placeholders['label'] = str_replace( array( '{{label}}', '{{ label }}' ), '<span class="gv-field-label">{{ label_value }}</span>', $args['label_markup'] ); |
1324
|
|
|
} |
1325
|
|
|
|
1326
|
18 |
|
if ( $context instanceof \GV\Template_Context ) { |
1327
|
16 |
|
$placeholders['label_value'] = \GV\Utils::get( $args, 'label' ); |
1328
|
|
|
} else { |
1329
|
|
|
// Default Label value |
1330
|
2 |
|
$placeholders['label_value'] = gv_label( $field, $entry ); |
|
|
|
|
1331
|
|
|
} |
1332
|
|
|
|
1333
|
18 |
|
if ( empty( $placeholders['label'] ) && ! empty( $placeholders['label_value'] ) ){ |
1334
|
17 |
|
$placeholders['label'] = '<span class="gv-field-label">{{ label_value }}</span>'; |
1335
|
|
|
} |
1336
|
|
|
|
1337
|
|
|
/** |
1338
|
|
|
* @filter `gravityview/field_output/pre_html` Allow Pre filtering of the HTML |
1339
|
|
|
* @since 1.11 |
1340
|
|
|
* @param string $markup The HTML for the markup |
1341
|
|
|
* @param array $args All args for the field output |
1342
|
|
|
* @since 2.0 |
1343
|
|
|
* @param \GV\Template_Context $context The context. |
1344
|
|
|
*/ |
1345
|
18 |
|
$html = apply_filters( 'gravityview/field_output/pre_html', $args['markup'], $args, $context ); |
1346
|
|
|
|
1347
|
|
|
/** |
1348
|
|
|
* @filter `gravityview/field_output/open_tag` Modify the opening tags for the template content placeholders |
1349
|
|
|
* @since 1.11 |
1350
|
|
|
* @param string $open_tag Open tag for template content placeholders. Default: `{{` |
1351
|
|
|
* @since 2.0 |
1352
|
|
|
* @param \GV\Template_Context $context The context. |
1353
|
|
|
*/ |
1354
|
18 |
|
$open_tag = apply_filters( 'gravityview/field_output/open_tag', '{{', $args, $context ); |
1355
|
|
|
|
1356
|
|
|
/** |
1357
|
|
|
* @filter `gravityview/field_output/close_tag` Modify the closing tags for the template content placeholders |
1358
|
|
|
* @since 1.11 |
1359
|
|
|
* @param string $close_tag Close tag for template content placeholders. Default: `}}` |
1360
|
|
|
* @since 2.0 |
1361
|
|
|
* @param \GV\Template_Context $context The context. |
1362
|
|
|
*/ |
1363
|
18 |
|
$close_tag = apply_filters( 'gravityview/field_output/close_tag', '}}', $args, $context ); |
1364
|
|
|
|
1365
|
|
|
/** |
1366
|
|
|
* Loop through each of the tags to replace and replace both `{{tag}}` and `{{ tag }}` with the values |
1367
|
|
|
* @since 1.11 |
1368
|
|
|
*/ |
1369
|
18 |
|
foreach ( $placeholders as $tag => $value ) { |
1370
|
|
|
|
1371
|
|
|
// If the tag doesn't exist just skip it |
1372
|
18 |
|
if ( false === strpos( $html, $open_tag . $tag . $close_tag ) && false === strpos( $html, $open_tag . ' ' . $tag . ' ' . $close_tag ) ){ |
1373
|
18 |
|
continue; |
1374
|
|
|
} |
1375
|
|
|
|
1376
|
|
|
// Array to search |
1377
|
|
|
$search = array( |
1378
|
18 |
|
$open_tag . $tag . $close_tag, |
1379
|
18 |
|
$open_tag . ' ' . $tag . ' ' . $close_tag, |
1380
|
|
|
); |
1381
|
|
|
|
1382
|
|
|
/** |
1383
|
|
|
* `gravityview/field_output/context/{$tag}` Allow users to filter content on context |
1384
|
|
|
* @since 1.11 |
1385
|
|
|
* @param string $value The content to be shown instead of the {{tag}} placeholder |
1386
|
|
|
* @param array $args Arguments passed to the function |
1387
|
|
|
* @since 2.0 |
1388
|
|
|
* @param \GV\Template_Context $context The context. |
1389
|
|
|
*/ |
1390
|
18 |
|
$value = apply_filters( 'gravityview/field_output/context/' . $tag, $value, $args, $context ); |
1391
|
|
|
|
1392
|
|
|
// Finally do the replace |
1393
|
18 |
|
$html = str_replace( $search, $value, $html ); |
1394
|
|
|
} |
1395
|
|
|
|
1396
|
|
|
/** |
1397
|
|
|
* @filter `gravityview_field_output` Modify field HTML output |
1398
|
|
|
* @param string $html Existing HTML output |
1399
|
|
|
* @param array $args Arguments passed to the function |
1400
|
|
|
* @since 2.0 |
1401
|
|
|
* @param \GV\Template_Context $context The context. |
1402
|
|
|
*/ |
1403
|
18 |
|
$html = apply_filters( 'gravityview_field_output', $html, $args, $context ); |
1404
|
|
|
|
1405
|
|
|
/** |
1406
|
|
|
* @filter `gravityview/field_output/html` Modify field HTML output |
1407
|
|
|
* @param string $html Existing HTML output |
1408
|
|
|
* @param array $args Arguments passed to the function |
1409
|
|
|
* @since 2.0 |
1410
|
|
|
* @param \GV\Template_Context $context The context. |
1411
|
|
|
*/ |
1412
|
18 |
|
$html = apply_filters( 'gravityview/field_output/html', $html, $args, $context ); |
1413
|
|
|
|
1414
|
18 |
|
return $html; |
1415
|
|
|
} |
1416
|
|
|
|
This check looks for the bodies of
if
statements that have no statements or where all statements have been commented out. This may be the result of changes for debugging or the code may simply be obsolete.These
if
bodies can be removed. If you have an empty if but statements in theelse
branch, consider inverting the condition.could be turned into
This is much more concise to read.