/**
  * Hide note action
  *
  * @return void
  */
 function action_default_hide_note()
 {
     $note = W3_Request::get_string('note');
     $admin = W3_Request::get_boolean('admin');
     $setting = sprintf('notes.%s', $note);
     if ($admin) {
         $this->_config_admin->set($setting, false);
         $this->_config_admin->save();
     } else {
         $this->_config->set($setting, false);
         $this->_config->save();
     }
     w3_admin_redirect(array(), true);
 }
Esempio n. 2
0
 /**
  * Check
  * @throws FilesystemOperationException
  * @throws FileOperationException
  */
 public function update_ip_ranges()
 {
     w3_require_once(W3TC_INC_DIR . '/functions/http.php');
     $ip4_diff = $ip6_diff = false;
     $response = w3_http_get(W3TC_CLOUDFLARE_IP4_URL);
     $extensions_settings = $this->_config->get_array('extensions.settings', array());
     if (!is_wp_error($response)) {
         $ip4_data = $response['body'];
         $ip4_data = explode("\n", $ip4_data);
         $ip4_data_old = w3tc_get_extension_config('cloudflare', 'ips.ip4', $this->_config, array());
         if ($ip4_diff = array_diff($ip4_data, $ip4_data_old)) {
             $extensions_settings['cloudflare']['ips.ip4'] = $ip4_data;
             $this->_config->set('extensions.settings', $extensions_settings);
         }
     }
     $response = w3_http_get(W3TC_CLOUDFLARE_IP6_URL);
     if (!is_wp_error($response)) {
         $ip6_data = $response['body'];
         $ip6_data = explode("\n", $ip6_data);
         $ip6_data_old = w3tc_get_extension_config('cloudflare', 'ips.ip6', $this->_config, array());
         if ($ip6_diff = array_diff($ip6_data, $ip6_data_old)) {
             $extensions_settings['cloudflare']['ips.ip6'] = $ip6_data;
             $this->_config->set('extensions.settings', $extensions_settings);
         }
     }
     if ($ip4_diff || $ip6_diff) {
         try {
             $this->_config->save();
             $this->_config->refresh_cache();
         } catch (Exception $ex) {
         }
     }
 }
Esempio n. 3
0
 /**
  * Flush browsers cache
  */
 function flush_browser_cache()
 {
     if ($this->_config->get_boolean('browsercache.enabled')) {
         $this->_config->set('browsercache.timestamp', time());
         $this->_config->save();
     }
 }
Esempio n. 4
0
 /**
  * @throws Exception
  */
 function action_aws_sns_subscribe()
 {
     w3_require_once(W3TC_LIB_W3_DIR . '/Request.php');
     $topic_arn = W3_Request::get_string('cluster_messagebus_sns_topic_arn_subscribe');
     /**
      * @var W3_Enterprise_SnsClient $sns_client
      */
     $sns_client = w3_instance('W3_Enterprise_SnsClient');
     $sns_client->subscribe(plugins_url('pub/sns.php', W3TC_FILE), $topic_arn);
     try {
         $this->_config->set('cluster.messagebus.sns.topic_arn', $topic_arn);
         $this->_config->save();
     } catch (Exception $ex) {
         throw new Exception('<strong>Can\'t change configuration</strong>: ' . $ex->getMessage());
     }
     w3_admin_redirect(array('w3tc_note' => 'sns_subscribed'));
 }
 /**
  * Save support us action
  *
  * @return void
  */
 function action_config_save_support_us()
 {
     $support = W3_Request::get_string('support');
     $tweeted = W3_Request::get_boolean('tweeted');
     $this->_config->set('common.support', $support);
     $this->_config->set('common.tweeted', $tweeted);
     $this->_config->save();
     w3_instance('W3_AdminLinks')->link_update($this->_config);
     w3_admin_redirect(array('w3tc_note' => 'config_save'));
 }
Esempio n. 6
0
 function action_cdn_save_activate()
 {
     w3_require_once(W3TC_INC_FUNCTIONS_DIR . '/ui.php');
     try {
         $this->_config->set('cdn.enabled', true);
         $this->_config->save();
     } catch (Exception $ex) {
     }
     w3_redirect(w3_admin_url(sprintf('admin.php?page=w3tc_cdn#configuration')));
 }
Esempio n. 7
0
 /**
  * Handle minify error
  *
  * @return void
  */
 function _handle_error()
 {
     $notification = $this->_config->get_string('minify.error.notification');
     if ($notification) {
         if (stristr($notification, 'admin') !== false) {
             $this->_config->set('notes.minify_error', true);
         }
         if (stristr($notification, 'email') !== false) {
             $last = $this->_config->get_integer('minify.error.notification.last');
             /**
              * Prevent email flood: send email every 5 min
              */
             if (time() - $last > 300) {
                 $this->_config->set('minify.error.notification.last', time());
                 $this->_send_notification();
             }
         }
         $this->_config->save();
     }
 }
 /**
  * Save support us action
  *
  * @return void
  */
 function action_config_save_support_us()
 {
     $support = W3_Request::get_string('support');
     $tweeted = W3_Request::get_boolean('tweeted');
     $signmeup = W3_Request::get_boolean('signmeup');
     $this->_config->set('common.support', $support);
     $this->_config->set('common.tweeted', $tweeted);
     if ($signmeup) {
         if (w3_is_pro($this->_config)) {
             $license = 'pro';
         } elseif (w3_is_enterprise()) {
             $license = 'enterprise';
         } else {
             $license = 'community';
         }
         $email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
         wp_remote_post(W3TC_MAILLINGLIST_SIGNUP_URL, array('body' => array('email' => $email, 'license' => $license)));
     }
     $this->_config->save();
     w3_instance('W3_AdminLinks')->link_update($this->_config);
     w3_admin_redirect(array('w3tc_note' => 'config_save'));
 }
 /**
  * Create NetDNA/MaxCDN pullzone
  */
 function action_cdn_create_netdna_maxcdn_pull_zone()
 {
     w3_require_once(W3TC_LIB_W3_DIR . '/Request.php');
     $type = W3_Request::get_string('type');
     $name = W3_Request::get_string('name');
     $label = W3_Request::get_string('label');
     w3_require_once(W3TC_LIB_NETDNA_DIR . '/NetDNA.php');
     $cdn_engine = $this->_config->get_string('cdn.engine');
     $authorization_key = $this->_config->get_string("cdn.{$cdn_engine}.authorization_key");
     $alias = $consumerkey = $consumersecret = '';
     if ($authorization_key) {
         $keys = explode('+', $authorization_key);
         if (sizeof($keys) == 3) {
             list($alias, $consumerkey, $consumersecret) = $keys;
         }
     }
     $api = new NetDNA($alias, $consumerkey, $consumersecret);
     $url = w3_get_home_url();
     $zone = array();
     $zone['name'] = $name;
     $zone['label'] = $label;
     $zone['url'] = $url;
     try {
         $response = $api->create_pull_zone($zone);
         try {
             $this->_config->set('cdn.enabled', true);
             if (!$this->_config->get_array("cdn.{$cdn_engine}.domain")) {
                 $this->_config->set("cdn.{$cdn_engine}.domain", array("{$name}.{$alias}.netdna-cdn.com"));
             }
             $this->_config->save();
         } catch (Exception $ex) {
         }
         echo json_encode(array('status' => 'success', 'message' => 'Pull Zone created.', 'temporary_url' => "{$name}.{$alias}.netdna-cdn.com", 'data' => $response));
     } catch (Exception $ex) {
         echo json_encode(array('status' => 'error', 'message' => $ex->getMessage()));
     }
 }
