227 lines
4.7 KiB
PHP
227 lines
4.7 KiB
PHP
<?php
|
|
/**
|
|
* Base setting class for the fields manager.
|
|
*
|
|
* @package ButterBean
|
|
* @subpackage Admin
|
|
* @author Justin Tadlock <justin@justintadlock.com>
|
|
* @copyright Copyright (c) 2015-2016, Justin Tadlock
|
|
* @link https://github.com/justintadlock/butterbean
|
|
* @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|
*/
|
|
|
|
/**
|
|
* Base setting class.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
*/
|
|
class ButterBean_Setting {
|
|
|
|
/**
|
|
* The type of setting.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
* @var string
|
|
*/
|
|
public $type = 'default';
|
|
|
|
/**
|
|
* Stores the manager object.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
* @var object
|
|
*/
|
|
public $manager;
|
|
|
|
/**
|
|
* Name/ID of the setting.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
* @var string
|
|
*/
|
|
public $name = '';
|
|
|
|
/**
|
|
* Value of the setting.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
* @var string
|
|
*/
|
|
public $value = '';
|
|
|
|
/**
|
|
* Default value of the setting.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
* @var string
|
|
*/
|
|
public $default = '';
|
|
|
|
/**
|
|
* Sanitization/Validation callback function.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
* @var string
|
|
*/
|
|
public $sanitize_callback = '';
|
|
|
|
/**
|
|
* A user role capability required to save the setting.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
* @var string|array
|
|
*/
|
|
public $capability = '';
|
|
|
|
/**
|
|
* A feature that the current post type must support to save the setting.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
* @var string
|
|
*/
|
|
public $post_type_supports = '';
|
|
|
|
/**
|
|
* A feature that the current theme must support to save the setting.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
* @var string|array
|
|
*/
|
|
public $theme_supports = '';
|
|
|
|
/**
|
|
* Creates a new setting object.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
* @param object $manager
|
|
* @param string $cap
|
|
* @param array $args
|
|
* @return void
|
|
*/
|
|
public function __construct( $manager, $name, $args = array() ) {
|
|
|
|
foreach ( array_keys( get_object_vars( $this ) ) as $key ) {
|
|
|
|
if ( isset( $args[ $key ] ) )
|
|
$this->$key = $args[ $key ];
|
|
}
|
|
|
|
$this->manager = $manager;
|
|
$this->name = $name;
|
|
|
|
if ( $this->sanitize_callback )
|
|
add_filter( "butterbean_{$this->manager->name}_sanitize_{$this->name}", $this->sanitize_callback, 10, 2 );
|
|
}
|
|
|
|
/**
|
|
* Gets the value of the setting.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
* @return mixed
|
|
*/
|
|
public function get_value() {
|
|
|
|
$value = get_post_meta( $this->manager->post_id, $this->name, true );
|
|
|
|
return ! $value && butterbean()->is_new_post ? $this->default : $value;
|
|
}
|
|
|
|
/**
|
|
* Gets the posted value of the setting.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
* @return mixed
|
|
*/
|
|
public function get_posted_value() {
|
|
|
|
$value = '';
|
|
|
|
if ( isset( $_POST[ $this->get_field_name() ] ) )
|
|
$value = $_POST[ $this->get_field_name() ];
|
|
|
|
return $this->sanitize( $value );
|
|
}
|
|
|
|
/**
|
|
* Retuns the correct field name for the setting.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
* @return string
|
|
*/
|
|
public function get_field_name() {
|
|
|
|
return "butterbean_{$this->manager->name}_setting_{$this->name}";
|
|
}
|
|
|
|
/**
|
|
* Sanitizes the value of the setting.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
* @return mixed
|
|
*/
|
|
public function sanitize( $value ) {
|
|
|
|
return apply_filters( "butterbean_{$this->manager->name}_sanitize_{$this->name}", $value, $this );
|
|
}
|
|
|
|
/**
|
|
* Saves the value of the setting.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function save() {
|
|
|
|
if ( ! $this->check_capabilities() )
|
|
return;
|
|
|
|
$old_value = $this->get_value();
|
|
$new_value = $this->get_posted_value();
|
|
|
|
// If we have don't have a new value but do have an old one, delete it.
|
|
if ( ! $new_value && $old_value )
|
|
delete_post_meta( $this->manager->post_id, $this->name );
|
|
|
|
// If the new value doesn't match the old value, set it.
|
|
else if ( $new_value !== $old_value )
|
|
update_post_meta( $this->manager->post_id, $this->name, $new_value );
|
|
}
|
|
|
|
/**
|
|
* Checks if the setting should be saved at all.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
* @return bool
|
|
*/
|
|
public function check_capabilities() {
|
|
|
|
if ( $this->capability && ! call_user_func_array( 'current_user_can', (array) $this->capability ) )
|
|
return false;
|
|
|
|
if ( $this->post_type_supports && ! call_user_func_array( 'post_type_supports', array( get_post_type( $this->manager->post_id ), $this->post_type_supports ) ) )
|
|
return false;
|
|
|
|
if ( $this->theme_supports && ! call_user_func_array( 'theme_supports', (array) $this->theme_supports ) )
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
}
|