예제 #1
0
 /**
  * Extensions view
  *
  * @return void
  */
 function render_content()
 {
     $extension = '';
     $extension_status = 'all';
     if (isset($_GET['extension_status'])) {
         if (in_array($_GET['extension_status'], array('all', 'active', 'inactive', 'core'))) {
             $extension_status = $_GET['extension_status'];
         }
     }
     if (isset($_GET['extension'])) {
         $extension = $_GET['extension'];
     }
     $view = isset($_GET['action']) && $_GET['action'] == 'view';
     $extensions_active = Extensions_Util::get_active_extensions($this->_config);
     if ($extension && $view) {
         $all_settings = $this->_config->get_array('extensions.settings');
         $meta = $extensions_active[$extension];
         $sub_view = 'settings';
     } else {
         $extensions_all = Extensions_Util::get_extensions($this->_config);
         $extensions_inactive = Extensions_Util::get_inactive_extensions($this->_config);
         $var = "extensions_{$extension_status}";
         $extensions = ${$var};
         $extension_keys = array_keys($extensions);
         sort($extension_keys);
         $sub_view = 'list';
         $page = 1;
     }
     $config = Dispatcher::config();
     include W3TC_INC_OPTIONS_DIR . '/extensions.php';
 }
예제 #2
0
 /**
  *
  *
  * @param unknown $extension
  * @param Config  $w3_config
  * @return bool
  */
 public static function activate_extension($extension, $w3_config)
 {
     $all_extensions = Extensions_Util::get_extensions($w3_config);
     $extensions = $w3_config->get_array('extensions.active');
     if (!$w3_config->is_extension_active($extension)) {
         $meta = $all_extensions[$extension];
         $filename = W3TC_EXTENSION_DIR . '/' . trim($meta['path'], '/');
         if (!file_exists($filename)) {
             return false;
         }
         include $filename;
         $extensions[$extension] = $meta['path'];
         ksort($extensions, SORT_STRING);
         $w3_config->set('extensions.active', $extensions);
         // if extensions doesnt want to control frontend activity -
         // activate it there too
         if (!isset($meta['active_frontend_own_control']) || !$meta['active_frontend_own_control']) {
             $w3_config->set_extension_active_frontend($extension, true);
         }
         try {
             $w3_config->save();
             return true;
         } catch (\Exception $ex) {
         }
     }
     return false;
 }
 function w3tc_extensions_activate()
 {
     $config = Dispatcher::config();
     $extension = Util_Request::get_string('w3tc_extensions_activate');
     $ext = Extensions_Util::get_extension($config, $extension);
     if (!is_null($ext)) {
         if (Extensions_Util::activate_extension($extension, $config)) {
             Util_Admin::redirect_with_custom_messages2(array('notes' => array(sprintf(__('Extension <strong>%s</strong> has been successfully activated.', 'w3-total-cache'), $ext['name']))));
             return;
         }
     }
     Util_Admin::redirect(array());
 }
 /**
  * Alters the active state of an extension
  */
 public function change_extension_status()
 {
     $action = Util_Request::get_string('action');
     if (in_array($action, array('activate', 'deactivate'))) {
         $extension = Util_Request::get_string('extension');
         if ('activate' == $action) {
             Extensions_Util::activate_extension($extension, $this->_config);
             wp_redirect(Util_Ui::admin_url(sprintf('admin.php?page=w3tc_extensions&activated=%s', $extension)));
         } elseif ('deactivate' == $action) {
             Extensions_Util::deactivate_extension($extension, $this->_config);
             wp_redirect(Util_Ui::admin_url(sprintf('admin.php?page=w3tc_extensions&deactivated=%s', $extension)));
         }
     }
 }
 private function _w3tc_save_options_process()
 {
     $data = array('old_config' => $this->_config, 'response_query_string' => array(), 'response_actions' => array(), 'response_errors' => array(), 'response_notes' => array('config_save'));
     // if we are on extension settings page - stay on the same page
     if (Util_Request::get_string('page') == 'w3tc_extensions') {
         $data['response_query_string']['page'] = Util_Request::get_string('page');
         $data['response_query_string']['extension'] = Util_Request::get_string('extension');
         $data['response_query_string']['action'] = Util_Request::get_string('action');
     }
     $capability = apply_filters('w3tc_capability_config_save', 'manage_options');
     if (!current_user_can($capability)) {
         wp_die(__('You do not have the rights to perform this action.', 'w3-total-cache'));
     }
     /**
      * Read config
      * We should use new instance of WP_Config object here
      */
     $config = new Config();
     $this->read_request($config);
     if ($this->_page == 'w3tc_dashboard') {
         if (Util_Request::get_boolean('maxcdn')) {
             $config->set('cdn.enabled', true);
             $config->set('cdn.engine', 'maxcdn');
         }
     }
     /**
      * General tab
      */
     if ($this->_page == 'w3tc_general') {
         $file_nfs = Util_Request::get_boolean('file_nfs');
         $file_locking = Util_Request::get_boolean('file_locking');
         $config->set('pgcache.file.nfs', $file_nfs);
         $config->set('minify.file.nfs', $file_nfs);
         $config->set('dbcache.file.locking', $file_locking);
         $config->set('objectcache.file.locking', $file_locking);
         $config->set('pgcache.file.locking', $file_locking);
         $config->set('minify.file.locking', $file_locking);
         if (is_network_admin()) {
             if ($this->_config->get_boolean('common.force_master') !== $config->get_boolean('common.force_master')) {
                 // blogmap is wrong so empty it
                 @unlink(W3TC_CACHE_BLOGMAP_FILENAME);
                 $blogmap_dir = dirname(W3TC_CACHE_BLOGMAP_FILENAME) . '/' . basename(W3TC_CACHE_BLOGMAP_FILENAME, '.php') . '/';
                 if (@is_dir($blogmap_dir)) {
                     Util_File::rmdir($blogmap_dir);
                 }
             }
         }
         /**
          * Check permalinks for page cache
          */
         if ($config->get_boolean('pgcache.enabled') && $config->get_string('pgcache.engine') == 'file_generic' && !get_option('permalink_structure')) {
             $config->set('pgcache.enabled', false);
             $data['response_errors'][] = 'fancy_permalinks_disabled_pgcache';
         }
         if (!Util_Environment::is_w3tc_pro($this->_config)) {
             delete_transient('w3tc_license_status');
         }
     }
     /**
      * Minify tab
      */
     if ($this->_page == 'w3tc_minify' && !$this->_config->get_boolean('minify.auto')) {
         $js_groups = array();
         $css_groups = array();
         $js_files = Util_Request::get_array('js_files');
         $css_files = Util_Request::get_array('css_files');
         foreach ($js_files as $theme => $templates) {
             foreach ($templates as $template => $locations) {
                 foreach ((array) $locations as $location => $types) {
                     foreach ((array) $types as $files) {
                         foreach ((array) $files as $file) {
                             if (!empty($file)) {
                                 $js_groups[$theme][$template][$location]['files'][] = Util_Environment::normalize_file_minify($file);
                             }
                         }
                     }
                 }
             }
         }
         foreach ($css_files as $theme => $templates) {
             foreach ($templates as $template => $locations) {
                 foreach ((array) $locations as $location => $files) {
                     foreach ((array) $files as $file) {
                         if (!empty($file)) {
                             $css_groups[$theme][$template][$location]['files'][] = Util_Environment::normalize_file_minify($file);
                         }
                     }
                 }
             }
         }
         $config->set('minify.js.groups', $js_groups);
         $config->set('minify.css.groups', $css_groups);
         $js_theme = Util_Request::get_string('js_theme');
         $css_theme = Util_Request::get_string('css_theme');
         $data['response_query_string']['js_theme'] = $js_theme;
         $data['response_query_string']['css_theme'] = $css_theme;
     }
     /**
      * Browser Cache tab
      */
     if ($this->_page == 'w3tc_browsercache') {
         if ($config->get_boolean('browsercache.enabled') && $config->get_boolean('browsercache.no404wp') && !get_option('permalink_structure')) {
             $config->set('browsercache.no404wp', false);
             $data['response_errors'][] = 'fancy_permalinks_disabled_browsercache';
         }
         // todo: move to cdn module
         if (in_array($engine = $this->_config->get_string('cdn.engine'), array('netdna', 'maxcdn'))) {
             require_once W3TC_LIB_NETDNA_DIR . '/NetDNA.php';
             $keys = explode('+', $this->_config->get_string('cdn.' . $engine . '.authorization_key'));
             if (sizeof($keys) == 3) {
                 list($alias, $consumerkey, $consumersecret) = $keys;
                 try {
                     $api = new \NetDNA($alias, $consumerkey, $consumersecret);
                     $disable_cooker_header = $config->get_boolean('browsercache.other.nocookies') || $config->get_boolean('browsercache.cssjs.nocookies');
                     $api->update_pull_zone($this->_config->get_string('cdn.' . $engine . '.zone_id'), array('ignore_setcookie_header' => $disable_cooker_header));
                 } catch (\Exception $ex) {
                 }
             }
         }
     }
     /**
      * Mobile tab
      */
     if ($this->_page == 'w3tc_mobile') {
         $groups = Util_Request::get_array('mobile_groups');
         $mobile_groups = array();
         $cached_mobile_groups = array();
         foreach ($groups as $group => $group_config) {
             $group = strtolower($group);
             $group = preg_replace('~[^0-9a-z_]+~', '_', $group);
             $group = trim($group, '_');
             if ($group) {
                 $theme = isset($group_config['theme']) ? trim($group_config['theme']) : 'default';
                 $enabled = isset($group_config['enabled']) ? (bool) $group_config['enabled'] : true;
                 $redirect = isset($group_config['redirect']) ? trim($group_config['redirect']) : '';
                 $agents = isset($group_config['agents']) ? explode("\r\n", trim($group_config['agents'])) : array();
                 $mobile_groups[$group] = array('theme' => $theme, 'enabled' => $enabled, 'redirect' => $redirect, 'agents' => $agents);
                 $cached_mobile_groups[$group] = $agents;
             }
         }
         /**
          * Allow plugins modify WPSC mobile groups
          */
         $cached_mobile_groups = apply_filters('cached_mobile_groups', $cached_mobile_groups);
         /**
          * Merge existent and delete removed groups
          */
         foreach ($mobile_groups as $group => $group_config) {
             if (isset($cached_mobile_groups[$group])) {
                 $mobile_groups[$group]['agents'] = (array) $cached_mobile_groups[$group];
             } else {
                 unset($mobile_groups[$group]);
             }
         }
         /**
          * Add new groups
          */
         foreach ($cached_mobile_groups as $group => $agents) {
             if (!isset($mobile_groups[$group])) {
                 $mobile_groups[$group] = array('theme' => '', 'enabled' => true, 'redirect' => '', 'agents' => $agents);
             }
         }
         /**
          * Allow plugins modify W3TC mobile groups
          */
         $mobile_groups = apply_filters('w3tc_mobile_groups', $mobile_groups);
         /**
          * Sanitize mobile groups
          */
         foreach ($mobile_groups as $group => $group_config) {
             $mobile_groups[$group] = array_merge(array('theme' => '', 'enabled' => true, 'redirect' => '', 'agents' => array()), $group_config);
             $mobile_groups[$group]['agents'] = array_unique($mobile_groups[$group]['agents']);
             $mobile_groups[$group]['agents'] = array_map('strtolower', $mobile_groups[$group]['agents']);
             sort($mobile_groups[$group]['agents']);
         }
         $enable_mobile = false;
         foreach ($mobile_groups as $group_config) {
             if ($group_config['enabled']) {
                 $enable_mobile = true;
                 break;
             }
         }
         $config->set('mobile.enabled', $enable_mobile);
         $config->set('mobile.rgroups', $mobile_groups);
     }
     /**
      * Referrer tab
      */
     if ($this->_page == 'w3tc_referrer') {
         $groups = Util_Request::get_array('referrer_groups');
         $referrer_groups = array();
         foreach ($groups as $group => $group_config) {
             $group = strtolower($group);
             $group = preg_replace('~[^0-9a-z_]+~', '_', $group);
             $group = trim($group, '_');
             if ($group) {
                 $theme = isset($group_config['theme']) ? trim($group_config['theme']) : 'default';
                 $enabled = isset($group_config['enabled']) ? (bool) $group_config['enabled'] : true;
                 $redirect = isset($group_config['redirect']) ? trim($group_config['redirect']) : '';
                 $referrers = isset($group_config['referrers']) ? explode("\r\n", trim($group_config['referrers'])) : array();
                 $referrer_groups[$group] = array('theme' => $theme, 'enabled' => $enabled, 'redirect' => $redirect, 'referrers' => $referrers);
             }
         }
         /**
          * Allow plugins modify W3TC referrer groups
          */
         $referrer_groups = apply_filters('w3tc_referrer_groups', $referrer_groups);
         /**
          * Sanitize mobile groups
          */
         foreach ($referrer_groups as $group => $group_config) {
             $referrer_groups[$group] = array_merge(array('theme' => '', 'enabled' => true, 'redirect' => '', 'referrers' => array()), $group_config);
             $referrer_groups[$group]['referrers'] = array_unique($referrer_groups[$group]['referrers']);
             $referrer_groups[$group]['referrers'] = array_map('strtolower', $referrer_groups[$group]['referrers']);
             sort($referrer_groups[$group]['referrers']);
         }
         $enable_referrer = false;
         foreach ($referrer_groups as $group_config) {
             if ($group_config['enabled']) {
                 $enable_referrer = true;
                 break;
             }
         }
         $config->set('referrer.enabled', $enable_referrer);
         $config->set('referrer.rgroups', $referrer_groups);
     }
     /**
      * CDN tab
      */
     if ($this->_page == 'w3tc_cdn') {
         $cdn_cnames = Util_Request::get_array('cdn_cnames');
         $cdn_domains = array();
         foreach ($cdn_cnames as $cdn_cname) {
             $cdn_cname = trim($cdn_cname);
             /**
              * Auto expand wildcard domain to 10 subdomains
              */
             $matches = null;
             if (preg_match('~^\\*\\.(.*)$~', $cdn_cname, $matches)) {
                 $cdn_domains = array();
                 for ($i = 1; $i <= 10; $i++) {
                     $cdn_domains[] = sprintf('cdn%d.%s', $i, $matches[1]);
                 }
                 break;
             }
             if ($cdn_cname) {
                 $cdn_domains[] = $cdn_cname;
             }
         }
         switch ($this->_config->get_string('cdn.engine')) {
             case 'ftp':
                 $config->set('cdn.ftp.domain', $cdn_domains);
                 break;
             case 's3':
             case 's3_compatible':
                 $config->set('cdn.s3.cname', $cdn_domains);
                 break;
             case 'cf':
                 $config->set('cdn.cf.cname', $cdn_domains);
                 break;
             case 'cf2':
                 $config->set('cdn.cf2.cname', $cdn_domains);
                 break;
             case 'rackspace_cdn':
                 $config->set('cdn.rackspace_cdn.domains', $cdn_domains);
                 break;
             case 'rscf':
                 $config->set('cdn.rscf.cname', $cdn_domains);
                 break;
             case 'azure':
                 $config->set('cdn.azure.cname', $cdn_domains);
                 break;
             case 'mirror':
                 $config->set('cdn.mirror.domain', $cdn_domains);
                 break;
             case 'maxcdn':
                 $config->set('cdn.maxcdn.domain', $cdn_domains);
                 break;
             case 'netdna':
                 $config->set('cdn.netdna.domain', $cdn_domains);
                 break;
             case 'cotendo':
                 $config->set('cdn.cotendo.domain', $cdn_domains);
                 break;
             case 'edgecast':
                 $config->set('cdn.edgecast.domain', $cdn_domains);
                 break;
             case 'att':
                 $config->set('cdn.att.domain', $cdn_domains);
                 break;
             case 'akamai':
                 $config->set('cdn.akamai.domain', $cdn_domains);
                 break;
             case 'highwinds':
                 $config->set('cdn.highwinds.host.domains', $cdn_domains);
                 break;
         }
     }
     $old_ext_settings = $this->_config->get_array('extensions.settings', array());
     $new_ext_settings = $old_ext_settings;
     $modified = false;
     $extensions = Extensions_Util::get_extensions($config);
     foreach ($extensions as $extension => $descriptor) {
         $request = Util_Request::get_as_array('extensions.settings.' . $extension . '.');
         if (count($request) > 0) {
             if (!isset($new_ext_settings[$extension])) {
                 $new_ext_settings[$extension] = array();
             }
             foreach ($request as $key => $value) {
                 if (!isset($old_ext_settings[$extension]) || !isset($old_ext_settings[$extension][$key]) || $old_ext_settings[$extension][$key] != $value) {
                     $new_ext_settings[$extension][$key] = $value;
                     $modified = true;
                 }
             }
         }
     }
     if ($modified) {
         $config->set("extensions.settings", $new_ext_settings);
     }
     $data['new_config'] = $config;
     $data = apply_filters('w3tc_save_options', $data);
     $config = $data['new_config'];
     do_action('w3tc_config_ui_save', $config, $this->_config);
     do_action("w3tc_config_ui_save-{$this->_page}", $config, $this->_config);
     Util_Admin::config_save($this->_config, $config);
     if ($this->_page == 'w3tc_cdn') {
         /**
          * Handle Set Cookie Domain
          */
         $set_cookie_domain_old = Util_Request::get_boolean('set_cookie_domain_old');
         $set_cookie_domain_new = Util_Request::get_boolean('set_cookie_domain_new');
         if ($set_cookie_domain_old != $set_cookie_domain_new) {
             if ($set_cookie_domain_new) {
                 if (!$this->enable_cookie_domain()) {
                     Util_Admin::redirect(array_merge($data['response_query_string'], array('w3tc_error' => 'enable_cookie_domain')));
                 }
             } else {
                 if (!$this->disable_cookie_domain()) {
                     Util_Admin::redirect(array_merge($data['response_query_string'], array('w3tc_error' => 'disable_cookie_domain')));
                 }
             }
         }
     }
     return array('query_string' => $data['response_query_string'], 'actions' => $data['response_actions'], 'errors' => $data['response_errors'], 'notes' => $data['response_notes']);
 }
