/wp-content/plugins/w3-total-cache/extensions/GenesisAdmin.php
PHP | 317 lines | 269 code | 19 blank | 29 comment | 25 complexity | 1ffe71f0ac0b6f7fea409614bd273951 MD5 | raw file
- <?php
- /**
- * W3 GenesisExtension module
- */
- if (!defined('W3TC')) {
- die();
- }
- class W3_GenesisAdmin {
- function run() {
- add_action('admin_init', array($this, 'admin_init'));
- add_filter('w3tc_extensions', array($this, 'extension'), 10, 2);
- add_action('w3tc_extensions_page-genesis.theme', array($this, 'extension_header'));
- }
- /**
- * Display if caching or not.
- */
- function extension_header() {
- $config = w3_instance('W3_Config');
- $settings = w3tc_get_extension_config('genesis.theme');
- $caching = false;
- foreach($settings as $setting => $value) {
- if (strpos($setting, 'reject') === false && $value == '1') {
- $caching = true;
- break;
- }
- }
- echo '<p>';
- printf(__('The Genesis Framework extension is currently %s ', 'w3-total-cache'),
- ($caching ? '<span class="w3tc-enabled">' . __('enabled', 'w3-total-cache') . '</span>' :
- '<span class="w3tc-disabled">' . __('disabled', 'w3-total-cache') . '</span>'));
- if ($caching)
- printf(__('and caching via <strong>%s</strong>', 'w3-total-cahe'),$config->get_string('fragmentcache.engine'));
- echo '.</p>';
- }
- /**
- * Setups sections
- */
- function admin_init() {
- w3_require_once(W3TC_INC_FUNCTIONS_DIR . '/extensions.php');
- // Register our settings field group
- w3tc_add_settings_section(
- 'header', // Unique identifier for the settings section
- 'Header', // Section title
- '__return_false', // Section callback (we don't want anything)
- 'genesis.theme' // extension id, used to uniquely identify the extension;
- );
- w3tc_add_settings_section(
- 'content',
- 'Content',
- '__return_false',
- 'genesis.theme'
- );
- w3tc_add_settings_section(
- 'sidebar',
- 'Sidebar',
- '__return_false',
- 'genesis.theme'
- );
- w3tc_add_settings_section(
- 'footer',
- 'Footer',
- '__return_false',
- 'genesis.theme'
- );
- w3tc_add_settings_section(
- 'exclusions',
- 'Disable fragment cache',
- '__return_false',
- 'genesis.theme'
- );
- $settings = $this->settings();
- foreach($settings as $setting => $meta) {
- /**
- * @var $label
- * @var $description
- * @var $section
- * @var $type
- */
- extract($meta);
- w3tc_add_settings_field($setting, $label,
- array($this, 'print_setting'), 'genesis.theme', $section,
- array('label_for'=>$setting, 'type'=>$type,
- 'description' => $description));
- }
- }
- /**
- *
- * @param $setting
- * @param $args
- */
- function print_setting($setting, $args) {
- w3_require_once(W3TC_INC_FUNCTIONS_DIR . '/extensions.php');
- list($name, $id) = w3tc_get_name_and_id('genesis.theme', $setting);
- if ($args['type'] != 'custom')
- w3_ui_element($args['type'], $setting, $name, w3tc_get_extension_config('genesis.theme', $setting), w3_extension_is_sealed('genesis.theme'));
- else {
- if ($setting == 'reject_roles'):
- $saved_roles = w3tc_get_extension_config('genesis.theme', $setting);
- if (!is_array($saved_roles))
- $saved_roles = array();
- ?>
- <div id="<?php echo esc_attr($id)?>">
- <input type="hidden" name="<?php echo esc_attr($name)?>" value="" />
- <?php foreach( get_editable_roles() as $role_name => $role_data ) : ?>
- <input <?php disabled(w3_extension_is_sealed('genesis.theme')) ?> type="checkbox" name="<?php echo esc_attr($name)?>[]" value="<?php echo $role_name ?>" <?php checked( in_array( $role_name, $saved_roles ) ) ?> id="role_<?php echo $role_name ?>" />
- <label for="role_<?php echo $role_name ?>"><?php echo $role_data['name'] ?></label>
- <?php endforeach; ?>
- </div>
- <?php
- else:
- $saved_hooks = w3tc_get_extension_config('genesis.theme', $setting);
- if (!is_array($saved_hooks))
- $saved_hooks = array();
- $hooks = array('genesis_header' => 'Header', 'genesis_footer' => 'Footer', 'genesis_sidebar' => 'Sidebar', 'genesis_loop' =>'The Loop', 'wp_head' => 'wp_head', 'wp_footer' => 'wp_footer', 'genesis_comments' => 'Comments', 'genesis_pings' => 'Pings', 'genesis_do_nav'=>'Primary navigation', 'genesis_do_subnav' => 'Secondary navigation');?>
- <div id="<?php echo esc_attr($id)?>">
- <input <?php disabled(w3_extension_is_sealed('genesis.theme')) ?> type="hidden" name="<?php echo esc_attr($name)?>" value="" />
- <?php foreach( $hooks as $hook => $hook_label ) : ?>
- <input <?php disabled(w3_extension_is_sealed('genesis.theme')) ?> type="checkbox" name="<?php echo esc_attr($name)?>[]" value="<?php echo $hook ?>" <?php checked( in_array( $hook, $saved_hooks ) ) ?> id="role_<?php echo $hook ?>" />
- <label for="role_<?php echo $hook ?>"><?php echo $hook_label ?></label><br />
- <?php endforeach; ?>
- </div>
- <?php
- endif;
- }
- }
- /**
- * @param $extensions
- * @param W3_Config $config
- * @return mixed
- */
- function extension($extensions, $config) {
- $fc_enabled = ((w3_is_pro($config) || w3_is_enterprise($config)) &&
- $config->get_boolean('fragmentcache.enabled'));
- $activation_enabled = $fc_enabled && defined('PARENT_THEME_NAME') && PARENT_THEME_NAME == 'Genesis' &&
- defined('PARENT_THEME_VERSION') && version_compare(PARENT_THEME_VERSION, '1.9.0') >= 0;
- $message = array();
- if (is_network_admin()) {
- w3_require_once(W3TC_INC_FUNCTIONS_DIR . '/themes.php');
- $themes = w3tc_get_themes();
- $exists = false;
- foreach ($themes as $theme) {
- if (strtolower($theme->Template) == 'genesis')
- $exists = true;
- }
- if (!$exists)
- $message[] = 'Genesis Framework';
- } elseif (!(defined('PARENT_THEME_NAME') && PARENT_THEME_NAME == 'Genesis'))
- $message[] = 'Genesis Framework version >= 1.9.0';
- if (!$fc_enabled)
- $message[] = 'Fragment Cache (W3 Total Cache Pro)';
- $extensions['genesis.theme'] = array (
- 'name' => 'Genesis Framework',
- 'author' => 'W3 EDGE',
- 'description' => 'Provides 30-60% improvement in page generation time for the Genesis Framework by Copyblogger Media.',
- 'author uri' => 'http://www.w3-edge.com/',
- 'extension uri' => 'http://www.w3-edge.com/',
- 'extension id' => 'genesis.theme',
- 'version' => '0.1',
- 'enabled' => $activation_enabled,
- 'requirements' => implode(', ', $message),
- 'path' => 'w3-total-cache/extensions/Genesis.php'
- );
- return $extensions;
- }
- /**
- * @return array
- */
- function settings() {
- return
- array(
- 'wp_head' =>
- array(
- 'type' => 'checkbox',
- 'section' => 'header',
- 'label' => __('Cache wp_head loop:', 'w3-total-cache'),
- 'description' =>__('Cache wp_head. This includes the embedded CSS, JS etc.', 'w3-total-cache')
- ),
- 'genesis_header' =>
- array(
- 'type' => 'checkbox',
- 'section' => 'header',
- 'label' => __('Cache header:', 'w3-total-cache'),
- 'description' => __('Cache header loop. This is the area where the logo is located.', 'w3-total-cache')
- ),
- 'genesis_do_nav' =>
- array(
- 'type' => 'checkbox',
- 'section' => 'header',
- 'label' => __('Cache primary navigation:', 'w3-total-cache'),
- 'description' => __('Caches the navigation filter; per page.', 'w3-total-cache')
- ),
- 'genesis_do_subnav' =>
- array(
- 'type' => 'checkbox',
- 'section' => 'header',
- 'label' => __('Cache secondary navigation:', 'w3-total-cache'),
- 'description' => __('Caches secondary navigation filter; per page.', 'w3-total-cache'),
- ),
- 'loop_front_page' =>
- array(
- 'type' => 'checkbox',
- 'section' => 'content',
- 'label' => __('Cache front page post loop:', 'w3-total-cache'),
- 'description' => __('Caches the front page post loop, pagination is supported.', 'w3-total-cache')
- ),
- 'loop_terms' =>
- array(
- 'type' => 'checkbox',
- 'section' => 'content',
- 'label' => __('Cache author/tag/categories/term post loop:', 'w3-total-cache'),
- 'description' => __('Caches the posts listed on tag, categories, author and other term pages, pagination is supported.', 'w3-total-cache')
- ),
- 'flush_terms' =>
- array(
- 'type' => 'checkbox',
- 'section' => 'content',
- 'label' => __('Flush posts loop:', 'w3-total-cache'),
- 'description' => __('Flushes the posts loop cache on post updates. See setting above for affected loops.', 'w3-total-cache')
- ),
- 'loop_single' =>
- array(
- 'type' => 'checkbox',
- 'section' => 'content',
- 'label' => __('Cache single post / page:', 'w3-total-cache'),
- 'description' => __('Caches the single post / page loop, pagination is supported.', 'w3-total-cache')
- ),
- 'loop_single_excluded' =>
- array(
- 'type' => 'textarea',
- 'section' => 'content',
- 'label' => __('Excluded single pages / posts:', 'w3-total-cache'),
- 'description' => __('List of pages / posts that should not have the single post / post loop cached. Specify one page / post per line. This area supports regular expressions.', 'w3-total-cache')
- ),
- 'loop_single_genesis_comments' =>
- array(
- 'type' => 'checkbox',
- 'section' => 'content',
- 'label' => __('Cache comments:', 'w3-total-cache'),
- 'description' => __('Caches the comments loop, pagination is supported.', 'w3-total-cache')
- ),
- 'loop_single_genesis_pings' =>
- array(
- 'type' => 'checkbox',
- 'section' => 'content',
- 'label' => __('Cache pings:', 'w3-total-cache'),
- 'description' => __('Caches the ping loop, pagination is supported. One per line.', 'w3-total-cache')
- ),
- 'sidebar' =>
- array(
- 'type' => 'checkbox',
- 'section' => 'sidebar',
- 'label' => __('Cache sidebar:', 'w3-total-cache'),
- 'description' => __('Caches sidebar loop, the widget area.', 'w3-total-cache')
- ),
- 'sidebar_excluded' =>
- array(
- 'type' => 'textarea',
- 'section' => 'sidebar',
- 'label' => __('Exclude pages:', 'w3-total-cache'),
- 'description' => __('List of pages that should not have sidebar cached. Specify one page / post per line. This area supports regular expressions.', 'w3-total-cache')
- ),
- 'genesis_footer' =>
- array(
- 'type' => 'checkbox',
- 'section' => 'footer',
- 'label' => __('Cache footer:', 'w3-total-cache'),
- 'description' => __('Caches footer loop.', 'w3-total-cache')
- ),
- 'wp_footer' =>
- array(
- 'type' => 'checkbox',
- 'section' => 'footer',
- 'label' => __('Cache footer:', 'w3-total-cache'),
- 'description' => __('Caches wp_footer loop.', 'w3-total-cache')
- ),
- 'reject_logged_roles' =>
- array('type' => 'checkbox',
- 'section' => 'exclusions',
- 'label' => __('Disable fragment cache:', 'w3-total-cache'),
- 'description' => 'Don\'t use fragment cache with the following hooks and for the specified user roles.'
- ),
- 'reject_logged_roles_on_actions' =>
- array('type' => 'custom',
- 'section' => 'exclusions',
- 'label' => __('Select hooks:', 'w3-total-cache'),
- 'description' => __('Select hooks from the list that should not be cached if user belongs to any of the roles selected below.', 'w3-total-cache')
- ),
- 'reject_roles' =>
- array('type' => 'custom',
- 'section' => 'exclusions',
- 'label' => __('Select roles:', 'w3-total-cache'),
- 'description' => __('Select user roles that should not use the fragment cache.', 'w3-total-cache')
- )
- );
- }
- }
- $ext = new W3_GenesisAdmin();
- $ext->run();