Edit File by line
/home/zeestwma/ceyloniy.../wp-conte.../plugins/litespee.../src
File: router.cls.php
<?php
[0] Fix | Delete
// phpcs:ignoreFile
[1] Fix | Delete
[2] Fix | Delete
/**
[3] Fix | Delete
* The core plugin router class.
[4] Fix | Delete
*
[5] Fix | Delete
* This generate the valid action.
[6] Fix | Delete
*
[7] Fix | Delete
* @since 1.1.0
[8] Fix | Delete
*/
[9] Fix | Delete
[10] Fix | Delete
namespace LiteSpeed;
[11] Fix | Delete
[12] Fix | Delete
defined('WPINC') || exit();
[13] Fix | Delete
[14] Fix | Delete
class Router extends Base {
[15] Fix | Delete
[16] Fix | Delete
const LOG_TAG = '[Router]';
[17] Fix | Delete
[18] Fix | Delete
const NONCE = 'LSCWP_NONCE';
[19] Fix | Delete
const ACTION = 'LSCWP_CTRL';
[20] Fix | Delete
[21] Fix | Delete
const ACTION_SAVE_SETTINGS_NETWORK = 'save-settings-network';
[22] Fix | Delete
const ACTION_DB_OPTM = 'db_optm';
[23] Fix | Delete
const ACTION_PLACEHOLDER = 'placeholder';
[24] Fix | Delete
const ACTION_AVATAR = 'avatar';
[25] Fix | Delete
const ACTION_SAVE_SETTINGS = 'save-settings';
[26] Fix | Delete
const ACTION_CLOUD = 'cloud';
[27] Fix | Delete
const ACTION_IMG_OPTM = 'img_optm';
[28] Fix | Delete
const ACTION_HEALTH = 'health';
[29] Fix | Delete
const ACTION_CRAWLER = 'crawler';
[30] Fix | Delete
const ACTION_PURGE = 'purge';
[31] Fix | Delete
const ACTION_CONF = 'conf';
[32] Fix | Delete
const ACTION_ACTIVATION = 'activation';
[33] Fix | Delete
const ACTION_CSS = 'css';
[34] Fix | Delete
const ACTION_UCSS = 'ucss';
[35] Fix | Delete
const ACTION_VPI = 'vpi';
[36] Fix | Delete
const ACTION_PRESET = 'preset';
[37] Fix | Delete
const ACTION_IMPORT = 'import';
[38] Fix | Delete
const ACTION_REPORT = 'report';
[39] Fix | Delete
const ACTION_DEBUG2 = 'debug2';
[40] Fix | Delete
const ACTION_CDN_CLOUDFLARE = 'CDN\Cloudflare';
[41] Fix | Delete
const ACTION_ADMIN_DISPLAY = 'admin_display';
[42] Fix | Delete
const ACTION_GUEST = 'guest';
[43] Fix | Delete
const ACTION_TMP_DISABLE = 'tmp_disable';
[44] Fix | Delete
[45] Fix | Delete
// List all handlers here
[46] Fix | Delete
private static $_HANDLERS = array(
[47] Fix | Delete
self::ACTION_ADMIN_DISPLAY,
[48] Fix | Delete
self::ACTION_ACTIVATION,
[49] Fix | Delete
self::ACTION_AVATAR,
[50] Fix | Delete
self::ACTION_CDN_CLOUDFLARE,
[51] Fix | Delete
self::ACTION_CLOUD,
[52] Fix | Delete
self::ACTION_CONF,
[53] Fix | Delete
self::ACTION_CRAWLER,
[54] Fix | Delete
self::ACTION_CSS,
[55] Fix | Delete
self::ACTION_UCSS,
[56] Fix | Delete
self::ACTION_VPI,
[57] Fix | Delete
self::ACTION_DB_OPTM,
[58] Fix | Delete
self::ACTION_DEBUG2,
[59] Fix | Delete
self::ACTION_GUEST,
[60] Fix | Delete
self::ACTION_HEALTH,
[61] Fix | Delete
self::ACTION_IMG_OPTM,
[62] Fix | Delete
self::ACTION_PRESET,
[63] Fix | Delete
self::ACTION_IMPORT,
[64] Fix | Delete
self::ACTION_PLACEHOLDER,
[65] Fix | Delete
self::ACTION_PURGE,
[66] Fix | Delete
self::ACTION_REPORT,
[67] Fix | Delete
);
[68] Fix | Delete
[69] Fix | Delete
const TYPE = 'litespeed_type';
[70] Fix | Delete
[71] Fix | Delete
const ITEM_HASH = 'hash';
[72] Fix | Delete
const ITEM_FLASH_HASH = 'flash_hash';
[73] Fix | Delete
[74] Fix | Delete
private static $_esi_enabled;
[75] Fix | Delete
private static $_is_ajax;
[76] Fix | Delete
private static $_is_logged_in;
[77] Fix | Delete
private static $_ip;
[78] Fix | Delete
private static $_action;
[79] Fix | Delete
private static $_is_admin_ip;
[80] Fix | Delete
private static $_frontend_path;
[81] Fix | Delete
[82] Fix | Delete
/**
[83] Fix | Delete
* Redirect to self to continue operation
[84] Fix | Delete
*
[85] Fix | Delete
* Note: must return when use this func. CLI/Cron call won't die in this func.
[86] Fix | Delete
*
[87] Fix | Delete
* @since 3.0
[88] Fix | Delete
* @access public
[89] Fix | Delete
*/
[90] Fix | Delete
public static function self_redirect( $action, $type ) {
[91] Fix | Delete
if (defined('LITESPEED_CLI') || wp_doing_cron()) {
[92] Fix | Delete
Admin_Display::success('To be continued'); // Show for CLI
[93] Fix | Delete
return;
[94] Fix | Delete
}
[95] Fix | Delete
[96] Fix | Delete
// Add i to avoid browser too many redirected warning
[97] Fix | Delete
$i = !empty($_GET['litespeed_i']) ? $_GET['litespeed_i'] : 0;
[98] Fix | Delete
++$i;
[99] Fix | Delete
[100] Fix | Delete
$link = Utility::build_url($action, $type, false, null, array( 'litespeed_i' => $i ));
[101] Fix | Delete
[102] Fix | Delete
$url = html_entity_decode($link);
[103] Fix | Delete
exit("<meta http-equiv='refresh' content='0;url=$url'>");
[104] Fix | Delete
}
[105] Fix | Delete
[106] Fix | Delete
/**
[107] Fix | Delete
* Check if can run optimize
[108] Fix | Delete
*
[109] Fix | Delete
* @since 1.3
[110] Fix | Delete
* @since 2.3.1 Relocated from cdn.cls
[111] Fix | Delete
* @access public
[112] Fix | Delete
*/
[113] Fix | Delete
public function can_optm() {
[114] Fix | Delete
$can = true;
[115] Fix | Delete
[116] Fix | Delete
if (is_user_logged_in() && $this->conf(self::O_OPTM_GUEST_ONLY)) {
[117] Fix | Delete
$can = false;
[118] Fix | Delete
} elseif (is_admin()) {
[119] Fix | Delete
$can = false;
[120] Fix | Delete
} elseif (is_feed()) {
[121] Fix | Delete
$can = false;
[122] Fix | Delete
} elseif (is_preview()) {
[123] Fix | Delete
$can = false;
[124] Fix | Delete
} elseif (self::is_ajax()) {
[125] Fix | Delete
$can = false;
[126] Fix | Delete
}
[127] Fix | Delete
[128] Fix | Delete
if (self::_is_login_page()) {
[129] Fix | Delete
Debug2::debug('[Router] Optm bypassed: login/reg page');
[130] Fix | Delete
$can = false;
[131] Fix | Delete
}
[132] Fix | Delete
[133] Fix | Delete
$can_final = apply_filters('litespeed_can_optm', $can);
[134] Fix | Delete
[135] Fix | Delete
if ($can_final != $can) {
[136] Fix | Delete
Debug2::debug('[Router] Optm bypassed: filter');
[137] Fix | Delete
}
[138] Fix | Delete
[139] Fix | Delete
return $can_final;
[140] Fix | Delete
}
[141] Fix | Delete
[142] Fix | Delete
/**
[143] Fix | Delete
* Check referer page to see if its from admin
[144] Fix | Delete
*
[145] Fix | Delete
* @since 2.4.2.1
[146] Fix | Delete
* @access public
[147] Fix | Delete
*/
[148] Fix | Delete
public static function from_admin() {
[149] Fix | Delete
return !empty($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], get_admin_url()) === 0;
[150] Fix | Delete
}
[151] Fix | Delete
[152] Fix | Delete
/**
[153] Fix | Delete
* Check if it can use CDN replacement
[154] Fix | Delete
*
[155] Fix | Delete
* @since 1.2.3
[156] Fix | Delete
* @since 2.3.1 Relocated from cdn.cls
[157] Fix | Delete
* @access public
[158] Fix | Delete
*/
[159] Fix | Delete
public static function can_cdn() {
[160] Fix | Delete
$can = true;
[161] Fix | Delete
[162] Fix | Delete
if (is_admin()) {
[163] Fix | Delete
if (!self::is_ajax()) {
[164] Fix | Delete
Debug2::debug2('[Router] CDN bypassed: is not ajax call');
[165] Fix | Delete
$can = false;
[166] Fix | Delete
}
[167] Fix | Delete
[168] Fix | Delete
if (self::from_admin()) {
[169] Fix | Delete
Debug2::debug2('[Router] CDN bypassed: ajax call from admin');
[170] Fix | Delete
$can = false;
[171] Fix | Delete
}
[172] Fix | Delete
} elseif (is_feed()) {
[173] Fix | Delete
$can = false;
[174] Fix | Delete
} elseif (is_preview()) {
[175] Fix | Delete
$can = false;
[176] Fix | Delete
}
[177] Fix | Delete
[178] Fix | Delete
/**
[179] Fix | Delete
* Bypass cron to avoid deregister jq notice `Do not deregister the <code>jquery-core</code> script in the administration area.`
[180] Fix | Delete
*
[181] Fix | Delete
* @since 2.7.2
[182] Fix | Delete
*/
[183] Fix | Delete
if (wp_doing_cron()) {
[184] Fix | Delete
$can = false;
[185] Fix | Delete
}
[186] Fix | Delete
[187] Fix | Delete
/**
[188] Fix | Delete
* Bypass login/reg page
[189] Fix | Delete
*
[190] Fix | Delete
* @since 1.6
[191] Fix | Delete
*/
[192] Fix | Delete
if (self::_is_login_page()) {
[193] Fix | Delete
Debug2::debug('[Router] CDN bypassed: login/reg page');
[194] Fix | Delete
$can = false;
[195] Fix | Delete
}
[196] Fix | Delete
[197] Fix | Delete
/**
[198] Fix | Delete
* Bypass post/page link setting
[199] Fix | Delete
*
[200] Fix | Delete
* @since 2.9.8.5
[201] Fix | Delete
*/
[202] Fix | Delete
$rest_prefix = function_exists('rest_get_url_prefix') ? rest_get_url_prefix() : apply_filters('rest_url_prefix', 'wp-json');
[203] Fix | Delete
if (
[204] Fix | Delete
!empty($_SERVER['REQUEST_URI']) &&
[205] Fix | Delete
strpos($_SERVER['REQUEST_URI'], $rest_prefix . '/wp/v2/media') !== false &&
[206] Fix | Delete
isset($_SERVER['HTTP_REFERER']) &&
[207] Fix | Delete
strpos($_SERVER['HTTP_REFERER'], 'wp-admin') !== false
[208] Fix | Delete
) {
[209] Fix | Delete
Debug2::debug('[Router] CDN bypassed: wp-json on admin page');
[210] Fix | Delete
$can = false;
[211] Fix | Delete
}
[212] Fix | Delete
[213] Fix | Delete
$can_final = apply_filters('litespeed_can_cdn', $can);
[214] Fix | Delete
[215] Fix | Delete
if ($can_final != $can) {
[216] Fix | Delete
Debug2::debug('[Router] CDN bypassed: filter');
[217] Fix | Delete
}
[218] Fix | Delete
[219] Fix | Delete
return $can_final;
[220] Fix | Delete
}
[221] Fix | Delete
[222] Fix | Delete
/**
[223] Fix | Delete
* Check if is login page or not
[224] Fix | Delete
*
[225] Fix | Delete
* @since 2.3.1
[226] Fix | Delete
* @access protected
[227] Fix | Delete
*/
[228] Fix | Delete
protected static function _is_login_page() {
[229] Fix | Delete
if (in_array($GLOBALS['pagenow'], array( 'wp-login.php', 'wp-register.php' ), true)) {
[230] Fix | Delete
return true;
[231] Fix | Delete
}
[232] Fix | Delete
[233] Fix | Delete
return false;
[234] Fix | Delete
}
[235] Fix | Delete
[236] Fix | Delete
/**
[237] Fix | Delete
* UCSS/Crawler role simulator
[238] Fix | Delete
*
[239] Fix | Delete
* @since 1.9.1
[240] Fix | Delete
* @since 3.3 Renamed from `is_crawler_role_simulation`
[241] Fix | Delete
*/
[242] Fix | Delete
public function is_role_simulation() {
[243] Fix | Delete
if (is_admin()) {
[244] Fix | Delete
return;
[245] Fix | Delete
}
[246] Fix | Delete
[247] Fix | Delete
if (empty($_COOKIE['litespeed_hash']) && empty($_COOKIE['litespeed_flash_hash'])) {
[248] Fix | Delete
return;
[249] Fix | Delete
}
[250] Fix | Delete
[251] Fix | Delete
self::debug('🪪 starting role validation');
[252] Fix | Delete
[253] Fix | Delete
// Check if is from crawler
[254] Fix | Delete
// if ( empty( $_SERVER[ 'HTTP_USER_AGENT' ] ) || strpos( $_SERVER[ 'HTTP_USER_AGENT' ], Crawler::FAST_USER_AGENT ) !== 0 ) {
[255] Fix | Delete
// Debug2::debug( '[Router] user agent not match' );
[256] Fix | Delete
// return;
[257] Fix | Delete
// }
[258] Fix | Delete
$server_ip = $this->conf(self::O_SERVER_IP);
[259] Fix | Delete
if (!$server_ip || self::get_ip() !== $server_ip) {
[260] Fix | Delete
self::debug('❌❌ Role simulate uid denied! Not localhost visit!');
[261] Fix | Delete
Control::set_nocache('Role simulate uid denied');
[262] Fix | Delete
return;
[263] Fix | Delete
}
[264] Fix | Delete
[265] Fix | Delete
// Flash hash validation
[266] Fix | Delete
if (!empty($_COOKIE['litespeed_flash_hash'])) {
[267] Fix | Delete
$hash_data = self::get_option(self::ITEM_FLASH_HASH, array());
[268] Fix | Delete
if ($hash_data && is_array($hash_data) && !empty($hash_data['hash']) && !empty($hash_data['ts']) && !empty($hash_data['uid'])) {
[269] Fix | Delete
if (time() - $hash_data['ts'] < 120 && $_COOKIE['litespeed_flash_hash'] == $hash_data['hash']) {
[270] Fix | Delete
self::debug('🪪 Role simulator flash hash matched, escalating user to be uid=' . $hash_data['uid']);
[271] Fix | Delete
self::delete_option(self::ITEM_FLASH_HASH);
[272] Fix | Delete
wp_set_current_user($hash_data['uid']);
[273] Fix | Delete
return;
[274] Fix | Delete
}
[275] Fix | Delete
}
[276] Fix | Delete
}
[277] Fix | Delete
// Hash validation
[278] Fix | Delete
if (!empty($_COOKIE['litespeed_hash'])) {
[279] Fix | Delete
$hash_data = self::get_option(self::ITEM_HASH, array());
[280] Fix | Delete
if ($hash_data && is_array($hash_data) && !empty($hash_data['hash']) && !empty($hash_data['ts']) && !empty($hash_data['uid'])) {
[281] Fix | Delete
$RUN_DURATION = $this->cls('Crawler')->get_crawler_duration();
[282] Fix | Delete
if (time() - $hash_data['ts'] < $RUN_DURATION && $_COOKIE['litespeed_hash'] == $hash_data['hash']) {
[283] Fix | Delete
self::debug('🪪 Role simulator hash matched, escalating user to be uid=' . $hash_data['uid']);
[284] Fix | Delete
wp_set_current_user($hash_data['uid']);
[285] Fix | Delete
return;
[286] Fix | Delete
}
[287] Fix | Delete
}
[288] Fix | Delete
}
[289] Fix | Delete
[290] Fix | Delete
self::debug('❌ WARNING: role simulator hash not match');
[291] Fix | Delete
}
[292] Fix | Delete
[293] Fix | Delete
/**
[294] Fix | Delete
* Get a short ttl hash (2mins)
[295] Fix | Delete
*
[296] Fix | Delete
* @since 6.4
[297] Fix | Delete
*/
[298] Fix | Delete
public function get_flash_hash( $uid ) {
[299] Fix | Delete
$hash_data = self::get_option(self::ITEM_FLASH_HASH, array());
[300] Fix | Delete
if ($hash_data && is_array($hash_data) && !empty($hash_data['hash']) && !empty($hash_data['ts'])) {
[301] Fix | Delete
if (time() - $hash_data['ts'] < 60) {
[302] Fix | Delete
return $hash_data['hash'];
[303] Fix | Delete
}
[304] Fix | Delete
}
[305] Fix | Delete
[306] Fix | Delete
// Check if this user has editor access or not
[307] Fix | Delete
if (user_can($uid, 'edit_posts')) {
[308] Fix | Delete
self::debug('🛑 The user with id ' . $uid . ' has editor access, which is not allowed for the role simulator.');
[309] Fix | Delete
return '';
[310] Fix | Delete
}
[311] Fix | Delete
[312] Fix | Delete
$hash = Str::rrand(32);
[313] Fix | Delete
self::update_option(self::ITEM_FLASH_HASH, array(
[314] Fix | Delete
'hash' => $hash,
[315] Fix | Delete
'ts' => time(),
[316] Fix | Delete
'uid' => $uid,
[317] Fix | Delete
));
[318] Fix | Delete
return $hash;
[319] Fix | Delete
}
[320] Fix | Delete
[321] Fix | Delete
/**
[322] Fix | Delete
* Get a security hash
[323] Fix | Delete
*
[324] Fix | Delete
* @since 3.3
[325] Fix | Delete
*/
[326] Fix | Delete
public function get_hash( $uid ) {
[327] Fix | Delete
// Check if this user has editor access or not
[328] Fix | Delete
if (user_can($uid, 'edit_posts')) {
[329] Fix | Delete
self::debug('🛑 The user with id ' . $uid . ' has editor access, which is not allowed for the role simulator.');
[330] Fix | Delete
return '';
[331] Fix | Delete
}
[332] Fix | Delete
[333] Fix | Delete
// As this is called only when starting crawling, not per page, no need to reuse
[334] Fix | Delete
$hash = Str::rrand(32);
[335] Fix | Delete
self::update_option(self::ITEM_HASH, array(
[336] Fix | Delete
'hash' => $hash,
[337] Fix | Delete
'ts' => time(),
[338] Fix | Delete
'uid' => $uid,
[339] Fix | Delete
));
[340] Fix | Delete
return $hash;
[341] Fix | Delete
}
[342] Fix | Delete
[343] Fix | Delete
/**
[344] Fix | Delete
* Get user role
[345] Fix | Delete
*
[346] Fix | Delete
* @since 1.6.2
[347] Fix | Delete
*/
[348] Fix | Delete
public static function get_role( $uid = null ) {
[349] Fix | Delete
if (defined('LITESPEED_WP_ROLE')) {
[350] Fix | Delete
return LITESPEED_WP_ROLE;
[351] Fix | Delete
}
[352] Fix | Delete
[353] Fix | Delete
if ($uid === null) {
[354] Fix | Delete
$uid = get_current_user_id();
[355] Fix | Delete
}
[356] Fix | Delete
[357] Fix | Delete
$role = false;
[358] Fix | Delete
if ($uid) {
[359] Fix | Delete
$user = get_userdata($uid);
[360] Fix | Delete
if (isset($user->roles) && is_array($user->roles)) {
[361] Fix | Delete
$tmp = array_values($user->roles);
[362] Fix | Delete
$role = implode(',', $tmp); // Combine for PHP5.3 const compatibility
[363] Fix | Delete
}
[364] Fix | Delete
}
[365] Fix | Delete
Debug2::debug('[Router] get_role: ' . $role);
[366] Fix | Delete
[367] Fix | Delete
if (!$role) {
[368] Fix | Delete
return $role;
[369] Fix | Delete
// Guest user
[370] Fix | Delete
Debug2::debug('[Router] role: guest');
[371] Fix | Delete
[372] Fix | Delete
/**
[373] Fix | Delete
* Fix double login issue
[374] Fix | Delete
* The previous user init refactoring didn't fix this bcos this is in login process and the user role could change
[375] Fix | Delete
*
[376] Fix | Delete
* @see https://github.com/litespeedtech/lscache_wp/commit/69e7bc71d0de5cd58961bae953380b581abdc088
[377] Fix | Delete
* @since 2.9.8 Won't assign const if in login process
[378] Fix | Delete
*/
[379] Fix | Delete
if (substr_compare(wp_login_url(), $GLOBALS['pagenow'], -strlen($GLOBALS['pagenow'])) === 0) {
[380] Fix | Delete
return $role;
[381] Fix | Delete
}
[382] Fix | Delete
}
[383] Fix | Delete
[384] Fix | Delete
define('LITESPEED_WP_ROLE', $role);
[385] Fix | Delete
[386] Fix | Delete
return LITESPEED_WP_ROLE;
[387] Fix | Delete
}
[388] Fix | Delete
[389] Fix | Delete
/**
[390] Fix | Delete
* Get frontend path
[391] Fix | Delete
*
[392] Fix | Delete
* @since 1.2.2
[393] Fix | Delete
* @access public
[394] Fix | Delete
* @return boolean
[395] Fix | Delete
*/
[396] Fix | Delete
public static function frontend_path() {
[397] Fix | Delete
// todo: move to htaccess.cls ?
[398] Fix | Delete
if (!isset(self::$_frontend_path)) {
[399] Fix | Delete
$frontend = rtrim(ABSPATH, '/'); // /home/user/public_html/frontend
[400] Fix | Delete
// get home path failed. Trac ticket #37668 (e.g. frontend:/blog backend:/wordpress)
[401] Fix | Delete
if (!$frontend) {
[402] Fix | Delete
Debug2::debug('[Router] No ABSPATH, generating from home option');
[403] Fix | Delete
$frontend = parse_url(get_option('home'));
[404] Fix | Delete
$frontend = !empty($frontend['path']) ? $frontend['path'] : '';
[405] Fix | Delete
$frontend = $_SERVER['DOCUMENT_ROOT'] . $frontend;
[406] Fix | Delete
}
[407] Fix | Delete
$frontend = realpath($frontend);
[408] Fix | Delete
[409] Fix | Delete
self::$_frontend_path = $frontend;
[410] Fix | Delete
}
[411] Fix | Delete
return self::$_frontend_path;
[412] Fix | Delete
}
[413] Fix | Delete
[414] Fix | Delete
/**
[415] Fix | Delete
* Check if ESI is enabled or not
[416] Fix | Delete
*
[417] Fix | Delete
* @since 1.2.0
[418] Fix | Delete
* @access public
[419] Fix | Delete
* @return boolean
[420] Fix | Delete
*/
[421] Fix | Delete
public function esi_enabled() {
[422] Fix | Delete
if (!isset(self::$_esi_enabled)) {
[423] Fix | Delete
self::$_esi_enabled = defined('LITESPEED_ON') && $this->conf(self::O_ESI);
[424] Fix | Delete
if (!empty($_REQUEST[self::ACTION])) {
[425] Fix | Delete
self::$_esi_enabled = false;
[426] Fix | Delete
}
[427] Fix | Delete
}
[428] Fix | Delete
return self::$_esi_enabled;
[429] Fix | Delete
}
[430] Fix | Delete
[431] Fix | Delete
/**
[432] Fix | Delete
* Check if crawler is enabled on server level
[433] Fix | Delete
*
[434] Fix | Delete
* @since 1.1.1
[435] Fix | Delete
* @access public
[436] Fix | Delete
*/
[437] Fix | Delete
public static function can_crawl() {
[438] Fix | Delete
if (isset($_SERVER['X-LSCACHE']) && strpos($_SERVER['X-LSCACHE'], 'crawler') === false) {
[439] Fix | Delete
return false;
[440] Fix | Delete
}
[441] Fix | Delete
[442] Fix | Delete
// CLI will bypass this check as crawler library can always do the 428 check
[443] Fix | Delete
if (defined('LITESPEED_CLI')) {
[444] Fix | Delete
return true;
[445] Fix | Delete
}
[446] Fix | Delete
[447] Fix | Delete
return true;
[448] Fix | Delete
}
[449] Fix | Delete
[450] Fix | Delete
/**
[451] Fix | Delete
* Check action
[452] Fix | Delete
*
[453] Fix | Delete
* @since 1.1.0
[454] Fix | Delete
* @access public
[455] Fix | Delete
* @return string
[456] Fix | Delete
*/
[457] Fix | Delete
public static function get_action() {
[458] Fix | Delete
if (!isset(self::$_action)) {
[459] Fix | Delete
self::$_action = false;
[460] Fix | Delete
self::cls()->verify_action();
[461] Fix | Delete
if (self::$_action) {
[462] Fix | Delete
defined('LSCWP_LOG') && Debug2::debug('[Router] LSCWP_CTRL verified: ' . var_export(self::$_action, true));
[463] Fix | Delete
}
[464] Fix | Delete
}
[465] Fix | Delete
return self::$_action;
[466] Fix | Delete
}
[467] Fix | Delete
[468] Fix | Delete
/**
[469] Fix | Delete
* Check if is logged in
[470] Fix | Delete
*
[471] Fix | Delete
* @since 1.1.3
[472] Fix | Delete
* @access public
[473] Fix | Delete
* @return boolean
[474] Fix | Delete
*/
[475] Fix | Delete
public static function is_logged_in() {
[476] Fix | Delete
if (!isset(self::$_is_logged_in)) {
[477] Fix | Delete
self::$_is_logged_in = is_user_logged_in();
[478] Fix | Delete
}
[479] Fix | Delete
return self::$_is_logged_in;
[480] Fix | Delete
}
[481] Fix | Delete
[482] Fix | Delete
/**
[483] Fix | Delete
* Check if is ajax call
[484] Fix | Delete
*
[485] Fix | Delete
* @since 1.1.0
[486] Fix | Delete
* @access public
[487] Fix | Delete
* @return boolean
[488] Fix | Delete
*/
[489] Fix | Delete
public static function is_ajax() {
[490] Fix | Delete
if (!isset(self::$_is_ajax)) {
[491] Fix | Delete
self::$_is_ajax = wp_doing_ajax();
[492] Fix | Delete
}
[493] Fix | Delete
return self::$_is_ajax;
[494] Fix | Delete
}
[495] Fix | Delete
[496] Fix | Delete
/**
[497] Fix | Delete
* Check if is admin ip
[498] Fix | Delete
*
[499] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function