GravityView  1.19.4
The best, easiest way to display Gravity Forms entries on your website.
class.render.settings.php
Go to the documentation of this file.
1 <?php
2 /**
3  * Renders field/widget options and view settings
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.2
12  */
13 
15 
16  /**
17  * Get the default options for a standard field.
18  *
19  * @param string $field_type Type of field options to render (`field` or `widget`)
20  * @param string $template_id Table slug
21  * @param float $field_id GF Field ID - Example: `3`, `5.2`, `entry_link`, `created_by`
22  * @param string $context What context are we in? Example: `single` or `directory`
23  * @param string $input_type (textarea, list, select, etc.)
24  * @return array Array of field options with `label`, `value`, `type`, `default` keys
25  */
26  public static function get_default_field_options( $field_type, $template_id, $field_id, $context, $input_type ) {
27 
28  $field_options = array();
29 
30  if( 'field' === $field_type ) {
31 
32  // Default options - fields
33  $field_options = array(
34  'show_label' => array(
35  'type' => 'checkbox',
36  'label' => __( 'Show Label', 'gravityview' ),
37  'value' => true,
38  ),
39  'custom_label' => array(
40  'type' => 'text',
41  'label' => __( 'Custom Label:', 'gravityview' ),
42  'value' => '',
43  'merge_tags' => true,
44  ),
45  'custom_class' => array(
46  'type' => 'text',
47  'label' => __( 'Custom CSS Class:', 'gravityview' ),
48  'desc' => __( 'This class will be added to the field container', 'gravityview'),
49  'value' => '',
50  'merge_tags' => true,
51  'tooltip' => 'gv_css_merge_tags',
52  ),
53  'only_loggedin' => array(
54  'type' => 'checkbox',
55  'label' => __( 'Make visible only to logged-in users?', 'gravityview' ),
56  'value' => ''
57  ),
58  'only_loggedin_cap' => array(
59  'type' => 'select',
60  'label' => __( 'Make visible for:', 'gravityview' ),
61  'options' => self::get_cap_choices( $template_id, $field_id, $context, $input_type ),
62  'class' => 'widefat',
63  'value' => 'read',
64  ),
65  );
66 
67  // Match Table as well as DataTables
68  if( preg_match( '/table/ism', $template_id ) && 'directory' === $context ) {
69  $field_options['width'] = array(
70  'type' => 'number',
71  'label' => __('Percent Width', 'gravityview'),
72  'desc' => __( 'Leave blank for column width to be based on the field content.', 'gravityview'),
73  'class' => 'code widefat',
74  'value' => '',
75  );
76  }
77 
78  }
79 
80  /**
81  * @filter `gravityview_template_{$field_type}_options` Filter the field options by field type. Filter names: `gravityview_template_field_options` and `gravityview_template_widget_options`
82  * @param[in,out] array Array of field options with `label`, `value`, `type`, `default` keys
83  * @param[in] string $template_id Table slug
84  * @param[in] float $field_id GF Field ID - Example: `3`, `5.2`, `entry_link`, `created_by`
85  * @param[in] string $context What context are we in? Example: `single` or `directory`
86  * @param[in] string $input_type (textarea, list, select, etc.)
87  */
88  $field_options = apply_filters( "gravityview_template_{$field_type}_options", $field_options, $template_id, $field_id, $context, $input_type );
89 
90  /**
91  * @filter `gravityview_template_{$input_type}_options` Filter the field options by input type (`$input_type` examples: `textarea`, `list`, `select`, etc.)
92  * @param[in,out] array Array of field options with `label`, `value`, `type`, `default` keys
93  * @param[in] string $template_id Table slug
94  * @param[in] float $field_id GF Field ID - Example: `3`, `5.2`, `entry_link`, `created_by`
95  * @param[in] string $context What context are we in? Example: `single` or `directory`
96  * @param[in] string $input_type (textarea, list, select, etc.)
97  */
98  $field_options = apply_filters( "gravityview_template_{$input_type}_options", $field_options, $template_id, $field_id, $context, $input_type );
99 
100  return $field_options;
101  }
102 
103  /**
104  * Get capabilities options for GravityView
105  *
106  * Parameters are only to pass to the filter.
107  *
108  * @param string $template_id Optional. View slug
109  * @param string $field_id Optional. GF Field ID - Example: `3`, `5.2`, `entry_link`, `created_by`
110  * @param string $context Optional. What context are we in? Example: `single` or `directory`
111  * @param string $input_type Optional. (textarea, list, select, etc.)
112  * @return array Associative array, with the key being the capability and the value being the label shown.
113  */
114  static public function get_cap_choices( $template_id = '', $field_id = '', $context = '', $input_type = '' ) {
115 
116  $select_cap_choices = array(
117  'read' => __( 'Any Logged-In User', 'gravityview' ),
118  'publish_posts' => __( 'Author Or Higher', 'gravityview' ),
119  'gravityforms_view_entries' => __( 'Can View Gravity Forms Entries', 'gravityview' ),
120  'delete_others_posts' => __( 'Editor Or Higher', 'gravityview' ),
121  'gravityforms_edit_entries' => __( 'Can Edit Gravity Forms Entries', 'gravityview' ),
122  'manage_options' => __( 'Administrator', 'gravityview' ),
123  );
124 
125  if( is_multisite() ) {
126  $select_cap_choices['manage_network'] = __('Multisite Super Admin', 'gravityview' );
127  }
128 
129  /**
130  * @filter `gravityview_field_visibility_caps` Modify the capabilities shown in the field dropdown
131  * @see http://docs.gravityview.co/article/96-how-to-modify-capabilities-shown-in-the-field-only-visible-to-dropdown
132  * @since 1.0.1
133  * @param array $select_cap_choices Associative rray of role slugs with labels ( `manage_options` => `Administrator` )
134  * @param string $template_id Optional. View slug
135  * @param string $field_id Optional. GF Field ID - Example: `3`, `5.2`, `entry_link`, `created_by`
136  * @param string $context Optional. What context are we in? Example: `single` or `directory`
137  * @param string $input_type Optional. (textarea, list, select, etc.)
138  */
139  $select_cap_choices = apply_filters('gravityview_field_visibility_caps', $select_cap_choices, $template_id, $field_id, $context, $input_type );
140 
141  return $select_cap_choices;
142  }
143 
144 
145  /**
146  * Render Field Options html (shown through a dialog box)
147  *
148  * @see GravityView_Ajax::get_field_options
149  * @see GravityView_Admin_Views::render_active_areas
150  *
151  * @access public
152  * @param string $field_type field / widget
153  * @param string $template_id
154  * @param string $field_id
155  * @param string $field_label
156  * @param string $area
157  * @param string $uniqid (default: '')
158  * @param string $current (default: '')
159  * @param string $context (default: 'single')
160  * @param array $item Field or widget array that's being rendered
161  *
162  * @return string HTML of dialog box
163  */
164  public static function render_field_options( $field_type, $template_id, $field_id, $field_label, $area, $input_type = NULL, $uniqid = '', $current = '', $context = 'single', $item = array() ) {
165 
166  if( empty( $uniqid ) ) {
167  //generate a unique field id
168  $uniqid = uniqid('', false);
169  }
170 
171  // get field/widget options
172  $options = self::get_default_field_options( $field_type, $template_id, $field_id, $context, $input_type );
173 
174  // two different post arrays, depending of the field type
175  $name_prefix = $field_type .'s' .'['. $area .']['. $uniqid .']';
176 
177  // build output
178  $output = '';
179  $output .= '<input type="hidden" class="field-key" name="'. $name_prefix .'[id]" value="'. esc_attr( $field_id ) .'">';
180  $output .= '<input type="hidden" class="field-label" name="'. $name_prefix .'[label]" value="'. esc_attr( $field_label ) .'">';
181 
182  // If there are no options, return what we got.
183  if(empty($options)) {
184 
185  // This is here for checking if the output is empty in render_label()
186  $output .= '<!-- No Options -->';
187 
188  return $output;
189  }
190 
191  $output .= '<div class="gv-dialog-options" title="'. esc_attr( sprintf( __( 'Options: %s', 'gravityview' ) , strip_tags( html_entity_decode( $field_label ) ) ) ) .'">';
192 
193  /**
194  * @since 1.8
195  */
196  if( !empty( $item['subtitle'] ) ) {
197  $output .= '<div class="subtitle">' . $item['subtitle'] . '</div>';
198  }
199 
200  foreach( $options as $key => $option ) {
201 
202  $value = isset( $current[ $key ] ) ? $current[ $key ] : NULL;
203 
204  $field_output = self::render_field_option( $name_prefix . '['. $key .']' , $option, $value);
205 
206  // The setting is empty
207  if( empty( $field_output ) ) {
208  continue;
209  }
210 
211  switch( $option['type'] ) {
212  // Hide hidden fields
213  case 'hidden':
214  $output .= '<div class="gv-setting-container gv-setting-container-'. esc_attr( $key ) . ' screen-reader-text">'. $field_output . '</div>';
215  break;
216  default:
217  $output .= '<div class="gv-setting-container gv-setting-container-'. esc_attr( $key ) . '">'. $field_output .'</div>';
218  }
219  }
220 
221  // close options window
222  $output .= '</div>';
223 
224  return $output;
225 
226  }
227 
228 
229 
230  /**
231  * Handle rendering a field option form element
232  *
233  * @param string $name Input `name` attribute
234  * @param array $option Associative array of options. See the $defaults variable for available keys.
235  * @param mixed $curr_value Current value of option
236  * @return string HTML output of option
237  */
238  public static function render_field_option( $name = '', $option, $curr_value = NULL ) {
239 
240  $output = '';
241 
242  /**
243  * @deprecated setting index 'default' was replaced by 'value'
244  * @see GravityView_FieldType::get_field_defaults
245  */
246  if( !empty( $option['default'] ) && empty( $option['value'] ) ) {
247  $option['value'] = $option['default'];
248  _deprecated_function( 'GravityView_FieldType::get_field_defaults', '1.1.7', '[value] instead of [default] when defining the setting '. $name .' details' );
249  }
250 
251  // prepare to render option field type
252  if( isset( $option['type'] ) ) {
253 
254  $type_class = self::load_type_class( $option );
255 
256  if( class_exists( $type_class ) ) {
257 
258  /** @var GravityView_FieldType $render_type */
259  $render_type = new $type_class( $name, $option, $curr_value );
260 
261  ob_start();
262 
263  $render_type->render_option();
264 
265  $output = ob_get_clean();
266 
267  /**
268  * @filter `gravityview/option/output/{option_type}` Modify the output for a GravityView setting.\n
269  * `$option_type` is the type of setting (`radio`, `text`, etc.)
270  * @param[in,out] string $output field class name
271  * @param[in] array $option option field data
272  */
273  $output = apply_filters( "gravityview/option/output/{$option['type']}" , $output, $option );
274  }
275 
276  } // isset option[type]
277 
278  return $output;
279  }
280 
281 
282 
283 
284 
285 
286  /**
287  * Output a table row for view settings
288  * @param string $key The key of the input
289  * @param array $current_settings Associative array of current settings to use as input values, if set. If not set, the defaults are used.
290  * @param string $override_input [description]
291  * @param string $name [description]
292  * @param string $id [description]
293  * @return void [description]
294  */
295  public static function render_setting_row( $key = '', $current_settings = array(), $override_input = null, $name = 'template_settings[%s]', $id = 'gravityview_se_%s' ) {
296 
297  $setting = GravityView_View_Data::get_default_arg( $key, true );
298 
299  // If the key doesn't exist, there's something wrong.
300  if( empty( $setting ) ) { return; }
301 
302  /**
303  * @deprecated setting index 'name' was replaced by 'label'
304  * @see GravityView_FieldType::get_field_defaults
305  */
306  if( isset( $setting['name'] ) && empty( $setting['label'] ) ) {
307  $setting['label'] = $setting['name'];
308  _deprecated_function( 'GravityView_FieldType::get_field_defaults', '1.1.7', '[label] instead of [name] when defining the setting '. $key .' details' );
309  }
310 
311  $name = esc_attr( sprintf( $name, $key ) );
312  $setting['id'] = esc_attr( sprintf( $id, $key ) );
313  $setting['tooltip'] = 'gv_' . $key;
314 
315  // Use default if current setting isn't set.
316  $curr_value = isset( $current_settings[ $key ] ) ? $current_settings[ $key ] : $setting['value'];
317 
318  // default setting type = text
319  $setting['type'] = empty( $setting['type'] ) ? 'text' : $setting['type'];
320 
321  // merge tags
322  if( !isset( $setting['merge_tags'] ) ) {
323  if( $setting['type'] === 'text' ) {
324  $setting['merge_tags'] = true;
325  } else {
326  $setting['merge_tags'] = false;
327  }
328  }
329 
330  $output = '';
331 
332  // render the setting
333  $type_class = self::load_type_class( $setting );
334  if( class_exists( $type_class ) ) {
335  /** @var GravityView_FieldType $render_type */
336  $render_type = new $type_class( $name, $setting, $curr_value );
337  ob_start();
338  $render_type->render_setting( $override_input );
339  $output = ob_get_clean();
340  }
341 
342  // Check if setting is specific for a template
343  if( !empty( $setting['show_in_template'] ) ) {
344  if( !is_array( $setting['show_in_template'] ) ) {
345  $setting['show_in_template'] = array( $setting['show_in_template'] );
346  }
347  $show_if = ' data-show-if="'. implode( ' ', $setting['show_in_template'] ).'"';
348  } else {
349  $show_if = '';
350  }
351 
352  if( ! empty( $setting['requires'] ) ) {
353  $show_if .= sprintf( ' data-requires="%s"', $setting['requires'] );
354  }
355 
356  // output
357  echo '<tr valign="top" '. $show_if .'>' . $output . '</tr>';
358 
359  }
360 
361 
362  /**
363  * Given a field type calculates the php class. If not found try to load it.
364  * @param array $field
365  * @return string type class name
366  */
367  public static function load_type_class( $field = NULL ) {
368 
369  if( empty( $field['type'] ) ) {
370  return NULL;
371  }
372 
373  /**
374  * @filter `gravityview/setting/class/{field_type}`
375  * @param string $class_suffix field class suffix; `GravityView_FieldType_{$class_suffix}`
376  * @param array $field field data
377  */
378  $type_class = apply_filters( "gravityview/setting/class/{$field['type']}", 'GravityView_FieldType_' . $field['type'], $field );
379 
380  if( !class_exists( $type_class ) ) {
381 
382  /**
383  * @filter `gravityview/setting/class_file/{field_type}`
384  * @param string $field_type_include_path field class file path
385  * @param array $field field data
386  */
387  $class_file = apply_filters( "gravityview/setting/class_file/{$field['type']}", GRAVITYVIEW_DIR . "includes/admin/field-types/type_{$field['type']}.php", $field );
388 
389  if( $class_file ) {
390  if( file_exists( $class_file ) ) {
391  require_once( $class_file );
392  }
393  }
394 
395  }
396 
397  return $type_class;
398  }
399 
400 
401 
402 
403 
404  /**
405  * @deprecated 1.2
406  * Render the HTML for a checkbox input to be used on the field & widgets options
407  * @param string $name , name attribute
408  * @param string $current current value
409  * @return string html tags
410  */
411  public static function render_checkbox_option( $name = '', $id = '', $current = '' ) {
412 
413  _deprecated_function( __METHOD__, '1.2', 'GravityView_FieldType_checkbox::render_input' );
414 
415  $output = '<input name="'. esc_attr( $name ) .'" type="hidden" value="0">';
416  $output .= '<input name="'. esc_attr( $name ) .'" id="'. esc_attr( $id ) .'" type="checkbox" value="1" '. checked( $current, '1', false ) .' >';
417 
418  return $output;
419  }
420 
421 
422  /**
423  * @deprecated 1.2
424  * Render the HTML for an input text to be used on the field & widgets options
425  * @param string $name Unique name of the field. Exampe: `fields[directory_list-title][5374ff6ab128b][custom_label]`
426  * @param string $current [current value]
427  * @param string $add_merge_tags Add merge tags to the input?
428  * @param array $args Field settings, including `class` key for CSS class
429  * @return string [html tags]
430  */
431  public static function render_text_option( $name = '', $id = '', $current = '', $add_merge_tags = NULL, $args = array() ) {
432 
433  _deprecated_function( __METHOD__, '1.2', 'GravityView_FieldType_text::render_input' );
434 
435  // Show the merge tags if the field is a list view
436  $is_list = ( preg_match( '/_list-/ism', $name ));
437 
438  // Or is a single entry view
439  $is_single = ( preg_match( '/single_/ism', $name ));
440  $show = ( $is_single || $is_list );
441 
442  $class = '';
443  // and $add_merge_tags is not false
444  if( $show && $add_merge_tags !== false || $add_merge_tags === 'force' ) {
445  $class = 'merge-tag-support mt-position-right mt-hide_all_fields ';
446  }
447 
448  $class .= !empty( $args['class'] ) ? $args['class'] : 'widefat';
449  $type = !empty( $args['type'] ) ? $args['type'] : 'text';
450 
451  return '<input name="'. esc_attr( $name ) .'" id="'. esc_attr( $id ) .'" type="'.esc_attr($type).'" value="'. esc_attr( $current ) .'" class="'.esc_attr( $class ).'">';
452  }
453 
454  /**
455  * @deprecated 1.2
456  * Render the HTML for an textarea input to be used on the field & widgets options
457  * @param string $name Unique name of the field. Exampe: `fields[directory_list-title][5374ff6ab128b][custom_label]`
458  * @param string $current [current value]
459  * @param string|boolean $add_merge_tags Add merge tags to the input?
460  * @param array $args Field settings, including `class` key for CSS class
461  * @return string [html tags]
462  */
463  public static function render_textarea_option( $name = '', $id = '', $current = '', $add_merge_tags = NULL, $args = array() ) {
464 
465  _deprecated_function( __METHOD__, '1.2', 'GravityView_FieldType_textarea::render_input' );
466 
467  // Show the merge tags if the field is a list view
468  $is_list = ( preg_match( '/_list-/ism', $name ));
469 
470  // Or is a single entry view
471  $is_single = ( preg_match( '/single_/ism', $name ));
472  $show = ( $is_single || $is_list );
473 
474  $class = '';
475  // and $add_merge_tags is not false
476  if( $show && $add_merge_tags !== false || $add_merge_tags === 'force' ) {
477  $class = 'merge-tag-support mt-position-right mt-hide_all_fields ';
478  }
479 
480  $class .= !empty( $args['class'] ) ? 'widefat '.$args['class'] : 'widefat';
481 
482  return '<textarea name="'. esc_attr( $name ) .'" id="'. esc_attr( $id ) .'" class="'.esc_attr( $class ).'">'. esc_textarea( $current ) .'</textarea>';
483  }
484 
485  /**
486  *
487  * Render the HTML for a select box to be used on the field & widgets options
488  * @deprecated 1.2
489  * @param string $name [name attribute]
490  * @param array $choices [select options]
491  * @param string $current [current value]
492  * @return string [html tags]
493  */
494  public static function render_select_option( $name = '', $id = '', $choices, $current = '' ) {
495 
496  _deprecated_function( __METHOD__, '1.2', 'GravityView_FieldType_select::render_input' );
497 
498  $output = '<select name="'. $name .'" id="'. $id .'">';
499  foreach( $choices as $value => $label ) {
500  $output .= '<option value="'. esc_attr( $value ) .'" '. selected( $value, $current, false ) .'>'. esc_html( $label ) .'</option>';
501  }
502  $output .= '</select>';
503 
504  return $output;
505  }
506 
507 
508 }
const GRAVITYVIEW_DIR
"GRAVITYVIEW_DIR" "./" The absolute path to the plugin directory
Definition: gravityview.php:35
static render_text_option($name= '', $id= '', $current= '', $add_merge_tags=NULL, $args=array())
$current_settings
static get_default_field_options($field_type, $template_id, $field_id, $context, $input_type)
Get the default options for a standard field.
static load_type_class($field=NULL)
Given a field type calculates the php class.
$class
static render_textarea_option($name= '', $id= '', $current= '', $add_merge_tags=NULL, $args=array())
static render_checkbox_option($name= '', $id= '', $current= '')
$field_id
Definition: time.php:17
static get_cap_choices($template_id= '', $field_id= '', $context= '', $input_type= '')
Get capabilities options for GravityView.
static render_select_option($name= '', $id= '', $choices, $current= '')
Render the HTML for a select box to be used on the field & widgets options.
static get_default_arg($key, $with_details=false)
Get a specific default setting.
Definition: class-data.php:518
static render_field_options($field_type, $template_id, $field_id, $field_label, $area, $input_type=NULL, $uniqid= '', $current= '', $context= 'single', $item=array())
Render Field Options html (shown through a dialog box)
$field
Definition: gquiz_grade.php:11