Issues (924)

classes/admin/class-settings-theme.php (99 issues)

1
<?php
0 ignored issues
show
This file is missing a doc comment.
Loading history...
2
namespace lsx\sharing\classes\admin;
3
4
use CMB_Tab_Field;
0 ignored issues
show
The type CMB_Tab_Field was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
5
6
/**
7
 * Houses the functions for the CMB2 Settings page.
8
 *
9
 * @package lsx-sharing
10
 */
11
class Settings_Theme {
12
13
	/**
14
	 * Holds class instance
15
	 *
16
	 * @since 1.0.0
17
	 *
18
	 * @var      object \lsx\sharing\classes\admin\Settings_Theme()
19
	 */
20
	protected static $instance = null;
21
22
	/**
23
	 * Will return true if this is the LSX Sharing settings page.
24
	 *
25
	 * @var array
26
	 */
27
	public $is_options_page = false;
28
29
	/**
30
	 * Holds the id and labels for the navigation.
31
	 *
32
	 * @var array
33
	 */
34
	public $navigation = array();
35
36
	/**
37
	 * Contructor
38
	 */
39
	public function __construct() {
0 ignored issues
show
Expected 2 blank lines before function; 1 found
Loading history...
40
		add_filter( 'cmb2_enqueue_css', array( $this, 'disable_cmb2_styles' ), 1, 1 );
41
		add_action( 'cmb2_before_form', array( $this, 'generate_navigation' ), 10, 4 );
42
		add_action( 'cmb2_before_title_field_row', array( $this, 'output_tab_open_div' ), 10, 1 );
43
		add_action( 'cmb2_after_tab_closing_field_row', array( $this, 'output_tab_closing_div' ), 10, 1 );
44
		add_action( 'cmb2_render_tab_closing', array( $this, 'cmb2_render_callback_for_tab_closing' ), 10, 5 );
45
		add_filter( 'cmb2_sanitize_tab_closing', array( $this, 'cmb2_sanitize_tab_closing_callback' ), 10, 2 );
46
		add_action( 'cmb2_after_form', array( $this, 'navigation_js' ), 10, 4 );
47
		add_filter( 'cmb2_options_page_redirect_url', array( $this, 'add_tab_argument' ), 10, 1 );
48
	}
0 ignored issues
show
Expected 2 blank lines after function; 1 found
Loading history...
Expected 1 blank line before closing function brace; 0 found
Loading history...
49
50
	/**
51
	 * Return an instance of this class.
52
	 *
53
	 * @since 1.0.0
54
	 *
55
	 * @return    object \lsx\sharing\classes\admin\Settings_Theme()    A single instance of this class.
56
	 */
57
	public static function get_instance() {
58
		// If the single instance hasn't been set, set it now.
59
		if ( null == self::$instance ) {
0 ignored issues
show
Expected 0 spaces after opening bracket; 1 found
Loading history...
Found: ==. Use strict comparisons (=== or !==).
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
60
			self::$instance = new self();
61
		}
0 ignored issues
show
No blank line found after control structure
Loading history...
62
		return self::$instance;
63
	}
0 ignored issues
show
Expected 2 blank lines after function; 1 found
Loading history...
Expected 1 blank line before closing function brace; 0 found
Loading history...
64
65
	/**
0 ignored issues
show
Coding Style Documentation introduced by
Doc comment for parameter "$enabled" missing
Loading history...
66
	 * Disable CMB2 styles on front end forms.
67
	 *
68
	 * @return bool $enabled Whether to enable (enqueue) styles.
69
	 */
70
	public function disable_cmb2_styles( $enabled ) {
71
		if ( is_admin() ) {
0 ignored issues
show
Expected 0 spaces after opening bracket; 1 found
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
72
			$current_screen = get_current_screen();
73
			if ( is_object( $current_screen ) && 'settings_page_lsx-sharing-settings' === $current_screen->id ) {
0 ignored issues
show
Expected 0 spaces after opening bracket; 1 found
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
74
				$enabled = false;
75
			}
76
		}
0 ignored issues
show
No blank line found after control structure
Loading history...
77
		return $enabled;
78
	}
0 ignored issues
show
Expected 2 blank lines after function; 1 found
Loading history...
Expected 1 blank line before closing function brace; 0 found
Loading history...
79
80
	/**
81
	 * Generates the tabbed navigation for the settings page.
82
	 *
83
	 * @param string $cmb_id
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
84
	 * @param string $object_id
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
85
	 * @param string $object_type
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
86
	 * @param object $cmb2_obj
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
87
	 * @return void
88
	 */
89
	public function generate_navigation( $cmb_id, $object_id, $object_type, $cmb2_obj ) {
90
		if ( 'lsx_sharing_settings' === $cmb_id && 'lsx-sharing-settings' === $object_id && 'options-page' === $object_type ) {
0 ignored issues
show
Expected 0 spaces after opening bracket; 1 found
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
91
			$this->navigation      = array();
92
			$this->is_options_page = true;
0 ignored issues
show
Documentation Bug introduced by
It seems like true of type true is incompatible with the declared type array of property $is_options_page.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
93
			if ( isset( $cmb2_obj->meta_box['fields'] ) && ! empty( $cmb2_obj->meta_box['fields'] ) ) {
0 ignored issues
show
Expected 0 spaces after opening bracket; 1 found
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
94
				foreach ( $cmb2_obj->meta_box['fields'] as $field_index => $field ) {
0 ignored issues
show
Expected 0 spaces after opening bracket; 1 found
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
95
					if ( 'title' === $field['type'] ) {
0 ignored issues
show
Expected 0 spaces after opening bracket; 1 found
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
96
						$this->navigation[ $field_index ] = $field['name'];
97
					}
98
				}
99
			}
0 ignored issues
show
No blank line found after control structure
Loading history...
100
			$this->output_navigation();
101
		}
102
	}
0 ignored issues
show
Expected 2 blank lines after function; 1 found
Loading history...
Expected 1 blank line before closing function brace; 0 found
Loading history...
103
104
	/**
105
	 * Outputs the WP style navigation for the Settings page.
106
	 *
107
	 * @return void
108
	 */
109
	public function output_navigation() {
110
		if ( ! empty( $this->navigation ) ) {
0 ignored issues
show
Expected 0 spaces after opening bracket; 1 found
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
111
			?>
112
			<div class="wp-filter hide-if-no-js">
113
				<ul class="filter-links">
114
					<?php
115
					$first_tab    = true;
116
					$total        = count( $this->navigation );
117
					$count        = 0;
118
					$separator    = ' |';
119
					$selected_tab = '';
120
					if ( isset( $_GET['cmb_tab'] ) && '' !== $_GET['cmb_tab'] ) {
0 ignored issues
show
Expected 0 spaces after opening bracket; 1 found
Loading history...
Processing form data without nonce verification.
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
121
						$selected_tab  = sanitize_text_field( $_GET['cmb_tab'] );
0 ignored issues
show
Equals sign not aligned with surrounding assignments; expected 1 space but found 2 spaces

This check looks for multiple assignments in successive lines of code. It will report an issue if the operators are not in a straight line.

To visualize

$a = "a";
$ab = "ab";
$abc = "abc";

will produce issues in the first and second line, while this second example

$a   = "a";
$ab  = "ab";
$abc = "abc";

will produce no issues.

Loading history...
Processing form data without nonce verification.
Loading history...
$_GET data not unslashed before sanitization. Use wp_unslash() or similar
Loading history...
122
						$selected_tab  = 'settings_' . $selected_tab;
0 ignored issues
show
Equals sign not aligned with surrounding assignments; expected 1 space but found 2 spaces

This check looks for multiple assignments in successive lines of code. It will report an issue if the operators are not in a straight line.

To visualize

$a = "a";
$ab = "ab";
$abc = "abc";

will produce issues in the first and second line, while this second example

$a   = "a";
$ab  = "ab";
$abc = "abc";

will produce no issues.

Loading history...
123
					}
0 ignored issues
show
No blank line found after control structure
Loading history...
124
					foreach ( $this->navigation as $key => $label ) {
0 ignored issues
show
Expected 0 spaces after opening bracket; 1 found
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
125
						$count++;
126
						$current_css = '';
127
						if ( ( true === $first_tab && '' === $selected_tab ) || $key === $selected_tab ) {
0 ignored issues
show
Expected 0 spaces after opening bracket; 1 found
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
128
							$first_tab   = false;
129
							$current_css = 'current';
130
						}
0 ignored issues
show
No blank line found after control structure
Loading history...
131
						if ( $count === $total ) {
0 ignored issues
show
Expected 0 spaces after opening bracket; 1 found
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
132
							$separator = '';
133
						}
134
						?>
135
							<li><a href="#" class="<?php echo esc_attr( $current_css ); ?>" data-sort="<?php echo esc_attr( $key ); ?>_tab"><?php echo esc_attr( $label ); ?></a><?php echo esc_attr( $separator ); ?></li>
136
						<?php
137
					}
138
					?>
139
				</ul>
140
			</div>
141
			<?php
142
		}
143
	}
0 ignored issues
show
Expected 2 blank lines after function; 1 found
Loading history...
Expected 1 blank line before closing function brace; 0 found
Loading history...
144
145
	/**
146
	 * Outputs the opening tab div.
147
	 *
148
	 * @param object $field CMB2_Field();
0 ignored issues
show
Coding Style Documentation introduced by
Parameter comment must end with a full stop
Loading history...
149
	 * @return void
150
	 */
151
	public function output_tab_open_div( $field ) {
152
		if ( true === $this->is_options_page && isset( $field->args['type'] ) && 'title' === $field->args['type'] ) {
0 ignored issues
show
The condition true === $this->is_options_page is always false.
Loading history...
Expected 0 spaces after opening bracket; 1 found
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
153
			?>
154
			<div id="<?php echo esc_attr( $field->args['id'] ); ?>_tab" class="tab tab-nav hidden">
155
			<?php
156
		}
157
	}
0 ignored issues
show
Expected 2 blank lines after function; 1 found
Loading history...
Expected 1 blank line before closing function brace; 0 found
Loading history...
158
159
	/**
160
	 * Outputs the opening closing div.
161
	 *
162
	 * @param object $field CMB2_Field();
0 ignored issues
show
Coding Style Documentation introduced by
Parameter comment must end with a full stop
Loading history...
163
	 * @return void
164
	 */
165
	public function output_tab_closing_div( $field ) {
166
		if ( true === $this->is_options_page && isset( $field->args['type'] ) && 'tab_closing' === $field->args['type'] ) {
0 ignored issues
show
The condition true === $this->is_options_page is always false.
Loading history...
Expected 0 spaces after opening bracket; 1 found
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
167
			?>
168
			</div>
169
			<?php
170
		}
171
	}
0 ignored issues
show
Expected 2 blank lines after function; 1 found
Loading history...
Expected 1 blank line before closing function brace; 0 found
Loading history...
172
173
	public function cmb2_render_callback_for_tab_closing( $field, $escaped_value, $object_id, $object_type, $field_type_object ) {
0 ignored issues
show
Coding Style Documentation introduced by
Missing doc comment for function cmb2_render_callback_for_tab_closing()
Loading history...
174
		return;
0 ignored issues
show
Empty return statement not required here
Loading history...
175
	}
0 ignored issues
show
Expected 2 blank lines after function; 1 found
Loading history...
Expected 1 blank line before closing function brace; 0 found
Loading history...
176
177
	public function cmb2_sanitize_tab_closing_callback( $override_value, $value ) {
0 ignored issues
show
Coding Style Documentation introduced by
Missing doc comment for function cmb2_sanitize_tab_closing_callback()
Loading history...
178
		return '';
179
	}
0 ignored issues
show
Expected 2 blank lines after function; 1 found
Loading history...
Expected 1 blank line before closing function brace; 0 found
Loading history...
180
181
	/**
182
	 * Outputs the Script for the tabbed navigation.
183
	 *
184
	 * @param string $cmb_id
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
185
	 * @param string $object_id
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
186
	 * @param string $object_type
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
187
	 * @return void
188
	 */
189
	public function navigation_js( $cmb_id, $object_id, $object_type ) {
190
		if ( 'lsx_sharing_settings' === $cmb_id && 'lsx-sharing-settings' === $object_id && 'options-page' === $object_type ) {
0 ignored issues
show
Expected 0 spaces after opening bracket; 1 found
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
191
			?>
192
			<script>
193
				var LSX_SHARING_CMB2 = Object.create( null );
194
195
				;( function( $, window, document, undefined ) {
196
197
					'use strict';
198
199
					LSX_SHARING_CMB2.document = $(document);
200
201
					<?php $this->navigation_js_init(); ?>
202
203
					<?php $this->navigation_js_add_tab_input(); ?>
204
205
					<?php $this->navigation_js_prep_navigation(); ?>
206
207
					<?php $this->navigation_js_watch_navigation(); ?>
208
209
					<?php $this->navigation_js_url_param(); ?>
210
211
					LSX_SHARING_CMB2.document.ready( function() {
212
						LSX_SHARING_CMB2.init();
213
					} );
214
215
				} )( jQuery, window, document );
216
			</script>
217
			<?php
218
		}
219
	}
0 ignored issues
show
Expected 2 blank lines after function; 1 found
Loading history...
Expected 1 blank line before closing function brace; 0 found
Loading history...
220
221
	/**
222
	 * This will add the tab selection to the url.
223
	 *
224
	 * @param string $url
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
225
	 * @return void
0 ignored issues
show
Function return type is void, but function contains return statement
Loading history...
226
	 */
227
	public function add_tab_argument( $url ) {
228
		if ( isset( $_POST['cmb_tab'] ) && '' !== $_POST['cmb_tab'] ) { // @codingStandardsIgnoreLine
229
			$tab_selection = sanitize_text_field( $_POST['cmb_tab'] ); // @codingStandardsIgnoreLine
230
			$tab_selection = str_replace( array( 'settings_', '_tab' ), '', $tab_selection ); // @codingStandardsIgnoreLine
231
			if ( 'single' !== $tab_selection ) {
0 ignored issues
show
Expected 0 spaces after opening bracket; 1 found
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
232
				$url = add_query_arg( 'cmb_tab', $tab_selection, $url );
233
			} else {
234
				$url = remove_query_arg( 'cmb_tab', $url );
235
			}
236
		}
0 ignored issues
show
No blank line found after control structure
Loading history...
237
		return $url;
238
	}
0 ignored issues
show
Expected 2 blank lines after function; 1 found
Loading history...
Expected 1 blank line before closing function brace; 0 found
Loading history...
239
240
	/**
241
	 * The JS function to init the navigation JS.
242
	 *
243
	 * @return void
244
	 */
245
	public function navigation_js_init() {
246
		?>
247
			/**
248
			* Start the JS Class
249
			*/
250
			LSX_SHARING_CMB2.init = function() {
251
				var tab = LSX_SHARING_CMB2.urlParam( 'cmb_tab' );
252
				if ( 0 === tab || '0' === tab ) {
253
					tab = '';
254
			}
255
			LSX_SHARING_CMB2.addTabInput( tab );
256
			LSX_SHARING_CMB2.prepNavigation( tab );
257
			LSX_SHARING_CMB2.watchNavigation();
258
			};
259
		<?php
260
	}
0 ignored issues
show
Expected 2 blank lines after function; 0 found
Loading history...
Expected 1 blank line before closing function brace; 0 found
Loading history...
261
	public function navigation_js_add_tab_input() {
0 ignored issues
show
Coding Style Documentation introduced by
Missing doc comment for function navigation_js_add_tab_input()
Loading history...
262
		?>
263
		LSX_SHARING_CMB2.addTabInput = function( tab = '' ) {
264
			var counter = 1;
265
			$( "form.cmb-form" ).append('<input type="hidden" name="cmb_tab" value="' + tab + '" />');
266
		}
267
		<?php
268
	}
0 ignored issues
show
Expected 2 blank lines after function; 1 found
Loading history...
Expected 1 blank line before closing function brace; 0 found
Loading history...
269
270
	public function navigation_js_url_param() {
0 ignored issues
show
Coding Style Documentation introduced by
Missing doc comment for function navigation_js_url_param()
Loading history...
271
		?>
272
		LSX_SHARING_CMB2.urlParam = function(name){
273
			var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
274
			if ( results == null ){
275
				return 0;
276
			} else {
277
				return results[1] || 0;
278
			}
279
		}
280
		<?php
281
	}
0 ignored issues
show
Expected 2 blank lines after function; 0 found
Loading history...
Expected 1 blank line before closing function brace; 0 found
Loading history...
282
	/**
283
	 * The JS function to init the watch navigation JS.
284
	 *
285
	 * @return void
286
	 */
287
	public function navigation_js_watch_navigation() {
288
		?>
289
		LSX_SHARING_CMB2.watchNavigation = function() {
290
			$( ".wp-filter li a" ).on( 'click', function(event){
291
				event.preventDefault();
292
				// Change the current Tab heading.
293
				$( ".wp-filter li a" ).removeClass('current');
294
				$( this ).addClass('current');
295
296
				// Change the current tab div.
297
				var target = $( this ).attr('data-sort');
298
				$( ".tab.tab-nav.current" ).hide().removeClass('current');
299
				$( "#"+target ).show().addClass('current');
300
				$( 'input[name="cmb_tab"]').val(target);
301
			});
302
		};
303
		<?php
304
	}
0 ignored issues
show
Expected 2 blank lines after function; 1 found
Loading history...
Expected 1 blank line before closing function brace; 0 found
Loading history...
305
306
	/**
307
	 * Preps the navigation for the js functions.
308
	 *
309
	 * @return void
310
	 */
311
	public function navigation_js_prep_navigation() {
312
		?>
313
		LSX_SHARING_CMB2.prepNavigation = function( tab = '' ) {
314
			var counter = 1;
315
			$( ".tab.tab-nav" ).each(function(){
316
				console.log( tab );
317
				if ( ( 1 !== counter && '' === tab ) || ( '' !== tab && 'settings_' + tab + '_tab' !== $( this ).attr('id') ) ) {
318
					$( this ).hide().removeClass('hidden');
319
				} else {
320
					$( this ).addClass( 'current' ).removeClass('hidden');
321
				}
322
				counter++;
323
			});
324
		}
325
		<?php
326
	}
0 ignored issues
show
Expected 2 blank lines after function; 0 found
Loading history...
Expected 1 blank line before closing function brace; 0 found
Loading history...
327
}
328