This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /** * checks for SSL connection */ if ( ! function_exists ( 'replace_if_ssl' ) ) { function replace_if_ssl ( $string ) { if ( isset($_SERVER['HTTPS']) && ( ( strtolower($_SERVER['HTTPS']) == 'on' ) || ( $_SERVER['HTTPS'] == '1' ) ) ) return str_replace ( 'http://' , 'https://' , $string ); else return $string; } } /* fix */ if ( ! defined( 'WP_PLUGIN_URL_' ) ) { if ( defined( 'WP_PLUGIN_URL' ) ) define( 'WP_PLUGIN_URL_' , replace_if_ssl ( WP_PLUGIN_URL ) ); else define( 'WP_PLUGIN_URL_', replace_if_ssl ( get_option( 'siteurl' ) ) . '/wp-content/plugins' ); } if ( ! defined( 'WP_PLUGIN_DIR' ) ) define( 'WP_PLUGIN_DIR', ABSPATH . 'wp-content/plugins' ); /* constants */ define ( 'WP_FFPC_PARAM' , 'wp-ffpc' ); define ( 'WP_FFPC_OPTION_GROUP' , 'wp-ffpcparams' ); define ( 'WP_FFPC_OPTIONS_PAGE' , 'wp-ffpcoptions' ); define ( 'WP_FFPC_URL' , WP_PLUGIN_URL_ . '/' . WP_FFPC_PARAM ); define ( 'WP_FFPC_DIR' , WP_PLUGIN_DIR . '/' . WP_FFPC_PARAM ); define ( 'WP_FFPC_CONF_DIR' , WP_PLUGIN_DIR . '/' . WP_FFPC_PARAM .'/config' ); define ( 'WP_FFPC_ACACHE_MAIN_FILE' , ABSPATH . 'wp-content/advanced-cache.php' ); define ( 'WP_FFPC_ACACHE_INC_FILE' , WP_FFPC_DIR. '/advanced-cache.php' ); define ( 'WP_FFPC_ACACHE_COMMON_FILE' , WP_FFPC_DIR. '/wp-ffpc-common.php' ); define ( 'WP_FFPC_CONFIG_VAR' , '$wp_ffpc_config' ); define ( 'WP_FFPC_SERVER_LIST_SEPARATOR' , ',' ); define ( 'WP_FFPC_SERVER_SEPARATOR', ':' ); define ( 'WP_FFPC_DONATION_LINK', 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=XU3DG7LLA76WC' ); /* get the common functions */ include_once (WP_FFPC_DIR .'/wp-ffpc-common.php'); if (!class_exists('WPFFPC')) { /** * main class * */ class WPFFPC { /* for options array */ var $options = array(); /* for default options array */ var $defaults = array(); /* memcached server object */ var $memcached = NULL; var $memcached_string = ''; /* status, 0 = nothing happened*/ var $status = 0; /* stores information if plugin is network active or not */ var $network = false; /** * constructor * */ function __construct() { $this->check_for_network(); /* register options */ $this->get_options(); /* check is backend is available */ $alive = wp_ffpc_init( $this->options ); /* don't register hooks if backend is dead */ if (!$alive) { /* init inactivation hooks */ add_action('switch_theme', array( $this , 'invalidate'), 0); add_action('edit_post', array( $this , 'invalidate'), 0); add_action('publish_post', array( $this , 'invalidate'), 0); add_action('delete_post', array( $this , 'invalidate'), 0); /* Capture and register if a redirect is sent back from WP, so the cache can cache (or ignore) it. Redirects were source of problems for blogs with more than one host name (eg. domain.com and www.domain.com) comined with the use of Hyper Cache.*/ add_filter('redirect_canonical', array( $this , 'redirect_canonical') , 10, 2); } /* add admin styling */ if( is_admin() ) { wp_enqueue_script ( "jquery-ui-tabs" ); wp_enqueue_style( WP_FFPC_PARAM . '.admin.css' , WP_FFPC_URL . '/' . WP_FFPC_PARAM .'.admin.css', false, '0.1'); } /* on activation */ register_activation_hook(__FILE__ , array( $this , 'activate') ); /* on deactivation */ register_deactivation_hook(__FILE__ , array( $this , 'deactivate') ); /* on uninstall */ register_uninstall_hook(__FILE__ , array( $this , 'uninstall') ); /* init plugin in the admin section */ /* if multisite, admin page will be on network admin section */ if ( $this->network ) add_action('network_admin_menu', array( $this , 'admin_init') ); /* not network, will be in simple admin menu */ else add_action('admin_menu', array( $this , 'admin_init') ); } /** * activation hook: save default settings in order to eliminate bugs. * */ function activate ( ) { /* register options for first time */ add_site_option( WP_FFPC_PARAM, $this->options , '' , 'yes'); $this->save_settings( true ); } /** * init function for admin section * */ function admin_init () { /* save parameter updates, if there are any */ if ( isset($_POST[WP_FFPC_PARAM . '-save']) ) { $this->save_settings (); $this->status = 1; header("Location: admin.php?page=" . WP_FFPC_OPTIONS_PAGE . "&saved=true"); } /* we use settings menu, no need for highest level menu */ add_submenu_page('settings.php', 'Edit WP-FFPC options', __('WP-FFPC', WP_FFPC_PARAM ), 10, WP_FFPC_OPTIONS_PAGE , array ( $this , 'admin_panel' ) ); } /** * settings panel at admin section * */ function admin_panel ( ) { /** * security */ if( ! function_exists( 'current_user_can' ) || ! current_user_can( 'manage_options' ) ){ die( ); } /** * if options were saved */ if ($_GET['saved']=='true' || $this->status == 1) : ?>

Settings saved.

This plugin helped your business? Buy me a coffee for having it, please :)

