/infinity/plugins/infinite-scroll/includes/options.php
https://bitbucket.org/cevenson/photosites-themes · PHP · 191 lines · 72 code · 51 blank · 68 comment · 6 complexity · 17a1a5606313b8d515c4468a5d2fcd27 MD5 · raw file
- <?php
- /**
- * Provides interface to store and retrieve plugin and user options
- * @subpackage Infinite_Scroll_Options
- * @package Infinite_Scroll
- */
- class Infinite_Scroll_Options {
- //default scope for options when called directly,
- //choices: site, user, or global (user option across sites)
- public $defaults = array();
- private $parent;
- /**
- * Stores parent class as static
- * @param class $parent (reference) the parent class
- */
- function __construct( &$parent ) {
- $this->parent = &$parent;
- add_action( 'admin_init', array( &$this, 'options_init' ) );
- add_filter( $this->parent->prefix . 'options', array( &$this, 'default_options_filter' ), 20 );
- add_filter( $this->parent->prefix . 'js_options', array( &$this, 'db_version_filter' ) );
- }
- /**
- * Tells WP that we're using a custom settings field
- */
- function options_init() {
- register_setting( $this->parent->slug_, $this->parent->slug_, array( &$this, 'validate' ) );
- }
- /**
- * Runs options through filter prior to saving
- * @param array $options the options array
- * @return array sanitized options array
- */
- function validate( $options ) {
- //add slashes to JS selectors
- $js = array ( 'nextSelector', 'navSelector', 'itemSelector', 'contentSelector' );
- foreach ( $js as $field ) {
- if ( !isset( $options[$field] ) )
- continue;
- $options[$field] = addslashes( $options[ $field ] );
- }
- //force post-style kses on messages
- foreach ( array( 'finishedMsg', 'msgText' ) as $field ) {
- if ( !isset( $options['loading'][$field] ) )
- continue;
- // wp_filter_post_kses will add slashes to something like "you've" -> "you\'ve" but not added slashes to other slashes
- // Escaping the slashes and then stripping them, gets past this problem and allows preservation of intentionally inserted slashes
- $options['loading'][$field] = stripslashes(wp_filter_post_kses( addslashes($options['loading'][$field] )));
- }
-
- //handle image resets
- if ( isset( $_POST[ 'reset_default_image'] ) )
- $options["loading"]['img'] = $this->defaults["loading"]['img'];
-
- //pull existing image if none is given
- if ( empty( $options["loading"]['img'] ) )
- $options["loading"]['img'] = $this->loading["img"];
- // force `debug` to be a bool
- $options["debug"] = (bool)$options["debug"];
- return apply_filters( $this->parent->prefix . 'options_validate', $options );
- }
- /**
- * Allows overloading to get option value
- * Usage: $value = $object->{option name}
- * @param string $name the option name
- * @return mixed the option value
- */
- function __get( $name ) {
- return $this->get_option( $name );
- }
- /**
- * Allows overloading to set option value
- * Usage: $object->{option name} = $value
- * @param string $name unique option key
- * @param mixed $value the value to store
- * @return bool success/fail
- */
- function __set( $name, $value ) {
- return $this->set_option( $name, $value );
- }
- /**
- * Retreive the options array
- * @return array the options
- */
- function get_options( ) {
- if ( !$options = wp_cache_get( 'options', $this->parent->slug ) ) {
- $options = get_option( $this->parent->slug_ );
- wp_cache_set( 'options', $options, $this->parent->slug );
- }
- return apply_filters( $this->parent->prefix . 'options', $options );
- }
- /**
- * If any options are not set, merge with defaults
- * @param array $options the saved options
- * @return array the merged options with defaults
- */
- function default_options_filter( $options ) {
- $options = wp_parse_args( $options, $this->defaults );
- wp_cache_set( 'options', $options, $this->parent->slug );
- return $options;
- }
- /**
- * Retreives a specific option
- * @param string $option the unique option key
- * @return mixed the value
- */
- function get_option( $option ) {
- $options = $this->get_options( );
- $value = ( isset( $options[ $option ] ) ) ? $options[ $option ] : false;
- return apply_filters( $this->parent->prefix . $option, $value );
- }
- /**
- * Sets a specific option
- * @return bool success/fail
- * @param string $key the unique option key
- * @param mixed $value the value
- */
- function set_option( $key, $value ) {
- $options = array( $key => $value );
- $this->set_options( $options );
- }
- /**
- * Sets all plugin options
- * @param array $options the options array
- * @param bool $merge (optional) whether or not to merge options arrays or overwrite
- * @return bool success/fail
- */
- function set_options( $options, $merge = true ) {
- if ( $merge ) {
- $defaults = $this->get_options();
- $options = wp_parse_args( $options, $defaults );
- }
- wp_cache_set( 'options', $options, $this->parent->slug );
- return update_option( $this->parent->slug_, $options );
- }
-
- /**
- * Don't output db_version to front end when passing args to javascript function
- */
- function db_version_filter( $options ) {
- unset( $options['db_version'] );
- return $options;
- }
- }