GravityView  2.1.1
The best, easiest way to display Gravity Forms entries on your website.
class-admin-views.php
Go to the documentation of this file.
1 <?php
2 /**
3  * Renders all the metaboxes on Add New / Edit View post type.
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 /** If this file is called directly, abort. */
15 if ( ! defined( 'ABSPATH' ) ) {
16  die;
17 }
18 
20 
21 
22 
23  function __construct() {
24  add_action( 'save_post', array( $this, 'save_postdata' ) );
25 
26  // set the blacklist field types across the entire plugin
27  add_filter( 'gravityview_blacklist_field_types', array( $this, 'default_field_blacklist' ), 10, 2 );
28 
29  // Tooltips
30  add_filter( 'gform_tooltips', array( $this, 'tooltips') );
31 
32  // adding styles and scripts
33  add_action( 'admin_enqueue_scripts', array( 'GravityView_Admin_Views', 'add_scripts_and_styles'), 999 );
34  add_filter( 'gform_noconflict_styles', array( $this, 'register_no_conflict') );
35  add_filter( 'gform_noconflict_scripts', array( $this, 'register_no_conflict') );
36  add_filter( 'gravityview_noconflict_styles', array( $this, 'register_no_conflict') );
37  add_filter( 'gravityview_noconflict_scripts', array( $this, 'register_no_conflict') );
38 
39  add_action( 'gravityview_render_directory_active_areas', array( $this, 'render_directory_active_areas'), 10, 4 );
40  add_action( 'gravityview_render_widgets_active_areas', array( $this, 'render_widgets_active_areas'), 10, 3 );
41  add_action( 'gravityview_render_field_pickers', array( $this, 'render_field_pickers') );
42  add_action( 'gravityview_render_available_fields', array( $this, 'render_available_fields'), 10, 2 );
43  add_action( 'gravityview_render_available_widgets', array( $this, 'render_available_widgets') );
44  add_action( 'gravityview_render_active_areas', array( $this, 'render_active_areas'), 10, 5 );
45 
46  // @todo check if this hook is needed..
47  //add_action( 'gravityview_render_field_options', array( $this, 'render_field_options'), 10, 9 );
48 
49  // Add Connected Form column
50  add_filter('manage_gravityview_posts_columns' , array( $this, 'add_post_type_columns' ) );
51 
52  add_filter( 'gform_toolbar_menu', array( 'GravityView_Admin_Views', 'gform_toolbar_menu' ), 10, 2 );
53  add_action( 'gform_form_actions', array( 'GravityView_Admin_Views', 'gform_toolbar_menu' ), 10, 2 );
54 
55  add_action( 'manage_gravityview_posts_custom_column', array( $this, 'add_custom_column_content'), 10, 2 );
56 
57  add_action( 'restrict_manage_posts', array( $this, 'add_view_dropdown' ) );
58 
59  add_action( 'pre_get_posts', array( $this, 'filter_pre_get_posts_by_gravityview_form_id' ) );
60 
61  add_filter( 'gravityview/support_port/localization_data', array( $this, 'suggest_support_articles' ) );
62 
63  }
64 
65  /**
66  * When on the Add/Edit View screen, suggest most popular articles related to that
67  *
68  * @param array $localization_data Data to be passed to the Support Port JS
69  *
70  * @return array
71  */
72  function suggest_support_articles( $localization_data = array() ) {
73 
74  if( ! gravityview()->request->is_view() ) {
75  return $localization_data;
76  }
77 
78  $localization_data['suggest'] = array(
79  '57ef23539033602e61d4a560',
80  '54c67bb9e4b0512429885513',
81  '54c67bb9e4b0512429885512',
82  '54c67bbbe4b07997ea3f3f6b',
83  '54d1a33ae4b086c0c0964ce9',
84  '57ef253c9033602e61d4a563',
85  '552355bfe4b0221aadf2572b',
86  '54c67bcde4b051242988553e',
87  );
88 
89  return $localization_data;
90  }
91 
92  /**
93  * @since 1.15
94  * @param WP_Query $query
95  */
96  public function filter_pre_get_posts_by_gravityview_form_id( &$query ) {
97  global $pagenow;
98 
99  if ( !is_admin() ) {
100  return;
101  }
102 
103  $form_id = isset( $_GET['gravityview_form_id'] ) ? (int) $_GET['gravityview_form_id'] : false;
104 
105  if( 'edit.php' !== $pagenow || ! $form_id || ! isset( $query->query_vars[ 'post_type' ] ) ) {
106  return;
107  }
108 
109  if ( $query->query_vars[ 'post_type' ] == 'gravityview' ) {
110  $query->set( 'meta_query', array(
111  array(
112  'key' => '_gravityview_form_id',
113  'value' => $form_id,
114  )
115  ) );
116  }
117  }
118 
119  function add_view_dropdown() {
120  $current_screen = get_current_screen();
121 
122  if( 'gravityview' !== $current_screen->post_type ) {
123  return;
124  }
125 
127  $current_form = \GV\Utils::_GET( 'gravityview_form_id' );
128  // If there are no forms to select, show no forms.
129  if( !empty( $forms ) ) { ?>
130  <select name="gravityview_form_id" id="gravityview_form_id">
131  <option value="" <?php selected( '', $current_form, true ); ?>><?php esc_html_e( 'All forms', 'gravityview' ); ?></option>
132  <?php foreach( $forms as $form ) { ?>
133  <option value="<?php echo $form['id']; ?>" <?php selected( $form['id'], $current_form, true ); ?>><?php echo esc_html( $form['title'] ); ?></option>
134  <?php } ?>
135  </select>
136  <?php }
137  }
138 
139 
140  /**
141  * @deprecated since 1.2
142  * Start using GravityView_Render_Settings::render_setting_row
143  */
144  public static function render_setting_row( $key = '', $current_settings = array(), $override_input = null, $name = 'template_settings[%s]', $id = 'gravityview_se_%s' ) {
145  _deprecated_function( 'GravityView_Admin_Views::render_setting_row', '1.1.7', 'GravityView_Render_Settings::render_setting_row' );
146  GravityView_Render_Settings::render_setting_row( $key, $current_settings, $override_input, $name , $id );
147  }
148 
149  /**
150  * @deprecated since 1.2
151  * Start using GravityView_Render_Settings::render_field_option
152  */
153  public static function render_field_option( $name = '', $option, $curr_value = NULL ) {
154  _deprecated_function( 'GravityView_Admin_Views::render_field_option', '1.1.7', 'GravityView_Render_Settings::render_field_option' );
155  return GravityView_Render_Settings::render_field_option( $name, $option, $curr_value );
156  }
157 
158 
159  /**
160  * Add a GravityView menu to the Form Toolbar with connected views
161  * @param array $menu_items Menu items, as set in GFForms::top_toolbar()
162  * @param int $id ID of the current Gravity form
163  * @return array Modified array
164  */
165  public static function gform_toolbar_menu( $menu_items = array(), $id = NULL ) {
166 
167  $connected_views = gravityview_get_connected_views( $id, array( 'post_status' => 'any' ) );
168 
169  $priority = 0;
170 
171  if( 'form_list' === GFForms::get_page() ) {
172  $priority = 790;
173  }
174 
175  if( empty( $connected_views ) ) {
176 
177  $menu_items['gravityview'] = array(
178  'label' => esc_attr__( 'Create a View', 'gravityview' ),
179  'icon' => '<i class="fa fa-lg gv-icon-astronaut-head gv-icon"></i>',
180  'title' => esc_attr__( 'Create a View using this form as a data source', 'gravityview' ),
181  'url' => admin_url( 'post-new.php?post_type=gravityview&form_id=' . $id ),
182  'menu_class' => 'gv_connected_forms gf_form_toolbar_settings',
183  'priority' => $priority,
184  'capabilities' => array( 'edit_gravityviews' ),
185  );
186 
187  return $menu_items;
188  }
189 
190  $sub_menu_items = array();
191  foreach ( (array)$connected_views as $view ) {
192 
193  if( ! GVCommon::has_cap( 'edit_gravityview', $view->ID ) ) {
194  continue;
195  }
196 
197  $label = empty( $view->post_title ) ? sprintf( __('No Title (View #%d)', 'gravityview' ), $view->ID ) : $view->post_title;
198 
199  $sub_menu_items[] = array(
200  'label' => esc_attr( $label ),
201  'url' => admin_url( 'post.php?action=edit&post='.$view->ID ),
202  );
203  }
204 
205  // If there were no items added, then let's create the parent menu
206  if( $sub_menu_items ) {
207 
208  $sub_menu_items[] = array(
209  'label' => esc_attr__( 'Create a View', 'gravityview' ),
210  'link_class' => 'gv-create-view',
211  'title' => esc_attr__( 'Create a View using this form as a data source', 'gravityview' ),
212  'url' => admin_url( 'post-new.php?post_type=gravityview&form_id=' . $id ),
213  'capabilities' => array( 'edit_gravityviews' ),
214  );
215 
216  // Make sure Gravity Forms uses the submenu; if there's only one item, it uses a link instead of a dropdown
217  $sub_menu_items[] = array(
218  'url' => '#',
219  'label' => '',
220  'menu_class' => 'hidden',
221  'capabilities' => '',
222  );
223 
224  $menu_items['gravityview'] = array(
225  'label' => __( 'Connected Views', 'gravityview' ),
226  'icon' => '<i class="fa fa-lg gv-icon-astronaut-head gv-icon"></i>',
227  'title' => __( 'GravityView Views using this form as a data source', 'gravityview' ),
228  'url' => '#',
229  'onclick' => 'return false;',
230  'menu_class' => 'gv_connected_forms gf_form_toolbar_settings',
231  'sub_menu_items' => $sub_menu_items,
232  'priority' => $priority,
233  'capabilities' => array( 'edit_gravityviews' ),
234  );
235  }
236 
237  return $menu_items;
238  }
239 
240  /**
241  * List the field types without presentation properties (on a View context)
242  *
243  * @param array $array Existing field types to add to a blacklist
244  * @param string|null $context Context for the blacklist. Default: NULL.
245  * @access public
246  * @return array Default blacklist fields merged with existing blacklist fields
247  */
248  function default_field_blacklist( $array = array(), $context = NULL ) {
249 
250  $add = array( 'captcha', 'page' );
251 
252  // Don't allowing editing the following values:
253  if( $context === 'edit' ) {
254  $add[] = 'post_id';
255  }
256 
257  $return = array_merge( $array, $add );
258 
259  return $return;
260  }
261 
262  /**
263  * Add tooltip text for use throughout the UI
264  * @param array $tooltips Array of Gravity Forms tooltips
265  * @return array Modified tooltips array
266  */
267  public function tooltips( $tooltips = array() ) {
268 
269  $gv_tooltips = array();
270 
271  // Generate tooltips for View settings
272  $default_args = \GV\View_Settings::defaults( true );
273 
274  foreach ( $default_args as $key => $arg ) {
275 
276  // If an arg has `tooltip` defined, but it's false, don't display a tooltip
277  if( isset( $arg['tooltip'] ) && empty( $arg['tooltip'] ) ) { continue; }
278 
279  // By default, use `tooltip` if defined.
280  $tooltip = empty( $arg['tooltip'] ) ? NULL : $arg['tooltip'];
281 
282  // Otherwise, use the description as a tooltip.
283  if( empty( $tooltip ) && !empty( $arg['desc'] ) ) {
284  $tooltip = $arg['desc'];
285  }
286 
287  // If there's no tooltip set, continue
288  if( empty( $tooltip ) ) {
289  continue;
290  }
291 
292  // Add the tooltip
293  $gv_tooltips[ 'gv_'.$key ] = array(
294  'title' => $arg['label'],
295  'value' => $tooltip,
296  );
297 
298  }
299 
300  $gv_tooltips['gv_css_merge_tags'] = array(
301  'title' => __('CSS Merge Tags', 'gravityview'),
302  'value' => sprintf( __( 'Developers: The CSS classes will be sanitized using the %ssanitize_title_with_dashes()%s function.', 'gravityview'), '<code>', '</code>' )
303  );
304 
305  /**
306  * @filter `gravityview_tooltips` The tooltips GravityView adds to the Gravity Forms tooltip array
307  * @param array $gv_tooltips Associative array with unique keys containing array of `title` and `value` keys, as expected by `gform_tooltips` filter
308  * @deprecated Renamed to `gravityview/metaboxes/tooltips`
309  */
310  $gv_tooltips = apply_filters( 'gravityview_tooltips', $gv_tooltips );
311 
312  /**
313  * @filter `gravityview/metaboxes/tooltips` The tooltips GravityView adds to the Gravity Forms tooltip array
314  * @param array $gv_tooltips Associative array with unique keys containing array of `title` and `value` keys, as expected by `gform_tooltips` filter
315  */
316  $gv_tooltips = apply_filters( 'gravityview/metaboxes/tooltips', $gv_tooltips );
317 
318  foreach ( $gv_tooltips as $key => $tooltip ) {
319 
320  $title = empty( $tooltip['title'] ) ? '' : '<h6>'.esc_html( $tooltip['title'] ) .'</h6>';
321 
322  $tooltips[ $key ] = $title . wpautop( esc_html( $tooltip['value'] ) );
323  }
324 
325  return $tooltips;
326  }
327 
328  /**
329  * Add the Data Source information
330  *
331  * @param null $column_name
332  * @param $post_id
333  *
334  * @return void
335  */
336  public function add_custom_column_content( $column_name = NULL, $post_id ) {
337 
338  $output = '';
339 
340  switch ( $column_name ) {
341  case 'gv_template':
342 
343  $template_id = gravityview_get_template_id( $post_id );
344 
345  // All Views should have a connected form. If it doesn't, that's not right.
346  if ( empty( $template_id ) ) {
347  gravityview()->log->error( 'View ID {view_id} does not have a connected template.', array( 'view_id' => $post_id ) );
348  break;
349  }
350 
352 
353  $template = isset( $templates[ $template_id ] ) ? $templates[ $template_id ] : false;
354 
355  // Generate backup if label doesn't exist: `example_name` => `Example Name`
356  $template_id_pretty = ucwords( implode( ' ', explode( '_', $template_id ) ) );
357 
358  $output = $template ? $template['label'] : $template_id_pretty;
359 
360  break;
361 
362  case 'gv_connected_form':
363 
364  $form_id = gravityview_get_form_id( $post_id );
365 
366  // All Views should have a connected form. If it doesn't, that's not right.
367  if ( empty( $form_id ) ) {
368  gravityview()->log->error( 'View ID {view_id} does not have a connected GF form.', array( 'view_id' => $post_id ) );
369  $output = __( 'Not connected.', 'gravityview' );
370  break;
371  }
372 
374 
375  if ( ! $form ) {
376  gravityview()->log->error( 'Connected form not found: Form #{form_id}', array( 'form_id' => $form_id ) );
377 
378  $output = __( 'The connected form can not be found; it may no longer exist.', 'gravityview' );
379  } else {
380  $output = self::get_connected_form_links( $form );
381  }
382 
383  break;
384  }
385 
386  echo $output;
387  }
388 
389 
390  /**
391  * Get HTML links relating to a connected form, like Edit, Entries, Settings, Preview
392  * @param array|int $form Gravity Forms forms array, or the form ID
393  * @param boolean $include_form_link Whether to include the bold name of the form in the output
394  * @return string HTML links
395  */
396  static public function get_connected_form_links( $form, $include_form_link = true ) {
397 
398  // Either the form is empty or the form ID is 0, not yet set.
399  if( empty( $form ) ) {
400  return '';
401  }
402 
403  // The $form is passed as the form ID
404  if( !is_array( $form ) ) {
406  }
407 
408  $form_id = $form['id'];
409  $links = array();
410 
411  if( GVCommon::has_cap( 'gravityforms_edit_forms' ) ) {
412  $form_url = admin_url( sprintf( 'admin.php?page=gf_edit_forms&amp;id=%d', $form_id ) );
413  $form_link = '<strong class="gv-form-title">'.gravityview_get_link( $form_url, $form['title'], 'class=row-title' ).'</strong>';
414  $links[] = '<span>'.gravityview_get_link( $form_url, __('Edit Form', 'gravityview') ).'</span>';
415  } else {
416  $form_link = '<strong class="gv-form-title">'. esc_html( $form['title'] ). '</strong>';
417  }
418 
419  if( GVCommon::has_cap( 'gravityforms_view_entries' ) ) {
420  $entries_url = admin_url( sprintf( 'admin.php?page=gf_entries&amp;id=%d', $form_id ) );
421  $links[] = '<span>'.gravityview_get_link( $entries_url, __('Entries', 'gravityview') ).'</span>';
422  }
423 
424  if( GVCommon::has_cap( array( 'gravityforms_edit_settings', 'gravityview_view_settings' ) ) ) {
425  $settings_url = admin_url( sprintf( 'admin.php?page=gf_edit_forms&amp;view=settings&amp;id=%d', $form_id ) );
426  $links[] = '<span>'.gravityview_get_link( $settings_url, __('Settings', 'gravityview'), 'title='.__('Edit settings for this form', 'gravityview') ).'</span>';
427  }
428 
429  if( GVCommon::has_cap( array("gravityforms_edit_forms", "gravityforms_create_form", "gravityforms_preview_forms") ) ) {
430  $preview_url = site_url( sprintf( '?gf_page=preview&amp;id=%d', $form_id ) );
431  $links[] = '<span>'.gravityview_get_link( $preview_url, __('Preview Form', 'gravityview'), 'title='.__('Preview this form', 'gravityview') ).'</span>';
432  }
433 
434  $output = '';
435 
436  if( !empty( $include_form_link ) ) {
437  $output .= $form_link;
438  }
439 
440  /**
441  * @filter `gravityview_connected_form_links` Modify the links shown in the Connected Form links
442  * @since 1.6
443  * @param array $links Links to show
444  * @param array $form Gravity Forms form array
445  */
446  $links = apply_filters( 'gravityview_connected_form_links', $links, $form );
447 
448  $output .= '<div class="row-actions">'. implode( ' | ', $links ) .'</div>';
449 
450  return $output;
451  }
452 
453  /**
454  * Add the Data Source column to the Views page
455  * @param array $columns Columns array
456  */
457  public function add_post_type_columns( $columns ) {
458 
459  // Get the date column and save it for later to add back in.
460  // This adds it after the Data Source column.
461  // This way, we don't need to do array_slice, array_merge, etc.
462  $date = $columns['date'];
463  unset( $columns['date'] );
464 
465  $data_source_required_caps = array(
466  'gravityforms_edit_forms',
467  'gravityforms_view_entries',
468  'gravityforms_edit_settings',
469  'gravityview_view_settings',
470  'gravityforms_create_form',
471  'gravityforms_preview_forms',
472  );
473 
474  if( GVCommon::has_cap( $data_source_required_caps ) ) {
475  $columns['gv_connected_form'] = __( 'Data Source', 'gravityview' );
476  }
477 
478  $columns['gv_template'] = _x( 'Template', 'Column title that shows what template is being used for Views', 'gravityview' );
479 
480  // Add the date back in.
481  $columns['date'] = $date;
482 
483  return $columns;
484  }
485 
486  /**
487  * Save View configuration
488  *
489  * @access public
490  * @param int $post_id Currently saved Post ID
491  * @return void
492  */
493  function save_postdata( $post_id ) {
494 
495  if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ){
496  return;
497  }
498 
499  // validate post_type
500  if ( ! isset( $_POST['post_type'] ) || 'gravityview' != $_POST['post_type'] ) {
501  return;
502  }
503 
504  // validate user can edit and save View
505  if ( ! GVCommon::has_cap( 'edit_gravityview', $post_id ) ) {
506  gravityview()->log->error( 'Current user does not have the capability to edit View {view_id}', array( 'view_id' => $post_id, 'data' => wp_get_current_user() ) );
507  return;
508  }
509 
510  gravityview()->log->debug( '[save_postdata] Saving View post type.', array( 'data' => $_POST ) );
511 
512  $statii = array();
513 
514  // check if this is a start fresh View
515  if ( isset( $_POST['gravityview_select_form_nonce'] ) && wp_verify_nonce( $_POST['gravityview_select_form_nonce'], 'gravityview_select_form' ) ) {
516 
517  $form_id = !empty( $_POST['gravityview_form_id'] ) ? $_POST['gravityview_form_id'] : '';
518  // save form id
519  $statii['form_id'] = update_post_meta( $post_id, '_gravityview_form_id', $form_id );
520 
521  }
522 
523  if( false === GVCommon::has_cap( 'gravityforms_create_form' ) && empty( $statii['form_id'] ) ) {
524  gravityview()->log->error( 'Current user does not have the capability to create a new Form.', array( 'data' => wp_get_current_user() ) );
525  return;
526  }
527 
528  // Was this a start fresh?
529  if ( ! empty( $_POST['gravityview_form_id_start_fresh'] ) ) {
530  $statii['start_fresh'] = add_post_meta( $post_id, '_gravityview_start_fresh', 1 );
531  } else {
532  $statii['start_fresh'] = delete_post_meta( $post_id, '_gravityview_start_fresh' );
533  }
534 
535  // Check if we have a template id
536  if ( isset( $_POST['gravityview_select_template_nonce'] ) && wp_verify_nonce( $_POST['gravityview_select_template_nonce'], 'gravityview_select_template' ) ) {
537 
538  $template_id = !empty( $_POST['gravityview_directory_template'] ) ? $_POST['gravityview_directory_template'] : '';
539 
540  // now save template id
541  $statii['directory_template'] = update_post_meta( $post_id, '_gravityview_directory_template', $template_id );
542  }
543 
544 
545  // save View Configuration metabox
546  if ( isset( $_POST['gravityview_view_configuration_nonce'] ) && wp_verify_nonce( $_POST['gravityview_view_configuration_nonce'], 'gravityview_view_configuration' ) ) {
547 
548  // template settings
549  if( empty( $_POST['template_settings'] ) ) {
550  $_POST['template_settings'] = array();
551  }
552  $statii['template_settings'] = update_post_meta( $post_id, '_gravityview_template_settings', $_POST['template_settings'] );
553 
554  $fields = array();
555 
556  // Directory&single Visible Fields
557  if( !empty( $preset_fields ) ) {
558 
559  $fields = $preset_fields;
560 
561  } elseif( !empty( $_POST['gv_fields'] ) ) {
563  }
564 
565  $fields = wp_slash( $fields );
566 
567  $statii['directory_fields'] = update_post_meta( $post_id, '_gravityview_directory_fields', $fields );
568 
569  // Directory Visible Widgets
570  if( empty( $_POST['widgets'] ) ) {
571  $_POST['widgets'] = array();
572  }
573  $statii['directory_widgets'] = gravityview_set_directory_widgets( $post_id, $_POST['widgets'] );
574 
575  } // end save view configuration
576 
577  /**
578  * @action `gravityview_view_saved` After a View has been saved in the admin
579  * @param int $post_id ID of the View that has been saved
580  * @param array $statii Array of statuses of the post meta saving processes. If saving worked, each key should be mapped to a value of the post ID (`directory_widgets` => `124`). If failed (or didn't change), the value will be false.
581  * @since 1.17.2
582  */
583  do_action('gravityview_view_saved', $post_id, $statii );
584 
585  gravityview()->log->debug( '[save_postdata] Update Post Meta Statuses (also returns false if nothing changed)', array( 'data' => array_map( 'intval', $statii ) ) );
586  }
587 
588  /**
589  * @deprecated 1.1.6
590  */
591  function render_label() {
592  _deprecated_function( 'GravityView_Admin_Views::render_label()', '1.1.6', 'Use the GravityView_Admin_View_Field class instead.' );
593  }
594 
595  /**
596  * Render html for displaying available fields based on a Form ID
597  * $blacklist_field_types - contains the field types which are not proper to be shown in a directory.
598  *
599  * @see GravityView_Ajax::get_available_fields_html() Triggers `gravityview_render_available_fields` action
600  * @access public
601  *
602  * @param int $form Gravity Forms Form ID (default: '')
603  * @param string $context (default: 'single')
604  *
605  * @return void
606  */
607  function render_available_fields( $form = 0, $context = 'single' ) {
608 
609  /**
610  * @filter `gravityview_blacklist_field_types` Modify the types of fields that shouldn't be shown in a View.
611  * @param[in,out] array $blacklist_field_types Array of field types to block for this context.
612  * @param[in] string $context View context ('single', 'directory', or 'edit')
613  */
614  $blacklist_field_types = apply_filters( 'gravityview_blacklist_field_types', array(), $context );
615 
616  if ( ! is_array( $blacklist_field_types ) ) {
617 
618  gravityview()->log->error( '$blacklist_field_types is not an array', array( 'data' => print_r( $blacklist_field_types, true ) ) );
619 
620  $blacklist_field_types = array();
621  }
622 
623  $fields = $this->get_available_fields( $form, $context );
624 
625  $output = '';
626 
627  if( !empty( $fields ) ) {
628 
629  foreach( $fields as $id => $details ) {
630 
631  if( in_array( $details['type'], (array) $blacklist_field_types ) ) {
632  continue;
633  }
634 
635  // Edit mode only allows editing the parent fields, not single inputs.
636  if( $context === 'edit' && !empty( $details['parent'] ) ) {
637  continue;
638  }
639 
640  $output .= new GravityView_Admin_View_Field( $details['label'], $id, $details, $settings = array(), $form );
641 
642  } // End foreach
643  }
644 
645  echo $output;
646 
647  // For the EDIT view we only want to allow the form fields.
648  if( $context === 'edit' ) {
649  return;
650  }
651 
652  $this->render_additional_fields( $form, $context );
653  }
654 
655  /**
656  * Render html for displaying additional fields based on a Form ID
657  *
658  * @access public
659  * @param int $form Gravity Forms Form ID (default: '')
660  * @param string $context (default: 'single')
661  * @return void
662  */
663  public function render_additional_fields( $form = 0, $context = 'single' ) {
664 
665  /**
666  * @filter `gravityview_additional_fields` non-standard Fields to show at the bottom of the field picker
667  * @param array $additional_fields Associative array of field arrays, with `label_text`, `desc`, `field_id`, `label_type`, `input_type`, `field_options`, and `settings_html` keys
668  */
669  $additional_fields = apply_filters( 'gravityview_additional_fields', array(
670  array(
671  'label_text' => __( '+ Add All Fields', 'gravityview' ),
672  'desc' => __('Add all the available fields at once.', 'gravityview'),
673  'field_id' => 'all-fields',
674  'label_type' => 'field',
675  'input_type' => NULL,
676  'field_options' => NULL,
677  'settings_html' => NULL,
678  )
679  ));
680 
681  if( !empty( $additional_fields )) {
682  foreach ( (array)$additional_fields as $item ) {
683 
684  // Prevent items from not having index set
685  $item = wp_parse_args( $item, array(
686  'label_text' => NULL,
687  'field_id' => NULL,
688  'label_type' => NULL,
689  'input_type' => NULL,
690  'field_options' => NULL,
691  'settings_html' => NULL,
692  ));
693 
694  // Backward compat.
695  if( !empty( $item['field_options'] ) ) {
696  // Use settings_html from now on.
697  $item['settings_html'] = $item['field_options'];
698  }
699 
700  // Render a label for each of them
701  echo new GravityView_Admin_View_Field( $item['label_text'], $item['field_id'], $item, $settings = array(), $form );
702 
703  }
704  }
705 
706  }
707 
708  /**
709  * Retrieve the default fields id, label and type
710  * @param string|array $form form_ID or form object
711  * @param string $zone Either 'single', 'directory', 'header', 'footer'
712  * @return array
713  */
714  function get_entry_default_fields($form, $zone) {
715 
716  $entry_default_fields = array();
717 
718  if( in_array( $zone, array( 'directory', 'single' ) ) ) {
719 
720  $entry_default_fields = array(
721  'id' => array(
722  'label' => __('Entry ID', 'gravityview'),
723  'type' => 'id',
724  'desc' => __('The unique ID of the entry.', 'gravityview'),
725  ),
726  'date_created' => array(
727  'label' => __('Entry Date', 'gravityview'),
728  'desc' => __('The date the entry was created.', 'gravityview'),
729  'type' => 'date_created',
730  ),
731  'source_url' => array(
732  'label' => __('Source URL', 'gravityview'),
733  'type' => 'source_url',
734  'desc' => __('The URL of the page where the form was submitted.', 'gravityview'),
735  ),
736  'ip' => array(
737  'label' => __('User IP', 'gravityview'),
738  'type' => 'ip',
739  'desc' => __('The IP Address of the user who created the entry.', 'gravityview'),
740  ),
741  'created_by' => array(
742  'label' => __('User', 'gravityview'),
743  'type' => 'created_by',
744  'desc' => __('Details of the logged-in user who created the entry (if any).', 'gravityview'),
745  ),
746 
747  /**
748  * @since 1.7.2
749  */
750  'other_entries' => array(
751  'label' => __('Other Entries', 'gravityview'),
752  'type' => 'other_entries',
753  'desc' => __('Display other entries created by the entry creator.', 'gravityview'),
754  ),
755  );
756 
757  if( 'single' !== $zone) {
758 
759  $entry_default_fields['entry_link'] = array(
760  'label' => __('Link to Entry', 'gravityview'),
761  'desc' => __('A dedicated link to the single entry with customizable text.', 'gravityview'),
762  'type' => 'entry_link',
763  );
764  }
765 
766  } // if not zone directory or single
767 
768  /**
769  * @since 1.2
770  */
771  $entry_default_fields['custom'] = array(
772  'label' => __('Custom Content', 'gravityview'),
773  'type' => 'custom',
774  'desc' => __('Insert custom text or HTML.', 'gravityview'),
775  );
776 
777  /**
778  * @filter `gravityview_entry_default_fields` Modify the default fields for each zone and context
779  * @param array $entry_default_fields Array of fields shown by default
780  * @param string|array $form form_ID or form object
781  * @param string $zone Either 'single', 'directory', 'header', 'footer'
782  */
783  return apply_filters( 'gravityview_entry_default_fields', $entry_default_fields, $form, $zone);
784  }
785 
786  /**
787  * Calculate the available fields
788  * @param string|array $form form_ID or form object
789  * @param string $zone Either 'single', 'directory', 'header', 'footer'
790  * @return array fields
791  */
792  function get_available_fields( $form = '', $zone = NULL ) {
793 
794  if( empty( $form ) ) {
795  gravityview()->log->error( '$form is empty' );
796  return array();
797  }
798 
799  // get form fields
800  $fields = gravityview_get_form_fields( $form, true );
801 
802  // get meta fields ( only if form was already created )
803  if( !is_array( $form ) ) {
804  $meta_fields = gravityview_get_entry_meta( $form );
805  } else {
806  $meta_fields = array();
807  }
808 
809  // get default fields
810  $default_fields = $this->get_entry_default_fields( $form, $zone );
811 
812  //merge without loosing the keys
813  $fields = $fields + $meta_fields + $default_fields;
814 
815  // Move Custom Content to top
816  $fields = array( 'custom' => $fields['custom'] ) + $fields;
817 
818  return $fields;
819  }
820 
821 
822  /**
823  * Render html for displaying available widgets
824  * @return string html
825  */
827 
828  $widgets = $this->get_registered_widgets();
829 
830  if( !empty( $widgets ) ) {
831 
832  foreach( $widgets as $id => $details ) {
833 
834  echo new GravityView_Admin_View_Widget( $details['label'], $id, $details );
835 
836  }
837  }
838 
839  }
840 
841  /**
842  * Get the list of registered widgets. Each item is used to instantiate a GravityView_Admin_View_Widget object
843  * @deprecated Use \GV\Widget::registered()
844  * @since 1.13.1
845  * @return array
846  */
848  return \GV\Widget::registered();
849  }
850 
851  /**
852  * Generic function to render rows and columns of active areas for widgets & fields
853  * @param string $template_id The current slug of the selected View template
854  * @param string $type Either 'widget' or 'field'
855  * @param string $zone Either 'single', 'directory', 'header', 'footer'
856  * @param array $rows The layout structure: rows, columns and areas
857  * @param array $values Saved objects
858  * @return void
859  */
860  function render_active_areas( $template_id, $type, $zone, $rows, $values ) {
861  global $post;
862 
863  if( $type === 'widget' ) {
864  $button_label = __( 'Add Widget', 'gravityview' );
865  } else {
866  $button_label = __( 'Add Field', 'gravityview' );
867  }
868 
869  $available_items = array();
870 
871  $view = \GV\View::from_post( $post );
872  $form_id = null;
873 
874  // if saved values, get available fields to label everyone
875  if( !empty( $values ) && ( !empty( $post->ID ) || !empty( $_POST['template_id'] ) ) ) {
876 
877  if( !empty( $_POST['template_id'] ) ) {
878  $form = GravityView_Ajax::pre_get_form_fields( $_POST['template_id'] );
879  } else {
880  $form_id = $form = gravityview_get_form_id( $post->ID );
881  }
882 
883  if ( 'field' === $type ) {
884  $available_items[ $form ] = $this->get_available_fields( $form, $zone );
885 
886  $joined_forms = gravityview_get_joined_forms( $post->ID );
887 
888  foreach ( $joined_forms as $form ) {
889  $available_items[ $form->ID ] = $this->get_available_fields( $form->ID, $zone );
890  }
891  } else {
892  $available_items[ $form ] = $this->get_registered_widgets();
893  }
894  }
895 
896  foreach( $rows as $row ) :
897  foreach( $row as $col => $areas ) :
898  $column = ($col == '2-2') ? '1-2' : $col; ?>
899 
900  <div class="gv-grid-col-<?php echo esc_attr( $column ); ?>">
901 
902  <?php foreach( $areas as $area ) : ?>
903 
904  <div class="gv-droppable-area" data-areaid="<?php echo esc_attr( $zone .'_'. $area['areaid'] ); ?>" data-context="<?php echo esc_attr( $zone ); ?>">
905  <div class="active-drop active-drop-<?php echo esc_attr( $type ); ?>" data-areaid="<?php echo esc_attr( $zone .'_'. $area['areaid'] ); ?>">
906 
907  <?php // render saved fields
908 
909  if( ! empty( $values[ $zone .'_'. $area['areaid'] ] ) ) {
910 
911  foreach( $values[ $zone .'_'. $area['areaid'] ] as $uniqid => $field ) {
912 
913  // Maybe has a form ID
914  $form_id = empty( $field['form_id'] ) ? $form_id : $field['form_id'];
915 
916  $input_type = NULL;
917 
918  if ( $form_id ) {
919  $original_item = isset( $available_items[ $form_id ] [ $field['id'] ] ) ? $available_items[ $form_id ] [ $field['id'] ] : false ;
920  } else {
921  $original_item = isset( $available_items[ $field['id'] ] ) ? $available_items[ $field['id'] ] : false ;
922  }
923 
924  if ( !$original_item ) {
925  gravityview()->log->error( 'An item was not available when rendering the output; maybe it was added by a plugin that is now de-activated.', array(' data' => array('available_items' => $available_items, 'field' => $field ) ) );
926 
927  $original_item = $field;
928  } else {
929  $input_type = isset( $original_item['type'] ) ? $original_item['type'] : NULL;
930  }
931 
932  // Field options dialog box
933  $field_options = GravityView_Render_Settings::render_field_options( $form_id, $type, $template_id, $field['id'], $original_item['label'], $zone .'_'. $area['areaid'], $input_type, $uniqid, $field, $zone, $original_item );
934 
935  $item = array(
936  'input_type' => $input_type,
937  'settings_html' => $field_options,
938  'label_type' => $type
939  );
940 
941  // Merge the values with the current item to pass things like widget descriptions and original field names
942  if ( $original_item ) {
943  $item = wp_parse_args( $item, $original_item );
944  }
945 
946  switch( $type ) {
947  case 'widget':
948  echo new GravityView_Admin_View_Widget( $item['label'], $field['id'], $item, $field );
949  break;
950  default:
951  echo new GravityView_Admin_View_Field( $field['label'], $field['id'], $item, $field, $form_id );
952  }
953  }
954 
955  } // End if zone is not empty ?>
956 
957  <span class="drop-message"><?php echo sprintf(esc_attr__('"+ %s" or drag existing %ss here.', 'gravityview'), $button_label, $type ); ?></span>
958  </div>
959  <div class="gv-droppable-area-action">
960  <a href="#" class="gv-add-field button-secondary" title="" data-objecttype="<?php echo esc_attr( $type ); ?>" data-areaid="<?php echo esc_attr( $zone .'_'. $area['areaid'] ); ?>" data-context="<?php echo esc_attr( $zone ); ?>" data-formid="<?php echo $view ? esc_attr( $view->form ? $view->form->ID : '' ) : ''; ?>"><?php echo '+ '.esc_html( $button_label ); ?></a>
961 
962  <p class="gv-droppable-area-title"><strong><?php echo esc_html( $area['title'] ); ?></strong><?php if( !empty( $area['subtitle'] ) ) { ?><span class="gv-droppable-area-subtitle"> &ndash; <?php echo esc_html( $area['subtitle'] ); ?></span><?php } ?></p>
963  </div>
964  </div>
965 
966  <?php endforeach; ?>
967 
968  </div>
969  <?php endforeach;
970  endforeach;
971  }
972 
973  /**
974  * Render the widget active areas
975  * @param string $zone Either 'header' or 'footer'
976  * @param string $post_id Current Post ID (view)
977  * @return string html
978  */
979  function render_widgets_active_areas( $template_id = '', $zone, $post_id = '' ) {
980 
981  $default_widget_areas = GravityView_Widget::get_default_widget_areas();
982 
983  $widgets = array();
984  if( !empty( $post_id ) ) {
985  $widgets = gravityview_get_directory_widgets( $post_id );
986  }
987 
988  ob_start();
989  ?>
990 
991  <div class="gv-grid gv-grid-pad gv-grid-border" id="directory-<?php echo $zone; ?>-widgets">
992  <?php $this->render_active_areas( $template_id, 'widget', $zone, $default_widget_areas, $widgets ); ?>
993  </div>
994 
995  <?php
996  $output = ob_get_clean();
997 
998  echo $output;
999 
1000  return $output;
1001  }
1002 
1003  /**
1004  * Renders "Add Field" tooltips
1005  *
1006  * @since 2.0.11
1007  *
1008  * @param string $context "directory", "single", or "edit"
1009  *
1010  * @return void
1011  */
1012  function render_field_pickers( $context = 'directory' ) {
1013 
1014  // list of available fields to be shown in the popup
1015  $forms = gravityview_get_forms( 'any' );
1016 
1017  $form_ids = array_map( function ($form) { return $form['id']; }, $forms);
1018 
1019  foreach ( $form_ids as $form_id ) {
1020  $filter_field_id = sprintf( 'gv-field-filter-%s-%d', $context, $form_id );
1021  ?>
1022  <div id="<?php echo esc_html( $context ); ?>-available-fields-<?php echo esc_attr( $form_id ); ?>" class="hide-if-js gv-tooltip">
1023  <span class="close"><i class="dashicons dashicons-dismiss"></i></span>
1024  <div class="gv-field-filter-form">
1025  <label class="screen-reader-text" for="<?php echo esc_html( $filter_field_id ); ?>"><?php esc_html_e( 'Filter Fields:', 'gravityview' ); ?></label>
1026  <input type="search" class="widefat gv-field-filter" aria-controls="<?php echo $filter_field_id; ?>" id="<?php echo esc_html( $filter_field_id ); ?>" placeholder="<?php esc_html_e( 'Filter fields by name or label', 'gravityview' ); ?>" />
1027  </div>
1028 
1029  <div id="available-fields-<?php echo $filter_field_id; ?>" aria-live="polite" role="listbox">
1030  <?php do_action('gravityview_render_available_fields', $form_id, $context ); ?>
1031  </div>
1032 
1033  <div class="gv-no-results hidden description"><?php esc_html_e( 'No fields were found matching the search.', 'gravityview' ); ?></div>
1034  </div>
1035  <?php
1036  }
1037  }
1038 
1039  /**
1040  * Render the Template Active Areas and configured active fields for a given template id and post id
1041  *
1042  * @access public
1043  * @param string $template_id (default: '') Template ID, like `default_list`, `default_table`, `preset_business_data`, etc. {@see GravityView_Template::__construct()}
1044  * @param string $post_id (default: '')
1045  * @param string $context (default: 'single')
1046  * @return string HTML of the active areas
1047  */
1048  function render_directory_active_areas( $template_id = '', $context = 'single', $post_id = '', $echo = false ) {
1049  if( empty( $template_id ) ) {
1050  gravityview()->log->debug( '[render_directory_active_areas] {template_id} is empty', array( 'template_id' => $template_id ) );
1051  return '';
1052  }
1053 
1054  /**
1055  * @filter `gravityview_template_active_areas`
1056  * @see GravityView_Template::assign_active_areas()
1057  * @param array $template_areas Empty array, to be filled in by the template class
1058  * @param string $template_id Template ID, like `default_list`, `default_table`, `preset_business_data`, etc. {@see GravityView_Template::__construct()}
1059  * @param string $context Current View context: `directory`, `single`, or `edit` (default: 'single')
1060  */
1061  $template_areas = apply_filters( 'gravityview_template_active_areas', array(), $template_id, $context );
1062 
1063  if( empty( $template_areas ) ) {
1064 
1065  gravityview()->log->debug( '[render_directory_active_areas] No areas defined. Maybe template {template_id} is disabled.', array( 'data' => $template_id ) );
1066  $output = '<div>';
1067  $output .= '<h2 class="description" style="font-size: 16px; margin:0">'. sprintf( esc_html__( 'This View is configured using the %s View type, which is disabled.', 'gravityview' ), '<em>'.$template_id.'</em>' ) .'</h2>';
1068  $output .= '<p class="description" style="font-size: 14px; margin:0 0 1em 0;padding:0">'.esc_html__('The data is not lost; re-activate the associated plugin and the configuration will re-appear.', 'gravityview').'</p>';
1069  $output .= '</div>';
1070  } else {
1071 
1072  $fields = '';
1073  if ( ! empty( $post_id ) ) {
1074  $fields = gravityview_get_directory_fields( $post_id );
1075  }
1076 
1077  ob_start();
1078  $this->render_active_areas( $template_id, 'field', $context, $template_areas, $fields );
1079  $output = ob_get_clean();
1080 
1081  }
1082 
1083  if( $echo ) {
1084  echo $output;
1085  }
1086 
1087  return $output;
1088  }
1089 
1090  /**
1091  * Enqueue scripts and styles at Views editor
1092  *
1093  * @access public
1094  * @param mixed $hook
1095  * @return void
1096  */
1097  static function add_scripts_and_styles( $hook ) {
1098  global $plugin_page, $pagenow;
1099 
1100  $is_widgets_page = ( $pagenow === 'widgets.php' );
1101 
1102  // Add the GV font (with the Astronaut)
1103  wp_enqueue_style( 'gravityview_global', plugins_url('assets/css/admin-global.css', GRAVITYVIEW_FILE), array(), \GV\Plugin::$version );
1104  wp_register_style( 'gravityview_views_styles', plugins_url( 'assets/css/admin-views.css', GRAVITYVIEW_FILE ), array( 'dashicons', 'wp-jquery-ui-dialog' ), \GV\Plugin::$version );
1105 
1106  wp_register_script( 'gravityview-jquery-cookie', plugins_url('assets/lib/jquery.cookie/jquery.cookie.min.js', GRAVITYVIEW_FILE), array( 'jquery' ), \GV\Plugin::$version, true );
1107 
1108  if( GFForms::get_page() === 'form_list' ) {
1109  wp_enqueue_style( 'gravityview_views_styles' );
1110  return;
1111  }
1112 
1113  // Don't process any scripts below here if it's not a GravityView page.
1114  if( ! gravityview()->request->is_admin( $hook, 'single' ) && ! $is_widgets_page ) {
1115  return;
1116  }
1117 
1118  wp_enqueue_script( 'jquery-ui-datepicker' );
1119  wp_enqueue_style( 'gravityview_views_datepicker', plugins_url('assets/css/admin-datepicker.css', GRAVITYVIEW_FILE), \GV\Plugin::$version );
1120 
1121  $script_debug = (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG) ? '' : '.min';
1122 
1123  //enqueue scripts
1124  wp_enqueue_script( 'gravityview_views_scripts', plugins_url( 'assets/js/admin-views' . $script_debug . '.js', GRAVITYVIEW_FILE ), array( 'jquery-ui-tabs', 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-sortable', 'jquery-ui-tooltip', 'jquery-ui-dialog', 'gravityview-jquery-cookie', 'jquery-ui-datepicker', 'underscore' ), \GV\Plugin::$version );
1125 
1126  wp_localize_script('gravityview_views_scripts', 'gvGlobals', array(
1127  'cookiepath' => COOKIEPATH,
1128  'passed_form_id' => (bool) \GV\Utils::_GET( 'form_id' ),
1129  'nonce' => wp_create_nonce( 'gravityview_ajaxviews' ),
1130  'label_viewname' => __( 'Enter View name here', 'gravityview' ),
1131  'label_close' => __( 'Close', 'gravityview' ),
1132  'label_cancel' => __( 'Cancel', 'gravityview' ),
1133  'label_continue' => __( 'Continue', 'gravityview' ),
1134  'label_ok' => __( 'Ok', 'gravityview' ),
1135  'label_publisherror' => __( 'Error while creating the View for you. Check the settings or contact GravityView support.', 'gravityview' ),
1136  'loading_text' => esc_html__( 'Loading&hellip;', 'gravityview' ),
1137  'loading_error' => esc_html__( 'There was an error loading dynamic content.', 'gravityview' ),
1138  'field_loaderror' => __( 'Error while adding the field. Please try again or contact GravityView support.', 'gravityview' ),
1139  'remove_all_fields' => __( 'Would you like to remove all fields in this zone? (You are seeing this message because you were holding down the ALT key)', 'gravityview' ),
1140  ));
1141 
1142  wp_enqueue_style( 'gravityview_views_styles' );
1143 
1144  // Enqueue scripts needed for merge tags
1145  self::enqueue_gravity_forms_scripts();
1146  }
1147 
1148  /**
1149  * Enqueue Gravity Forms scripts, needed for Merge Tags
1150  *
1151  * @since 1.0.5-beta
1152  *
1153  * @return void
1154  */
1155  static function enqueue_gravity_forms_scripts() {
1156  GFForms::register_scripts();
1157 
1158  $scripts = array(
1159  'sack',
1160  'gform_gravityforms',
1161  'gform_forms',
1162  'gform_form_admin',
1163  'jquery-ui-autocomplete'
1164  );
1165 
1166  if ( wp_is_mobile() ) {
1167  $scripts[] = 'jquery-touch-punch';
1168  }
1169 
1170  wp_enqueue_script( $scripts );
1171  }
1172 
1173  /**
1174  * Add GravityView scripts and styles to Gravity Forms and GravityView No-Conflict modes
1175  *
1176  * @param array $registered Existing scripts or styles that have been registered (array of the handles)
1177  *
1178  * @return array
1179  */
1180  function register_no_conflict( $registered ) {
1181 
1182  $allowed_dependencies = array();
1183 
1184  $filter = current_filter();
1185 
1186  if ( preg_match( '/script/ism', $filter ) ) {
1187 
1188  $allowed_dependencies = array(
1189  'jquery-ui-core',
1190  'jquery-ui-dialog',
1191  'jquery-ui-tabs',
1192  'jquery-ui-draggable',
1193  'jquery-ui-droppable',
1194  'jquery-ui-sortable',
1195  'jquery-ui-tooltip',
1196  'gravityview_views_scripts',
1197  'gravityview-support',
1198  'gravityview-jquery-cookie',
1199  'gravityview_views_datepicker',
1200  'sack',
1201  'gform_gravityforms',
1202  'gform_forms',
1203  'gform_form_admin',
1204  'jquery-ui-autocomplete'
1205  );
1206 
1207  } elseif ( preg_match( '/style/ism', $filter ) ) {
1208 
1209  $allowed_dependencies = array(
1210  'dashicons',
1211  'wp-jquery-ui-dialog',
1212  'gravityview_views_styles',
1213  'gravityview_global',
1214  'gravityview_views_datepicker'
1215  );
1216  }
1217 
1218  return array_merge( $registered, $allowed_dependencies );
1219  }
1220 
1221 
1222 }
1223 
static _GET( $name, $default=null)
Grab a value from the _GET superglobal or default.
$forms
Definition: data-source.php:19
filter_pre_get_posts_by_gravityview_form_id(&$query)
gravityview_set_directory_widgets( $post_id, $widgets=array())
Set the widgets, as configured for a View.
static render_field_options( $form_id, $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)
get_entry_default_fields($form, $zone)
Retrieve the default fields id, label and type.
suggest_support_articles( $localization_data=array())
When on the Add/Edit View screen, suggest most popular articles related to that.
gravityview_get_directory_fields( $post_id, $apply_filter=true)
Get the field configuration for the View.
$current_settings
gravityview_get_entry_meta( $form_id, $only_default_column=true)
get extra fields from entry meta
static gform_toolbar_menu( $menu_items=array(), $id=NULL)
Add a GravityView menu to the Form Toolbar with connected views.
static get_connected_form_links( $form, $include_form_link=true)
Get HTML links relating to a connected form, like Edit, Entries, Settings, Preview.
gravityview_get_form( $form_id)
Returns the form object for a given Form ID.
gravityview_get_directory_widgets( $post_id)
Get the widgets, as configured for a View.
static get_default_widget_areas()
Default widget areas.
tooltips( $tooltips=array())
Add tooltip text for use throughout the UI.
gravityview()
Definition: _stubs.php:26
$templates
add_custom_column_content( $column_name=NULL, $post_id)
Add the Data Source information.
If this file is called directly, abort.
new GravityView_Admin_Views
static render_field_option( $name='', $option, $curr_value=NULL)
gravityview_get_forms( $active=true, $trash=false)
Alias of GFAPI::get_forms()
render_active_areas( $template_id, $type, $zone, $rows, $values)
Generic function to render rows and columns of active areas for widgets & fields. ...
render_directory_active_areas( $template_id='', $context='single', $post_id='', $echo=false)
Render the Template Active Areas and configured active fields for a given template id and post id...
gravityview_get_form_fields( $form='', $add_default_properties=false, $include_parent_field=true)
Return array of fields&#39; id and label, for a given Form ID.
static render_setting_row( $key='', $current_settings=array(), $override_input=null, $name='template_settings[%s]', $id='gravityview_se_%s')
static pre_get_form_fields( $template_id='')
Get the the form fields for a preset (no form created yet)
Definition: class-ajax.php:304
render_widgets_active_areas( $template_id='', $zone, $post_id='')
Render the widget active areas.
register_no_conflict( $registered)
Add GravityView scripts and styles to Gravity Forms and GravityView No-Conflict modes.
gravityview_get_connected_views( $form_id, $args=array())
Get the views for a particular form.
gravityview_get_form_id( $view_id)
Get the connected form ID from a View ID.
add_post_type_columns( $columns)
Add the Data Source column to the Views page.
get_registered_widgets()
Get the list of registered widgets.
const GRAVITYVIEW_FILE
Full path to the GravityView file "GRAVITYVIEW_FILE" "./gravityview.php".
Definition: gravityview.php:31
gravityview_get_registered_templates()
Get all available preset templates.
default_field_blacklist( $array=array(), $context=NULL)
List the field types without presentation properties (on a View context)
$template
The entry loop for the list output.
if(empty( $created_by)) $form_id
_gravityview_process_posted_fields()
Maybe convert jQuery-serialized fields into array, otherwise return $_POST[&#39;fields&#39;] array...
global $post
render_available_widgets()
Render html for displaying available widgets.
gravityview_get_template_id( $post_id)
Get the template ID (list, table, datatables, map) for a View.
static defaults( $detailed=false, $group=null)
Retrieve the default View settings.
gravityview_get_joined_forms( $view_id)
Get joined forms associated with a view.
static has_cap( $caps='', $object_id=null, $user_id=null)
Alias of GravityView_Roles_Capabilities::has_cap()
static add_scripts_and_styles( $hook)
Enqueue scripts and styles at Views editor.
get_available_fields( $form='', $zone=NULL)
Calculate the available fields.
$current_form
Definition: data-source.php:13
static enqueue_gravity_forms_scripts()
Enqueue Gravity Forms scripts, needed for Merge Tags.
static from_post( $post)
Construct a instance from a .
render_field_pickers( $context='directory')
Renders "Add Field" tooltips.
render_available_fields( $form=0, $context='single')
Render html for displaying available fields based on a Form ID $blacklist_field_types - contains the ...
$field
Definition: gquiz_grade.php:11
save_postdata( $post_id)
Save View configuration.
render_additional_fields( $form=0, $context='single')
Render html for displaying additional fields based on a Form ID.
$title