first commit
This commit is contained in:
@@ -0,0 +1,226 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user