1520 lines
51 KiB
PHP
1520 lines
51 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Plugin Name: Super Page Cache for Cloudflare
|
||
|
* Plugin URI: https://wordpress.org/plugins/wp-cloudflare-page-cache/
|
||
|
* Description: Speed up your website by enabling page caching on a Cloudflare free plans.
|
||
|
* Version: 4.7.7
|
||
|
* Author: Optimole
|
||
|
* Author URI: https://optimole.com/
|
||
|
* License: GPLv2 or later
|
||
|
* Text Domain: wp-cloudflare-page-cache
|
||
|
* Requires at least: 4.9
|
||
|
* Requires PHP: 7.0
|
||
|
* WordPress Available: yes
|
||
|
* Requires License: no
|
||
|
*/
|
||
|
|
||
|
if( !class_exists('SW_CLOUDFLARE_PAGECACHE') ) {
|
||
|
|
||
|
define('SWCFPC_PLUGIN_PATH', plugin_dir_path(__FILE__));
|
||
|
define('SWCFPC_PLUGIN_URL', plugin_dir_url(__FILE__));
|
||
|
define('SWCFPC_BASEFILE', __FILE__ );
|
||
|
define('SWCFPC_PLUGIN_REVIEWS_URL', 'https://wordpress.org/support/plugin/wp-cloudflare-page-cache/reviews/');
|
||
|
define('SWCFPC_PLUGIN_FORUM_URL', 'https://wordpress.org/support/plugin/wp-cloudflare-page-cache/');
|
||
|
define('SWCFPC_AUTH_MODE_API_KEY', 0);
|
||
|
define('SWCFPC_AUTH_MODE_API_TOKEN', 1);
|
||
|
define('SWCFPC_LOGS_STANDARD_VERBOSITY', 1);
|
||
|
define('SWCFPC_LOGS_HIGH_VERBOSITY', 2);
|
||
|
|
||
|
if( !defined('SWCFPC_PRELOADER_MAX_POST_NUMBER') )
|
||
|
define('SWCFPC_PRELOADER_MAX_POST_NUMBER', 50);
|
||
|
|
||
|
if( !defined('SWCFPC_CACHE_BUSTER') )
|
||
|
define('SWCFPC_CACHE_BUSTER', 'swcfpc');
|
||
|
|
||
|
if( !defined('SWCFPC_CURL_TIMEOUT') )
|
||
|
define('SWCFPC_CURL_TIMEOUT', 10);
|
||
|
|
||
|
if( !defined('SWCFPC_PURGE_CACHE_LOCK_SECONDS') )
|
||
|
define('SWCFPC_PURGE_CACHE_LOCK_SECONDS', 10);
|
||
|
|
||
|
if( !defined('SWCFPC_HOME_PAGE_SHOWS_POSTS') )
|
||
|
define('SWCFPC_HOME_PAGE_SHOWS_POSTS', true);
|
||
|
|
||
|
class SW_CLOUDFLARE_PAGECACHE {
|
||
|
|
||
|
private $config = false;
|
||
|
private $objects = array();
|
||
|
private $version = '4.7.7';
|
||
|
|
||
|
// Sorting Tool: https://onlinestringtools.com/sort-strings
|
||
|
// Duplicate Finder: https://www.mynikko.com/tools/tool_duplicateremover.html
|
||
|
// Special Thanks: https://github.com/mpchadwick/tracking-query-params-registry/blob/master/_data/params.csv
|
||
|
private $ignored_query_params = [
|
||
|
'Browser',
|
||
|
'C',
|
||
|
'GCCON',
|
||
|
'MCMP',
|
||
|
'MarketPlace',
|
||
|
'PD',
|
||
|
'Refresh',
|
||
|
'Sens',
|
||
|
'ServiceVersion',
|
||
|
'Source',
|
||
|
'Topic',
|
||
|
'__WB_REVISION__',
|
||
|
'__cf_chl_jschl_tk__',
|
||
|
'__d',
|
||
|
'__hsfp',
|
||
|
'__hssc',
|
||
|
'__hstc',
|
||
|
'__s',
|
||
|
'_branch_match_id',
|
||
|
'_bta_c',
|
||
|
'_bta_tid',
|
||
|
'_com',
|
||
|
'_escaped_fragment_',
|
||
|
'_ga',
|
||
|
'_ga-ft',
|
||
|
'_gl',
|
||
|
'_hsmi',
|
||
|
'_ke',
|
||
|
'_kx',
|
||
|
'_paged',
|
||
|
'_sm_byp',
|
||
|
'_sp',
|
||
|
'_szp',
|
||
|
'_thumbnail_id',
|
||
|
'3x',
|
||
|
'a',
|
||
|
'a_k',
|
||
|
'ac',
|
||
|
'acpage',
|
||
|
'action-box',
|
||
|
'action_object_map',
|
||
|
'action_ref_map',
|
||
|
'action_type_map',
|
||
|
'activecampaign_id',
|
||
|
'ad',
|
||
|
'ad_frame_full',
|
||
|
'ad_frame_root',
|
||
|
'ad_name',
|
||
|
'adclida',
|
||
|
'adid',
|
||
|
'adlt',
|
||
|
'adsafe_ip',
|
||
|
'adset_name',
|
||
|
'advid',
|
||
|
'aff_sub2',
|
||
|
'afftrack',
|
||
|
'afterload',
|
||
|
'ak_action',
|
||
|
'alt_id',
|
||
|
'am',
|
||
|
'amazingmurphybeds',
|
||
|
'amp;',
|
||
|
'amp;amp',
|
||
|
'amp;amp;amp',
|
||
|
'amp;amp;amp;amp',
|
||
|
'amp;utm_campaign',
|
||
|
'amp;utm_medium',
|
||
|
'amp;utm_source',
|
||
|
'amp%3Butm_content',
|
||
|
'ampStoryAutoAnalyticsLinker',
|
||
|
'ampstoryautoanalyticslinke',
|
||
|
'an',
|
||
|
'ap',
|
||
|
'ap_id',
|
||
|
'apif',
|
||
|
'apipage',
|
||
|
'as_occt',
|
||
|
'as_q',
|
||
|
'as_qdr',
|
||
|
'askid',
|
||
|
'atFileReset',
|
||
|
'atfilereset',
|
||
|
'aucid',
|
||
|
'auct',
|
||
|
'audience',
|
||
|
'author',
|
||
|
'awt_a',
|
||
|
'awt_l',
|
||
|
'awt_m',
|
||
|
'b2w',
|
||
|
'back',
|
||
|
'bannerID',
|
||
|
'blackhole',
|
||
|
'blockedAdTracking',
|
||
|
'blog-reader-used',
|
||
|
'blogger',
|
||
|
'body',
|
||
|
'br',
|
||
|
'bsft_aaid',
|
||
|
'bsft_clkid',
|
||
|
'bsft_eid',
|
||
|
'bsft_ek',
|
||
|
'bsft_lx',
|
||
|
'bsft_mid',
|
||
|
'bsft_mime_type',
|
||
|
'bsft_tv',
|
||
|
'bsft_uid',
|
||
|
'bvMethod',
|
||
|
'bvTime',
|
||
|
'bvVersion',
|
||
|
'bvb64',
|
||
|
'bvb64resp',
|
||
|
'bvplugname',
|
||
|
'bvprms',
|
||
|
'bvprmsmac',
|
||
|
'bvreqmerge',
|
||
|
'cacheburst',
|
||
|
'campaign',
|
||
|
'campaign_id',
|
||
|
'campaign_name',
|
||
|
'campid',
|
||
|
'catablog-gallery',
|
||
|
'channel',
|
||
|
'checksum',
|
||
|
'ck_subscriber_id',
|
||
|
'cmplz_region_redirect',
|
||
|
'cmpnid',
|
||
|
'cn-reloaded',
|
||
|
'code',
|
||
|
'comment',
|
||
|
'content_ad_widget',
|
||
|
'cost',
|
||
|
'cr',
|
||
|
'crl8_id',
|
||
|
'crlt.pid',
|
||
|
'crlt_pid',
|
||
|
'crrelr',
|
||
|
'crtvid',
|
||
|
'ct',
|
||
|
'cuid',
|
||
|
'daksldlkdsadas',
|
||
|
'dcc',
|
||
|
'dfp',
|
||
|
'dm_i',
|
||
|
'domain',
|
||
|
'dosubmit',
|
||
|
'dsp_caid',
|
||
|
'dsp_crid',
|
||
|
'dsp_insertion_order_id',
|
||
|
'dsp_pub_id',
|
||
|
'dsp_tracker_token',
|
||
|
'dt',
|
||
|
'dur',
|
||
|
'durs',
|
||
|
'e',
|
||
|
'ee',
|
||
|
'ef_id',
|
||
|
'el',
|
||
|
'emailID',
|
||
|
'env',
|
||
|
'epik',
|
||
|
'erprint',
|
||
|
'et_blog',
|
||
|
'exch',
|
||
|
'externalid',
|
||
|
'fb_action_ids',
|
||
|
'fb_action_types',
|
||
|
'fb_ad',
|
||
|
'fb_source',
|
||
|
'fbclid',
|
||
|
'fbzunique',
|
||
|
'fg-aqp',
|
||
|
'fireglass_rsn',
|
||
|
'firstName',
|
||
|
'fo',
|
||
|
'fp_sid',
|
||
|
'fpa',
|
||
|
'fref',
|
||
|
'fs',
|
||
|
'furl',
|
||
|
'fwp_lunch_restrictions',
|
||
|
'ga_action',
|
||
|
'gclid',
|
||
|
'gclsrc',
|
||
|
'gdffi',
|
||
|
'gdfms',
|
||
|
'gdftrk',
|
||
|
'gf_page',
|
||
|
'gidzl',
|
||
|
'goal',
|
||
|
'gooal',
|
||
|
'gpu',
|
||
|
'gtVersion',
|
||
|
'haibwc',
|
||
|
'hash',
|
||
|
'hc_location',
|
||
|
'hemail',
|
||
|
'hid',
|
||
|
'highlight',
|
||
|
'hl',
|
||
|
'home',
|
||
|
'hsa_acc',
|
||
|
'hsa_ad',
|
||
|
'hsa_cam',
|
||
|
'hsa_grp',
|
||
|
'hsa_kw',
|
||
|
'hsa_mt',
|
||
|
'hsa_net',
|
||
|
'hsa_src',
|
||
|
'hsa_tgt',
|
||
|
'hsa_ver',
|
||
|
'ias_campId',
|
||
|
'ias_chanId',
|
||
|
'ias_dealId',
|
||
|
'ias_dspId',
|
||
|
'ias_impId',
|
||
|
'ias_placementId',
|
||
|
'ias_pubId',
|
||
|
'ical',
|
||
|
'ict',
|
||
|
'ie',
|
||
|
'igshid',
|
||
|
'im',
|
||
|
'ipl',
|
||
|
'jw_start',
|
||
|
'jwsource',
|
||
|
'k',
|
||
|
'key1',
|
||
|
'key2',
|
||
|
'klaviyo',
|
||
|
'ksconf',
|
||
|
'ksref',
|
||
|
'l',
|
||
|
'label',
|
||
|
'lang',
|
||
|
'ldtag_cl',
|
||
|
'level1',
|
||
|
'level2',
|
||
|
'level3',
|
||
|
'level4',
|
||
|
'limit',
|
||
|
'lng',
|
||
|
'load_all_comments',
|
||
|
'lt',
|
||
|
'ltclid',
|
||
|
'ltd',
|
||
|
'lucky',
|
||
|
'm',
|
||
|
'm?sales_kw',
|
||
|
'matomo_campaign',
|
||
|
'matomo_cid',
|
||
|
'matomo_content',
|
||
|
'matomo_group',
|
||
|
'matomo_keyword',
|
||
|
'matomo_medium',
|
||
|
'matomo_placement',
|
||
|
'matomo_source',
|
||
|
'max-results',
|
||
|
'mc_cid',
|
||
|
'mc_eid',
|
||
|
'mdrv',
|
||
|
'mediaserver',
|
||
|
'memset',
|
||
|
'mibextid',
|
||
|
'mkcid',
|
||
|
'mkevt',
|
||
|
'mkrid',
|
||
|
'mkwid',
|
||
|
'mkt_tok',
|
||
|
'ml_subscriber',
|
||
|
'ml_subscriber_hash',
|
||
|
'mobileOn',
|
||
|
'mode',
|
||
|
'moderation-hash',
|
||
|
'modernpatio',
|
||
|
'month',
|
||
|
'msID',
|
||
|
'msclkid',
|
||
|
'msg',
|
||
|
'mtm_campaign',
|
||
|
'mtm_cid',
|
||
|
'mtm_content',
|
||
|
'mtm_group',
|
||
|
'mtm_keyword',
|
||
|
'mtm_medium',
|
||
|
'mtm_placement',
|
||
|
'mtm_source',
|
||
|
'murphybedstoday',
|
||
|
'mwprid',
|
||
|
'n',
|
||
|
'name',
|
||
|
'native_client',
|
||
|
'navua',
|
||
|
'nb',
|
||
|
'nb_klid',
|
||
|
'nowprocketcache',
|
||
|
'o',
|
||
|
'okijoouuqnqq',
|
||
|
'org',
|
||
|
'pa_service_worker',
|
||
|
'partnumber',
|
||
|
'pcmtid',
|
||
|
'pcode',
|
||
|
'pcrid',
|
||
|
'pfstyle',
|
||
|
'phrase',
|
||
|
'pid',
|
||
|
'piwik_campaign',
|
||
|
'piwik_keyword',
|
||
|
'piwik_kwd',
|
||
|
'pk_campaign',
|
||
|
'pk_keyword',
|
||
|
'pk_kwd',
|
||
|
'placement',
|
||
|
'plat',
|
||
|
'platform',
|
||
|
'playsinline',
|
||
|
'position',
|
||
|
'pp',
|
||
|
'pr',
|
||
|
'preview',
|
||
|
'preview_id',
|
||
|
'preview_nonce',
|
||
|
'prid',
|
||
|
'print',
|
||
|
'q',
|
||
|
'q1',
|
||
|
'qsrc',
|
||
|
'r',
|
||
|
'rd',
|
||
|
'rdt_cid',
|
||
|
'redig',
|
||
|
'redir',
|
||
|
'ref',
|
||
|
'reftok',
|
||
|
'relatedposts_hit',
|
||
|
'relatedposts_origin',
|
||
|
'relatedposts_position',
|
||
|
'remodel',
|
||
|
'replytocom',
|
||
|
'rest_route',
|
||
|
'reverse-paginate',
|
||
|
'rid',
|
||
|
'rnd',
|
||
|
'rndnum',
|
||
|
'robots_txt',
|
||
|
'rq',
|
||
|
'rsd',
|
||
|
's_kwcid',
|
||
|
'sa',
|
||
|
'safe',
|
||
|
'said',
|
||
|
'sales_cat',
|
||
|
'sales_kw',
|
||
|
'sb_referer_host',
|
||
|
'scrape',
|
||
|
'script',
|
||
|
'scrlybrkr',
|
||
|
'search',
|
||
|
'sellid',
|
||
|
'sersafe',
|
||
|
'sfn_data',
|
||
|
'sfn_trk',
|
||
|
'sfns',
|
||
|
'sfw',
|
||
|
'sha1',
|
||
|
'share',
|
||
|
'shared',
|
||
|
'showcomment',
|
||
|
'showComment',
|
||
|
'si',
|
||
|
'sid',
|
||
|
'sid1',
|
||
|
'sid2',
|
||
|
'sidewalkShow',
|
||
|
'sig',
|
||
|
'site',
|
||
|
'site_id',
|
||
|
'siteid',
|
||
|
'slicer1',
|
||
|
'slicer2',
|
||
|
'source',
|
||
|
'spref',
|
||
|
'spvb',
|
||
|
'sra',
|
||
|
'src',
|
||
|
'srk',
|
||
|
'srp',
|
||
|
'ssp_iabi',
|
||
|
'ssts',
|
||
|
'stylishmurphybeds',
|
||
|
'subId1 ',
|
||
|
'subId2 ',
|
||
|
'subId3',
|
||
|
'subid',
|
||
|
'swcfpc',
|
||
|
'tail',
|
||
|
'teaser',
|
||
|
'test',
|
||
|
'timezone',
|
||
|
'toWww',
|
||
|
'triplesource',
|
||
|
'trk_contact',
|
||
|
'trk_module',
|
||
|
'trk_msg',
|
||
|
'trk_sid',
|
||
|
'tsig',
|
||
|
'turl',
|
||
|
'u',
|
||
|
'unapproved',
|
||
|
'up_auto_log',
|
||
|
'upage',
|
||
|
'updated-max',
|
||
|
'uptime',
|
||
|
'us_privacy',
|
||
|
'usegapi',
|
||
|
'userConsent',
|
||
|
'usqp',
|
||
|
'utm',
|
||
|
'utm_campa',
|
||
|
'utm_campaign',
|
||
|
'utm_content',
|
||
|
'utm_expid',
|
||
|
'utm_id',
|
||
|
'utm_medium',
|
||
|
'utm_reader',
|
||
|
'utm_referrer',
|
||
|
'utm_source',
|
||
|
'utm_sq',
|
||
|
'utm_ter',
|
||
|
'utm_term',
|
||
|
'v',
|
||
|
'vc',
|
||
|
'vf',
|
||
|
'vgo_ee',
|
||
|
'vp',
|
||
|
'vrw',
|
||
|
'vz',
|
||
|
'wbraid',
|
||
|
'webdriver',
|
||
|
'wing',
|
||
|
'wpdParentID',
|
||
|
'wpmp_switcher',
|
||
|
'wref',
|
||
|
'wswy',
|
||
|
'wtime',
|
||
|
'x',
|
||
|
'zMoatImpID',
|
||
|
'zarsrc',
|
||
|
'zeffdn'
|
||
|
];
|
||
|
|
||
|
function __construct() {
|
||
|
|
||
|
//add_action( 'plugins_loaded', array($this, 'update_plugin') );
|
||
|
//register_activation_hook( __FILE__, array($this, 'update_plugin') );
|
||
|
register_deactivation_hook( __FILE__, array($this, 'deactivate_plugin') );
|
||
|
|
||
|
if( ! $this->init_config() ) {
|
||
|
$this->config = $this->get_default_config();
|
||
|
$this->update_config();
|
||
|
}
|
||
|
|
||
|
if( !file_exists( $this->get_plugin_wp_content_directory() ) )
|
||
|
$this->create_plugin_wp_content_directory();
|
||
|
|
||
|
$this->update_plugin();
|
||
|
$this->include_libs();
|
||
|
$this->actions();
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function load_textdomain() {
|
||
|
|
||
|
load_plugin_textdomain( 'wp-cloudflare-page-cache', false, basename( dirname( __FILE__ ) ) . '/languages/' );
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function include_libs()
|
||
|
{
|
||
|
|
||
|
if( count($this->objects) > 0 )
|
||
|
return;
|
||
|
|
||
|
$this->objects = array();
|
||
|
|
||
|
include_once(ABSPATH . 'wp-includes/pluggable.php');
|
||
|
|
||
|
// Composer autoload.
|
||
|
if ( file_exists( SWCFPC_PLUGIN_PATH . 'vendor/autoload.php' ) ) {
|
||
|
require SWCFPC_PLUGIN_PATH . 'vendor/autoload.php';
|
||
|
}
|
||
|
|
||
|
require_once SWCFPC_PLUGIN_PATH . 'libs/preloader.class.php';
|
||
|
require_once SWCFPC_PLUGIN_PATH . 'libs/cloudflare.class.php';
|
||
|
require_once SWCFPC_PLUGIN_PATH . 'libs/logs.class.php';
|
||
|
require_once SWCFPC_PLUGIN_PATH . 'libs/cache_controller.class.php';
|
||
|
require_once SWCFPC_PLUGIN_PATH . 'libs/backend.class.php';
|
||
|
require_once SWCFPC_PLUGIN_PATH . 'libs/fallback_cache.class.php';
|
||
|
require_once SWCFPC_PLUGIN_PATH . 'libs/varnish.class.php';
|
||
|
require_once SWCFPC_PLUGIN_PATH . 'libs/html_cache.class.php';
|
||
|
|
||
|
$log_file_path = $this->get_plugin_wp_content_directory().'/debug.log';
|
||
|
$log_file_url = $this->get_plugin_wp_content_directory_url().'/debug.log';
|
||
|
|
||
|
$this->objects = apply_filters( 'swcfpc_include_libs_early', $this->objects );
|
||
|
|
||
|
if( $this->get_single_config('log_enabled', 0) > 0 )
|
||
|
$this->objects['logs'] = new SWCFPC_Logs( $log_file_path, $log_file_url, true, $this->get_single_config('log_max_file_size', 2), $this );
|
||
|
else
|
||
|
$this->objects['logs'] = new SWCFPC_Logs( $log_file_path, $log_file_url, false, $this->get_single_config('log_max_file_size', 2), $this );
|
||
|
|
||
|
$this->objects['logs']->set_verbosity( $this->get_single_config('log_verbosity', SWCFPC_LOGS_STANDARD_VERBOSITY) );
|
||
|
|
||
|
$this->objects['cloudflare'] = new SWCFPC_Cloudflare(
|
||
|
$this->get_single_config('cf_auth_mode'),
|
||
|
$this->get_cloudflare_api_key(),
|
||
|
$this->get_cloudflare_api_email(),
|
||
|
$this->get_cloudflare_api_token(),
|
||
|
$this->get_cloudflare_api_zone_id(),
|
||
|
$this->get_cloudflare_worker_mode(),
|
||
|
$this->get_cloudflare_worker_content(),
|
||
|
$this->get_cloudflare_worker_id(),
|
||
|
$this->get_cloudflare_worker_route_id(),
|
||
|
$this
|
||
|
);
|
||
|
|
||
|
$this->objects['fallback_cache'] = new SWCFPC_Fallback_Cache( $this );
|
||
|
$this->objects['html_cache'] = new SWCFPC_Html_Cache( $this );
|
||
|
$this->objects['cache_controller'] = new SWCFPC_Cache_Controller( SWCFPC_CACHE_BUSTER, $this );
|
||
|
$this->objects['varnish'] = new SWCFPC_Varnish( $this );
|
||
|
$this->objects['backend'] = new SWCFPC_Backend( $this );
|
||
|
|
||
|
if( ( !defined( 'WP_CLI' ) || (defined('WP_CLI') && WP_CLI === false) ) && isset( $_SERVER['REQUEST_METHOD'] ) && strcasecmp($_SERVER['REQUEST_METHOD'], 'GET') == 0 && !is_admin() && !$this->is_login_page() && $this->get_single_config('cf_fallback_cache', 0) > 0 && $this->objects['cache_controller']->is_cache_enabled() ) {
|
||
|
$this->objects['fallback_cache']->fallback_cache_retrive_current_page();
|
||
|
}
|
||
|
|
||
|
$this->objects = apply_filters( 'swcfpc_include_libs_lately', $this->objects );
|
||
|
|
||
|
// Inizializzo qui la classe del preloader in quanto questo metodo viene richiamato all'evento plugin_loaded. Dopodiche' posso stanziare l'oggetto anche in chiamate Ajax
|
||
|
new SWCFPC_Preloader_Process( $this );
|
||
|
|
||
|
$this->enable_wp_cli_support();
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function actions() {
|
||
|
add_filter( 'themeisle_sdk_products', array( $this, 'load_sdk' ) );
|
||
|
add_filter( 'plugin_action_links_' . plugin_basename(__FILE__), array($this, 'add_plugin_action_links') );
|
||
|
add_filter( 'plugin_row_meta' , array($this, 'add_plugin_meta_links'), 10, 2 );
|
||
|
|
||
|
// Multilanguage
|
||
|
add_action( 'plugins_loaded', array($this, 'load_textdomain') );
|
||
|
|
||
|
}
|
||
|
|
||
|
function load_sdk( $products ) {
|
||
|
$products[] = SWCFPC_BASEFILE;
|
||
|
return $products;
|
||
|
}
|
||
|
|
||
|
|
||
|
function get_default_config() {
|
||
|
|
||
|
$config = array();
|
||
|
|
||
|
// Cloudflare config
|
||
|
$config['cf_zoneid'] = '';
|
||
|
$config['cf_zoneid_list'] = array();
|
||
|
$config['cf_email'] = '';
|
||
|
$config['cf_apitoken'] = '';
|
||
|
$config['cf_apikey'] = '';
|
||
|
$config['cf_token'] = '';
|
||
|
$config['cf_apitoken_domain'] = $this->get_second_level_domain();
|
||
|
$config['cf_old_bc_ttl'] = '';
|
||
|
$config['cf_page_rule_id'] = '';
|
||
|
$config['cf_bypass_backend_page_rule_id'] = '';
|
||
|
$config['cf_bypass_backend_page_rule'] = 0;
|
||
|
$config['cf_auto_purge'] = 1;
|
||
|
$config['cf_auto_purge_all'] = 0;
|
||
|
$config['cf_auto_purge_on_comments'] = 0;
|
||
|
$config['cf_cache_enabled'] = 0;
|
||
|
$config['cf_maxage'] = 31536000; // 1 year
|
||
|
$config['cf_browser_maxage'] = 60; // 1 minute
|
||
|
$config['cf_post_per_page'] = get_option( 'posts_per_page', 0);
|
||
|
$config['cf_purge_url_secret_key'] = $this->generate_password(20, false, false);
|
||
|
$config['cf_strip_cookies'] = 0;
|
||
|
$config['cf_fallback_cache'] = 0;
|
||
|
$config['cf_fallback_cache_ttl'] = 0;
|
||
|
$config['cf_fallback_cache_auto_purge'] = 1;
|
||
|
$config['cf_fallback_cache_curl'] = 0;
|
||
|
$config['cf_fallback_cache_excluded_urls'] = array();
|
||
|
$config['cf_fallback_cache_excluded_cookies'] = array('^wordpress_logged_in_', '^wp-', '^comment_', '^woocommerce_', '^wordpressuser_', '^wordpresspass_', '^wordpress_sec_');
|
||
|
$config['cf_fallback_cache_save_headers'] = 0;
|
||
|
$config['cf_fallback_cache_prevent_cache_urls_without_trailing_slash'] = 1;
|
||
|
$config['cf_preloader'] = 0;
|
||
|
$config['cf_preloader_start_on_purge'] = 1;
|
||
|
$config['cf_preloader_nav_menus'] = array();
|
||
|
$config['cf_preload_last_urls'] = 1;
|
||
|
$config['cf_preload_excluded_post_types'] = array('attachment', 'jet-menu', 'elementor_library', 'jet-theme-core');
|
||
|
$config['cf_preload_sitemap_urls'] = array();
|
||
|
$config['cf_woker_enabled'] = 0;
|
||
|
$config['cf_woker_id'] = 'swcfpc_worker_'.time();
|
||
|
$config['cf_woker_route_id'] = '';
|
||
|
$config['cf_worker_bypass_cookies'] = array();
|
||
|
$config['cf_purge_only_html'] = 0;
|
||
|
$config['cf_disable_cache_purging_queue'] = 0;
|
||
|
$config['cf_auto_purge_on_upgrader_process_complete'] = 0;
|
||
|
|
||
|
// Pages
|
||
|
$config['cf_excluded_urls'] = array('/*ao_noptirocket*', '/*jetpack=comms*', '/*kinsta-monitor*', '*ao_speedup_cachebuster*', '/*removed_item*', '/my-account*', '/wc-api/*', '/edd-api/*', '/wp-json*');
|
||
|
$config['cf_bypass_front_page'] = 0;
|
||
|
$config['cf_bypass_pages'] = 0;
|
||
|
$config['cf_bypass_home'] = 0;
|
||
|
$config['cf_bypass_archives'] = 0;
|
||
|
$config['cf_bypass_tags'] = 0;
|
||
|
$config['cf_bypass_category'] = 0;
|
||
|
$config['cf_bypass_author_pages'] = 0;
|
||
|
$config['cf_bypass_single_post'] = 0;
|
||
|
$config['cf_bypass_feeds'] = 1;
|
||
|
$config['cf_bypass_search_pages'] = 1;
|
||
|
$config['cf_bypass_404'] = 1;
|
||
|
$config['cf_bypass_logged_in'] = 1;
|
||
|
$config['cf_bypass_amp'] = 0;
|
||
|
$config['cf_bypass_file_robots'] = 1;
|
||
|
$config['cf_bypass_sitemap'] = 1;
|
||
|
$config['cf_bypass_ajax'] = 1;
|
||
|
$config['cf_cache_control_htaccess'] = 0;
|
||
|
$config['cf_browser_caching_htaccess'] = 0;
|
||
|
$config['cf_auth_mode'] = SWCFPC_AUTH_MODE_API_KEY;
|
||
|
//$config['cf_bypass_post'] = 0;
|
||
|
$config['cf_bypass_query_var'] = 0;
|
||
|
$config['cf_bypass_wp_json_rest'] = 0;
|
||
|
|
||
|
// Varnish
|
||
|
$config['cf_varnish_support'] = 0;
|
||
|
$config['cf_varnish_auto_purge'] = 1;
|
||
|
$config['cf_varnish_hostname'] = 'localhost';
|
||
|
$config['cf_varnish_port'] = 6081;
|
||
|
$config['cf_varnish_cw'] = 0;
|
||
|
$config['cf_varnish_purge_method'] = 'PURGE';
|
||
|
$config['cf_varnish_purge_all_method'] = 'PURGE';
|
||
|
|
||
|
// WooCommerce
|
||
|
$config['cf_bypass_woo_shop_page'] = 0;
|
||
|
$config['cf_bypass_woo_pages'] = 0;
|
||
|
$config['cf_bypass_woo_product_tax_page'] = 0;
|
||
|
$config['cf_bypass_woo_product_tag_page'] = 0;
|
||
|
$config['cf_bypass_woo_product_cat_page'] = 0;
|
||
|
$config['cf_bypass_woo_product_page'] = 0;
|
||
|
$config['cf_bypass_woo_cart_page'] = 1;
|
||
|
$config['cf_bypass_woo_checkout_page'] = 1;
|
||
|
$config['cf_bypass_woo_checkout_pay_page'] = 1;
|
||
|
$config['cf_auto_purge_woo_product_page'] = 1;
|
||
|
$config['cf_auto_purge_woo_scheduled_sales'] = 1;
|
||
|
$config['cf_bypass_woo_account_page'] = 1;
|
||
|
|
||
|
// Swift Performance (Lite/Pro)
|
||
|
$config['cf_spl_purge_on_flush_all'] = 1;
|
||
|
$config['cf_spl_purge_on_flush_single_post'] = 1;
|
||
|
|
||
|
// W3TC
|
||
|
$config['cf_w3tc_purge_on_flush_minfy'] = 0;
|
||
|
$config['cf_w3tc_purge_on_flush_posts'] = 0;
|
||
|
$config['cf_w3tc_purge_on_flush_objectcache'] = 0;
|
||
|
$config['cf_w3tc_purge_on_flush_fragmentcache'] = 0;
|
||
|
$config['cf_w3tc_purge_on_flush_dbcache'] = 0;
|
||
|
$config['cf_w3tc_purge_on_flush_all'] = 1;
|
||
|
|
||
|
// WP Rocket
|
||
|
$config['cf_wp_rocket_purge_on_post_flush'] = 1;
|
||
|
$config['cf_wp_rocket_purge_on_domain_flush'] = 1;
|
||
|
$config['cf_wp_rocket_purge_on_cache_dir_flush'] = 1;
|
||
|
$config['cf_wp_rocket_purge_on_clean_files'] = 1;
|
||
|
$config['cf_wp_rocket_purge_on_clean_cache_busting'] = 1;
|
||
|
$config['cf_wp_rocket_purge_on_clean_minify'] = 1;
|
||
|
$config['cf_wp_rocket_purge_on_ccss_generation_complete'] = 1;
|
||
|
$config['cf_wp_rocket_purge_on_rucss_job_complete'] = 1;
|
||
|
|
||
|
// Litespeed Cache
|
||
|
$config['cf_litespeed_purge_on_cache_flush'] = 1;
|
||
|
$config['cf_litespeed_purge_on_ccss_flush'] = 1;
|
||
|
$config['cf_litespeed_purge_on_cssjs_flush'] = 1;
|
||
|
$config['cf_litespeed_purge_on_object_cache_flush'] = 1;
|
||
|
$config['cf_litespeed_purge_on_single_post_flush'] = 1;
|
||
|
|
||
|
// Flying Press
|
||
|
$config['cf_flypress_purge_on_cache_flush'] = 1;
|
||
|
|
||
|
// Hummingbird
|
||
|
$config['cf_hummingbird_purge_on_cache_flush'] = 1;
|
||
|
|
||
|
// WP-Optimize
|
||
|
$config['cf_wp_optimize_purge_on_cache_flush'] = 1;
|
||
|
|
||
|
// Yasr
|
||
|
$config['cf_yasr_purge_on_rating'] = 0;
|
||
|
|
||
|
// WP Asset Clean Up
|
||
|
$config['cf_wpacu_purge_on_cache_flush'] = 1;
|
||
|
|
||
|
// Autoptimize
|
||
|
$config['cf_autoptimize_purge_on_cache_flush'] = 1;
|
||
|
|
||
|
// WP Asset Clean Up
|
||
|
$config['cf_nginx_helper_purge_on_cache_flush'] = 1;
|
||
|
|
||
|
// WP Performance
|
||
|
$config['cf_wp_performance_purge_on_cache_flush'] = 1;
|
||
|
|
||
|
// EDD
|
||
|
$config['cf_bypass_edd_checkout_page'] = 1;
|
||
|
$config['cf_bypass_edd_success_page'] = 0;
|
||
|
$config['cf_bypass_edd_failure_page'] = 0;
|
||
|
$config['cf_bypass_edd_purchase_history_page'] = 1;
|
||
|
$config['cf_bypass_edd_login_redirect_page'] = 1;
|
||
|
$config['cf_auto_purge_edd_payment_add'] = 1;
|
||
|
|
||
|
// WP Engine
|
||
|
$config['cf_wpengine_purge_on_flush'] = 1;
|
||
|
|
||
|
// SpinupWP
|
||
|
$config['cf_spinupwp_purge_on_flush'] = 1;
|
||
|
|
||
|
// Kinsta
|
||
|
$config['cf_kinsta_purge_on_flush'] = 1;
|
||
|
|
||
|
// Siteground
|
||
|
$config['cf_siteground_purge_on_flush'] = 1;
|
||
|
|
||
|
// Logs
|
||
|
$config['log_enabled'] = 1;
|
||
|
$config['log_max_file_size'] = 2; // Megabytes
|
||
|
$config['log_verbosity'] = SWCFPC_LOGS_STANDARD_VERBOSITY;
|
||
|
|
||
|
// Other
|
||
|
$config['cf_remove_purge_option_toolbar'] = 0;
|
||
|
$config['cf_disable_single_metabox'] = 1;
|
||
|
$config['cf_seo_redirect'] = 0;
|
||
|
$config['cf_opcache_purge_on_flush'] = 0;
|
||
|
$config['cf_object_cache_purge_on_flush'] = 0;
|
||
|
$config['cf_purge_roles'] = array();
|
||
|
$config['cf_prefetch_urls_viewport'] = 0;
|
||
|
$config['cf_prefetch_urls_viewport_timestamp'] = time();
|
||
|
$config['cf_prefetch_urls_on_hover'] = 0;
|
||
|
$config['cf_remove_cache_buster'] = 0;
|
||
|
$config['keep_settings_on_deactivation'] = 1;
|
||
|
|
||
|
return $config;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function get_single_config($name, $default=false) {
|
||
|
|
||
|
if( !is_array($this->config) || !isset($this->config[$name]) )
|
||
|
return $default;
|
||
|
|
||
|
if( is_array($this->config[$name]))
|
||
|
return $this->config[$name];
|
||
|
|
||
|
return trim($this->config[$name]);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function set_single_config($name, $value) {
|
||
|
|
||
|
if( !is_array($this->config) )
|
||
|
$this->config = array();
|
||
|
|
||
|
if( is_array($value) )
|
||
|
$this->config[trim($name)] = $value;
|
||
|
else
|
||
|
$this->config[trim($name)] = trim($value);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function update_config() {
|
||
|
|
||
|
update_option( 'swcfpc_config', $this->config );
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function init_config() {
|
||
|
|
||
|
$this->config = get_option( 'swcfpc_config', false );
|
||
|
|
||
|
if( !$this->config )
|
||
|
return false;
|
||
|
|
||
|
// If the option exists, return true
|
||
|
return true;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function set_config( $config ) {
|
||
|
$this->config = $config;
|
||
|
}
|
||
|
|
||
|
|
||
|
function get_config() {
|
||
|
return $this->config;
|
||
|
}
|
||
|
|
||
|
|
||
|
function update_plugin() {
|
||
|
|
||
|
$current_version = get_option( 'swcfpc_version', false );
|
||
|
|
||
|
if( $current_version === false || version_compare( $current_version, $this->version, '!=') ) {
|
||
|
|
||
|
require_once SWCFPC_PLUGIN_PATH . 'libs/installer.class.php';
|
||
|
|
||
|
if( $current_version === false ) {
|
||
|
$installer = new SWCFPC_Installer();
|
||
|
$installer->start();
|
||
|
}
|
||
|
else {
|
||
|
|
||
|
if( version_compare( $current_version, '4.5', '<') ) {
|
||
|
|
||
|
if ( count($this->objects) == 0 )
|
||
|
$this->include_libs();
|
||
|
|
||
|
$this->objects['logs']->add_log('swcfpc::update_plugin', 'Updating to v4.5');
|
||
|
|
||
|
$this->set_single_config('cf_auto_purge_on_upgrader_process_complete', 0);
|
||
|
$this->set_single_config('cf_bypass_wp_json_rest', 0);
|
||
|
$this->set_single_config('cf_bypass_woo_account_page', 1);
|
||
|
$this->set_single_config('keep_settings_on_deactivation', 1);
|
||
|
|
||
|
$cf_excluded_urls = $this->get_single_config('cf_excluded_urls', array());
|
||
|
|
||
|
if( is_array($cf_excluded_urls) ) {
|
||
|
|
||
|
if( !in_array('/my-account*', $cf_excluded_urls) )
|
||
|
$cf_excluded_urls[] = '/my-account*';
|
||
|
|
||
|
if( !in_array('/wc-api/*', $cf_excluded_urls) )
|
||
|
$cf_excluded_urls[] = '/wc-api/*';
|
||
|
|
||
|
if( !in_array('/edd-api/*', $cf_excluded_urls) )
|
||
|
$cf_excluded_urls[] = '/edd-api/*';
|
||
|
|
||
|
if( !in_array('/wp-json*', $cf_excluded_urls) )
|
||
|
$cf_excluded_urls[] = '/wp-json*';
|
||
|
|
||
|
$this->set_single_config('cf_excluded_urls', $cf_excluded_urls);
|
||
|
|
||
|
}
|
||
|
|
||
|
$this->update_config();
|
||
|
|
||
|
// Called to force the creation of nginx.conf inside the plugin's directory inside the wp-content one
|
||
|
$this->create_plugin_wp_content_directory();
|
||
|
|
||
|
add_action('shutdown', function() {
|
||
|
|
||
|
global $sw_cloudflare_pagecache;
|
||
|
|
||
|
$objects = $sw_cloudflare_pagecache->get_objects();
|
||
|
|
||
|
if( $sw_cloudflare_pagecache->get_single_config('cf_woker_enabled', 0) > 0 ) {
|
||
|
|
||
|
$error_msg_cf = '';
|
||
|
|
||
|
$objects['cloudflare']->disable_page_cache($error_msg_cf);
|
||
|
$objects['cloudflare']->enable_page_cache($error_msg_cf);
|
||
|
|
||
|
}
|
||
|
|
||
|
$objects['logs']->add_log('swcfpc::update_plugin', 'Update to v4.5 complete');
|
||
|
|
||
|
}, PHP_INT_MAX);
|
||
|
|
||
|
}
|
||
|
|
||
|
if( version_compare( $current_version, '4.5.6', '<' ) ) {
|
||
|
|
||
|
if ( count($this->objects) == 0 )
|
||
|
$this->include_libs();
|
||
|
|
||
|
$this->objects['logs']->add_log('swcfpc::update_plugin', 'Updating to v4.5.6');
|
||
|
|
||
|
$this->objects['logs']->add_log('swcfpc::update_plugin', 'Initiating the removal of double serialization for swcfpc_config');
|
||
|
|
||
|
// Get the serialized version of the swcfpc_config
|
||
|
$serialized_swcfpc_config = get_option( 'swcfpc_config', false );
|
||
|
|
||
|
if( !$serialized_swcfpc_config ) {
|
||
|
|
||
|
$this->objects['logs']->add_log('swcfpc::update_plugin', 'Serialized swcfpc_config not present');
|
||
|
|
||
|
} else {
|
||
|
|
||
|
// Unserialize the data to be further stored
|
||
|
if( is_string( $serialized_swcfpc_config ) ) {
|
||
|
$unserialized_swcfpc_config = unserialize( $serialized_swcfpc_config );
|
||
|
|
||
|
// Now store the same data again to swcfpc_config,
|
||
|
// But this time we won't serialize the data, instead WP will automatically do it.
|
||
|
update_option( 'swcfpc_config', $unserialized_swcfpc_config );
|
||
|
} else {
|
||
|
$this->objects['logs']->add_log('swcfpc::update_plugin', 'Unfortunately swcfpc_config did not returned a string. So, we can\'t unserialize it.');
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
$this->objects['logs']->add_log('swcfpc::update_plugin', 'Initiating the removal of double serialization for swcfpc_fc_ttl_registry');
|
||
|
|
||
|
// Get the serialized version of the swcfpc_fc_ttl_registry
|
||
|
$serialized_swcfpc_fc_ttl_registry = get_option( 'swcfpc_fc_ttl_registry', false );
|
||
|
|
||
|
if( !$serialized_swcfpc_fc_ttl_registry ) {
|
||
|
|
||
|
$this->objects['logs']->add_log('swcfpc::update_plugin', 'Serialized swcfpc_fc_ttl_registry not present');
|
||
|
|
||
|
} else {
|
||
|
|
||
|
if( is_string( $serialized_swcfpc_fc_ttl_registry ) ) {
|
||
|
// Unserialize the data to be further stored
|
||
|
$unserialized_swcfpc_fc_ttl_registry = unserialize( $serialized_swcfpc_fc_ttl_registry );
|
||
|
|
||
|
// Now store the same data again to swcfpc_fc_ttl_registry,
|
||
|
// But this time we won't serialize the data, instead WP will automatically do it.
|
||
|
update_option( 'swcfpc_fc_ttl_registry', serialize( $unserialized_swcfpc_fc_ttl_registry ) );
|
||
|
} else {
|
||
|
$this->objects['logs']->add_log('swcfpc::update_plugin', 'Unfortunately swcfpc_fc_ttl_registry did not returned a string. So, we can\'t unserialize it.');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
add_action('shutdown', function() {
|
||
|
|
||
|
global $sw_cloudflare_pagecache;
|
||
|
|
||
|
$objects = $sw_cloudflare_pagecache->get_objects();
|
||
|
|
||
|
if( $sw_cloudflare_pagecache->get_single_config('cf_woker_enabled', 0) > 0 ) {
|
||
|
|
||
|
$error_msg_cf = '';
|
||
|
|
||
|
$objects['cloudflare']->disable_page_cache($error_msg_cf);
|
||
|
$objects['cloudflare']->enable_page_cache($error_msg_cf);
|
||
|
|
||
|
}
|
||
|
|
||
|
$objects['logs']->add_log('swcfpc::update_plugin', 'Update to v4.5.6 complete');
|
||
|
|
||
|
}, PHP_INT_MAX);
|
||
|
}
|
||
|
|
||
|
if( version_compare( $current_version, '4.6.1', '<' ) ) {
|
||
|
if ( count($this->objects) == 0 )
|
||
|
$this->include_libs();
|
||
|
|
||
|
$this->objects['logs']->add_log('swcfpc::update_plugin', 'Updating to v4.6.1');
|
||
|
|
||
|
add_action('shutdown', function() {
|
||
|
|
||
|
global $sw_cloudflare_pagecache;
|
||
|
|
||
|
$objects = $sw_cloudflare_pagecache->get_objects();
|
||
|
|
||
|
$error_msg_cf = '';
|
||
|
|
||
|
// Enable Disable the Page Cache to take effect of the changes
|
||
|
$objects['cloudflare']->disable_page_cache($error_msg_cf);
|
||
|
$objects['cloudflare']->enable_page_cache($error_msg_cf);
|
||
|
|
||
|
$objects['logs']->add_log('swcfpc::update_plugin', 'Update to v4.6.1 complete');
|
||
|
|
||
|
}, PHP_INT_MAX);
|
||
|
}
|
||
|
|
||
|
if( version_compare( $current_version, '4.7.3', '<' ) ) {
|
||
|
if ( count($this->objects) == 0 )
|
||
|
$this->include_libs();
|
||
|
|
||
|
$this->objects['logs']->add_log('swcfpc::update_plugin', 'Updating to v4.7.3');
|
||
|
|
||
|
add_action('shutdown', function() {
|
||
|
|
||
|
global $sw_cloudflare_pagecache;
|
||
|
|
||
|
$objects = $sw_cloudflare_pagecache->get_objects();
|
||
|
|
||
|
$error_msg_cf = '';
|
||
|
|
||
|
// Enable Disable the Page Cache to take effect of the changes
|
||
|
$objects['cloudflare']->disable_page_cache($error_msg_cf);
|
||
|
$objects['cloudflare']->enable_page_cache($error_msg_cf);
|
||
|
|
||
|
$objects['logs']->add_log('swcfpc::update_plugin', 'Update to v4.7.3 complete');
|
||
|
|
||
|
}, PHP_INT_MAX);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
update_option('swcfpc_version', $this->version);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function deactivate_plugin() {
|
||
|
|
||
|
if( $this->get_single_config('keep_settings_on_deactivation', 1) > 0 )
|
||
|
$this->objects['cache_controller']->reset_all( true );
|
||
|
else
|
||
|
$this->objects['cache_controller']->reset_all();
|
||
|
|
||
|
$this->delete_plugin_wp_content_directory();
|
||
|
}
|
||
|
|
||
|
|
||
|
function get_objects() {
|
||
|
return $this->objects;
|
||
|
}
|
||
|
|
||
|
|
||
|
function add_plugin_action_links( $links ) {
|
||
|
|
||
|
$mylinks = array(
|
||
|
'<a href="' . admin_url( 'options-general.php?page=wp-cloudflare-super-page-cache-index' ) . '">'.__( 'Settings', 'wp-cloudflare-page-cache' ).'</a>',
|
||
|
);
|
||
|
|
||
|
return array_merge( $links, $mylinks );
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function add_plugin_meta_links($meta_fields, $file) {
|
||
|
|
||
|
if ( plugin_basename(__FILE__) == $file ) {
|
||
|
|
||
|
$meta_fields[] = '<a href="' . esc_url(SWCFPC_PLUGIN_REVIEWS_URL.'?rate=5#new-post') .'" target="_blank" title="' . esc_html__('Rate', 'wp-cloudflare-page-cache') . '">
|
||
|
<i class="ampforwp-rate-stars">'
|
||
|
. '<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="#ffb900" stroke="#ffb900" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-star"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></svg>'
|
||
|
. '<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="#ffb900" stroke="#ffb900" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-star"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></svg>'
|
||
|
. '<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="#ffb900" stroke="#ffb900" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-star"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></svg>'
|
||
|
. '<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="#ffb900" stroke="#ffb900" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-star"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></svg>'
|
||
|
. '<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="#ffb900" stroke="#ffb900" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-star"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></svg>'
|
||
|
. '</i></a>';
|
||
|
|
||
|
}
|
||
|
|
||
|
return $meta_fields;
|
||
|
}
|
||
|
|
||
|
|
||
|
function get_cloudflare_api_zone_id() {
|
||
|
|
||
|
if( defined('SWCFPC_CF_API_ZONE_ID') )
|
||
|
return SWCFPC_CF_API_ZONE_ID;
|
||
|
|
||
|
return $this->get_single_config('cf_zoneid', '');
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function get_cloudflare_api_key() {
|
||
|
|
||
|
if( defined('SWCFPC_CF_API_KEY') )
|
||
|
return SWCFPC_CF_API_KEY;
|
||
|
|
||
|
return $this->get_single_config('cf_apikey', '');
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function get_cloudflare_api_email() {
|
||
|
|
||
|
if( defined('SWCFPC_CF_API_EMAIL') )
|
||
|
return SWCFPC_CF_API_EMAIL;
|
||
|
|
||
|
return $this->get_single_config('cf_email', '');
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function get_cloudflare_api_token() {
|
||
|
|
||
|
if( defined('SWCFPC_CF_API_TOKEN') )
|
||
|
return SWCFPC_CF_API_TOKEN;
|
||
|
|
||
|
return $this->get_single_config('cf_apitoken', '');
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function get_cloudflare_worker_mode() {
|
||
|
|
||
|
if( defined('SWCFPC_CF_WOKER_ENABLED') )
|
||
|
return SWCFPC_CF_WOKER_ENABLED;
|
||
|
|
||
|
return $this->get_single_config('cf_woker_enabled', 0);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function get_cloudflare_worker_id() {
|
||
|
|
||
|
if( defined('SWCFPC_CF_WOKER_ID') )
|
||
|
return SWCFPC_CF_WOKER_ID;
|
||
|
|
||
|
return $this->get_single_config('cf_woker_id', 'swcfpc_worker_'.time());
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function get_cloudflare_worker_route_id() {
|
||
|
|
||
|
if( defined('SWCFPC_CF_WOKER_ROUTE_ID') )
|
||
|
return SWCFPC_CF_WOKER_ROUTE_ID;
|
||
|
|
||
|
return $this->get_single_config('cf_woker_route_id', '');
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function get_cloudflare_worker_content() {
|
||
|
|
||
|
$worker_content = '';
|
||
|
|
||
|
if( defined('SWCFPC_CF_WOKER_FULL_PATH') && file_exists( SWCFPC_CF_WOKER_FULL_PATH ) )
|
||
|
$worker_content = file_get_contents( SWCFPC_CF_WOKER_FULL_PATH );
|
||
|
else if ( file_exists( SWCFPC_PLUGIN_PATH . 'assets/js/worker_template.js' ) )
|
||
|
$worker_content = file_get_contents( SWCFPC_PLUGIN_PATH . 'assets/js/worker_template.js' );
|
||
|
|
||
|
return $worker_content;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function get_plugin_wp_content_directory() {
|
||
|
|
||
|
$parts = parse_url( home_url() );
|
||
|
|
||
|
return WP_CONTENT_DIR . "/wp-cloudflare-super-page-cache/{$parts['host']}";
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function get_plugin_wp_content_directory_url() {
|
||
|
|
||
|
$parts = parse_url( home_url() );
|
||
|
|
||
|
return content_url("wp-cloudflare-super-page-cache/{$parts['host']}");
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function get_plugin_wp_content_directory_uri() {
|
||
|
|
||
|
$parts = parse_url( home_url() );
|
||
|
|
||
|
return str_replace( array("https://{$parts['host']}", "http://{$parts['host']}"), '', content_url("wp-cloudflare-super-page-cache/{$parts['host']}") );
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function create_plugin_wp_content_directory() {
|
||
|
|
||
|
$parts = parse_url( home_url() );
|
||
|
$path = WP_CONTENT_DIR . '/wp-cloudflare-super-page-cache/';
|
||
|
|
||
|
if( ! file_exists( $path ) && wp_mkdir_p($path, 0755) ) {
|
||
|
file_put_contents("{$path}index.php", '<?php // Silence is golden');
|
||
|
}
|
||
|
|
||
|
$path .= $parts['host'];
|
||
|
|
||
|
if( ! file_exists( $path ) && wp_mkdir_p( $path, 0755 ) ) {
|
||
|
file_put_contents("{$path}/index.php", '<?php // Silence is golden');
|
||
|
}
|
||
|
|
||
|
$nginx_conf = "{$path}/nginx.conf";
|
||
|
|
||
|
if( ! file_exists( $nginx_conf ) ) {
|
||
|
file_put_contents($nginx_conf, '');
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function delete_plugin_wp_content_directory() {
|
||
|
|
||
|
$parts = parse_url( home_url() );
|
||
|
$path = WP_CONTENT_DIR . '/wp-cloudflare-super-page-cache/';
|
||
|
$path .= $parts['host'];
|
||
|
|
||
|
if( file_exists( $path ) )
|
||
|
$this->delete_directory_recursive( $path );
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function delete_directory_recursive($dir) {
|
||
|
|
||
|
if( !class_exists('RecursiveDirectoryIterator') || !class_exists('RecursiveIteratorIterator') )
|
||
|
return false;
|
||
|
|
||
|
$it = new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS);
|
||
|
$files = new RecursiveIteratorIterator($it,RecursiveIteratorIterator::CHILD_FIRST);
|
||
|
|
||
|
foreach($files as $file) {
|
||
|
|
||
|
if ($file->isDir())
|
||
|
rmdir($file->getRealPath());
|
||
|
else
|
||
|
unlink($file->getRealPath());
|
||
|
|
||
|
}
|
||
|
|
||
|
rmdir($dir);
|
||
|
|
||
|
return true;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function generate_password( $length = 12, $special_chars = true, $extra_special_chars = false ) {
|
||
|
|
||
|
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
|
||
|
$password = '';
|
||
|
|
||
|
if ( $special_chars ) {
|
||
|
$chars .= '!@#$%^&*()';
|
||
|
}
|
||
|
if ( $extra_special_chars ) {
|
||
|
$chars .= '-_ []{}<>~`+=,.;:/?|';
|
||
|
}
|
||
|
|
||
|
for ( $i = 0; $i < $length; $i++ ) {
|
||
|
$password .= substr( $chars, rand( 0, strlen( $chars ) - 1 ), 1 );
|
||
|
}
|
||
|
|
||
|
return $password;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function is_login_page() {
|
||
|
|
||
|
return in_array($GLOBALS['pagenow'], array('wp-login.php', 'wp-register.php'));
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function get_second_level_domain() {
|
||
|
|
||
|
$site_hostname = parse_url( home_url(), PHP_URL_HOST );
|
||
|
|
||
|
if( is_null( $site_hostname ) ) {
|
||
|
return '';
|
||
|
}
|
||
|
|
||
|
// get the domain name from the hostname
|
||
|
$site_domain = preg_replace('/^www\./', '', $site_hostname);
|
||
|
|
||
|
return $site_domain;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function enable_wp_cli_support() {
|
||
|
|
||
|
if ( defined( 'WP_CLI' ) && WP_CLI && !class_exists( 'SWCFPC_WP_CLI' ) && class_exists( 'WP_CLI_Command' ) ) {
|
||
|
|
||
|
require_once SWCFPC_PLUGIN_PATH . 'libs/wpcli.class.php';
|
||
|
|
||
|
$wpcli = new SWCFPC_WP_CLI( $this );
|
||
|
|
||
|
WP_CLI::add_command('cfcache', $wpcli);
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function can_current_user_purge_cache() {
|
||
|
|
||
|
if( !is_user_logged_in() )
|
||
|
return false;
|
||
|
|
||
|
if( current_user_can('manage_options') )
|
||
|
return true;
|
||
|
|
||
|
$allowed_roles = $this->get_single_config('cf_purge_roles', array());
|
||
|
|
||
|
if( count($allowed_roles) > 0 ) {
|
||
|
|
||
|
$user = wp_get_current_user();
|
||
|
|
||
|
foreach($allowed_roles as $role_name) {
|
||
|
|
||
|
if ( in_array($role_name, (array)$user->roles) )
|
||
|
return true;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function get_wordpress_roles() {
|
||
|
|
||
|
global $wp_roles;
|
||
|
$wordpress_roles = array();
|
||
|
|
||
|
foreach( $wp_roles->roles as $role => $role_data )
|
||
|
$wordpress_roles[] = $role;
|
||
|
|
||
|
return $wordpress_roles;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function does_current_url_have_trailing_slash() {
|
||
|
|
||
|
if( !preg_match('/\/$/', $_SERVER['REQUEST_URI']) )
|
||
|
return false;
|
||
|
|
||
|
return true;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function is_api_request() {
|
||
|
|
||
|
// Wordpress standard API
|
||
|
if( (defined('REST_REQUEST') && REST_REQUEST) || strcasecmp( substr($_SERVER['REQUEST_URI'], 0, 8), '/wp-json' ) == 0 )
|
||
|
return true;
|
||
|
|
||
|
// WooCommerce standard API
|
||
|
if( strcasecmp( substr($_SERVER['REQUEST_URI'], 0, 8), '/wc-api/' ) == 0 )
|
||
|
return true;
|
||
|
|
||
|
// WooCommerce standard API
|
||
|
if( strcasecmp( substr($_SERVER['REQUEST_URI'], 0, 9), '/edd-api/' ) == 0 )
|
||
|
return true;
|
||
|
|
||
|
return false;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function wildcard_match($pattern, $subject) {
|
||
|
|
||
|
$pattern = '#^'.preg_quote($pattern).'$#i'; // Case insensitive
|
||
|
$pattern = str_replace('\*', '.*', $pattern);
|
||
|
//$pattern = str_replace('\.', '.', $pattern);
|
||
|
|
||
|
if(!preg_match($pattern, $subject, $regs))
|
||
|
return false;
|
||
|
|
||
|
return true;
|
||
|
|
||
|
}
|
||
|
|
||
|
// Pass parse_url() array and get the URL back as string
|
||
|
function get_unparsed_url( $parsed_url ) {
|
||
|
// PHP_URL_SCHEME
|
||
|
$scheme = isset($parsed_url['scheme']) ? $parsed_url['scheme'] . '://' : '';
|
||
|
$host = isset($parsed_url['host']) ? $parsed_url['host'] : '';
|
||
|
$port = isset($parsed_url['port']) ? ':' . $parsed_url['port'] : '';
|
||
|
$user = isset($parsed_url['user']) ? $parsed_url['user'] : '';
|
||
|
$pass = isset($parsed_url['pass']) ? ':' . $parsed_url['pass'] : '';
|
||
|
$pass = ($user || $pass) ? "$pass@" : '';
|
||
|
$path = isset($parsed_url['path']) ? $parsed_url['path'] : '';
|
||
|
$query = isset($parsed_url['query']) ? '?' . $parsed_url['query'] : '';
|
||
|
$fragment = isset($parsed_url['fragment']) ? '#' . $parsed_url['fragment'] : '';
|
||
|
return "{$scheme}{$user}{$pass}{$host}{$port}{$path}{$query}{$fragment}";
|
||
|
}
|
||
|
|
||
|
// Return the ignored query params array
|
||
|
function get_ignored_query_params() {
|
||
|
return $this->ignored_query_params;
|
||
|
}
|
||
|
|
||
|
function get_current_lang_code() {
|
||
|
|
||
|
$current_language_code = false;
|
||
|
|
||
|
if( has_filter('wpml_current_language') )
|
||
|
$current_language_code = apply_filters( 'wpml_current_language', null );
|
||
|
|
||
|
return $current_language_code;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function get_permalink($post_id) {
|
||
|
|
||
|
$url = get_the_permalink( $post_id );
|
||
|
|
||
|
if( has_filter('wpml_permalink') )
|
||
|
$url = apply_filters( 'wpml_permalink', $url , $this->get_current_lang_code() );
|
||
|
|
||
|
return $url;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function get_home_url( $blog_id = null, $path = '', $scheme = null ) {
|
||
|
|
||
|
global $pagenow;
|
||
|
|
||
|
if ( empty( $blog_id ) || ! is_multisite() ) {
|
||
|
$url = get_option( 'home' );
|
||
|
} else {
|
||
|
switch_to_blog( $blog_id );
|
||
|
$url = get_option( 'home' );
|
||
|
restore_current_blog();
|
||
|
}
|
||
|
|
||
|
if ( ! in_array( $scheme, array( 'http', 'https', 'relative' ), true ) ) {
|
||
|
|
||
|
if ( is_ssl() && ! is_admin() && 'wp-login.php' !== $pagenow )
|
||
|
$scheme = 'https';
|
||
|
else
|
||
|
$scheme = parse_url( $url, PHP_URL_SCHEME );
|
||
|
|
||
|
}
|
||
|
|
||
|
$url = set_url_scheme( $url, $scheme );
|
||
|
|
||
|
if ( $path && is_string( $path ) )
|
||
|
$url .= '/' . ltrim( $path, '/' );
|
||
|
|
||
|
return $url;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function home_url( $path = '', $scheme = null ) {
|
||
|
return $this->get_home_url( null, $path, $scheme );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
// Activate this plugin as last plugin
|
||
|
add_action('plugins_loaded', function () {
|
||
|
|
||
|
if( !isset( $GLOBALS['sw_cloudflare_pagecache'] ) || empty( $GLOBALS['sw_cloudflare_pagecache'] ) )
|
||
|
$GLOBALS['sw_cloudflare_pagecache'] = new SW_CLOUDFLARE_PAGECACHE();
|
||
|
|
||
|
}, PHP_INT_MAX);
|
||
|
|
||
|
}
|
||
|
|
||
|
//$sw_cloudflare_pagecache = new SW_CLOUDFLARE_PAGECACHE();
|