GravityView  1.19.4
The best, easiest way to display Gravity Forms entries on your website.
class-gravityview-admin-metaboxes.php
Go to the documentation of this file.
1 <?php
2 
3 /**
4  * Register and render the admin metaboxes for GravityView
5  */
7 
8  static $metaboxes_dir;
9 
10  /**
11  * @var int The post ID of the current View
12  */
13  var $post_id = 0;
14 
15  /**
16  *
17  */
18  function __construct() {
19 
20  if( !GravityView_Compatibility::is_valid() ) { return; }
21 
22  self::$metaboxes_dir = GRAVITYVIEW_DIR . 'includes/admin/metaboxes/';
23 
24  include_once self::$metaboxes_dir . 'class-gravityview-metabox-tab.php';
25 
26  include_once self::$metaboxes_dir . 'class-gravityview-metabox-tabs.php';
27 
28  $this->initialize();
29 
30  }
31 
32  /**
33  * Add WordPress hooks
34  * @since 1.7.2
35  */
36  function initialize() {
37 
38  add_action( 'add_meta_boxes', array( $this, 'register_metaboxes' ));
39 
40  add_action( 'add_meta_boxes_gravityview' , array( $this, 'update_priority' ) );
41 
42  // information box
43  add_action( 'post_submitbox_misc_actions', array( $this, 'render_shortcode_hint' ) );
44 
45  }
46 
47  /**
48  * GravityView wants to have the top (`normal`) metaboxes all to itself, so we move all plugin/theme metaboxes down to `advanced`
49  * @since 1.15.2
50  */
51  function update_priority() {
52  global $wp_meta_boxes;
53 
54  if( ! empty( $wp_meta_boxes['gravityview'] ) ) {
55  foreach( array( 'high', 'core', 'low' ) as $position ) {
56  if( isset( $wp_meta_boxes['gravityview']['normal'][ $position ] ) ) {
57  foreach( $wp_meta_boxes['gravityview']['normal'][ $position ] as $key => $meta_box ) {
58  if( ! preg_match( '/^gravityview_/ism', $key ) ) {
59  $wp_meta_boxes['gravityview']['advanced'][ $position ][ $key ] = $meta_box;
60  unset( $wp_meta_boxes['gravityview']['normal'][ $position ][ $key ] );
61  }
62  }
63  }
64  }
65  }
66  }
67 
68  function register_metaboxes() {
69  global $post;
70 
71  // On Comment Edit, for example, $post isn't set.
72  if( empty( $post ) || !is_object( $post ) || !isset( $post->ID ) ) {
73  return;
74  }
75 
76  // select data source for this view
77  add_meta_box( 'gravityview_select_form', $this->get_data_source_header( $post->ID ), array( $this, 'render_data_source_metabox' ), 'gravityview', 'normal', 'high' );
78 
79  // select view type/template
80  add_meta_box( 'gravityview_select_template', __( 'Choose a View Type', 'gravityview' ), array( $this, 'render_select_template_metabox' ), 'gravityview', 'normal', 'high' );
81 
82  // View Configuration box
83  add_meta_box( 'gravityview_view_config', __( 'View Configuration', 'gravityview' ), array( $this, 'render_view_configuration_metabox' ), 'gravityview', 'normal', 'high' );
84 
86 
87  // Other Settings box
88  add_meta_box( 'gravityview_settings', __( 'View Settings', 'gravityview' ), array( $this, 'settings_metabox_render' ), 'gravityview', 'normal', 'core' );
89 
90  }
91 
92  /**
93  * Render the View Settings metabox
94  * @since 1.8
95  * @param WP_Post $post
96  */
98 
99  /**
100  * @param WP_Post $post
101  */
102  do_action( 'gravityview/metaboxes/before_render', $post );
103 
104  $metaboxes = GravityView_Metabox_Tabs::get_all();
105 
106  include self::$metaboxes_dir . 'views/gravityview-navigation.php';
107  include self::$metaboxes_dir . 'views/gravityview-content.php';
108 
109  /**
110  * @param WP_Post $post
111  */
112  do_action( 'gravityview/metaboxes/after_render', $post );
113  }
114 
115  /**
116  * Add default tabs to the Settings metabox
117  * @since 1.8
118  */
119  private function add_settings_metabox_tabs() {
120 
121  $metaboxes = array(
122  array(
123  'id' => 'template_settings',
124  'title' => __( 'View Settings', 'gravityview' ),
125  'file' => 'view-settings.php',
126  'icon-class' => 'dashicons-admin-generic',
127  'callback' => '',
128  'callback_args' => '',
129  ),
130  array(
131  'id' => 'single_entry', // Use the same ID as View Settings for backward compatibility
132  'title' => __( 'Single Entry', 'gravityview' ),
133  'file' => 'single-entry.php',
134  'icon-class' => 'dashicons-media-default',
135  'callback' => '',
136  'callback_args' => '',
137  ),
138  array(
139  'id' => 'sort_filter',
140  'title' => __( 'Filter &amp; Sort', 'gravityview' ),
141  'file' => 'sort-filter.php',
142  'icon-class' => 'dashicons-sort',
143  'callback' => '',
144  'callback_args' => '',
145  ),
146  );
147 
148  /**
149  * @filter `gravityview/metaboxes/default` Modify the default settings metabox tabs
150  * @param array $metaboxes
151  * @since 1.8
152  */
153  $metaboxes = apply_filters( 'gravityview/metaboxes/default', $metaboxes );
154 
155  foreach( $metaboxes as $m ) {
156 
157  $tab = new GravityView_Metabox_Tab( $m['id'], $m['title'], $m['file'], $m['icon-class'], $m['callback'], $m['callback_args'] );
158 
160 
161  }
162 
163  unset( $tab );
164 
165  }
166 
167  /**
168  * Generate the title for Data Source, which includes the Action Links once configured.
169  *
170  * @since 1.8
171  *
172  * @param int $post_id ID of the current post
173  *
174  * @return string "Data Source", plus links if any
175  */
176  private function get_data_source_header( $post_id ) {
177 
178  //current value
180 
182 
183  if( !empty( $links ) ) {
184  $links = '<span class="alignright gv-form-links">'. $links .'</span>';
185  }
186 
187  return __( 'Data Source', 'gravityview' ) . $links;
188  }
189 
190  /**
191  * Render html for 'select form' metabox
192  *
193  * @access public
194  * @param object $post
195  * @return void
196  */
198 
199  include self::$metaboxes_dir . 'views/data-source.php';
200 
201  }
202 
203  /**
204  * Render html for 'select template' metabox
205  *
206  * @access public
207  * @param object $post
208  * @return void
209  */
211 
212  include self::$metaboxes_dir . 'views/select-template.php';
213  }
214 
215  /**
216  * Generate the script tags necessary for the Gravity Forms Merge Tag picker to work.
217  *
218  * @param int $curr_form Form ID
219  * @return null|string Merge tags html; NULL if $curr_form isn't defined.
220  */
221  public static function render_merge_tags_scripts( $curr_form ) {
222 
223  if( empty( $curr_form )) {
224  return NULL;
225  }
226 
228 
229  $get_id_backup = isset($_GET['id']) ? $_GET['id'] : NULL;
230 
231  if( isset( $form['id'] ) ) {
232  $form_script = 'var form = ' . GFCommon::json_encode($form) . ';';
233 
234  // The `gf_vars()` method needs a $_GET[id] variable set with the form ID.
235  $_GET['id'] = $form['id'];
236 
237  } else {
238  $form_script = 'var form = new Form();';
239  }
240 
241  $output = '<script type="text/javascript" data-gv-merge-tags="1">' . $form_script . "\n" . GFCommon::gf_vars(false) . '</script>';
242 
243  // Restore previous $_GET setting
244  $_GET['id'] = $get_id_backup;
245 
246  return $output;
247  }
248 
249  /**
250  * Render html for 'View Configuration' metabox
251  *
252  * @access public
253  * @param mixed $post
254  * @return void
255  */
257 
258  // Use nonce for verification
259  wp_nonce_field( 'gravityview_view_configuration', 'gravityview_view_configuration_nonce' );
260 
261  // Selected Form
263 
264  // Selected template
265  $curr_template = gravityview_get_template_id( $post->ID );
266 
267  echo self::render_merge_tags_scripts( $curr_form );
268 
269  include self::$metaboxes_dir . 'views/view-configuration.php';
270  }
271 
272  /**
273  * Render html View General Settings
274  *
275  * @access public
276  * @param object $post
277  * @return void
278  */
280 
281  // View template settings
283 
284  include self::$metaboxes_dir . 'views/view-settings.php';
285 
286  }
287 
288 
289 
290  /**
291  * Render shortcode hint in the Publish metabox
292  *
293  * @access public
294  * @return void
295  */
297  global $post;
298 
299  // Only show this on GravityView post types.
300  if( false === gravityview_is_admin_page() ) { return; }
301 
302  // If the View hasn't been configured yet, don't show embed shortcode
303  if( !gravityview_get_directory_fields( $post->ID ) ) { return; }
304 
305  include self::$metaboxes_dir . 'views/shortcode-hint.php';
306  }
307 
308 }
309 
const GRAVITYVIEW_DIR
"GRAVITYVIEW_DIR" "./" The absolute path to the plugin directory
Definition: gravityview.php:35
static get_all()
Get array of all registered metaboxes.
gravityview_get_template_id($post_id)
Get the template ID (list, table, datatables, map) for a View.
render_data_source_metabox($post)
Render html for &#39;select form&#39; metabox.
$current_settings
settings_metabox_render($post)
Render the View Settings metabox.
static is_valid()
Is everything compatible with this version of GravityView?
update_priority()
GravityView wants to have the top (normal) metaboxes all to itself, so we move all plugin/theme metab...
static get_connected_form_links($form, $include_form_link=true)
Get HTML links relating to a connected form, like Edit, Entries, Settings, Preview.
render_select_template_metabox($post)
Render html for &#39;select template&#39; metabox.
gravityview_is_admin_page($hook= '', $page=NULL)
Alias for GravityView_Admin::is_admin_page()
gravityview_get_directory_fields($post_id, $apply_filter=true)
Get the field configuration for the View.
gravityview_get_form($form_id)
Returns the form object for a given Form ID.
The class for a metabox tab in the GravityView View Settings metabox.
$curr_form
Definition: sort-filter.php:9
get_data_source_header($post_id)
Generate the title for Data Source, which includes the Action Links once configured.
Register and render the admin metaboxes for GravityView.
global $post
render_view_settings_metabox($post)
Render html View General Settings.
gravityview_get_template_settings($post_id)
Get all the settings for a View.
add_settings_metabox_tabs()
Add default tabs to the Settings metabox.
render_shortcode_hint()
Render shortcode hint in the Publish metabox.
gravityview_get_form_id($view_id)
Get the connected form ID from a View ID.
static render_merge_tags_scripts($curr_form)
Generate the script tags necessary for the Gravity Forms Merge Tag picker to work.
$current_form
Definition: data-source.php:14
static add(GravityView_Metabox_Tab $meta_box)
Add a tab.
render_view_configuration_metabox($post)
Render html for &#39;View Configuration&#39; metabox.