Completed
Pull Request — master (#1454)
by Aristeides
04:51 queued 02:11
created

Kirki_Field::set_row_label()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 1
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 1
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * Creates and validates field parameters.
4
 *
5
 * @package     Kirki
6
 * @category    Core
7
 * @author      Aristeides Stathopoulos
8
 * @copyright   Copyright (c) 2017, Aristeides Stathopoulos
9
 * @license     http://opensource.org/licenses/https://opensource.org/licenses/MIT
10
 * @since       1.0
11
 */
12
13
/**
14
 * Please do not use this class directly.
15
 * You should instead extend it per-field-type.
16
 */
17
class Kirki_Field {
18
19
	/**
20
	 * An array of the field arguments.
21
	 *
22
	 * @access protected
23
	 * @var array
24
	 */
25
	protected $args = array();
26
27
	/**
28
	 * The ID of the kirki_config we're using.
29
	 *
30
	 * @see Kirki_Config
31
	 * @access protected
32
	 * @var string
33
	 */
34
	protected $kirki_config = 'global';
35
36
	/**
37
	 * Thje capability required so that users can edit this field.
38
	 *
39
	 * @access protected
40
	 * @var string
41
	 */
42
	protected $capability = 'edit_theme_options';
43
44
	/**
45
	 * If we're using options instead of theme_mods
46
	 * and we want them serialized, this is the option that
47
	 * will saved in the db.
48
	 *
49
	 * @access protected
50
	 * @var string
51
	 */
52
	protected $option_name = '';
53
54
	/**
55
	 * Custom input attributes (defined as an array).
56
	 *
57
	 * @access protected
58
	 * @var array
59
	 */
60
	protected $input_attrs = array();
61
62
	/**
63
	 * Use "theme_mod" or "option".
64
	 *
65
	 * @access protected
66
	 * @var string
67
	 */
68
	protected $option_type = 'theme_mod';
69
70
	/**
71
	 * The name of this setting (id for the db).
72
	 *
73
	 * @access protected
74
	 * @var string|array
75
	 */
76
	protected $settings = '';
77
78
	/**
79
	 * Set to true if you want to disable all CSS output for this field.
80
	 *
81
	 * @access protected
82
	 * @var bool
83
	 */
84
	protected $disable_output = false;
85
86
	/**
87
	 * The field type.
88
	 *
89
	 * @access protected
90
	 * @var string
91
	 */
92
	protected $type = 'kirki-generic';
93
94
	/**
95
	 * Some fields require options to be set.
96
	 * We're whitelisting the property here
97
	 * and suggest you validate this in a child class.
98
	 *
99
	 * @access protected
100
	 * @var array
101
	 */
102
	protected $choices = array();
103
104
	/**
105
	 * Assign this field to a section.
106
	 * Fields not assigned to a section will not be displayed in the customizer.
107
	 *
108
	 * @access protected
109
	 * @var string
110
	 */
111
	protected $section = '';
112
113
	/**
114
	 * The default value for this field.
115
	 *
116
	 * @access protected
117
	 * @var string|array|bool
118
	 */
119
	protected $default = '';
120
121
	/**
122
	 * Priority determines the position of a control inside a section.
123
	 * Lower priority numbers move the control to the top.
124
	 *
125
	 * @access protected
126
	 * @var int
127
	 */
128
	protected $priority = 10;
129
130
	/**
131
	 * Unique ID for this field.
132
	 * This is auto-calculated from the $settings argument.
133
	 *
134
	 * @access protected
135
	 * @var string
136
	 */
137
	protected $id = '';
138
139
	/**
140
	 * Use if you want to automatically generate CSS from this field's value.
141
	 *
142
	 * @see https://kirki.org/docs/arguments/output
143
	 * @access protected
144
	 * @var array
145
	 */
146
	protected $output = array();
147
148
	/**
149
	 * Use to automatically generate postMessage scripts.
150
	 * Not necessary to use if you use 'transport' => 'auto'
151
	 * and have already set an array for the 'output' argument.
152
	 *
153
	 * @see https://kirki.org/docs/arguments/js_vars
154
	 * @access protected
155
	 * @var array
156
	 */
157
	protected $js_vars = array();
158
159
	/**
160
	 * If you want to use a CSS compiler, then use this to set the variable names.
161
	 *
162
	 * @see https://kirki.org/docs/arguments/variables
163
	 * @access protected
164
	 * @var array
165
	 */
166
	protected $variables = array();
167
168
	/**
169
	 * Text that will be used in a tooltip to provide extra info for this field.
170
	 *
171
	 * @access protected
172
	 * @var string
173
	 */
174
	protected $tooltip = '';
175
176
	/**
177
	 * Whitelisting for backwards-compatibility.
178
	 *
179
	 * @access protected
180
	 * @var string
181
	 */
182
	protected $help = '';
183
184
	/**
185
	 * A custom callback to determine if the field should be visible or not.
186
	 *
187
	 * @access protected
188
	 * @var string|array
189
	 */
190
	protected $active_callback = '__return_true';
191
192
	/**
193
	 * A custom sanitize callback that will be used to properly save the values.
194
	 *
195
	 * @access protected
196
	 * @var string|array
197
	 */
198
	protected $sanitize_callback = '';
199
200
	/**
201
	 * Use 'refresh', 'postMessage' or 'auto'.
202
	 * 'auto' will automatically geberate any 'js_vars' from the 'output' argument.
203
	 *
204
	 * @access protected
205
	 * @var string
206
	 */
207
	protected $transport = 'refresh';
208
209
	/**
210
	 * Define dependencies to show/hide this field based on the values of other fields.
211
	 *
212
	 * @access protected
213
	 * @var array
214
	 */
215
	protected $required = array();
216
217
	/**
218
	 * Suggested width for cropped image.
219
	 *
220
	 * @access protected
221
	 * @var int
222
	 */
223
	protected $width = 150;
224
225
	/**
226
	 * Suggested height for cropped image.
227
	 *
228
	 * @access protected
229
	 * @var int
230
	 */
231
	protected $height = 150;
232
233
	/**
234
	 * Whether the width is flexible for cropped image.
235
	 *
236
	 * @access protected
237
	 * @var bool
238
	 */
239
	protected $flex_width = false;
240
241
	/**
242
	 * Whether the height is flexible for cropped image.
243
	 *
244
	 * @access protected
245
	 * @var bool
246
	 */
247
	protected $flex_height = false;
248
249
	/**
250
	 * Contain the settings for the repeater rows labels
251
	 *
252
	 * @access protected
253
	 * @var array
254
	 */
255
	protected $row_label = array();
256
257
	/**
258
	 * Partial Refreshes array.
259
	 *
260
	 * @access protected
261
	 * @var array
262
	 */
263
	protected $partial_refresh = array();
264
265
	/**
266
	 * Use only on image, cropped_image, upload controls.
267
	 * Limit the Media library to a specific mime type
268
	 *
269
	 * @access protected
270
	 * @var array
271
	 */
272
	protected $mime_type = '';
273
274
	/**
275
	 * Used by image fields.
276
	 *
277
	 * @access protected
278
	 * @var array
279
	 * @since 3.0.0
280
	 */
281
	protected $button_labels = array();
282
283
	/**
284
	 * Use only on select controls.
285
	 * Defines if this is a multi-select or not.
286
	 * If value is > 1, then the maximum number of selectable options
287
	 * is the number defined here.
288
	 *
289
	 * @access protected
290
	 * @var integer
291
	 */
292
	protected $multiple = 1;
293
294
	/**
295
	 * Allows fields to be collapsible.
296
	 *
297
	 * @access protected
298
	 * @since 3.0.0
299
	 * @var bool
300
	 */
301
	protected $collapsible = false;
302
303
	/**
304
	 * The class constructor.
305
	 * Parses and sanitizes all field arguments.
306
	 * Then it adds the field to Kirki::$fields.
307
	 *
308
	 * @access public
309
	 * @param string $config_id    The ID of the config we want to use.
310
	 *                             Defaults to "global".
311
	 *                             Configs are handled by the Kirki_Config class.
312
	 * @param array  $args         The arguments of the field.
313
	 */
314
	public function __construct( $config_id = 'global', $args = array() ) {
315
316
		if ( isset( $args['setting'] ) && ! empty( $args['setting'] ) && ( ! isset( $args['settings'] ) || empty( $args['settings'] ) ) ) {
317
			/* translators: %s represents the field ID where the error occurs. */
318
			_doing_it_wrong( __METHOD__, sprintf( esc_attr__( 'Typo found in field %s - setting instead of settings.', 'kirki' ), esc_attr( $args['settings'] ) ), '3.0.10' );
319
			$args['settings'] = $args['setting'];
320
			unset( $args['setting'] );
321
		}
322
323
		// In case the user only provides 1 argument,
324
		// assume that the provided argument is $args and set $config_id = 'global'.
325
		if ( is_array( $config_id ) && empty( $args ) ) {
326
			/* translators: %1$s represents the field ID where the error occurs. %2$s is the URL in the documentation site. */
327
			_doing_it_wrong( __METHOD__, sprintf( esc_attr__( 'Config not defined for field %1$s - See %2$s for details on how to properly add fields.', 'kirki' ), esc_attr( $args['settings'] ), 'https://aristath.github.io/kirki/docs/getting-started/fields.html' ), '3.0.10' );
328
			$args = $config_id;
329
			$config_id = 'global';
330
		}
331
332
		$args['kirki_config'] = $config_id;
333
334
		$this->kirki_config = trim( esc_attr( $config_id ) );
335
		if ( '' === $config_id ) {
336
			/* translators: %1$s represents the field ID where the error occurs. %2$s is the URL in the documentation site. */
337
			_doing_it_wrong( __METHOD__, sprintf( esc_attr__( 'Config not defined for field %1$s - See %2$s for details on how to properly add fields.', 'kirki' ), esc_attr( $args['settings'] ), 'https://aristath.github.io/kirki/docs/getting-started/fields.html' ), '3.0.10' );
338
			$this->kirki_config = 'global';
339
		}
340
341
		// Get defaults from the class.
342
		$defaults = get_class_vars( __CLASS__ );
343
344
		// Get the config arguments, and merge them with the defaults.
345
		$config_defaults = ( isset( Kirki::$config['global'] ) ) ? Kirki::$config['global'] : array();
346
		if ( 'global' !== $this->kirki_config && isset( Kirki::$config[ $this->kirki_config ] ) ) {
347
			$config_defaults = Kirki::$config[ $this->kirki_config ];
348
		}
349
		$config_defaults = ( is_array( $config_defaults ) ) ? $config_defaults : array();
350
		foreach ( $config_defaults as $key => $value ) {
351
			if ( isset( $defaults[ $key ] ) && ! empty( $value ) && $value != $defaults[ $key ] ) {
352
				$defaults[ $key ] = $value;
353
			}
354
		}
355
356
		// Merge our args with the defaults.
357
		$args = wp_parse_args( $args, $defaults );
358
359
		// Set the class properties using the parsed args.
360
		foreach ( $args as $key => $value ) {
361
			$this->$key = $value;
362
		}
363
364
		$this->args = $args;
365
366
		$this->set_field();
367
	}
368
369
	/**
370
	 * Processes the field arguments
371
	 *
372
	 * @access protected
373
	 */
374
	protected function set_field() {
375
376
		$properties = get_class_vars( __CLASS__ );
377
378
		// Some things must run before the others.
379
		$this->set_option_name();
380
		$this->set_option_type();
381
		$this->set_settings();
382
383
		// Sanitize the properties, skipping the ones that have already run above.
384
		foreach ( $properties as $property => $value ) {
385
			if ( in_array( $property, array( 'option_name', 'option_type', 'settings' ), true ) ) {
386
				continue;
387
			}
388
			$property_class_name = $this->get_property_classname( $property );
389
			if ( class_exists( $property_class_name ) ) {
390
				$property_obj   = new $property_class_name( $this->args );
391
				$this->property = $property_obj->get_property();
0 ignored issues
show
Bug introduced by
The property property does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
392
			}
393
			if ( method_exists( $this, 'set_' . $property ) ) {
394
				$method_name = 'set_' . $property;
395
				$this->$method_name();
396
			}
397
		}
398
399
		// Get all arguments with their values.
400
		$args = get_object_vars( $this );
401
		foreach ( $args as $key => $default_value ) {
402
			$args[ $key ] = $this->$key;
403
		}
404
405
		// Add the field to the static $fields variable properly indexed.
406
		Kirki::$fields[ $this->settings ] = $args;
407
408
	}
409
410
	/**
411
	 * Gets the classname from a property.
412
	 *
413
	 * @access private
414
	 * @since 3.0.10
415
	 * @param string $property The property.
416
	 * @return string          A classname derived from the property.
417
	 */
418
	private function get_property_classname( $property ) {
419
		$property_parts = (array) $property;
420
		if ( false !== strpos( $property, '-' ) ) {
421
			$property_parts = explode( '-', $property );
422
		}
423
		if ( false !== strpos( $property, '_' ) ) {
424
			$property_parts = explode( '_', $property );
425
		}
426
		foreach( $property_parts as $property_part_k => $property_part_v ) {
0 ignored issues
show
introduced by
Space after opening control structure is required
Loading history...
introduced by
No space before opening parenthesis is prohibited
Loading history...
427
			$property_parts[ $property_part_k ] = ucfirst( $property_part_v );
428
		}
429
		return 'Kirki_Field_Property_' . implode( '_', $property_parts );
430
	}
431
432
	/**
433
	 * No need to do anything, these are escaped on the fields themselves.
434
	 *
435
	 * @access protected
436
	 */
437
	protected function set_label() {}
438
439
	/**
440
	 * No need to do anything, these are escaped on the fields themselves.
441
	 *
442
	 * @access protected
443
	 */
444
	protected function set_description() {}
445
446
	/**
447
	 * No need to do anything, these are escaped on the fields themselves.
448
	 *
449
	 * @access protected
450
	 */
451
	protected function set_mode() {}
452
453
	/**
454
	 * No need to do anything, these are escaped on the fields themselves.
455
	 * Only used in repeaters.
456
	 *
457
	 * @access protected
458
	 */
459
	protected function set_fields() {}
460
461
	/**
462
	 * No need to do anything, these are escaped on the fields themselves.
463
	 * Only used in repeaters.
464
	 *
465
	 * @access protected
466
	 */
467
	protected function set_row_label() {}
468
469
	/**
470
	 * This allows us to process this on a field-basis
471
	 * by using sub-classes which can override this method.
472
	 *
473
	 * @access protected
474
	 */
475
	protected function set_default() {}
476
477
	/**
478
	 * Escape $kirki_config.
479
	 *
480
	 * @access protected
481
	 */
482
	protected function set_kirki_config() {
483
484
		$this->kirki_config = esc_attr( $this->kirki_config );
485
	}
486
487
	/**
488
	 * Escape $option_name.
489
	 *
490
	 * @access protected
491
	 */
492
	protected function set_option_name() {
493
494
		$this->option_name = esc_attr( $this->option_name );
495
	}
496
497
	/**
498
	 * Escape the $section.
499
	 *
500
	 * @access protected
501
	 */
502
	protected function set_section() {
503
504
		$this->section = sanitize_key( $this->section );
505
	}
506
507
	/**
508
	 * Escape the $section.
509
	 *
510
	 * @access protected
511
	 */
512
	protected function set_input_attrs() {
513
514
		if ( ! is_array( $this->input_attrs ) ) {
515
			$this->input_attrs = array();
516
		}
517
	}
518
519
	/**
520
	 * Checks the capability chosen is valid.
521
	 * If not, then falls back to 'edit_theme_options'
522
	 *
523
	 * @access protected
524
	 */
525
	protected function set_capability() {
526
527
		// Early exit if we're using 'edit_theme_options'.
528
		if ( 'edit_theme_options' === $this->capability ) {
529
			return;
530
		}
531
		// Escape & trim the capability.
532
		$this->capability = trim( esc_attr( $this->capability ) );
533
	}
534
535
	/**
536
	 * Make sure we're using the correct option_type
537
	 *
538
	 * @access protected
539
	 */
540
	protected function set_option_type() {
541
542
		// Take care of common typos.
543
		if ( 'options' === $this->option_type ) {
544
			$this->option_type = 'option';
545
		}
546
		// Take care of common typos.
547
		if ( 'theme_mods' === $this->option_type ) {
548
			/* translators: %1$s represents the field ID where the error occurs. */
549
			_doing_it_wrong( __METHOD__, sprintf( esc_attr__( 'Typo found in field %s - "theme_mods" vs "theme_mod"', 'kirki' ), esc_attr( $this->settings ) ), '3.0.10' );
550
			$this->option_type = 'theme_mod';
551
		}
552
	}
553
554
	/**
555
	 * Modifications for partial refreshes.
556
	 *
557
	 * @access protected
558
	 */
559
	protected function set_partial_refresh() {
560
561
		if ( ! is_array( $this->partial_refresh ) ) {
562
			$this->partial_refresh = array();
563
		}
564
		foreach ( $this->partial_refresh as $id => $args ) {
565
			if ( ! is_array( $args ) || ! isset( $args['selector'] ) || ! isset( $args['render_callback'] ) || ! is_callable( $args['render_callback'] ) ) {
566
				/* translators: %1$s represents the field ID where the error occurs. */
567
				_doing_it_wrong( __METHOD__, sprintf( esc_attr__( '"partial_refresh" invalid entry in field %s', 'kirki' ), esc_attr( $this->settings ) ), '3.0.10' );
568
				unset( $this->partial_refresh[ $id ] );
569
				continue;
570
			}
571
		}
572
		if ( ! empty( $this->partial_refresh ) ) {
573
			$this->transport = 'postMessage';
574
		}
575
	}
576
577
	/**
578
	 * Sets the settings.
579
	 * If we're using serialized options it makes sure that settings are properly formatted.
580
	 * We'll also be escaping all setting names here for consistency.
581
	 *
582
	 * @access protected
583
	 */
584
	protected function set_settings() {
585
586
		// If settings is not an array, temporarily convert it to an array.
587
		// This is just to allow us to process everything the same way and avoid code duplication.
588
		// if settings is not an array then it will not be set as an array in the end.
589
		if ( ! is_array( $this->settings ) ) {
590
			$this->settings = array(
591
				'kirki_placeholder_setting' => $this->settings,
592
			);
593
		}
594
		$settings = array();
595
		foreach ( $this->settings as $setting_key => $setting_value ) {
596
			$settings[ sanitize_key( $setting_key ) ] = esc_attr( $setting_value );
597
			// If we're using serialized options then we need to spice this up.
598
			if ( 'option' === $this->option_type && '' !== $this->option_name && ( false === strpos( $setting_key, '[' ) ) ) {
599
				$settings[ sanitize_key( $setting_key ) ] = esc_attr( $this->option_name ) . '[' . esc_attr( $setting_value ) . ']';
600
			}
601
		}
602
		$this->settings = $settings;
603
		if ( isset( $this->settings['kirki_placeholder_setting'] ) ) {
604
			$this->settings = $this->settings['kirki_placeholder_setting'];
605
		}
606
	}
607
608
	/**
609
	 * Escapes the tooltip messages.
610
	 *
611
	 * @access protected
612
	 */
613
	protected function set_tooltip() {
614
615
		if ( '' !== $this->tooltip ) {
616
			$this->tooltip = wp_strip_all_tags( $this->tooltip );
617
			return;
618
		}
619
	}
620
621
	/**
622
	 * Sets the active_callback
623
	 * If we're using the $required argument,
624
	 * Then this is where the switch is made to our evaluation method.
625
	 *
626
	 * @access protected
627
	 */
628
	protected function set_active_callback() {
629
630
		if ( is_array( $this->active_callback ) && ! is_callable( $this->active_callback ) ) {
631
			if ( isset( $this->active_callback[0] ) ) {
632
				$this->required = $this->active_callback;
633
			}
634
		}
635
636
		if ( ! empty( $this->required ) ) {
637
			$this->active_callback = array( 'Kirki_Active_Callback', 'evaluate' );
638
			return;
639
		}
640
		// No need to proceed any further if we're using the default value.
641
		if ( '__return_true' === $this->active_callback ) {
642
			return;
643
		}
644
		// Make sure the function is callable, otherwise fallback to __return_true.
645
		if ( ! is_callable( $this->active_callback ) ) {
646
			$this->active_callback = '__return_true';
647
		}
648
	}
649
650
	/**
651
	 * Sets the control type.
652
	 *
653
	 * @access protected
654
	 */
655
	protected function set_type() {
656
657
		// Escape the control type (it doesn't hurt to be sure).
658
		$this->type = esc_attr( $this->type );
659
	}
660
661
	/**
662
	 * Sets the $id.
663
	 * Setting the ID should happen after the 'settings' sanitization.
664
	 * This way we can also properly handle cases where the option_type is set to 'option'
665
	 * and we're using an array instead of individual options.
666
	 *
667
	 * @access protected
668
	 */
669
	protected function set_id() {
670
671
		$this->id = sanitize_key( str_replace( '[', '-', str_replace( ']', '', $this->settings ) ) );
672
	}
673
674
	/**
675
	 * Sets the $sanitize_callback
676
	 *
677
	 * @access protected
678
	 */
679
	protected function set_sanitize_callback() {}
680
681
	/**
682
	 * Sets the $choices.
683
	 *
684
	 * @access protected
685
	 */
686
	protected function set_choices() {
687
688
		if ( ! is_array( $this->choices ) ) {
689
			$this->choices = array();
690
		}
691
	}
692
693
	/**
694
	 * Escapes the $disable_output.
695
	 *
696
	 * @access protected
697
	 */
698
	protected function set_disable_output() {
699
700
		$this->disable_output = (bool) $this->disable_output;
701
	}
702
703
	/**
704
	 * Sets the $js_vars
705
	 *
706
	 * @access protected
707
	 */
708
	protected function set_js_vars() {
709
710
		if ( ! is_array( $this->js_vars ) ) {
711
			$this->js_vars = array();
712
		}
713
714
		// Check if transport is set to auto.
715
		// If not, then skip the auto-calculations and exit early.
716
		if ( 'auto' !== $this->transport ) {
717
			return;
718
		}
719
720
		// Set transport to refresh initially.
721
		// Serves as a fallback in case we failt to auto-calculate js_vars.
722
		$this->transport = 'refresh';
723
724
		$js_vars = array();
725
726
		// Try to auto-generate js_vars.
727
		// First we need to check if js_vars are empty, and that output is not empty.
728
		if ( empty( $this->js_vars ) && ! empty( $this->output ) ) {
729
730
			// Start going through each item in the $output array.
731
			foreach ( $this->output as $output ) {
732
				$output['function'] = ( isset( $output['function'] ) ) ? $output['function'] : 'style';
733
734
				// If 'element' or 'property' are not defined, skip this.
735
				if ( ! isset( $output['element'] ) || ! isset( $output['property'] ) ) {
736
					continue;
737
				}
738
				if ( is_array( $output['element'] ) ) {
739
					$output['element'] = implode( ',', $output['element'] );
740
				}
741
742
				// If there's a sanitize_callback defined skip this, unless we also have a js_callback defined.
743
				if ( isset( $output['sanitize_callback'] ) && ! empty( $output['sanitize_callback'] ) && ! isset( $output['js_callback'] ) ) {
744
					continue;
745
				}
746
747
				// If we got this far, it's safe to add this.
748
				$js_vars[] = $output;
749
			}
750
751
			// Did we manage to get all the items from 'output'?
752
			// If not, then we're missing something so don't add this.
753
			if ( count( $js_vars ) !== count( $this->output ) ) {
754
				return;
755
			}
756
			$this->js_vars   = $js_vars;
757
			$this->transport = 'postMessage';
758
759
		}
760
	}
761
762
	/**
763
	 * Sets the $variables
764
	 *
765
	 * @access protected
766
	 */
767
	protected function set_variables() {
768
769
		if ( ! is_array( $this->variables ) ) {
770
			$variable = ( is_string( $this->variables ) && ! empty( $this->variables ) ) ? $this->variables : false;
771
			$this->variables = array();
772
			if ( $variable && empty( $this->variables ) ) {
773
				$this->variables[0]['name'] = $variable;
774
			}
775
		}
776
	}
777
778
	/**
779
	 * This is a fallback method:
780
	 * $help has now become $tooltip, so this just migrates the data
781
	 *
782
	 * @access protected
783
	 */
784
	protected function set_help() {
785
786
		if ( '' !== $this->tooltip ) {
787
			return;
788
		}
789
		if ( '' !== $this->help ) {
790
			/* translators: %s represents the field ID where the error occurs. */
791
			_doing_it_wrong( __METHOD__, sprintf( esc_attr__( '"help" argument has been deprecated in favor of "tooltip". Error in field %s.', 'kirki' ), esc_attr( $this->settings ) ), '3.0.10' );
792
			$this->tooltip = wp_strip_all_tags( $this->help );
793
			$this->help = '';
794
			return;
795
		}
796
	}
797
798
	/**
799
	 * Sets the $transport
800
	 *
801
	 * @access protected
802
	 */
803
	protected function set_transport() {
804
805
		if ( 'postmessage' === trim( strtolower( $this->transport ) ) ) {
806
			$this->transport = 'postMessage';
807
		}
808
	}
809
810
	/**
811
	 * Sets the $required
812
	 *
813
	 * @access protected
814
	 */
815
	protected function set_required() {
816
817
		if ( ! is_array( $this->required ) ) {
818
			$this->required = array();
819
		}
820
	}
821
822
	/**
823
	 * Sets the $priority
824
	 *
825
	 * @access protected
826
	 */
827
	protected function set_priority() {
828
829
		$this->priority = absint( $this->priority );
830
831
	}
832
833
	/**
834
	 * Sets the $collapsible var.
835
	 *
836
	 * @access protected
837
	 */
838
	protected function set_collapsible() {
839
840
		$this->collapsible = (bool) $this->collapsible;
841
842
	}
843
}
844