/**
 * @param $extension
 * @param W3_Config $config
 * @param bool $dont_save_config
 * @return bool
 */
function w3tc_deactivate_extension($extension, $config, $dont_save_config = false)
{
    $extensions = $config->get_array('extensions.active');
    if (array_key_exists($extension, $extensions)) {
        unset($extensions[$extension]);
        ksort($extensions, SORT_STRING);
        $config->set('extensions.active', $extensions);
        try {
            if (!$dont_save_config) {
                $config->save();
            }
            do_action("w3tc_deactivate_extension-{$extension}");
            return true;
        } catch (Exception $ex) {
        }
    }
    return false;
}
Esempio n. 11
0
 /**
  * Save config action
  *
  * Do some actions on config keys update
  * Used in several places such as:
  *
  * 1. common config save
  * 2. import settings
  * 3. enable/disable preview mode
  *
  * @param W3_Config $old_config
  * @param W3_Config $new_config
  * @param boolean $preview
  * @return void
  */
 function config_save(&$old_config, &$new_config, $preview = null)
 {
     $browsercache_dependencies = array();
     if ($new_config->get_boolean('browsercache.enabled')) {
         $browsercache_dependencies = array_merge($browsercache_dependencies, array('browsercache.cssjs.replace', 'browsercache.html.replace', 'browsercache.other.replace'));
         if ($new_config->get_boolean('browsercache.cssjs.replace')) {
             $browsercache_dependencies = array_merge($browsercache_dependencies, array('browsercache.cssjs.compression', 'browsercache.cssjs.expires', 'browsercache.cssjs.lifetime', 'browsercache.cssjs.cache.control', 'browsercache.cssjs.cache.policy', 'browsercache.cssjs.etag', 'browsercache.cssjs.w3tc'));
         }
         if ($new_config->get_boolean('browsercache.html.replace')) {
             $browsercache_dependencies = array_merge($browsercache_dependencies, array('browsercache.html.compression', 'browsercache.html.expires', 'browsercache.html.lifetime', 'browsercache.html.cache.control', 'browsercache.html.cache.policy', 'browsercache.html.etag', 'browsercache.html.w3tc'));
         }
         if ($new_config->get_boolean('browsercache.other.replace')) {
             $browsercache_dependencies = array_merge($browsercache_dependencies, array('browsercache.other.compression', 'browsercache.other.expires', 'browsercache.other.lifetime', 'browsercache.other.cache.control', 'browsercache.other.cache.policy', 'browsercache.other.etag', 'browsercache.other.w3tc'));
         }
     }
     /**
      * Show need empty page cache notification
      */
     if ($new_config->get_boolean('pgcache.enabled')) {
         $pgcache_dependencies = array_merge($browsercache_dependencies, array('pgcache.debug', 'dbcache.enabled', 'objectcache.enabled', 'minify.enabled', 'cdn.enabled', 'mobile.enabled', 'referrer.enabled'));
         if ($new_config->get_boolean('dbcache.enabled')) {
             $pgcache_dependencies = array_merge($pgcache_dependencies, array('dbcache.debug'));
         }
         if ($new_config->get_boolean('objectcache.enabled')) {
             $pgcache_dependencies = array_merge($pgcache_dependencies, array('objectcache.debug'));
         }
         if ($new_config->get_boolean('minify.enabled')) {
             $pgcache_dependencies = array_merge($pgcache_dependencies, array('minify.auto', 'minify.debug', 'minify.rewrite', 'minify.html.enable', 'minify.html.engine', 'minify.html.inline.css', 'minify.html.inline.js', 'minify.html.strip.crlf', 'minify.html.comments.ignore', 'minify.css.enable', 'minify.css.groups', 'minify.js.enable', 'minify.js.groups', 'minify.htmltidy.options.clean', 'minify.htmltidy.options.hide-comments', 'minify.htmltidy.options.wrap', 'minify.reject.logged', 'minify.reject.ua', 'minify.reject.uri'));
         }
         if ($new_config->get_boolean('cdn.enabled')) {
             $pgcache_dependencies = array_merge($pgcache_dependencies, array('cdn.debug', 'cdn.engine', 'cdn.uploads.enable', 'cdn.includes.enable', 'cdn.includes.files', 'cdn.theme.enable', 'cdn.theme.files', 'cdn.minify.enable', 'cdn.custom.enable', 'cdn.custom.files', 'cdn.mirror.domain', 'cdn.mirror.ssl', 'cdn.netdna.domain', 'cdn.netdna.ssl', 'cdn.cotendo.domain', 'cdn.cotendo.ssl', 'cdn.ftp.domain', 'cdn.ftp.ssl', 'cdn.s3.cname', 'cdn.s3.ssl', 'cdn.cf.cname', 'cdn.cf.ssl', 'cdn.cf2.cname', 'cdn.cf2.ssl', 'cdn.rscf.cname', 'cdn.rscf.ssl', 'cdn.azure.cname', 'cdn.azure.ssl', 'cdn.reject.admins', 'cdn.reject.ua', 'cdn.reject.uri', 'cdn.reject.files'));
         }
         if ($new_config->get_boolean('mobile.enabled')) {
             $pgcache_dependencies = array_merge($pgcache_dependencies, array('mobile.rgroups'));
         }
         if ($new_config->get_boolean('referrer.enabled')) {
             $pgcache_dependencies = array_merge($pgcache_dependencies, array('referrer.rgroups'));
         }
         $old_pgcache_dependencies_values = array();
         $new_pgcache_dependencies_values = array();
         foreach ($pgcache_dependencies as $pgcache_dependency) {
             $old_pgcache_dependencies_values[] = $old_config->get($pgcache_dependency);
             $new_pgcache_dependencies_values[] = $new_config->get($pgcache_dependency);
         }
         if (serialize($old_pgcache_dependencies_values) != serialize($new_pgcache_dependencies_values)) {
             $new_config->set('notes.need_empty_pgcache', true);
         }
     }
     /**
      * Show need empty minify notification
      */
     if ($new_config->get_boolean('minify.enabled') && ($new_config->get_boolean('minify.css.enable') && ($new_config->get_boolean('minify.auto') || count($new_config->get_array('minify.css.groups'))) || $new_config->get_boolean('minify.js.enable') && ($new_config->get_boolean('minify.auto') || count($new_config->get_array('minify.js.groups'))))) {
         $minify_dependencies = array_merge($browsercache_dependencies, array('minify.auto', 'minify.debug', 'minify.options', 'minify.symlinks', 'minify.css.enable', 'minify.js.enable'));
         if ($new_config->get_boolean('minify.css.enable') && ($new_config->get_boolean('minify.auto') || count($new_config->get_array('minify.css.groups')))) {
             $minify_dependencies = array_merge($minify_dependencies, array('minify.css.engine', 'minify.css.combine', 'minify.css.strip.comments', 'minify.css.strip.crlf', 'minify.css.imports', 'minify.css.groups', 'minify.yuicss.path.java', 'minify.yuicss.path.jar', 'minify.yuicss.options.line-break', 'minify.csstidy.options.remove_bslash', 'minify.csstidy.options.compress_colors', 'minify.csstidy.options.compress_font-weight', 'minify.csstidy.options.lowercase_s', 'minify.csstidy.options.optimise_shorthands', 'minify.csstidy.options.remove_last_;', 'minify.csstidy.options.case_properties', 'minify.csstidy.options.sort_properties', 'minify.csstidy.options.sort_selectors', 'minify.csstidy.options.merge_selectors', 'minify.csstidy.options.discard_invalid_properties', 'minify.csstidy.options.css_level', 'minify.csstidy.options.preserve_css', 'minify.csstidy.options.timestamp', 'minify.csstidy.options.template'));
         }
         if ($new_config->get_boolean('minify.js.enable') && ($new_config->get_boolean('minify.auto') || count($new_config->get_array('minify.js.groups')))) {
             $minify_dependencies = array_merge($minify_dependencies, array('minify.js.engine', 'minify.js.combine.header', 'minify.js.combine.body', 'minify.js.combine.footer', 'minify.js.strip.comments', 'minify.js.strip.crlf', 'minify.js.groups', 'minify.yuijs.path.java', 'minify.yuijs.path.jar', 'minify.yuijs.options.line-break', 'minify.yuijs.options.nomunge', 'minify.yuijs.options.preserve-semi', 'minify.yuijs.options.disable-optimizations', 'minify.ccjs.path.java', 'minify.ccjs.path.jar', 'minify.ccjs.options.compilation_level', 'minify.ccjs.options.formatting'));
         }
         $old_minify_dependencies_values = array();
         $new_minify_dependencies_values = array();
         foreach ($minify_dependencies as $minify_dependency) {
             $old_minify_dependencies_values[] = $old_config->get($minify_dependency);
             $new_minify_dependencies_values[] = $new_config->get($minify_dependency);
         }
         if (serialize($old_minify_dependencies_values) != serialize($new_minify_dependencies_values)) {
             $new_config->set('notes.need_empty_minify', true);
         }
     }
     if ($new_config->get_boolean('cdn.enabled') && !w3_is_cdn_mirror($new_config->get_string('cdn.engine'))) {
         /**
          * Show notification when CDN enabled
          */
         if (!$old_config->get_boolean('cdn.enabled')) {
             $new_config->set('notes.cdn_upload', true);
         }
         /**
          * Show notification when Browser Cache settings changes
          */
         $cdn_dependencies = array('browsercache.enabled');
         if ($new_config->get_boolean('cdn.enabled')) {
             $cdn_dependencies = array('browsercache.cssjs.compression', 'browsercache.cssjs.expires', 'browsercache.cssjs.lifetime', 'browsercache.cssjs.cache.control', 'browsercache.cssjs.cache.policy', 'browsercache.cssjs.etag', 'browsercache.cssjs.w3tc', 'browsercache.html.compression', 'browsercache.html.expires', 'browsercache.html.lifetime', 'browsercache.html.cache.control', 'browsercache.html.cache.policy', 'browsercache.html.etag', 'browsercache.html.w3tc', 'browsercache.other.compression', 'browsercache.other.expires', 'browsercache.other.lifetime', 'browsercache.other.cache.control', 'browsercache.other.cache.policy', 'browsercache.other.etag', 'browsercache.other.w3tc');
         }
         $old_cdn_dependencies_values = array();
         $new_cdn_dependencies_values = array();
         foreach ($cdn_dependencies as $cdn_dependency) {
             $old_cdn_dependencies_values[] = $old_config->get($cdn_dependency);
             $new_cdn_dependencies_values[] = $new_config->get($cdn_dependency);
         }
         if (serialize($old_cdn_dependencies_values) != serialize($new_cdn_dependencies_values)) {
             $new_config->set('notes.cdn_reupload', true);
         }
     }
     /**
      * Show need empty object cache notification
      */
     if ($this->_config->get_boolean('objectcache.enabled')) {
         $objectcache_dependencies = array('objectcache.reject.admin', 'objectcache.reject.uri', 'objectcache.groups.global', 'objectcache.groups.nonpersistent');
         $old_objectcache_dependencies_values = array();
         $new_objectcache_dependencies_values = array();
         foreach ($objectcache_dependencies as $objectcache_dependency) {
             $old_objectcache_dependencies_values[] = $old_config->get($objectcache_dependency);
             $new_objectcache_dependencies_values[] = $new_config->get($objectcache_dependency);
         }
         if (serialize($old_objectcache_dependencies_values) != serialize($new_objectcache_dependencies_values)) {
             $new_config->set('notes.need_empty_objectcache', true);
         }
     }
     /**
      * Save config
      */
     if ($new_config->save($preview)) {
         require_once W3TC_LIB_W3_DIR . '/Plugin/PgCache.php';
         require_once W3TC_LIB_W3_DIR . '/Plugin/DbCache.php';
         require_once W3TC_LIB_W3_DIR . '/Plugin/ObjectCache.php';
         require_once W3TC_LIB_W3_DIR . '/Plugin/BrowserCache.php';
         require_once W3TC_LIB_W3_DIR . '/Plugin/Cdn.php';
         $w3_plugin_pgcache =& W3_Plugin_PgCache::instance();
         $w3_plugin_dbcache =& W3_Plugin_DbCache::instance();
         $w3_plugin_objectcache =& W3_Plugin_ObjectCache::instance();
         $w3_plugin_browsercache =& W3_Plugin_BrowserCache::instance();
         $w3_plugin_cdn =& W3_Plugin_Cdn::instance();
         if (W3TC_PHP5) {
             require_once W3TC_LIB_W3_DIR . '/Plugin/Minify.php';
             $w3_plugin_minify =& W3_Plugin_Minify::instance();
         }
         /**
          * Empty caches on engine change or cache enable/disable
          */
         if ($old_config->get_string('pgcache.engine') != $new_config->get_string('pgcache.engine') || $old_config->get_string('pgcache.enabled') != $new_config->get_string('pgcache.enabled')) {
             $this->flush_pgcache();
         }
         if ($old_config->get_string('dbcache.engine') != $new_config->get_string('dbcache.engine') || $old_config->get_string('dbcache.enabled') != $new_config->get_string('dbcache.enabled')) {
             $this->flush_dbcache();
         }
         if ($old_config->get_string('objectcache.engine') != $new_config->get_string('objectcache.engine') || $old_config->get_string('objectcache.enabled') != $new_config->get_string('objectcache.enabled')) {
             $this->flush_objectcache();
         }
         if ($old_config->get_string('minify.engine') != $new_config->get_string('minify.engine') || $old_config->get_string('minify.enabled') != $new_config->get_string('minify.enabled')) {
             $this->flush_minify();
         }
         /**
          * Unschedule events if changed file gc interval
          */
         if ($old_config->get_integer('pgcache.file.gc') != $new_config->get_integer('pgcache.file.gc')) {
             $w3_plugin_pgcache->unschedule();
         }
         if ($old_config->get_integer('pgcache.prime.interval') != $new_config->get_integer('pgcache.prime.interval')) {
             $w3_plugin_pgcache->unschedule_prime();
         }
         if ($old_config->get_integer('dbcache.file.gc') != $new_config->get_integer('dbcache.file.gc')) {
             $w3_plugin_dbcache->unschedule();
         }
         if ($old_config->get_integer('objectcache.file.gc') != $new_config->get_integer('objectcache.file.gc')) {
             $w3_plugin_objectcache->unschedule();
         }
         if ($old_config->get_integer('cdn.autoupload.interval') != $new_config->get_integer('cdn.autoupload.interval')) {
             $w3_plugin_cdn->unschedule_upload();
         }
         if (W3TC_PHP5 && $old_config->get_integer('minify.file.gc') != $new_config->get_integer('minify.file.gc')) {
             $w3_plugin_minify->unschedule();
         }
         /**
          * Create CDN queue table
          */
         if (($old_config->get_boolean('cdn.enabled') != $new_config->get_boolean('cdn.enabled') || $old_config->get_string('cdn.engine') != $new_config->get_string('cdn.engine')) && $new_config->get_boolean('cdn.enabled') && !w3_is_cdn_mirror($new_config->get_string('cdn.engine'))) {
             $w3_plugin_cdn->table_create();
         }
         /**
          * Update CloudFront CNAMEs
          */
         $update_cf_cnames = false;
         if ($new_config->get_boolean('cdn.enabled') && in_array($new_config->get_string('cdn.engine'), array('cf', 'cf2'))) {
             if ($new_config->get_string('cdn.engine') == 'cf') {
                 $old_cnames = $old_config->get_array('cdn.cf.cname');
                 $new_cnames = $new_config->get_array('cdn.cf.cname');
             } else {
                 $old_cnames = $old_config->get_array('cdn.cf2.cname');
                 $new_cnames = $new_config->get_array('cdn.cf2.cname');
             }
             if (count($old_cnames) != count($new_cnames) || count(array_diff($old_cnames, $new_cnames))) {
                 $update_cf_cnames = true;
             }
         }
         /**
          * Refresh config
          */
         $old_config->load();
         /**
          * Schedule events
          */
         $w3_plugin_pgcache->schedule();
         $w3_plugin_pgcache->schedule_prime();
         $w3_plugin_dbcache->schedule();
         $w3_plugin_objectcache->schedule();
         $w3_plugin_cdn->schedule();
         $w3_plugin_cdn->schedule_upload();
         if (W3TC_PHP5) {
             $w3_plugin_minify->schedule();
         }
         /**
          * Update support us option
          */
         $this->link_update();
         /**
          * Write page cache rewrite rules
          */
         if ($new_config->get_boolean('pgcache.enabled') && $new_config->get_string('pgcache.engine') == 'file_generic') {
             if (w3_can_modify_rules(w3_get_pgcache_rules_core_path())) {
                 $w3_plugin_pgcache->write_rules_core();
             }
             if (w3_can_modify_rules(w3_get_pgcache_rules_cache_path())) {
                 $w3_plugin_pgcache->write_rules_cache();
             }
         } else {
             if (w3_can_modify_rules(w3_get_pgcache_rules_core_path())) {
                 $w3_plugin_pgcache->remove_rules_core();
             }
             if (w3_can_modify_rules(w3_get_pgcache_rules_cache_path())) {
                 $w3_plugin_pgcache->remove_rules_cache();
             }
         }
         /**
          * Write browsercache rules
          */
         if ($new_config->get_boolean('browsercache.enabled')) {
             if (w3_can_modify_rules(w3_get_browsercache_rules_cache_path())) {
                 $w3_plugin_browsercache->write_rules_cache();
             }
             if ($new_config->get_boolean('browsercache.no404wp')) {
                 if (w3_can_modify_rules(w3_get_browsercache_rules_no404wp_path())) {
                     $w3_plugin_browsercache->write_rules_no404wp();
                 }
             } else {
                 if (w3_can_modify_rules(w3_get_browsercache_rules_no404wp_path())) {
                     $w3_plugin_browsercache->remove_rules_no404wp();
                 }
             }
         } else {
             if (w3_can_modify_rules(w3_get_browsercache_rules_cache_path())) {
                 $w3_plugin_browsercache->remove_rules_cache();
             }
             if (w3_can_modify_rules(w3_get_browsercache_rules_no404wp_path())) {
                 $w3_plugin_browsercache->remove_rules_no404wp();
             }
         }
         /**
          * Write minify rewrite rules
          */
         if (W3TC_PHP5) {
             if ($new_config->get_boolean('minify.enabled') && $new_config->get_boolean('minify.rewrite')) {
                 if (w3_can_modify_rules(w3_get_minify_rules_core_path())) {
                     $w3_plugin_minify->write_rules_core();
                 }
                 if ($this->_config->get_string('minify.engine') == 'file') {
                     if (w3_can_modify_rules(w3_get_minify_rules_cache_path())) {
                         $w3_plugin_minify->write_rules_cache();
                     }
                 } else {
                     if (w3_can_modify_rules(w3_get_minify_rules_cache_path())) {
                         $w3_plugin_minify->remove_rules_cache();
                     }
                 }
             } else {
                 if (w3_can_modify_rules(w3_get_minify_rules_core_path())) {
                     $w3_plugin_minify->remove_rules_core();
                 }
                 if (w3_can_modify_rules(w3_get_minify_rules_cache_path())) {
                     $w3_plugin_minify->remove_rules_cache();
                 }
             }
         }
         /**
          * Auto upload minify files to CDN
          */
         if ($new_config->get_boolean('minify.enabled') && $new_config->get_boolean('minify.upload') && $new_config->get_boolean('cdn.enabled') && !w3_is_cdn_mirror($new_config->get_string('cdn.engine'))) {
             $this->cdn_upload_minify();
         }
         /**
          * Auto upload browsercache files to CDN
          */
         if ($new_config->get_boolean('cdn.enabled') && $new_config->get_string('cdn.engine') == 'ftp') {
             $this->cdn_delete_browsercache();
             if ($new_config->get_boolean('browsercache.enabled')) {
                 $this->cdn_upload_browsercache();
             }
         }
         /**
          * Update CloudFront CNAMEs
          */
         if ($update_cf_cnames) {
             $error = null;
             $cdn = $w3_plugin_cdn->get_cdn();
             $cdn->update_cnames($error);
         }
         /**
          * Save blognames into file
          */
         if (w3_is_network() && !w3_is_subdomain_install()) {
             w3_save_blognames();
         }
         return true;
     }
     return false;
 }