예제 #6
0
 /**
  * Upgrade a module.
  *
  * @param array $args All parameters passed to this function.
  *                      numeric $args['id']                  The module ID.
  *                      boolean $args['interactive_upgrade'] Whether or not to upgrade in interactive mode.
  *
  * @return boolean True on success, false on failure.
  */
 public function upgrade($args)
 {
     // Argument check
     if (!isset($args['id']) || !is_numeric($args['id'])) {
         return LogUtil::registerArgsError();
     }
     // Get module information
     $modinfo = ModUtil::getInfo($args['id']);
     if (empty($modinfo)) {
         return LogUtil::registerError($this->__('Error! No such module ID exists.'));
     }
     switch ($modinfo['state']) {
         case ModUtil::STATE_NOTALLOWED:
             return LogUtil::registerError($this->__f('Error! No permission to upgrade %s.', $modinfo['name']));
             break;
         default:
             if ($modinfo['state'] > 10) {
                 return LogUtil::registerError($this->__f('Error! %s is not compatible with this version of Zikula.', $modinfo['name']));
             }
     }
     $osdir = DataUtil::formatForOS($modinfo['directory']);
     ModUtil::dbInfoLoad($modinfo['name'], $osdir);
     $modpath = $modinfo['type'] == ModUtil::TYPE_SYSTEM ? 'system' : 'modules';
     // load module maintainence functions
     $oomod = ModUtil::isOO($modinfo['name']);
     if ($oomod) {
         ZLoader::addAutoloader($osdir, "{$modpath}/{$osdir}/lib");
     }
     $bootstrap = "{$modpath}/{$osdir}/bootstrap.php";
     if (file_exists($bootstrap)) {
         include_once $bootstrap;
     }
     if ($modinfo['type'] == ModUtil::TYPE_MODULE) {
         if (is_dir("modules/{$osdir}/locale")) {
             ZLanguage::bindModuleDomain($modinfo['name']);
         }
     }
     if (!$oomod && file_exists($file = "{$modpath}/{$osdir}/pninit.php")) {
         if (!(include_once $file)) {
             LogUtil::registerError($this->__f("Error! Could not load a required file: '%s'.", $file));
         }
     }
     if ($oomod) {
         $className = ucwords($modinfo['name']) . '_Installer';
         $reflectionInstaller = new ReflectionClass($className);
         if (!$reflectionInstaller->isSubclassOf('Zikula_AbstractInstaller')) {
             LogUtil::registerError($this->__f("%s must be an instance of Zikula_AbstractInstaller", $className));
         }
         $installer = $reflectionInstaller->newInstanceArgs(array($this->serviceManager));
         $interactiveClass = ucwords($modinfo['name']) . '_Controller_Interactiveinstaller';
         $interactiveController = null;
         if (class_exists($interactiveClass)) {
             $reflectionInteractive = new ReflectionClass($interactiveClass);
             if (!$reflectionInteractive->isSubclassOf('Zikula_Controller_AbstractInteractiveInstaller')) {
                 LogUtil::registerError($this->__f("%s must be an instance of Zikula_Controller_AbstractInteractiveInstaller", $className));
             }
             $interactiveController = $reflectionInteractive->newInstance($this->serviceManager);
         }
     }
     // perform the actual upgrade of the module
     $func = $oomod ? array($installer, 'upgrade') : $modinfo['name'] . '_upgrade';
     $interactive_func = $oomod ? array($interactiveController, 'upgrade') : $modinfo['name'] . '_init_interactiveupgrade';
     // allow bypass of interactive upgrade during a new installation only.
     if (System::isInstalling() && is_callable($interactive_func) && !is_callable($func)) {
         return;
         // return void here
     }
     if (isset($args['interactive_upgrade']) && $args['interactive_upgrade'] == false && is_callable($interactive_func)) {
         if (is_array($interactive_func)) {
             // This must be an OO controller since callable is an array.
             // Because interactive installers extend the Zikula_AbstractController, is_callable will always return true because of the __call()
             // so we must check if the method actually exists by reflection - drak
             if ($reflectionInteractive->hasMethod('upgrade')) {
                 SessionUtil::setVar('interactive_upgrade', true);
                 return call_user_func($interactive_func, array('oldversion' => $modinfo['version']));
             }
         } else {
             // this is enclosed in the else so that if both conditions fail, execution will pass onto the non-interactive execution below.
             SessionUtil::setVar('interactive_upgrade', true);
             return call_user_func($interactive_func, array('oldversion' => $modinfo['version']));
         }
     }
     // non-interactive
     if (is_callable($func)) {
         $result = call_user_func($func, $modinfo['version']);
         if (is_string($result)) {
             if ($result != $modinfo['version']) {
                 // update the last successful updated version
                 $modinfo['version'] = $result;
                 $obj = DBUtil::updateObject($modinfo, 'modules', '', 'id', true);
             }
             return false;
         } elseif ($result != true) {
             return false;
         }
     }
     $modversion['version'] = '0';
     $modversion = Extensions_Util::getVersionMeta($osdir, $modpath);
     $version = $modversion['version'];
     // Update state of module
     $result = $this->setState(array('id' => $args['id'], 'state' => ModUtil::STATE_ACTIVE));
     if ($result) {
         LogUtil::registerStatus($this->__("Done! Module has been upgraded. Its status is now 'Active'."));
     } else {
         return false;
     }
     // Note the changes in the database...
     // Get module database info
     ModUtil::dbInfoLoad('Extensions');
     $obj = array('id' => $args['id'], 'version' => $version);
     DBUtil::updateObject($obj, 'modules');
     // legacy to be removed from 1.4 - remove hooks during upgrade since we cannot rely on
     // module authors to do this - drak
     if ($oomod) {
         $tables = DBUtil::getTables();
         $hooksCol = $tables['hooks_column'];
         $where = "{$hooksCol['smodule']} = '{$modinfo['name']}' OR {$hooksCol['tmodule']} = '{$modinfo['name']}'";
         $hooks = DBUtil::selectObjectArray('hooks', $where);
         if ($hooks) {
             foreach ($hooks as $hook) {
                 DBUtil::deleteObject($hook, 'hooks');
             }
             LogUtil::registerStatus($this->__f("NOTICE! Legacy hook configurations for %s have been removed.", $modinfo['name']));
         }
     }
     // Upgrade succeeded, issue event.
     $event = new Zikula_Event('installer.module.upgraded', null, $modinfo);
     $this->eventManager->notify($event);
     // Success
     return true;
 }
