GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — feature/gallery-template-clien... ( 140c9b...ced802 )
by Brad
03:04
created

FooGallery_Admin_Gallery_MetaBox_Fields   F

Complexity

Total Complexity 64

Size/Duplication

Total Lines 297
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 1

Importance

Changes 0
Metric Value
dl 0
loc 297
rs 3.4883
c 0
b 0
f 0
wmc 64
lcom 0
cbo 1

7 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 10 1
F render_gallery_template_field() 0 170 42
C alter_gallery_template_field() 0 53 10
B get_thumb_size_choices() 0 14 5
A get_thumb_link_field_choices() 0 8 1
A get_lightbox_field_choices() 0 5 1
A check_lightbox_value() 0 12 4

How to fix   Complexity   

Complex Class

Complex classes like FooGallery_Admin_Gallery_MetaBox_Fields often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use FooGallery_Admin_Gallery_MetaBox_Fields, and based on these observations, apply Extract Interface, too.

1
<?php
2
3
if ( ! class_exists( 'FooGallery_Admin_Gallery_MetaBox_Fields' ) ) {
4
5
	class FooGallery_Admin_Gallery_MetaBox_Fields {
6
7
		function __construct() {
8
			//handle some default field types that all templates can reuse
9
			add_filter( 'foogallery_alter_gallery_template_field', array( $this, 'alter_gallery_template_field' ), 10, 2 );
10
11
			//render the different types of fields for our gallery settings
12
			add_action( 'foogallery_render_gallery_template_field', array( $this, 'render_gallery_template_field' ), 10, 3 );
13
14
			//allow changing of field values
15
			add_filter( 'foogallery_render_gallery_template_field_value', array( $this, 'check_lightbox_value' ), 10, 4 );
16
		}
17
18
		/**
19
		 * Renders a gallery template field into the gallery settings metabox for a FooGallery
20
		 *
21
		 * @param array $field
22
		 * @param       $gallery FooGallery
23
		 * @param       $template
24
		 */
25
		function render_gallery_template_field( $field = array(), $gallery, $template ) {
26
			$template_slug = $template['slug'];
27
28
			//only declare up front so no debug warnings are shown
29
			$type = $id = $desc = $default = $placeholder = $choices = $class = $spacer = $opactiy = null;
30
31
			extract( $field );
32
33
			$id = $template_slug . '_' . $id;
34
35
			$field['value'] = apply_filters( 'foogallery_render_gallery_template_field_value', $gallery->get_meta( $id, $default ), $field, $gallery, $template );
36
37
			$field_class = empty($class) ? '' : ' class="' . $class . '"';
38
39
			$field['choices'] = apply_filters( 'foogallery_render_gallery_template_field_choices', $choices, $field, $gallery );
40
41
			//allow for UI customization
42
			do_action( 'foogallery_render_gallery_template_field_before', $field, $gallery );
43
44
			echo '<div class="foogallery_metabox_field-' . $type . '">';
45
46
			switch ( $type ) {
47
48
				case 'html':
49
					echo $desc;
50
					$desc = '';
0 ignored issues
show
Unused Code introduced by
$desc is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
51
					break;
52
53
				case 'checkbox':
54
					if ( isset($gallery->settings[$id]) && $gallery->settings[$id] == 'on' ) {
55
						$field['value'] = 'on';
56
					} else if ( ! isset($gallery->settings) && $default == 'on' ) {
57
						$field['value'] = 'on';
58
					} else {
59
						$field['value'] = '';
60
					}
61
62
					$checked = 'on' === $field['value'] ? ' checked="checked"' : '';
63
					echo '<input' . $field_class . ' type="checkbox" id="FooGallerySettings_' . $id . '" name="' . FOOGALLERY_META_SETTINGS . '[' . $id . ']" value="on"' . $checked . ' />';
64
					break;
65
66
				case 'select':
67
					echo '<select' . $field_class . ' id="FooGallerySettings_' . $id . '" name="' . FOOGALLERY_META_SETTINGS . '[' . $id . ']">';
68
					foreach ( $choices as $value => $label ) {
0 ignored issues
show
Bug introduced by
The expression $choices of type null is not traversable.
Loading history...
69
						$selected = '';
70
						if ( $field['value'] == $value ) {
71
							$selected = ' selected="selected"';
72
						}
73
						echo '<option ' . $selected . ' value="' . $value . '">' . $label . '</option>';
74
					}
75
76
					echo '</select>';
77
					break;
78
79
				case 'radio':
80
					$i = 0;
81
					$spacer = isset($spacer) ? $spacer : '<br />';
82
					foreach ( $choices as $value => $label ) {
0 ignored issues
show
Bug introduced by
The expression $choices of type null is not traversable.
Loading history...
83
						$selected = '';
84
						if ( $field['value'] == $value ) {
85
							$selected = ' checked="checked"';
86
						}
87
						echo '<input' . $field_class . $selected . ' type="radio" name="' . FOOGALLERY_META_SETTINGS . '[' . $id . ']"  id="FooGallerySettings_' . $id . $i . '" value="' . $value . '"> <label for="FooGallerySettings_' . $id . $i . '">' . $label . '</label>';
88
						if ( $i < count( $choices ) - 1 ) {
89
							echo $spacer;
90
						}
91
						$i++;
92
					}
93
					break;
94
95
				case 'textarea':
96
					echo '<textarea' . $field_class . ' id="FooGallerySettings_' . $id . '" name="' . FOOGALLERY_META_SETTINGS . '[' . $id . ']" placeholder="' . $placeholder . '">' . esc_attr( $field['value'] ) . '</textarea>';
97
98
					break;
99
100
				case 'text':
101
					echo '<input' . $field_class . ' type="text" id="FooGallerySettings_' . $id . '" name="' . FOOGALLERY_META_SETTINGS . '[' . $id . ']" value="' . esc_attr( $field['value'] ) . '" />';
102
103
					break;
104
105
				case 'colorpicker':
0 ignored issues
show
Coding Style introduced by
The case body in a switch statement must start on the line following the statement.

According to the PSR-2, the body of a case statement must start on the line immediately following the case statement.

switch ($expr) {
case "A":
    doSomething(); //right
    break;
case "B":

    doSomethingElse(); //wrong
    break;

}

To learn more about the PSR-2 coding standard, please refer to the PHP-Fig.

Loading history...
106
107
					$opacity_attribute = empty($opacity) ? '' : ' data-show-alpha="true"';
108
109
					echo '<input ' . $opacity_attribute . ' class="colorpicker" type="text" id="FooGallerySettings_' . $id . '" name="' . FOOGALLERY_META_SETTINGS . '[' . $id . ']" value="' . esc_attr( $field['value'] ) . '" />';
110
111
					break;
112
113
				case 'number':
114
					$min = isset($min) ? $min : 0;
115
					$step = isset($step) ? $step : 1;
116
					echo '<input class="regular-text ' . $class . '" type="number" step="' . $step . '" min="' . $min .'" id="FooGallerySettings_' . $id . '" name="' . FOOGALLERY_META_SETTINGS . '[' . $id . ']" placeholder="' . $placeholder . '" value="' . esc_attr( $field['value'] ) . '" />';
117
118
					break;
119
120
				case 'checkboxlist':
121
					$i = 0;
122
					foreach ( $choices as $value => $label ) {
123
124
						$checked = '';
125
						if ( isset($field['value'][$value]) && $field['value'][$value] == $value ) {
126
							$checked = 'checked="checked"';
127
						}
128
129
						echo '<input' . $field_class . ' ' . $checked . ' type="checkbox" name="' . FOOGALLERY_META_SETTINGS . '[' . $id . '][' . $value . ']" id="FooGallerySettings_' . $id . $i . '" value="' . $value . '" data-value="' . $value . '"> <label for="FooGallerySettings_' . $id . $i . '">' . $label . '</label>';
130
						if ( $i < count( $choices ) - 1 ) {
131
							echo '<br />';
132
						}
133
						$i++;
134
					}
135
136
					break;
137
				case 'icon':
138
					$i = 0;
139
					$input_name = FOOGALLERY_META_SETTINGS . '[' . $id . ']';
140
					$icon_html = '';
141
					foreach ( $choices as $value => $icon ) {
142
						$selected = ( $field['value'] == $value ) ? ' checked="checked"' : '';
143
						$icon_html .= '<input style="display:none" name="' . $input_name. '" id="FooGallerySettings_' . $id . $i . '" ' . $selected . ' type="radio" value="' . $value . '" tabindex="' . $i . '"/>';
144
						$title = $icon['label'];
145
						$img = $icon['img'];
146
						$icon_html .= '<label for="FooGallerySettings_' . $id . $i . '" data-balloon-length="small" data-balloon-pos="down" data-balloon="' . $title . '"><img src="' . $img . '" /></label>';
147
						$i++;
148
					}
149
					echo $icon_html;
150
					break;
151
152
				case 'htmlicon':
153
					$i = 0;
154
					$input_name = FOOGALLERY_META_SETTINGS . '[' . $id . ']';
155
					$icon_html = '';
156
					foreach ( $choices as $value => $icon ) {
0 ignored issues
show
Bug introduced by
The expression $choices of type null is not traversable.
Loading history...
157
						$selected = ( $field['value'] == $value ) ? ' checked="checked"' : '';
158
						$icon_html .= '<input style="display:none" name="' . $input_name. '" id="FooGallerySettings_' . $id . $i . '" ' . $selected . ' type="radio" value="' . $value . '" tabindex="' . $i . '"/>';
159
						$title = $icon['label'];
160
						$html = $icon['html'];
161
						$icon_html .= '<label for="FooGallerySettings_' . $id . $i . '" data-balloon-length="small" data-balloon-pos="down" data-balloon="' . $title . '">' . $html . '</label>';
162
						$i++;
163
					}
164
					echo $icon_html;
165
					break;
166
167
				case 'thumb_size':
168
					$width = is_array( $field['value'] ) ? $field['value']['width'] : 150;
169
					$height = is_array( $field['value'] ) ? $field['value']['height'] : 150;
170
					$crop = is_array( $field['value'] ) && array_key_exists( 'crop', $field['value'] ) ? $field['value']['crop'] : 0;
171
					$crop_checked = ( $crop == 1 ) ? ' checked="checked"' : '';
172
					echo '<label for="FooGallerySettings_' . $id . '_width">' . __( 'Width', 'foogallery' ) . '</label>';
173
					echo '<input class="small-text" type="number" step="1" min="0" id="FooGallerySettings_' . $id . '_width" name="' . FOOGALLERY_META_SETTINGS . '[' . $id . '][width]" value="' . esc_attr( $width ) . '" />';
174
					echo '<label for="FooGallerySettings_' . $id . '_width">' . __( 'Height', 'foogallery' ) . '</label>';
175
					echo '<input class="small-text" type="number" step="1" min="0" id="FooGallerySettings_' . $id . '_height" name="' . FOOGALLERY_META_SETTINGS . '[' . $id . '][height]" value="' . esc_attr( $height ) . '" />';
176
					echo '<div class="foogallery-thumbsize-crop"><input name="' . FOOGALLERY_META_SETTINGS . '[' . $id . '][crop]" type="hidden" id="FooGallerySettings_' . $id . '_nocrop" value="0" />';
177
					echo '<input name="' . FOOGALLERY_META_SETTINGS . '[' . $id . '][crop]" type="checkbox" id="FooGallerySettings_' . $id . '_crop" value="1"' . $crop_checked . '>';
178
					echo '<label for="FooGallerySettings_' . $id . '_crop">' . __( 'Crop thumbnail to exact dimensions', 'foogallery' ) . '</label></div>';
179
					break;
180
181
				default:
182
					do_action( 'foogallery_render_gallery_template_field_custom', $field, $gallery, $template );
183
					break;
184
			}
185
186
			if (!empty($suffix)) {
187
				echo $suffix;
188
			}
189
190
			echo '</div>';
191
192
			//allow for more customization
193
			do_action( 'foogallery_render_gallery_template_field_after', $field, $gallery );
194
		}
195
196
		function alter_gallery_template_field( $field, $gallery ) {
197
			if ( $field ) {
198
				switch ( $field['type'] ) {
199
					case 'thumb_link':
200
						$field['type'] = 'radio';
201
						$field['choices'] = $this->get_thumb_link_field_choices();
202
						break;
203
					case 'lightbox':
204
						$field['lightbox'] = true;
205
						$lightboxes = $this->get_lightbox_field_choices();
206
						if ( 1 === count( $lightboxes ) && array_key_exists( 'none', $lightboxes ) ) {
207
							$field['type'] = 'html';
208
							$field['desc'] = '<strong>' . __( 'You have no lightbox extensions activated!', 'foogallery' ) . '</strong><br />';
209
							$api = new FooGallery_Extensions_API();
210
							if ( $api->is_downloaded( false, FOOGALLERY_FOOBOX_PRO_EXTENSION_SLUG ) ) {
0 ignored issues
show
Documentation introduced by
FOOGALLERY_FOOBOX_PRO_EXTENSION_SLUG is of type string, but the function expects a boolean.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
211
								//just need to activate it
212
								$foobox_install_link = foogallery_build_admin_menu_url( array(
213
									'page' => 'foogallery-extensions',
214
									'extension' => FOOGALLERY_FOOBOX_PRO_EXTENSION_SLUG,
215
									'action' => 'activate',
216
								));
217
								$field['desc'] .= '<a target="_blank" href="' . esc_url( $foobox_install_link ). '">' . __( 'Activate FooBox right now!', 'foogallery' ) . '</a>';
218
							} else if ( $api->is_downloaded( false, FOOGALLERY_FOOBOX_FREE_EXTENSION_SLUG ) ) {
0 ignored issues
show
Documentation introduced by
FOOGALLERY_FOOBOX_FREE_EXTENSION_SLUG is of type string, but the function expects a boolean.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
219
								//just need to activate it
220
								$foobox_install_link = foogallery_build_admin_menu_url( array(
221
									'page' => 'foogallery-extensions',
222
									'extension' => FOOGALLERY_FOOBOX_FREE_EXTENSION_SLUG,
223
									'action' => 'activate',
224
								));
225
								$field['desc'] .= '<a target="_blank" href="' . esc_url( $foobox_install_link ). '">' . __( 'Activate FooBox FREE right now!', 'foogallery' ) . '</a>';
226
							} else {
227
								//we need to download it
228
								$foobox_install_link = foogallery_build_admin_menu_url( array(
229
									'page' => 'foogallery-extensions',
230
									'extension' => FOOGALLERY_FOOBOX_FREE_EXTENSION_SLUG,
231
									'action' => 'download',
232
								));
233
								$foobox_install_html = '<a target="_blank" href="' . esc_url( $foobox_install_link ) . '">' . __( 'Download and activate FooBox FREE', 'foogallery' ) . '</a>';
234
								$field['desc'] .= sprintf( __( '%s which works flawlessly with %s.', 'foogallery' ), $foobox_install_html, foogallery_plugin_name() );
235
							}
236
						} else {
237
							$field['type'] = 'select';
238
							$field['choices'] = $lightboxes;
239
						}
240
						break;
241
				}
242
243
				if ( isset($field['help']) && $field['help'] ) {
244
					$field['type'] = 'help';
245
				}
246
			}
247
			return $field;
248
		}
249
250
		function get_thumb_size_choices() {
251
			global $_wp_additional_image_sizes;
252
			$sizes = array();
253
			foreach( get_intermediate_image_sizes() as $s ){
254
				$sizes[ $s ] = array( 0, 0 );
255
				if ( in_array( $s, array( 'thumbnail', 'medium', 'large', ) ) ){
256
					$sizes[ $s ] = $s . ' (' . get_option( $s . '_size_w' ) . 'x' . get_option( $s . '_size_h' ) . ')';
257
				} else {
258
					if ( isset( $_wp_additional_image_sizes ) && isset( $_wp_additional_image_sizes[ $s ] ) )
259
						$sizes[ $s ] = $s . ' (' . $_wp_additional_image_sizes[ $s ]['width'] . 'x' . $_wp_additional_image_sizes[ $s ]['height'] . ')';
260
				}
261
			}
262
			return $sizes;
263
		}
264
265
		function get_thumb_link_field_choices() {
266
			return apply_filters( 'foogallery_gallery_template_field_thumb_links', array(
267
				'image'  => __( 'Full Size Image (Lightbox)', 'foogallery' ),
268
				'page'   => __( 'Image Attachment Page', 'foogallery' ),
269
				'custom' => __( 'Custom URL', 'foogallery' ),
270
				'none'   => __( 'Not linked', 'foogallery' ),
271
			) );
272
		}
273
274
		function get_lightbox_field_choices() {
275
			$lightboxes = apply_filters( 'foogallery_gallery_template_field_lightboxes', array() );
276
			$lightboxes['none'] = __( 'None', 'foogallery' );
277
			return $lightboxes;
278
		}
279
280
		/***
281
		 * Check if we have a lightbox value from FooBox free and change it if foobox free is no longer active
282
		 * @param $value
283
		 * @param $field
284
		 * @param $gallery
285
		 * @param $template
286
		 *
287
		 * @return string
288
		 */
289
		function check_lightbox_value($value, $field, $gallery, $template) {
290
291
			if ( isset( $field['lightbox'] ) ) {
292
				if ( 'foobox-free' === $value ) {
293
					if ( !class_exists( 'Foobox_Free' ) ) {
294
						return 'foobox';
295
					}
296
				}
297
			}
298
299
			return $value;
300
		}
301
	}
302
}
303