Completed
Push — develop ( faed85...5d0bd3 )
by Zack
04:39
created

render_data_source_metabox()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
1
<?php
0 ignored issues
show
Coding Style Compatibility introduced by
For compatibility and reusability of your code, PSR1 recommends that a file should introduce either new symbols (like classes, functions, etc.) or have side-effects (like outputting something, or including other files), but not both at the same time. The first symbol is defined on line 6 and the first side effect is on line 310.

The PSR-1: Basic Coding Standard recommends that a file should either introduce new symbols, that is classes, functions, constants or similar, or have side effects. Side effects are anything that executes logic, like for example printing output, changing ini settings or writing to a file.

The idea behind this recommendation is that merely auto-loading a class should not change the state of an application. It also promotes a cleaner style of programming and makes your code less prone to errors, because the logic is not spread out all over the place.

To learn more about the PSR-1, please see the PHP-FIG site on the PSR-1.

Loading history...
2
3
/**
4
 * Register and render the admin metaboxes for GravityView
5
 */
6
class GravityView_Admin_Metaboxes {
7
8
	static $metaboxes_dir;
0 ignored issues
show
Coding Style introduced by
The visibility should be declared for property $metaboxes_dir.

The PSR-2 coding standard requires that all properties in a class have their visibility explicitly declared. If you declare a property using

class A {
    var $property;
}

the property is implicitly global.

To learn more about the PSR-2, please see the PHP-FIG site on the PSR-2.

Loading history...
9
10
	/**
11
	 * @var int The post ID of the current View
12
	 */
13
	var $post_id = 0;
0 ignored issues
show
Coding Style introduced by
The visibility should be declared for property $post_id.

The PSR-2 coding standard requires that all properties in a class have their visibility explicitly declared. If you declare a property using

class A {
    var $property;
}

the property is implicitly global.

To learn more about the PSR-2, please see the PHP-FIG site on the PSR-2.

Loading history...
14
15
	/**
16
	 *
17
	 */
18
	function __construct() {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
19
20
		if( !GravityView_Compatibility::is_valid() ) { return; }
0 ignored issues
show
introduced by
Expected 1 space after "!"; 0 found
Loading history...
Deprecated Code introduced by
The method GravityView_Compatibility::is_valid() has been deprecated.

This method has been deprecated.

Loading history...
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() {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
37
38
		add_action( 'add_meta_boxes', array( $this, 'register_metaboxes' ));
0 ignored issues
show
Coding Style introduced by
Expected 1 spaces before closing bracket; 0 found
Loading history...
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() {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
52
		global $wp_meta_boxes;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
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() {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
69
		global $post;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
70
71
		// On Comment Edit, for example, $post isn't set.
72
		if( empty( $post ) || !is_object( $post ) || !isset( $post->ID ) ) {
0 ignored issues
show
introduced by
Expected 1 space after "!"; 0 found
Loading history...
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
85
		$this->add_settings_metabox_tabs();
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
	 */
97
	function settings_metabox_render( $post ) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
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
159
			GravityView_Metabox_Tabs::add( $tab );
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
179
		$current_form = gravityview_get_form_id( $post_id );
180
181
		$links = GravityView_Admin_Views::get_connected_form_links( $current_form, false );
182
183
		if( !empty( $links ) ) {
0 ignored issues
show
introduced by
Expected 1 space after "!"; 0 found
Loading history...
184
			$links = '<span class="alignright gv-form-links">'. $links .'</span>';
185
		}
186
187
		return __( 'Data Source', 'gravityview' ) . $links;
0 ignored issues
show
introduced by
Expected next thing to be a escaping function, not '$links'
Loading history...
188
	}
189
190
	/**
191
	 * Render html for 'select form' metabox
192
	 *
193
	 * @access public
194
	 * @param object $post
195
	 * @return void
196
	 */
197
	function render_data_source_metabox( $post ) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
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
	 */
210
	function render_select_template_metabox( $post ) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
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 )) {
0 ignored issues
show
introduced by
No space before closing parenthesis is prohibited
Loading history...
224
			return NULL;
0 ignored issues
show
Coding Style introduced by
TRUE, FALSE and NULL must be lowercase; expected null, but found NULL.
Loading history...
225
		}
226
227
		$form = gravityview_get_form( $curr_form );
228
229
		$get_id_backup = isset($_GET['id']) ? $_GET['id'] : NULL;
0 ignored issues
show
introduced by
Detected access of super global var $_GET, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-sanitized input variable: $_GET
Loading history...
Coding Style introduced by
TRUE, FALSE and NULL must be lowercase; expected null, but found NULL.
Loading history...
Coding Style introduced by
Expected 1 spaces after opening bracket; 0 found
Loading history...
Coding Style introduced by
Expected 1 spaces before closing bracket; 0 found
Loading history...
230
231
		if( isset( $form['id'] ) ) {
232
		    $form_script = 'var form = ' . GFCommon::json_encode($form) . ';';
0 ignored issues
show
Coding Style introduced by
Expected 1 spaces after opening bracket; 0 found
Loading history...
Coding Style introduced by
Expected 1 spaces before closing bracket; 0 found
Loading history...
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>';
0 ignored issues
show
Coding Style introduced by
Expected 1 spaces after opening bracket; 0 found
Loading history...
Coding Style introduced by
Expected 1 spaces before closing bracket; 0 found
Loading history...
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
	 */
256
	function render_view_configuration_metabox( $post ) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
257
258
		// Use nonce for verification
259
		wp_nonce_field( 'gravityview_view_configuration', 'gravityview_view_configuration_nonce' );
260
261
		// Selected Form
262
		$curr_form = gravityview_get_form_id( $post->ID );
263
264
		// Selected template
265
		$curr_template = gravityview_get_template_id( $post->ID );
266
267
		echo self::render_merge_tags_scripts( $curr_form );
0 ignored issues
show
introduced by
Expected next thing to be a escaping function, not 'self'
Loading history...
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
	 */
279
	function render_view_settings_metabox( $post ) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
280
281
		// View template settings
282
		$current_settings = gravityview_get_template_settings( $post->ID );
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
	 */
296
	function render_shortcode_hint() {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
297
		global $post;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
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; }
0 ignored issues
show
introduced by
Expected 1 space after "!"; 0 found
Loading history...
304
305
		include self::$metaboxes_dir . 'views/shortcode-hint.php';
306
	}
307
308
}
309
310
new GravityView_Admin_Metaboxes;
311