Conditions | 65 |
Paths | > 20000 |
Total Lines | 398 |
Code Lines | 271 |
Lines | 11 |
Ratio | 2.76 % |
Changes | 0 |
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
1 | <?php |
||
219 | public static function output_fields( $options ) { |
||
220 | foreach ( $options as $value ) { |
||
221 | if ( ! isset( $value['type'] ) ) { |
||
222 | continue; |
||
223 | } |
||
224 | if ( ! isset( $value['id'] ) ) { |
||
225 | $value['id'] = ''; |
||
226 | } |
||
227 | if ( ! isset( $value['title'] ) ) { |
||
228 | $value['title'] = isset( $value['name'] ) ? $value['name'] : ''; |
||
229 | } |
||
230 | if ( ! isset( $value['class'] ) ) { |
||
231 | $value['class'] = ''; |
||
232 | } |
||
233 | if ( ! isset( $value['css'] ) ) { |
||
234 | $value['css'] = ''; |
||
235 | } |
||
236 | if ( ! isset( $value['default'] ) ) { |
||
237 | $value['default'] = ''; |
||
238 | } |
||
239 | if ( ! isset( $value['desc'] ) ) { |
||
240 | $value['desc'] = ''; |
||
241 | } |
||
242 | if ( ! isset( $value['desc_tip'] ) ) { |
||
243 | $value['desc_tip'] = false; |
||
244 | } |
||
245 | if ( ! isset( $value['placeholder'] ) ) { |
||
246 | $value['placeholder'] = ''; |
||
247 | } |
||
248 | |||
249 | // Custom attribute handling |
||
250 | $custom_attributes = array(); |
||
251 | |||
252 | View Code Duplication | if ( ! empty( $value['custom_attributes'] ) && is_array( $value['custom_attributes'] ) ) { |
|
253 | foreach ( $value['custom_attributes'] as $attribute => $attribute_value ) { |
||
254 | $custom_attributes[] = esc_attr( $attribute ) . '="' . esc_attr( $attribute_value ) . '"'; |
||
255 | } |
||
256 | } |
||
257 | |||
258 | // Description handling |
||
259 | $field_description = self::get_field_description( $value ); |
||
260 | extract( $field_description ); |
||
261 | |||
262 | // Switch based on type |
||
263 | switch ( $value['type'] ) { |
||
264 | |||
265 | // Section Titles |
||
266 | case 'title': |
||
267 | if ( ! empty( $value['title'] ) ) { |
||
268 | echo '<h2>' . esc_html( $value['title'] ) . '</h2>'; |
||
269 | } |
||
270 | if ( ! empty( $value['desc'] ) ) { |
||
271 | echo wpautop( wptexturize( wp_kses_post( $value['desc'] ) ) ); |
||
272 | } |
||
273 | echo '<table class="form-table">'. "\n\n"; |
||
274 | if ( ! empty( $value['id'] ) ) { |
||
275 | do_action( 'woocommerce_settings_' . sanitize_title( $value['id'] ) ); |
||
276 | } |
||
277 | break; |
||
278 | |||
279 | // Section Ends |
||
280 | case 'sectionend': |
||
281 | View Code Duplication | if ( ! empty( $value['id'] ) ) { |
|
282 | do_action( 'woocommerce_settings_' . sanitize_title( $value['id'] ) . '_end' ); |
||
283 | } |
||
284 | echo '</table>'; |
||
285 | View Code Duplication | if ( ! empty( $value['id'] ) ) { |
|
286 | do_action( 'woocommerce_settings_' . sanitize_title( $value['id'] ) . '_after' ); |
||
287 | } |
||
288 | break; |
||
289 | |||
290 | // Standard text inputs and subtypes like 'number' |
||
291 | case 'text': |
||
292 | case 'email': |
||
293 | case 'number': |
||
294 | case 'color' : |
||
295 | case 'password' : |
||
296 | |||
297 | $type = $value['type']; |
||
298 | $option_value = self::get_option( $value['id'], $value['default'] ); |
||
299 | |||
300 | if ( $value['type'] == 'color' ) { |
||
301 | $type = 'text'; |
||
302 | $value['class'] .= 'colorpick'; |
||
303 | $description .= '<div id="colorPickerDiv_' . esc_attr( $value['id'] ) . '" class="colorpickdiv" style="z-index: 100;background:#eee;border:1px solid #ccc;position:absolute;display:none;"></div>'; |
||
304 | } |
||
305 | |||
306 | ?><tr valign="top"> |
||
307 | <th scope="row" class="titledesc"> |
||
308 | <label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?></label> |
||
309 | <?php echo $tooltip_html; ?> |
||
310 | </th> |
||
311 | <td class="forminp forminp-<?php echo sanitize_title( $value['type'] ) ?>"> |
||
312 | <?php |
||
313 | if ( 'color' == $value['type'] ) { |
||
314 | echo '<span class="colorpickpreview" style="background: ' . esc_attr( $option_value ) . ';"></span>'; |
||
315 | } |
||
316 | ?> |
||
317 | <input |
||
318 | name="<?php echo esc_attr( $value['id'] ); ?>" |
||
319 | id="<?php echo esc_attr( $value['id'] ); ?>" |
||
320 | type="<?php echo esc_attr( $type ); ?>" |
||
321 | style="<?php echo esc_attr( $value['css'] ); ?>" |
||
322 | value="<?php echo esc_attr( $option_value ); ?>" |
||
323 | class="<?php echo esc_attr( $value['class'] ); ?>" |
||
324 | placeholder="<?php echo esc_attr( $value['placeholder'] ); ?>" |
||
325 | <?php echo implode( ' ', $custom_attributes ); ?> |
||
326 | /> <?php echo $description; ?> |
||
327 | </td> |
||
328 | </tr><?php |
||
329 | break; |
||
330 | |||
331 | // Textarea |
||
332 | case 'textarea': |
||
333 | |||
334 | $option_value = self::get_option( $value['id'], $value['default'] ); |
||
335 | |||
336 | ?><tr valign="top"> |
||
337 | <th scope="row" class="titledesc"> |
||
338 | <label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?></label> |
||
339 | <?php echo $tooltip_html; ?> |
||
340 | </th> |
||
341 | <td class="forminp forminp-<?php echo sanitize_title( $value['type'] ) ?>"> |
||
342 | <?php echo $description; ?> |
||
343 | |||
344 | <textarea |
||
345 | name="<?php echo esc_attr( $value['id'] ); ?>" |
||
346 | id="<?php echo esc_attr( $value['id'] ); ?>" |
||
347 | style="<?php echo esc_attr( $value['css'] ); ?>" |
||
348 | class="<?php echo esc_attr( $value['class'] ); ?>" |
||
349 | placeholder="<?php echo esc_attr( $value['placeholder'] ); ?>" |
||
350 | <?php echo implode( ' ', $custom_attributes ); ?> |
||
351 | ><?php echo esc_textarea( $option_value ); ?></textarea> |
||
352 | </td> |
||
353 | </tr><?php |
||
354 | break; |
||
355 | |||
356 | // Select boxes |
||
357 | case 'select' : |
||
358 | case 'multiselect' : |
||
359 | |||
360 | $option_value = self::get_option( $value['id'], $value['default'] ); |
||
361 | |||
362 | ?><tr valign="top"> |
||
363 | <th scope="row" class="titledesc"> |
||
364 | <label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?></label> |
||
365 | <?php echo $tooltip_html; ?> |
||
366 | </th> |
||
367 | <td class="forminp forminp-<?php echo sanitize_title( $value['type'] ) ?>"> |
||
368 | <select |
||
369 | name="<?php echo esc_attr( $value['id'] ); ?><?php if ( $value['type'] == 'multiselect' ) echo '[]'; ?>" |
||
370 | id="<?php echo esc_attr( $value['id'] ); ?>" |
||
371 | style="<?php echo esc_attr( $value['css'] ); ?>" |
||
372 | class="<?php echo esc_attr( $value['class'] ); ?>" |
||
373 | <?php echo implode( ' ', $custom_attributes ); ?> |
||
374 | <?php echo ( 'multiselect' == $value['type'] ) ? 'multiple="multiple"' : ''; ?> |
||
375 | > |
||
376 | <?php |
||
377 | foreach ( $value['options'] as $key => $val ) { |
||
378 | ?> |
||
379 | <option value="<?php echo esc_attr( $key ); ?>" <?php |
||
380 | |||
381 | if ( is_array( $option_value ) ) { |
||
382 | selected( in_array( $key, $option_value ), true ); |
||
383 | } else { |
||
384 | selected( $option_value, $key ); |
||
385 | } |
||
386 | |||
387 | ?>><?php echo $val ?></option> |
||
388 | <?php |
||
389 | } |
||
390 | ?> |
||
391 | </select> <?php echo $description; ?> |
||
392 | </td> |
||
393 | </tr><?php |
||
394 | break; |
||
395 | |||
396 | // Radio inputs |
||
397 | case 'radio' : |
||
398 | |||
399 | $option_value = self::get_option( $value['id'], $value['default'] ); |
||
400 | |||
401 | ?><tr valign="top"> |
||
402 | <th scope="row" class="titledesc"> |
||
403 | <label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?></label> |
||
404 | <?php echo $tooltip_html; ?> |
||
405 | </th> |
||
406 | <td class="forminp forminp-<?php echo sanitize_title( $value['type'] ) ?>"> |
||
407 | <fieldset> |
||
408 | <?php echo $description; ?> |
||
409 | <ul> |
||
410 | <?php |
||
411 | foreach ( $value['options'] as $key => $val ) { |
||
412 | ?> |
||
413 | <li> |
||
414 | <label><input |
||
415 | name="<?php echo esc_attr( $value['id'] ); ?>" |
||
416 | value="<?php echo $key; ?>" |
||
417 | type="radio" |
||
418 | style="<?php echo esc_attr( $value['css'] ); ?>" |
||
419 | class="<?php echo esc_attr( $value['class'] ); ?>" |
||
420 | <?php echo implode( ' ', $custom_attributes ); ?> |
||
421 | <?php checked( $key, $option_value ); ?> |
||
422 | /> <?php echo $val ?></label> |
||
423 | </li> |
||
424 | <?php |
||
425 | } |
||
426 | ?> |
||
427 | </ul> |
||
428 | </fieldset> |
||
429 | </td> |
||
430 | </tr><?php |
||
431 | break; |
||
432 | |||
433 | // Checkbox input |
||
434 | case 'checkbox' : |
||
435 | |||
436 | $option_value = self::get_option( $value['id'], $value['default'] ); |
||
437 | $visbility_class = array(); |
||
438 | |||
439 | if ( ! isset( $value['hide_if_checked'] ) ) { |
||
440 | $value['hide_if_checked'] = false; |
||
441 | } |
||
442 | if ( ! isset( $value['show_if_checked'] ) ) { |
||
443 | $value['show_if_checked'] = false; |
||
444 | } |
||
445 | if ( 'yes' == $value['hide_if_checked'] || 'yes' == $value['show_if_checked'] ) { |
||
446 | $visbility_class[] = 'hidden_option'; |
||
447 | } |
||
448 | if ( 'option' == $value['hide_if_checked'] ) { |
||
449 | $visbility_class[] = 'hide_options_if_checked'; |
||
450 | } |
||
451 | if ( 'option' == $value['show_if_checked'] ) { |
||
452 | $visbility_class[] = 'show_options_if_checked'; |
||
453 | } |
||
454 | |||
455 | if ( ! isset( $value['checkboxgroup'] ) || 'start' == $value['checkboxgroup'] ) { |
||
456 | ?> |
||
457 | <tr valign="top" class="<?php echo esc_attr( implode( ' ', $visbility_class ) ); ?>"> |
||
458 | <th scope="row" class="titledesc"><?php echo esc_html( $value['title'] ) ?></th> |
||
459 | <td class="forminp forminp-checkbox"> |
||
460 | <fieldset> |
||
461 | <?php |
||
462 | } else { |
||
463 | ?> |
||
464 | <fieldset class="<?php echo esc_attr( implode( ' ', $visbility_class ) ); ?>"> |
||
465 | <?php |
||
466 | } |
||
467 | |||
468 | if ( ! empty( $value['title'] ) ) { |
||
469 | ?> |
||
470 | <legend class="screen-reader-text"><span><?php echo esc_html( $value['title'] ) ?></span></legend> |
||
471 | <?php |
||
472 | } |
||
473 | |||
474 | ?> |
||
475 | <label for="<?php echo $value['id'] ?>"> |
||
476 | <input |
||
477 | name="<?php echo esc_attr( $value['id'] ); ?>" |
||
478 | id="<?php echo esc_attr( $value['id'] ); ?>" |
||
479 | type="checkbox" |
||
480 | class="<?php echo esc_attr( isset( $value['class'] ) ? $value['class'] : '' ); ?>" |
||
481 | value="1" |
||
482 | <?php checked( $option_value, 'yes'); ?> |
||
483 | <?php echo implode( ' ', $custom_attributes ); ?> |
||
484 | /> <?php echo $description ?> |
||
485 | </label> <?php echo $tooltip_html; ?> |
||
486 | <?php |
||
487 | |||
488 | if ( ! isset( $value['checkboxgroup'] ) || 'end' == $value['checkboxgroup'] ) { |
||
489 | ?> |
||
490 | </fieldset> |
||
491 | </td> |
||
492 | </tr> |
||
493 | <?php |
||
494 | } else { |
||
495 | ?> |
||
496 | </fieldset> |
||
497 | <?php |
||
498 | } |
||
499 | break; |
||
500 | |||
501 | // Image width settings |
||
502 | case 'image_width' : |
||
503 | |||
504 | $image_size = str_replace( '_image_size', '', $value[ 'id' ] ); |
||
505 | $size = wc_get_image_size( $image_size ); |
||
506 | $width = isset( $size[ 'width' ] ) ? $size[ 'width' ] : $value[ 'default' ][ 'width' ]; |
||
507 | $height = isset( $size[ 'height' ] ) ? $size[ 'height' ] : $value[ 'default' ][ 'height' ]; |
||
508 | $crop = isset( $size[ 'crop' ] ) ? $size[ 'crop' ] : $value[ 'default' ][ 'crop' ]; |
||
509 | $disabled_attr = ''; |
||
510 | $disabled_message = ''; |
||
511 | |||
512 | if ( has_filter( 'woocommerce_get_image_size_' . $image_size ) ) { |
||
513 | $disabled_attr = 'disabled="disabled"'; |
||
514 | $disabled_message = "<p><small>" . __( 'The settings of this image size have been disabled because its values are being overwritten by a filter.', 'woocommerce' ) . "</small></p>"; |
||
515 | } |
||
516 | |||
517 | ?><tr valign="top"> |
||
518 | <th scope="row" class="titledesc"><?php echo esc_html( $value['title'] ) ?> <?php echo $tooltip_html; echo $disabled_message; ?></th> |
||
519 | <td class="forminp image_width_settings"> |
||
520 | |||
521 | <input name="<?php echo esc_attr( $value['id'] ); ?>[width]" <?php echo $disabled_attr; ?> id="<?php echo esc_attr( $value['id'] ); ?>-width" type="text" size="3" value="<?php echo $width; ?>" /> × <input name="<?php echo esc_attr( $value['id'] ); ?>[height]" <?php echo $disabled_attr; ?> id="<?php echo esc_attr( $value['id'] ); ?>-height" type="text" size="3" value="<?php echo $height; ?>" />px |
||
522 | |||
523 | <label><input name="<?php echo esc_attr( $value['id'] ); ?>[crop]" <?php echo $disabled_attr; ?> id="<?php echo esc_attr( $value['id'] ); ?>-crop" type="checkbox" value="1" <?php checked( 1, $crop ); ?> /> <?php _e( 'Hard Crop?', 'woocommerce' ); ?></label> |
||
524 | |||
525 | </td> |
||
526 | </tr><?php |
||
527 | break; |
||
528 | |||
529 | // Single page selects |
||
530 | case 'single_select_page' : |
||
531 | |||
532 | $args = array( |
||
533 | 'name' => $value['id'], |
||
534 | 'id' => $value['id'], |
||
535 | 'sort_column' => 'menu_order', |
||
536 | 'sort_order' => 'ASC', |
||
537 | 'show_option_none' => ' ', |
||
538 | 'class' => $value['class'], |
||
539 | 'echo' => false, |
||
540 | 'selected' => absint( self::get_option( $value['id'] ) ) |
||
541 | ); |
||
542 | |||
543 | if ( isset( $value['args'] ) ) { |
||
544 | $args = wp_parse_args( $value['args'], $args ); |
||
545 | } |
||
546 | |||
547 | ?><tr valign="top" class="single_select_page"> |
||
548 | <th scope="row" class="titledesc"><?php echo esc_html( $value['title'] ) ?> <?php echo $tooltip_html; ?></th> |
||
549 | <td class="forminp"> |
||
550 | <?php echo str_replace(' id=', " data-placeholder='" . esc_attr__( 'Select a page…', 'woocommerce' ) . "' style='" . $value['css'] . "' class='" . $value['class'] . "' id=", wp_dropdown_pages( $args ) ); ?> <?php echo $description; ?> |
||
551 | </td> |
||
552 | </tr><?php |
||
553 | break; |
||
554 | |||
555 | // Single country selects |
||
556 | case 'single_select_country' : |
||
557 | $country_setting = (string) self::get_option( $value['id'] ); |
||
558 | |||
559 | if ( strstr( $country_setting, ':' ) ) { |
||
560 | $country_setting = explode( ':', $country_setting ); |
||
561 | $country = current( $country_setting ); |
||
562 | $state = end( $country_setting ); |
||
563 | } else { |
||
564 | $country = $country_setting; |
||
565 | $state = '*'; |
||
566 | } |
||
567 | ?><tr valign="top"> |
||
568 | <th scope="row" class="titledesc"> |
||
569 | <label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?></label> |
||
570 | <?php echo $tooltip_html; ?> |
||
571 | </th> |
||
572 | <td class="forminp"><select name="<?php echo esc_attr( $value['id'] ); ?>" style="<?php echo esc_attr( $value['css'] ); ?>" data-placeholder="<?php esc_attr_e( 'Choose a country…', 'woocommerce' ); ?>" title="<?php esc_attr_e( 'Country', 'woocommerce' ) ?>" class="wc-enhanced-select"> |
||
573 | <?php WC()->countries->country_dropdown_options( $country, $state ); ?> |
||
574 | </select> <?php echo $description; ?> |
||
575 | </td> |
||
576 | </tr><?php |
||
577 | break; |
||
578 | |||
579 | // Country multiselects |
||
580 | case 'multi_select_countries' : |
||
581 | |||
582 | $selections = (array) self::get_option( $value['id'] ); |
||
583 | |||
584 | if ( ! empty( $value['options'] ) ) { |
||
585 | $countries = $value['options']; |
||
586 | } else { |
||
587 | $countries = WC()->countries->countries; |
||
588 | } |
||
589 | |||
590 | asort( $countries ); |
||
591 | ?><tr valign="top"> |
||
592 | <th scope="row" class="titledesc"> |
||
593 | <label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?></label> |
||
594 | <?php echo $tooltip_html; ?> |
||
595 | </th> |
||
596 | <td class="forminp"> |
||
597 | <select multiple="multiple" name="<?php echo esc_attr( $value['id'] ); ?>[]" style="width:350px" data-placeholder="<?php esc_attr_e( 'Choose countries…', 'woocommerce' ); ?>" title="<?php esc_attr_e( 'Country', 'woocommerce' ) ?>" class="wc-enhanced-select"> |
||
598 | <?php |
||
599 | if ( ! empty( $countries ) ) { |
||
600 | foreach ( $countries as $key => $val ) { |
||
601 | echo '<option value="' . esc_attr( $key ) . '" ' . selected( in_array( $key, $selections ), true, false ).'>' . $val . '</option>'; |
||
602 | } |
||
603 | } |
||
604 | ?> |
||
605 | </select> <?php echo ( $description ) ? $description : ''; ?> <br /><a class="select_all button" href="#"><?php _e( 'Select all', 'woocommerce' ); ?></a> <a class="select_none button" href="#"><?php _e( 'Select none', 'woocommerce' ); ?></a> |
||
606 | </td> |
||
607 | </tr><?php |
||
608 | break; |
||
609 | |||
610 | // Default: run an action |
||
611 | default: |
||
612 | do_action( 'woocommerce_admin_field_' . $value['type'], $value ); |
||
613 | break; |
||
614 | } |
||
615 | } |
||
616 | } |
||
617 | |||
807 |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.