Esempio n. 12
0
 /**
  * @synopsis [--check] [--default-settings] [--preserve-cdn]
  * @subcommand total-cache
  *
  */
 function w3tc($args, $assoc_args)
 {
     if (!file_exists(WP_CONTENT_DIR . "/plugins/w3-total-cache/")) {
         WP_CLI::warning("W3 Total Cache plugin is not installed into plugins/w3-total-cache/. Skipping.");
         exit;
     }
     if (!is_plugin_active("w3-total-cache/w3-total-cache.php")) {
         WP_CLI::warning("W3 Total Cache plugin is not enabled. Skipping.");
         exit;
     }
     $w3tc_version = get_plugin_data(WP_CONTENT_DIR . "/plugins/w3-total-cache/w3-total-cache.php");
     $w3tc_version = $w3tc_version['Version'];
     $w3tc_master = $w3tc_version >= "0.9.2.6" ? WP_CONTENT_DIR . "/w3tc-config/master.php" : WP_CONTENT_DIR . "/w3-total-cache-config.php";
     if (!file_exists($w3tc_master)) {
         WP_CLI::warning("W3 Total Cache config file can not be found. Skipping.");
         exit;
     }
     if (isset($assoc_args['check'])) {
         $file = fopen($w3tc_master, "r");
         while (!feof($file)) {
             $line = fgets($file);
             if (preg_match('/pgcache\\.enabled\' => true/', $line)) {
                 $pgcache = true;
                 continue;
             }
             if (preg_match('/pgcache\\.engine\' => \'file\'/', $line)) {
                 $pgcache_method = "disk: basic";
                 continue;
             }
             if (preg_match('/pgcache\\.engine\' => \'file_generic\'/', $line)) {
                 $pgcache_method = "disk: enhanced";
                 continue;
             }
             if (preg_match('/pgcache\\.engine\' => \'apc\'/', $line)) {
                 $pgcache_method = "opcode: apc";
                 continue;
             }
             if (preg_match('/minify\\.enabled\' => true/', $line)) {
                 $minify = true;
                 continue;
             }
             if (preg_match('/dbcache\\.enabled\' => true/', $line)) {
                 $dbcache = true;
                 continue;
             }
             if (preg_match('/objectcache\\.enabled\' => true/', $line)) {
                 $objectcache = true;
                 continue;
             }
             if (preg_match('/objectcache\\.engine\' => \'file\'/', $line)) {
                 $objectcache_method = "disk";
                 continue;
             }
             if (preg_match('/objectcache\\.engine\' => \'apc\'/', $line)) {
                 $objectcache_method = "apc";
                 continue;
             }
             if (preg_match('/fragmentcache\\.enabled\' => true/', $line)) {
                 $fragmentcache = true;
                 continue;
             }
             if (preg_match('/fragmentcache\\.engine\' => \'file\'/', $line)) {
                 $fragmentcache_method = "disk";
                 continue;
             }
             if (preg_match('/fragmentcache\\.engine\' => \'apc\'/', $line)) {
                 $fragmentcache_method = "apc";
                 continue;
             }
             if (preg_match('/browsercache\\.enabled\' => true/', $line)) {
                 $browsercache = true;
                 continue;
             }
             if (preg_match('/cdn\\.enabled\' => true/', $line)) {
                 $cdn = true;
                 continue;
             }
         }
         fclose($file);
         echo "W3 Total Cache " . $w3tc_version . " (" . (file_exists("/var/run/apache2.pid") || file_exists("/run/apache2/apache2.pid") ? "apache+nginx" : "nginx+php5-fpm") . ")\n";
         echo "\nPage Cache: " . (isset($pgcache) ? "enabled (" . $pgcache_method . ")" : "-");
         echo "\nMinify: " . (isset($minify) ? "enabled" : "-");
         echo "\nDatabase Cache: " . (isset($dbcache) ? "enabled" : "-");
         echo "\nObject Cache: " . (isset($objectcache) ? "enabled (" . $objectcache_method . ")" : "-");
         echo "\nFragment Cache: " . (isset($fragmentcache) ? "enabled (" . $fragmentcache_method . ")" : "-");
         echo "\nBrowser Cache: " . (isset($browsercache) ? "enabled" : "-");
         echo "\nCDN: " . (isset($cdn) ? "enabled" : "-") . "\n";
     } else {
         if (isset($assoc_args['default-settings'])) {
             $siteurl = preg_replace("/https?:\\/\\/(www.)?/", "", home_url());
             if (strlen($siteurl) == 0 || !is_dir("/var/www/" . $siteurl)) {
                 WP_CLI::error("Unable to find site root. Skipping.");
                 return;
             }
             if (!is_writable("/var/www/" . $siteurl)) {
                 WP_CLI::error("Site root is not writable. Please check the permissions. Skipping.");
                 return;
             }
             $config = file_exists("/var/run/apache2.pid") || file_exists("/run/apache2/apache2.pid") ? "master_apache" : "master_nginx";
             if (file_exists("/tmp/" . $config)) {
                 WP_CLI::launch("rm /tmp/" . $config);
             }
             if (file_exists("/tmp/cdn_settings")) {
                 WP_CLI::launch("rm /tmp/cdn_settings");
             }
             $url = "https://tiagohillebrandt.eti.br/w3tc/" . $w3tc_version . "/" . $config;
             WP_CLI::launch("wget -q " . $url . " -P /tmp/ || echo -n");
             if (!file_exists("/tmp/" . $config)) {
                 WP_CLI::warning("W3TC version not compatible or server not available at this moment. Please import the settings manually.");
                 exit;
             }
             $old_config = null;
             if (isset($assoc_args['preserve-cdn'])) {
                 require_once W3TC_LIB_W3_DIR . "/ConfigData.php";
                 $cdn_url = "https://tiagohillebrandt.eti.br/w3tc/" . $w3tc_version . "/cdn_settings";
                 WP_CLI::launch("wget -q " . $cdn_url . " -P /tmp/ || echo -n");
                 if (!file_exists("/tmp/cdn_settings")) {
                     WP_CLI::warning("Not able to preserve the CDN settings. Skipping.");
                     exit;
                 }
                 $old_config = W3_ConfigData::get_array_from_file($w3tc_master);
             }
             $backup_file = preg_replace("/https?:\\/\\/(www.)?/", "", home_url());
             $backup_file = $backup_file . ".master.php";
             $backup_file = preg_replace("/\\//", "_", $backup_file);
             WP_CLI::launch("mv " . $w3tc_master . " /var/www/" . $siteurl . "/." . $backup_file);
             WP_CLI::line("Current settings backup: /var/www/" . $siteurl . "/." . $backup_file);
             WP_CLI::launch("rm " . WP_CONTENT_DIR . "/advanced-cache.php 2> /dev/null || echo -n");
             WP_CLI::launch("rm " . WP_CONTENT_DIR . "/db.php 2> /dev/null || echo -n");
             WP_CLI::launch("rm " . WP_CONTENT_DIR . "/object-cache.php 2> /dev/null || echo -n");
             WP_CLI::launch("rm -r " . WP_CONTENT_DIR . "/cache/* 2> /dev/null || echo -n");
             WP_CLI::launch("rm -r " . WP_CONTENT_DIR . "/w3tc/* 2> /dev/null || echo -n");
             WP_CLI::launch("mv /tmp/" . $config . " " . $w3tc_master);
             WP_CLI::launch("chown -R \$(stat -c %U " . WP_CONTENT_DIR . "):\$(stat -c %U " . WP_CONTENT_DIR . ") " . $w3tc_master);
             if (!is_null($old_config)) {
                 require_once W3TC_LIB_W3_DIR . "/Config.php";
                 $config = new W3_Config();
                 $cdn = fopen("/tmp/cdn_settings", "r");
                 while (!feof($cdn)) {
                     $property = trim(fgets($cdn));
                     $config->set($property, $old_config[$property]);
                 }
                 fclose($cdn);
                 $config->save();
             }
             WP_CLI::success("W3TC recommended settings have been imported.");
         }
     }
 }