options['cache_type'] == 'memcached' && !class_exists('Memcached') ) : ?>

options['cache_type'] == 'memcache' && !class_exists('Memcache') ) : ?>

options['cache_type'] == 'memcache' && $memcached_protocol == 'binary' ) : ?>

options['cache_type'] == 'memcached' || $this->options['cache_type'] == 'memcache' ) : ?>

options['cache_type']; ?>

Backend status:
', WP_FFPC_PARAM ); $init = wp_ffpc_init( $this->options); /* we need to go through all servers */ foreach ( $this->options['servers'] as $server_string => $server ) { echo $server['host'] . ":" . $server['port'] ." => "; $server_status = ( empty($init) || $init[$server_string] == 0 ) ? 'down' : 'up & running' ; echo $server_status ."
\n"; } ?>

: cache_type( $this->defaults['cache_type'] , true ) ; ?>
: defaults['expire']; ?>
: defaults['charset']; ?>
WARNING! When selection "all", the cache will be fully flushed, including elements that were set by other applications.

', WP_FFPC_PARAM); ?>
: invalidation_method( $this->defaults['invalidation_method'] , true ) ; ?>
: defaults['prefix_data']; ?>
: defaults['prefix_meta']; ?>
options['debug'],true); ?> /> : print_bool( $this->defaults['debug']); ?>
options['syslog'],true); ?> /> : print_bool( $this->defaults['syslog']); ?>
options['pingback_status'],true); ?> /> : print_bool( $this->defaults['pingback_status']); ?>
options['sync_protocols'],true); ?> /> : print_bool( $this->defaults['sync_protocols']); ?>
options['cache_loggedin'],true); ?> /> : print_bool( $this->defaults['cache_loggedin']); ?>
options['nocache_home'],true); ?> /> : print_bool( $this->defaults['nocache_home']); ?>
options['nocache_feed'],true); ?> /> : print_bool( $this->defaults['nocache_feed']); ?>
options['nocache_archive'],true); ?> /> : print_bool( $this->defaults['nocache_archive']); ?>
options['nocache_single'],true); ?> /> : print_bool( $this->defaults['nocache_single']); ?>
options['nocache_page'],true); ?> /> : print_bool( $this->defaults['nocache_page']); ?>
options['apc_compress'],true); ?> /> : print_bool( $this->defaults['apc_compress']); ?>
: defaults['host']; ?>
options['persistent'],true); ?> /> : defaults['persistent']; ?>
options['prefix_data'], $this->options['host'], $this->options['port'] ); $nginx = file_get_contents ( WP_FFPC_DIR .'/nginx-sample.conf' ); $nginx = str_replace ( $search , $replace , $nginx ); foreach ( array_keys( $this->options['servers'] ) as $server ) { $nginx_servers .= " server ". $server .";\n"; } $nginx = str_replace ( 'MEMCACHED_SERVERS' , $nginx_servers , $nginx ); ?>

