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 — develop ( fc9531...c44ae7 )
by Brad
02:36
created

FooGallery_Admin_Gallery_MetaBox_Fields   D

Complexity

Total Complexity 61

Size/Duplication

Total Lines 277
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 1

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 277
rs 4.054
wmc 61
lcom 0
cbo 1

7 Methods

Rating   Name   Duplication   Size   Complexity  
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 __construct() 0 10 1
F render_gallery_template_field() 0 158 40
D alter_gallery_template_field() 0 45 9
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 = '';
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 ) {
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 ) {
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] == 'true' ) {
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="on"> <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 . '" title="' . $title . '"><img src="' . $img . '" /></label>';
147
						$i++;
148
					}
149
					echo $icon_html;
150
					break;
151
152
				case 'thumb_size':
153
					$width = is_array( $field['value'] ) ? $field['value']['width'] : 150;
154
					$height = is_array( $field['value'] ) ? $field['value']['height'] : 150;
155
					$crop = is_array( $field['value'] ) && array_key_exists( 'crop', $field['value'] ) ? $field['value']['crop'] : 0;
156
					$crop_checked = ( $crop == 1 ) ? ' checked="checked"' : '';
157
					echo '<label for="FooGallerySettings_' . $id . '_width">' . __( 'Width', 'foogallery' ) . '</label>';
158
					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 ) . '" />';
159
					echo '<label for="FooGallerySettings_' . $id . '_width">' . __( 'Height', 'foogallery' ) . '</label>';
160
					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 ) . '" />';
161
					echo '<input name="' . FOOGALLERY_META_SETTINGS . '[' . $id . '][crop]" type="hidden" id="FooGallerySettings_' . $id . '_nocrop" value="0" />';
162
					echo '<input name="' . FOOGALLERY_META_SETTINGS . '[' . $id . '][crop]" type="checkbox" id="FooGallerySettings_' . $id . '_crop" value="1"' . $crop_checked . '>';
163
					echo '<label for="FooGallerySettings_' . $id . '_crop">' . __( 'Crop thumbnail to exact dimensions', 'foogallery' ) . '</label>';
164
					break;
165
166
				default:
167
					do_action( 'foogallery_render_gallery_template_field_custom', $field, $gallery, $template );
168
					break;
169
			}
170
171
			if (!empty($suffix)) {
172
				echo $suffix;
173
			}
174
175
			echo '</div>';
176
			if ( isset( $desc ) ) {
177
				echo '<small>' . $desc . '</small>';
178
			}
179
180
			//allow for more customization
181
			do_action( 'foogallery_render_gallery_template_field_after', $field, $gallery );
182
		}
183
184
		function alter_gallery_template_field( $field, $gallery ) {
185
			if ( $field ) {
186
				switch ( $field['type'] ) {
187
					case 'thumb_link':
188
						$field['type'] = 'radio';
189
						$field['choices'] = $this->get_thumb_link_field_choices();
190
						break;
191
					case 'lightbox':
192
						$field['lightbox'] = true;
193
						$lightboxes = $this->get_lightbox_field_choices();
194
						if ( 1 === count( $lightboxes ) && array_key_exists( 'none', $lightboxes ) ) {
195
							$field['type'] = 'html';
196
							$field['desc'] = '<strong>' . __( 'You have no lightbox extensions activated!', 'foogallery' ) . '</strong><br />';
197
							$api = new FooGallery_Extensions_API();
198
							if ( $api->is_downloaded( false, FOOGALLERY_FOOBOX_FREE_EXTENSION_SLUG ) ) {
199
								//just need to activate it
200
								$foobox_install_link = foogallery_build_admin_menu_url( array(
201
									'page' => 'foogallery-extensions',
202
									'extension' => FOOGALLERY_FOOBOX_FREE_EXTENSION_SLUG,
203
									'action' => 'activate',
204
								));
205
								$field['desc'] .= '<a target="_blank" href="' . esc_url( $foobox_install_link ). '">' . __( 'Activate FooBox FREE right now!', 'foogallery' ) . '</a>';
206
							} else {
207
								//we need to download it
208
								$foobox_install_link = foogallery_build_admin_menu_url( array(
209
									'page' => 'foogallery-extensions',
210
									'extension' => FOOGALLERY_FOOBOX_FREE_EXTENSION_SLUG,
211
									'action' => 'download',
212
								));
213
								$foobox_install_html = '<a target="_blank" href="' . esc_url( $foobox_install_link ) . '">' . __( 'Download and activate FooBox FREE', 'foogallery' ) . '</a>';
214
								$field['desc'] .= sprintf( __( '%s which works flawlessly with %s.', 'foogallery' ), $foobox_install_html, foogallery_plugin_name() );
215
							}
216
						} else {
217
							$field['type'] = 'select';
218
							$field['choices'] = $lightboxes;
219
						}
220
						break;
221
				}
222
223
				if ( isset($field['help']) && $field['help'] ) {
224
					$field['type'] = 'help';
225
				}
226
			}
227
			return $field;
228
		}
229
230
		function get_thumb_size_choices() {
231
			global $_wp_additional_image_sizes;
232
			$sizes = array();
233
			foreach( get_intermediate_image_sizes() as $s ){
234
				$sizes[ $s ] = array( 0, 0 );
235
				if ( in_array( $s, array( 'thumbnail', 'medium', 'large', ) ) ){
236
					$sizes[ $s ] = $s . ' (' . get_option( $s . '_size_w' ) . 'x' . get_option( $s . '_size_h' ) . ')';
237
				} else {
238
					if ( isset( $_wp_additional_image_sizes ) && isset( $_wp_additional_image_sizes[ $s ] ) )
239
						$sizes[ $s ] = $s . ' (' . $_wp_additional_image_sizes[ $s ]['width'] . 'x' . $_wp_additional_image_sizes[ $s ]['height'] . ')';
240
				}
241
			}
242
			return $sizes;
243
		}
244
245
		function get_thumb_link_field_choices() {
246
			return apply_filters( 'foogallery_gallery_template_field_thumb_links', array(
247
				'image'  => __( 'Full Size Image', 'foogallery' ),
248
				'page'   => __( 'Image Attachment Page', 'foogallery' ),
249
				'custom' => __( 'Custom URL', 'foogallery' ),
250
				'none'   => __( 'Not linked', 'foogallery' ),
251
			) );
252
		}
253
254
		function get_lightbox_field_choices() {
255
			$lightboxes = apply_filters( 'foogallery_gallery_template_field_lightboxes', array() );
256
			$lightboxes['none'] = __( 'None', 'foogallery' );
257
			return $lightboxes;
258
		}
259
260
		/***
261
		 * Check if we have a lightbox value from FooBox free and change it if foobox free is no longer active
262
		 * @param $value
263
		 * @param $field
264
		 * @param $gallery
265
		 * @param $template
266
		 *
267
		 * @return string
268
		 */
269
		function check_lightbox_value($value, $field, $gallery, $template) {
270
271
			if ( isset( $field['lightbox'] ) ) {
272
				if ( 'foobox-free' === $value ) {
273
					if ( !class_exists( 'Foobox_Free' ) ) {
274
						return 'foobox';
275
					}
276
				}
277
			}
278
279
			return $value;
280
		}
281
	}
282
}
283