Esempio n. 13
0
 /**
  * Check
  * @throws FilesystemOperationException
  * @throws FileOperationException
  */
 public function update_ip_ranges()
 {
     w3_require_once(W3TC_INC_DIR . '/functions/http.php');
     $ip4_diff = $ip6_diff = false;
     $config_master = new W3_Config(true);
     $response = w3_http_get(W3TC_CLOUDFLARE_IP4_URL);
     if (!is_wp_error($response)) {
         $ip4_data = $response['body'];
         $ip4_data = explode("\n", $ip4_data);
         $ip4_data_old = $this->_config->get_array('cloudflare.ips.ip4');
         if ($ip4_diff = array_diff($ip4_data, $ip4_data_old)) {
             $config_master->set('cloudflare.ips.ip4', $ip4_data);
         }
     }
     $response = w3_http_get(W3TC_CLOUDFLARE_IP6_URL);
     if (!is_wp_error($response)) {
         $ip6_data = $response['body'];
         $ip6_data = explode("\n", $ip6_data);
         $ip6_data_old = $this->_config->get_array('cloudflare.ips.ip6');
         if ($ip6_diff = array_diff($ip6_data, $ip6_data_old)) {
             $config_master->set('cloudflare.ips.ip6', $ip6_data);
         }
     }
     if ($ip4_diff || $ip6_diff) {
         $config_master->save();
     }
 }
 /**
  * Save config, can't decline save process. (difference from action_save)
  *
  * Do some actions on config keys update
  * Used in several places such as:
  *
  * 1. common config save
  * 2. import settings
  *
  * @param W3_Config $new_config
  * @param W3_Config $new_config_admin
  * @return bool
  * @throws Exception
  */
 function config_save($new_config, $new_config_admin)
 {
     $master_config = $new_config->is_master() ? $new_config : new W3_Config(true);
     if ($master_config->get_integer('common.instance_id', 0) == 0) {
         $master_config->set('common.instance_id', mt_rand());
         if (!$new_config->is_master()) {
             $master_config->save();
         }
     }
     $old_config = new W3_Config();
     $browsercache_dependencies = array();
     if ($new_config->get_boolean('browsercache.enabled')) {
         $browsercache_dependencies = array_merge($browsercache_dependencies, array('browsercache.cssjs.replace', 'browsercache.html.replace', 'browsercache.other.replace'));
         if ($new_config->get_boolean('browsercache.cssjs.replace')) {
             $browsercache_dependencies = array_merge($browsercache_dependencies, array('browsercache.cssjs.compression', 'browsercache.cssjs.expires', 'browsercache.cssjs.lifetime', 'browsercache.cssjs.cache.control', 'browsercache.cssjs.cache.policy', 'browsercache.cssjs.etag', 'browsercache.cssjs.w3tc'));
         }
         if ($new_config->get_boolean('browsercache.html.replace')) {
             $browsercache_dependencies = array_merge($browsercache_dependencies, array('browsercache.html.compression', 'browsercache.html.expires', 'browsercache.html.lifetime', 'browsercache.html.cache.control', 'browsercache.html.cache.policy', 'browsercache.html.etag', 'browsercache.html.w3tc'));
         }
         if ($new_config->get_boolean('browsercache.other.replace')) {
             $browsercache_dependencies = array_merge($browsercache_dependencies, array('browsercache.other.compression', 'browsercache.other.expires', 'browsercache.other.lifetime', 'browsercache.other.cache.control', 'browsercache.other.cache.policy', 'browsercache.other.etag', 'browsercache.other.w3tc'));
         }
     }
     /**
      * Show need empty page cache notification
      */
     if ($new_config->get_boolean('pgcache.enabled')) {
         $pgcache_dependencies = array_merge($browsercache_dependencies, array('pgcache.debug', 'dbcache.enabled', 'objectcache.enabled', 'minify.enabled', 'cdn.enabled', 'mobile.enabled', 'referrer.enabled'));
         if ($new_config->get_boolean('dbcache.enabled')) {
             $pgcache_dependencies = array_merge($pgcache_dependencies, array('dbcache.debug'));
         }
         if ($new_config->get_boolean('objectcache.enabled')) {
             $pgcache_dependencies = array_merge($pgcache_dependencies, array('objectcache.debug'));
         }
         if ($new_config->get_boolean('minify.enabled')) {
             $pgcache_dependencies = array_merge($pgcache_dependencies, array('minify.auto', 'minify.debug', 'minify.rewrite', 'minify.html.enable', 'minify.html.engine', 'minify.html.inline.css', 'minify.html.inline.js', 'minify.html.strip.crlf', 'minify.html.comments.ignore', 'minify.css.enable', 'minify.css.engine', 'minify.css.groups', 'minify.js.enable', 'minify.js.engine', 'minify.js.groups', 'minify.htmltidy.options.clean', 'minify.htmltidy.options.hide-comments', 'minify.htmltidy.options.wrap', 'minify.reject.logged', 'minify.reject.ua', 'minify.reject.uri'));
         }
         if ($new_config->get_boolean('cdn.enabled')) {
             $pgcache_dependencies = array_merge($pgcache_dependencies, array('cdn.debug', 'cdn.engine', 'cdn.uploads.enable', 'cdn.includes.enable', 'cdn.includes.files', 'cdn.theme.enable', 'cdn.theme.files', 'cdn.minify.enable', 'cdn.custom.enable', 'cdn.custom.files', 'cdn.ftp.domain', 'cdn.ftp.ssl', 'cdn.s3.cname', 'cdn.s3.ssl', 'cdn.cf.cname', 'cdn.cf.ssl', 'cdn.cf2.cname', 'cdn.cf2.ssl', 'cdn.rscf.cname', 'cdn.rscf.ssl', 'cdn.azure.cname', 'cdn.azure.ssl', 'cdn.mirror.domain', 'cdn.mirror.ssl', 'cdn.netdna.domain', 'cdn.netdna.ssl', 'cdn.cotendo.domain', 'cdn.cotendo.ssl', 'cdn.edgecast.domain', 'cdn.edgecast.ssl', 'cdn.att.domain', 'cdn.att.ssl', 'cdn.reject.logged_roles', 'cdn.reject.roles', 'cdn.reject.ua', 'cdn.reject.uri', 'cdn.reject.files'));
         }
         if ($new_config->get_boolean('mobile.enabled')) {
             $pgcache_dependencies = array_merge($pgcache_dependencies, array('mobile.rgroups'));
         }
         if ($new_config->get_boolean('referrer.enabled')) {
             $pgcache_dependencies = array_merge($pgcache_dependencies, array('referrer.rgroups'));
         }
         if ($new_config->get_boolean('browsercache.enabled') && $new_config->get_string('pgcache.engine') == 'file_generic') {
             $pgcache_dependencies = array_merge($pgcache_dependencies, array('browsercache.html.last_modified', 'browsercache.other.last_modified'));
         }
         $old_pgcache_dependencies_values = array();
         $new_pgcache_dependencies_values = array();
         foreach ($pgcache_dependencies as $pgcache_dependency) {
             $old_pgcache_dependencies_values[] = $old_config->get($pgcache_dependency);
             $new_pgcache_dependencies_values[] = $new_config->get($pgcache_dependency);
         }
         if (serialize($old_pgcache_dependencies_values) != serialize($new_pgcache_dependencies_values)) {
             $new_config->set('notes.need_empty_pgcache', true);
         }
     }
     /**
      * Show need empty minify notification
      */
     if ($new_config->get_boolean('minify.enabled') && ($new_config->get_boolean('minify.css.enable') && ($new_config->get_boolean('minify.auto') || count($new_config->get_array('minify.css.groups'))) || $new_config->get_boolean('minify.js.enable') && ($new_config->get_boolean('minify.auto') || count($new_config->get_array('minify.js.groups'))))) {
         $minify_dependencies = array_merge($browsercache_dependencies, array('minify.auto', 'minify.debug', 'minify.options', 'minify.symlinks', 'minify.css.enable', 'minify.js.enable', 'cdn.enabled'));
         if ($new_config->get_boolean('minify.css.enable') && ($new_config->get_boolean('minify.auto') || count($new_config->get_array('minify.css.groups')))) {
             $minify_dependencies = array_merge($minify_dependencies, array('minify.css.engine', 'minify.css.combine', 'minify.css.strip.comments', 'minify.css.strip.crlf', 'minify.css.imports', 'minify.css.groups', 'minify.yuicss.path.java', 'minify.yuicss.path.jar', 'minify.yuicss.options.line-break', 'minify.csstidy.options.remove_bslash', 'minify.csstidy.options.compress_colors', 'minify.csstidy.options.compress_font-weight', 'minify.csstidy.options.lowercase_s', 'minify.csstidy.options.optimise_shorthands', 'minify.csstidy.options.remove_last_;', 'minify.csstidy.options.case_properties', 'minify.csstidy.options.sort_properties', 'minify.csstidy.options.sort_selectors', 'minify.csstidy.options.merge_selectors', 'minify.csstidy.options.discard_invalid_properties', 'minify.csstidy.options.css_level', 'minify.csstidy.options.preserve_css', 'minify.csstidy.options.timestamp', 'minify.csstidy.options.template'));
         }
         if ($new_config->get_boolean('minify.js.enable') && ($new_config->get_boolean('minify.auto') || count($new_config->get_array('minify.js.groups')))) {
             $minify_dependencies = array_merge($minify_dependencies, array('minify.js.engine', 'minify.js.combine.header', 'minify.js.combine.body', 'minify.js.combine.footer', 'minify.js.strip.comments', 'minify.js.strip.crlf', 'minify.js.groups', 'minify.yuijs.path.java', 'minify.yuijs.path.jar', 'minify.yuijs.options.line-break', 'minify.yuijs.options.nomunge', 'minify.yuijs.options.preserve-semi', 'minify.yuijs.options.disable-optimizations', 'minify.ccjs.path.java', 'minify.ccjs.path.jar', 'minify.ccjs.options.compilation_level', 'minify.ccjs.options.formatting'));
         }
         if ($new_config->get_boolean('cdn.enabled')) {
             $minify_dependencies = array_merge($minify_dependencies, array('cdn.engine'));
         }
         $old_minify_dependencies_values = array();
         $new_minify_dependencies_values = array();
         foreach ($minify_dependencies as $minify_dependency) {
             $old_minify_dependencies_values[] = $old_config->get($minify_dependency);
             $new_minify_dependencies_values[] = $new_config->get($minify_dependency);
         }
         if (serialize($old_minify_dependencies_values) != serialize($new_minify_dependencies_values)) {
             $new_config->set('notes.need_empty_minify', true);
         }
     }
     if ($new_config->get_boolean('cdn.enabled') && !w3_is_cdn_mirror($new_config->get_string('cdn.engine'))) {
         /**
          * Show notification when CDN enabled
          */
         if (!$old_config->get_boolean('cdn.enabled')) {
             $new_config->set('notes.cdn_upload', true);
         }
         /**
          * Show notification when Browser Cache settings changes
          */
         $cdn_dependencies = array('browsercache.enabled');
         if ($new_config->get_boolean('cdn.enabled')) {
             $cdn_dependencies = array('browsercache.cssjs.compression', 'browsercache.cssjs.expires', 'browsercache.cssjs.lifetime', 'browsercache.cssjs.cache.control', 'browsercache.cssjs.cache.policy', 'browsercache.cssjs.etag', 'browsercache.cssjs.w3tc', 'browsercache.html.compression', 'browsercache.html.expires', 'browsercache.html.lifetime', 'browsercache.html.cache.control', 'browsercache.html.cache.policy', 'browsercache.html.etag', 'browsercache.html.w3tc', 'browsercache.other.compression', 'browsercache.other.expires', 'browsercache.other.lifetime', 'browsercache.other.cache.control', 'browsercache.other.cache.policy', 'browsercache.other.etag', 'browsercache.other.w3tc');
         }
         $old_cdn_dependencies_values = array();
         $new_cdn_dependencies_values = array();
         foreach ($cdn_dependencies as $cdn_dependency) {
             $old_cdn_dependencies_values[] = $old_config->get($cdn_dependency);
             $new_cdn_dependencies_values[] = $new_config->get($cdn_dependency);
         }
         if (serialize($old_cdn_dependencies_values) != serialize($new_cdn_dependencies_values)) {
             $new_config->set('notes.cdn_reupload', true);
         }
     }
     /**
      * Show need empty object cache notification
      */
     if ($this->_config->get_boolean('objectcache.enabled')) {
         $objectcache_dependencies = array('objectcache.groups.global', 'objectcache.groups.nonpersistent');
         $old_objectcache_dependencies_values = array();
         $new_objectcache_dependencies_values = array();
         foreach ($objectcache_dependencies as $objectcache_dependency) {
             $old_objectcache_dependencies_values[] = $old_config->get($objectcache_dependency);
             $new_objectcache_dependencies_values[] = $new_config->get($objectcache_dependency);
         }
         if (serialize($old_objectcache_dependencies_values) != serialize($new_objectcache_dependencies_values)) {
             $new_config->set('notes.need_empty_objectcache', true);
         }
     }
     if ($this->_config->get_boolean('newrelic.enabled')) {
         if ($this->_config->get_boolean('pgcache.enabled')) {
             if (w3_is_network() && $this->_config->get_boolean('common.force_master')) {
                 $new_config->set('pgcache.late_init', true);
             }
         }
     }
     /**
      * Save config
      */
     try {
         $new_config_admin->save();
         $new_config->save();
     } catch (Exception $ex) {
         // try to fix environment, it potentially can be fixed silently
         // dont show error here, it will be called again later
         // in admin_notices
         try {
             $environment = w3_instance('W3_AdminEnvironment');
             $environment->fix_in_wpadmin($new_config);
         } catch (Exception $ex) {
         }
         // retry save process and complain now on failure
         try {
             $new_config_admin->save();
             $new_config->save();
         } catch (Exception $ex) {
             throw new Exception('<strong>Can\'t change configuration</strong>: ' . $ex->getMessage());
         }
     }
     $w3_plugin_cdn = w3_instance('W3_Plugin_CdnAdmin');
     /**
      * Empty caches on engine change or cache enable/disable
      */
     if ($old_config->get_string('pgcache.engine') != $new_config->get_string('pgcache.engine') || $old_config->get_string('pgcache.enabled') != $new_config->get_string('pgcache.enabled')) {
         $this->flush_pgcache();
     }
     if ($old_config->get_string('dbcache.engine') != $new_config->get_string('dbcache.engine') || $old_config->get_string('dbcache.enabled') != $new_config->get_string('dbcache.enabled')) {
         $this->flush_dbcache();
     }
     if ($old_config->get_string('objectcache.engine') != $new_config->get_string('objectcache.engine') || $old_config->get_string('objectcache.enabled') != $new_config->get_string('objectcache.enabled')) {
         $this->flush_objectcache();
     }
     if ($old_config->get_string('minify.engine') != $new_config->get_string('minify.engine') || $old_config->get_string('minify.enabled') != $new_config->get_string('minify.enabled')) {
         $this->flush_minify();
     }
     /**
      * Update CloudFront CNAMEs
      */
     $update_cf_cnames = false;
     if ($new_config->get_boolean('cdn.enabled') && in_array($new_config->get_string('cdn.engine'), array('cf', 'cf2'))) {
         if ($new_config->get_string('cdn.engine') == 'cf') {
             $old_cnames = $old_config->get_array('cdn.cf.cname');
             $new_cnames = $new_config->get_array('cdn.cf.cname');
         } else {
             $old_cnames = $old_config->get_array('cdn.cf2.cname');
             $new_cnames = $new_config->get_array('cdn.cf2.cname');
         }
         if (count($old_cnames) != count($new_cnames) || count(array_diff($old_cnames, $new_cnames))) {
             $update_cf_cnames = true;
         }
     }
     /**
      * Refresh config
      */
     $this->_config->load();
     /**
      * React to config changes
      */
     $environment = w3_instance('W3_AdminEnvironment');
     $environment->fix_on_event($new_config, 'config_change', $old_config);
     /**
      * Update support us option
      */
     w3_instance('W3_AdminLinks')->link_update($this->_config);
     /**
      * Auto upload minify files to CDN
      */
     if ($new_config->get_boolean('minify.enabled') && $new_config->get_boolean('minify.upload') && $new_config->get_boolean('cdn.enabled') && !w3_is_cdn_mirror($new_config->get_string('cdn.engine'))) {
         $this->cdn_upload_minify();
     }
     /**
      * Auto upload browsercache files to CDN
      */
     if ($new_config->get_boolean('cdn.enabled') && $new_config->get_string('cdn.engine') == 'ftp') {
         $this->cdn_delete_browsercache();
         $this->cdn_upload_browsercache();
     }
     /**
      * Update CloudFront CNAMEs
      */
     if ($update_cf_cnames) {
         $error = null;
         $w3_plugin_cdn->update_cnames($error);
     }
     return true;
 }