Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/litespee.../src
File: data.cls.php
// Active mapping (not expired).
[500] Fix | Delete
$q = "SELECT * FROM `$tb_url_file` WHERE url_id=%d AND vary=%s AND type=%d AND expired=0";
[501] Fix | Delete
$file_row = $wpdb->get_row( $wpdb->prepare( $q, [ $url_id, $vary, $type ] ), ARRAY_A ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared
[502] Fix | Delete
[503] Fix | Delete
// No change needed if filename matches.
[504] Fix | Delete
if ( $file_row && $file_row['filename'] === $filecon_md5 ) {
[505] Fix | Delete
return;
[506] Fix | Delete
}
[507] Fix | Delete
[508] Fix | Delete
// If the new file MD5 is currently marked expired elsewhere, clear those records.
[509] Fix | Delete
$q = "DELETE FROM `$tb_url_file` WHERE filename = %s AND expired > 0";
[510] Fix | Delete
$wpdb->query( $wpdb->prepare( $q, $filecon_md5 ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared
[511] Fix | Delete
[512] Fix | Delete
// If another live row already uses the same filename, switch current row to that filename.
[513] Fix | Delete
if ( $file_row ) {
[514] Fix | Delete
$q = "SELECT id FROM `$tb_url_file` WHERE filename = %s AND expired = 0 AND id != %d LIMIT 1";
[515] Fix | Delete
$exists_id = $wpdb->get_var( $wpdb->prepare( $q, [ $file_row['filename'], (int) $file_row['id'] ] ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared
[516] Fix | Delete
if ( $exists_id ) {
[517] Fix | Delete
$q = "UPDATE `$tb_url_file` SET filename=%s WHERE id=%d";
[518] Fix | Delete
$wpdb->query( $wpdb->prepare( $q, [ $filecon_md5, (int) $file_row['id'] ] ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared
[519] Fix | Delete
return;
[520] Fix | Delete
}
[521] Fix | Delete
}
[522] Fix | Delete
[523] Fix | Delete
// Insert a new mapping row.
[524] Fix | Delete
$q = "INSERT INTO `$tb_url_file` SET url_id=%d, vary=%s, filename=%s, type=%d, mobile=%d, webp=%d, expired=0";
[525] Fix | Delete
$wpdb->query( $wpdb->prepare( $q, [ $url_id, $vary, $filecon_md5, $type, $mobile ? 1 : 0, $webp ? 1 : 0 ] ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared
[526] Fix | Delete
[527] Fix | Delete
// Mark previous mapping as expiring (to be deleted later).
[528] Fix | Delete
if ( $file_row ) {
[529] Fix | Delete
$q = "UPDATE `$tb_url_file` SET expired=%d WHERE id=%d";
[530] Fix | Delete
$expired = time() + ( 86400 * apply_filters( 'litespeed_url_file_expired_days', 20 ) );
[531] Fix | Delete
$wpdb->query( $wpdb->prepare( $q, [ $expired, (int) $file_row['id'] ] ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared
[532] Fix | Delete
[533] Fix | Delete
// Delete already-expired files for this URL.
[534] Fix | Delete
$q = "SELECT * FROM `$tb_url_file` WHERE url_id = %d AND expired BETWEEN 1 AND %d";
[535] Fix | Delete
$q = $wpdb->prepare( $q, [ $url_id, time() ] ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
[536] Fix | Delete
$list = $wpdb->get_results( $q, ARRAY_A ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared
[537] Fix | Delete
if ( $list ) {
[538] Fix | Delete
foreach ( $list as $v ) {
[539] Fix | Delete
$ext = 'js' === $file_type ? 'js' : 'css';
[540] Fix | Delete
$file_to_del = trailingslashit( $path ) . $v['filename'] . '.' . $ext;
[541] Fix | Delete
if ( file_exists( $file_to_del ) ) {
[542] Fix | Delete
self::debug( 'Delete expired unused file: ' . $file_to_del );
[543] Fix | Delete
wp_delete_file( $file_to_del );
[544] Fix | Delete
}
[545] Fix | Delete
}
[546] Fix | Delete
$q = "DELETE FROM `$tb_url_file` WHERE url_id = %d AND expired BETWEEN 1 AND %d";
[547] Fix | Delete
$wpdb->query( $wpdb->prepare( $q, [ $url_id, time() ] ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared
[548] Fix | Delete
}
[549] Fix | Delete
}
[550] Fix | Delete
}
[551] Fix | Delete
[552] Fix | Delete
/**
[553] Fix | Delete
* Load the stored filename (md5) for a given URL/vary/type, if active.
[554] Fix | Delete
*
[555] Fix | Delete
* @since 4.0
[556] Fix | Delete
* @access public
[557] Fix | Delete
*
[558] Fix | Delete
* @param string $request_url Full request URL or tag.
[559] Fix | Delete
* @param string $vary Vary string (may be md5 if previously stored).
[560] Fix | Delete
* @param string $file_type One of 'css','js','ccss','ucss'.
[561] Fix | Delete
* @return string|false Filename md5 (without extension) or false if none.
[562] Fix | Delete
*/
[563] Fix | Delete
public function load_url_file( $request_url, $vary, $file_type ) {
[564] Fix | Delete
global $wpdb;
[565] Fix | Delete
[566] Fix | Delete
if ( strlen( $vary ) > 32 ) {
[567] Fix | Delete
$vary = md5( $vary );
[568] Fix | Delete
}
[569] Fix | Delete
[570] Fix | Delete
if ( ! isset( $this->_url_file_types[ $file_type ] ) ) {
[571] Fix | Delete
return false;
[572] Fix | Delete
}
[573] Fix | Delete
$type = $this->_url_file_types[ $file_type ];
[574] Fix | Delete
[575] Fix | Delete
self::debug2( 'load url file: ' . $request_url );
[576] Fix | Delete
[577] Fix | Delete
$tb_url = $this->tb( 'url' );
[578] Fix | Delete
$q = "SELECT * FROM `$tb_url` WHERE url=%s";
[579] Fix | Delete
$url_row = $wpdb->get_row( $wpdb->prepare( $q, $request_url ), ARRAY_A ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared
[580] Fix | Delete
if ( ! $url_row ) {
[581] Fix | Delete
return false;
[582] Fix | Delete
}
[583] Fix | Delete
[584] Fix | Delete
$url_id = (int) $url_row['id'];
[585] Fix | Delete
$tb_url_file = $this->tb( 'url_file' );
[586] Fix | Delete
$q = "SELECT * FROM `$tb_url_file` WHERE url_id=%d AND vary=%s AND type=%d AND expired=0";
[587] Fix | Delete
$file_row = $wpdb->get_row( $wpdb->prepare( $q, [ $url_id, $vary, $type ] ), ARRAY_A ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared
[588] Fix | Delete
if ( ! $file_row ) {
[589] Fix | Delete
return false;
[590] Fix | Delete
}
[591] Fix | Delete
[592] Fix | Delete
return $file_row['filename'];
[593] Fix | Delete
}
[594] Fix | Delete
[595] Fix | Delete
/**
[596] Fix | Delete
* Mark all UCSS entries of one URL as expired (optionally return existing rows).
[597] Fix | Delete
*
[598] Fix | Delete
* @since 4.5
[599] Fix | Delete
* @access public
[600] Fix | Delete
*
[601] Fix | Delete
* @param string $request_url Target URL.
[602] Fix | Delete
* @param bool $auto_q If true, return existing active rows before expiring.
[603] Fix | Delete
* @return array Existing rows if $auto_q, otherwise empty array.
[604] Fix | Delete
*/
[605] Fix | Delete
public function mark_as_expired( $request_url, $auto_q = false ) {
[606] Fix | Delete
global $wpdb;
[607] Fix | Delete
$tb_url = $this->tb( 'url' );
[608] Fix | Delete
[609] Fix | Delete
self::debug( 'Try to mark as expired: ' . $request_url );
[610] Fix | Delete
$q = "SELECT * FROM `$tb_url` WHERE url=%s";
[611] Fix | Delete
$url_row = $wpdb->get_row( $wpdb->prepare( $q, $request_url ), ARRAY_A ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared
[612] Fix | Delete
if ( ! $url_row ) {
[613] Fix | Delete
return [];
[614] Fix | Delete
}
[615] Fix | Delete
[616] Fix | Delete
self::debug( 'Mark url_id=' . $url_row['id'] . ' as expired' );
[617] Fix | Delete
[618] Fix | Delete
$tb_url_file = $this->tb( 'url_file' );
[619] Fix | Delete
[620] Fix | Delete
$existing_url_files = [];
[621] Fix | Delete
if ( $auto_q ) {
[622] Fix | Delete
$q = "SELECT a.*, b.url FROM `$tb_url_file` a LEFT JOIN `$tb_url` b ON b.id=a.url_id WHERE a.url_id=%d AND a.type=%d AND a.expired=0";
[623] Fix | Delete
$q = $wpdb->prepare( $q, [ (int) $url_row['id'], $this->_url_file_types['ucss'] ] ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
[624] Fix | Delete
$existing_url_files = $wpdb->get_results( $q, ARRAY_A ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared
[625] Fix | Delete
}
[626] Fix | Delete
[627] Fix | Delete
$q = "UPDATE `$tb_url_file` SET expired=%d WHERE url_id=%d AND type=%d AND expired=0";
[628] Fix | Delete
$expired = time() + 86400 * apply_filters( 'litespeed_url_file_expired_days', 20 );
[629] Fix | Delete
$wpdb->query( $wpdb->prepare( $q, [ $expired, (int) $url_row['id'], $this->_url_file_types['ucss'] ] ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared
[630] Fix | Delete
[631] Fix | Delete
return $existing_url_files;
[632] Fix | Delete
}
[633] Fix | Delete
[634] Fix | Delete
/**
[635] Fix | Delete
* Merge CSS excludes from file into the given list.
[636] Fix | Delete
*
[637] Fix | Delete
* @since 3.6
[638] Fix | Delete
*
[639] Fix | Delete
* @param array $list_in Existing list.
[640] Fix | Delete
* @return array
[641] Fix | Delete
*/
[642] Fix | Delete
public function load_css_exc( $list_in ) {
[643] Fix | Delete
$data = $this->_load_per_line( 'css_excludes.txt' );
[644] Fix | Delete
if ( $data ) {
[645] Fix | Delete
$list_in = array_unique( array_filter( array_merge( $list_in, $data ) ) );
[646] Fix | Delete
}
[647] Fix | Delete
[648] Fix | Delete
return $list_in;
[649] Fix | Delete
}
[650] Fix | Delete
[651] Fix | Delete
/**
[652] Fix | Delete
* Merge CCSS selector whitelist from file into the given list.
[653] Fix | Delete
*
[654] Fix | Delete
* @since 7.1
[655] Fix | Delete
*
[656] Fix | Delete
* @param array $list_in Existing list.
[657] Fix | Delete
* @return array
[658] Fix | Delete
*/
[659] Fix | Delete
public function load_ccss_whitelist( $list_in ) {
[660] Fix | Delete
$data = $this->_load_per_line( 'ccss_whitelist.txt' );
[661] Fix | Delete
if ( $data ) {
[662] Fix | Delete
$list_in = array_unique( array_filter( array_merge( $list_in, $data ) ) );
[663] Fix | Delete
}
[664] Fix | Delete
[665] Fix | Delete
return $list_in;
[666] Fix | Delete
}
[667] Fix | Delete
[668] Fix | Delete
/**
[669] Fix | Delete
* Merge UCSS whitelist from file into the given list.
[670] Fix | Delete
*
[671] Fix | Delete
* @since 4.0
[672] Fix | Delete
*
[673] Fix | Delete
* @param array $list_in Existing list.
[674] Fix | Delete
* @return array
[675] Fix | Delete
*/
[676] Fix | Delete
public function load_ucss_whitelist( $list_in ) {
[677] Fix | Delete
$data = $this->_load_per_line( 'ucss_whitelist.txt' );
[678] Fix | Delete
if ( $data ) {
[679] Fix | Delete
$list_in = array_unique( array_filter( array_merge( $list_in, $data ) ) );
[680] Fix | Delete
}
[681] Fix | Delete
[682] Fix | Delete
return $list_in;
[683] Fix | Delete
}
[684] Fix | Delete
[685] Fix | Delete
/**
[686] Fix | Delete
* Merge JS excludes from file into the given list.
[687] Fix | Delete
*
[688] Fix | Delete
* @since 3.5
[689] Fix | Delete
*
[690] Fix | Delete
* @param array $list_in Existing list.
[691] Fix | Delete
* @return array
[692] Fix | Delete
*/
[693] Fix | Delete
public function load_js_exc( $list_in ) {
[694] Fix | Delete
$data = $this->_load_per_line( 'js_excludes.txt' );
[695] Fix | Delete
if ( $data ) {
[696] Fix | Delete
$list_in = array_unique( array_filter( array_merge( $list_in, $data ) ) );
[697] Fix | Delete
}
[698] Fix | Delete
[699] Fix | Delete
return $list_in;
[700] Fix | Delete
}
[701] Fix | Delete
[702] Fix | Delete
/**
[703] Fix | Delete
* Merge JS defer excludes from file into the given list.
[704] Fix | Delete
*
[705] Fix | Delete
* @since 3.6
[706] Fix | Delete
*
[707] Fix | Delete
* @param array $list_in Existing list.
[708] Fix | Delete
* @return array
[709] Fix | Delete
*/
[710] Fix | Delete
public function load_js_defer_exc( $list_in ) {
[711] Fix | Delete
$data = $this->_load_per_line( 'js_defer_excludes.txt' );
[712] Fix | Delete
if ( $data ) {
[713] Fix | Delete
$list_in = array_unique( array_filter( array_merge( $list_in, $data ) ) );
[714] Fix | Delete
}
[715] Fix | Delete
[716] Fix | Delete
return $list_in;
[717] Fix | Delete
}
[718] Fix | Delete
[719] Fix | Delete
/**
[720] Fix | Delete
* Merge OPTM URI excludes from file into the given list.
[721] Fix | Delete
*
[722] Fix | Delete
* @since 5.4
[723] Fix | Delete
*
[724] Fix | Delete
* @param array $list_in Existing list.
[725] Fix | Delete
* @return array
[726] Fix | Delete
*/
[727] Fix | Delete
public function load_optm_uri_exc( $list_in ) {
[728] Fix | Delete
$data = $this->_load_per_line( 'optm_uri_exc.txt' );
[729] Fix | Delete
if ( $data ) {
[730] Fix | Delete
$list_in = array_unique( array_filter( array_merge( $list_in, $data ) ) );
[731] Fix | Delete
}
[732] Fix | Delete
[733] Fix | Delete
return $list_in;
[734] Fix | Delete
}
[735] Fix | Delete
[736] Fix | Delete
/**
[737] Fix | Delete
* Merge ESI nonces from file into the given list.
[738] Fix | Delete
*
[739] Fix | Delete
* @since 3.5
[740] Fix | Delete
*
[741] Fix | Delete
* @param array $list_in Existing list.
[742] Fix | Delete
* @return array
[743] Fix | Delete
*/
[744] Fix | Delete
public function load_esi_nonces( $list_in ) {
[745] Fix | Delete
$data = $this->_load_per_line( 'esi.nonces.txt' );
[746] Fix | Delete
if ( $data ) {
[747] Fix | Delete
$list_in = array_unique( array_filter( array_merge( $list_in, $data ) ) );
[748] Fix | Delete
}
[749] Fix | Delete
[750] Fix | Delete
return $list_in;
[751] Fix | Delete
}
[752] Fix | Delete
[753] Fix | Delete
/**
[754] Fix | Delete
* Merge "nocacheable" cache keys from file into the given list.
[755] Fix | Delete
*
[756] Fix | Delete
* @since 6.3.0.1
[757] Fix | Delete
*
[758] Fix | Delete
* @param array $list_in Existing list.
[759] Fix | Delete
* @return array
[760] Fix | Delete
*/
[761] Fix | Delete
public function load_cache_nocacheable( $list_in ) {
[762] Fix | Delete
$data = $this->_load_per_line( 'cache_nocacheable.txt' );
[763] Fix | Delete
if ( $data ) {
[764] Fix | Delete
$list_in = array_unique( array_filter( array_merge( $list_in, $data ) ) );
[765] Fix | Delete
}
[766] Fix | Delete
[767] Fix | Delete
return $list_in;
[768] Fix | Delete
}
[769] Fix | Delete
[770] Fix | Delete
/**
[771] Fix | Delete
* Load a data file and return non-empty lines, stripping comments.
[772] Fix | Delete
*
[773] Fix | Delete
* Supports:
[774] Fix | Delete
* - `# comment`
[775] Fix | Delete
* - `##comment`
[776] Fix | Delete
*
[777] Fix | Delete
* @since 3.5
[778] Fix | Delete
* @access private
[779] Fix | Delete
*
[780] Fix | Delete
* @param string $file Relative filename under the plugin /data directory.
[781] Fix | Delete
* @return array<int,string>
[782] Fix | Delete
*/
[783] Fix | Delete
private function _load_per_line( $file ) {
[784] Fix | Delete
$data = File::read( LSCWP_DIR . 'data/' . $file );
[785] Fix | Delete
$data = explode( PHP_EOL, $data );
[786] Fix | Delete
$list = [];
[787] Fix | Delete
foreach ( $data as $v ) {
[788] Fix | Delete
// Drop two kinds of comments.
[789] Fix | Delete
if ( false !== strpos( $v, '##' ) ) {
[790] Fix | Delete
$v = trim( substr( $v, 0, strpos( $v, '##' ) ) );
[791] Fix | Delete
}
[792] Fix | Delete
if ( false !== strpos( $v, '# ' ) ) {
[793] Fix | Delete
$v = trim( substr( $v, 0, strpos( $v, '# ' ) ) );
[794] Fix | Delete
}
[795] Fix | Delete
[796] Fix | Delete
if ( ! $v ) {
[797] Fix | Delete
continue;
[798] Fix | Delete
}
[799] Fix | Delete
[800] Fix | Delete
$list[] = $v;
[801] Fix | Delete
}
[802] Fix | Delete
[803] Fix | Delete
return $list;
[804] Fix | Delete
}
[805] Fix | Delete
}
[806] Fix | Delete
[807] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function