ru-se.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

class-kirki-field-repeater.php (3574B)


      1 <?php
      2 /**
      3  * Override field methods
      4  *
      5  * @package     Kirki
      6  * @subpackage  Controls
      7  * @copyright   Copyright (c) 2016, Aristeides Stathopoulos
      8  * @license     http://opensource.org/licenses/https://opensource.org/licenses/MIT
      9  * @since       2.2.7
     10  */
     11 
     12 if ( ! class_exists( 'Kirki_Field_Repeater' ) ) {
     13 
     14 	/**
     15 	 * Field overrides.
     16 	 */
     17 	class Kirki_Field_Repeater extends Kirki_Field {
     18 
     19 		/**
     20 		 * Sets the control type.
     21 		 *
     22 		 * @access protected
     23 		 */
     24 		protected function set_type() {
     25 
     26 			$this->type = 'repeater';
     27 
     28 		}
     29 
     30 		/**
     31 		 * Sets the $sanitize_callback
     32 		 *
     33 		 * @access protected
     34 		 */
     35 		protected function set_sanitize_callback() {
     36 
     37 			// If a custom sanitize_callback has been defined,
     38 			// then we don't need to proceed any further.
     39 			if ( ! empty( $this->sanitize_callback ) ) {
     40 				return;
     41 			}
     42 			$this->sanitize_callback = array( $this, 'sanitize' );
     43 
     44 		}
     45 
     46 		/**
     47 		 * The sanitize method that will be used as a falback
     48 		 *
     49 		 * @param string|array $value The control's value.
     50 		 */
     51 		public function sanitize( $value ) {
     52 
     53 			// is the value formatted as a string?
     54 			if ( is_string( $value ) ) {
     55 				$value = rawurldecode( $value );
     56 				$value = json_decode( $value, true );
     57 			}
     58 
     59 			// Nothing to sanitize if we don't have fields.
     60 			if ( empty( $this->fields ) ) {
     61 				return $value;
     62 			}
     63 
     64 			foreach ( $value as $row_id => $row_value ) {
     65 
     66 				// Make sure the row is formatted as an array.
     67 				if ( ! is_array( $row_value ) ) {
     68 					$value[ $row_id ] = array();
     69 					continue;
     70 				}
     71 				// Start parsing sub-fields in rows.
     72 				foreach ( $row_value as $subfield_id => $subfield_value ) {
     73 					// Make sure this is a valid subfield.
     74 					// If it's not, then unset it.
     75 					if ( ! isset( $this->fields[ $subfield_id ] ) ) {
     76 						unset( $value[ $row_id ][ $subfield_id ] );
     77 					}
     78 					// Get the subfield-type.
     79 					$subfield_type = $this->fields[ $subfield_id ]['type'];
     80 
     81 					// Allow using a sanitize-callback on a per-field basis.
     82 					if ( isset( $this->fields[ $subfield_id ]['sanitize_callback'] ) ) {
     83 
     84 						$subfield_value = call_user_func( $this->fields[ $subfield_id ]['sanitize_callback'], $subfield_value );
     85 
     86 					} else {
     87 
     88 						switch ( $subfield_type ) {
     89 							case 'image':
     90 							case 'cropped_image':
     91 							case 'upload':
     92 								if ( ! is_numeric( $subfield_value ) && is_string( $subfield_value ) ) {
     93 									$subfield_value = esc_url_raw( $subfield_value );
     94 								}
     95 								break;
     96 							case 'dropdown-pages':
     97 								$subfield_value = (int) $subfield_value;
     98 								break;
     99 							case 'color':
    100 								// Instantiate the object.
    101 								$color_obj = ariColor::newColor( $subfield_value );
    102 								$$subfield_value = $color_obj->toCSS( $color_obj->mode );
    103 								break;
    104 							case 'text':
    105 								$subfield_value = esc_textarea( $subfield_value );
    106 								break;
    107 							case 'url':
    108 							case 'link':
    109 								$subfield_value = esc_url_raw( $subfield_value );
    110 								break;
    111 							case 'email':
    112 								$subfield_value = filter_var( $subfield_value, FILTER_SANITIZE_EMAIL );
    113 								break;
    114 							case 'tel':
    115 								$subfield_value = esc_attr( $subfield_value );
    116 								break;
    117 							case 'checkbox':
    118 								$subfield_value = (string) intval( $subfield_value );
    119 								break;
    120 							case 'select':
    121 							case 'radio':
    122 							case 'radio-image':
    123 								$subfield_value = esc_attr( $subfield_value );
    124 								break;
    125 							case 'textarea':
    126 								$subfield_value = wp_kses_post( $subfield_value );
    127 
    128 						}
    129 					}
    130 					$value[ $row_id ][ $subfield_id ] = $subfield_value;
    131 				}
    132 			}
    133 
    134 			return $value;
    135 		}
    136 	}
    137 }