1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
<?php
/**
* Bool (true/false) property.
*/
class Papi_Property_Bool extends Papi_Property {
/**
* The convert type.
*
* @var string
*/
public $convert_type = 'bool';
/**
* The default value.
*
* @var bool
*/
public $default_value = false;
/**
* Format the value of the property before it's returned
* to WordPress admin or the site.
*
* @param mixed $value
* @param string $slug
* @param int $post_id
*
* @return bool
*/
public function format_value( $value, $slug, $post_id ) {
if ( is_string( $value ) && $value === 'false' || $value === false ) {
return false;
}
return is_string( $value ) &&
( $value === 'true' || $value === 'on' ) ||
$value === true;
}
/**
* Render property html.
*/
public function html() {
$value = $this->get_value();
papi_render_html_tag( 'input', [
'type' => 'hidden',
'name' => $this->html_name(),
'value' => false
] );
papi_render_html_tag( 'input', [
'checked' => empty( $value ) ? null : 'checked',
'id' => $this->html_id(),
'name' => $this->html_name(),
'type' => 'checkbox'
] );
}
/**
* Import value to the property.
*
* @param mixed $value
* @param string $slug
* @param int $post_id
*
* @return mixed
*/
public function import_value( $value, $slug, $post_id ) {
return $this->format_value( $value, $slug, $post_id );
}
/**
* Change value after it's loaded from the database.
*
* @param mixed $value
* @param string $slug
* @param int $post_id
*
* @return mixed
*/
public function load_value( $value, $slug, $post_id ) {
return is_string( $value ) && $value === '1' || $value;
}
/**
* Prepare property value.
*
* @param mixed $value
*
* @return mixed
*/
protected function prepare_value( $value ) {
if ( is_string( $value ) && ( $value === 'true' || $value === 'on' ) || $value === true ) {
return true;
}
return null;
}
/**
* Fix the database value on update.
*
* @param mixed $value
* @param string $slug
* @param int $post_id
*
* @return array
*/
public function update_value( $value, $slug, $post_id ) {
return $this->prepare_value( $value );
}
}