function w3tc_save_new_relic() { $service = Dispatcher::component('Extension_NewRelic_Service'); $application = Util_Request::get_array('application'); $application['alerts_enabled'] = $application['alerts_enabled'] == 1 ? 'true' : 'false'; $application['rum_enabled'] = $application['rum_enabled'] == 1 ? 'true' : 'false'; $result = $service->update_application_settings($application); Util_Admin::redirect(array('w3tc_note' => 'new_relic_save'), true); }
/** * Test memcached * * @return void */ function w3tc_test_redis() { $servers = Util_Request::get_array('servers'); if (count($servers) <= 0) { $success = false; } else { $success = true; foreach ($servers as $server) { @($cache = Cache::instance('redis', array('servers' => $server, 'persistent' => false))); if (is_null($cache)) { $success = false; } $test_string = sprintf('test_' . md5(time())); $test_value = array('content' => $test_string); $cache->set($test_string, $test_value, 60); $test_value = $cache->get($test_string); if ($test_value['content'] != $test_string) { $success = false; } } } $this->respond_test_result($success); }
/** * Alters the active state of multiple extensions */ public function change_extensions_status() { $extensions = Util_Request::get_array('checked'); $action = Util_Request::get('action'); if ('-1' == $action) { $action = Util_Request::get('action2'); } // dropdown at bottom $message = ''; if ('activate-selected' == $action) { foreach ($extensions as $extension) { if (Extensions_Util::activate_extension($extension, $this->_config)) { $message .= '&activated=' . $extension; } } wp_redirect(Util_Ui::admin_url(sprintf('admin.php?page=w3tc_extensions%s', $message))); } elseif ('deactivate-selected' == $action) { foreach ($extensions as $extension) { if (Extensions_Util::deactivate_extension($extension, $this->_config)) { $message .= '&deactivated=' . $extension; } } wp_redirect(Util_Ui::admin_url(sprintf('admin.php?page=w3tc_extensions%s', $message))); } else { wp_redirect(Util_Ui::admin_url('admin.php?page=w3tc_extensions')); } }
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']); }
/** * Create container action * * @return void */ function w3tc_cdn_create_container() { $engine = Util_Request::get_string('engine'); $config = Util_Request::get_array('config'); $config = array_merge($config, array('debug' => false)); $result = false; $error = __('Incorrect type.', 'w3-total-cache'); $container_id = ''; switch ($engine) { case 's3': case 'cf': case 'cf2': case 'azure': $result = true; break; } if ($result) { $w3_cdn = CdnEngine::instance($engine, $config); @set_time_limit($this->_config->get_integer('timelimit.cdn_container_create')); if ($w3_cdn->create_container($container_id, $error)) { $result = true; $error = __('Created successfully.', 'w3-total-cache'); } else { $result = false; $error = sprintf(__('Error: %s', 'w3-total-cache'), $error); } } $response = array('result' => $result, 'error' => $error, 'container_id' => $container_id); echo json_encode($response); }
public function w3tc_ajax_cdn_highwinds_configure_cnames() { $details = array('cnames' => Util_Request::get_array('cdn_cnames')); $core = Dispatcher::component('Cdn_Core'); $cdn = $core->get_cdn(); try { // try to obtain CNAMEs $cdn->service_cnames_set($details['cnames']); $c = Dispatcher::config(); $c->set('cdn.highwinds.host.domains', $details['cnames']); $c->save(); $postfix = Util_Admin::custom_message_id(array(), array('cdn_cnames_saved' => 'CNAMEs are saved successfully')); echo 'Location admin.php?page=w3tc_cdn&' . $postfix; exit; } catch (\Exception $ex) { $details['error_message'] = $ex->getMessage(); } $this->render_configure_cnames_form($details); exit; }