input field with $current set as active * */ function cache_type ( $current , $returntext = false ) { $e = array ( 'apc' => 'use APC as store', 'memcache' => 'use memcached server with Memcache extension', 'memcached' => 'use memcached server with Memcached extension', ); $this->print_select_options ( $e , $current , $returntext ); } /** * see if we are using network-wide setup or not * */ function check_for_network( ) { if ( is_multisite() ) { $plugins = get_site_option( 'active_sitewide_plugins'); if ( isset($plugins['wp-ffpc/wp-ffpc.php']) ) { $this->network = true; } } } /** * deactivation hook: clear advanced-cache config file * */ function deactivate ( ) { if (@file_exists (WP_FFPC_ACACHE_MAIN_FILE)) @unlink (WP_FFPC_ACACHE_MAIN_FILE); } /** * invalidate cache * * @param $post_id * id of post to be removed from cache entries */ function invalidate ( $post_id ) { wp_ffpc_clear ( $post_id ); } /** * generates invalidation method select box * * @param $current * the active or required size's identifier * * @param $returntext * boolean: is true, the description will be returned of $current size * * @return * prints either description of $current * or option list for a input field with $current set as active * */ function print_select_options ( $sizes, $current, $returntext=false ) { if ( $returntext ) { _e( $sizes[ $current ] , WP_FFPC_PARAM); return; } foreach ($sizes as $ext=>$name) { ?> defaults; /* only try to update defaults if it's not first run and $_POST is not empty */ if ( !$firstrun && !empty ( $_POST ) ) { foreach ( $options as $key => $default ) { /* $_POST element is available */ if (!empty($_POST[$key])) { $update = $_POST[$key]; /* get rid of slashed */ if ( strlen( $update ) !=0 &&!is_numeric($update) ) $update = stripslashes($update); $options[$key] = $update; } /* empty $_POST element: when HTML form posted, empty checkboxes a 0 values will not be part of the $_POST array, thus we need to check if this is the situation by checking the types of the elements, since a missing value could mean update from 1 to 0 */ elseif ( empty( $_POST[$key] ) && ( is_bool ( $default ) || is_int( $default ) ) ) { $options[$key] = 0; } } } $this->options = $options; /* set up server array from hosts config var */ $this->split_hosts(); /* save options */ update_site_option( WP_FFPC_PARAM , $this->options ); /* invalidate cache, this is neccessary */ $this->invalidate('system_flush'); /* if it's not for the first run, generate the config file */ if ( ! $firstrun ) $this->generate_config(); } /** * splits config parameter "hosts" into an array of server string, host and port * to be used in later config * */ function split_hosts ( ) { $servers = explode( WP_FFPC_SERVER_LIST_SEPARATOR , $this->options['hosts']); $good_servers = array(); foreach ( $servers as $server_num => $server_string ) { $separator = strpos( $server_string , WP_FFPC_SERVER_SEPARATOR ); $host = substr( $server_string, 0, $separator ); $port = substr( $server_string, $separator + 1 ); if ( !empty ( $host ) && !empty($port) && is_numeric($port) ) { $good_servers[$server_string] = array ( 'host' => $host, 'port' => $port ); } } if ( !empty ( $good_servers )) $this->options['servers'] = $good_servers; } /** * clean up at uninstall * */ function uninstall ( ) { delete_site_option( WP_FFPC_PARAM ); wp_ffpc_log ( "plugin uninstalled "); } } } /** * instantiate the class */ $wp_nmc = new WPFFPC(); ?>