This repository has been archived on 2023-08-16. You can view files and clone it, but cannot push or open issues or pull requests.
Omphaloskepsis/plugins/infinite-scroll/includes/options.php

192 lines
4.8 KiB
PHP

<?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;
}
}