</a> |
	<a href="#advanced"><?php 
_e('Advanced', 'w3-total-cache');
?>
</a>
</p>
<p>
	Fragment caching via <strong><?php 
echo Cache::engine_name($config->get_string(array('fragmentcache', 'engine')));
?>
</strong> is currently <?php 
if ($config->is_extension_active_frontend('fragmentcache')) {
    echo '<span class="w3tc-enabled">enabled</span>';
} else {
    echo '<span class="w3tc-disabled">disabled</span>';
    $ext = Extensions_Util::get_extension($config, 'fragmentcache');
    if (!empty($ext['requirements'])) {
        echo ' (<span class="description">' . $ext['requirements'] . '</span>)';
    }
}
?>
.
<p>

<form action="admin.php?page=w3tc_fragmentcache" method="post">
	<p>
		<?php 
echo Util_Ui::nonce_field('w3tc');
?>
		<input type="submit" name="w3tc_flush_fragmentcache" value="<?php 
_e('Empty the entire cache', 'w3-total-cache');
예제 #8
0
    /**
     * Initialise a module.
     *
     * @param int 'id' module id
     * @return bool true
     */
    public function initialise()
    {
        $csrftoken = FormUtil::getPassedValue('csrftoken');
        $this->checkCsrfToken($csrftoken);

        // Get parameters from whatever input we need
        $id = (int) FormUtil::getPassedValue('id', 0);
        $objectid = (int) FormUtil::getPassedValue('objectid', 0);
        $confirmation = (bool) FormUtil::getPassedValue('confirmation', false);
        $startnum = (int) FormUtil::getPassedValue('startnum');
        $letter = FormUtil::getPassedValue('letter');
        $state = (int)FormUtil::getPassedValue('state');
        if ($objectid) {
            $id = $objectid;
        }

        // assign any dependencies - filtering out non-active module dependents
        // when getting here without a valid id we are in interactive init mode and then
        // the dependencies checks have been done before already
        $fataldependency = false;
        if ($id != 0) {
            $dependencies = ModUtil::apiFunc('Extensions', 'admin', 'getdependencies', array('modid' => $id));

            $modulenotfound = false;
            if (!$confirmation && $dependencies) {
                foreach ($dependencies as $key => $dependency) {
                    $dependencies[$key]['insystem'] = true;
                    $modinfo = ModUtil::getInfoFromName($dependency['modname']);
                    $base = ($modinfo['type'] == ModUtil::TYPE_MODULE) ? 'modules' : 'system';
                    if (is_dir("$base/$dependency[modname]")) {
                        $minok = 0;
                        $maxok = 0;
                        $modversion = Extensions_Util::getVersionMeta($dependency['modname'], $base);

                        if (!empty($dependency['minversion'])) {
                            $minok = version_compare($modversion['version'], $dependency['minversion']);
                        }

                        if (!empty($dependency['maxversion'])) {
                            $maxok = version_compare($dependency['maxversion'], $modversion['version']);
                        }

                        if ($minok == -1 || $maxok == -1) {
                            if ($dependency['status'] == ModUtil::DEPENDENCY_REQUIRED) {
                                $fataldependency = true;
                            } else {
                                unset($dependencies[$key]);
                            }
                        } else {
                            $dependencies[$key] = array_merge($dependencies[$key], $modinfo);
                            // if this module is already installed, don't display it in the list of dependencies.
                            if (isset($dependencies[$key]['state']) && ($dependencies[$key]['state'] > ModUtil::STATE_UNINITIALISED && $dependencies[$key]['state'] < ModUtil::STATE_NOTALLOWED)) {
                                unset($dependencies[$key]);
                            }
                        }
                    } elseif (!empty($modinfo)) {
                        $dependencies[$key] = array_merge($dependencies[$key], $modinfo);
                    } else {
                        $dependencies[$key]['insystem'] = false;
                        $modulenotfound = true;
                        if ($dependency['status'] == ModUtil::DEPENDENCY_REQUIRED) {
                            $fataldependency = true;
                        }
                    }
                }

                $this->view->assign('fataldependency', $fataldependency);

                // we have some dependencies so let's warn the user about these
                if (!empty($dependencies)) {
                    return $this->view->assign('id', $id)
                                      ->assign('dependencies', $dependencies)
                                      ->assign('modulenotfound', $modulenotfound)
                                      ->fetch('extensions_admin_initialise.tpl');
                }
            } else {
                $dependencies = (array)$this->request->request->get('dependencies', array());
            }
        }

        $interactive_init = SessionUtil::getVar('interactive_init');
        $interactive_init = (empty($interactive_init)) ? false : true;
        if ($interactive_init == false) {
            SessionUtil::setVar('modules_id', $id);
            SessionUtil::setVar('modules_startnum', $startnum);
            SessionUtil::setVar('modules_letter', $letter);
            SessionUtil::setVar('modules_state', $state);
            $activate = false;
        } else {
            $id = SessionUtil::getVar('modules_id');
            $startnum = SessionUtil::getVar('modules_startnum');
            $letter = SessionUtil::getVar('modules_letter');
            $state = SessionUtil::getVar('modules_state');
            $activate = (bool) FormUtil::getPassedValue('activate');
        }

        if (empty($id) || !is_numeric($id)) {
            return LogUtil::registerError($this->__('Error! No module ID provided.'), 404, ModUtil::url('Extensions', 'admin', 'view'));
        }

        // initialise and activate any dependencies
        if (isset($dependencies) && is_array($dependencies)) {
            foreach ($dependencies as $dependency) {
                if (!ModUtil::apiFunc('Extensions', 'admin', 'initialise',
                                      array('id' => $dependency))) {
                    $this->redirect(ModUtil::url('Extensions', 'admin', 'view', array(
                            'startnum' => $startnum,
                            'letter' => $letter,
                            'state' => $state)));
                }
                if (!ModUtil::apiFunc('Extensions', 'admin', 'setstate',
                                      array('id' => $dependency,
                                            'state' => ModUtil::STATE_ACTIVE))) {
                    $this->redirect(ModUtil::url('Extensions', 'admin', 'view', array(
                            'startnum' => $startnum,
                            'letter' => $letter,
                            'state' => $state)));
                }
            }
        }

        // Now we've initialised the dependencies initialise the main module
        $res = ModUtil::apiFunc('Extensions', 'admin', 'initialise',
                                array('id' => $id,
                                      'interactive_init' => $interactive_init));

        if (is_bool($res) && $res == true) {
            // Success
            SessionUtil::delVar('modules_id');
            SessionUtil::delVar('modules_startnum');
            SessionUtil::delVar('modules_letter');
            SessionUtil::delVar('modules_state');
            SessionUtil::delVar('interactive_init');
            LogUtil::registerStatus($this->__('Done! Installed module.'));

            if ($activate == true) {
                if (ModUtil::apiFunc('Extensions', 'admin', 'setstate',
                                     array('id' => $id,
                                           'state' => ModUtil::STATE_ACTIVE))) {
                    // Success
                    LogUtil::registerStatus($this->__('Done! Activated module.'));
                }
            }
            $this->redirect(ModUtil::url('Extensions', 'admin', 'view',
                                                 array('startnum' => $startnum,
                                                       'letter' => $letter,
                                                       'state' => $state)));
        } elseif (is_bool($res)) {
            $this->redirect(ModUtil::url('Extensions', 'admin', 'view',
                                                 array('startnum' => $startnum,
                                                       'letter' => $letter,
                                                       'state' => $state)));
        } else {
            return $res;
        }
    }