Version Description
- Jul 25 2022 =
- VPI Added Viewport Images feature to LiteSpeed Options metabox on Post Edit page.
- CDN Added Auto CDN Setup feature for simple QUIC.cloud CDN setup. (Kevin)
- Page Optimize Automatically cache remote CSS/JS files when fetching for optimization (Lauren)
- Cache Added LiteSpeed Options for page-level cache control on Post Edit page. (denisgomesfranco)
- Cloud Auto Alias feature.
-
Debug Added
Debug String Excludes
option. (Hanna) -
UCSS Added
Purge this page - UCSS
option to Admin Bar dropdown menu. (Ankit) -
Guest Added
litespeed_guest_off=1
URL query string parameter to bypass Guest Mode. (cbdfactum) - Page Optimize Fixed an issue where CSS anchors could be wrongly converted to a full path when minifying. (Tynan)
- Page Optimize Bypass CCSS/UCSS generation when a self-crawled CSS resource returns a 404 code. (Abe)
-
Object Allow
LSCWP_OBJECT_CACHE
predefined to turn off Object Cache. (knutsp) - Data Fixed an issue where empty version tags in the database repeatedly toggled the upgrade banner and reset settings to default.
- Purge Fixed an issue where the site's index page could be purged upon deletion of an unviewable post. (Kevin)
-
Toolbox Added
View site before optimization
button underDebug
tab. (Ryan D) -
Admin Switch to using the
DONOTCACHEPAGE
constant to indicated WP-Admin pages are not cacheable. - Admin Moved no-cache header to very beginning to avoid caching unexpected exits.
- Cloud Added message queue service for VPI. (Abe)
- Cloud Bypassed 503 error nodes from node redetection process. (Abe)
-
Cloud Fixed a failure to detect
out_of_quota
. (Lauren) - Cloud Added ability to display dismissable banners generated by QUIC.cloud.
- Crawler Added realtime load detection before crawl.
- Crawler Adjusted crawler behavior for Divi pages to allow for Divi's CCSS generation process. (miketemby)
-
API PHP constant
LITESPEED_CRAWLER_DISABLE_BLOCKLIST
and filterlitespeed_crawler_disable_blocklist
to disable blocklist. (Tobolo) -
CDN Automatically add a trailing slash to
CDN URL
andOriginal URLs
if user didn't provide one. (Lucas) - Cache When a URL redirects to a URL with a query string, consider these as different for caching purposes. (Shivam)
- Media Added ability to disable lazyload from the LiteSpeed Options metabox on Post Edit page.
-
Media Added new default values to
WebP Attribute to Replace
setting for WPBakery and Slider Revolution. (JibsouX) -
Image Optimize Dropped redundant
Page Speed
user agent when serving WebP images. (serpentdriver) - GUI Fixed an issue where manually dismissable admin messages were instead being treated as one-time messages. (Tynan Beatty)
- GUI Fixed an issue where subsequent admin alerts would overwrite existing alerts in the queue. (Kevin/Tynan)
- GUI Updated time offset in log. (Ruikai #PR444 #PR445)
-
GUI Added
litespeed_media_ignore_remote_missing_sizes
API description. -
CCSS Fixed an issue where CCSS was unexpectedly bypassed if
CSS Combine
was OFF andUCSS Inline
was ON. (Ruikai) - Debug Added resposne headers to debug log. (Kevin)
Download this release
Release Info
Developer | LiteSpeedTech |
Plugin | LiteSpeed Cache |
Version | 5.0 |
Comparing to | |
See all releases |
Code changes from version 4.6 to 5.0
- assets/css/litespeed.css +81 -0
- assets/js/litespeed-cache-admin.js +3 -3
- data/const.default.ini +11 -0
- data/const.network_default.ini +3 -0
- lang/litespeed-cache.pot +1030 -544
- lib/css-min/urirewriter.cls.php +2 -2
- lib/object-cache.php +4 -1
- litespeed-cache.php +2 -2
- readme.txt +38 -2
- src/activation.cls.php +4 -5
- src/admin-display.cls.php +58 -7
- src/admin-settings.cls.php +4 -1
- src/admin.cls.php +5 -2
- src/avatar.cls.php +6 -6
- src/base.cls.php +16 -1
- src/cdn-setup.cls.php +389 -0
- src/cloud.cls.php +296 -54
- src/conf.cls.php +3 -0
- src/control.cls.php +12 -5
- src/core.cls.php +1 -1
- src/crawler.cls.php +62 -35
- src/css.cls.php +33 -41
- src/data.cls.php +4 -0
- src/debug2.cls.php +16 -1
- src/error.cls.php +8 -0
- src/esi.cls.php +8 -2
- src/gui.cls.php +28 -1
- src/htaccess.cls.php +1 -2
- src/lang.cls.php +36 -0
- src/media.cls.php +22 -10
- src/metabox.cls.php +159 -0
- src/optimize.cls.php +2 -2
- src/optimizer.cls.php +37 -11
- src/placeholder.cls.php +1 -1
- src/purge.cls.php +32 -1
- src/rest.cls.php +45 -0
- src/root.cls.php +31 -6
- src/router.cls.php +8 -2
- src/task.cls.php +2 -0
- src/utility.cls.php +44 -5
- src/vary.cls.php +5 -0
- src/vpi.cls.php +329 -0
- thirdparty/divi-theme-builder.cls.php +4 -0
- thirdparty/entry.inc.php +1 -0
- thirdparty/litespeed-check.cls.php +151 -0
- tpl/banner/new_version.php +2 -4
- tpl/cache/settings-purge.tpl.php +1 -1
- tpl/cdn/auto_setup.tpl.php +260 -0
- tpl/cdn/entry.tpl.php +1 -0
- tpl/crawler/blacklist.tpl.php +6 -1
- tpl/crawler/settings-general.tpl.php +0 -3
- tpl/crawler/summary.tpl.php +1 -1
- tpl/dash/dashboard.tpl.php +34 -1
- tpl/general/settings.tpl.php +14 -4
- tpl/inc/metabox.php +28 -0
- tpl/page_optm/entry.tpl.php +1 -0
- tpl/page_optm/settings_css.tpl.php +3 -2
- tpl/page_optm/settings_media.tpl.php +9 -1
- tpl/page_optm/settings_vpi.tpl.php +95 -0
- tpl/toolbox/beta_test.tpl.php +1 -0
- tpl/toolbox/settings-debug.tpl.php +26 -0
assets/css/litespeed.css
CHANGED
@@ -32,6 +32,87 @@
|
|
32 |
}
|
33 |
|
34 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
/* =======================================
|
36 |
UTILITIES - structure
|
37 |
======================================= */
|
32 |
}
|
33 |
|
34 |
|
35 |
+
/* =======================================
|
36 |
+
UTILITIES - toggle UI
|
37 |
+
======================================= */
|
38 |
+
|
39 |
+
input[type="checkbox"].litespeed-tiny-toggle {
|
40 |
+
-webkit-appearance: none;
|
41 |
+
-moz-appearance: none;
|
42 |
+
appearance: none;
|
43 |
+
|
44 |
+
-webkit-tap-highlight-color: transparent;
|
45 |
+
|
46 |
+
width: auto;
|
47 |
+
height: auto;
|
48 |
+
vertical-align: middle;
|
49 |
+
position: relative;
|
50 |
+
border: 0;
|
51 |
+
outline: 0;
|
52 |
+
cursor: pointer;
|
53 |
+
margin: 0 4px;
|
54 |
+
background: none;
|
55 |
+
box-shadow: none;
|
56 |
+
}
|
57 |
+
input[type="checkbox"].litespeed-tiny-toggle:focus {
|
58 |
+
box-shadow: none;
|
59 |
+
}
|
60 |
+
input[type="checkbox"].litespeed-tiny-toggle:after {
|
61 |
+
content: '';
|
62 |
+
font-size: 8px;
|
63 |
+
font-weight: 400;
|
64 |
+
line-height: 18px;
|
65 |
+
text-indent: -14px;
|
66 |
+
color: #ffffff;
|
67 |
+
width: 36px;
|
68 |
+
height: 18px;
|
69 |
+
display: inline-block;
|
70 |
+
background-color: #a7aaad;
|
71 |
+
border-radius: 72px;
|
72 |
+
box-shadow: 0 0 12px rgb(0 0 0 / 15%) inset;
|
73 |
+
}
|
74 |
+
input[type="checkbox"].litespeed-tiny-toggle:before {
|
75 |
+
content: '';
|
76 |
+
width: 14px;
|
77 |
+
height: 14px;
|
78 |
+
display: block;
|
79 |
+
position: absolute;
|
80 |
+
top: 2px;
|
81 |
+
left: 2px;
|
82 |
+
margin: 0;
|
83 |
+
border-radius: 50%;
|
84 |
+
background-color: #ffffff;
|
85 |
+
}
|
86 |
+
|
87 |
+
input[type="checkbox"].litespeed-tiny-toggle:checked:before {
|
88 |
+
left: 20px;
|
89 |
+
margin: 0;
|
90 |
+
background-color: #ffffff;
|
91 |
+
}
|
92 |
+
|
93 |
+
input[type="checkbox"].litespeed-tiny-toggle,
|
94 |
+
input[type="checkbox"].litespeed-tiny-toggle:before,
|
95 |
+
input[type="checkbox"].litespeed-tiny-toggle:after,
|
96 |
+
input[type="checkbox"].litespeed-tiny-toggle:checked:before,
|
97 |
+
input[type="checkbox"].litespeed-tiny-toggle:checked:after {
|
98 |
+
transition: ease .15s;
|
99 |
+
}
|
100 |
+
input[type="checkbox"].litespeed-tiny-toggle:checked:after {
|
101 |
+
/*content: 'ON';*/
|
102 |
+
background-color: #2271b1;
|
103 |
+
}
|
104 |
+
|
105 |
+
.block-editor__container input[type="checkbox"].litespeed-tiny-toggle {
|
106 |
+
border: 0 !important;
|
107 |
+
}
|
108 |
+
.block-editor__container input[type="checkbox"].litespeed-tiny-toggle:before {
|
109 |
+
top: 5px;
|
110 |
+
left: 7px;
|
111 |
+
}
|
112 |
+
.block-editor__container input[type="checkbox"].litespeed-tiny-toggle:checked:before {
|
113 |
+
left: 23px;
|
114 |
+
}
|
115 |
+
|
116 |
/* =======================================
|
117 |
UTILITIES - structure
|
118 |
======================================= */
|
assets/js/litespeed-cache-admin.js
CHANGED
@@ -177,9 +177,9 @@ var _litespeed_dots ;
|
|
177 |
* Freeze or melt a specific crawler
|
178 |
* @since 4.3
|
179 |
*/
|
180 |
-
if ( $( '
|
181 |
-
$( '
|
182 |
-
var crawler_id = $( this ).attr( "data-
|
183 |
var crawler_id = Number( crawler_id.split('-').pop() );
|
184 |
var that = this;
|
185 |
$.ajax( {
|
177 |
* Freeze or melt a specific crawler
|
178 |
* @since 4.3
|
179 |
*/
|
180 |
+
if ( $( '[data-crawler-list] [data-litespeed_toggle_id]' ).length > 0 ) {
|
181 |
+
$( '[data-crawler-list] [data-litespeed_toggle_id]' ).on( 'click', function( e ) {
|
182 |
+
var crawler_id = $( this ).attr( "data-litespeed_toggle_id" );
|
183 |
var crawler_id = Number( crawler_id.split('-').pop() );
|
184 |
var that = this;
|
185 |
$.ajax( {
|
data/const.default.ini
CHANGED
@@ -277,6 +277,9 @@ debug-inc = ''
|
|
277 |
; O_DEBUG_EXC
|
278 |
debug-exc = ''
|
279 |
|
|
|
|
|
|
|
280 |
|
281 |
;; -------------------------------------------------- ;;
|
282 |
;; -------------- DB Optm ----------------- ;;
|
@@ -525,6 +528,12 @@ media-lazy_uri_exc = ''
|
|
525 |
; O_MEDIA_LQIP_EXC
|
526 |
media-lqip_exc = ''
|
527 |
|
|
|
|
|
|
|
|
|
|
|
|
|
528 |
|
529 |
|
530 |
|
@@ -551,9 +560,11 @@ img_optm-webp_replace = false
|
|
551 |
img_optm-webp_attr = 'img.src
|
552 |
div.data-thumb
|
553 |
img.data-src
|
|
|
554 |
div.data-large_image
|
555 |
img.retina_logo_url
|
556 |
div.data-parallax-image
|
|
|
557 |
video.poster'
|
558 |
|
559 |
img_optm-webp_replace_srcset = false
|
277 |
; O_DEBUG_EXC
|
278 |
debug-exc = ''
|
279 |
|
280 |
+
; O_DEBUG_EXC_STRINGS
|
281 |
+
debug-exc_strings = ''
|
282 |
+
|
283 |
|
284 |
;; -------------------------------------------------- ;;
|
285 |
;; -------------- DB Optm ----------------- ;;
|
528 |
; O_MEDIA_LQIP_EXC
|
529 |
media-lqip_exc = ''
|
530 |
|
531 |
+
; O_MEDIA_VPI
|
532 |
+
media-vpi = false
|
533 |
+
|
534 |
+
; O_MEDIA_VPI_CRON
|
535 |
+
media-vpi_cron = true
|
536 |
+
|
537 |
|
538 |
|
539 |
|
560 |
img_optm-webp_attr = 'img.src
|
561 |
div.data-thumb
|
562 |
img.data-src
|
563 |
+
img.data-lazyload
|
564 |
div.data-large_image
|
565 |
img.retina_logo_url
|
566 |
div.data-parallax-image
|
567 |
+
div.data-vc-parallax-image
|
568 |
video.poster'
|
569 |
|
570 |
img_optm-webp_replace_srcset = false
|
data/const.network_default.ini
CHANGED
@@ -135,6 +135,9 @@ debug-inc = ''
|
|
135 |
; O_DEBUG_EXC
|
136 |
debug-exc = ''
|
137 |
|
|
|
|
|
|
|
138 |
|
139 |
;; -------------------------------------------------- ;;
|
140 |
;; -------------- Image Optm ----------------- ;;
|
135 |
; O_DEBUG_EXC
|
136 |
debug-exc = ''
|
137 |
|
138 |
+
; O_DEBUG_EXC_STRINGS
|
139 |
+
debug-exc_strings = ''
|
140 |
+
|
141 |
|
142 |
;; -------------------------------------------------- ;;
|
143 |
;; -------------- Image Optm ----------------- ;;
|
lang/litespeed-cache.pot
CHANGED
@@ -2,9 +2,9 @@
|
|
2 |
# This file is distributed under the same license as the LiteSpeed Cache package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: LiteSpeed Cache
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/litespeed-cache\n"
|
7 |
-
"POT-Creation-Date: 2022-
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -36,172 +36,172 @@ msgstr ""
|
|
36 |
msgid "Upgraded successfully."
|
37 |
msgstr ""
|
38 |
|
39 |
-
#: src/admin-display.cls.php:
|
40 |
msgid "Dashboard"
|
41 |
msgstr ""
|
42 |
|
43 |
-
#: src/admin-display.cls.php:
|
44 |
msgid "General"
|
45 |
msgstr ""
|
46 |
|
47 |
-
#: src/admin-display.cls.php:
|
48 |
#: tpl/cache/entry_network.tpl.php:6
|
49 |
msgid "Cache"
|
50 |
msgstr ""
|
51 |
|
52 |
-
#: src/admin-display.cls.php:
|
53 |
msgid "CDN"
|
54 |
msgstr ""
|
55 |
|
56 |
-
#: src/admin-display.cls.php:
|
57 |
-
#: tpl/dash/dashboard.tpl.php:
|
58 |
msgid "Image Optimization"
|
59 |
msgstr ""
|
60 |
|
61 |
-
#: src/admin-display.cls.php:
|
62 |
msgid "Page Optimization"
|
63 |
msgstr ""
|
64 |
|
65 |
-
#: src/admin-display.cls.php:
|
66 |
msgid "Database"
|
67 |
msgstr ""
|
68 |
|
69 |
-
#: src/admin-display.cls.php:
|
70 |
msgid "Crawler"
|
71 |
msgstr ""
|
72 |
|
73 |
-
#: src/admin-display.cls.php:
|
74 |
msgid "Toolbox"
|
75 |
msgstr ""
|
76 |
|
77 |
-
#: src/admin-display.cls.php:
|
78 |
msgid "Cookie Name"
|
79 |
msgstr ""
|
80 |
|
81 |
-
#: src/admin-display.cls.php:
|
82 |
msgid "Cookie Values"
|
83 |
msgstr ""
|
84 |
|
85 |
-
#: src/admin-display.cls.php:
|
86 |
msgid "Remove cookie simulation"
|
87 |
msgstr ""
|
88 |
|
89 |
-
#: src/admin-display.cls.php:
|
90 |
msgid "Add new cookie to simulate"
|
91 |
msgstr ""
|
92 |
|
93 |
-
#: src/admin-display.cls.php:
|
94 |
msgid "CDN URL to be used. For example, %s"
|
95 |
msgstr ""
|
96 |
|
97 |
-
#: src/admin-display.cls.php:
|
98 |
msgid "Remove CDN URL"
|
99 |
msgstr ""
|
100 |
|
101 |
-
#: src/admin-display.cls.php:
|
102 |
msgid "Add new CDN URL"
|
103 |
msgstr ""
|
104 |
|
105 |
-
#: src/admin-display.cls.php:
|
106 |
-
#: src/admin-display.cls.php:
|
107 |
#: tpl/cache/settings-cache.tpl.php:19
|
108 |
#: tpl/cache/settings_inc.cache_mobile.tpl.php:71 tpl/cdn/settings.tpl.php:49
|
109 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
110 |
#: tpl/page_optm/settings_media.tpl.php:159
|
111 |
-
#: tpl/
|
112 |
-
#: tpl/toolbox/settings-debug.tpl.php:34
|
113 |
msgid "ON"
|
114 |
msgstr ""
|
115 |
|
116 |
-
#: src/admin-display.cls.php:
|
117 |
-
#: src/admin-display.cls.php:
|
118 |
#: tpl/cache/settings-cache.tpl.php:19
|
119 |
#: tpl/cache/settings_inc.object.tpl.php:210 tpl/cdn/settings.tpl.php:54
|
120 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
121 |
#: tpl/page_optm/settings_media.tpl.php:162
|
122 |
-
#: tpl/toolbox/settings-debug.tpl.php:
|
123 |
msgid "OFF"
|
124 |
msgstr ""
|
125 |
|
126 |
-
#: src/admin-display.cls.php:
|
127 |
msgid "Settings"
|
128 |
msgstr ""
|
129 |
|
130 |
-
#: src/admin-display.cls.php:
|
131 |
msgid "Dismiss"
|
132 |
msgstr ""
|
133 |
|
134 |
-
#: src/admin-display.cls.php:
|
135 |
msgid "Save Changes"
|
136 |
msgstr ""
|
137 |
|
138 |
-
#: src/admin-display.cls.php:
|
139 |
msgid "This setting is overwritten by the PHP constant %s"
|
140 |
msgstr ""
|
141 |
|
142 |
-
#: src/admin-display.cls.php:
|
143 |
msgid "This setting is overwritten by the primary site setting"
|
144 |
msgstr ""
|
145 |
|
146 |
-
#: src/admin-display.cls.php:
|
147 |
msgid "This setting is overwritten by the Network setting"
|
148 |
msgstr ""
|
149 |
|
150 |
-
#: src/admin-display.cls.php:
|
151 |
msgid "currently set to %s"
|
152 |
msgstr ""
|
153 |
|
154 |
-
#: src/admin-display.cls.php:
|
155 |
#: tpl/crawler/settings-general.tpl.php:60
|
156 |
#: tpl/crawler/settings-general.tpl.php:74
|
157 |
#: tpl/crawler/settings-general.tpl.php:89 tpl/esi_widget_edit.php:70
|
158 |
msgid "seconds"
|
159 |
msgstr ""
|
160 |
|
161 |
-
#: src/admin-display.cls.php:
|
162 |
#: tpl/cdn/settings.tpl.php:99
|
163 |
msgid "Default value"
|
164 |
msgstr ""
|
165 |
|
166 |
-
#: src/admin-display.cls.php:
|
167 |
msgid "Invalid rewrite rule"
|
168 |
msgstr ""
|
169 |
|
170 |
-
#: src/admin-display.cls.php:
|
171 |
msgid "Path must end with %s"
|
172 |
msgstr ""
|
173 |
|
174 |
-
#: src/admin-display.cls.php:
|
175 |
msgid "Minimum value"
|
176 |
msgstr ""
|
177 |
|
178 |
-
#: src/admin-display.cls.php:
|
179 |
msgid "Maximum value"
|
180 |
msgstr ""
|
181 |
|
182 |
-
#: src/admin-display.cls.php:
|
183 |
msgid "Zero, or"
|
184 |
msgstr ""
|
185 |
|
186 |
-
#: src/admin-display.cls.php:
|
187 |
msgid "Larger than"
|
188 |
msgstr ""
|
189 |
|
190 |
-
#: src/admin-display.cls.php:
|
191 |
msgid "Smaller than"
|
192 |
msgstr ""
|
193 |
|
194 |
-
#: src/admin-display.cls.php:
|
195 |
msgid "Value range"
|
196 |
msgstr ""
|
197 |
|
198 |
-
#: src/admin-display.cls.php:
|
199 |
msgid "Invalid IP"
|
200 |
msgstr ""
|
201 |
|
202 |
-
#: src/admin-display.cls.php:
|
203 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
204 |
#: tpl/page_optm/settings_html.tpl.php:85
|
|
|
205 |
#: tpl/page_optm/settings_media_exc.tpl.php:26
|
206 |
#: tpl/page_optm/settings_tuning.tpl.php:35
|
207 |
#: tpl/page_optm/settings_tuning.tpl.php:56
|
@@ -212,47 +212,47 @@ msgstr ""
|
|
212 |
msgid "API"
|
213 |
msgstr ""
|
214 |
|
215 |
-
#: src/admin-display.cls.php:
|
216 |
msgid "Server variable(s) %s available to override this setting."
|
217 |
msgstr ""
|
218 |
|
219 |
-
#: src/admin-display.cls.php:
|
220 |
msgid "The URLs will be compared to the REQUEST_URI server variable."
|
221 |
msgstr ""
|
222 |
|
223 |
-
#: src/admin-display.cls.php:
|
224 |
msgid "For example, for %s, %s can be used here."
|
225 |
msgstr ""
|
226 |
|
227 |
-
#: src/admin-display.cls.php:
|
228 |
msgid "To match the beginning, add %s to the beginning of the item."
|
229 |
msgstr ""
|
230 |
|
231 |
-
#: src/admin-display.cls.php:
|
232 |
msgid "To do an exact match, add %s to the end of the URL."
|
233 |
msgstr ""
|
234 |
|
235 |
-
#: src/admin-display.cls.php:
|
236 |
msgid "One per line."
|
237 |
msgstr ""
|
238 |
|
239 |
-
#: src/admin-display.cls.php:
|
240 |
msgid "%s groups"
|
241 |
msgstr ""
|
242 |
|
243 |
-
#: src/admin-display.cls.php:
|
244 |
msgid "%s images"
|
245 |
msgstr ""
|
246 |
|
247 |
-
#: src/admin-display.cls.php:
|
248 |
msgid "%s group"
|
249 |
msgstr ""
|
250 |
|
251 |
-
#: src/admin-display.cls.php:
|
252 |
msgid "%s image"
|
253 |
msgstr ""
|
254 |
|
255 |
-
#: src/admin-settings.cls.php:
|
256 |
msgid "Options saved."
|
257 |
msgstr ""
|
258 |
|
@@ -280,84 +280,136 @@ msgstr ""
|
|
280 |
msgid "Communicated with Cloudflare successfully."
|
281 |
msgstr ""
|
282 |
|
283 |
-
#: src/
|
284 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
285 |
msgid "Cloud Error"
|
286 |
msgstr ""
|
287 |
|
288 |
-
#: src/cloud.cls.php:
|
289 |
msgid "No available Cloud Node."
|
290 |
msgstr ""
|
291 |
|
292 |
-
#: src/cloud.cls.php:
|
293 |
msgid "No available Cloud Node after checked server load."
|
294 |
msgstr ""
|
295 |
|
296 |
-
#: src/cloud.cls.php:
|
297 |
msgid "Please try after %1$s for service %2$s."
|
298 |
msgstr ""
|
299 |
|
300 |
-
#: src/cloud.cls.php:
|
301 |
msgid "Failed to request via WordPress"
|
302 |
msgstr ""
|
303 |
|
304 |
-
#: src/cloud.cls.php:
|
305 |
msgid "Redetected node"
|
306 |
msgstr ""
|
307 |
|
308 |
-
#: src/cloud.cls.php:
|
309 |
msgid ""
|
310 |
"We are working hard to improve your online service experience. The service "
|
311 |
"will be unavailable while we work. We apologize for any inconvenience."
|
312 |
msgstr ""
|
313 |
|
314 |
-
#: src/cloud.cls.php:
|
315 |
-
msgid "Message from QUIC.cloud server"
|
316 |
-
msgstr ""
|
317 |
-
|
318 |
-
#: src/cloud.cls.php:702
|
319 |
msgid "Good news from QUIC.cloud server"
|
320 |
msgstr ""
|
321 |
|
322 |
-
#: src/cloud.cls.php:
|
323 |
msgid "%1$s plugin version %2$s required for this action."
|
324 |
msgstr ""
|
325 |
|
326 |
-
#: src/cloud.cls.php:
|
327 |
msgid "Failed to communicate with QUIC.cloud server"
|
328 |
msgstr ""
|
329 |
|
330 |
-
#: src/cloud.cls.php:
|
331 |
msgid ""
|
332 |
"Site not recognized. Domain Key has been automatically removed. Please "
|
333 |
"request a new one."
|
334 |
msgstr ""
|
335 |
|
336 |
-
#: src/cloud.cls.php:
|
337 |
msgid "Click here to set."
|
338 |
msgstr ""
|
339 |
|
340 |
-
#: src/cloud.cls.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
341 |
msgid ""
|
342 |
"Applied for Domain Key successfully. Please wait for result. Domain Key will "
|
343 |
"be automatically sent to your WordPress."
|
344 |
msgstr ""
|
345 |
|
346 |
-
#: src/cloud.cls.php:
|
347 |
msgid ""
|
348 |
"Congratulations, your Domain Key has been approved! The setting has been "
|
349 |
"updated accordingly."
|
350 |
msgstr ""
|
351 |
|
352 |
-
#: src/cloud.cls.php:
|
353 |
msgid "Domain Key hash mismatch"
|
354 |
msgstr ""
|
355 |
|
356 |
-
#: src/cloud.cls.php:
|
357 |
msgid "Sync credit allowance with Cloud Server successfully."
|
358 |
msgstr ""
|
359 |
|
360 |
-
#: src/conf.cls.php:
|
361 |
msgid "Changed setting successfully."
|
362 |
msgstr ""
|
363 |
|
@@ -381,35 +433,27 @@ msgstr ""
|
|
381 |
msgid "Sitemap created successfully: %d items"
|
382 |
msgstr ""
|
383 |
|
384 |
-
#: src/crawler.cls.php:
|
385 |
msgid "Crawler disabled list is cleared! All crawlers are set to active! "
|
386 |
msgstr ""
|
387 |
|
388 |
-
#: src/crawler.cls.php:
|
389 |
msgid "Guest"
|
390 |
msgstr ""
|
391 |
|
392 |
-
#: src/crawler.cls.php:
|
393 |
msgid "Manually added to blocklist"
|
394 |
msgstr ""
|
395 |
|
396 |
-
#: src/crawler.cls.php:
|
397 |
msgid "Previously existed in blocklist"
|
398 |
msgstr ""
|
399 |
|
400 |
-
#: src/css.cls.php:
|
401 |
msgid "Queue cleared successfully."
|
402 |
msgstr ""
|
403 |
|
404 |
-
#: src/
|
405 |
-
msgid "%1$s %2$s files left in queue"
|
406 |
-
msgstr ""
|
407 |
-
|
408 |
-
#: src/css.cls.php:533
|
409 |
-
msgid "Cancel"
|
410 |
-
msgstr ""
|
411 |
-
|
412 |
-
#: src/data.cls.php:219
|
413 |
msgid ""
|
414 |
"The database has been upgrading in the background since %s. This message "
|
415 |
"will disappear once upgrade is complete."
|
@@ -423,7 +467,7 @@ msgid ""
|
|
423 |
"errors."
|
424 |
msgstr ""
|
425 |
|
426 |
-
#: src/data.upgrade.func.php:101 src/lang.cls.php:
|
427 |
msgid "JS Combine"
|
428 |
msgstr ""
|
429 |
|
@@ -500,7 +544,7 @@ msgid "Please see %s for more details."
|
|
500 |
msgstr ""
|
501 |
|
502 |
#: src/doc.cls.php:53 src/doc.cls.php:105 tpl/cdn/manage.tpl.php:66
|
503 |
-
#: tpl/dash/dashboard.tpl.php:
|
504 |
#: tpl/img_optm/summary.tpl.php:102 tpl/inc/check_cache_disabled.php:42
|
505 |
msgid "Learn More"
|
506 |
msgstr ""
|
@@ -577,93 +621,104 @@ msgid "There is proceeding queue not pulled yet. Queue info: %s."
|
|
577 |
msgstr ""
|
578 |
|
579 |
#: src/error.cls.php:84
|
580 |
-
msgid "The site is not
|
581 |
msgstr ""
|
582 |
|
583 |
#: src/error.cls.php:88
|
|
|
|
|
|
|
|
|
584 |
msgid ""
|
585 |
"The domain key is not correct. Please try to sync your domain key again."
|
586 |
msgstr ""
|
587 |
|
588 |
-
#: src/error.cls.php:
|
589 |
msgid "The current server is under heavy load."
|
590 |
msgstr ""
|
591 |
|
592 |
-
#: src/error.cls.php:
|
593 |
msgid "Online node needs to be redetected."
|
594 |
msgstr ""
|
595 |
|
596 |
-
#: src/error.cls.php:
|
597 |
msgid "Credits are not enough to proceed the current request."
|
598 |
msgstr ""
|
599 |
|
600 |
-
#: src/error.cls.php:
|
601 |
msgid "%s file not writable."
|
602 |
msgstr ""
|
603 |
|
604 |
-
#: src/error.cls.php:
|
605 |
msgid "Could not find %1$s in %2$s."
|
606 |
msgstr ""
|
607 |
|
608 |
-
#: src/error.cls.php:
|
609 |
msgid "Invalid login cookie. Please check the %s file."
|
610 |
msgstr ""
|
611 |
|
612 |
-
#: src/error.cls.php:
|
613 |
msgid "Failed to back up %s file, aborted changes."
|
614 |
msgstr ""
|
615 |
|
616 |
-
#: src/error.cls.php:
|
617 |
msgid "%s file not readable."
|
618 |
msgstr ""
|
619 |
|
620 |
-
#: src/error.cls.php:
|
621 |
msgid "Failed to get %s file contents."
|
622 |
msgstr ""
|
623 |
|
624 |
-
#: src/error.cls.php:
|
625 |
msgid "Failed to create table %s! SQL: %s."
|
626 |
msgstr ""
|
627 |
|
628 |
-
#: src/error.cls.php:
|
629 |
msgid "Crawler disabled by the server admin."
|
630 |
msgstr ""
|
631 |
|
632 |
-
#: src/error.cls.php:
|
633 |
msgid "Previous request too recent. Please try again later."
|
634 |
msgstr ""
|
635 |
|
636 |
-
#: src/error.cls.php:
|
637 |
msgid "Previous request too recent. Please try again after %s."
|
638 |
msgstr ""
|
639 |
|
640 |
-
#: src/error.cls.php:
|
641 |
msgid "Your application is waiting for approval."
|
642 |
msgstr ""
|
643 |
|
644 |
-
#: src/error.cls.php:
|
645 |
msgid "The callback validation to your domain failed due to hash mismatch."
|
646 |
msgstr ""
|
647 |
|
648 |
-
#: src/error.cls.php:
|
649 |
msgid ""
|
650 |
"The callback validation to your domain failed. Please make sure there is no "
|
651 |
"firewall blocking our servers."
|
652 |
msgstr ""
|
653 |
|
654 |
-
#: src/error.cls.php:
|
655 |
msgid ""
|
656 |
"The callback validation to your domain failed. Please make sure there is no "
|
657 |
"firewall blocking our servers. Response code: "
|
658 |
msgstr ""
|
659 |
|
660 |
-
#: src/error.cls.php:
|
661 |
msgid ""
|
662 |
"Your domain has been forbidden from using our services due to a previous "
|
663 |
"policy violation."
|
664 |
msgstr ""
|
665 |
|
666 |
-
#: src/error.cls.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
667 |
msgid "Unknown error"
|
668 |
msgstr ""
|
669 |
|
@@ -703,41 +758,49 @@ msgstr ""
|
|
703 |
msgid "Private Cache Hits"
|
704 |
msgstr ""
|
705 |
|
706 |
-
#: src/gui.cls.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
707 |
msgid "Purge this page"
|
708 |
msgstr ""
|
709 |
|
710 |
-
#: src/gui.cls.php:
|
711 |
msgid "Mark this page as "
|
712 |
msgstr ""
|
713 |
|
714 |
-
#: src/gui.cls.php:
|
715 |
msgid "Forced cacheable"
|
716 |
msgstr ""
|
717 |
|
718 |
-
#: src/gui.cls.php:
|
719 |
msgid "Non cacheable"
|
720 |
msgstr ""
|
721 |
|
722 |
-
#: src/gui.cls.php:
|
723 |
msgid "Private cache"
|
724 |
msgstr ""
|
725 |
|
726 |
-
#: src/gui.cls.php:
|
727 |
msgid "No optimization"
|
728 |
msgstr ""
|
729 |
|
730 |
-
#: src/gui.cls.php:
|
731 |
msgid "More settings"
|
732 |
msgstr ""
|
733 |
|
734 |
-
#: src/gui.cls.php:
|
735 |
-
#: src/gui.cls.php:
|
736 |
-
#: src/gui.cls.php:
|
737 |
-
#: src/gui.cls.php:
|
738 |
-
#: src/gui.cls.php:
|
739 |
-
#: src/gui.cls.php:
|
740 |
-
#: src/gui.cls.php:
|
741 |
#: tpl/page_optm/settings_media.tpl.php:125 tpl/toolbox/purge.tpl.php:37
|
742 |
#: tpl/toolbox/purge.tpl.php:43 tpl/toolbox/purge.tpl.php:52
|
743 |
#: tpl/toolbox/purge.tpl.php:61 tpl/toolbox/purge.tpl.php:70
|
@@ -747,77 +810,77 @@ msgstr ""
|
|
747 |
msgid "Purge All"
|
748 |
msgstr ""
|
749 |
|
750 |
-
#: src/gui.cls.php:
|
751 |
msgid "LSCache"
|
752 |
msgstr ""
|
753 |
|
754 |
-
#: src/gui.cls.php:
|
755 |
msgid "CSS/JS Cache"
|
756 |
msgstr ""
|
757 |
|
758 |
-
#: src/gui.cls.php:
|
759 |
-
#: tpl/dash/dashboard.tpl.php:
|
760 |
msgid "Object Cache"
|
761 |
msgstr ""
|
762 |
|
763 |
-
#: src/gui.cls.php:
|
764 |
msgid "Opcode Cache"
|
765 |
msgstr ""
|
766 |
|
767 |
-
#: src/gui.cls.php:
|
768 |
msgid "Localized Resources"
|
769 |
msgstr ""
|
770 |
|
771 |
-
#: src/gui.cls.php:
|
772 |
#: tpl/page_optm/settings_media.tpl.php:125 tpl/toolbox/purge.tpl.php:97
|
773 |
msgid "LQIP Cache"
|
774 |
msgstr ""
|
775 |
|
776 |
-
#: src/gui.cls.php:
|
777 |
#: tpl/toolbox/purge.tpl.php:106
|
778 |
msgid "Gravatar Cache"
|
779 |
msgstr ""
|
780 |
|
781 |
-
#: src/gui.cls.php:
|
782 |
msgid "LiteSpeed Cache Purge All"
|
783 |
msgstr ""
|
784 |
|
785 |
-
#: src/gui.cls.php:
|
786 |
#: tpl/db_optm/entry.tpl.php:6
|
787 |
msgid "Manage"
|
788 |
msgstr ""
|
789 |
|
790 |
-
#: src/gui.cls.php:
|
791 |
msgid "Cloudflare"
|
792 |
msgstr ""
|
793 |
|
794 |
-
#: src/gui.cls.php:
|
795 |
msgid "Remove all previous unfinished image optimization requests."
|
796 |
msgstr ""
|
797 |
|
798 |
-
#: src/gui.cls.php:
|
799 |
msgid "Clean Up Unfinished Data"
|
800 |
msgstr ""
|
801 |
|
802 |
-
#: src/gui.cls.php:
|
803 |
msgid "Install %s"
|
804 |
msgstr ""
|
805 |
|
806 |
-
#: src/gui.cls.php:
|
807 |
msgid "Install Now"
|
808 |
msgstr ""
|
809 |
|
810 |
-
#: src/gui.cls.php:
|
811 |
msgid ""
|
812 |
"<a href=\"%1$s\" %2$s>View version %3$s details</a> or <a href=\"%4$s\" %5$s "
|
813 |
"target=\"_blank\">update now</a>."
|
814 |
msgstr ""
|
815 |
|
816 |
-
#: src/gui.cls.php:
|
817 |
msgid "View %1$s version %2$s details"
|
818 |
msgstr ""
|
819 |
|
820 |
-
#: src/gui.cls.php:
|
821 |
msgid "Update %s now"
|
822 |
msgstr ""
|
823 |
|
@@ -825,7 +888,7 @@ msgstr ""
|
|
825 |
msgid "Mobile Agent Rules"
|
826 |
msgstr ""
|
827 |
|
828 |
-
#: src/htaccess.cls.php:
|
829 |
msgid ""
|
830 |
"<p>Please add/replace the following codes into the beginning of %1$s:</p> "
|
831 |
"%2$s"
|
@@ -947,11 +1010,11 @@ msgstr ""
|
|
947 |
msgid "Images not requested"
|
948 |
msgstr ""
|
949 |
|
950 |
-
#: src/lang.cls.php:24 tpl/dash/dashboard.tpl.php:
|
951 |
msgid "Images requested"
|
952 |
msgstr ""
|
953 |
|
954 |
-
#: src/lang.cls.php:25 tpl/dash/dashboard.tpl.php:
|
955 |
msgid "Images notified to pull"
|
956 |
msgstr ""
|
957 |
|
@@ -987,768 +1050,816 @@ msgstr ""
|
|
987 |
msgid "Images with wrong meta"
|
988 |
msgstr ""
|
989 |
|
990 |
-
#: src/lang.cls.php:
|
991 |
-
msgid "
|
|
|
|
|
992 |
msgstr ""
|
993 |
|
994 |
#: src/lang.cls.php:54
|
995 |
-
msgid "
|
|
|
996 |
msgstr ""
|
997 |
|
998 |
#: src/lang.cls.php:55
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
999 |
msgid "Guest Mode User Agents"
|
1000 |
msgstr ""
|
1001 |
|
1002 |
-
#: src/lang.cls.php:
|
1003 |
msgid "Guest Mode IPs"
|
1004 |
msgstr ""
|
1005 |
|
1006 |
-
#: src/lang.cls.php:
|
1007 |
msgid "Enable Cache"
|
1008 |
msgstr ""
|
1009 |
|
1010 |
-
#: src/lang.cls.php:
|
1011 |
msgid "Browser Cache"
|
1012 |
msgstr ""
|
1013 |
|
1014 |
-
#: src/lang.cls.php:
|
1015 |
msgid "Default Public Cache TTL"
|
1016 |
msgstr ""
|
1017 |
|
1018 |
-
#: src/lang.cls.php:
|
1019 |
msgid "Default Private Cache TTL"
|
1020 |
msgstr ""
|
1021 |
|
1022 |
-
#: src/lang.cls.php:
|
1023 |
msgid "Default Front Page TTL"
|
1024 |
msgstr ""
|
1025 |
|
1026 |
-
#: src/lang.cls.php:
|
1027 |
msgid "Default Feed TTL"
|
1028 |
msgstr ""
|
1029 |
|
1030 |
-
#: src/lang.cls.php:
|
1031 |
msgid "Default REST TTL"
|
1032 |
msgstr ""
|
1033 |
|
1034 |
-
#: src/lang.cls.php:
|
1035 |
msgid "Default HTTP Status Code Page TTL"
|
1036 |
msgstr ""
|
1037 |
|
1038 |
-
#: src/lang.cls.php:
|
1039 |
msgid "Browser Cache TTL"
|
1040 |
msgstr ""
|
1041 |
|
1042 |
-
#: src/lang.cls.php:
|
1043 |
msgid "Automatically Upgrade"
|
1044 |
msgstr ""
|
1045 |
|
1046 |
-
#: src/lang.cls.php:
|
1047 |
msgid "Guest Mode"
|
1048 |
msgstr ""
|
1049 |
|
1050 |
-
#: src/lang.cls.php:
|
1051 |
msgid "Guest Optimization"
|
1052 |
msgstr ""
|
1053 |
|
1054 |
-
#: src/lang.cls.php:
|
1055 |
msgid "Notifications"
|
1056 |
msgstr ""
|
1057 |
|
1058 |
-
#: src/lang.cls.php:
|
1059 |
msgid "Cache Logged-in Users"
|
1060 |
msgstr ""
|
1061 |
|
1062 |
-
#: src/lang.cls.php:
|
1063 |
msgid "Cache Commenters"
|
1064 |
msgstr ""
|
1065 |
|
1066 |
-
#: src/lang.cls.php:
|
1067 |
msgid "Cache REST API"
|
1068 |
msgstr ""
|
1069 |
|
1070 |
-
#: src/lang.cls.php:
|
1071 |
msgid "Cache Login Page"
|
1072 |
msgstr ""
|
1073 |
|
1074 |
-
#: src/lang.cls.php:
|
1075 |
msgid "Cache favicon.ico"
|
1076 |
msgstr ""
|
1077 |
|
1078 |
-
#: src/lang.cls.php:
|
1079 |
msgid "Cache PHP Resources"
|
1080 |
msgstr ""
|
1081 |
|
1082 |
-
#: src/lang.cls.php:
|
1083 |
msgid "Cache Mobile"
|
1084 |
msgstr ""
|
1085 |
|
1086 |
-
#: src/lang.cls.php:
|
1087 |
msgid "List of Mobile User Agents"
|
1088 |
msgstr ""
|
1089 |
|
1090 |
-
#: src/lang.cls.php:
|
1091 |
msgid "Private Cached URIs"
|
1092 |
msgstr ""
|
1093 |
|
1094 |
-
#: src/lang.cls.php:
|
1095 |
msgid "Drop Query String"
|
1096 |
msgstr ""
|
1097 |
|
1098 |
-
#: src/lang.cls.php:
|
1099 |
msgid "Method"
|
1100 |
msgstr ""
|
1101 |
|
1102 |
-
#: src/lang.cls.php:
|
1103 |
msgid "Host"
|
1104 |
msgstr ""
|
1105 |
|
1106 |
-
#: src/lang.cls.php:
|
1107 |
msgid "Port"
|
1108 |
msgstr ""
|
1109 |
|
1110 |
-
#: src/lang.cls.php:
|
1111 |
msgid "Default Object Lifetime"
|
1112 |
msgstr ""
|
1113 |
|
1114 |
-
#: src/lang.cls.php:
|
1115 |
msgid "Username"
|
1116 |
msgstr ""
|
1117 |
|
1118 |
-
#: src/lang.cls.php:
|
1119 |
msgid "Password"
|
1120 |
msgstr ""
|
1121 |
|
1122 |
-
#: src/lang.cls.php:
|
1123 |
msgid "Redis Database ID"
|
1124 |
msgstr ""
|
1125 |
|
1126 |
-
#: src/lang.cls.php:
|
1127 |
msgid "Global Groups"
|
1128 |
msgstr ""
|
1129 |
|
1130 |
-
#: src/lang.cls.php:
|
1131 |
msgid "Do Not Cache Groups"
|
1132 |
msgstr ""
|
1133 |
|
1134 |
-
#: src/lang.cls.php:
|
1135 |
msgid "Persistent Connection"
|
1136 |
msgstr ""
|
1137 |
|
1138 |
-
#: src/lang.cls.php:
|
1139 |
msgid "Cache WP-Admin"
|
1140 |
msgstr ""
|
1141 |
|
1142 |
-
#: src/lang.cls.php:
|
1143 |
msgid "Store Transients"
|
1144 |
msgstr ""
|
1145 |
|
1146 |
-
#: src/lang.cls.php:
|
1147 |
msgid "Purge All On Upgrade"
|
1148 |
msgstr ""
|
1149 |
|
1150 |
-
#: src/lang.cls.php:
|
1151 |
msgid "Serve Stale"
|
1152 |
msgstr ""
|
1153 |
|
1154 |
-
#: src/lang.cls.php:
|
1155 |
msgid "Scheduled Purge URLs"
|
1156 |
msgstr ""
|
1157 |
|
1158 |
-
#: src/lang.cls.php:
|
1159 |
msgid "Scheduled Purge Time"
|
1160 |
msgstr ""
|
1161 |
|
1162 |
-
#: src/lang.cls.php:
|
1163 |
msgid "Force Cache URIs"
|
1164 |
msgstr ""
|
1165 |
|
1166 |
-
#: src/lang.cls.php:
|
1167 |
msgid "Force Public Cache URIs"
|
1168 |
msgstr ""
|
1169 |
|
1170 |
-
#: src/lang.cls.php:
|
1171 |
msgid "Do Not Cache URIs"
|
1172 |
msgstr ""
|
1173 |
|
1174 |
-
#: src/lang.cls.php:
|
1175 |
msgid "Do Not Cache Query Strings"
|
1176 |
msgstr ""
|
1177 |
|
1178 |
-
#: src/lang.cls.php:
|
1179 |
msgid "Do Not Cache Categories"
|
1180 |
msgstr ""
|
1181 |
|
1182 |
-
#: src/lang.cls.php:
|
1183 |
msgid "Do Not Cache Tags"
|
1184 |
msgstr ""
|
1185 |
|
1186 |
-
#: src/lang.cls.php:
|
1187 |
msgid "Do Not Cache Roles"
|
1188 |
msgstr ""
|
1189 |
|
1190 |
-
#: src/lang.cls.php:
|
1191 |
msgid "CSS Minify"
|
1192 |
msgstr ""
|
1193 |
|
1194 |
-
#: src/lang.cls.php:
|
1195 |
msgid "CSS Combine"
|
1196 |
msgstr ""
|
1197 |
|
1198 |
-
#: src/lang.cls.php:
|
1199 |
msgid "CSS Combine External and Inline"
|
1200 |
msgstr ""
|
1201 |
|
1202 |
-
#: src/lang.cls.php:
|
1203 |
msgid "Generate UCSS"
|
1204 |
msgstr ""
|
1205 |
|
1206 |
-
#: src/lang.cls.php:
|
1207 |
msgid "UCSS Inline"
|
1208 |
msgstr ""
|
1209 |
|
1210 |
-
#: src/lang.cls.php:
|
1211 |
msgid "UCSS Allowlist"
|
1212 |
msgstr ""
|
1213 |
|
1214 |
-
#: src/lang.cls.php:
|
1215 |
msgid "UCSS URI Excludes"
|
1216 |
msgstr ""
|
1217 |
|
1218 |
-
#: src/lang.cls.php:
|
1219 |
msgid "JS Minify"
|
1220 |
msgstr ""
|
1221 |
|
1222 |
-
#: src/lang.cls.php:
|
1223 |
msgid "JS Combine External and Inline"
|
1224 |
msgstr ""
|
1225 |
|
1226 |
-
#: src/lang.cls.php:
|
1227 |
msgid "HTML Minify"
|
1228 |
msgstr ""
|
1229 |
|
1230 |
-
#: src/lang.cls.php:
|
1231 |
msgid "HTML Lazy Load Selectors"
|
1232 |
msgstr ""
|
1233 |
|
1234 |
-
#: src/lang.cls.php:
|
1235 |
msgid "Load CSS Asynchronously"
|
1236 |
msgstr ""
|
1237 |
|
1238 |
-
#: src/lang.cls.php:
|
1239 |
msgid "CCSS Per URL"
|
1240 |
msgstr ""
|
1241 |
|
1242 |
-
#: src/lang.cls.php:
|
1243 |
msgid "Inline CSS Async Lib"
|
1244 |
msgstr ""
|
1245 |
|
1246 |
-
#: src/lang.cls.php:
|
1247 |
msgid "Font Display Optimization"
|
1248 |
msgstr ""
|
1249 |
|
1250 |
-
#: src/lang.cls.php:
|
1251 |
msgid "Load JS Deferred"
|
1252 |
msgstr ""
|
1253 |
|
1254 |
-
#: src/lang.cls.php:
|
1255 |
msgid "Localize Resources"
|
1256 |
msgstr ""
|
1257 |
|
1258 |
-
#: src/lang.cls.php:
|
1259 |
msgid "Localization Files"
|
1260 |
msgstr ""
|
1261 |
|
1262 |
-
#: src/lang.cls.php:
|
1263 |
msgid "DNS Prefetch"
|
1264 |
msgstr ""
|
1265 |
|
1266 |
-
#: src/lang.cls.php:
|
1267 |
msgid "DNS Prefetch Control"
|
1268 |
msgstr ""
|
1269 |
|
1270 |
-
#: src/lang.cls.php:
|
1271 |
msgid "CSS Excludes"
|
1272 |
msgstr ""
|
1273 |
|
1274 |
-
#: src/lang.cls.php:
|
1275 |
msgid "JS Excludes"
|
1276 |
msgstr ""
|
1277 |
|
1278 |
-
#: src/lang.cls.php:
|
1279 |
msgid "Remove Query Strings"
|
1280 |
msgstr ""
|
1281 |
|
1282 |
-
#: src/lang.cls.php:
|
1283 |
msgid "Load Google Fonts Asynchronously"
|
1284 |
msgstr ""
|
1285 |
|
1286 |
-
#: src/lang.cls.php:
|
1287 |
msgid "Remove Google Fonts"
|
1288 |
msgstr ""
|
1289 |
|
1290 |
-
#: src/lang.cls.php:
|
1291 |
msgid "Critical CSS Rules"
|
1292 |
msgstr ""
|
1293 |
|
1294 |
-
#: src/lang.cls.php:
|
1295 |
msgid "Separate CCSS Cache Post Types"
|
1296 |
msgstr ""
|
1297 |
|
1298 |
-
#: src/lang.cls.php:
|
1299 |
msgid "Separate CCSS Cache URIs"
|
1300 |
msgstr ""
|
1301 |
|
1302 |
-
#: src/lang.cls.php:
|
1303 |
msgid "JS Deferred Excludes"
|
1304 |
msgstr ""
|
1305 |
|
1306 |
-
#: src/lang.cls.php:
|
1307 |
msgid "Guest Mode JS Excludes"
|
1308 |
msgstr ""
|
1309 |
|
1310 |
-
#: src/lang.cls.php:
|
1311 |
msgid "Remove WordPress Emoji"
|
1312 |
msgstr ""
|
1313 |
|
1314 |
-
#: src/lang.cls.php:
|
1315 |
msgid "Remove Noscript Tags"
|
1316 |
msgstr ""
|
1317 |
|
1318 |
-
#: src/lang.cls.php:
|
1319 |
msgid "URI Excludes"
|
1320 |
msgstr ""
|
1321 |
|
1322 |
-
#: src/lang.cls.php:
|
1323 |
msgid "Optimize for Guests Only"
|
1324 |
msgstr ""
|
1325 |
|
1326 |
-
#: src/lang.cls.php:
|
1327 |
msgid "Role Excludes"
|
1328 |
msgstr ""
|
1329 |
|
1330 |
-
#: src/lang.cls.php:
|
1331 |
msgid "Gravatar Cache Cron"
|
1332 |
msgstr ""
|
1333 |
|
1334 |
-
#: src/lang.cls.php:
|
1335 |
msgid "Gravatar Cache TTL"
|
1336 |
msgstr ""
|
1337 |
|
1338 |
-
#: src/lang.cls.php:
|
1339 |
msgid "Lazy Load Images"
|
1340 |
msgstr ""
|
1341 |
|
1342 |
-
#: src/lang.cls.php:
|
1343 |
msgid "Lazy Load Image Excludes"
|
1344 |
msgstr ""
|
1345 |
|
1346 |
-
#: src/lang.cls.php:
|
1347 |
msgid "Lazy Load Image Class Name Excludes"
|
1348 |
msgstr ""
|
1349 |
|
1350 |
-
#: src/lang.cls.php:
|
1351 |
msgid "Lazy Load Image Parent Class Name Excludes"
|
1352 |
msgstr ""
|
1353 |
|
1354 |
-
#: src/lang.cls.php:
|
1355 |
msgid "Lazy Load Iframe Class Name Excludes"
|
1356 |
msgstr ""
|
1357 |
|
1358 |
-
#: src/lang.cls.php:
|
1359 |
msgid "Lazy Load Iframe Parent Class Name Excludes"
|
1360 |
msgstr ""
|
1361 |
|
1362 |
-
#: src/lang.cls.php:
|
1363 |
msgid "Lazy Load URI Excludes"
|
1364 |
msgstr ""
|
1365 |
|
1366 |
-
#: src/lang.cls.php:
|
1367 |
msgid "LQIP Excludes"
|
1368 |
msgstr ""
|
1369 |
|
1370 |
-
#: src/lang.cls.php:
|
1371 |
msgid "Basic Image Placeholder"
|
1372 |
msgstr ""
|
1373 |
|
1374 |
-
#: src/lang.cls.php:
|
1375 |
msgid "Responsive Placeholder"
|
1376 |
msgstr ""
|
1377 |
|
1378 |
-
#: src/lang.cls.php:
|
1379 |
msgid "Responsive Placeholder Color"
|
1380 |
msgstr ""
|
1381 |
|
1382 |
-
#: src/lang.cls.php:
|
1383 |
msgid "Responsive Placeholder SVG"
|
1384 |
msgstr ""
|
1385 |
|
1386 |
-
#: src/lang.cls.php:
|
1387 |
msgid "LQIP Cloud Generator"
|
1388 |
msgstr ""
|
1389 |
|
1390 |
-
#: src/lang.cls.php:
|
1391 |
msgid "LQIP Quality"
|
1392 |
msgstr ""
|
1393 |
|
1394 |
-
#: src/lang.cls.php:
|
1395 |
msgid "LQIP Minimum Dimensions"
|
1396 |
msgstr ""
|
1397 |
|
1398 |
-
#: src/lang.cls.php:
|
1399 |
msgid "Generate LQIP In Background"
|
1400 |
msgstr ""
|
1401 |
|
1402 |
-
#: src/lang.cls.php:
|
1403 |
msgid "Lazy Load Iframes"
|
1404 |
msgstr ""
|
1405 |
|
1406 |
-
#: src/lang.cls.php:
|
1407 |
msgid "Add Missing Sizes"
|
1408 |
msgstr ""
|
1409 |
|
1410 |
-
#: src/lang.cls.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1411 |
msgid "Auto Request Cron"
|
1412 |
msgstr ""
|
1413 |
|
1414 |
-
#: src/lang.cls.php:
|
1415 |
msgid "Auto Pull Cron"
|
1416 |
msgstr ""
|
1417 |
|
1418 |
-
#: src/lang.cls.php:
|
1419 |
msgid "Optimize Original Images"
|
1420 |
msgstr ""
|
1421 |
|
1422 |
-
#: src/lang.cls.php:
|
1423 |
msgid "Remove Original Backups"
|
1424 |
msgstr ""
|
1425 |
|
1426 |
-
#: src/lang.cls.php:
|
1427 |
msgid "Create WebP Versions"
|
1428 |
msgstr ""
|
1429 |
|
1430 |
-
#: src/lang.cls.php:
|
1431 |
msgid "Optimize Losslessly"
|
1432 |
msgstr ""
|
1433 |
|
1434 |
-
#: src/lang.cls.php:
|
1435 |
msgid "Preserve EXIF/XMP data"
|
1436 |
msgstr ""
|
1437 |
|
1438 |
-
#: src/lang.cls.php:
|
1439 |
msgid "WebP Attribute To Replace"
|
1440 |
msgstr ""
|
1441 |
|
1442 |
-
#: src/lang.cls.php:
|
1443 |
msgid "WebP For Extra srcset"
|
1444 |
msgstr ""
|
1445 |
|
1446 |
-
#: src/lang.cls.php:
|
1447 |
msgid "WordPress Image Quality Control"
|
1448 |
msgstr ""
|
1449 |
|
1450 |
-
#: src/lang.cls.php:
|
1451 |
msgid "Enable ESI"
|
1452 |
msgstr ""
|
1453 |
|
1454 |
-
#: src/lang.cls.php:
|
1455 |
msgid "Cache Admin Bar"
|
1456 |
msgstr ""
|
1457 |
|
1458 |
-
#: src/lang.cls.php:
|
1459 |
msgid "Cache Comment Form"
|
1460 |
msgstr ""
|
1461 |
|
1462 |
-
#: src/lang.cls.php:
|
1463 |
msgid "ESI Nonces"
|
1464 |
msgstr ""
|
1465 |
|
1466 |
-
#: src/lang.cls.php:
|
1467 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
1468 |
msgid "Vary Group"
|
1469 |
msgstr ""
|
1470 |
|
1471 |
-
#: src/lang.cls.php:
|
1472 |
msgid "Purge All Hooks"
|
1473 |
msgstr ""
|
1474 |
|
1475 |
-
#: src/lang.cls.php:
|
1476 |
msgid "Improve HTTP/HTTPS Compatibility"
|
1477 |
msgstr ""
|
1478 |
|
1479 |
-
#: src/lang.cls.php:
|
1480 |
msgid "Instant Click"
|
1481 |
msgstr ""
|
1482 |
|
1483 |
-
#: src/lang.cls.php:
|
1484 |
msgid "Do Not Cache Cookies"
|
1485 |
msgstr ""
|
1486 |
|
1487 |
-
#: src/lang.cls.php:
|
1488 |
msgid "Do Not Cache User Agents"
|
1489 |
msgstr ""
|
1490 |
|
1491 |
-
#: src/lang.cls.php:
|
1492 |
msgid "Login Cookie"
|
1493 |
msgstr ""
|
1494 |
|
1495 |
-
#: src/lang.cls.php:
|
1496 |
msgid "Image WebP Replacement"
|
1497 |
msgstr ""
|
1498 |
|
1499 |
-
#: src/lang.cls.php:
|
1500 |
msgid "Frontend Heartbeat Control"
|
1501 |
msgstr ""
|
1502 |
|
1503 |
-
#: src/lang.cls.php:
|
1504 |
msgid "Frontend Heartbeat TTL"
|
1505 |
msgstr ""
|
1506 |
|
1507 |
-
#: src/lang.cls.php:
|
1508 |
msgid "Backend Heartbeat Control"
|
1509 |
msgstr ""
|
1510 |
|
1511 |
-
#: src/lang.cls.php:
|
1512 |
msgid "Backend Heartbeat TTL"
|
1513 |
msgstr ""
|
1514 |
|
1515 |
-
#: src/lang.cls.php:
|
1516 |
msgid "Editor Heartbeat"
|
1517 |
msgstr ""
|
1518 |
|
1519 |
-
#: src/lang.cls.php:
|
1520 |
msgid "Editor Heartbeat TTL"
|
1521 |
msgstr ""
|
1522 |
|
1523 |
-
#: src/lang.cls.php:
|
1524 |
msgid "QUIC.cloud CDN"
|
1525 |
msgstr ""
|
1526 |
|
1527 |
-
#: src/lang.cls.php:
|
1528 |
msgid "Use CDN Mapping"
|
1529 |
msgstr ""
|
1530 |
|
1531 |
-
#: src/lang.cls.php:
|
1532 |
msgid "CDN URL"
|
1533 |
msgstr ""
|
1534 |
|
1535 |
-
#: src/lang.cls.php:
|
1536 |
msgid "Include Images"
|
1537 |
msgstr ""
|
1538 |
|
1539 |
-
#: src/lang.cls.php:
|
1540 |
msgid "Include CSS"
|
1541 |
msgstr ""
|
1542 |
|
1543 |
-
#: src/lang.cls.php:
|
1544 |
msgid "Include JS"
|
1545 |
msgstr ""
|
1546 |
|
1547 |
-
#: src/lang.cls.php:
|
1548 |
msgid "Include File Types"
|
1549 |
msgstr ""
|
1550 |
|
1551 |
-
#: src/lang.cls.php:
|
1552 |
msgid "HTML Attribute To Replace"
|
1553 |
msgstr ""
|
1554 |
|
1555 |
-
#: src/lang.cls.php:
|
1556 |
msgid "Original URLs"
|
1557 |
msgstr ""
|
1558 |
|
1559 |
-
#: src/lang.cls.php:
|
1560 |
msgid "Included Directories"
|
1561 |
msgstr ""
|
1562 |
|
1563 |
-
#: src/lang.cls.php:
|
1564 |
msgid "Exclude Path"
|
1565 |
msgstr ""
|
1566 |
|
1567 |
-
#: src/lang.cls.php:
|
1568 |
msgid "Cloudflare API"
|
1569 |
msgstr ""
|
1570 |
|
1571 |
-
#: src/lang.cls.php:
|
1572 |
msgid "Delay"
|
1573 |
msgstr ""
|
1574 |
|
1575 |
-
#: src/lang.cls.php:
|
1576 |
msgid "Run Duration"
|
1577 |
msgstr ""
|
1578 |
|
1579 |
-
#: src/lang.cls.php:
|
1580 |
msgid "Interval Between Runs"
|
1581 |
msgstr ""
|
1582 |
|
1583 |
-
#: src/lang.cls.php:
|
1584 |
msgid "Crawl Interval"
|
1585 |
msgstr ""
|
1586 |
|
1587 |
-
#: src/lang.cls.php:
|
1588 |
msgid "Threads"
|
1589 |
msgstr ""
|
1590 |
|
1591 |
-
#: src/lang.cls.php:
|
1592 |
msgid "Timeout"
|
1593 |
msgstr ""
|
1594 |
|
1595 |
-
#: src/lang.cls.php:
|
1596 |
msgid "Server Load Limit"
|
1597 |
msgstr ""
|
1598 |
|
1599 |
-
#: src/lang.cls.php:
|
1600 |
msgid "Role Simulation"
|
1601 |
msgstr ""
|
1602 |
|
1603 |
-
#: src/lang.cls.php:
|
1604 |
msgid "Cookie Simulation"
|
1605 |
msgstr ""
|
1606 |
|
1607 |
-
#: src/lang.cls.php:
|
1608 |
msgid "Custom Sitemap"
|
1609 |
msgstr ""
|
1610 |
|
1611 |
-
#: src/lang.cls.php:
|
1612 |
msgid "Drop Domain from Sitemap"
|
1613 |
msgstr ""
|
1614 |
|
1615 |
-
#: src/lang.cls.php:
|
1616 |
msgid "Sitemap Timeout"
|
1617 |
msgstr ""
|
1618 |
|
1619 |
-
#: src/lang.cls.php:
|
1620 |
msgid "Disable All Features"
|
1621 |
msgstr ""
|
1622 |
|
1623 |
-
#: src/lang.cls.php:
|
1624 |
msgid "Debug Log"
|
1625 |
msgstr ""
|
1626 |
|
1627 |
-
#: src/lang.cls.php:
|
1628 |
msgid "Admin IPs"
|
1629 |
msgstr ""
|
1630 |
|
1631 |
-
#: src/lang.cls.php:
|
1632 |
msgid "Debug Level"
|
1633 |
msgstr ""
|
1634 |
|
1635 |
-
#: src/lang.cls.php:
|
1636 |
msgid "Log File Size Limit"
|
1637 |
msgstr ""
|
1638 |
|
1639 |
-
#: src/lang.cls.php:
|
1640 |
msgid "Log Cookies"
|
1641 |
msgstr ""
|
1642 |
|
1643 |
-
#: src/lang.cls.php:
|
1644 |
msgid "Collapse Query Strings"
|
1645 |
msgstr ""
|
1646 |
|
1647 |
-
#: src/lang.cls.php:
|
1648 |
msgid "Debug URI Includes"
|
1649 |
msgstr ""
|
1650 |
|
1651 |
-
#: src/lang.cls.php:
|
1652 |
msgid "Debug URI Excludes"
|
1653 |
msgstr ""
|
1654 |
|
1655 |
-
#: src/lang.cls.php:
|
|
|
|
|
|
|
|
|
1656 |
msgid "Revisions Max Number"
|
1657 |
msgstr ""
|
1658 |
|
1659 |
-
#: src/lang.cls.php:
|
1660 |
msgid "Revisions Max Age"
|
1661 |
msgstr ""
|
1662 |
|
1663 |
-
#: src/media.cls.php:
|
1664 |
msgid "LiteSpeed Optimization"
|
1665 |
msgstr ""
|
1666 |
|
1667 |
-
#: src/media.cls.php:
|
1668 |
-
#: src/media.cls.php:
|
1669 |
msgid "(optm)"
|
1670 |
msgstr ""
|
1671 |
|
1672 |
-
#: src/media.cls.php:
|
1673 |
msgid "Currently using optimized version of file."
|
1674 |
msgstr ""
|
1675 |
|
1676 |
-
#: src/media.cls.php:
|
1677 |
msgid "Click to switch to original (unoptimized) version."
|
1678 |
msgstr ""
|
1679 |
|
1680 |
-
#: src/media.cls.php:
|
1681 |
msgid "(non-optm)"
|
1682 |
msgstr ""
|
1683 |
|
1684 |
-
#: src/media.cls.php:
|
1685 |
msgid "Currently using original (unoptimized) version of file."
|
1686 |
msgstr ""
|
1687 |
|
1688 |
-
#: src/media.cls.php:
|
1689 |
msgid "Click to switch to optimized version."
|
1690 |
msgstr ""
|
1691 |
|
1692 |
-
#: src/media.cls.php:
|
1693 |
msgid "Original file reduced by %1$s (%2$s)"
|
1694 |
msgstr ""
|
1695 |
|
1696 |
-
#: src/media.cls.php:
|
1697 |
msgid "Orig saved %s"
|
1698 |
msgstr ""
|
1699 |
|
1700 |
-
#: src/media.cls.php:
|
1701 |
msgid "Using optimized version of file. "
|
1702 |
msgstr ""
|
1703 |
|
1704 |
-
#: src/media.cls.php:
|
1705 |
msgid "No backup of original file exists."
|
1706 |
msgstr ""
|
1707 |
|
1708 |
-
#: src/media.cls.php:
|
1709 |
msgid "Congratulation! Your file was already optimized"
|
1710 |
msgstr ""
|
1711 |
|
1712 |
-
#: src/media.cls.php:
|
1713 |
msgid "Orig %s"
|
1714 |
msgstr ""
|
1715 |
|
1716 |
-
#: src/media.cls.php:
|
1717 |
msgid "(no savings)"
|
1718 |
msgstr ""
|
1719 |
|
1720 |
-
#: src/media.cls.php:
|
1721 |
msgid "Orig"
|
1722 |
msgstr ""
|
1723 |
|
1724 |
-
#: src/media.cls.php:
|
1725 |
msgid "Currently using optimized version of WebP file."
|
1726 |
msgstr ""
|
1727 |
|
1728 |
-
#: src/media.cls.php:
|
1729 |
msgid "Currently using original (unoptimized) version of WebP file."
|
1730 |
msgstr ""
|
1731 |
|
1732 |
-
#: src/media.cls.php:
|
1733 |
msgid "WebP file reduced by %1$s (%2$s)"
|
1734 |
msgstr ""
|
1735 |
|
1736 |
-
#: src/media.cls.php:
|
1737 |
msgid "WebP saved %s"
|
1738 |
msgstr ""
|
1739 |
|
1740 |
-
#: src/media.cls.php:
|
1741 |
msgid "No backup of unoptimized WebP file exists."
|
1742 |
msgstr ""
|
1743 |
|
1744 |
-
#: src/media.cls.php:
|
1745 |
msgid "WebP"
|
1746 |
msgstr ""
|
1747 |
|
1748 |
-
#: src/media.cls.php:
|
1749 |
msgid "Restore from backup"
|
1750 |
msgstr ""
|
1751 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1752 |
#: src/placeholder.cls.php:80 tpl/dash/network_dash.tpl.php:30
|
1753 |
msgid "LQIP"
|
1754 |
msgstr ""
|
@@ -1757,98 +1868,104 @@ msgstr ""
|
|
1757 |
msgid "LQIP image preview for size %s"
|
1758 |
msgstr ""
|
1759 |
|
1760 |
-
#: src/purge.cls.php:
|
1761 |
msgid "Purged all caches successfully."
|
1762 |
msgstr ""
|
1763 |
|
1764 |
-
#: src/purge.cls.php:
|
1765 |
msgid "Notified LiteSpeed Web Server to purge all LSCache entries."
|
1766 |
msgstr ""
|
1767 |
|
1768 |
-
#: src/purge.cls.php:
|
1769 |
msgid "Cleaned all Critical CSS files."
|
1770 |
msgstr ""
|
1771 |
|
1772 |
-
#: src/purge.cls.php:
|
1773 |
msgid "Cleaned all Unique CSS files."
|
1774 |
msgstr ""
|
1775 |
|
1776 |
-
#: src/purge.cls.php:
|
1777 |
msgid "Cleaned all LQIP files."
|
1778 |
msgstr ""
|
1779 |
|
1780 |
-
#: src/purge.cls.php:
|
1781 |
msgid "Cleaned all Gravatar files."
|
1782 |
msgstr ""
|
1783 |
|
1784 |
-
#: src/purge.cls.php:
|
1785 |
msgid "Cleaned all localized resource entries."
|
1786 |
msgstr ""
|
1787 |
|
1788 |
-
#: src/purge.cls.php:
|
1789 |
msgid "Notified LiteSpeed Web Server to purge CSS/JS entries."
|
1790 |
msgstr ""
|
1791 |
|
1792 |
-
#: src/purge.cls.php:
|
1793 |
msgid "Opcode cache is not enabled."
|
1794 |
msgstr ""
|
1795 |
|
1796 |
-
#: src/purge.cls.php:
|
1797 |
msgid "Reset the entire opcode cache successfully."
|
1798 |
msgstr ""
|
1799 |
|
1800 |
-
#: src/purge.cls.php:
|
1801 |
msgid "Object cache is not enabled."
|
1802 |
msgstr ""
|
1803 |
|
1804 |
-
#: src/purge.cls.php:
|
1805 |
msgid "Purge all object caches successfully."
|
1806 |
msgstr ""
|
1807 |
|
1808 |
-
#: src/purge.cls.php:
|
1809 |
msgid "Notified LiteSpeed Web Server to purge the front page."
|
1810 |
msgstr ""
|
1811 |
|
1812 |
-
#: src/purge.cls.php:
|
1813 |
msgid "Notified LiteSpeed Web Server to purge all pages."
|
1814 |
msgstr ""
|
1815 |
|
1816 |
-
#: src/purge.cls.php:
|
1817 |
msgid "Notified LiteSpeed Web Server to purge error pages."
|
1818 |
msgstr ""
|
1819 |
|
1820 |
-
#: src/purge.cls.php:
|
1821 |
msgid "Purge category %s"
|
1822 |
msgstr ""
|
1823 |
|
1824 |
-
#: src/purge.cls.php:
|
1825 |
msgid "Purge tag %s"
|
1826 |
msgstr ""
|
1827 |
|
1828 |
-
#: src/purge.cls.php:
|
1829 |
msgid "Purge url %s"
|
1830 |
msgstr ""
|
1831 |
|
1832 |
-
#: src/task.cls.php:
|
1833 |
msgid "Every Minute"
|
1834 |
msgstr ""
|
1835 |
|
1836 |
-
#: src/task.cls.php:
|
1837 |
msgid "LiteSpeed Crawler Cron"
|
1838 |
msgstr ""
|
1839 |
|
1840 |
-
#: src/utility.cls.php:
|
1841 |
msgid "right now"
|
1842 |
msgstr ""
|
1843 |
|
1844 |
-
#: src/utility.cls.php:
|
1845 |
msgid "just now"
|
1846 |
msgstr ""
|
1847 |
|
1848 |
-
#: src/utility.cls.php:
|
1849 |
msgid " %s ago"
|
1850 |
msgstr ""
|
1851 |
|
|
|
|
|
|
|
|
|
|
|
|
|
1852 |
#: thirdparty/woocommerce.content.tpl.php:16
|
1853 |
msgid "WooCommerce Settings"
|
1854 |
msgstr ""
|
@@ -1973,31 +2090,31 @@ msgstr ""
|
|
1973 |
msgid "Dismiss this notice"
|
1974 |
msgstr ""
|
1975 |
|
1976 |
-
#. #-#-#-#-# litespeed-cache.pot (LiteSpeed Cache
|
1977 |
#. Plugin Name of the plugin/theme
|
1978 |
-
#: tpl/banner/new_version.php:
|
1979 |
#: tpl/cache/more_settings_tip.tpl.php:15 tpl/inc/admin_footer.php:8
|
1980 |
msgid "LiteSpeed Cache"
|
1981 |
msgstr ""
|
1982 |
|
1983 |
-
#: tpl/banner/new_version.php:
|
1984 |
msgid "New Version Available!"
|
1985 |
msgstr ""
|
1986 |
|
1987 |
-
#: tpl/banner/new_version.php:
|
1988 |
msgid "New release %s is available now."
|
1989 |
msgstr ""
|
1990 |
|
1991 |
-
#: tpl/banner/new_version.php:
|
1992 |
-
#: tpl/toolbox/beta_test.tpl.php:
|
1993 |
msgid "Upgrade"
|
1994 |
msgstr ""
|
1995 |
|
1996 |
-
#: tpl/banner/new_version.php:
|
1997 |
msgid "Turn On Auto Upgrade"
|
1998 |
msgstr ""
|
1999 |
|
2000 |
-
#: tpl/banner/new_version.php:
|
2001 |
msgid "Maybe Later"
|
2002 |
msgstr ""
|
2003 |
|
@@ -2013,26 +2130,26 @@ msgstr ""
|
|
2013 |
msgid "Thank You for Using the LiteSpeed Cache Plugin!"
|
2014 |
msgstr ""
|
2015 |
|
2016 |
-
#: tpl/banner/score.php:28 tpl/dash/dashboard.tpl.php:
|
2017 |
msgid "Page Load Time"
|
2018 |
msgstr ""
|
2019 |
|
2020 |
#: tpl/banner/score.php:34 tpl/banner/score.php:74
|
2021 |
-
#: tpl/dash/dashboard.tpl.php:
|
2022 |
msgid "Before"
|
2023 |
msgstr ""
|
2024 |
|
2025 |
#: tpl/banner/score.php:45 tpl/banner/score.php:84
|
2026 |
-
#: tpl/dash/dashboard.tpl.php:
|
2027 |
msgid "After"
|
2028 |
msgstr ""
|
2029 |
|
2030 |
#: tpl/banner/score.php:55 tpl/banner/score.php:94
|
2031 |
-
#: tpl/dash/dashboard.tpl.php:
|
2032 |
msgid "Improved by"
|
2033 |
msgstr ""
|
2034 |
|
2035 |
-
#: tpl/banner/score.php:68 tpl/dash/dashboard.tpl.php:
|
2036 |
msgid "PageSpeed Score"
|
2037 |
msgstr ""
|
2038 |
|
@@ -2098,7 +2215,7 @@ msgid "Browser"
|
|
2098 |
msgstr ""
|
2099 |
|
2100 |
#: tpl/cache/entry.tpl.php:18 tpl/cache/entry_network.tpl.php:11
|
2101 |
-
#: tpl/toolbox/settings-debug.tpl.php:
|
2102 |
msgid "Advanced"
|
2103 |
msgstr ""
|
2104 |
|
@@ -2112,7 +2229,8 @@ msgstr ""
|
|
2112 |
|
2113 |
#: tpl/cache/more_settings_tip.tpl.php:12
|
2114 |
#: tpl/cache/settings-excludes.tpl.php:61
|
2115 |
-
#: tpl/cache/settings-excludes.tpl.php:94 tpl/cdn/
|
|
|
2116 |
#: tpl/crawler/settings-general.tpl.php:39
|
2117 |
#: tpl/crawler/settings-general.tpl.php:140
|
2118 |
#: tpl/crawler/settings-general.tpl.php:145
|
@@ -2194,7 +2312,7 @@ msgstr ""
|
|
2194 |
msgid "Please visit the <a %s>Information</a> page on how to test the cache."
|
2195 |
msgstr ""
|
2196 |
|
2197 |
-
#: tpl/cache/settings-cache.tpl.php:27 tpl/page_optm/entry.tpl.php:
|
2198 |
msgid "NOTICE"
|
2199 |
msgstr ""
|
2200 |
|
@@ -2295,7 +2413,7 @@ msgstr ""
|
|
2295 |
#: tpl/cache/settings-esi.tpl.php:35 tpl/cdn/manage.tpl.php:21
|
2296 |
#: tpl/crawler/summary.tpl.php:48 tpl/inc/check_cache_disabled.php:31
|
2297 |
#: tpl/inc/check_if_network_disable_all.php:18
|
2298 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
2299 |
#: tpl/page_optm/settings_localization.tpl.php:11
|
2300 |
msgid "WARNING"
|
2301 |
msgstr ""
|
@@ -2806,11 +2924,312 @@ msgid ""
|
|
2806 |
"the WordPress core is upgraded."
|
2807 |
msgstr ""
|
2808 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2809 |
#: tpl/cdn/entry.tpl.php:6 tpl/cdn/settings.tpl.php:21
|
2810 |
msgid "CDN Settings"
|
2811 |
msgstr ""
|
2812 |
|
2813 |
-
#: tpl/cdn/entry.tpl.php:
|
|
|
|
|
|
|
|
|
2814 |
msgid "LiteSpeed Cache CDN"
|
2815 |
msgstr ""
|
2816 |
|
@@ -3043,15 +3462,23 @@ msgstr ""
|
|
3043 |
msgid "Remove from Blocklist"
|
3044 |
msgstr ""
|
3045 |
|
3046 |
-
#: tpl/crawler/blacklist.tpl.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3047 |
msgid "Not blocklisted"
|
3048 |
msgstr ""
|
3049 |
|
3050 |
-
#: tpl/crawler/blacklist.tpl.php:
|
3051 |
msgid "Blocklisted due to not cacheable"
|
3052 |
msgstr ""
|
3053 |
|
3054 |
-
#: tpl/crawler/blacklist.tpl.php:
|
3055 |
#: tpl/crawler/summary.tpl.php:160 tpl/crawler/summary.tpl.php:184
|
3056 |
msgid "Blocklisted"
|
3057 |
msgstr ""
|
@@ -3102,7 +3529,7 @@ msgstr ""
|
|
3102 |
msgid "Sitemap Total"
|
3103 |
msgstr ""
|
3104 |
|
3105 |
-
#: tpl/crawler/map.tpl.php:44 tpl/dash/dashboard.tpl.php:
|
3106 |
msgid "Crawler Status"
|
3107 |
msgstr ""
|
3108 |
|
@@ -3275,15 +3702,15 @@ msgstr ""
|
|
3275 |
msgid "Run time for previous crawler"
|
3276 |
msgstr ""
|
3277 |
|
3278 |
-
#: tpl/crawler/summary.tpl.php:85 tpl/dash/dashboard.tpl.php:
|
3279 |
msgid "Current crawler started at"
|
3280 |
msgstr ""
|
3281 |
|
3282 |
-
#: tpl/crawler/summary.tpl.php:92 tpl/dash/dashboard.tpl.php:
|
3283 |
msgid "Last interval"
|
3284 |
msgstr ""
|
3285 |
|
3286 |
-
#: tpl/crawler/summary.tpl.php:99 tpl/dash/dashboard.tpl.php:
|
3287 |
msgid "Ended reason"
|
3288 |
msgstr ""
|
3289 |
|
@@ -3375,164 +3802,171 @@ msgstr ""
|
|
3375 |
msgid "No crawler meta file generated yet"
|
3376 |
msgstr ""
|
3377 |
|
3378 |
-
#: tpl/dash/dashboard.tpl.php:
|
3379 |
msgid "QUIC.cloud Service Usage Statistics"
|
3380 |
msgstr ""
|
3381 |
|
3382 |
-
#: tpl/dash/dashboard.tpl.php:
|
3383 |
msgid "Sync data from Cloud"
|
3384 |
msgstr ""
|
3385 |
|
3386 |
-
#: tpl/dash/dashboard.tpl.php:
|
3387 |
msgid "CDN Bandwidth"
|
3388 |
msgstr ""
|
3389 |
|
3390 |
-
#: tpl/dash/dashboard.tpl.php:
|
3391 |
msgid "Low Quality Image Placeholder"
|
3392 |
msgstr ""
|
3393 |
|
3394 |
-
#: tpl/dash/dashboard.tpl.php:
|
3395 |
msgid "Fast Queue Usage"
|
3396 |
msgstr ""
|
3397 |
|
3398 |
-
#: tpl/dash/dashboard.tpl.php:
|
3399 |
msgid "Usage"
|
3400 |
msgstr ""
|
3401 |
|
3402 |
-
#: tpl/dash/dashboard.tpl.php:
|
3403 |
msgid "PAYG Balance"
|
3404 |
msgstr ""
|
3405 |
|
3406 |
-
#: tpl/dash/dashboard.tpl.php:
|
3407 |
msgid "This Month Usage"
|
3408 |
msgstr ""
|
3409 |
|
3410 |
-
#: tpl/dash/dashboard.tpl.php:
|
3411 |
msgid "Pay as You Go Usage Statistics"
|
3412 |
msgstr ""
|
3413 |
|
3414 |
-
#: tpl/dash/dashboard.tpl.php:
|
3415 |
msgid "Total Usage"
|
3416 |
msgstr ""
|
3417 |
|
3418 |
-
#: tpl/dash/dashboard.tpl.php:
|
3419 |
msgid "Total images optimized in this month"
|
3420 |
msgstr ""
|
3421 |
|
3422 |
-
#: tpl/dash/dashboard.tpl.php:
|
3423 |
msgid "Remaining Daily Quota"
|
3424 |
msgstr ""
|
3425 |
|
3426 |
-
#: tpl/dash/dashboard.tpl.php:
|
3427 |
msgid "Go to QUIC.cloud dashboard"
|
3428 |
msgstr ""
|
3429 |
|
3430 |
-
#: tpl/dash/dashboard.tpl.php:
|
3431 |
msgid "Refresh page load time"
|
3432 |
msgstr ""
|
3433 |
|
3434 |
-
#: tpl/dash/dashboard.tpl.php:
|
3435 |
-
#: tpl/dash/dashboard.tpl.php:
|
3436 |
-
#: tpl/dash/dashboard.tpl.php:
|
3437 |
msgid "Last requested"
|
3438 |
msgstr ""
|
3439 |
|
3440 |
-
#: tpl/dash/dashboard.tpl.php:
|
3441 |
msgid "Current closest Cloud server is %s. Click to redetect."
|
3442 |
msgstr ""
|
3443 |
|
3444 |
-
#: tpl/dash/dashboard.tpl.php:
|
3445 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
3446 |
#: tpl/page_optm/settings_media.tpl.php:176
|
|
|
3447 |
msgid ""
|
3448 |
"Are you sure you want to redetect the closest cloud server for this service?"
|
3449 |
msgstr ""
|
3450 |
|
3451 |
-
#: tpl/dash/dashboard.tpl.php:
|
3452 |
msgid "Refresh page score"
|
3453 |
msgstr ""
|
3454 |
|
3455 |
-
#: tpl/dash/dashboard.tpl.php:
|
3456 |
msgid "Image Optimization Summary"
|
3457 |
msgstr ""
|
3458 |
|
3459 |
-
#: tpl/dash/dashboard.tpl.php:
|
3460 |
-
#: tpl/dash/dashboard.tpl.php:
|
3461 |
-
#: tpl/dash/dashboard.tpl.php:
|
|
|
3462 |
msgid "More"
|
3463 |
msgstr ""
|
3464 |
|
3465 |
-
#: tpl/dash/dashboard.tpl.php:
|
3466 |
msgid "Image Groups Prepared"
|
3467 |
msgstr ""
|
3468 |
|
3469 |
-
#: tpl/dash/dashboard.tpl.php:
|
3470 |
msgid "Images Requested"
|
3471 |
msgstr ""
|
3472 |
|
3473 |
-
#: tpl/dash/dashboard.tpl.php:
|
3474 |
msgid "Last Request"
|
3475 |
msgstr ""
|
3476 |
|
3477 |
-
#: tpl/dash/dashboard.tpl.php:
|
3478 |
msgid "Last Pull"
|
3479 |
msgstr ""
|
3480 |
|
3481 |
-
#: tpl/dash/dashboard.tpl.php:
|
3482 |
msgid "Cache Status"
|
3483 |
msgstr ""
|
3484 |
|
3485 |
-
#: tpl/dash/dashboard.tpl.php:
|
3486 |
msgid "Public Cache"
|
3487 |
msgstr ""
|
3488 |
|
3489 |
-
#: tpl/dash/dashboard.tpl.php:
|
3490 |
msgid "Private Cache"
|
3491 |
msgstr ""
|
3492 |
|
3493 |
-
#: tpl/dash/dashboard.tpl.php:
|
3494 |
msgid "Cache Stats"
|
3495 |
msgstr ""
|
3496 |
|
3497 |
-
#: tpl/dash/dashboard.tpl.php:
|
3498 |
msgid "Critical CSS"
|
3499 |
msgstr ""
|
3500 |
|
3501 |
-
#: tpl/dash/dashboard.tpl.php:
|
3502 |
-
#: tpl/dash/dashboard.tpl.php:
|
3503 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
3504 |
#: tpl/page_optm/settings_media.tpl.php:170
|
|
|
3505 |
msgid "Last generated"
|
3506 |
msgstr ""
|
3507 |
|
3508 |
-
#: tpl/dash/dashboard.tpl.php:
|
3509 |
-
#: tpl/dash/dashboard.tpl.php:
|
3510 |
msgid "Time to execute previous request"
|
3511 |
msgstr ""
|
3512 |
|
3513 |
-
#: tpl/dash/dashboard.tpl.php:
|
3514 |
-
#: tpl/dash/dashboard.tpl.php:
|
3515 |
msgid "Requests in queue"
|
3516 |
msgstr ""
|
3517 |
|
3518 |
-
#: tpl/dash/dashboard.tpl.php:
|
3519 |
-
#: tpl/dash/dashboard.tpl.php:
|
3520 |
msgid "Force cron"
|
3521 |
msgstr ""
|
3522 |
|
3523 |
-
#: tpl/dash/dashboard.tpl.php:
|
3524 |
msgid "Unique CSS"
|
3525 |
msgstr ""
|
3526 |
|
3527 |
-
#: tpl/dash/dashboard.tpl.php:
|
|
|
|
|
|
|
|
|
3528 |
msgid "Crawler(s)"
|
3529 |
msgstr ""
|
3530 |
|
3531 |
-
#: tpl/dash/dashboard.tpl.php:
|
3532 |
msgid "Currently active crawler"
|
3533 |
msgstr ""
|
3534 |
|
3535 |
-
#: tpl/dash/dashboard.tpl.php:
|
3536 |
msgid "<b>Last crawled:</b> %d item(s)"
|
3537 |
msgstr ""
|
3538 |
|
@@ -3722,7 +4156,7 @@ msgstr ""
|
|
3722 |
msgid "A TTL of 0 indicates do not cache."
|
3723 |
msgstr ""
|
3724 |
|
3725 |
-
#: tpl/general/entry.tpl.php:7 tpl/page_optm/entry.tpl.php:
|
3726 |
msgid "Tuning"
|
3727 |
msgstr ""
|
3728 |
|
@@ -3775,15 +4209,12 @@ msgstr ""
|
|
3775 |
msgid "Visit My Dashboard on QUIC.cloud"
|
3776 |
msgstr ""
|
3777 |
|
3778 |
-
#: tpl/general/settings.tpl.php:75 tpl/general/settings.tpl.php:77
|
3779 |
-
#: tpl/general/settings.tpl.php:106
|
3780 |
-
msgid "Link to QUIC.cloud"
|
3781 |
-
msgstr ""
|
3782 |
-
|
3783 |
#: tpl/general/settings.tpl.php:82 tpl/general/settings.tpl.php:93
|
3784 |
-
#: tpl/general/settings.tpl.php:105 tpl/general/settings.tpl.php:
|
3785 |
-
#: tpl/general/settings.tpl.php:
|
3786 |
-
#: tpl/general/settings.tpl.php:
|
|
|
|
|
3787 |
msgid "Notice"
|
3788 |
msgstr ""
|
3789 |
|
@@ -3841,72 +4272,81 @@ msgstr ""
|
|
3841 |
msgid "A Domain Key is required for QUIC.cloud online services."
|
3842 |
msgstr ""
|
3843 |
|
3844 |
-
#: tpl/general/settings.tpl.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3845 |
msgid "Current Cloud Nodes in Service"
|
3846 |
msgstr ""
|
3847 |
|
3848 |
-
#: tpl/general/settings.tpl.php:
|
3849 |
msgid "Click to clear all nodes for further redetection."
|
3850 |
msgstr ""
|
3851 |
|
3852 |
-
#: tpl/general/settings.tpl.php:
|
3853 |
msgid "Are you sure you want to clear all cloud nodes?"
|
3854 |
msgstr ""
|
3855 |
|
3856 |
-
#: tpl/general/settings.tpl.php:
|
3857 |
msgid "No cloud services currently in use"
|
3858 |
msgstr ""
|
3859 |
|
3860 |
-
#: tpl/general/settings.tpl.php:
|
3861 |
msgid "This option enables maximum optimization for Guest Mode visitors."
|
3862 |
msgstr ""
|
3863 |
|
3864 |
-
#: tpl/general/settings.tpl.php:
|
3865 |
msgid "Please read all warnings before enabling this option."
|
3866 |
msgstr ""
|
3867 |
|
3868 |
-
#: tpl/general/settings.tpl.php:
|
3869 |
msgid "Your %1s quota on %2s will still be in use."
|
3870 |
msgstr ""
|
3871 |
|
3872 |
-
#: tpl/general/settings.tpl.php:
|
3873 |
-
|
|
|
3874 |
msgstr ""
|
3875 |
|
3876 |
-
#: tpl/general/settings.tpl.php:
|
3877 |
msgid "You need to turn %s on to get maximum result."
|
3878 |
msgstr ""
|
3879 |
|
3880 |
-
#: tpl/general/settings.tpl.php:
|
3881 |
msgid ""
|
3882 |
"You need to turn %s on and finish all WebP generation to get maximum result."
|
3883 |
msgstr ""
|
3884 |
|
3885 |
-
#: tpl/general/settings.tpl.php:
|
3886 |
msgid ""
|
3887 |
"Enter this site's IP address to allow cloud services directly call IP "
|
3888 |
"instead of domain name. This eliminates the overhead of DNS and CDN lookups."
|
3889 |
msgstr ""
|
3890 |
|
3891 |
-
#: tpl/general/settings.tpl.php:
|
3892 |
msgid "Your server IP"
|
3893 |
msgstr ""
|
3894 |
|
3895 |
-
#: tpl/general/settings.tpl.php:
|
3896 |
msgid "Check my public IP from"
|
3897 |
msgstr ""
|
3898 |
|
3899 |
-
#: tpl/general/settings.tpl.php:
|
3900 |
msgid ""
|
3901 |
"the auto-detected IP may not be accurate if you have an additional outgoing "
|
3902 |
"IP set, or you have multiple IPs configured on your server."
|
3903 |
msgstr ""
|
3904 |
|
3905 |
-
#: tpl/general/settings.tpl.php:
|
3906 |
msgid "Please make sure this IP is the correct one for visiting your site."
|
3907 |
msgstr ""
|
3908 |
|
3909 |
-
#: tpl/general/settings.tpl.php:
|
3910 |
msgid ""
|
3911 |
"Turn this option ON to show latest news automatically, including hotfixes, "
|
3912 |
"new releases, available beta versions, and promotions."
|
@@ -4040,9 +4480,10 @@ msgstr ""
|
|
4040 |
msgid "The image compression quality setting of WordPress out of 100."
|
4041 |
msgstr ""
|
4042 |
|
4043 |
-
#: tpl/img_optm/summary.tpl.php:57 tpl/page_optm/settings_css.tpl.php:
|
4044 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4045 |
#: tpl/page_optm/settings_media.tpl.php:176
|
|
|
4046 |
msgid "Current closest Cloud server is %s. Click to redetect."
|
4047 |
msgstr ""
|
4048 |
|
@@ -4386,7 +4827,7 @@ msgid ""
|
|
4386 |
"dismissed. (<a %3$s>Learn More</a>)"
|
4387 |
msgstr ""
|
4388 |
|
4389 |
-
#: tpl/page_optm/entry.tpl.php:6 tpl/page_optm/settings_css.tpl.php:
|
4390 |
msgid "CSS Settings"
|
4391 |
msgstr ""
|
4392 |
|
@@ -4402,151 +4843,156 @@ msgstr ""
|
|
4402 |
msgid "Media Settings"
|
4403 |
msgstr ""
|
4404 |
|
4405 |
-
#: tpl/page_optm/entry.tpl.php:10
|
|
|
|
|
|
|
|
|
4406 |
msgid "Media Excludes"
|
4407 |
msgstr ""
|
4408 |
|
4409 |
-
#: tpl/page_optm/entry.tpl.php:
|
4410 |
msgid "Localization"
|
4411 |
msgstr ""
|
4412 |
|
4413 |
-
#: tpl/page_optm/entry.tpl.php:
|
4414 |
msgid "LiteSpeed Cache Page Optimization"
|
4415 |
msgstr ""
|
4416 |
|
4417 |
-
#: tpl/page_optm/entry.tpl.php:
|
4418 |
msgid ""
|
4419 |
"Please test thoroughly when enabling any option in this list. After changing "
|
4420 |
"Minify/Combine settings, please do a Purge All action."
|
4421 |
msgstr ""
|
4422 |
|
4423 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4424 |
msgid "Minify CSS files and inline CSS code."
|
4425 |
msgstr ""
|
4426 |
|
4427 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4428 |
msgid "Combine CSS files and inline CSS code."
|
4429 |
msgstr ""
|
4430 |
|
4431 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4432 |
msgid "How to Fix Problems Caused by CSS/JS Optimization."
|
4433 |
msgstr ""
|
4434 |
|
4435 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4436 |
msgid "Use QUIC.cloud online service to generate unique CSS."
|
4437 |
msgstr ""
|
4438 |
|
4439 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4440 |
msgid "This will drop the unused CSS on each page from the combined file."
|
4441 |
msgstr ""
|
4442 |
|
4443 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4444 |
msgid ""
|
4445 |
"Automatic generation of unique CSS is in the background via a cron-based "
|
4446 |
"queue."
|
4447 |
msgstr ""
|
4448 |
|
4449 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4450 |
msgid "Filter %s available for UCSS per page type generation."
|
4451 |
msgstr ""
|
4452 |
|
4453 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4454 |
msgid "This option is bypassed because %1$s option is %2$s."
|
4455 |
msgstr ""
|
4456 |
|
4457 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4458 |
msgid "Last requested cost"
|
4459 |
msgstr ""
|
4460 |
|
4461 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
|
|
4462 |
msgid "URL list in %s queue waiting for cron"
|
4463 |
msgstr ""
|
4464 |
|
4465 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4466 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4467 |
msgid "Run %s Queue Manually"
|
4468 |
msgstr ""
|
4469 |
|
4470 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4471 |
msgid ""
|
4472 |
"Inline UCSS to reduce the extra CSS file loading. This option will not be "
|
4473 |
"automatically turned on for %1$s pages. To use it on %1$s pages, please set "
|
4474 |
"it to ON."
|
4475 |
msgstr ""
|
4476 |
|
4477 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4478 |
msgid "This option will automatically bypass %s option."
|
4479 |
msgstr ""
|
4480 |
|
4481 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4482 |
msgid ""
|
4483 |
"Include external CSS and inline CSS in combined file when %1$s is also "
|
4484 |
"enabled. This option helps maintain the priorities of CSS, which should "
|
4485 |
"minimize potential errors caused by CSS Combine."
|
4486 |
msgstr ""
|
4487 |
|
4488 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4489 |
msgid "Optimize CSS delivery."
|
4490 |
msgstr ""
|
4491 |
|
4492 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4493 |
#: tpl/page_optm/settings_html.tpl.php:129 tpl/page_optm/settings_js.tpl.php:67
|
4494 |
msgid ""
|
4495 |
"This can improve your speed score in services like Pingdom, GTmetrix and "
|
4496 |
"PageSpeed."
|
4497 |
msgstr ""
|
4498 |
|
4499 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4500 |
msgid ""
|
4501 |
"Use QUIC.cloud online service to generate critical CSS and load remaining "
|
4502 |
"CSS asynchronously."
|
4503 |
msgstr ""
|
4504 |
|
4505 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4506 |
msgid ""
|
4507 |
"Automatic generation of critical CSS is in the background via a cron-based "
|
4508 |
"queue."
|
4509 |
msgstr ""
|
4510 |
|
4511 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4512 |
msgid ""
|
4513 |
"When this option is turned %s, it will also load Google Fonts asynchronously."
|
4514 |
msgstr ""
|
4515 |
|
4516 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4517 |
msgid "Elements with attribute %s in HTML code will be excluded."
|
4518 |
msgstr ""
|
4519 |
|
4520 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4521 |
msgid "This option is bypassed due to %s option."
|
4522 |
msgstr ""
|
4523 |
|
4524 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4525 |
msgid ""
|
4526 |
"Disable this option to generate CCSS per Post Type instead of per page. This "
|
4527 |
"can save significant CCSS quota, however it may result in incorrect CSS "
|
4528 |
"styling if your site uses a page builder."
|
4529 |
msgstr ""
|
4530 |
|
4531 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4532 |
msgid "This will inline the asynchronous CSS library to avoid render blocking."
|
4533 |
msgstr ""
|
4534 |
|
4535 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4536 |
msgid "Default"
|
4537 |
msgstr ""
|
4538 |
|
4539 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4540 |
msgid ""
|
4541 |
"Set this to append %1$s to all %2$s rules before caching CSS to specify how "
|
4542 |
"fonts should be displayed while being downloaded."
|
4543 |
msgstr ""
|
4544 |
|
4545 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4546 |
msgid "%s is recommended."
|
4547 |
msgstr ""
|
4548 |
|
4549 |
-
#: tpl/page_optm/settings_css.tpl.php:
|
4550 |
msgid "Swap"
|
4551 |
msgstr ""
|
4552 |
|
@@ -4696,27 +5142,34 @@ msgstr ""
|
|
4696 |
msgid "Localize external resources."
|
4697 |
msgstr ""
|
4698 |
|
4699 |
-
#: tpl/page_optm/settings_localization.tpl.php:
|
|
|
|
|
|
|
|
|
|
|
4700 |
msgid "Resources listed here will be copied and replaced with local URLs."
|
4701 |
msgstr ""
|
4702 |
|
4703 |
-
#: tpl/page_optm/settings_localization.tpl.php:
|
4704 |
msgid "HTTPS sources only."
|
4705 |
msgstr ""
|
4706 |
|
4707 |
-
#: tpl/page_optm/settings_localization.tpl.php:
|
4708 |
msgid ""
|
4709 |
"Comments are supported. Start a line with a %s to turn it into a comment "
|
4710 |
"line."
|
4711 |
msgstr ""
|
4712 |
|
4713 |
-
#: tpl/page_optm/settings_localization.tpl.php:
|
4714 |
-
|
|
|
4715 |
msgstr ""
|
4716 |
|
4717 |
-
#: tpl/page_optm/settings_localization.tpl.php:
|
4718 |
-
|
4719 |
-
|
|
|
4720 |
msgstr ""
|
4721 |
|
4722 |
#: tpl/page_optm/settings_media.tpl.php:27
|
@@ -4849,8 +5302,8 @@ msgid ""
|
|
4849 |
"and improve CLS (a Core Web Vitals metric)."
|
4850 |
msgstr ""
|
4851 |
|
4852 |
-
#: tpl/page_optm/settings_media.tpl.php:
|
4853 |
-
msgid "
|
4854 |
msgstr ""
|
4855 |
|
4856 |
#: tpl/page_optm/settings_media_exc.tpl.php:21
|
@@ -4986,54 +5439,75 @@ msgstr ""
|
|
4986 |
msgid "Selected roles will be excluded from all optimizations."
|
4987 |
msgstr ""
|
4988 |
|
4989 |
-
#: tpl/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4990 |
msgid "Try GitHub Version"
|
4991 |
msgstr ""
|
4992 |
|
4993 |
-
#: tpl/toolbox/beta_test.tpl.php:
|
4994 |
msgid ""
|
4995 |
"Use this section to switch plugin versions. To beta test a GitHub commit, "
|
4996 |
"enter the commit URL in the field below."
|
4997 |
msgstr ""
|
4998 |
|
4999 |
-
#: tpl/toolbox/beta_test.tpl.php:
|
5000 |
msgid "Use latest GitHub Dev commit"
|
5001 |
msgstr ""
|
5002 |
|
5003 |
-
#: tpl/toolbox/beta_test.tpl.php:
|
5004 |
msgid "Use latest GitHub Master commit"
|
5005 |
msgstr ""
|
5006 |
|
5007 |
-
#: tpl/toolbox/beta_test.tpl.php:
|
5008 |
msgid "Use latest WordPress release version"
|
5009 |
msgstr ""
|
5010 |
|
5011 |
-
#: tpl/toolbox/beta_test.tpl.php:
|
5012 |
msgid "OR"
|
5013 |
msgstr ""
|
5014 |
|
5015 |
-
#: tpl/toolbox/beta_test.tpl.php:
|
5016 |
msgid ""
|
5017 |
"Downgrade not recommended. May cause fatal error due to refactored code."
|
5018 |
msgstr ""
|
5019 |
|
5020 |
-
#: tpl/toolbox/beta_test.tpl.php:
|
5021 |
msgid ""
|
5022 |
"Press the %s button to use the most recent GitHub commit. Master is for "
|
5023 |
"release candidate & Dev is for experimental testing."
|
5024 |
msgstr ""
|
5025 |
|
5026 |
-
#: tpl/toolbox/beta_test.tpl.php:
|
5027 |
msgid "Use latest GitHub Dev/Master commit"
|
5028 |
msgstr ""
|
5029 |
|
5030 |
-
#: tpl/toolbox/beta_test.tpl.php:
|
5031 |
msgid ""
|
5032 |
"Press the %s button to stop beta testing and go back to the current release "
|
5033 |
"from the WordPress Plugin Directory."
|
5034 |
msgstr ""
|
5035 |
|
5036 |
-
#: tpl/toolbox/beta_test.tpl.php:
|
5037 |
msgid ""
|
5038 |
"In order to avoid an upgrade error, you must be using %1$s or later before "
|
5039 |
"you can upgrade to %2$s versions."
|
@@ -5087,7 +5561,7 @@ msgstr ""
|
|
5087 |
msgid "Report"
|
5088 |
msgstr ""
|
5089 |
|
5090 |
-
#: tpl/toolbox/entry.tpl.php:23 tpl/toolbox/settings-debug.tpl.php:
|
5091 |
msgid "Debug Settings"
|
5092 |
msgstr ""
|
5093 |
|
@@ -5268,7 +5742,7 @@ msgstr ""
|
|
5268 |
#: tpl/toolbox/purge.tpl.php:116
|
5269 |
msgid ""
|
5270 |
"Purge the cache entries created by this plugin except for Critical CSS & "
|
5271 |
-
"LQIP caches"
|
5272 |
msgstr ""
|
5273 |
|
5274 |
#: tpl/toolbox/purge.tpl.php:125
|
@@ -5406,10 +5880,6 @@ msgstr ""
|
|
5406 |
msgid "Generated links may be managed under <a %s>Settings</a>."
|
5407 |
msgstr ""
|
5408 |
|
5409 |
-
#: tpl/toolbox/report.tpl.php:81
|
5410 |
-
msgid "Notes"
|
5411 |
-
msgstr ""
|
5412 |
-
|
5413 |
#: tpl/toolbox/report.tpl.php:85
|
5414 |
msgid "Optional"
|
5415 |
msgstr ""
|
@@ -5429,80 +5899,96 @@ msgid ""
|
|
5429 |
"the WordPress support forum."
|
5430 |
msgstr ""
|
5431 |
|
5432 |
-
#: tpl/toolbox/settings-debug.tpl.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5433 |
msgid ""
|
5434 |
"This will disable LSCache and all optimization features for debug purpose."
|
5435 |
msgstr ""
|
5436 |
|
5437 |
-
#: tpl/toolbox/settings-debug.tpl.php:
|
5438 |
msgid "Admin IP Only"
|
5439 |
msgstr ""
|
5440 |
|
5441 |
-
#: tpl/toolbox/settings-debug.tpl.php:
|
5442 |
msgid "Outputs to WordPress debug log."
|
5443 |
msgstr ""
|
5444 |
|
5445 |
-
#: tpl/toolbox/settings-debug.tpl.php:
|
5446 |
msgid ""
|
5447 |
"To prevent filling up the disk, this setting should be OFF when everything "
|
5448 |
"is working."
|
5449 |
msgstr ""
|
5450 |
|
5451 |
-
#: tpl/toolbox/settings-debug.tpl.php:
|
5452 |
msgid ""
|
5453 |
"The Admin IP option will only output log messages on requests from admin IPs."
|
5454 |
msgstr ""
|
5455 |
|
5456 |
-
#: tpl/toolbox/settings-debug.tpl.php:
|
5457 |
msgid "The logs will be output to %s."
|
5458 |
msgstr ""
|
5459 |
|
5460 |
-
#: tpl/toolbox/settings-debug.tpl.php:
|
5461 |
msgid ""
|
5462 |
"Allows listed IPs (one per line) to perform certain actions from their "
|
5463 |
"browsers."
|
5464 |
msgstr ""
|
5465 |
|
5466 |
-
#: tpl/toolbox/settings-debug.tpl.php:
|
5467 |
msgid "Your IP"
|
5468 |
msgstr ""
|
5469 |
|
5470 |
-
#: tpl/toolbox/settings-debug.tpl.php:
|
5471 |
msgid "More information about the available commands can be found here."
|
5472 |
msgstr ""
|
5473 |
|
5474 |
-
#: tpl/toolbox/settings-debug.tpl.php:
|
5475 |
msgid "Basic"
|
5476 |
msgstr ""
|
5477 |
|
5478 |
-
#: tpl/toolbox/settings-debug.tpl.php:
|
5479 |
msgid "Advanced level will log more details."
|
5480 |
msgstr ""
|
5481 |
|
5482 |
-
#: tpl/toolbox/settings-debug.tpl.php:
|
5483 |
msgid "MB"
|
5484 |
msgstr ""
|
5485 |
|
5486 |
-
#: tpl/toolbox/settings-debug.tpl.php:
|
5487 |
msgid "Specify the maximum size of the log file."
|
5488 |
msgstr ""
|
5489 |
|
5490 |
-
#: tpl/toolbox/settings-debug.tpl.php:
|
5491 |
msgid "Log requested cookie values."
|
5492 |
msgstr ""
|
5493 |
|
5494 |
-
#: tpl/toolbox/settings-debug.tpl.php:
|
5495 |
msgid "Shorten query strings in the debug log to improve readability."
|
5496 |
msgstr ""
|
5497 |
|
5498 |
-
#: tpl/toolbox/settings-debug.tpl.php:
|
5499 |
msgid "Only log listed pages."
|
5500 |
msgstr ""
|
5501 |
|
5502 |
-
#: tpl/toolbox/settings-debug.tpl.php:
|
5503 |
msgid "Prevent any debug log of listed pages."
|
5504 |
msgstr ""
|
5505 |
|
|
|
|
|
|
|
|
|
5506 |
#. Plugin URI of the plugin/theme
|
5507 |
msgid ""
|
5508 |
"https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration"
|
2 |
# This file is distributed under the same license as the LiteSpeed Cache package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: LiteSpeed Cache 5.0\n"
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/litespeed-cache\n"
|
7 |
+
"POT-Creation-Date: 2022-07-19 15:06:33+00:00\n"
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
36 |
msgid "Upgraded successfully."
|
37 |
msgstr ""
|
38 |
|
39 |
+
#: src/admin-display.cls.php:119 tpl/dash/entry.tpl.php:6
|
40 |
msgid "Dashboard"
|
41 |
msgstr ""
|
42 |
|
43 |
+
#: src/admin-display.cls.php:121
|
44 |
msgid "General"
|
45 |
msgstr ""
|
46 |
|
47 |
+
#: src/admin-display.cls.php:123 tpl/cache/entry.tpl.php:6
|
48 |
#: tpl/cache/entry_network.tpl.php:6
|
49 |
msgid "Cache"
|
50 |
msgstr ""
|
51 |
|
52 |
+
#: src/admin-display.cls.php:125 tpl/cdn/settings.tpl.php:194
|
53 |
msgid "CDN"
|
54 |
msgstr ""
|
55 |
|
56 |
+
#: src/admin-display.cls.php:127 src/gui.cls.php:639
|
57 |
+
#: tpl/dash/dashboard.tpl.php:57 tpl/dash/network_dash.tpl.php:27
|
58 |
msgid "Image Optimization"
|
59 |
msgstr ""
|
60 |
|
61 |
+
#: src/admin-display.cls.php:129 tpl/dash/dashboard.tpl.php:58
|
62 |
msgid "Page Optimization"
|
63 |
msgstr ""
|
64 |
|
65 |
+
#: src/admin-display.cls.php:131
|
66 |
msgid "Database"
|
67 |
msgstr ""
|
68 |
|
69 |
+
#: src/admin-display.cls.php:133 src/lang.cls.php:245
|
70 |
msgid "Crawler"
|
71 |
msgstr ""
|
72 |
|
73 |
+
#: src/admin-display.cls.php:135
|
74 |
msgid "Toolbox"
|
75 |
msgstr ""
|
76 |
|
77 |
+
#: src/admin-display.cls.php:209
|
78 |
msgid "Cookie Name"
|
79 |
msgstr ""
|
80 |
|
81 |
+
#: src/admin-display.cls.php:210 tpl/crawler/settings-simulation.tpl.php:51
|
82 |
msgid "Cookie Values"
|
83 |
msgstr ""
|
84 |
|
85 |
+
#: src/admin-display.cls.php:212
|
86 |
msgid "Remove cookie simulation"
|
87 |
msgstr ""
|
88 |
|
89 |
+
#: src/admin-display.cls.php:213
|
90 |
msgid "Add new cookie to simulate"
|
91 |
msgstr ""
|
92 |
|
93 |
+
#: src/admin-display.cls.php:232
|
94 |
msgid "CDN URL to be used. For example, %s"
|
95 |
msgstr ""
|
96 |
|
97 |
+
#: src/admin-display.cls.php:234
|
98 |
msgid "Remove CDN URL"
|
99 |
msgstr ""
|
100 |
|
101 |
+
#: src/admin-display.cls.php:235
|
102 |
msgid "Add new CDN URL"
|
103 |
msgstr ""
|
104 |
|
105 |
+
#: src/admin-display.cls.php:236 src/admin-display.cls.php:888
|
106 |
+
#: src/admin-display.cls.php:917 src/admin-display.cls.php:968
|
107 |
#: tpl/cache/settings-cache.tpl.php:19
|
108 |
#: tpl/cache/settings_inc.cache_mobile.tpl.php:71 tpl/cdn/settings.tpl.php:49
|
109 |
+
#: tpl/page_optm/settings_css.tpl.php:175
|
110 |
#: tpl/page_optm/settings_media.tpl.php:159
|
111 |
+
#: tpl/toolbox/settings-debug.tpl.php:46
|
|
|
112 |
msgid "ON"
|
113 |
msgstr ""
|
114 |
|
115 |
+
#: src/admin-display.cls.php:237 src/admin-display.cls.php:889
|
116 |
+
#: src/admin-display.cls.php:916 src/admin-display.cls.php:968
|
117 |
#: tpl/cache/settings-cache.tpl.php:19
|
118 |
#: tpl/cache/settings_inc.object.tpl.php:210 tpl/cdn/settings.tpl.php:54
|
119 |
+
#: tpl/page_optm/settings_css.tpl.php:73 tpl/page_optm/settings_js.tpl.php:63
|
120 |
#: tpl/page_optm/settings_media.tpl.php:162
|
121 |
+
#: tpl/toolbox/settings-debug.tpl.php:46
|
122 |
msgid "OFF"
|
123 |
msgstr ""
|
124 |
|
125 |
+
#: src/admin-display.cls.php:285 src/gui.cls.php:630
|
126 |
msgid "Settings"
|
127 |
msgstr ""
|
128 |
|
129 |
+
#: src/admin-display.cls.php:501
|
130 |
msgid "Dismiss"
|
131 |
msgstr ""
|
132 |
|
133 |
+
#: src/admin-display.cls.php:757 src/admin-display.cls.php:762
|
134 |
msgid "Save Changes"
|
135 |
msgstr ""
|
136 |
|
137 |
+
#: src/admin-display.cls.php:980
|
138 |
msgid "This setting is overwritten by the PHP constant %s"
|
139 |
msgstr ""
|
140 |
|
141 |
+
#: src/admin-display.cls.php:983
|
142 |
msgid "This setting is overwritten by the primary site setting"
|
143 |
msgstr ""
|
144 |
|
145 |
+
#: src/admin-display.cls.php:986
|
146 |
msgid "This setting is overwritten by the Network setting"
|
147 |
msgstr ""
|
148 |
|
149 |
+
#: src/admin-display.cls.php:990
|
150 |
msgid "currently set to %s"
|
151 |
msgstr ""
|
152 |
|
153 |
+
#: src/admin-display.cls.php:1000 tpl/cache/settings_inc.object.tpl.php:103
|
154 |
#: tpl/crawler/settings-general.tpl.php:60
|
155 |
#: tpl/crawler/settings-general.tpl.php:74
|
156 |
#: tpl/crawler/settings-general.tpl.php:89 tpl/esi_widget_edit.php:70
|
157 |
msgid "seconds"
|
158 |
msgstr ""
|
159 |
|
160 |
+
#: src/admin-display.cls.php:1031 src/admin-display.cls.php:1036
|
161 |
#: tpl/cdn/settings.tpl.php:99
|
162 |
msgid "Default value"
|
163 |
msgstr ""
|
164 |
|
165 |
+
#: src/admin-display.cls.php:1060
|
166 |
msgid "Invalid rewrite rule"
|
167 |
msgstr ""
|
168 |
|
169 |
+
#: src/admin-display.cls.php:1077
|
170 |
msgid "Path must end with %s"
|
171 |
msgstr ""
|
172 |
|
173 |
+
#: src/admin-display.cls.php:1095
|
174 |
msgid "Minimum value"
|
175 |
msgstr ""
|
176 |
|
177 |
+
#: src/admin-display.cls.php:1098
|
178 |
msgid "Maximum value"
|
179 |
msgstr ""
|
180 |
|
181 |
+
#: src/admin-display.cls.php:1110
|
182 |
msgid "Zero, or"
|
183 |
msgstr ""
|
184 |
|
185 |
+
#: src/admin-display.cls.php:1117
|
186 |
msgid "Larger than"
|
187 |
msgstr ""
|
188 |
|
189 |
+
#: src/admin-display.cls.php:1120
|
190 |
msgid "Smaller than"
|
191 |
msgstr ""
|
192 |
|
193 |
+
#: src/admin-display.cls.php:1123
|
194 |
msgid "Value range"
|
195 |
msgstr ""
|
196 |
|
197 |
+
#: src/admin-display.cls.php:1148
|
198 |
msgid "Invalid IP"
|
199 |
msgstr ""
|
200 |
|
201 |
+
#: src/admin-display.cls.php:1168 tpl/cache/settings-esi.tpl.php:95
|
202 |
+
#: tpl/page_optm/settings_css.tpl.php:177
|
203 |
#: tpl/page_optm/settings_html.tpl.php:85
|
204 |
+
#: tpl/page_optm/settings_media.tpl.php:235
|
205 |
#: tpl/page_optm/settings_media_exc.tpl.php:26
|
206 |
#: tpl/page_optm/settings_tuning.tpl.php:35
|
207 |
#: tpl/page_optm/settings_tuning.tpl.php:56
|
212 |
msgid "API"
|
213 |
msgstr ""
|
214 |
|
215 |
+
#: src/admin-display.cls.php:1169
|
216 |
msgid "Server variable(s) %s available to override this setting."
|
217 |
msgstr ""
|
218 |
|
219 |
+
#: src/admin-display.cls.php:1181
|
220 |
msgid "The URLs will be compared to the REQUEST_URI server variable."
|
221 |
msgstr ""
|
222 |
|
223 |
+
#: src/admin-display.cls.php:1182
|
224 |
msgid "For example, for %s, %s can be used here."
|
225 |
msgstr ""
|
226 |
|
227 |
+
#: src/admin-display.cls.php:1184
|
228 |
msgid "To match the beginning, add %s to the beginning of the item."
|
229 |
msgstr ""
|
230 |
|
231 |
+
#: src/admin-display.cls.php:1185
|
232 |
msgid "To do an exact match, add %s to the end of the URL."
|
233 |
msgstr ""
|
234 |
|
235 |
+
#: src/admin-display.cls.php:1186 src/doc.cls.php:74
|
236 |
msgid "One per line."
|
237 |
msgstr ""
|
238 |
|
239 |
+
#: src/admin-display.cls.php:1200
|
240 |
msgid "%s groups"
|
241 |
msgstr ""
|
242 |
|
243 |
+
#: src/admin-display.cls.php:1203
|
244 |
msgid "%s images"
|
245 |
msgstr ""
|
246 |
|
247 |
+
#: src/admin-display.cls.php:1213
|
248 |
msgid "%s group"
|
249 |
msgstr ""
|
250 |
|
251 |
+
#: src/admin-display.cls.php:1216
|
252 |
msgid "%s image"
|
253 |
msgstr ""
|
254 |
|
255 |
+
#: src/admin-settings.cls.php:245 src/admin-settings.cls.php:279
|
256 |
msgid "Options saved."
|
257 |
msgstr ""
|
258 |
|
280 |
msgid "Communicated with Cloudflare successfully."
|
281 |
msgstr ""
|
282 |
|
283 |
+
#: src/cdn-setup.cls.php:58
|
284 |
+
msgid "Received invalid message from the cloud server. Please submit a ticket."
|
285 |
+
msgstr ""
|
286 |
+
|
287 |
+
#: src/cdn-setup.cls.php:63
|
288 |
+
msgid "There was an error during CDN setup: "
|
289 |
+
msgstr ""
|
290 |
+
|
291 |
+
#: src/cdn-setup.cls.php:112
|
292 |
+
msgid ""
|
293 |
+
"Congratulations, QUIC.cloud successfully set this domain up for the CDN. "
|
294 |
+
"Please update your nameservers to:"
|
295 |
+
msgstr ""
|
296 |
+
|
297 |
+
#: src/cdn-setup.cls.php:132
|
298 |
+
msgid "CDN Setup is running."
|
299 |
+
msgstr ""
|
300 |
+
|
301 |
+
#: src/cdn-setup.cls.php:164
|
302 |
+
msgid "Notice: CDN Setup only reset locally."
|
303 |
+
msgstr ""
|
304 |
+
|
305 |
+
#: src/cdn-setup.cls.php:167
|
306 |
+
msgid "Cannot delete, site is not linked."
|
307 |
+
msgstr ""
|
308 |
+
|
309 |
+
#: src/cdn-setup.cls.php:200
|
310 |
+
msgid ""
|
311 |
+
"CDN Setup Token and DNS zone deleted. Note: if my.quic.cloud account "
|
312 |
+
"deletion is desired, that the account still exists and must be deleted "
|
313 |
+
"separately."
|
314 |
+
msgstr ""
|
315 |
+
|
316 |
+
#: src/cdn-setup.cls.php:202
|
317 |
+
msgid ""
|
318 |
+
"CDN Setup Token reset. Note: if my.quic.cloud account deletion is desired, "
|
319 |
+
"that the account still exists and must be deleted separately."
|
320 |
+
msgstr ""
|
321 |
+
|
322 |
+
#: src/cdn-setup.cls.php:321 src/cloud.cls.php:766 src/cloud.cls.php:774
|
323 |
+
#: src/cloud.cls.php:1158
|
324 |
+
msgid "Message from QUIC.cloud server"
|
325 |
+
msgstr ""
|
326 |
+
|
327 |
+
#: src/cloud.cls.php:372 src/cloud.cls.php:385 src/cloud.cls.php:430
|
328 |
+
#: src/cloud.cls.php:455 src/cloud.cls.php:593 src/cloud.cls.php:1127
|
329 |
msgid "Cloud Error"
|
330 |
msgstr ""
|
331 |
|
332 |
+
#: src/cloud.cls.php:430
|
333 |
msgid "No available Cloud Node."
|
334 |
msgstr ""
|
335 |
|
336 |
+
#: src/cloud.cls.php:455
|
337 |
msgid "No available Cloud Node after checked server load."
|
338 |
msgstr ""
|
339 |
|
340 |
+
#: src/cloud.cls.php:593
|
341 |
msgid "Please try after %1$s for service %2$s."
|
342 |
msgstr ""
|
343 |
|
344 |
+
#: src/cloud.cls.php:680 src/cloud.cls.php:701
|
345 |
msgid "Failed to request via WordPress"
|
346 |
msgstr ""
|
347 |
|
348 |
+
#: src/cloud.cls.php:721
|
349 |
msgid "Redetected node"
|
350 |
msgstr ""
|
351 |
|
352 |
+
#: src/cloud.cls.php:729
|
353 |
msgid ""
|
354 |
"We are working hard to improve your online service experience. The service "
|
355 |
"will be unavailable while we work. We apologize for any inconvenience."
|
356 |
msgstr ""
|
357 |
|
358 |
+
#: src/cloud.cls.php:782
|
|
|
|
|
|
|
|
|
359 |
msgid "Good news from QUIC.cloud server"
|
360 |
msgstr ""
|
361 |
|
362 |
+
#: src/cloud.cls.php:791
|
363 |
msgid "%1$s plugin version %2$s required for this action."
|
364 |
msgstr ""
|
365 |
|
366 |
+
#: src/cloud.cls.php:844 src/cloud.cls.php:1147
|
367 |
msgid "Failed to communicate with QUIC.cloud server"
|
368 |
msgstr ""
|
369 |
|
370 |
+
#: src/cloud.cls.php:886
|
371 |
msgid ""
|
372 |
"Site not recognized. Domain Key has been automatically removed. Please "
|
373 |
"request a new one."
|
374 |
msgstr ""
|
375 |
|
376 |
+
#: src/cloud.cls.php:887 src/error.cls.php:48
|
377 |
msgid "Click here to set."
|
378 |
msgstr ""
|
379 |
|
380 |
+
#: src/cloud.cls.php:952
|
381 |
+
msgid "Cannot request REST API, no token saved."
|
382 |
+
msgstr ""
|
383 |
+
|
384 |
+
#: src/cloud.cls.php:978
|
385 |
+
msgid "Cloud REST Error"
|
386 |
+
msgstr ""
|
387 |
+
|
388 |
+
#: src/cloud.cls.php:994
|
389 |
+
msgid "Cloud REST API returned error: "
|
390 |
+
msgstr ""
|
391 |
+
|
392 |
+
#: src/cloud.cls.php:1166
|
393 |
msgid ""
|
394 |
"Applied for Domain Key successfully. Please wait for result. Domain Key will "
|
395 |
"be automatically sent to your WordPress."
|
396 |
msgstr ""
|
397 |
|
398 |
+
#: src/cloud.cls.php:1220
|
399 |
msgid ""
|
400 |
"Congratulations, your Domain Key has been approved! The setting has been "
|
401 |
"updated accordingly."
|
402 |
msgstr ""
|
403 |
|
404 |
+
#: src/cloud.cls.php:1304
|
405 |
msgid "Domain Key hash mismatch"
|
406 |
msgstr ""
|
407 |
|
408 |
+
#: src/cloud.cls.php:1426
|
409 |
msgid "Sync credit allowance with Cloud Server successfully."
|
410 |
msgstr ""
|
411 |
|
412 |
+
#: src/conf.cls.php:707
|
413 |
msgid "Changed setting successfully."
|
414 |
msgstr ""
|
415 |
|
433 |
msgid "Sitemap created successfully: %d items"
|
434 |
msgstr ""
|
435 |
|
436 |
+
#: src/crawler.cls.php:108
|
437 |
msgid "Crawler disabled list is cleared! All crawlers are set to active! "
|
438 |
msgstr ""
|
439 |
|
440 |
+
#: src/crawler.cls.php:854
|
441 |
msgid "Guest"
|
442 |
msgstr ""
|
443 |
|
444 |
+
#: src/crawler.cls.php:1005
|
445 |
msgid "Manually added to blocklist"
|
446 |
msgstr ""
|
447 |
|
448 |
+
#: src/crawler.cls.php:1008
|
449 |
msgid "Previously existed in blocklist"
|
450 |
msgstr ""
|
451 |
|
452 |
+
#: src/css.cls.php:62 src/root.cls.php:185
|
453 |
msgid "Queue cleared successfully."
|
454 |
msgstr ""
|
455 |
|
456 |
+
#: src/data.cls.php:221
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
457 |
msgid ""
|
458 |
"The database has been upgrading in the background since %s. This message "
|
459 |
"will disappear once upgrade is complete."
|
467 |
"errors."
|
468 |
msgstr ""
|
469 |
|
470 |
+
#: src/data.upgrade.func.php:101 src/lang.cls.php:147
|
471 |
msgid "JS Combine"
|
472 |
msgstr ""
|
473 |
|
544 |
msgstr ""
|
545 |
|
546 |
#: src/doc.cls.php:53 src/doc.cls.php:105 tpl/cdn/manage.tpl.php:66
|
547 |
+
#: tpl/dash/dashboard.tpl.php:51 tpl/img_optm/summary.tpl.php:62
|
548 |
#: tpl/img_optm/summary.tpl.php:102 tpl/inc/check_cache_disabled.php:42
|
549 |
msgid "Learn More"
|
550 |
msgstr ""
|
621 |
msgstr ""
|
622 |
|
623 |
#: src/error.cls.php:84
|
624 |
+
msgid "The site is not a valid alias on QUIC.cloud."
|
625 |
msgstr ""
|
626 |
|
627 |
#: src/error.cls.php:88
|
628 |
+
msgid "The site is not registered on QUIC.cloud."
|
629 |
+
msgstr ""
|
630 |
+
|
631 |
+
#: src/error.cls.php:92
|
632 |
msgid ""
|
633 |
"The domain key is not correct. Please try to sync your domain key again."
|
634 |
msgstr ""
|
635 |
|
636 |
+
#: src/error.cls.php:96
|
637 |
msgid "The current server is under heavy load."
|
638 |
msgstr ""
|
639 |
|
640 |
+
#: src/error.cls.php:100
|
641 |
msgid "Online node needs to be redetected."
|
642 |
msgstr ""
|
643 |
|
644 |
+
#: src/error.cls.php:104
|
645 |
msgid "Credits are not enough to proceed the current request."
|
646 |
msgstr ""
|
647 |
|
648 |
+
#: src/error.cls.php:108 src/error.cls.php:132
|
649 |
msgid "%s file not writable."
|
650 |
msgstr ""
|
651 |
|
652 |
+
#: src/error.cls.php:116
|
653 |
msgid "Could not find %1$s in %2$s."
|
654 |
msgstr ""
|
655 |
|
656 |
+
#: src/error.cls.php:120
|
657 |
msgid "Invalid login cookie. Please check the %s file."
|
658 |
msgstr ""
|
659 |
|
660 |
+
#: src/error.cls.php:124
|
661 |
msgid "Failed to back up %s file, aborted changes."
|
662 |
msgstr ""
|
663 |
|
664 |
+
#: src/error.cls.php:128
|
665 |
msgid "%s file not readable."
|
666 |
msgstr ""
|
667 |
|
668 |
+
#: src/error.cls.php:136
|
669 |
msgid "Failed to get %s file contents."
|
670 |
msgstr ""
|
671 |
|
672 |
+
#: src/error.cls.php:140
|
673 |
msgid "Failed to create table %s! SQL: %s."
|
674 |
msgstr ""
|
675 |
|
676 |
+
#: src/error.cls.php:144
|
677 |
msgid "Crawler disabled by the server admin."
|
678 |
msgstr ""
|
679 |
|
680 |
+
#: src/error.cls.php:149
|
681 |
msgid "Previous request too recent. Please try again later."
|
682 |
msgstr ""
|
683 |
|
684 |
+
#: src/error.cls.php:153
|
685 |
msgid "Previous request too recent. Please try again after %s."
|
686 |
msgstr ""
|
687 |
|
688 |
+
#: src/error.cls.php:157
|
689 |
msgid "Your application is waiting for approval."
|
690 |
msgstr ""
|
691 |
|
692 |
+
#: src/error.cls.php:161
|
693 |
msgid "The callback validation to your domain failed due to hash mismatch."
|
694 |
msgstr ""
|
695 |
|
696 |
+
#: src/error.cls.php:165
|
697 |
msgid ""
|
698 |
"The callback validation to your domain failed. Please make sure there is no "
|
699 |
"firewall blocking our servers."
|
700 |
msgstr ""
|
701 |
|
702 |
+
#: src/error.cls.php:169
|
703 |
msgid ""
|
704 |
"The callback validation to your domain failed. Please make sure there is no "
|
705 |
"firewall blocking our servers. Response code: "
|
706 |
msgstr ""
|
707 |
|
708 |
+
#: src/error.cls.php:173
|
709 |
msgid ""
|
710 |
"Your domain has been forbidden from using our services due to a previous "
|
711 |
"policy violation."
|
712 |
msgstr ""
|
713 |
|
714 |
+
#: src/error.cls.php:177
|
715 |
+
msgid ""
|
716 |
+
"You cannot remove this DNS zone, because it is still in use. Please update "
|
717 |
+
"the domain's nameservers, then try to delete this zone again, otherwise your "
|
718 |
+
"site will become inaccessible."
|
719 |
+
msgstr ""
|
720 |
+
|
721 |
+
#: src/error.cls.php:181
|
722 |
msgid "Unknown error"
|
723 |
msgstr ""
|
724 |
|
758 |
msgid "Private Cache Hits"
|
759 |
msgstr ""
|
760 |
|
761 |
+
#: src/gui.cls.php:104
|
762 |
+
msgid "%1$s %2$s files left in queue"
|
763 |
+
msgstr ""
|
764 |
+
|
765 |
+
#: src/gui.cls.php:105
|
766 |
+
msgid "Cancel"
|
767 |
+
msgstr ""
|
768 |
+
|
769 |
+
#: src/gui.cls.php:414 src/gui.cls.php:429
|
770 |
msgid "Purge this page"
|
771 |
msgstr ""
|
772 |
|
773 |
+
#: src/gui.cls.php:438
|
774 |
msgid "Mark this page as "
|
775 |
msgstr ""
|
776 |
|
777 |
+
#: src/gui.cls.php:450
|
778 |
msgid "Forced cacheable"
|
779 |
msgstr ""
|
780 |
|
781 |
+
#: src/gui.cls.php:461
|
782 |
msgid "Non cacheable"
|
783 |
msgstr ""
|
784 |
|
785 |
+
#: src/gui.cls.php:472
|
786 |
msgid "Private cache"
|
787 |
msgstr ""
|
788 |
|
789 |
+
#: src/gui.cls.php:483
|
790 |
msgid "No optimization"
|
791 |
msgstr ""
|
792 |
|
793 |
+
#: src/gui.cls.php:491
|
794 |
msgid "More settings"
|
795 |
msgstr ""
|
796 |
|
797 |
+
#: src/gui.cls.php:498 src/gui.cls.php:506 src/gui.cls.php:514
|
798 |
+
#: src/gui.cls.php:523 src/gui.cls.php:533 src/gui.cls.php:543
|
799 |
+
#: src/gui.cls.php:553 src/gui.cls.php:562 src/gui.cls.php:572
|
800 |
+
#: src/gui.cls.php:582 src/gui.cls.php:648 src/gui.cls.php:656
|
801 |
+
#: src/gui.cls.php:664 src/gui.cls.php:673 src/gui.cls.php:683
|
802 |
+
#: src/gui.cls.php:693 src/gui.cls.php:703 src/gui.cls.php:713
|
803 |
+
#: src/gui.cls.php:722 src/gui.cls.php:732 src/gui.cls.php:742
|
804 |
#: tpl/page_optm/settings_media.tpl.php:125 tpl/toolbox/purge.tpl.php:37
|
805 |
#: tpl/toolbox/purge.tpl.php:43 tpl/toolbox/purge.tpl.php:52
|
806 |
#: tpl/toolbox/purge.tpl.php:61 tpl/toolbox/purge.tpl.php:70
|
810 |
msgid "Purge All"
|
811 |
msgstr ""
|
812 |
|
813 |
+
#: src/gui.cls.php:506 src/gui.cls.php:606 src/gui.cls.php:656
|
814 |
msgid "LSCache"
|
815 |
msgstr ""
|
816 |
|
817 |
+
#: src/gui.cls.php:514 src/gui.cls.php:664 tpl/toolbox/purge.tpl.php:43
|
818 |
msgid "CSS/JS Cache"
|
819 |
msgstr ""
|
820 |
|
821 |
+
#: src/gui.cls.php:523 src/gui.cls.php:683 src/lang.cls.php:114
|
822 |
+
#: tpl/dash/dashboard.tpl.php:397 tpl/toolbox/purge.tpl.php:52
|
823 |
msgid "Object Cache"
|
824 |
msgstr ""
|
825 |
|
826 |
+
#: src/gui.cls.php:533 src/gui.cls.php:693 tpl/toolbox/purge.tpl.php:61
|
827 |
msgid "Opcode Cache"
|
828 |
msgstr ""
|
829 |
|
830 |
+
#: src/gui.cls.php:562 src/gui.cls.php:722 tpl/toolbox/purge.tpl.php:88
|
831 |
msgid "Localized Resources"
|
832 |
msgstr ""
|
833 |
|
834 |
+
#: src/gui.cls.php:572 src/gui.cls.php:732
|
835 |
#: tpl/page_optm/settings_media.tpl.php:125 tpl/toolbox/purge.tpl.php:97
|
836 |
msgid "LQIP Cache"
|
837 |
msgstr ""
|
838 |
|
839 |
+
#: src/gui.cls.php:582 src/gui.cls.php:742 src/lang.cls.php:176
|
840 |
#: tpl/toolbox/purge.tpl.php:106
|
841 |
msgid "Gravatar Cache"
|
842 |
msgstr ""
|
843 |
|
844 |
+
#: src/gui.cls.php:606
|
845 |
msgid "LiteSpeed Cache Purge All"
|
846 |
msgstr ""
|
847 |
|
848 |
+
#: src/gui.cls.php:622 tpl/cdn/entry.tpl.php:8 tpl/cdn/settings.tpl.php:194
|
849 |
#: tpl/db_optm/entry.tpl.php:6
|
850 |
msgid "Manage"
|
851 |
msgstr ""
|
852 |
|
853 |
+
#: src/gui.cls.php:673 tpl/cdn/manage.tpl.php:17
|
854 |
msgid "Cloudflare"
|
855 |
msgstr ""
|
856 |
|
857 |
+
#: src/gui.cls.php:761 tpl/img_optm/summary.tpl.php:175
|
858 |
msgid "Remove all previous unfinished image optimization requests."
|
859 |
msgstr ""
|
860 |
|
861 |
+
#: src/gui.cls.php:762 tpl/img_optm/summary.tpl.php:177
|
862 |
msgid "Clean Up Unfinished Data"
|
863 |
msgstr ""
|
864 |
|
865 |
+
#: src/gui.cls.php:780
|
866 |
msgid "Install %s"
|
867 |
msgstr ""
|
868 |
|
869 |
+
#: src/gui.cls.php:781
|
870 |
msgid "Install Now"
|
871 |
msgstr ""
|
872 |
|
873 |
+
#: src/gui.cls.php:800
|
874 |
msgid ""
|
875 |
"<a href=\"%1$s\" %2$s>View version %3$s details</a> or <a href=\"%4$s\" %5$s "
|
876 |
"target=\"_blank\">update now</a>."
|
877 |
msgstr ""
|
878 |
|
879 |
+
#: src/gui.cls.php:803
|
880 |
msgid "View %1$s version %2$s details"
|
881 |
msgstr ""
|
882 |
|
883 |
+
#: src/gui.cls.php:808
|
884 |
msgid "Update %s now"
|
885 |
msgstr ""
|
886 |
|
888 |
msgid "Mobile Agent Rules"
|
889 |
msgstr ""
|
890 |
|
891 |
+
#: src/htaccess.cls.php:786
|
892 |
msgid ""
|
893 |
"<p>Please add/replace the following codes into the beginning of %1$s:</p> "
|
894 |
"%2$s"
|
1010 |
msgid "Images not requested"
|
1011 |
msgstr ""
|
1012 |
|
1013 |
+
#: src/lang.cls.php:24 tpl/dash/dashboard.tpl.php:338
|
1014 |
msgid "Images requested"
|
1015 |
msgstr ""
|
1016 |
|
1017 |
+
#: src/lang.cls.php:25 tpl/dash/dashboard.tpl.php:348
|
1018 |
msgid "Images notified to pull"
|
1019 |
msgstr ""
|
1020 |
|
1050 |
msgid "Images with wrong meta"
|
1051 |
msgstr ""
|
1052 |
|
1053 |
+
#: src/lang.cls.php:51
|
1054 |
+
msgid ""
|
1055 |
+
"Unable to automatically add %1$s as a Domain Alias for main %2$s domain, due "
|
1056 |
+
"to potential CDN conflict."
|
1057 |
msgstr ""
|
1058 |
|
1059 |
#: src/lang.cls.php:54
|
1060 |
+
msgid ""
|
1061 |
+
"Unable to automatically add %1$s as a Domain Alias for main %2$s domain."
|
1062 |
msgstr ""
|
1063 |
|
1064 |
#: src/lang.cls.php:55
|
1065 |
+
msgid "Alias is in use by another QUIC.cloud account."
|
1066 |
+
msgstr ""
|
1067 |
+
|
1068 |
+
#: src/lang.cls.php:85
|
1069 |
+
msgid "Server IP"
|
1070 |
+
msgstr ""
|
1071 |
+
|
1072 |
+
#: src/lang.cls.php:86
|
1073 |
+
msgid "Domain Key"
|
1074 |
+
msgstr ""
|
1075 |
+
|
1076 |
+
#: src/lang.cls.php:87
|
1077 |
msgid "Guest Mode User Agents"
|
1078 |
msgstr ""
|
1079 |
|
1080 |
+
#: src/lang.cls.php:88
|
1081 |
msgid "Guest Mode IPs"
|
1082 |
msgstr ""
|
1083 |
|
1084 |
+
#: src/lang.cls.php:90
|
1085 |
msgid "Enable Cache"
|
1086 |
msgstr ""
|
1087 |
|
1088 |
+
#: src/lang.cls.php:91 tpl/dash/dashboard.tpl.php:398
|
1089 |
msgid "Browser Cache"
|
1090 |
msgstr ""
|
1091 |
|
1092 |
+
#: src/lang.cls.php:92
|
1093 |
msgid "Default Public Cache TTL"
|
1094 |
msgstr ""
|
1095 |
|
1096 |
+
#: src/lang.cls.php:93
|
1097 |
msgid "Default Private Cache TTL"
|
1098 |
msgstr ""
|
1099 |
|
1100 |
+
#: src/lang.cls.php:94
|
1101 |
msgid "Default Front Page TTL"
|
1102 |
msgstr ""
|
1103 |
|
1104 |
+
#: src/lang.cls.php:95
|
1105 |
msgid "Default Feed TTL"
|
1106 |
msgstr ""
|
1107 |
|
1108 |
+
#: src/lang.cls.php:96
|
1109 |
msgid "Default REST TTL"
|
1110 |
msgstr ""
|
1111 |
|
1112 |
+
#: src/lang.cls.php:97
|
1113 |
msgid "Default HTTP Status Code Page TTL"
|
1114 |
msgstr ""
|
1115 |
|
1116 |
+
#: src/lang.cls.php:98
|
1117 |
msgid "Browser Cache TTL"
|
1118 |
msgstr ""
|
1119 |
|
1120 |
+
#: src/lang.cls.php:99
|
1121 |
msgid "Automatically Upgrade"
|
1122 |
msgstr ""
|
1123 |
|
1124 |
+
#: src/lang.cls.php:100
|
1125 |
msgid "Guest Mode"
|
1126 |
msgstr ""
|
1127 |
|
1128 |
+
#: src/lang.cls.php:101
|
1129 |
msgid "Guest Optimization"
|
1130 |
msgstr ""
|
1131 |
|
1132 |
+
#: src/lang.cls.php:102
|
1133 |
msgid "Notifications"
|
1134 |
msgstr ""
|
1135 |
|
1136 |
+
#: src/lang.cls.php:103
|
1137 |
msgid "Cache Logged-in Users"
|
1138 |
msgstr ""
|
1139 |
|
1140 |
+
#: src/lang.cls.php:104
|
1141 |
msgid "Cache Commenters"
|
1142 |
msgstr ""
|
1143 |
|
1144 |
+
#: src/lang.cls.php:105
|
1145 |
msgid "Cache REST API"
|
1146 |
msgstr ""
|
1147 |
|
1148 |
+
#: src/lang.cls.php:106
|
1149 |
msgid "Cache Login Page"
|
1150 |
msgstr ""
|
1151 |
|
1152 |
+
#: src/lang.cls.php:107
|
1153 |
msgid "Cache favicon.ico"
|
1154 |
msgstr ""
|
1155 |
|
1156 |
+
#: src/lang.cls.php:108
|
1157 |
msgid "Cache PHP Resources"
|
1158 |
msgstr ""
|
1159 |
|
1160 |
+
#: src/lang.cls.php:109 tpl/cache/settings_inc.cache_mobile.tpl.php:71
|
1161 |
msgid "Cache Mobile"
|
1162 |
msgstr ""
|
1163 |
|
1164 |
+
#: src/lang.cls.php:110 tpl/cache/settings_inc.cache_mobile.tpl.php:71
|
1165 |
msgid "List of Mobile User Agents"
|
1166 |
msgstr ""
|
1167 |
|
1168 |
+
#: src/lang.cls.php:111
|
1169 |
msgid "Private Cached URIs"
|
1170 |
msgstr ""
|
1171 |
|
1172 |
+
#: src/lang.cls.php:112
|
1173 |
msgid "Drop Query String"
|
1174 |
msgstr ""
|
1175 |
|
1176 |
+
#: src/lang.cls.php:115
|
1177 |
msgid "Method"
|
1178 |
msgstr ""
|
1179 |
|
1180 |
+
#: src/lang.cls.php:116
|
1181 |
msgid "Host"
|
1182 |
msgstr ""
|
1183 |
|
1184 |
+
#: src/lang.cls.php:117
|
1185 |
msgid "Port"
|
1186 |
msgstr ""
|
1187 |
|
1188 |
+
#: src/lang.cls.php:118
|
1189 |
msgid "Default Object Lifetime"
|
1190 |
msgstr ""
|
1191 |
|
1192 |
+
#: src/lang.cls.php:119
|
1193 |
msgid "Username"
|
1194 |
msgstr ""
|
1195 |
|
1196 |
+
#: src/lang.cls.php:120
|
1197 |
msgid "Password"
|
1198 |
msgstr ""
|
1199 |
|
1200 |
+
#: src/lang.cls.php:121
|
1201 |
msgid "Redis Database ID"
|
1202 |
msgstr ""
|
1203 |
|
1204 |
+
#: src/lang.cls.php:122
|
1205 |
msgid "Global Groups"
|
1206 |
msgstr ""
|
1207 |
|
1208 |
+
#: src/lang.cls.php:123
|
1209 |
msgid "Do Not Cache Groups"
|
1210 |
msgstr ""
|
1211 |
|
1212 |
+
#: src/lang.cls.php:124
|
1213 |
msgid "Persistent Connection"
|
1214 |
msgstr ""
|
1215 |
|
1216 |
+
#: src/lang.cls.php:125
|
1217 |
msgid "Cache WP-Admin"
|
1218 |
msgstr ""
|
1219 |
|
1220 |
+
#: src/lang.cls.php:126
|
1221 |
msgid "Store Transients"
|
1222 |
msgstr ""
|
1223 |
|
1224 |
+
#: src/lang.cls.php:128
|
1225 |
msgid "Purge All On Upgrade"
|
1226 |
msgstr ""
|
1227 |
|
1228 |
+
#: src/lang.cls.php:129
|
1229 |
msgid "Serve Stale"
|
1230 |
msgstr ""
|
1231 |
|
1232 |
+
#: src/lang.cls.php:130 tpl/cache/settings-purge.tpl.php:130
|
1233 |
msgid "Scheduled Purge URLs"
|
1234 |
msgstr ""
|
1235 |
|
1236 |
+
#: src/lang.cls.php:131 tpl/cache/settings-purge.tpl.php:105
|
1237 |
msgid "Scheduled Purge Time"
|
1238 |
msgstr ""
|
1239 |
|
1240 |
+
#: src/lang.cls.php:132
|
1241 |
msgid "Force Cache URIs"
|
1242 |
msgstr ""
|
1243 |
|
1244 |
+
#: src/lang.cls.php:133
|
1245 |
msgid "Force Public Cache URIs"
|
1246 |
msgstr ""
|
1247 |
|
1248 |
+
#: src/lang.cls.php:134
|
1249 |
msgid "Do Not Cache URIs"
|
1250 |
msgstr ""
|
1251 |
|
1252 |
+
#: src/lang.cls.php:135
|
1253 |
msgid "Do Not Cache Query Strings"
|
1254 |
msgstr ""
|
1255 |
|
1256 |
+
#: src/lang.cls.php:136
|
1257 |
msgid "Do Not Cache Categories"
|
1258 |
msgstr ""
|
1259 |
|
1260 |
+
#: src/lang.cls.php:137
|
1261 |
msgid "Do Not Cache Tags"
|
1262 |
msgstr ""
|
1263 |
|
1264 |
+
#: src/lang.cls.php:138
|
1265 |
msgid "Do Not Cache Roles"
|
1266 |
msgstr ""
|
1267 |
|
1268 |
+
#: src/lang.cls.php:139
|
1269 |
msgid "CSS Minify"
|
1270 |
msgstr ""
|
1271 |
|
1272 |
+
#: src/lang.cls.php:140
|
1273 |
msgid "CSS Combine"
|
1274 |
msgstr ""
|
1275 |
|
1276 |
+
#: src/lang.cls.php:141
|
1277 |
msgid "CSS Combine External and Inline"
|
1278 |
msgstr ""
|
1279 |
|
1280 |
+
#: src/lang.cls.php:142
|
1281 |
msgid "Generate UCSS"
|
1282 |
msgstr ""
|
1283 |
|
1284 |
+
#: src/lang.cls.php:143
|
1285 |
msgid "UCSS Inline"
|
1286 |
msgstr ""
|
1287 |
|
1288 |
+
#: src/lang.cls.php:144
|
1289 |
msgid "UCSS Allowlist"
|
1290 |
msgstr ""
|
1291 |
|
1292 |
+
#: src/lang.cls.php:145
|
1293 |
msgid "UCSS URI Excludes"
|
1294 |
msgstr ""
|
1295 |
|
1296 |
+
#: src/lang.cls.php:146
|
1297 |
msgid "JS Minify"
|
1298 |
msgstr ""
|
1299 |
|
1300 |
+
#: src/lang.cls.php:148
|
1301 |
msgid "JS Combine External and Inline"
|
1302 |
msgstr ""
|
1303 |
|
1304 |
+
#: src/lang.cls.php:149
|
1305 |
msgid "HTML Minify"
|
1306 |
msgstr ""
|
1307 |
|
1308 |
+
#: src/lang.cls.php:150
|
1309 |
msgid "HTML Lazy Load Selectors"
|
1310 |
msgstr ""
|
1311 |
|
1312 |
+
#: src/lang.cls.php:151 tpl/page_optm/settings_tuning.tpl.php:148
|
1313 |
msgid "Load CSS Asynchronously"
|
1314 |
msgstr ""
|
1315 |
|
1316 |
+
#: src/lang.cls.php:152
|
1317 |
msgid "CCSS Per URL"
|
1318 |
msgstr ""
|
1319 |
|
1320 |
+
#: src/lang.cls.php:153
|
1321 |
msgid "Inline CSS Async Lib"
|
1322 |
msgstr ""
|
1323 |
|
1324 |
+
#: src/lang.cls.php:154
|
1325 |
msgid "Font Display Optimization"
|
1326 |
msgstr ""
|
1327 |
|
1328 |
+
#: src/lang.cls.php:155
|
1329 |
msgid "Load JS Deferred"
|
1330 |
msgstr ""
|
1331 |
|
1332 |
+
#: src/lang.cls.php:156
|
1333 |
msgid "Localize Resources"
|
1334 |
msgstr ""
|
1335 |
|
1336 |
+
#: src/lang.cls.php:157
|
1337 |
msgid "Localization Files"
|
1338 |
msgstr ""
|
1339 |
|
1340 |
+
#: src/lang.cls.php:158
|
1341 |
msgid "DNS Prefetch"
|
1342 |
msgstr ""
|
1343 |
|
1344 |
+
#: src/lang.cls.php:159
|
1345 |
msgid "DNS Prefetch Control"
|
1346 |
msgstr ""
|
1347 |
|
1348 |
+
#: src/lang.cls.php:160
|
1349 |
msgid "CSS Excludes"
|
1350 |
msgstr ""
|
1351 |
|
1352 |
+
#: src/lang.cls.php:161
|
1353 |
msgid "JS Excludes"
|
1354 |
msgstr ""
|
1355 |
|
1356 |
+
#: src/lang.cls.php:162
|
1357 |
msgid "Remove Query Strings"
|
1358 |
msgstr ""
|
1359 |
|
1360 |
+
#: src/lang.cls.php:163
|
1361 |
msgid "Load Google Fonts Asynchronously"
|
1362 |
msgstr ""
|
1363 |
|
1364 |
+
#: src/lang.cls.php:164
|
1365 |
msgid "Remove Google Fonts"
|
1366 |
msgstr ""
|
1367 |
|
1368 |
+
#: src/lang.cls.php:165
|
1369 |
msgid "Critical CSS Rules"
|
1370 |
msgstr ""
|
1371 |
|
1372 |
+
#: src/lang.cls.php:166
|
1373 |
msgid "Separate CCSS Cache Post Types"
|
1374 |
msgstr ""
|
1375 |
|
1376 |
+
#: src/lang.cls.php:167
|
1377 |
msgid "Separate CCSS Cache URIs"
|
1378 |
msgstr ""
|
1379 |
|
1380 |
+
#: src/lang.cls.php:168
|
1381 |
msgid "JS Deferred Excludes"
|
1382 |
msgstr ""
|
1383 |
|
1384 |
+
#: src/lang.cls.php:169
|
1385 |
msgid "Guest Mode JS Excludes"
|
1386 |
msgstr ""
|
1387 |
|
1388 |
+
#: src/lang.cls.php:170
|
1389 |
msgid "Remove WordPress Emoji"
|
1390 |
msgstr ""
|
1391 |
|
1392 |
+
#: src/lang.cls.php:171
|
1393 |
msgid "Remove Noscript Tags"
|
1394 |
msgstr ""
|
1395 |
|
1396 |
+
#: src/lang.cls.php:172
|
1397 |
msgid "URI Excludes"
|
1398 |
msgstr ""
|
1399 |
|
1400 |
+
#: src/lang.cls.php:173
|
1401 |
msgid "Optimize for Guests Only"
|
1402 |
msgstr ""
|
1403 |
|
1404 |
+
#: src/lang.cls.php:174
|
1405 |
msgid "Role Excludes"
|
1406 |
msgstr ""
|
1407 |
|
1408 |
+
#: src/lang.cls.php:177
|
1409 |
msgid "Gravatar Cache Cron"
|
1410 |
msgstr ""
|
1411 |
|
1412 |
+
#: src/lang.cls.php:178
|
1413 |
msgid "Gravatar Cache TTL"
|
1414 |
msgstr ""
|
1415 |
|
1416 |
+
#: src/lang.cls.php:180
|
1417 |
msgid "Lazy Load Images"
|
1418 |
msgstr ""
|
1419 |
|
1420 |
+
#: src/lang.cls.php:181
|
1421 |
msgid "Lazy Load Image Excludes"
|
1422 |
msgstr ""
|
1423 |
|
1424 |
+
#: src/lang.cls.php:182
|
1425 |
msgid "Lazy Load Image Class Name Excludes"
|
1426 |
msgstr ""
|
1427 |
|
1428 |
+
#: src/lang.cls.php:183
|
1429 |
msgid "Lazy Load Image Parent Class Name Excludes"
|
1430 |
msgstr ""
|
1431 |
|
1432 |
+
#: src/lang.cls.php:184
|
1433 |
msgid "Lazy Load Iframe Class Name Excludes"
|
1434 |
msgstr ""
|
1435 |
|
1436 |
+
#: src/lang.cls.php:185
|
1437 |
msgid "Lazy Load Iframe Parent Class Name Excludes"
|
1438 |
msgstr ""
|
1439 |
|
1440 |
+
#: src/lang.cls.php:186
|
1441 |
msgid "Lazy Load URI Excludes"
|
1442 |
msgstr ""
|
1443 |
|
1444 |
+
#: src/lang.cls.php:187
|
1445 |
msgid "LQIP Excludes"
|
1446 |
msgstr ""
|
1447 |
|
1448 |
+
#: src/lang.cls.php:188
|
1449 |
msgid "Basic Image Placeholder"
|
1450 |
msgstr ""
|
1451 |
|
1452 |
+
#: src/lang.cls.php:189
|
1453 |
msgid "Responsive Placeholder"
|
1454 |
msgstr ""
|
1455 |
|
1456 |
+
#: src/lang.cls.php:190
|
1457 |
msgid "Responsive Placeholder Color"
|
1458 |
msgstr ""
|
1459 |
|
1460 |
+
#: src/lang.cls.php:191
|
1461 |
msgid "Responsive Placeholder SVG"
|
1462 |
msgstr ""
|
1463 |
|
1464 |
+
#: src/lang.cls.php:192
|
1465 |
msgid "LQIP Cloud Generator"
|
1466 |
msgstr ""
|
1467 |
|
1468 |
+
#: src/lang.cls.php:193
|
1469 |
msgid "LQIP Quality"
|
1470 |
msgstr ""
|
1471 |
|
1472 |
+
#: src/lang.cls.php:194
|
1473 |
msgid "LQIP Minimum Dimensions"
|
1474 |
msgstr ""
|
1475 |
|
1476 |
+
#: src/lang.cls.php:196
|
1477 |
msgid "Generate LQIP In Background"
|
1478 |
msgstr ""
|
1479 |
|
1480 |
+
#: src/lang.cls.php:197
|
1481 |
msgid "Lazy Load Iframes"
|
1482 |
msgstr ""
|
1483 |
|
1484 |
+
#: src/lang.cls.php:198
|
1485 |
msgid "Add Missing Sizes"
|
1486 |
msgstr ""
|
1487 |
|
1488 |
+
#: src/lang.cls.php:199 src/metabox.cls.php:31 src/metabox.cls.php:32
|
1489 |
+
#: tpl/page_optm/settings_vpi.tpl.php:12
|
1490 |
+
msgid "Viewport Images"
|
1491 |
+
msgstr ""
|
1492 |
+
|
1493 |
+
#: src/lang.cls.php:200
|
1494 |
+
msgid "Viewport Images Cron"
|
1495 |
+
msgstr ""
|
1496 |
+
|
1497 |
+
#: src/lang.cls.php:202
|
1498 |
msgid "Auto Request Cron"
|
1499 |
msgstr ""
|
1500 |
|
1501 |
+
#: src/lang.cls.php:203
|
1502 |
msgid "Auto Pull Cron"
|
1503 |
msgstr ""
|
1504 |
|
1505 |
+
#: src/lang.cls.php:204
|
1506 |
msgid "Optimize Original Images"
|
1507 |
msgstr ""
|
1508 |
|
1509 |
+
#: src/lang.cls.php:205
|
1510 |
msgid "Remove Original Backups"
|
1511 |
msgstr ""
|
1512 |
|
1513 |
+
#: src/lang.cls.php:206
|
1514 |
msgid "Create WebP Versions"
|
1515 |
msgstr ""
|
1516 |
|
1517 |
+
#: src/lang.cls.php:207
|
1518 |
msgid "Optimize Losslessly"
|
1519 |
msgstr ""
|
1520 |
|
1521 |
+
#: src/lang.cls.php:208
|
1522 |
msgid "Preserve EXIF/XMP data"
|
1523 |
msgstr ""
|
1524 |
|
1525 |
+
#: src/lang.cls.php:209
|
1526 |
msgid "WebP Attribute To Replace"
|
1527 |
msgstr ""
|
1528 |
|
1529 |
+
#: src/lang.cls.php:210
|
1530 |
msgid "WebP For Extra srcset"
|
1531 |
msgstr ""
|
1532 |
|
1533 |
+
#: src/lang.cls.php:211
|
1534 |
msgid "WordPress Image Quality Control"
|
1535 |
msgstr ""
|
1536 |
|
1537 |
+
#: src/lang.cls.php:212 tpl/esi_widget_edit.php:36
|
1538 |
msgid "Enable ESI"
|
1539 |
msgstr ""
|
1540 |
|
1541 |
+
#: src/lang.cls.php:213
|
1542 |
msgid "Cache Admin Bar"
|
1543 |
msgstr ""
|
1544 |
|
1545 |
+
#: src/lang.cls.php:214
|
1546 |
msgid "Cache Comment Form"
|
1547 |
msgstr ""
|
1548 |
|
1549 |
+
#: src/lang.cls.php:215
|
1550 |
msgid "ESI Nonces"
|
1551 |
msgstr ""
|
1552 |
|
1553 |
+
#: src/lang.cls.php:216 tpl/page_optm/settings_css.tpl.php:111
|
1554 |
+
#: tpl/page_optm/settings_css.tpl.php:221 tpl/page_optm/settings_vpi.tpl.php:67
|
1555 |
msgid "Vary Group"
|
1556 |
msgstr ""
|
1557 |
|
1558 |
+
#: src/lang.cls.php:217
|
1559 |
msgid "Purge All Hooks"
|
1560 |
msgstr ""
|
1561 |
|
1562 |
+
#: src/lang.cls.php:218
|
1563 |
msgid "Improve HTTP/HTTPS Compatibility"
|
1564 |
msgstr ""
|
1565 |
|
1566 |
+
#: src/lang.cls.php:219
|
1567 |
msgid "Instant Click"
|
1568 |
msgstr ""
|
1569 |
|
1570 |
+
#: src/lang.cls.php:220
|
1571 |
msgid "Do Not Cache Cookies"
|
1572 |
msgstr ""
|
1573 |
|
1574 |
+
#: src/lang.cls.php:221
|
1575 |
msgid "Do Not Cache User Agents"
|
1576 |
msgstr ""
|
1577 |
|
1578 |
+
#: src/lang.cls.php:222
|
1579 |
msgid "Login Cookie"
|
1580 |
msgstr ""
|
1581 |
|
1582 |
+
#: src/lang.cls.php:223
|
1583 |
msgid "Image WebP Replacement"
|
1584 |
msgstr ""
|
1585 |
|
1586 |
+
#: src/lang.cls.php:225
|
1587 |
msgid "Frontend Heartbeat Control"
|
1588 |
msgstr ""
|
1589 |
|
1590 |
+
#: src/lang.cls.php:226
|
1591 |
msgid "Frontend Heartbeat TTL"
|
1592 |
msgstr ""
|
1593 |
|
1594 |
+
#: src/lang.cls.php:227
|
1595 |
msgid "Backend Heartbeat Control"
|
1596 |
msgstr ""
|
1597 |
|
1598 |
+
#: src/lang.cls.php:228
|
1599 |
msgid "Backend Heartbeat TTL"
|
1600 |
msgstr ""
|
1601 |
|
1602 |
+
#: src/lang.cls.php:229
|
1603 |
msgid "Editor Heartbeat"
|
1604 |
msgstr ""
|
1605 |
|
1606 |
+
#: src/lang.cls.php:230
|
1607 |
msgid "Editor Heartbeat TTL"
|
1608 |
msgstr ""
|
1609 |
|
1610 |
+
#: src/lang.cls.php:232
|
1611 |
msgid "QUIC.cloud CDN"
|
1612 |
msgstr ""
|
1613 |
|
1614 |
+
#: src/lang.cls.php:233
|
1615 |
msgid "Use CDN Mapping"
|
1616 |
msgstr ""
|
1617 |
|
1618 |
+
#: src/lang.cls.php:234
|
1619 |
msgid "CDN URL"
|
1620 |
msgstr ""
|
1621 |
|
1622 |
+
#: src/lang.cls.php:235
|
1623 |
msgid "Include Images"
|
1624 |
msgstr ""
|
1625 |
|
1626 |
+
#: src/lang.cls.php:236
|
1627 |
msgid "Include CSS"
|
1628 |
msgstr ""
|
1629 |
|
1630 |
+
#: src/lang.cls.php:237
|
1631 |
msgid "Include JS"
|
1632 |
msgstr ""
|
1633 |
|
1634 |
+
#: src/lang.cls.php:238 tpl/cdn/settings.tpl.php:102
|
1635 |
msgid "Include File Types"
|
1636 |
msgstr ""
|
1637 |
|
1638 |
+
#: src/lang.cls.php:239
|
1639 |
msgid "HTML Attribute To Replace"
|
1640 |
msgstr ""
|
1641 |
|
1642 |
+
#: src/lang.cls.php:240
|
1643 |
msgid "Original URLs"
|
1644 |
msgstr ""
|
1645 |
|
1646 |
+
#: src/lang.cls.php:241
|
1647 |
msgid "Included Directories"
|
1648 |
msgstr ""
|
1649 |
|
1650 |
+
#: src/lang.cls.php:242
|
1651 |
msgid "Exclude Path"
|
1652 |
msgstr ""
|
1653 |
|
1654 |
+
#: src/lang.cls.php:243
|
1655 |
msgid "Cloudflare API"
|
1656 |
msgstr ""
|
1657 |
|
1658 |
+
#: src/lang.cls.php:246
|
1659 |
msgid "Delay"
|
1660 |
msgstr ""
|
1661 |
|
1662 |
+
#: src/lang.cls.php:247
|
1663 |
msgid "Run Duration"
|
1664 |
msgstr ""
|
1665 |
|
1666 |
+
#: src/lang.cls.php:248
|
1667 |
msgid "Interval Between Runs"
|
1668 |
msgstr ""
|
1669 |
|
1670 |
+
#: src/lang.cls.php:249
|
1671 |
msgid "Crawl Interval"
|
1672 |
msgstr ""
|
1673 |
|
1674 |
+
#: src/lang.cls.php:250
|
1675 |
msgid "Threads"
|
1676 |
msgstr ""
|
1677 |
|
1678 |
+
#: src/lang.cls.php:251
|
1679 |
msgid "Timeout"
|
1680 |
msgstr ""
|
1681 |
|
1682 |
+
#: src/lang.cls.php:252
|
1683 |
msgid "Server Load Limit"
|
1684 |
msgstr ""
|
1685 |
|
1686 |
+
#: src/lang.cls.php:253
|
1687 |
msgid "Role Simulation"
|
1688 |
msgstr ""
|
1689 |
|
1690 |
+
#: src/lang.cls.php:254
|
1691 |
msgid "Cookie Simulation"
|
1692 |
msgstr ""
|
1693 |
|
1694 |
+
#: src/lang.cls.php:255
|
1695 |
msgid "Custom Sitemap"
|
1696 |
msgstr ""
|
1697 |
|
1698 |
+
#: src/lang.cls.php:256
|
1699 |
msgid "Drop Domain from Sitemap"
|
1700 |
msgstr ""
|
1701 |
|
1702 |
+
#: src/lang.cls.php:257
|
1703 |
msgid "Sitemap Timeout"
|
1704 |
msgstr ""
|
1705 |
|
1706 |
+
#: src/lang.cls.php:259 tpl/inc/disabled_all.php:5
|
1707 |
msgid "Disable All Features"
|
1708 |
msgstr ""
|
1709 |
|
1710 |
+
#: src/lang.cls.php:260 tpl/toolbox/log_viewer.tpl.php:7
|
1711 |
msgid "Debug Log"
|
1712 |
msgstr ""
|
1713 |
|
1714 |
+
#: src/lang.cls.php:261
|
1715 |
msgid "Admin IPs"
|
1716 |
msgstr ""
|
1717 |
|
1718 |
+
#: src/lang.cls.php:262
|
1719 |
msgid "Debug Level"
|
1720 |
msgstr ""
|
1721 |
|
1722 |
+
#: src/lang.cls.php:263
|
1723 |
msgid "Log File Size Limit"
|
1724 |
msgstr ""
|
1725 |
|
1726 |
+
#: src/lang.cls.php:264
|
1727 |
msgid "Log Cookies"
|
1728 |
msgstr ""
|
1729 |
|
1730 |
+
#: src/lang.cls.php:265
|
1731 |
msgid "Collapse Query Strings"
|
1732 |
msgstr ""
|
1733 |
|
1734 |
+
#: src/lang.cls.php:266
|
1735 |
msgid "Debug URI Includes"
|
1736 |
msgstr ""
|
1737 |
|
1738 |
+
#: src/lang.cls.php:267
|
1739 |
msgid "Debug URI Excludes"
|
1740 |
msgstr ""
|
1741 |
|
1742 |
+
#: src/lang.cls.php:268
|
1743 |
+
msgid "Debug String Excludes"
|
1744 |
+
msgstr ""
|
1745 |
+
|
1746 |
+
#: src/lang.cls.php:270
|
1747 |
msgid "Revisions Max Number"
|
1748 |
msgstr ""
|
1749 |
|
1750 |
+
#: src/lang.cls.php:271
|
1751 |
msgid "Revisions Max Age"
|
1752 |
msgstr ""
|
1753 |
|
1754 |
+
#: src/media.cls.php:199
|
1755 |
msgid "LiteSpeed Optimization"
|
1756 |
msgstr ""
|
1757 |
|
1758 |
+
#: src/media.cls.php:249 src/media.cls.php:274 src/media.cls.php:303
|
1759 |
+
#: src/media.cls.php:327
|
1760 |
msgid "(optm)"
|
1761 |
msgstr ""
|
1762 |
|
1763 |
+
#: src/media.cls.php:250
|
1764 |
msgid "Currently using optimized version of file."
|
1765 |
msgstr ""
|
1766 |
|
1767 |
+
#: src/media.cls.php:250 src/media.cls.php:304
|
1768 |
msgid "Click to switch to original (unoptimized) version."
|
1769 |
msgstr ""
|
1770 |
|
1771 |
+
#: src/media.cls.php:254 src/media.cls.php:308
|
1772 |
msgid "(non-optm)"
|
1773 |
msgstr ""
|
1774 |
|
1775 |
+
#: src/media.cls.php:255
|
1776 |
msgid "Currently using original (unoptimized) version of file."
|
1777 |
msgstr ""
|
1778 |
|
1779 |
+
#: src/media.cls.php:255 src/media.cls.php:309
|
1780 |
msgid "Click to switch to optimized version."
|
1781 |
msgstr ""
|
1782 |
|
1783 |
+
#: src/media.cls.php:259
|
1784 |
msgid "Original file reduced by %1$s (%2$s)"
|
1785 |
msgstr ""
|
1786 |
|
1787 |
+
#: src/media.cls.php:265
|
1788 |
msgid "Orig saved %s"
|
1789 |
msgstr ""
|
1790 |
|
1791 |
+
#: src/media.cls.php:273 src/media.cls.php:326
|
1792 |
msgid "Using optimized version of file. "
|
1793 |
msgstr ""
|
1794 |
|
1795 |
+
#: src/media.cls.php:273
|
1796 |
msgid "No backup of original file exists."
|
1797 |
msgstr ""
|
1798 |
|
1799 |
+
#: src/media.cls.php:282
|
1800 |
msgid "Congratulation! Your file was already optimized"
|
1801 |
msgstr ""
|
1802 |
|
1803 |
+
#: src/media.cls.php:285
|
1804 |
msgid "Orig %s"
|
1805 |
msgstr ""
|
1806 |
|
1807 |
+
#: src/media.cls.php:285
|
1808 |
msgid "(no savings)"
|
1809 |
msgstr ""
|
1810 |
|
1811 |
+
#: src/media.cls.php:288
|
1812 |
msgid "Orig"
|
1813 |
msgstr ""
|
1814 |
|
1815 |
+
#: src/media.cls.php:304
|
1816 |
msgid "Currently using optimized version of WebP file."
|
1817 |
msgstr ""
|
1818 |
|
1819 |
+
#: src/media.cls.php:309
|
1820 |
msgid "Currently using original (unoptimized) version of WebP file."
|
1821 |
msgstr ""
|
1822 |
|
1823 |
+
#: src/media.cls.php:313
|
1824 |
msgid "WebP file reduced by %1$s (%2$s)"
|
1825 |
msgstr ""
|
1826 |
|
1827 |
+
#: src/media.cls.php:318
|
1828 |
msgid "WebP saved %s"
|
1829 |
msgstr ""
|
1830 |
|
1831 |
+
#: src/media.cls.php:326
|
1832 |
msgid "No backup of unoptimized WebP file exists."
|
1833 |
msgstr ""
|
1834 |
|
1835 |
+
#: src/media.cls.php:332
|
1836 |
msgid "WebP"
|
1837 |
msgstr ""
|
1838 |
|
1839 |
+
#: src/media.cls.php:342
|
1840 |
msgid "Restore from backup"
|
1841 |
msgstr ""
|
1842 |
|
1843 |
+
#: src/metabox.cls.php:28
|
1844 |
+
msgid "Disable Cache"
|
1845 |
+
msgstr ""
|
1846 |
+
|
1847 |
+
#: src/metabox.cls.php:29
|
1848 |
+
msgid "Disable Image Lazyload"
|
1849 |
+
msgstr ""
|
1850 |
+
|
1851 |
+
#: src/metabox.cls.php:30
|
1852 |
+
msgid "Disable VPI"
|
1853 |
+
msgstr ""
|
1854 |
+
|
1855 |
+
#: src/metabox.cls.php:32
|
1856 |
+
msgid "Mobile"
|
1857 |
+
msgstr ""
|
1858 |
+
|
1859 |
+
#: src/metabox.cls.php:53
|
1860 |
+
msgid "LiteSpeed Options"
|
1861 |
+
msgstr ""
|
1862 |
+
|
1863 |
#: src/placeholder.cls.php:80 tpl/dash/network_dash.tpl.php:30
|
1864 |
msgid "LQIP"
|
1865 |
msgstr ""
|
1868 |
msgid "LQIP image preview for size %s"
|
1869 |
msgstr ""
|
1870 |
|
1871 |
+
#: src/purge.cls.php:197
|
1872 |
msgid "Purged all caches successfully."
|
1873 |
msgstr ""
|
1874 |
|
1875 |
+
#: src/purge.cls.php:216
|
1876 |
msgid "Notified LiteSpeed Web Server to purge all LSCache entries."
|
1877 |
msgstr ""
|
1878 |
|
1879 |
+
#: src/purge.cls.php:235
|
1880 |
msgid "Cleaned all Critical CSS files."
|
1881 |
msgstr ""
|
1882 |
|
1883 |
+
#: src/purge.cls.php:254
|
1884 |
msgid "Cleaned all Unique CSS files."
|
1885 |
msgstr ""
|
1886 |
|
1887 |
+
#: src/purge.cls.php:288
|
1888 |
msgid "Cleaned all LQIP files."
|
1889 |
msgstr ""
|
1890 |
|
1891 |
+
#: src/purge.cls.php:305
|
1892 |
msgid "Cleaned all Gravatar files."
|
1893 |
msgstr ""
|
1894 |
|
1895 |
+
#: src/purge.cls.php:322
|
1896 |
msgid "Cleaned all localized resource entries."
|
1897 |
msgstr ""
|
1898 |
|
1899 |
+
#: src/purge.cls.php:356
|
1900 |
msgid "Notified LiteSpeed Web Server to purge CSS/JS entries."
|
1901 |
msgstr ""
|
1902 |
|
1903 |
+
#: src/purge.cls.php:372
|
1904 |
msgid "Opcode cache is not enabled."
|
1905 |
msgstr ""
|
1906 |
|
1907 |
+
#: src/purge.cls.php:384
|
1908 |
msgid "Reset the entire opcode cache successfully."
|
1909 |
msgstr ""
|
1910 |
|
1911 |
+
#: src/purge.cls.php:412
|
1912 |
msgid "Object cache is not enabled."
|
1913 |
msgstr ""
|
1914 |
|
1915 |
+
#: src/purge.cls.php:425
|
1916 |
msgid "Purge all object caches successfully."
|
1917 |
msgstr ""
|
1918 |
|
1919 |
+
#: src/purge.cls.php:638
|
1920 |
msgid "Notified LiteSpeed Web Server to purge the front page."
|
1921 |
msgstr ""
|
1922 |
|
1923 |
+
#: src/purge.cls.php:651
|
1924 |
msgid "Notified LiteSpeed Web Server to purge all pages."
|
1925 |
msgstr ""
|
1926 |
|
1927 |
+
#: src/purge.cls.php:670
|
1928 |
msgid "Notified LiteSpeed Web Server to purge error pages."
|
1929 |
msgstr ""
|
1930 |
|
1931 |
+
#: src/purge.cls.php:697
|
1932 |
msgid "Purge category %s"
|
1933 |
msgstr ""
|
1934 |
|
1935 |
+
#: src/purge.cls.php:724
|
1936 |
msgid "Purge tag %s"
|
1937 |
msgstr ""
|
1938 |
|
1939 |
+
#: src/purge.cls.php:755
|
1940 |
msgid "Purge url %s"
|
1941 |
msgstr ""
|
1942 |
|
1943 |
+
#: src/task.cls.php:122
|
1944 |
msgid "Every Minute"
|
1945 |
msgstr ""
|
1946 |
|
1947 |
+
#: src/task.cls.php:141
|
1948 |
msgid "LiteSpeed Crawler Cron"
|
1949 |
msgstr ""
|
1950 |
|
1951 |
+
#: src/utility.cls.php:236
|
1952 |
msgid "right now"
|
1953 |
msgstr ""
|
1954 |
|
1955 |
+
#: src/utility.cls.php:236
|
1956 |
msgid "just now"
|
1957 |
msgstr ""
|
1958 |
|
1959 |
+
#: src/utility.cls.php:239
|
1960 |
msgid " %s ago"
|
1961 |
msgstr ""
|
1962 |
|
1963 |
+
#: thirdparty/litespeed-check.cls.php:111
|
1964 |
+
msgid ""
|
1965 |
+
"Please consider disabling the following detected plugins, as they may "
|
1966 |
+
"conflict with LiteSpeed Cache:"
|
1967 |
+
msgstr ""
|
1968 |
+
|
1969 |
#: thirdparty/woocommerce.content.tpl.php:16
|
1970 |
msgid "WooCommerce Settings"
|
1971 |
msgstr ""
|
2090 |
msgid "Dismiss this notice"
|
2091 |
msgstr ""
|
2092 |
|
2093 |
+
#. #-#-#-#-# litespeed-cache.pot (LiteSpeed Cache 5.0) #-#-#-#-#
|
2094 |
#. Plugin Name of the plugin/theme
|
2095 |
+
#: tpl/banner/new_version.php:57 tpl/banner/new_version_dev.tpl.php:12
|
2096 |
#: tpl/cache/more_settings_tip.tpl.php:15 tpl/inc/admin_footer.php:8
|
2097 |
msgid "LiteSpeed Cache"
|
2098 |
msgstr ""
|
2099 |
|
2100 |
+
#: tpl/banner/new_version.php:57
|
2101 |
msgid "New Version Available!"
|
2102 |
msgstr ""
|
2103 |
|
2104 |
+
#: tpl/banner/new_version.php:61
|
2105 |
msgid "New release %s is available now."
|
2106 |
msgstr ""
|
2107 |
|
2108 |
+
#: tpl/banner/new_version.php:69 tpl/banner/new_version_dev.tpl.php:24
|
2109 |
+
#: tpl/toolbox/beta_test.tpl.php:62
|
2110 |
msgid "Upgrade"
|
2111 |
msgstr ""
|
2112 |
|
2113 |
+
#: tpl/banner/new_version.php:79
|
2114 |
msgid "Turn On Auto Upgrade"
|
2115 |
msgstr ""
|
2116 |
|
2117 |
+
#: tpl/banner/new_version.php:85
|
2118 |
msgid "Maybe Later"
|
2119 |
msgstr ""
|
2120 |
|
2130 |
msgid "Thank You for Using the LiteSpeed Cache Plugin!"
|
2131 |
msgstr ""
|
2132 |
|
2133 |
+
#: tpl/banner/score.php:28 tpl/dash/dashboard.tpl.php:179
|
2134 |
msgid "Page Load Time"
|
2135 |
msgstr ""
|
2136 |
|
2137 |
#: tpl/banner/score.php:34 tpl/banner/score.php:74
|
2138 |
+
#: tpl/dash/dashboard.tpl.php:192 tpl/dash/dashboard.tpl.php:260
|
2139 |
msgid "Before"
|
2140 |
msgstr ""
|
2141 |
|
2142 |
#: tpl/banner/score.php:45 tpl/banner/score.php:84
|
2143 |
+
#: tpl/dash/dashboard.tpl.php:201 tpl/dash/dashboard.tpl.php:268
|
2144 |
msgid "After"
|
2145 |
msgstr ""
|
2146 |
|
2147 |
#: tpl/banner/score.php:55 tpl/banner/score.php:94
|
2148 |
+
#: tpl/dash/dashboard.tpl.php:209 tpl/dash/dashboard.tpl.php:276
|
2149 |
msgid "Improved by"
|
2150 |
msgstr ""
|
2151 |
|
2152 |
+
#: tpl/banner/score.php:68 tpl/dash/dashboard.tpl.php:236
|
2153 |
msgid "PageSpeed Score"
|
2154 |
msgstr ""
|
2155 |
|
2215 |
msgstr ""
|
2216 |
|
2217 |
#: tpl/cache/entry.tpl.php:18 tpl/cache/entry_network.tpl.php:11
|
2218 |
+
#: tpl/toolbox/settings-debug.tpl.php:82
|
2219 |
msgid "Advanced"
|
2220 |
msgstr ""
|
2221 |
|
2229 |
|
2230 |
#: tpl/cache/more_settings_tip.tpl.php:12
|
2231 |
#: tpl/cache/settings-excludes.tpl.php:61
|
2232 |
+
#: tpl/cache/settings-excludes.tpl.php:94 tpl/cdn/auto_setup.tpl.php:235
|
2233 |
+
#: tpl/cdn/auto_setup.tpl.php:246 tpl/cdn/settings.tpl.php:78
|
2234 |
#: tpl/crawler/settings-general.tpl.php:39
|
2235 |
#: tpl/crawler/settings-general.tpl.php:140
|
2236 |
#: tpl/crawler/settings-general.tpl.php:145
|
2312 |
msgid "Please visit the <a %s>Information</a> page on how to test the cache."
|
2313 |
msgstr ""
|
2314 |
|
2315 |
+
#: tpl/cache/settings-cache.tpl.php:27 tpl/page_optm/entry.tpl.php:31
|
2316 |
msgid "NOTICE"
|
2317 |
msgstr ""
|
2318 |
|
2413 |
#: tpl/cache/settings-esi.tpl.php:35 tpl/cdn/manage.tpl.php:21
|
2414 |
#: tpl/crawler/summary.tpl.php:48 tpl/inc/check_cache_disabled.php:31
|
2415 |
#: tpl/inc/check_if_network_disable_all.php:18
|
2416 |
+
#: tpl/page_optm/settings_css.tpl.php:60 tpl/page_optm/settings_css.tpl.php:166
|
2417 |
#: tpl/page_optm/settings_localization.tpl.php:11
|
2418 |
msgid "WARNING"
|
2419 |
msgstr ""
|
2924 |
"the WordPress core is upgraded."
|
2925 |
msgstr ""
|
2926 |
|
2927 |
+
#: tpl/cdn/auto_setup.tpl.php:34
|
2928 |
+
msgid "Not running"
|
2929 |
+
msgstr ""
|
2930 |
+
|
2931 |
+
#: tpl/cdn/auto_setup.tpl.php:35
|
2932 |
+
msgid "Run CDN Setup"
|
2933 |
+
msgstr ""
|
2934 |
+
|
2935 |
+
#: tpl/cdn/auto_setup.tpl.php:42
|
2936 |
+
msgid "Done"
|
2937 |
+
msgstr ""
|
2938 |
+
|
2939 |
+
#: tpl/cdn/auto_setup.tpl.php:44
|
2940 |
+
msgid "Completed at %s"
|
2941 |
+
msgstr ""
|
2942 |
+
|
2943 |
+
#: tpl/cdn/auto_setup.tpl.php:50
|
2944 |
+
msgid "Paused"
|
2945 |
+
msgstr ""
|
2946 |
+
|
2947 |
+
#: tpl/cdn/auto_setup.tpl.php:54
|
2948 |
+
msgid "Verifying, waiting for nameservers to be updated."
|
2949 |
+
msgstr ""
|
2950 |
+
|
2951 |
+
#: tpl/cdn/auto_setup.tpl.php:54
|
2952 |
+
msgid "Click the refresh button below to refresh status."
|
2953 |
+
msgstr ""
|
2954 |
+
|
2955 |
+
#: tpl/cdn/auto_setup.tpl.php:56
|
2956 |
+
msgid "Last Verification Result"
|
2957 |
+
msgstr ""
|
2958 |
+
|
2959 |
+
#: tpl/cdn/auto_setup.tpl.php:59
|
2960 |
+
msgid "In Progress"
|
2961 |
+
msgstr ""
|
2962 |
+
|
2963 |
+
#: tpl/cdn/auto_setup.tpl.php:60
|
2964 |
+
msgid "You will receive an email upon status update."
|
2965 |
+
msgstr ""
|
2966 |
+
|
2967 |
+
#: tpl/cdn/auto_setup.tpl.php:60
|
2968 |
+
msgid "This process may take several minutes."
|
2969 |
+
msgstr ""
|
2970 |
+
|
2971 |
+
#: tpl/cdn/auto_setup.tpl.php:62
|
2972 |
+
msgid "Refresh CDN Setup Status"
|
2973 |
+
msgstr ""
|
2974 |
+
|
2975 |
+
#: tpl/cdn/auto_setup.tpl.php:68
|
2976 |
+
msgid "Auto QUIC.cloud CDN Setup"
|
2977 |
+
msgstr ""
|
2978 |
+
|
2979 |
+
#: tpl/cdn/auto_setup.tpl.php:71
|
2980 |
+
msgid ""
|
2981 |
+
"This is a three step process for configuring your site to use QUIC.cloud CDN "
|
2982 |
+
"with QUIC.cloud DNS. This setup will perform the following actions"
|
2983 |
+
msgstr ""
|
2984 |
+
|
2985 |
+
#: tpl/cdn/auto_setup.tpl.php:74
|
2986 |
+
msgid "Set up a QUIC.cloud account."
|
2987 |
+
msgstr ""
|
2988 |
+
|
2989 |
+
#: tpl/cdn/auto_setup.tpl.php:75
|
2990 |
+
msgid ""
|
2991 |
+
"Prepare the site for QUIC.cloud CDN, detect the DNS, and create a DNS Zone."
|
2992 |
+
msgstr ""
|
2993 |
+
|
2994 |
+
#: tpl/cdn/auto_setup.tpl.php:76
|
2995 |
+
msgid "Provide the nameservers necessary to enable the CDN."
|
2996 |
+
msgstr ""
|
2997 |
+
|
2998 |
+
#: tpl/cdn/auto_setup.tpl.php:78
|
2999 |
+
msgid ""
|
3000 |
+
"After successful DNS detection, QUIC.cloud will attempt to generate an SSL "
|
3001 |
+
"certificate and enable the CDN."
|
3002 |
+
msgstr ""
|
3003 |
+
|
3004 |
+
#: tpl/cdn/auto_setup.tpl.php:79
|
3005 |
+
msgid "This last stage could take 15 to 20 minutes."
|
3006 |
+
msgstr ""
|
3007 |
+
|
3008 |
+
#: tpl/cdn/auto_setup.tpl.php:80
|
3009 |
+
msgid ""
|
3010 |
+
"Your site will be available, but browsers may issue a \"not secure\" warning "
|
3011 |
+
"during this time."
|
3012 |
+
msgstr ""
|
3013 |
+
|
3014 |
+
#: tpl/cdn/auto_setup.tpl.php:85
|
3015 |
+
msgid ""
|
3016 |
+
"After you set your nameservers, QUIC.cloud will detect the change and "
|
3017 |
+
"automatically enable the CDN."
|
3018 |
+
msgstr ""
|
3019 |
+
|
3020 |
+
#: tpl/cdn/auto_setup.tpl.php:89 tpl/toolbox/report.tpl.php:81
|
3021 |
+
msgid "Notes"
|
3022 |
+
msgstr ""
|
3023 |
+
|
3024 |
+
#: tpl/cdn/auto_setup.tpl.php:93
|
3025 |
+
msgid "QUIC.cloud CDN/DNS does not support DNSSEC."
|
3026 |
+
msgstr ""
|
3027 |
+
|
3028 |
+
#: tpl/cdn/auto_setup.tpl.php:94
|
3029 |
+
msgid ""
|
3030 |
+
"If you have this enabled for your domain, you must disable DNSSEC to "
|
3031 |
+
"continue."
|
3032 |
+
msgstr ""
|
3033 |
+
|
3034 |
+
#: tpl/cdn/auto_setup.tpl.php:97
|
3035 |
+
msgid ""
|
3036 |
+
"This setup process will create a DNS zone on QUIC.cloud if one does not "
|
3037 |
+
"currently exist."
|
3038 |
+
msgstr ""
|
3039 |
+
|
3040 |
+
#: tpl/cdn/auto_setup.tpl.php:98
|
3041 |
+
msgid ""
|
3042 |
+
"If you prefer to use the CNAME setup, please <a %s>set up the CDN manually "
|
3043 |
+
"at QUIC.cloud</a>."
|
3044 |
+
msgstr ""
|
3045 |
+
|
3046 |
+
#: tpl/cdn/auto_setup.tpl.php:102
|
3047 |
+
msgid "QUIC.cloud will detect most normal DNS entries."
|
3048 |
+
msgstr ""
|
3049 |
+
|
3050 |
+
#: tpl/cdn/auto_setup.tpl.php:103
|
3051 |
+
msgid ""
|
3052 |
+
"If you have custom DNS records, it is possible that they are not detected."
|
3053 |
+
msgstr ""
|
3054 |
+
|
3055 |
+
#: tpl/cdn/auto_setup.tpl.php:104
|
3056 |
+
msgid ""
|
3057 |
+
"Visit your QUIC.cloud dashboard after the DNS Zone is set up to confirm your "
|
3058 |
+
"DNS zone."
|
3059 |
+
msgstr ""
|
3060 |
+
|
3061 |
+
#: tpl/cdn/auto_setup.tpl.php:109
|
3062 |
+
msgid "Set up QUIC.cloud Account"
|
3063 |
+
msgstr ""
|
3064 |
+
|
3065 |
+
#: tpl/cdn/auto_setup.tpl.php:114
|
3066 |
+
msgid "Account is linked!"
|
3067 |
+
msgstr ""
|
3068 |
+
|
3069 |
+
#: tpl/cdn/auto_setup.tpl.php:117
|
3070 |
+
msgid "Manage CDN"
|
3071 |
+
msgstr ""
|
3072 |
+
|
3073 |
+
#: tpl/cdn/auto_setup.tpl.php:121
|
3074 |
+
msgid "Manage DNS Zone"
|
3075 |
+
msgstr ""
|
3076 |
+
|
3077 |
+
#: tpl/cdn/auto_setup.tpl.php:127
|
3078 |
+
msgid "Ready to run CDN setup."
|
3079 |
+
msgstr ""
|
3080 |
+
|
3081 |
+
#: tpl/cdn/auto_setup.tpl.php:129
|
3082 |
+
msgid "Domain key and QUIC.cloud link detected."
|
3083 |
+
msgstr ""
|
3084 |
+
|
3085 |
+
#: tpl/cdn/auto_setup.tpl.php:130
|
3086 |
+
msgid "Begin QUIC.cloud CDN Setup"
|
3087 |
+
msgstr ""
|
3088 |
+
|
3089 |
+
#: tpl/cdn/auto_setup.tpl.php:132 tpl/general/settings.tpl.php:75
|
3090 |
+
#: tpl/general/settings.tpl.php:77 tpl/general/settings.tpl.php:106
|
3091 |
+
msgid "Link to QUIC.cloud"
|
3092 |
+
msgstr ""
|
3093 |
+
|
3094 |
+
#: tpl/cdn/auto_setup.tpl.php:136
|
3095 |
+
msgid "CDN Setup Status"
|
3096 |
+
msgstr ""
|
3097 |
+
|
3098 |
+
#: tpl/cdn/auto_setup.tpl.php:150
|
3099 |
+
msgid "QUIC.cloud Detected Records Summary"
|
3100 |
+
msgstr ""
|
3101 |
+
|
3102 |
+
#: tpl/cdn/auto_setup.tpl.php:156
|
3103 |
+
msgid "Record Type"
|
3104 |
+
msgstr ""
|
3105 |
+
|
3106 |
+
#: tpl/cdn/auto_setup.tpl.php:159
|
3107 |
+
msgid "Count"
|
3108 |
+
msgstr ""
|
3109 |
+
|
3110 |
+
#: tpl/cdn/auto_setup.tpl.php:171
|
3111 |
+
msgid "Record names found"
|
3112 |
+
msgstr ""
|
3113 |
+
|
3114 |
+
#: tpl/cdn/auto_setup.tpl.php:174
|
3115 |
+
msgid "Is something missing?"
|
3116 |
+
msgstr ""
|
3117 |
+
|
3118 |
+
#: tpl/cdn/auto_setup.tpl.php:176
|
3119 |
+
msgid "Review DNS records"
|
3120 |
+
msgstr ""
|
3121 |
+
|
3122 |
+
#: tpl/cdn/auto_setup.tpl.php:181
|
3123 |
+
msgid ""
|
3124 |
+
"Note: For 15 to 20 minutes after setup completes, browsers may issue a \"not "
|
3125 |
+
"secure\" warning for your site while QUIC.cloud generates your SSL "
|
3126 |
+
"certificate."
|
3127 |
+
msgstr ""
|
3128 |
+
|
3129 |
+
#: tpl/cdn/auto_setup.tpl.php:193
|
3130 |
+
msgid "Nameservers"
|
3131 |
+
msgstr ""
|
3132 |
+
|
3133 |
+
#: tpl/cdn/auto_setup.tpl.php:198
|
3134 |
+
msgid "Please update your domain registrar to use these custom nameservers:"
|
3135 |
+
msgstr ""
|
3136 |
+
|
3137 |
+
#: tpl/cdn/auto_setup.tpl.php:208
|
3138 |
+
msgid "QUIC.cloud will attempt to verify the DNS update."
|
3139 |
+
msgstr ""
|
3140 |
+
|
3141 |
+
#: tpl/cdn/auto_setup.tpl.php:209
|
3142 |
+
msgid ""
|
3143 |
+
"If it does not verify within 24 hours, the CDN setup will mark the "
|
3144 |
+
"verification as failed."
|
3145 |
+
msgstr ""
|
3146 |
+
|
3147 |
+
#: tpl/cdn/auto_setup.tpl.php:210
|
3148 |
+
msgid ""
|
3149 |
+
"At that stage, you may re-start the verification process by pressing the Run "
|
3150 |
+
"CDN Setup button."
|
3151 |
+
msgstr ""
|
3152 |
+
|
3153 |
+
#: tpl/cdn/auto_setup.tpl.php:214
|
3154 |
+
msgid ""
|
3155 |
+
"This section will automatically populate once nameservers are configured for "
|
3156 |
+
"the site."
|
3157 |
+
msgstr ""
|
3158 |
+
|
3159 |
+
#: tpl/cdn/auto_setup.tpl.php:223
|
3160 |
+
msgid "Action"
|
3161 |
+
msgstr ""
|
3162 |
+
|
3163 |
+
#: tpl/cdn/auto_setup.tpl.php:226
|
3164 |
+
msgid "The following actions are available:"
|
3165 |
+
msgstr ""
|
3166 |
+
|
3167 |
+
#: tpl/cdn/auto_setup.tpl.php:228 tpl/cdn/auto_setup.tpl.php:253
|
3168 |
+
msgid "Reset CDN Setup"
|
3169 |
+
msgstr ""
|
3170 |
+
|
3171 |
+
#: tpl/cdn/auto_setup.tpl.php:229
|
3172 |
+
msgid ""
|
3173 |
+
"Resets all LiteSpeed Cache plugin settings related to CDN setup back to the "
|
3174 |
+
"initial state and disables the CDN."
|
3175 |
+
msgstr ""
|
3176 |
+
|
3177 |
+
#: tpl/cdn/auto_setup.tpl.php:230
|
3178 |
+
msgid "QUIC.cloud DNS settings are not changed."
|
3179 |
+
msgstr ""
|
3180 |
+
|
3181 |
+
#: tpl/cdn/auto_setup.tpl.php:231
|
3182 |
+
msgid "This allows you to try Auto CDN setup again."
|
3183 |
+
msgstr ""
|
3184 |
+
|
3185 |
+
#: tpl/cdn/auto_setup.tpl.php:236
|
3186 |
+
msgid "This action will not update anything on the QUIC.cloud servers."
|
3187 |
+
msgstr ""
|
3188 |
+
|
3189 |
+
#: tpl/cdn/auto_setup.tpl.php:241 tpl/cdn/auto_setup.tpl.php:256
|
3190 |
+
msgid "Delete QUIC.cloud data"
|
3191 |
+
msgstr ""
|
3192 |
+
|
3193 |
+
#: tpl/cdn/auto_setup.tpl.php:242
|
3194 |
+
msgid ""
|
3195 |
+
"Resets all LiteSpeed Cache plugin settings related to CDN setup back to the "
|
3196 |
+
"initial state and deletes the DNS Zone, if one exists for the domain."
|
3197 |
+
msgstr ""
|
3198 |
+
|
3199 |
+
#: tpl/cdn/auto_setup.tpl.php:243
|
3200 |
+
msgid ""
|
3201 |
+
"This allows you to try Auto CDN setup again, or abandon the setup entirely."
|
3202 |
+
msgstr ""
|
3203 |
+
|
3204 |
+
#: tpl/cdn/auto_setup.tpl.php:247
|
3205 |
+
msgid ""
|
3206 |
+
"This action is not available if there is no domain key, the domain is not "
|
3207 |
+
"linked, or the DNS Zone is in active use."
|
3208 |
+
msgstr ""
|
3209 |
+
|
3210 |
+
#: tpl/cdn/auto_setup.tpl.php:248
|
3211 |
+
msgid ""
|
3212 |
+
"If you have not yet done so, please replace the QUIC.cloud nameservers at "
|
3213 |
+
"your domain registrar before proceeding. "
|
3214 |
+
msgstr ""
|
3215 |
+
|
3216 |
+
#: tpl/cdn/auto_setup.tpl.php:252
|
3217 |
+
msgid "Are you sure you want to reset CDN Setup?"
|
3218 |
+
msgstr ""
|
3219 |
+
|
3220 |
+
#: tpl/cdn/auto_setup.tpl.php:255
|
3221 |
+
msgid "Are you sure you want to delete QUIC.cloud data?"
|
3222 |
+
msgstr ""
|
3223 |
+
|
3224 |
#: tpl/cdn/entry.tpl.php:6 tpl/cdn/settings.tpl.php:21
|
3225 |
msgid "CDN Settings"
|
3226 |
msgstr ""
|
3227 |
|
3228 |
+
#: tpl/cdn/entry.tpl.php:7
|
3229 |
+
msgid "QUIC.cloud CDN Setup"
|
3230 |
+
msgstr ""
|
3231 |
+
|
3232 |
+
#: tpl/cdn/entry.tpl.php:15
|
3233 |
msgid "LiteSpeed Cache CDN"
|
3234 |
msgstr ""
|
3235 |
|
3462 |
msgid "Remove from Blocklist"
|
3463 |
msgstr ""
|
3464 |
|
3465 |
+
#: tpl/crawler/blacklist.tpl.php:54
|
3466 |
+
msgid "PHP Constant %s available to disable blocklist."
|
3467 |
+
msgstr ""
|
3468 |
+
|
3469 |
+
#: tpl/crawler/blacklist.tpl.php:57
|
3470 |
+
msgid "Filter %s available to disable blocklist."
|
3471 |
+
msgstr ""
|
3472 |
+
|
3473 |
+
#: tpl/crawler/blacklist.tpl.php:60
|
3474 |
msgid "Not blocklisted"
|
3475 |
msgstr ""
|
3476 |
|
3477 |
+
#: tpl/crawler/blacklist.tpl.php:61 tpl/crawler/map.tpl.php:69
|
3478 |
msgid "Blocklisted due to not cacheable"
|
3479 |
msgstr ""
|
3480 |
|
3481 |
+
#: tpl/crawler/blacklist.tpl.php:62 tpl/crawler/map.tpl.php:70
|
3482 |
#: tpl/crawler/summary.tpl.php:160 tpl/crawler/summary.tpl.php:184
|
3483 |
msgid "Blocklisted"
|
3484 |
msgstr ""
|
3529 |
msgid "Sitemap Total"
|
3530 |
msgstr ""
|
3531 |
|
3532 |
+
#: tpl/crawler/map.tpl.php:44 tpl/dash/dashboard.tpl.php:562
|
3533 |
msgid "Crawler Status"
|
3534 |
msgstr ""
|
3535 |
|
3702 |
msgid "Run time for previous crawler"
|
3703 |
msgstr ""
|
3704 |
|
3705 |
+
#: tpl/crawler/summary.tpl.php:85 tpl/dash/dashboard.tpl.php:575
|
3706 |
msgid "Current crawler started at"
|
3707 |
msgstr ""
|
3708 |
|
3709 |
+
#: tpl/crawler/summary.tpl.php:92 tpl/dash/dashboard.tpl.php:582
|
3710 |
msgid "Last interval"
|
3711 |
msgstr ""
|
3712 |
|
3713 |
+
#: tpl/crawler/summary.tpl.php:99 tpl/dash/dashboard.tpl.php:589
|
3714 |
msgid "Ended reason"
|
3715 |
msgstr ""
|
3716 |
|
3802 |
msgid "No crawler meta file generated yet"
|
3803 |
msgstr ""
|
3804 |
|
3805 |
+
#: tpl/dash/dashboard.tpl.php:44
|
3806 |
msgid "QUIC.cloud Service Usage Statistics"
|
3807 |
msgstr ""
|
3808 |
|
3809 |
+
#: tpl/dash/dashboard.tpl.php:47
|
3810 |
msgid "Sync data from Cloud"
|
3811 |
msgstr ""
|
3812 |
|
3813 |
+
#: tpl/dash/dashboard.tpl.php:59 tpl/dash/network_dash.tpl.php:29
|
3814 |
msgid "CDN Bandwidth"
|
3815 |
msgstr ""
|
3816 |
|
3817 |
+
#: tpl/dash/dashboard.tpl.php:60 tpl/dash/dashboard.tpl.php:498
|
3818 |
msgid "Low Quality Image Placeholder"
|
3819 |
msgstr ""
|
3820 |
|
3821 |
+
#: tpl/dash/dashboard.tpl.php:117 tpl/dash/network_dash.tpl.php:78
|
3822 |
msgid "Fast Queue Usage"
|
3823 |
msgstr ""
|
3824 |
|
3825 |
+
#: tpl/dash/dashboard.tpl.php:117 tpl/dash/network_dash.tpl.php:78
|
3826 |
msgid "Usage"
|
3827 |
msgstr ""
|
3828 |
|
3829 |
+
#: tpl/dash/dashboard.tpl.php:130 tpl/dash/network_dash.tpl.php:90
|
3830 |
msgid "PAYG Balance"
|
3831 |
msgstr ""
|
3832 |
|
3833 |
+
#: tpl/dash/dashboard.tpl.php:131 tpl/dash/network_dash.tpl.php:91
|
3834 |
msgid "This Month Usage"
|
3835 |
msgstr ""
|
3836 |
|
3837 |
+
#: tpl/dash/dashboard.tpl.php:133 tpl/dash/network_dash.tpl.php:93
|
3838 |
msgid "Pay as You Go Usage Statistics"
|
3839 |
msgstr ""
|
3840 |
|
3841 |
+
#: tpl/dash/dashboard.tpl.php:151 tpl/dash/network_dash.tpl.php:100
|
3842 |
msgid "Total Usage"
|
3843 |
msgstr ""
|
3844 |
|
3845 |
+
#: tpl/dash/dashboard.tpl.php:152 tpl/dash/network_dash.tpl.php:101
|
3846 |
msgid "Total images optimized in this month"
|
3847 |
msgstr ""
|
3848 |
|
3849 |
+
#: tpl/dash/dashboard.tpl.php:161
|
3850 |
msgid "Remaining Daily Quota"
|
3851 |
msgstr ""
|
3852 |
|
3853 |
+
#: tpl/dash/dashboard.tpl.php:170
|
3854 |
msgid "Go to QUIC.cloud dashboard"
|
3855 |
msgstr ""
|
3856 |
|
3857 |
+
#: tpl/dash/dashboard.tpl.php:182
|
3858 |
msgid "Refresh page load time"
|
3859 |
msgstr ""
|
3860 |
|
3861 |
+
#: tpl/dash/dashboard.tpl.php:223 tpl/dash/dashboard.tpl.php:292
|
3862 |
+
#: tpl/dash/dashboard.tpl.php:457 tpl/dash/dashboard.tpl.php:490
|
3863 |
+
#: tpl/dash/dashboard.tpl.php:522 tpl/dash/dashboard.tpl.php:554
|
3864 |
msgid "Last requested"
|
3865 |
msgstr ""
|
3866 |
|
3867 |
+
#: tpl/dash/dashboard.tpl.php:228
|
3868 |
msgid "Current closest Cloud server is %s. Click to redetect."
|
3869 |
msgstr ""
|
3870 |
|
3871 |
+
#: tpl/dash/dashboard.tpl.php:228 tpl/img_optm/summary.tpl.php:57
|
3872 |
+
#: tpl/page_optm/settings_css.tpl.php:92 tpl/page_optm/settings_css.tpl.php:202
|
3873 |
#: tpl/page_optm/settings_media.tpl.php:176
|
3874 |
+
#: tpl/page_optm/settings_vpi.tpl.php:48
|
3875 |
msgid ""
|
3876 |
"Are you sure you want to redetect the closest cloud server for this service?"
|
3877 |
msgstr ""
|
3878 |
|
3879 |
+
#: tpl/dash/dashboard.tpl.php:239
|
3880 |
msgid "Refresh page score"
|
3881 |
msgstr ""
|
3882 |
|
3883 |
+
#: tpl/dash/dashboard.tpl.php:300 tpl/img_optm/entry.tpl.php:6
|
3884 |
msgid "Image Optimization Summary"
|
3885 |
msgstr ""
|
3886 |
|
3887 |
+
#: tpl/dash/dashboard.tpl.php:301 tpl/dash/dashboard.tpl.php:390
|
3888 |
+
#: tpl/dash/dashboard.tpl.php:433 tpl/dash/dashboard.tpl.php:466
|
3889 |
+
#: tpl/dash/dashboard.tpl.php:499 tpl/dash/dashboard.tpl.php:531
|
3890 |
+
#: tpl/dash/dashboard.tpl.php:563
|
3891 |
msgid "More"
|
3892 |
msgstr ""
|
3893 |
|
3894 |
+
#: tpl/dash/dashboard.tpl.php:311
|
3895 |
msgid "Image Groups Prepared"
|
3896 |
msgstr ""
|
3897 |
|
3898 |
+
#: tpl/dash/dashboard.tpl.php:326
|
3899 |
msgid "Images Requested"
|
3900 |
msgstr ""
|
3901 |
|
3902 |
+
#: tpl/dash/dashboard.tpl.php:358 tpl/img_optm/summary.tpl.php:342
|
3903 |
msgid "Last Request"
|
3904 |
msgstr ""
|
3905 |
|
3906 |
+
#: tpl/dash/dashboard.tpl.php:361
|
3907 |
msgid "Last Pull"
|
3908 |
msgstr ""
|
3909 |
|
3910 |
+
#: tpl/dash/dashboard.tpl.php:389
|
3911 |
msgid "Cache Status"
|
3912 |
msgstr ""
|
3913 |
|
3914 |
+
#: tpl/dash/dashboard.tpl.php:395
|
3915 |
msgid "Public Cache"
|
3916 |
msgstr ""
|
3917 |
|
3918 |
+
#: tpl/dash/dashboard.tpl.php:396
|
3919 |
msgid "Private Cache"
|
3920 |
msgstr ""
|
3921 |
|
3922 |
+
#: tpl/dash/dashboard.tpl.php:418
|
3923 |
msgid "Cache Stats"
|
3924 |
msgstr ""
|
3925 |
|
3926 |
+
#: tpl/dash/dashboard.tpl.php:432 tpl/toolbox/purge.tpl.php:70
|
3927 |
msgid "Critical CSS"
|
3928 |
msgstr ""
|
3929 |
|
3930 |
+
#: tpl/dash/dashboard.tpl.php:438 tpl/dash/dashboard.tpl.php:471
|
3931 |
+
#: tpl/dash/dashboard.tpl.php:504 tpl/dash/dashboard.tpl.php:536
|
3932 |
+
#: tpl/page_optm/settings_css.tpl.php:83 tpl/page_optm/settings_css.tpl.php:193
|
3933 |
#: tpl/page_optm/settings_media.tpl.php:170
|
3934 |
+
#: tpl/page_optm/settings_vpi.tpl.php:42
|
3935 |
msgid "Last generated"
|
3936 |
msgstr ""
|
3937 |
|
3938 |
+
#: tpl/dash/dashboard.tpl.php:441 tpl/dash/dashboard.tpl.php:474
|
3939 |
+
#: tpl/dash/dashboard.tpl.php:507 tpl/dash/dashboard.tpl.php:539
|
3940 |
msgid "Time to execute previous request"
|
3941 |
msgstr ""
|
3942 |
|
3943 |
+
#: tpl/dash/dashboard.tpl.php:446 tpl/dash/dashboard.tpl.php:479
|
3944 |
+
#: tpl/dash/dashboard.tpl.php:512 tpl/dash/dashboard.tpl.php:544
|
3945 |
msgid "Requests in queue"
|
3946 |
msgstr ""
|
3947 |
|
3948 |
+
#: tpl/dash/dashboard.tpl.php:449 tpl/dash/dashboard.tpl.php:482
|
3949 |
+
#: tpl/dash/dashboard.tpl.php:514 tpl/dash/dashboard.tpl.php:546
|
3950 |
msgid "Force cron"
|
3951 |
msgstr ""
|
3952 |
|
3953 |
+
#: tpl/dash/dashboard.tpl.php:465 tpl/toolbox/purge.tpl.php:79
|
3954 |
msgid "Unique CSS"
|
3955 |
msgstr ""
|
3956 |
|
3957 |
+
#: tpl/dash/dashboard.tpl.php:530
|
3958 |
+
msgid "Viewport Image"
|
3959 |
+
msgstr ""
|
3960 |
+
|
3961 |
+
#: tpl/dash/dashboard.tpl.php:567
|
3962 |
msgid "Crawler(s)"
|
3963 |
msgstr ""
|
3964 |
|
3965 |
+
#: tpl/dash/dashboard.tpl.php:570
|
3966 |
msgid "Currently active crawler"
|
3967 |
msgstr ""
|
3968 |
|
3969 |
+
#: tpl/dash/dashboard.tpl.php:596
|
3970 |
msgid "<b>Last crawled:</b> %d item(s)"
|
3971 |
msgstr ""
|
3972 |
|
4156 |
msgid "A TTL of 0 indicates do not cache."
|
4157 |
msgstr ""
|
4158 |
|
4159 |
+
#: tpl/general/entry.tpl.php:7 tpl/page_optm/entry.tpl.php:13
|
4160 |
msgid "Tuning"
|
4161 |
msgstr ""
|
4162 |
|
4209 |
msgid "Visit My Dashboard on QUIC.cloud"
|
4210 |
msgstr ""
|
4211 |
|
|
|
|
|
|
|
|
|
|
|
4212 |
#: tpl/general/settings.tpl.php:82 tpl/general/settings.tpl.php:93
|
4213 |
+
#: tpl/general/settings.tpl.php:105 tpl/general/settings.tpl.php:182
|
4214 |
+
#: tpl/general/settings.tpl.php:188 tpl/general/settings.tpl.php:194
|
4215 |
+
#: tpl/general/settings.tpl.php:200 tpl/general/settings.tpl.php:217
|
4216 |
+
#: tpl/page_optm/settings_media.tpl.php:231
|
4217 |
+
#: tpl/page_optm/settings_vpi.tpl.php:32
|
4218 |
msgid "Notice"
|
4219 |
msgstr ""
|
4220 |
|
4272 |
msgid "A Domain Key is required for QUIC.cloud online services."
|
4273 |
msgstr ""
|
4274 |
|
4275 |
+
#: tpl/general/settings.tpl.php:116
|
4276 |
+
msgid "Main domain"
|
4277 |
+
msgstr ""
|
4278 |
+
|
4279 |
+
#: tpl/general/settings.tpl.php:119
|
4280 |
+
msgid "Main domain not generated yet"
|
4281 |
+
msgstr ""
|
4282 |
+
|
4283 |
+
#: tpl/general/settings.tpl.php:126
|
4284 |
msgid "Current Cloud Nodes in Service"
|
4285 |
msgstr ""
|
4286 |
|
4287 |
+
#: tpl/general/settings.tpl.php:127
|
4288 |
msgid "Click to clear all nodes for further redetection."
|
4289 |
msgstr ""
|
4290 |
|
4291 |
+
#: tpl/general/settings.tpl.php:127
|
4292 |
msgid "Are you sure you want to clear all cloud nodes?"
|
4293 |
msgstr ""
|
4294 |
|
4295 |
+
#: tpl/general/settings.tpl.php:139
|
4296 |
msgid "No cloud services currently in use"
|
4297 |
msgstr ""
|
4298 |
|
4299 |
+
#: tpl/general/settings.tpl.php:160
|
4300 |
msgid "This option enables maximum optimization for Guest Mode visitors."
|
4301 |
msgstr ""
|
4302 |
|
4303 |
+
#: tpl/general/settings.tpl.php:161
|
4304 |
msgid "Please read all warnings before enabling this option."
|
4305 |
msgstr ""
|
4306 |
|
4307 |
+
#: tpl/general/settings.tpl.php:175
|
4308 |
msgid "Your %1s quota on %2s will still be in use."
|
4309 |
msgstr ""
|
4310 |
|
4311 |
+
#: tpl/general/settings.tpl.php:182 tpl/page_optm/settings_media.tpl.php:231
|
4312 |
+
#: tpl/page_optm/settings_vpi.tpl.php:32
|
4313 |
+
msgid "%s must be turned ON for this setting to work."
|
4314 |
msgstr ""
|
4315 |
|
4316 |
+
#: tpl/general/settings.tpl.php:188 tpl/general/settings.tpl.php:200
|
4317 |
msgid "You need to turn %s on to get maximum result."
|
4318 |
msgstr ""
|
4319 |
|
4320 |
+
#: tpl/general/settings.tpl.php:194
|
4321 |
msgid ""
|
4322 |
"You need to turn %s on and finish all WebP generation to get maximum result."
|
4323 |
msgstr ""
|
4324 |
|
4325 |
+
#: tpl/general/settings.tpl.php:215
|
4326 |
msgid ""
|
4327 |
"Enter this site's IP address to allow cloud services directly call IP "
|
4328 |
"instead of domain name. This eliminates the overhead of DNS and CDN lookups."
|
4329 |
msgstr ""
|
4330 |
|
4331 |
+
#: tpl/general/settings.tpl.php:216
|
4332 |
msgid "Your server IP"
|
4333 |
msgstr ""
|
4334 |
|
4335 |
+
#: tpl/general/settings.tpl.php:216
|
4336 |
msgid "Check my public IP from"
|
4337 |
msgstr ""
|
4338 |
|
4339 |
+
#: tpl/general/settings.tpl.php:217
|
4340 |
msgid ""
|
4341 |
"the auto-detected IP may not be accurate if you have an additional outgoing "
|
4342 |
"IP set, or you have multiple IPs configured on your server."
|
4343 |
msgstr ""
|
4344 |
|
4345 |
+
#: tpl/general/settings.tpl.php:218
|
4346 |
msgid "Please make sure this IP is the correct one for visiting your site."
|
4347 |
msgstr ""
|
4348 |
|
4349 |
+
#: tpl/general/settings.tpl.php:233
|
4350 |
msgid ""
|
4351 |
"Turn this option ON to show latest news automatically, including hotfixes, "
|
4352 |
"new releases, available beta versions, and promotions."
|
4480 |
msgid "The image compression quality setting of WordPress out of 100."
|
4481 |
msgstr ""
|
4482 |
|
4483 |
+
#: tpl/img_optm/summary.tpl.php:57 tpl/page_optm/settings_css.tpl.php:92
|
4484 |
+
#: tpl/page_optm/settings_css.tpl.php:202
|
4485 |
#: tpl/page_optm/settings_media.tpl.php:176
|
4486 |
+
#: tpl/page_optm/settings_vpi.tpl.php:48
|
4487 |
msgid "Current closest Cloud server is %s. Click to redetect."
|
4488 |
msgstr ""
|
4489 |
|
4827 |
"dismissed. (<a %3$s>Learn More</a>)"
|
4828 |
msgstr ""
|
4829 |
|
4830 |
+
#: tpl/page_optm/entry.tpl.php:6 tpl/page_optm/settings_css.tpl.php:17
|
4831 |
msgid "CSS Settings"
|
4832 |
msgstr ""
|
4833 |
|
4843 |
msgid "Media Settings"
|
4844 |
msgstr ""
|
4845 |
|
4846 |
+
#: tpl/page_optm/entry.tpl.php:10
|
4847 |
+
msgid "VPI"
|
4848 |
+
msgstr ""
|
4849 |
+
|
4850 |
+
#: tpl/page_optm/entry.tpl.php:11 tpl/page_optm/settings_media_exc.tpl.php:7
|
4851 |
msgid "Media Excludes"
|
4852 |
msgstr ""
|
4853 |
|
4854 |
+
#: tpl/page_optm/entry.tpl.php:12
|
4855 |
msgid "Localization"
|
4856 |
msgstr ""
|
4857 |
|
4858 |
+
#: tpl/page_optm/entry.tpl.php:20
|
4859 |
msgid "LiteSpeed Cache Page Optimization"
|
4860 |
msgstr ""
|
4861 |
|
4862 |
+
#: tpl/page_optm/entry.tpl.php:32
|
4863 |
msgid ""
|
4864 |
"Please test thoroughly when enabling any option in this list. After changing "
|
4865 |
"Minify/Combine settings, please do a Purge All action."
|
4866 |
msgstr ""
|
4867 |
|
4868 |
+
#: tpl/page_optm/settings_css.tpl.php:31
|
4869 |
msgid "Minify CSS files and inline CSS code."
|
4870 |
msgstr ""
|
4871 |
|
4872 |
+
#: tpl/page_optm/settings_css.tpl.php:44
|
4873 |
msgid "Combine CSS files and inline CSS code."
|
4874 |
msgstr ""
|
4875 |
|
4876 |
+
#: tpl/page_optm/settings_css.tpl.php:45 tpl/page_optm/settings_js.tpl.php:35
|
4877 |
msgid "How to Fix Problems Caused by CSS/JS Optimization."
|
4878 |
msgstr ""
|
4879 |
|
4880 |
+
#: tpl/page_optm/settings_css.tpl.php:65
|
4881 |
msgid "Use QUIC.cloud online service to generate unique CSS."
|
4882 |
msgstr ""
|
4883 |
|
4884 |
+
#: tpl/page_optm/settings_css.tpl.php:66
|
4885 |
msgid "This will drop the unused CSS on each page from the combined file."
|
4886 |
msgstr ""
|
4887 |
|
4888 |
+
#: tpl/page_optm/settings_css.tpl.php:68
|
4889 |
msgid ""
|
4890 |
"Automatic generation of unique CSS is in the background via a cron-based "
|
4891 |
"queue."
|
4892 |
msgstr ""
|
4893 |
|
4894 |
+
#: tpl/page_optm/settings_css.tpl.php:69
|
4895 |
msgid "Filter %s available for UCSS per page type generation."
|
4896 |
msgstr ""
|
4897 |
|
4898 |
+
#: tpl/page_optm/settings_css.tpl.php:73
|
4899 |
msgid "This option is bypassed because %1$s option is %2$s."
|
4900 |
msgstr ""
|
4901 |
|
4902 |
+
#: tpl/page_optm/settings_css.tpl.php:86 tpl/page_optm/settings_css.tpl.php:196
|
4903 |
msgid "Last requested cost"
|
4904 |
msgstr ""
|
4905 |
|
4906 |
+
#: tpl/page_optm/settings_css.tpl.php:98 tpl/page_optm/settings_css.tpl.php:208
|
4907 |
+
#: tpl/page_optm/settings_vpi.tpl.php:54
|
4908 |
msgid "URL list in %s queue waiting for cron"
|
4909 |
msgstr ""
|
4910 |
|
4911 |
+
#: tpl/page_optm/settings_css.tpl.php:119
|
4912 |
+
#: tpl/page_optm/settings_css.tpl.php:229 tpl/page_optm/settings_vpi.tpl.php:74
|
4913 |
msgid "Run %s Queue Manually"
|
4914 |
msgstr ""
|
4915 |
|
4916 |
+
#: tpl/page_optm/settings_css.tpl.php:135
|
4917 |
msgid ""
|
4918 |
"Inline UCSS to reduce the extra CSS file loading. This option will not be "
|
4919 |
"automatically turned on for %1$s pages. To use it on %1$s pages, please set "
|
4920 |
"it to ON."
|
4921 |
msgstr ""
|
4922 |
|
4923 |
+
#: tpl/page_optm/settings_css.tpl.php:137
|
4924 |
msgid "This option will automatically bypass %s option."
|
4925 |
msgstr ""
|
4926 |
|
4927 |
+
#: tpl/page_optm/settings_css.tpl.php:151
|
4928 |
msgid ""
|
4929 |
"Include external CSS and inline CSS in combined file when %1$s is also "
|
4930 |
"enabled. This option helps maintain the priorities of CSS, which should "
|
4931 |
"minimize potential errors caused by CSS Combine."
|
4932 |
msgstr ""
|
4933 |
|
4934 |
+
#: tpl/page_optm/settings_css.tpl.php:170
|
4935 |
msgid "Optimize CSS delivery."
|
4936 |
msgstr ""
|
4937 |
|
4938 |
+
#: tpl/page_optm/settings_css.tpl.php:171
|
4939 |
#: tpl/page_optm/settings_html.tpl.php:129 tpl/page_optm/settings_js.tpl.php:67
|
4940 |
msgid ""
|
4941 |
"This can improve your speed score in services like Pingdom, GTmetrix and "
|
4942 |
"PageSpeed."
|
4943 |
msgstr ""
|
4944 |
|
4945 |
+
#: tpl/page_optm/settings_css.tpl.php:172
|
4946 |
msgid ""
|
4947 |
"Use QUIC.cloud online service to generate critical CSS and load remaining "
|
4948 |
"CSS asynchronously."
|
4949 |
msgstr ""
|
4950 |
|
4951 |
+
#: tpl/page_optm/settings_css.tpl.php:174
|
4952 |
msgid ""
|
4953 |
"Automatic generation of critical CSS is in the background via a cron-based "
|
4954 |
"queue."
|
4955 |
msgstr ""
|
4956 |
|
4957 |
+
#: tpl/page_optm/settings_css.tpl.php:175
|
4958 |
msgid ""
|
4959 |
"When this option is turned %s, it will also load Google Fonts asynchronously."
|
4960 |
msgstr ""
|
4961 |
|
4962 |
+
#: tpl/page_optm/settings_css.tpl.php:178
|
4963 |
msgid "Elements with attribute %s in HTML code will be excluded."
|
4964 |
msgstr ""
|
4965 |
|
4966 |
+
#: tpl/page_optm/settings_css.tpl.php:183
|
4967 |
msgid "This option is bypassed due to %s option."
|
4968 |
msgstr ""
|
4969 |
|
4970 |
+
#: tpl/page_optm/settings_css.tpl.php:244
|
4971 |
msgid ""
|
4972 |
"Disable this option to generate CCSS per Post Type instead of per page. This "
|
4973 |
"can save significant CCSS quota, however it may result in incorrect CSS "
|
4974 |
"styling if your site uses a page builder."
|
4975 |
msgstr ""
|
4976 |
|
4977 |
+
#: tpl/page_optm/settings_css.tpl.php:257
|
4978 |
msgid "This will inline the asynchronous CSS library to avoid render blocking."
|
4979 |
msgstr ""
|
4980 |
|
4981 |
+
#: tpl/page_optm/settings_css.tpl.php:268
|
4982 |
msgid "Default"
|
4983 |
msgstr ""
|
4984 |
|
4985 |
+
#: tpl/page_optm/settings_css.tpl.php:270
|
4986 |
msgid ""
|
4987 |
"Set this to append %1$s to all %2$s rules before caching CSS to specify how "
|
4988 |
"fonts should be displayed while being downloaded."
|
4989 |
msgstr ""
|
4990 |
|
4991 |
+
#: tpl/page_optm/settings_css.tpl.php:271
|
4992 |
msgid "%s is recommended."
|
4993 |
msgstr ""
|
4994 |
|
4995 |
+
#: tpl/page_optm/settings_css.tpl.php:271
|
4996 |
msgid "Swap"
|
4997 |
msgstr ""
|
4998 |
|
5142 |
msgid "Localize external resources."
|
5143 |
msgstr ""
|
5144 |
|
5145 |
+
#: tpl/page_optm/settings_localization.tpl.php:98
|
5146 |
+
msgid ""
|
5147 |
+
"Please thoroughly test all items in %s to ensure they function as expected."
|
5148 |
+
msgstr ""
|
5149 |
+
|
5150 |
+
#: tpl/page_optm/settings_localization.tpl.php:120
|
5151 |
msgid "Resources listed here will be copied and replaced with local URLs."
|
5152 |
msgstr ""
|
5153 |
|
5154 |
+
#: tpl/page_optm/settings_localization.tpl.php:121
|
5155 |
msgid "HTTPS sources only."
|
5156 |
msgstr ""
|
5157 |
|
5158 |
+
#: tpl/page_optm/settings_localization.tpl.php:125
|
5159 |
msgid ""
|
5160 |
"Comments are supported. Start a line with a %s to turn it into a comment "
|
5161 |
"line."
|
5162 |
msgstr ""
|
5163 |
|
5164 |
+
#: tpl/page_optm/settings_localization.tpl.php:127
|
5165 |
+
#: tpl/toolbox/beta_test.tpl.php:30
|
5166 |
+
msgid "Example"
|
5167 |
msgstr ""
|
5168 |
|
5169 |
+
#: tpl/page_optm/settings_localization.tpl.php:131
|
5170 |
+
msgid ""
|
5171 |
+
"Please thoroughly test each JS file you add to ensure it functions as "
|
5172 |
+
"expected."
|
5173 |
msgstr ""
|
5174 |
|
5175 |
#: tpl/page_optm/settings_media.tpl.php:27
|
5302 |
"and improve CLS (a Core Web Vitals metric)."
|
5303 |
msgstr ""
|
5304 |
|
5305 |
+
#: tpl/page_optm/settings_media.tpl.php:236
|
5306 |
+
msgid "Use %1$s to bypass remote image dimension check when %2$s is ON."
|
5307 |
msgstr ""
|
5308 |
|
5309 |
#: tpl/page_optm/settings_media_exc.tpl.php:21
|
5439 |
msgid "Selected roles will be excluded from all optimizations."
|
5440 |
msgstr ""
|
5441 |
|
5442 |
+
#: tpl/page_optm/settings_vpi.tpl.php:26
|
5443 |
+
msgid ""
|
5444 |
+
"When you use Lazy Load, it will delay the loading of all images on a page."
|
5445 |
+
msgstr ""
|
5446 |
+
|
5447 |
+
#: tpl/page_optm/settings_vpi.tpl.php:27
|
5448 |
+
msgid ""
|
5449 |
+
"The Viewport Images service detects which images appear above the fold, and "
|
5450 |
+
"excludes them from lazy load."
|
5451 |
+
msgstr ""
|
5452 |
+
|
5453 |
+
#: tpl/page_optm/settings_vpi.tpl.php:28
|
5454 |
+
msgid ""
|
5455 |
+
"This enables the page's initial screenful of imagery to be fully displayed "
|
5456 |
+
"without delay."
|
5457 |
+
msgstr ""
|
5458 |
+
|
5459 |
+
#: tpl/page_optm/settings_vpi.tpl.php:90
|
5460 |
+
msgid "Enable Viewport Images auto generation cron."
|
5461 |
+
msgstr ""
|
5462 |
+
|
5463 |
+
#: tpl/toolbox/beta_test.tpl.php:25
|
5464 |
msgid "Try GitHub Version"
|
5465 |
msgstr ""
|
5466 |
|
5467 |
+
#: tpl/toolbox/beta_test.tpl.php:29
|
5468 |
msgid ""
|
5469 |
"Use this section to switch plugin versions. To beta test a GitHub commit, "
|
5470 |
"enter the commit URL in the field below."
|
5471 |
msgstr ""
|
5472 |
|
5473 |
+
#: tpl/toolbox/beta_test.tpl.php:34
|
5474 |
msgid "Use latest GitHub Dev commit"
|
5475 |
msgstr ""
|
5476 |
|
5477 |
+
#: tpl/toolbox/beta_test.tpl.php:36
|
5478 |
msgid "Use latest GitHub Master commit"
|
5479 |
msgstr ""
|
5480 |
|
5481 |
+
#: tpl/toolbox/beta_test.tpl.php:38 tpl/toolbox/beta_test.tpl.php:54
|
5482 |
msgid "Use latest WordPress release version"
|
5483 |
msgstr ""
|
5484 |
|
5485 |
+
#: tpl/toolbox/beta_test.tpl.php:38
|
5486 |
msgid "OR"
|
5487 |
msgstr ""
|
5488 |
|
5489 |
+
#: tpl/toolbox/beta_test.tpl.php:49
|
5490 |
msgid ""
|
5491 |
"Downgrade not recommended. May cause fatal error due to refactored code."
|
5492 |
msgstr ""
|
5493 |
|
5494 |
+
#: tpl/toolbox/beta_test.tpl.php:53
|
5495 |
msgid ""
|
5496 |
"Press the %s button to use the most recent GitHub commit. Master is for "
|
5497 |
"release candidate & Dev is for experimental testing."
|
5498 |
msgstr ""
|
5499 |
|
5500 |
+
#: tpl/toolbox/beta_test.tpl.php:53
|
5501 |
msgid "Use latest GitHub Dev/Master commit"
|
5502 |
msgstr ""
|
5503 |
|
5504 |
+
#: tpl/toolbox/beta_test.tpl.php:54
|
5505 |
msgid ""
|
5506 |
"Press the %s button to stop beta testing and go back to the current release "
|
5507 |
"from the WordPress Plugin Directory."
|
5508 |
msgstr ""
|
5509 |
|
5510 |
+
#: tpl/toolbox/beta_test.tpl.php:59
|
5511 |
msgid ""
|
5512 |
"In order to avoid an upgrade error, you must be using %1$s or later before "
|
5513 |
"you can upgrade to %2$s versions."
|
5561 |
msgid "Report"
|
5562 |
msgstr ""
|
5563 |
|
5564 |
+
#: tpl/toolbox/entry.tpl.php:23 tpl/toolbox/settings-debug.tpl.php:22
|
5565 |
msgid "Debug Settings"
|
5566 |
msgstr ""
|
5567 |
|
5742 |
#: tpl/toolbox/purge.tpl.php:116
|
5743 |
msgid ""
|
5744 |
"Purge the cache entries created by this plugin except for Critical CSS & "
|
5745 |
+
"Unique CSS & LQIP caches"
|
5746 |
msgstr ""
|
5747 |
|
5748 |
#: tpl/toolbox/purge.tpl.php:125
|
5880 |
msgid "Generated links may be managed under <a %s>Settings</a>."
|
5881 |
msgstr ""
|
5882 |
|
|
|
|
|
|
|
|
|
5883 |
#: tpl/toolbox/report.tpl.php:85
|
5884 |
msgid "Optional"
|
5885 |
msgstr ""
|
5899 |
"the WordPress support forum."
|
5900 |
msgstr ""
|
5901 |
|
5902 |
+
#: tpl/toolbox/settings-debug.tpl.php:9
|
5903 |
+
msgid "Debug Helpers"
|
5904 |
+
msgstr ""
|
5905 |
+
|
5906 |
+
#: tpl/toolbox/settings-debug.tpl.php:13
|
5907 |
+
msgid "View Site Before Optimization"
|
5908 |
+
msgstr ""
|
5909 |
+
|
5910 |
+
#: tpl/toolbox/settings-debug.tpl.php:17
|
5911 |
+
msgid "View Site Before Cache"
|
5912 |
+
msgstr ""
|
5913 |
+
|
5914 |
+
#: tpl/toolbox/settings-debug.tpl.php:35
|
5915 |
msgid ""
|
5916 |
"This will disable LSCache and all optimization features for debug purpose."
|
5917 |
msgstr ""
|
5918 |
|
5919 |
+
#: tpl/toolbox/settings-debug.tpl.php:46
|
5920 |
msgid "Admin IP Only"
|
5921 |
msgstr ""
|
5922 |
|
5923 |
+
#: tpl/toolbox/settings-debug.tpl.php:48
|
5924 |
msgid "Outputs to WordPress debug log."
|
5925 |
msgstr ""
|
5926 |
|
5927 |
+
#: tpl/toolbox/settings-debug.tpl.php:49
|
5928 |
msgid ""
|
5929 |
"To prevent filling up the disk, this setting should be OFF when everything "
|
5930 |
"is working."
|
5931 |
msgstr ""
|
5932 |
|
5933 |
+
#: tpl/toolbox/settings-debug.tpl.php:50
|
5934 |
msgid ""
|
5935 |
"The Admin IP option will only output log messages on requests from admin IPs."
|
5936 |
msgstr ""
|
5937 |
|
5938 |
+
#: tpl/toolbox/settings-debug.tpl.php:51
|
5939 |
msgid "The logs will be output to %s."
|
5940 |
msgstr ""
|
5941 |
|
5942 |
+
#: tpl/toolbox/settings-debug.tpl.php:64
|
5943 |
msgid ""
|
5944 |
"Allows listed IPs (one per line) to perform certain actions from their "
|
5945 |
"browsers."
|
5946 |
msgstr ""
|
5947 |
|
5948 |
+
#: tpl/toolbox/settings-debug.tpl.php:65
|
5949 |
msgid "Your IP"
|
5950 |
msgstr ""
|
5951 |
|
5952 |
+
#: tpl/toolbox/settings-debug.tpl.php:70
|
5953 |
msgid "More information about the available commands can be found here."
|
5954 |
msgstr ""
|
5955 |
|
5956 |
+
#: tpl/toolbox/settings-debug.tpl.php:82
|
5957 |
msgid "Basic"
|
5958 |
msgstr ""
|
5959 |
|
5960 |
+
#: tpl/toolbox/settings-debug.tpl.php:84
|
5961 |
msgid "Advanced level will log more details."
|
5962 |
msgstr ""
|
5963 |
|
5964 |
+
#: tpl/toolbox/settings-debug.tpl.php:95
|
5965 |
msgid "MB"
|
5966 |
msgstr ""
|
5967 |
|
5968 |
+
#: tpl/toolbox/settings-debug.tpl.php:97
|
5969 |
msgid "Specify the maximum size of the log file."
|
5970 |
msgstr ""
|
5971 |
|
5972 |
+
#: tpl/toolbox/settings-debug.tpl.php:112
|
5973 |
msgid "Log requested cookie values."
|
5974 |
msgstr ""
|
5975 |
|
5976 |
+
#: tpl/toolbox/settings-debug.tpl.php:125
|
5977 |
msgid "Shorten query strings in the debug log to improve readability."
|
5978 |
msgstr ""
|
5979 |
|
5980 |
+
#: tpl/toolbox/settings-debug.tpl.php:138
|
5981 |
msgid "Only log listed pages."
|
5982 |
msgstr ""
|
5983 |
|
5984 |
+
#: tpl/toolbox/settings-debug.tpl.php:152
|
5985 |
msgid "Prevent any debug log of listed pages."
|
5986 |
msgstr ""
|
5987 |
|
5988 |
+
#: tpl/toolbox/settings-debug.tpl.php:166
|
5989 |
+
msgid "Prevent writing log entries that include listed strings."
|
5990 |
+
msgstr ""
|
5991 |
+
|
5992 |
#. Plugin URI of the plugin/theme
|
5993 |
msgid ""
|
5994 |
"https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration"
|
lib/css-min/urirewriter.cls.php
CHANGED
@@ -291,8 +291,8 @@ class UriRewriter
|
|
291 |
return $m[0];
|
292 |
}
|
293 |
|
294 |
-
// if not root/scheme relative and not starts with scheme
|
295 |
-
if (!preg_match('~^(
|
296 |
// URI is file-relative: rewrite depending on options
|
297 |
if (self::$_prependPath === null) {
|
298 |
$uri = self::rewriteRelative($uri, self::$_currentDir, self::$_docRoot, self::$_symlinks);
|
291 |
return $m[0];
|
292 |
}
|
293 |
|
294 |
+
// if not anchor id, not root/scheme relative, and not starts with scheme
|
295 |
+
if (!preg_match('~^(#|/|[a-z]+\:)~', $uri)) {
|
296 |
// URI is file-relative: rewrite depending on options
|
297 |
if (self::$_prependPath === null) {
|
298 |
$uri = self::rewriteRelative($uri, self::$_currentDir, self::$_docRoot, self::$_symlinks);
|
lib/object-cache.php
CHANGED
@@ -36,8 +36,11 @@ if ( ! $lscwp_dir || ! file_exists( $data_file ) || ( ! file_exists( $lib_file )
|
|
36 |
}
|
37 |
}
|
38 |
else {
|
|
|
|
|
|
|
39 |
// Init object cache & LSCWP
|
40 |
-
if ( file_exists( $lib_file ) ) {
|
41 |
require_once $lib_file;
|
42 |
}
|
43 |
}
|
36 |
}
|
37 |
}
|
38 |
else {
|
39 |
+
if ( ! LSCWP_OBJECT_CACHE ) { // Disable cache
|
40 |
+
wp_using_ext_object_cache(false);
|
41 |
+
}
|
42 |
// Init object cache & LSCWP
|
43 |
+
else if ( file_exists( $lib_file ) ) {
|
44 |
require_once $lib_file;
|
45 |
}
|
46 |
}
|
litespeed-cache.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: LiteSpeed Cache
|
4 |
* Plugin URI: https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration
|
5 |
* Description: High-performance page caching and site optimization from LiteSpeed
|
6 |
-
* Version:
|
7 |
* Author: LiteSpeed Technologies
|
8 |
* Author URI: https://www.litespeedtech.com
|
9 |
* License: GPLv3
|
@@ -33,7 +33,7 @@ if ( defined( 'LSCWP_V' ) ) {
|
|
33 |
return;
|
34 |
}
|
35 |
|
36 |
-
! defined( 'LSCWP_V' ) && define( 'LSCWP_V', '
|
37 |
|
38 |
! defined( 'LSCWP_CONTENT_DIR' ) && define( 'LSCWP_CONTENT_DIR', WP_CONTENT_DIR ) ;
|
39 |
! defined( 'LSCWP_DIR' ) && define( 'LSCWP_DIR', __DIR__ . '/' ) ;// Full absolute path '/var/www/html/***/wp-content/plugins/litespeed-cache/' or MU
|
3 |
* Plugin Name: LiteSpeed Cache
|
4 |
* Plugin URI: https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration
|
5 |
* Description: High-performance page caching and site optimization from LiteSpeed
|
6 |
+
* Version: 5.0
|
7 |
* Author: LiteSpeed Technologies
|
8 |
* Author URI: https://www.litespeedtech.com
|
9 |
* License: GPLv3
|
33 |
return;
|
34 |
}
|
35 |
|
36 |
+
! defined( 'LSCWP_V' ) && define( 'LSCWP_V', '5.0' );
|
37 |
|
38 |
! defined( 'LSCWP_CONTENT_DIR' ) && define( 'LSCWP_CONTENT_DIR', WP_CONTENT_DIR ) ;
|
39 |
! defined( 'LSCWP_DIR' ) && define( 'LSCWP_DIR', __DIR__ . '/' ) ;// Full absolute path '/var/www/html/***/wp-content/plugins/litespeed-cache/' or MU
|
readme.txt
CHANGED
@@ -2,8 +2,8 @@
|
|
2 |
Contributors: LiteSpeedTech
|
3 |
Tags: caching, optimize, performance, pagespeed, core web vitals, seo, speed, image optimize, compress, object cache, redis, memcached, database cleaner
|
4 |
Requires at least: 4.0
|
5 |
-
Tested up to:
|
6 |
-
Stable tag:
|
7 |
License: GPLv3
|
8 |
License URI: http://www.gnu.org/licenses/gpl.html
|
9 |
|
@@ -250,6 +250,42 @@ The vast majority of plugins and themes are compatible with LiteSpeed Cache. The
|
|
250 |
|
251 |
== Changelog ==
|
252 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
253 |
= 4.6 - Mar 29 2022 =
|
254 |
* **Page Optimize** Improved compatibility for JS Delay.
|
255 |
* 🐞**Page Optimize** Fixed an issue for network subsites that occurred when only CSS/JS Minify are enabled.
|
2 |
Contributors: LiteSpeedTech
|
3 |
Tags: caching, optimize, performance, pagespeed, core web vitals, seo, speed, image optimize, compress, object cache, redis, memcached, database cleaner
|
4 |
Requires at least: 4.0
|
5 |
+
Tested up to: 6.0.1
|
6 |
+
Stable tag: 5.0
|
7 |
License: GPLv3
|
8 |
License URI: http://www.gnu.org/licenses/gpl.html
|
9 |
|
250 |
|
251 |
== Changelog ==
|
252 |
|
253 |
+
= 5.0 - Jul 25 2022 =
|
254 |
+
* 🌱**VPI** Added Viewport Images feature to LiteSpeed Options metabox on Post Edit page.
|
255 |
+
* 🌱**CDN** Added Auto CDN Setup feature for simple QUIC.cloud CDN setup. (Kevin)
|
256 |
+
* 🌱**Page Optimize** Automatically cache remote CSS/JS files when fetching for optimization (Lauren)
|
257 |
+
* 🌱**Cache** Added LiteSpeed Options for page-level cache control on Post Edit page. (denisgomesfranco)
|
258 |
+
* 🌱**Cloud** Auto Alias feature.
|
259 |
+
* 🌱**Debug** Added `Debug String Excludes` option. (Hanna)
|
260 |
+
* 🌱**UCSS** Added `Purge this page - UCSS` option to Admin Bar dropdown menu. (Ankit)
|
261 |
+
* 🌱**Guest** Added `litespeed_guest_off=1` URL query string parameter to bypass Guest Mode. (cbdfactum)
|
262 |
+
* 🐞**Page Optimize** Fixed an issue where CSS anchors could be wrongly converted to a full path when minifying. (Tynan)
|
263 |
+
* **Page Optimize** Bypass CCSS/UCSS generation when a self-crawled CSS resource returns a 404 code. (Abe)
|
264 |
+
* **Object** Allow `LSCWP_OBJECT_CACHE` predefined to turn off Object Cache. (knutsp)
|
265 |
+
* **Data** Fixed an issue where empty version tags in the database repeatedly toggled the upgrade banner and reset settings to default.
|
266 |
+
* **Purge** Fixed an issue where the site's index page could be purged upon deletion of an unviewable post. (Kevin)
|
267 |
+
* **Toolbox** Added `View site before optimization` button under `Debug` tab. (Ryan D)
|
268 |
+
* **Admin** Switch to using the `DONOTCACHEPAGE` constant to indicated WP-Admin pages are not cacheable.
|
269 |
+
* **Admin** Moved no-cache header to very beginning to avoid caching unexpected exits.
|
270 |
+
* **Cloud** Added message queue service for VPI. (Abe)
|
271 |
+
* **Cloud** Bypassed 503 error nodes from node redetection process. (Abe)
|
272 |
+
* **Cloud** Fixed a failure to detect `out_of_quota`. (Lauren)
|
273 |
+
* **Cloud** Added ability to display dismissable banners generated by QUIC.cloud.
|
274 |
+
* 🕸️**Crawler** Added realtime load detection before crawl.
|
275 |
+
* 🕸️**Crawler** Adjusted crawler behavior for Divi pages to allow for Divi's CCSS generation process. (miketemby)
|
276 |
+
* 🕸️**API** PHP constant `LITESPEED_CRAWLER_DISABLE_BLOCKLIST` and filter `litespeed_crawler_disable_blocklist` to disable blocklist. (Tobolo)
|
277 |
+
* **CDN** Automatically add a trailing slash to `CDN URL` and `Original URLs` if user didn't provide one. (Lucas)
|
278 |
+
* **Cache** When a URL redirects to a URL with a query string, consider these as different for caching purposes. (Shivam)
|
279 |
+
* **Media** Added ability to disable lazyload from the LiteSpeed Options metabox on Post Edit page.
|
280 |
+
* **Media** Added new default values to `WebP Attribute to Replace` setting for WPBakery and Slider Revolution. (JibsouX)
|
281 |
+
* **Image Optimize** Dropped redundant `Page Speed` user agent when serving WebP images. (serpentdriver)
|
282 |
+
* **GUI** Fixed an issue where manually dismissable admin messages were instead being treated as one-time messages. (Tynan Beatty)
|
283 |
+
* **GUI** Fixed an issue where subsequent admin alerts would overwrite existing alerts in the queue. (Kevin/Tynan)
|
284 |
+
* **GUI** Updated time offset in log. (Ruikai #PR444 #PR445)
|
285 |
+
* **GUI** Added `litespeed_media_ignore_remote_missing_sizes` API description.
|
286 |
+
* **CCSS** Fixed an issue where CCSS was unexpectedly bypassed if `CSS Combine` was OFF and `UCSS Inline` was ON. (Ruikai)
|
287 |
+
* **Debug** Added resposne headers to debug log. (Kevin)
|
288 |
+
|
289 |
= 4.6 - Mar 29 2022 =
|
290 |
* **Page Optimize** Improved compatibility for JS Delay.
|
291 |
* 🐞**Page Optimize** Fixed an issue for network subsites that occurred when only CSS/JS Minify are enabled.
|
src/activation.cls.php
CHANGED
@@ -614,16 +614,15 @@ class Activation extends Base {
|
|
614 |
break;
|
615 |
|
616 |
case self::TYPE_DISMISS_RECOMMENDED:
|
617 |
-
|
618 |
-
|
619 |
-
Cloud::save_summary( $summary );
|
620 |
break;
|
621 |
|
622 |
case self::TYPE_INSTALL_ZIP:
|
|
|
623 |
$summary = Cloud::get_summary();
|
624 |
if ( ! empty( $summary[ 'news.zip' ] ) ) {
|
625 |
-
|
626 |
-
Cloud::save_summary( $summary );
|
627 |
|
628 |
$this->cls( 'Debug2' )->beta_test( $summary[ 'zip' ] );
|
629 |
}
|
614 |
break;
|
615 |
|
616 |
case self::TYPE_DISMISS_RECOMMENDED:
|
617 |
+
Cloud::reload_summary();
|
618 |
+
Cloud::save_summary( array( 'news.new' => 0 ) );
|
|
|
619 |
break;
|
620 |
|
621 |
case self::TYPE_INSTALL_ZIP:
|
622 |
+
Cloud::reload_summary();
|
623 |
$summary = Cloud::get_summary();
|
624 |
if ( ! empty( $summary[ 'news.zip' ] ) ) {
|
625 |
+
Cloud::save_summary( array( 'news.new' => 0 ) );
|
|
|
626 |
|
627 |
$this->cls( 'Debug2' )->beta_test( $summary[ 'zip' ] );
|
628 |
}
|
src/admin-display.cls.php
CHANGED
@@ -13,6 +13,8 @@ namespace LiteSpeed;
|
|
13 |
defined( 'WPINC' ) || exit;
|
14 |
|
15 |
class Admin_Display extends Base {
|
|
|
|
|
16 |
const NOTICE_BLUE = 'notice notice-info';
|
17 |
const NOTICE_GREEN = 'notice notice-success';
|
18 |
const NOTICE_RED = 'notice notice-error';
|
@@ -86,6 +88,8 @@ class Admin_Display extends Base {
|
|
86 |
else {
|
87 |
add_action( 'admin_menu', array( $this, 'register_admin_menu' ) );
|
88 |
}
|
|
|
|
|
89 |
}
|
90 |
|
91 |
/**
|
@@ -313,6 +317,10 @@ class Admin_Display extends Base {
|
|
313 |
else {
|
314 |
$cls .= ' is-dismissible';
|
315 |
}
|
|
|
|
|
|
|
|
|
316 |
return '<div class="' . $cls . '"><p>'. $str . '</p></div>';
|
317 |
}
|
318 |
|
@@ -342,9 +350,13 @@ class Admin_Display extends Base {
|
|
342 |
* @since 1.6
|
343 |
* @access public
|
344 |
*/
|
345 |
-
public static function
|
346 |
self::add_notice( self::NOTICE_GREEN, $msg, $echo, $irremovable );
|
347 |
}
|
|
|
|
|
|
|
|
|
348 |
|
349 |
/**
|
350 |
* Display error notice
|
@@ -356,6 +368,35 @@ class Admin_Display extends Base {
|
|
356 |
self::add_notice( self::NOTICE_RED, $msg, $echo, $irremovable );
|
357 |
}
|
358 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
359 |
/**
|
360 |
* Adds a notice to display on the admin page
|
361 |
*
|
@@ -390,7 +431,7 @@ class Admin_Display extends Base {
|
|
390 |
|
391 |
$msg_name = $irremovable ? self::DB_MSG_PIN : self::DB_MSG;
|
392 |
|
393 |
-
$messages = self::get_option( $msg_name );
|
394 |
if ( ! is_array( $messages ) ) {
|
395 |
$messages = array();
|
396 |
}
|
@@ -462,9 +503,9 @@ class Admin_Display extends Base {
|
|
462 |
echo $msg;
|
463 |
}
|
464 |
}
|
465 |
-
if ( $messages != -1 ) {
|
466 |
-
|
467 |
-
}
|
468 |
|
469 |
if( empty( $_GET[ 'page' ] ) || strpos( $_GET[ 'page' ], 'litespeed' ) !== 0 ) {
|
470 |
global $pagenow;
|
@@ -506,7 +547,7 @@ class Admin_Display extends Base {
|
|
506 |
return;
|
507 |
}
|
508 |
|
509 |
-
$messages = self::get_option( self::DB_MSG_PIN );
|
510 |
if ( ! is_array( $messages ) || empty( $messages[ $_GET[ 'msgid' ] ] ) ) {
|
511 |
return;
|
512 |
}
|
@@ -560,6 +601,16 @@ class Admin_Display extends Base {
|
|
560 |
require_once LSCWP_DIR . 'tpl/cdn/entry.tpl.php';
|
561 |
}
|
562 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
563 |
/**
|
564 |
* Outputs the LiteSpeed Cache settings page.
|
565 |
*
|
@@ -838,7 +889,7 @@ class Admin_Display extends Base {
|
|
838 |
$title_off = __( 'OFF', 'litespeed-cache' );
|
839 |
}
|
840 |
$cls = $checked ? 'primary' : 'default litespeed-toggleoff';
|
841 |
-
echo "<div class='litespeed-toggle litespeed-toggle-btn litespeed-toggle-btn-$cls' data-litespeed-toggle-on='primary' data-litespeed-toggle-off='default' data-
|
842 |
<input name='$id' type='hidden' value='$checked' />
|
843 |
<div class='litespeed-toggle-group'>
|
844 |
<label class='litespeed-toggle-btn litespeed-toggle-btn-primary litespeed-toggle-on'>$title_on</label>
|
13 |
defined( 'WPINC' ) || exit;
|
14 |
|
15 |
class Admin_Display extends Base {
|
16 |
+
const LOG_TAG = '👮♀️';
|
17 |
+
|
18 |
const NOTICE_BLUE = 'notice notice-info';
|
19 |
const NOTICE_GREEN = 'notice notice-success';
|
20 |
const NOTICE_RED = 'notice notice-error';
|
88 |
else {
|
89 |
add_action( 'admin_menu', array( $this, 'register_admin_menu' ) );
|
90 |
}
|
91 |
+
|
92 |
+
$this->cls( 'Metabox' )->register_settings();
|
93 |
}
|
94 |
|
95 |
/**
|
317 |
else {
|
318 |
$cls .= ' is-dismissible';
|
319 |
}
|
320 |
+
|
321 |
+
// possible translation
|
322 |
+
$str = Lang::maybe_translate( $str );
|
323 |
+
|
324 |
return '<div class="' . $cls . '"><p>'. $str . '</p></div>';
|
325 |
}
|
326 |
|
350 |
* @since 1.6
|
351 |
* @access public
|
352 |
*/
|
353 |
+
public static function success( $msg, $echo = false, $irremovable = false ) {
|
354 |
self::add_notice( self::NOTICE_GREEN, $msg, $echo, $irremovable );
|
355 |
}
|
356 |
+
/** @deprecated 4.7 */
|
357 |
+
public static function succeed( $msg, $echo = false, $irremovable = false ) {
|
358 |
+
self::success( $msg, $echo, $irremovable );
|
359 |
+
}
|
360 |
|
361 |
/**
|
362 |
* Display error notice
|
368 |
self::add_notice( self::NOTICE_RED, $msg, $echo, $irremovable );
|
369 |
}
|
370 |
|
371 |
+
/**
|
372 |
+
* Add irremovable msg
|
373 |
+
* @since 4.7
|
374 |
+
*/
|
375 |
+
public static function add_unique_notice( $color_mode, $msgs, $irremovable = false ) {
|
376 |
+
if ( ! is_array( $msgs ) ) $msgs = array( $msgs );
|
377 |
+
|
378 |
+
$color_map = array(
|
379 |
+
'info' => self::NOTICE_BLUE,
|
380 |
+
'note' => self::NOTICE_YELLOW,
|
381 |
+
'success' => self::NOTICE_GREEN,
|
382 |
+
'error' => self::NOTICE_RED,
|
383 |
+
);
|
384 |
+
if ( empty( $color_map[ $color_mode ] ) ) {
|
385 |
+
self::debug( 'Wrong admin display color mode!' );
|
386 |
+
return;
|
387 |
+
}
|
388 |
+
$color = $color_map[ $color_mode ];
|
389 |
+
|
390 |
+
// Go through to make sure unique
|
391 |
+
$filtered_msgs = array();
|
392 |
+
foreach ( $msgs as $k => $str ) {
|
393 |
+
if( is_numeric( $k ) ) $k = md5( $str ); // Use key to make it overwriteable to previous same msg
|
394 |
+
$filtered_msgs[ $k ] = $str;
|
395 |
+
}
|
396 |
+
|
397 |
+
self::add_notice( $color, $filtered_msgs, false, $irremovable );
|
398 |
+
}
|
399 |
+
|
400 |
/**
|
401 |
* Adds a notice to display on the admin page
|
402 |
*
|
431 |
|
432 |
$msg_name = $irremovable ? self::DB_MSG_PIN : self::DB_MSG;
|
433 |
|
434 |
+
$messages = self::get_option( $msg_name, array() );
|
435 |
if ( ! is_array( $messages ) ) {
|
436 |
$messages = array();
|
437 |
}
|
503 |
echo $msg;
|
504 |
}
|
505 |
}
|
506 |
+
// if ( $messages != -1 ) {
|
507 |
+
// self::update_option( self::DB_MSG_PIN, -1 );
|
508 |
+
// }
|
509 |
|
510 |
if( empty( $_GET[ 'page' ] ) || strpos( $_GET[ 'page' ], 'litespeed' ) !== 0 ) {
|
511 |
global $pagenow;
|
547 |
return;
|
548 |
}
|
549 |
|
550 |
+
$messages = self::get_option( self::DB_MSG_PIN, array() );
|
551 |
if ( ! is_array( $messages ) || empty( $messages[ $_GET[ 'msgid' ] ] ) ) {
|
552 |
return;
|
553 |
}
|
601 |
require_once LSCWP_DIR . 'tpl/cdn/entry.tpl.php';
|
602 |
}
|
603 |
|
604 |
+
/**
|
605 |
+
* Displays the CDN page.
|
606 |
+
*
|
607 |
+
* @since 3.0
|
608 |
+
* @access public
|
609 |
+
*/
|
610 |
+
public function show_menu_auto_cdn_setup() {
|
611 |
+
require_once LSCWP_DIR . 'tpl/auto_cdn_setup/entry.tpl.php';
|
612 |
+
}
|
613 |
+
|
614 |
/**
|
615 |
* Outputs the LiteSpeed Cache settings page.
|
616 |
*
|
889 |
$title_off = __( 'OFF', 'litespeed-cache' );
|
890 |
}
|
891 |
$cls = $checked ? 'primary' : 'default litespeed-toggleoff';
|
892 |
+
echo "<div class='litespeed-toggle litespeed-toggle-btn litespeed-toggle-btn-$cls' data-litespeed-toggle-on='primary' data-litespeed-toggle-off='default' data-litespeed_toggle_id='$id' >
|
893 |
<input name='$id' type='hidden' value='$checked' />
|
894 |
<div class='litespeed-toggle-group'>
|
895 |
<label class='litespeed-toggle-btn litespeed-toggle-btn-primary litespeed-toggle-on'>$title_on</label>
|
src/admin-settings.cls.php
CHANGED
@@ -107,7 +107,10 @@ class Admin_Settings extends Base {
|
|
107 |
if ( $child == self::CDN_MAPPING_FILETYPE ) {
|
108 |
$v = Utility::sanitize_lines( $v );
|
109 |
}
|
110 |
-
|
|
|
|
|
|
|
111 |
self::CDN_MAPPING_INC_IMG,
|
112 |
self::CDN_MAPPING_INC_CSS,
|
113 |
self::CDN_MAPPING_INC_JS,
|
107 |
if ( $child == self::CDN_MAPPING_FILETYPE ) {
|
108 |
$v = Utility::sanitize_lines( $v );
|
109 |
}
|
110 |
+
if ( $child == self::CDN_MAPPING_URL ) {
|
111 |
+
$v = trailingslashit( $v );
|
112 |
+
}
|
113 |
+
if ( in_array( $child, array(
|
114 |
self::CDN_MAPPING_INC_IMG,
|
115 |
self::CDN_MAPPING_INC_CSS,
|
116 |
self::CDN_MAPPING_INC_JS,
|
src/admin.cls.php
CHANGED
@@ -13,6 +13,8 @@ namespace LiteSpeed;
|
|
13 |
defined( 'WPINC' ) || exit;
|
14 |
|
15 |
class Admin extends Root {
|
|
|
|
|
16 |
const PAGE_EDIT_HTACCESS = 'litespeed-edit-htaccess';
|
17 |
|
18 |
/**
|
@@ -27,6 +29,9 @@ class Admin extends Root {
|
|
27 |
define( 'LSCWP_MU_PLUGIN', true );
|
28 |
}
|
29 |
|
|
|
|
|
|
|
30 |
// Additional litespeed assets on admin display
|
31 |
// Also register menu
|
32 |
$this->cls( 'Admin_Display' );
|
@@ -63,8 +68,6 @@ class Admin extends Root {
|
|
63 |
* @access public
|
64 |
*/
|
65 |
public function admin_init() {
|
66 |
-
Control::set_nocache( 'Admin page' );
|
67 |
-
|
68 |
// Hook attachment upload
|
69 |
if ( $this->conf( Base::O_IMG_OPTM_AUTO ) ) {
|
70 |
add_filter( 'wp_update_attachment_metadata', array( $this, 'wp_update_attachment_metadata' ), 9999, 2 );
|
13 |
defined( 'WPINC' ) || exit;
|
14 |
|
15 |
class Admin extends Root {
|
16 |
+
const LOG_TAG = '👮';
|
17 |
+
|
18 |
const PAGE_EDIT_HTACCESS = 'litespeed-edit-htaccess';
|
19 |
|
20 |
/**
|
29 |
define( 'LSCWP_MU_PLUGIN', true );
|
30 |
}
|
31 |
|
32 |
+
self::debug( 'No cache due to Admin page' );
|
33 |
+
defined( 'DONOTCACHEPAGE' ) || define( 'DONOTCACHEPAGE', true );
|
34 |
+
|
35 |
// Additional litespeed assets on admin display
|
36 |
// Also register menu
|
37 |
$this->cls( 'Admin_Display' );
|
68 |
* @access public
|
69 |
*/
|
70 |
public function admin_init() {
|
|
|
|
|
71 |
// Hook attachment upload
|
72 |
if ( $this->conf( Base::O_IMG_OPTM_AUTO ) ) {
|
73 |
add_filter( 'wp_update_attachment_metadata', array( $this, 'wp_update_attachment_metadata' ), 9999, 2 );
|
src/avatar.cls.php
CHANGED
@@ -226,8 +226,7 @@ class Avatar extends Base {
|
|
226 |
$file = $this->_realpath( $url );
|
227 |
|
228 |
// Update request status
|
229 |
-
|
230 |
-
self::save_summary();
|
231 |
|
232 |
// Generate
|
233 |
$this->_maybe_mk_cache_folder( 'avatar' );
|
@@ -245,10 +244,11 @@ class Avatar extends Base {
|
|
245 |
}
|
246 |
|
247 |
// Save summary data
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
|
|
252 |
|
253 |
// Update DB
|
254 |
$md5 = md5( $url );
|
226 |
$file = $this->_realpath( $url );
|
227 |
|
228 |
// Update request status
|
229 |
+
self::save_summary( array( 'curr_request' => time() ) );
|
|
|
230 |
|
231 |
// Generate
|
232 |
$this->_maybe_mk_cache_folder( 'avatar' );
|
244 |
}
|
245 |
|
246 |
// Save summary data
|
247 |
+
self::save_summary( array(
|
248 |
+
'last_spent' => time() - $this->_summary[ 'curr_request' ],
|
249 |
+
'last_request' => $this->_summary[ 'curr_request' ],
|
250 |
+
'curr_request' => 0,
|
251 |
+
) );
|
252 |
|
253 |
// Update DB
|
254 |
$md5 = md5( $url );
|
src/base.cls.php
CHANGED
@@ -109,6 +109,7 @@ class Base extends Root {
|
|
109 |
const O_DEBUG_COLLAPS_QS = 'debug-collaps_qs';
|
110 |
const O_DEBUG_INC = 'debug-inc';
|
111 |
const O_DEBUG_EXC = 'debug-exc';
|
|
|
112 |
|
113 |
## -------------------------------------------------- ##
|
114 |
## -------------- DB Optm ----------------- ##
|
@@ -202,6 +203,8 @@ class Base extends Root {
|
|
202 |
const O_MEDIA_IFRAME_LAZY_PARENT_CLS_EXC = 'media-iframe_lazy_parent_cls_exc';
|
203 |
const O_MEDIA_LAZY_URI_EXC = 'media-lazy_uri_exc';
|
204 |
const O_MEDIA_LQIP_EXC = 'media-lqip_exc';
|
|
|
|
|
205 |
|
206 |
## -------------------------------------------------- ##
|
207 |
## -------------- Image Optm ----------------- ##
|
@@ -260,6 +263,8 @@ class Base extends Root {
|
|
260 |
const O_CDN_CLOUDFLARE_ZONE = 'cdn-cloudflare_zone';
|
261 |
const O_CDN_MAPPING = 'cdn-mapping';
|
262 |
const O_CDN_ATTR = 'cdn-attr';
|
|
|
|
|
263 |
|
264 |
const NETWORK_O_USE_PRIMARY = 'use_primary_settings';
|
265 |
|
@@ -310,6 +315,8 @@ class Base extends Root {
|
|
310 |
self::O_CDN_CLOUDFLARE_ZONE,
|
311 |
self::O_CDN_MAPPING,
|
312 |
self::O_CDN_ATTR,
|
|
|
|
|
313 |
);
|
314 |
|
315 |
protected static $_default_options = array(
|
@@ -394,6 +401,7 @@ class Base extends Root {
|
|
394 |
self::O_DEBUG_COLLAPS_QS => false,
|
395 |
self::O_DEBUG_INC => array(),
|
396 |
self::O_DEBUG_EXC => array(),
|
|
|
397 |
|
398 |
// DB Optm
|
399 |
self::O_DB_OPTM_REVISIONS_MAX => 0,
|
@@ -477,6 +485,8 @@ class Base extends Root {
|
|
477 |
self::O_MEDIA_IFRAME_LAZY_PARENT_CLS_EXC => array(),
|
478 |
self::O_MEDIA_LAZY_URI_EXC => array(),
|
479 |
self::O_MEDIA_LQIP_EXC => array(),
|
|
|
|
|
480 |
|
481 |
// Image Optm
|
482 |
self::O_IMG_OPTM_AUTO => false,
|
@@ -528,6 +538,9 @@ class Base extends Root {
|
|
528 |
self::O_CDN_MAPPING => array(),
|
529 |
self::O_CDN_ATTR => array(),
|
530 |
|
|
|
|
|
|
|
531 |
);
|
532 |
|
533 |
protected static $_default_site_options = array(
|
@@ -573,6 +586,7 @@ class Base extends Root {
|
|
573 |
self::O_DEBUG_COLLAPS_QS => false,
|
574 |
self::O_DEBUG_INC => array(),
|
575 |
self::O_DEBUG_EXC => array(),
|
|
|
576 |
|
577 |
self::O_IMG_OPTM_WEBP_REPLACE => false,
|
578 |
|
@@ -814,7 +828,7 @@ class Base extends Root {
|
|
814 |
self::O_OPTM_CCSS_SEP_URI => 'uri',
|
815 |
// self::O_OPTM_JS_DEFER_EXC => 'uri',
|
816 |
self::O_OPTM_DNS_PREFETCH => 'domain',
|
817 |
-
self::O_CDN_ORI => 'noprotocol', // `Original URLs`
|
818 |
// self::O_OPTM_LOCALIZE_DOMAINS => 'noprotocol', // `Localize Resources`
|
819 |
// self:: => '',
|
820 |
// self:: => '',
|
@@ -872,6 +886,7 @@ class Base extends Root {
|
|
872 |
self::O_CDN_CLOUDFLARE_KEY,
|
873 |
self::O_OBJECT_PSWD,
|
874 |
self::O_API_KEY,
|
|
|
875 |
);
|
876 |
|
877 |
return in_array( $id, $check_ids );
|
109 |
const O_DEBUG_COLLAPS_QS = 'debug-collaps_qs';
|
110 |
const O_DEBUG_INC = 'debug-inc';
|
111 |
const O_DEBUG_EXC = 'debug-exc';
|
112 |
+
const O_DEBUG_EXC_STRINGS = 'debug-exc_strings';
|
113 |
|
114 |
## -------------------------------------------------- ##
|
115 |
## -------------- DB Optm ----------------- ##
|
203 |
const O_MEDIA_IFRAME_LAZY_PARENT_CLS_EXC = 'media-iframe_lazy_parent_cls_exc';
|
204 |
const O_MEDIA_LAZY_URI_EXC = 'media-lazy_uri_exc';
|
205 |
const O_MEDIA_LQIP_EXC = 'media-lqip_exc';
|
206 |
+
const O_MEDIA_VPI = 'media-vpi';
|
207 |
+
const O_MEDIA_VPI_CRON = 'media-vpi_cron';
|
208 |
|
209 |
## -------------------------------------------------- ##
|
210 |
## -------------- Image Optm ----------------- ##
|
263 |
const O_CDN_CLOUDFLARE_ZONE = 'cdn-cloudflare_zone';
|
264 |
const O_CDN_MAPPING = 'cdn-mapping';
|
265 |
const O_CDN_ATTR = 'cdn-attr';
|
266 |
+
const O_QC_TOKEN = 'qc-token';
|
267 |
+
const O_QC_NAMESERVERS = 'qc-nameservers';
|
268 |
|
269 |
const NETWORK_O_USE_PRIMARY = 'use_primary_settings';
|
270 |
|
315 |
self::O_CDN_CLOUDFLARE_ZONE,
|
316 |
self::O_CDN_MAPPING,
|
317 |
self::O_CDN_ATTR,
|
318 |
+
self::O_QC_TOKEN,
|
319 |
+
self::O_QC_NAMESERVERS,
|
320 |
);
|
321 |
|
322 |
protected static $_default_options = array(
|
401 |
self::O_DEBUG_COLLAPS_QS => false,
|
402 |
self::O_DEBUG_INC => array(),
|
403 |
self::O_DEBUG_EXC => array(),
|
404 |
+
self::O_DEBUG_EXC_STRINGS => array(),
|
405 |
|
406 |
// DB Optm
|
407 |
self::O_DB_OPTM_REVISIONS_MAX => 0,
|
485 |
self::O_MEDIA_IFRAME_LAZY_PARENT_CLS_EXC => array(),
|
486 |
self::O_MEDIA_LAZY_URI_EXC => array(),
|
487 |
self::O_MEDIA_LQIP_EXC => array(),
|
488 |
+
self::O_MEDIA_VPI => false,
|
489 |
+
self::O_MEDIA_VPI_CRON => false,
|
490 |
|
491 |
// Image Optm
|
492 |
self::O_IMG_OPTM_AUTO => false,
|
538 |
self::O_CDN_MAPPING => array(),
|
539 |
self::O_CDN_ATTR => array(),
|
540 |
|
541 |
+
self::O_QC_TOKEN => '',
|
542 |
+
self::O_QC_NAMESERVERS => '',
|
543 |
+
|
544 |
);
|
545 |
|
546 |
protected static $_default_site_options = array(
|
586 |
self::O_DEBUG_COLLAPS_QS => false,
|
587 |
self::O_DEBUG_INC => array(),
|
588 |
self::O_DEBUG_EXC => array(),
|
589 |
+
self::O_DEBUG_EXC_STRINGS => array(),
|
590 |
|
591 |
self::O_IMG_OPTM_WEBP_REPLACE => false,
|
592 |
|
828 |
self::O_OPTM_CCSS_SEP_URI => 'uri',
|
829 |
// self::O_OPTM_JS_DEFER_EXC => 'uri',
|
830 |
self::O_OPTM_DNS_PREFETCH => 'domain',
|
831 |
+
self::O_CDN_ORI => 'noprotocol,trailingslash', // `Original URLs`
|
832 |
// self::O_OPTM_LOCALIZE_DOMAINS => 'noprotocol', // `Localize Resources`
|
833 |
// self:: => '',
|
834 |
// self:: => '',
|
886 |
self::O_CDN_CLOUDFLARE_KEY,
|
887 |
self::O_OBJECT_PSWD,
|
888 |
self::O_API_KEY,
|
889 |
+
self::O_QC_TOKEN,
|
890 |
);
|
891 |
|
892 |
return in_array( $id, $check_ids );
|
src/cdn-setup.cls.php
ADDED
@@ -0,0 +1,389 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* CDN Setup service cls
|
4 |
+
*
|
5 |
+
* @since 3.0
|
6 |
+
*/
|
7 |
+
namespace LiteSpeed;
|
8 |
+
defined( 'WPINC' ) || exit;
|
9 |
+
|
10 |
+
class Cdn_Setup extends Base {
|
11 |
+
const LOG_TAG = '👷';
|
12 |
+
|
13 |
+
const TYPE_LINK = 'link';
|
14 |
+
const TYPE_NOLINK = 'nolink';
|
15 |
+
const TYPE_RUN = 'setup';
|
16 |
+
const TYPE_STATUS = 'status';
|
17 |
+
const TYPE_RESET = 'reset';
|
18 |
+
const TYPE_DELETE = 'delete';
|
19 |
+
|
20 |
+
private $_setup_token;
|
21 |
+
protected $_summary;
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Init
|
25 |
+
*
|
26 |
+
* @since 3.0
|
27 |
+
*/
|
28 |
+
public function __construct() {
|
29 |
+
$this->_setup_token = $this->conf( self::O_QC_TOKEN );
|
30 |
+
$this->_summary = self::get_summary();
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Update is_linked status if is a redirected back from QC
|
35 |
+
*
|
36 |
+
* @since 3.0
|
37 |
+
*/
|
38 |
+
public function maybe_extract_token() {
|
39 |
+
$params = $this->cls( 'Cloud' )->parse_qc_redir( [ 'token' ] );
|
40 |
+
|
41 |
+
if ( isset( $params[ 'token' ] ) ) {
|
42 |
+
$this->_setup_token = $params[ 'token' ];
|
43 |
+
$this->cls( 'Conf' )->update_confs( array( self::O_QC_TOKEN => $this->_setup_token ) );
|
44 |
+
unset( $_GET[ 'token' ] );
|
45 |
+
}
|
46 |
+
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Callback for updating Auto CDN Setup status after run
|
51 |
+
*
|
52 |
+
* @since 4.7
|
53 |
+
* @access public
|
54 |
+
*/
|
55 |
+
public function update_cdn_status() {
|
56 |
+
|
57 |
+
if ( !isset( $_POST[ 'success' ] ) || !isset( $_POST[ 'result' ] ) ) {
|
58 |
+
self::save_summary( array( 'cdn_setup_err' => __( 'Received invalid message from the cloud server. Please submit a ticket.', 'litespeed-cache' ) ) );
|
59 |
+
return self::err( 'lack_of_param' );
|
60 |
+
}
|
61 |
+
if (!$_POST[ 'success' ]) {
|
62 |
+
self::save_summary( array( 'cdn_setup_err' => $_POST[ 'result' ][ '_msg' ] ) );
|
63 |
+
Admin_Display::error( __( 'There was an error during CDN setup: ', 'litespeed-cache' ) . $_POST[ 'result' ][ '_msg' ] );
|
64 |
+
} else {
|
65 |
+
$this->_process_cdn_status($_POST[ 'result' ]);
|
66 |
+
}
|
67 |
+
|
68 |
+
return self::ok();
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Request an update on Auto CDN Setup status
|
73 |
+
*
|
74 |
+
* @since 4.7
|
75 |
+
* @access private
|
76 |
+
*/
|
77 |
+
private function _qc_refresh() {
|
78 |
+
|
79 |
+
$json = $this->cls('Cloud')->req_rest_api('/user/cdn/status');
|
80 |
+
|
81 |
+
if (!$json) {
|
82 |
+
return;
|
83 |
+
} else if (is_string($json)) {
|
84 |
+
self::save_summary( array( 'cdn_setup_err' => $json ) );
|
85 |
+
return;
|
86 |
+
}
|
87 |
+
|
88 |
+
$result = array();
|
89 |
+
if (isset($json['info']['messages'])) {
|
90 |
+
$result['_msg'] = implode('<br>', $json['info']['messages']);
|
91 |
+
}
|
92 |
+
$this->_process_cdn_status($result);
|
93 |
+
}
|
94 |
+
|
95 |
+
/**
|
96 |
+
* Process the returned Auto CDN Setup status
|
97 |
+
*
|
98 |
+
* @since 4.7
|
99 |
+
* @access private
|
100 |
+
*/
|
101 |
+
private function _process_cdn_status($result) {
|
102 |
+
|
103 |
+
if ( isset($result[ 'nameservers' ] ) ) {
|
104 |
+
if (isset($this->_summary['cdn_setup_err'])) {
|
105 |
+
unset($this->_summary['cdn_setup_err']);
|
106 |
+
}
|
107 |
+
if (isset($result[ 'summary' ])) {
|
108 |
+
$this->_summary[ 'cdn_dns_summary' ] = $result[ 'summary' ];
|
109 |
+
}
|
110 |
+
$this->cls( 'Cloud' )->set_linked();
|
111 |
+
$this->cls( 'Conf' )->update_confs( array( self::O_QC_NAMESERVERS => $result[ 'nameservers' ], self::O_CDN_QUIC => true ) );
|
112 |
+
Admin_Display::succeed( '🎊 ' . __( 'Congratulations, QUIC.cloud successfully set this domain up for the CDN. Please update your nameservers to:', 'litespeed-cache' ) . $result[ 'nameservers' ] );
|
113 |
+
} else if ( isset($result[ 'done' ] ) ) {
|
114 |
+
if ( isset( $this->_summary[ 'cdn_setup_err' ] ) ) {
|
115 |
+
unset( $this->_summary[ 'cdn_setup_err' ] );
|
116 |
+
}
|
117 |
+
if ( isset( $this->_summary[ 'cdn_verify_msg' ] ) ) {
|
118 |
+
unset( $this->_summary[ 'cdn_verify_msg' ] );
|
119 |
+
}
|
120 |
+
$this->_summary[ 'cdn_setup_done_ts' ] = time();
|
121 |
+
|
122 |
+
$this->_setup_token = '';
|
123 |
+
$this->cls( 'Conf' )->update_confs( array( self::O_QC_TOKEN => '', self::O_QC_NAMESERVERS => '' ) );
|
124 |
+
} else if ( isset($result[ '_msg' ] ) ) {
|
125 |
+
$notice = $result[ '_msg' ];
|
126 |
+
if ( $this->conf( Base::O_QC_NAMESERVERS )) {
|
127 |
+
$this->_summary[ 'cdn_verify_msg' ] = $result[ '_msg' ];
|
128 |
+
$notice = array('cdn_verify_msg' => $result[ '_msg' ]);
|
129 |
+
}
|
130 |
+
Admin_Display::succeed( $notice );
|
131 |
+
} else {
|
132 |
+
Admin_Display::succeed( __( 'CDN Setup is running.', 'litespeed-cache' ) );
|
133 |
+
}
|
134 |
+
self::save_summary();
|
135 |
+
}
|
136 |
+
|
137 |
+
/**
|
138 |
+
* Process the returned Auto CDN Setup status
|
139 |
+
*
|
140 |
+
* @since 4.7
|
141 |
+
* @access private
|
142 |
+
*/
|
143 |
+
private function _qc_reset($delete) {
|
144 |
+
$data = array(
|
145 |
+
'site_url' => home_url(),
|
146 |
+
);
|
147 |
+
|
148 |
+
if ($delete) {
|
149 |
+
$data['delete'] = 1;
|
150 |
+
}
|
151 |
+
|
152 |
+
if (!empty($this->_setup_token)) {
|
153 |
+
$data['rest'] = function_exists( 'rest_get_url_prefix' ) ? rest_get_url_prefix() : apply_filters( 'rest_url_prefix', 'wp-json' );
|
154 |
+
|
155 |
+
$json = $this->cls('Cloud')->req_rest_api('/user/cdn/reset', $data);
|
156 |
+
|
157 |
+
if (!$json) {
|
158 |
+
return;
|
159 |
+
} else if (is_string($json)) {
|
160 |
+
self::save_summary( array( 'cdn_setup_err' => $json ) );
|
161 |
+
return;
|
162 |
+
}
|
163 |
+
} else if ( ! isset( $this->_summary[ 'cdn_setup_done_ts' ] ) || ! $this->_summary[ 'cdn_setup_done_ts' ] ) {
|
164 |
+
Admin_Display::info( __( 'Notice: CDN Setup only reset locally.', 'litespeed-cache'));
|
165 |
+
} else if ( ! Cloud::get_summary( 'is_linked' ) ) {
|
166 |
+
|
167 |
+
Admin_Display::error( __( 'Cannot delete, site is not linked.', 'litespeed-cache' ) );
|
168 |
+
return;
|
169 |
+
|
170 |
+
} else {
|
171 |
+
|
172 |
+
$json = Cloud::post( Cloud::SVC_D_DEL_CDN_DNS, $data);
|
173 |
+
|
174 |
+
if (!is_array($json)) {
|
175 |
+
return;
|
176 |
+
}
|
177 |
+
}
|
178 |
+
|
179 |
+
if ( isset( $this->_summary[ 'cdn_setup_ts' ] ) ) {
|
180 |
+
unset( $this->_summary[ 'cdn_setup_ts' ] );
|
181 |
+
}
|
182 |
+
if ( isset( $this->_summary[ 'cdn_setup_done_ts' ] ) ) {
|
183 |
+
unset( $this->_summary[ 'cdn_setup_done_ts' ] );
|
184 |
+
}
|
185 |
+
if ( isset( $this->_summary[ 'cdn_setup_err' ] ) ) {
|
186 |
+
unset( $this->_summary[ 'cdn_setup_err' ] );
|
187 |
+
}
|
188 |
+
if ( isset( $this->_summary[ 'cdn_verify_msg' ] ) ) {
|
189 |
+
unset( $this->_summary[ 'cdn_verify_msg' ] );
|
190 |
+
}
|
191 |
+
if ( isset( $this->_summary[ 'cdn_dns_summary' ] ) ) {
|
192 |
+
unset( $this->_summary[ 'cdn_dns_summary' ] );
|
193 |
+
}
|
194 |
+
self::save_summary();
|
195 |
+
|
196 |
+
$this->_setup_token = '';
|
197 |
+
$this->cls( 'Conf' )->update_confs( array( self::O_QC_TOKEN => '', self::O_QC_NAMESERVERS => '', self::O_CDN_QUIC => false ) );
|
198 |
+
$msg = '';
|
199 |
+
if ($delete) {
|
200 |
+
$msg = __( 'CDN Setup Token and DNS zone deleted. Note: if my.quic.cloud account deletion is desired, that the account still exists and must be deleted separately.', 'litespeed-cache' );
|
201 |
+
} else {
|
202 |
+
$msg = __( 'CDN Setup Token reset. Note: if my.quic.cloud account deletion is desired, that the account still exists and must be deleted separately.', 'litespeed-cache' );
|
203 |
+
}
|
204 |
+
Admin_Display::succeed( $msg );
|
205 |
+
return self::ok();
|
206 |
+
}
|
207 |
+
|
208 |
+
/**
|
209 |
+
* If setup token already exists or not
|
210 |
+
*
|
211 |
+
* @since 4.7
|
212 |
+
*/
|
213 |
+
public function has_cdn_setup_token() {
|
214 |
+
return !empty( $this->_setup_token );
|
215 |
+
}
|
216 |
+
|
217 |
+
/**
|
218 |
+
* Get QC user setup token
|
219 |
+
*
|
220 |
+
* This method initiates a link to a QUIC.cloud account.
|
221 |
+
*
|
222 |
+
* @since 4.7
|
223 |
+
*/
|
224 |
+
private function _qc_link() {
|
225 |
+
if ( $this->has_cdn_setup_token() ) {
|
226 |
+
return;
|
227 |
+
}
|
228 |
+
|
229 |
+
$data = array(
|
230 |
+
'site_url' => home_url(),
|
231 |
+
'ref' => get_admin_url( null, 'admin.php?page=litespeed-cdn' ),
|
232 |
+
);
|
233 |
+
|
234 |
+
if ($this->_api_key) {
|
235 |
+
$data['domain_hash'] = md5( substr( $this->_api_key, 0, 8 ) );
|
236 |
+
}
|
237 |
+
|
238 |
+
wp_redirect( Cloud::CLOUD_SERVER_DASH . '/u/wptoken?data=' . Utility::arr2str( $data ) );
|
239 |
+
exit;
|
240 |
+
}
|
241 |
+
|
242 |
+
/**
|
243 |
+
* Get QC user setup token
|
244 |
+
*
|
245 |
+
* This method is used when the installation is already linked to an account.
|
246 |
+
*
|
247 |
+
* @since 4.7
|
248 |
+
*/
|
249 |
+
private function _qc_nolink() {
|
250 |
+
if ( $this->has_cdn_setup_token() ) {
|
251 |
+
return;
|
252 |
+
}
|
253 |
+
|
254 |
+
$data = array(
|
255 |
+
'site_url' => home_url(),
|
256 |
+
);
|
257 |
+
|
258 |
+
$json = Cloud::post( Cloud::SVC_D_SETUP_TOKEN, $data);
|
259 |
+
|
260 |
+
if (isset($json[ 'token' ])) {
|
261 |
+
self::save_summary( array( 'cdn_setup_ts' => time() ) );
|
262 |
+
$this->_setup_token = $json[ 'token' ];
|
263 |
+
$this->cls( 'Conf' )->update_confs( array( self::O_QC_TOKEN => $this->_setup_token ) );
|
264 |
+
}
|
265 |
+
}
|
266 |
+
|
267 |
+
/**
|
268 |
+
* Initiate or continue a QC CDN Setup.
|
269 |
+
*
|
270 |
+
* @since 4.7
|
271 |
+
*/
|
272 |
+
private function _qc_run() {
|
273 |
+
|
274 |
+
$data = array(
|
275 |
+
'site_url' => home_url(),
|
276 |
+
'rest' => function_exists( 'rest_get_url_prefix' ) ? rest_get_url_prefix() : apply_filters( 'rest_url_prefix', 'wp-json' ),
|
277 |
+
'server_ip' => $this->conf( self::O_SERVER_IP ),
|
278 |
+
);
|
279 |
+
|
280 |
+
if ( $this->_api_key ) {
|
281 |
+
$data['domain_hash'] = md5( substr( $this->_api_key, 0, 8 ) );
|
282 |
+
}
|
283 |
+
|
284 |
+
$__cloud = $this->cls( 'Cloud' );
|
285 |
+
$json = $__cloud->req_rest_api('/user/cdn/', $data);
|
286 |
+
|
287 |
+
if (!$json) {
|
288 |
+
return;
|
289 |
+
} else if (is_string($json)) {
|
290 |
+
self::save_summary( array( 'cdn_setup_err' => $json ) );
|
291 |
+
return;
|
292 |
+
}
|
293 |
+
|
294 |
+
$this->_summary[ 'cdn_setup_ts' ] = time();
|
295 |
+
|
296 |
+
$msg = '';
|
297 |
+
if (isset($json['info']['messages'])) {
|
298 |
+
$msg = implode('<br>', $json['info']['messages']);
|
299 |
+
}
|
300 |
+
|
301 |
+
$json = $json['result'];
|
302 |
+
|
303 |
+
if ( isset( $this->_summary[ 'cdn_setup_err' ] ) ) {
|
304 |
+
unset( $this->_summary[ 'cdn_setup_err' ] );
|
305 |
+
}
|
306 |
+
|
307 |
+
if ( isset( $this->_summary[ 'cdn_verify_msg' ] ) ) {
|
308 |
+
unset( $this->_summary[ 'cdn_verify_msg' ] );
|
309 |
+
}
|
310 |
+
self::save_summary();
|
311 |
+
|
312 |
+
// Save token option
|
313 |
+
if ( ! empty( $json[ 'token' ] ) ) {
|
314 |
+
$__cloud->set_keygen_token( $json[ 'token' ] );
|
315 |
+
}
|
316 |
+
|
317 |
+
// This is a ok msg
|
318 |
+
if ( ! empty( $msg ) ) {
|
319 |
+
self::debug( '_msg: ' . $msg );
|
320 |
+
|
321 |
+
$msg = __( 'Message from QUIC.cloud server', 'litespeed-cache' ) . ': ' . $msg;
|
322 |
+
Admin_Display::info( $msg );
|
323 |
+
return;
|
324 |
+
}
|
325 |
+
|
326 |
+
self::debug( '✅ Successfully start CDN setup.' );
|
327 |
+
}
|
328 |
+
|
329 |
+
/**
|
330 |
+
* Return succeeded response
|
331 |
+
*
|
332 |
+
* @since 3.0
|
333 |
+
*/
|
334 |
+
public static function ok( $data = array() ) {
|
335 |
+
$data[ '_res' ] = 'ok';
|
336 |
+
return $data;
|
337 |
+
}
|
338 |
+
|
339 |
+
/**
|
340 |
+
* Return error
|
341 |
+
*
|
342 |
+
* @since 3.0
|
343 |
+
*/
|
344 |
+
public static function err( $code ) {
|
345 |
+
return array( '_res' => 'err', '_msg' => $code );
|
346 |
+
}
|
347 |
+
|
348 |
+
/**
|
349 |
+
* Handle all request actions from main cls
|
350 |
+
*
|
351 |
+
* @since 3.0
|
352 |
+
* @access public
|
353 |
+
*/
|
354 |
+
public function handler() {
|
355 |
+
$type = Router::verify_type();
|
356 |
+
|
357 |
+
switch ( $type ) {
|
358 |
+
|
359 |
+
case self::TYPE_LINK:
|
360 |
+
$this->_qc_link();
|
361 |
+
break;
|
362 |
+
|
363 |
+
case self::TYPE_NOLINK:
|
364 |
+
$this->_qc_nolink();
|
365 |
+
break;
|
366 |
+
|
367 |
+
case self::TYPE_RUN:
|
368 |
+
$this->_qc_run();
|
369 |
+
break;
|
370 |
+
|
371 |
+
case self::TYPE_STATUS:
|
372 |
+
$this->_qc_refresh();
|
373 |
+
break;
|
374 |
+
|
375 |
+
case self::TYPE_RESET:
|
376 |
+
$this->_qc_reset(false);
|
377 |
+
break;
|
378 |
+
|
379 |
+
case self::TYPE_DELETE:
|
380 |
+
$this->_qc_reset(true);
|
381 |
+
break;
|
382 |
+
|
383 |
+
default:
|
384 |
+
break;
|
385 |
+
}
|
386 |
+
|
387 |
+
Admin::redirect();
|
388 |
+
}
|
389 |
+
}
|
src/cloud.cls.php
CHANGED
@@ -17,10 +17,14 @@ class Cloud extends Base {
|
|
17 |
const SVC_D_NODES = 'd/nodes';
|
18 |
const SVC_D_SYNC_CONF = 'd/sync_conf';
|
19 |
const SVC_D_USAGE = 'd/usage';
|
|
|
|
|
20 |
const SVC_PAGE_OPTM = 'page_optm';
|
21 |
const SVC_CCSS = 'ccss';
|
22 |
const SVC_UCSS = 'ucss';
|
|
|
23 |
const SVC_LQIP = 'lqip';
|
|
|
24 |
const SVC_IMG_OPTM = 'img_optm';
|
25 |
const SVC_HEALTH = 'health';
|
26 |
const SVC_CDN = 'cdn';
|
@@ -50,6 +54,8 @@ class Cloud extends Base {
|
|
50 |
self::API_REPORT,
|
51 |
// self::API_VER,
|
52 |
// self::API_BETA_TEST,
|
|
|
|
|
53 |
);
|
54 |
|
55 |
private static $WP_SVC_SET = array(
|
@@ -66,9 +72,14 @@ class Cloud extends Base {
|
|
66 |
self::API_BETA_TEST,
|
67 |
);
|
68 |
|
|
|
|
|
|
|
|
|
69 |
public static $SERVICES_LOAD_CHECK = array(
|
70 |
self::SVC_CCSS,
|
71 |
self::SVC_UCSS,
|
|
|
72 |
self::SVC_LQIP,
|
73 |
self::SVC_HEALTH,
|
74 |
);
|
@@ -78,9 +89,11 @@ class Cloud extends Base {
|
|
78 |
self::SVC_PAGE_OPTM,
|
79 |
self::SVC_CCSS,
|
80 |
self::SVC_UCSS,
|
|
|
81 |
self::SVC_LQIP,
|
82 |
self::SVC_CDN,
|
83 |
self::SVC_HEALTH,
|
|
|
84 |
);
|
85 |
|
86 |
const TYPE_CLEAR_PROMO = 'clear_promo';
|
@@ -91,6 +104,7 @@ class Cloud extends Base {
|
|
91 |
const TYPE_SYNC_USAGE = 'sync_usage';
|
92 |
|
93 |
private $_api_key;
|
|
|
94 |
protected $_summary;
|
95 |
|
96 |
/**
|
@@ -100,6 +114,7 @@ class Cloud extends Base {
|
|
100 |
*/
|
101 |
public function __construct() {
|
102 |
$this->_api_key = $this->conf( self::O_API_KEY );
|
|
|
103 |
$this->_summary = self::get_summary();
|
104 |
}
|
105 |
|
@@ -115,11 +130,10 @@ class Cloud extends Base {
|
|
115 |
|
116 |
$last_check = empty( $this->_summary[ 'last_request.' . self::API_VER ] ) ? 0 : $this->_summary[ 'last_request.' . self::API_VER ] ;
|
117 |
|
118 |
-
if ( time() - $last_check >
|
119 |
$auto_v = self::version_check( 'dev' );
|
120 |
if ( ! empty( $auto_v[ 'dev' ] ) ) {
|
121 |
-
|
122 |
-
self::save_summary( $this->_summary );
|
123 |
}
|
124 |
}
|
125 |
|
@@ -181,12 +195,11 @@ class Cloud extends Base {
|
|
181 |
* @since 2.9.9.1
|
182 |
*/
|
183 |
private function _update_news() {
|
184 |
-
if ( ! empty( $this->_summary[ 'news.utime' ] ) && time() - $this->_summary[ 'news.utime' ] < 86400 *
|
185 |
return;
|
186 |
}
|
187 |
|
188 |
-
|
189 |
-
self::save_summary();
|
190 |
|
191 |
$data = self::get( self::API_NEWS );
|
192 |
if ( empty( $data[ 'id' ] ) ) {
|
@@ -240,7 +253,7 @@ class Cloud extends Base {
|
|
240 |
$this->sync_usage();
|
241 |
}
|
242 |
|
243 |
-
if ( in_array( $service, array( self::SVC_CCSS, self::SVC_UCSS ) ) ) { // @since 4.2
|
244 |
$service = self::SVC_PAGE_OPTM;
|
245 |
}
|
246 |
|
@@ -362,7 +375,7 @@ class Cloud extends Base {
|
|
362 |
}
|
363 |
|
364 |
// Send request to Quic Online Service
|
365 |
-
$json = $this->_post( self::SVC_D_NODES, array( 'svc' => $service ) );
|
366 |
|
367 |
// Check if get list correctly
|
368 |
if ( empty( $json[ 'list' ] ) || ! is_array( $json[ 'list' ] ) ) {
|
@@ -376,12 +389,22 @@ class Cloud extends Base {
|
|
376 |
return false;
|
377 |
}
|
378 |
|
|
|
379 |
// Ping closest cloud
|
380 |
$speed_list = array();
|
381 |
foreach ( $json[ 'list' ] as $v ) {
|
|
|
|
|
|
|
|
|
382 |
$speed_list[ $v ] = Utility::ping( $v );
|
383 |
}
|
384 |
|
|
|
|
|
|
|
|
|
|
|
385 |
$min = min( $speed_list );
|
386 |
|
387 |
if ( $min == 99999 ) {
|
@@ -454,6 +477,14 @@ class Cloud extends Base {
|
|
454 |
return $this->_summary[ 'server.' . $service ];
|
455 |
}
|
456 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
457 |
/**
|
458 |
* Get data from QUIC cloud server
|
459 |
*
|
@@ -491,6 +522,7 @@ class Cloud extends Base {
|
|
491 |
$param = array(
|
492 |
'site_url' => home_url(),
|
493 |
'domain_key' => $this->_api_key,
|
|
|
494 |
'ver' => Core::VER,
|
495 |
);
|
496 |
|
@@ -502,8 +534,7 @@ class Cloud extends Base {
|
|
502 |
|
503 |
self::debug( 'getting from : ' . $url );
|
504 |
|
505 |
-
|
506 |
-
self::save_summary();
|
507 |
|
508 |
$response = wp_remote_get( $url, array( 'timeout' => 15, 'sslverify' => true ) );
|
509 |
|
@@ -517,7 +548,13 @@ class Cloud extends Base {
|
|
517 |
* @access private
|
518 |
*/
|
519 |
private function _maybe_cloud( $service_tag ) {
|
520 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
521 |
return false;
|
522 |
}
|
523 |
|
@@ -526,6 +563,11 @@ class Cloud extends Base {
|
|
526 |
return true;
|
527 |
}
|
528 |
|
|
|
|
|
|
|
|
|
|
|
529 |
$expiration_req = self::EXPIRATION_REQ;
|
530 |
// Limit frequent unfinished request to 5min
|
531 |
$timestamp_tag = 'curr_request.';
|
@@ -600,19 +642,23 @@ class Cloud extends Base {
|
|
600 |
return;
|
601 |
}
|
602 |
|
603 |
-
$url = $server . '/' . $service;
|
604 |
|
605 |
self::debug( 'posting to : ' . $url );
|
606 |
|
|
|
|
|
|
|
|
|
607 |
$param = array(
|
608 |
'site_url' => home_url(),
|
609 |
'domain_key' => $this->_api_key,
|
|
|
610 |
'ver' => Core::VER,
|
611 |
'data' => $data,
|
612 |
);
|
613 |
|
614 |
-
|
615 |
-
self::save_summary();
|
616 |
|
617 |
$response = wp_remote_post( $url, array( 'body' => $param, 'timeout' => $time_out ?: 15, 'sslverify' => true ) );
|
618 |
|
@@ -634,6 +680,11 @@ class Cloud extends Base {
|
|
634 |
$msg = __( 'Failed to request via WordPress', 'litespeed-cache' ) . ': ' . $error_message . " [server] $server [service] $service";
|
635 |
Admin_Display::error( $msg );
|
636 |
|
|
|
|
|
|
|
|
|
|
|
637 |
// Force redetect node
|
638 |
self::debug( 'Node error, redetecting node [svc] ' . $service );
|
639 |
$this->detect_cloud( $service, true );
|
@@ -650,6 +701,11 @@ class Cloud extends Base {
|
|
650 |
$msg = __( 'Failed to request via WordPress', 'litespeed-cache' ) . ': ' . $response[ 'body' ] . " [server] $server [service] $service";
|
651 |
Admin_Display::error( $msg );
|
652 |
|
|
|
|
|
|
|
|
|
|
|
653 |
// Force redetect node
|
654 |
self::debug( 'Node error, redetecting node [svc] ' . $service );
|
655 |
$this->detect_cloud( $service, true );
|
@@ -681,6 +737,30 @@ class Cloud extends Base {
|
|
681 |
return;
|
682 |
}
|
683 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
684 |
if ( ! empty( $json[ '_info' ] ) ) {
|
685 |
self::debug( '_info: ' . $json[ '_info' ] );
|
686 |
$msg = __( 'Message from QUIC.cloud server', 'litespeed-cache' ) . ': ' . $json[ '_info' ];
|
@@ -715,18 +795,18 @@ class Cloud extends Base {
|
|
715 |
|
716 |
$msg2 .= $this->_parse_link( $json );
|
717 |
Admin_Display::error( $msg . $msg2 );
|
718 |
-
return;
|
719 |
}
|
720 |
|
721 |
// Parse _carry_on info
|
722 |
if ( ! empty( $json[ '_carry_on' ] ) ) {
|
723 |
self::debug( 'Carry_on usage', $json[ '_carry_on' ] );
|
724 |
// Store generic info
|
725 |
-
foreach ( array( 'usage', 'promo' ) as $v ) {
|
726 |
if ( ! empty( $json[ '_carry_on' ][ $v ] ) ) {
|
727 |
switch ( $v ) {
|
728 |
case 'usage':
|
729 |
-
$usage_svc_tag = in_array( $service, array( self::SVC_CCSS, self::SVC_UCSS ) ) ? self::SVC_PAGE_OPTM : $service;
|
730 |
$this->_summary[ 'usage.' . $usage_svc_tag ] = $json[ '_carry_on' ][ $v ];
|
731 |
break;
|
732 |
|
@@ -737,6 +817,15 @@ class Cloud extends Base {
|
|
737 |
$this->_summary[ $v ][] = $json[ '_carry_on' ][ $v ];
|
738 |
break;
|
739 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
740 |
default:
|
741 |
break;
|
742 |
}
|
@@ -747,25 +836,34 @@ class Cloud extends Base {
|
|
747 |
}
|
748 |
|
749 |
// Parse general error msg
|
750 |
-
if ( empty( $json[ '_res' ] ) || $json[ '_res' ] !== 'ok' ) {
|
751 |
$json_msg = ! empty( $json[ '_msg' ] ) ? $json[ '_msg' ] : 'unknown';
|
752 |
-
self::debug( '❌ _err: ' . $json_msg );
|
753 |
|
754 |
-
$
|
|
|
755 |
$msg .= $this->_parse_link( $json );
|
756 |
Admin_Display::error( $msg );
|
757 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
758 |
// Site not on QC, delete invalid domain key
|
759 |
if ( $json_msg == 'site_not_registered' || $json_msg == 'err_key' ) {
|
760 |
-
$this->
|
761 |
-
|
762 |
-
$msg = __( 'Site not recognized. Domain Key has been automatically removed. Please request a new one.', 'litespeed-cache' );
|
763 |
-
$msg .= Doc::learn_more( admin_url( 'admin.php?page=litespeed-general' ), __( 'Click here to set.', 'litespeed-cache' ), true, false, true );
|
764 |
-
$msg .= Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/general/#domain-key', false, false, false, true );
|
765 |
-
Admin_Display::error( $msg, false, true );
|
766 |
}
|
767 |
|
768 |
-
return;
|
769 |
}
|
770 |
|
771 |
unset( $json[ '_res' ] );
|
@@ -773,18 +871,130 @@ class Cloud extends Base {
|
|
773 |
unset( $json[ '_msg' ] );
|
774 |
}
|
775 |
|
776 |
-
|
777 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
778 |
self::save_summary();
|
779 |
|
780 |
-
|
781 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
782 |
}
|
783 |
-
|
784 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
785 |
}
|
786 |
|
787 |
-
// Only successful request return Array
|
788 |
return $json;
|
789 |
}
|
790 |
|
@@ -884,6 +1094,16 @@ class Cloud extends Base {
|
|
884 |
return empty( $this->_summary[ 'token_ts' ] ) || time() - $this->_summary[ 'token_ts' ] > self::EXPIRATION_TOKEN;
|
885 |
}
|
886 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
887 |
/**
|
888 |
* Send request for domain key, get json [ 'token' => 'asdfasdf' ]
|
889 |
*
|
@@ -912,12 +1132,7 @@ class Cloud extends Base {
|
|
912 |
|
913 |
// Save token option
|
914 |
if ( ! empty( $json[ 'token' ] ) ) {
|
915 |
-
$this->
|
916 |
-
$this->_summary[ 'token_ts' ] = time();
|
917 |
-
if ( ! empty( $this->_summary[ 'apikey_ts' ] ) ) {
|
918 |
-
unset( $this->_summary[ 'apikey_ts' ] );
|
919 |
-
}
|
920 |
-
self::save_summary();
|
921 |
}
|
922 |
|
923 |
// Parse general error msg
|
@@ -994,6 +1209,9 @@ class Cloud extends Base {
|
|
994 |
|
995 |
$this->_summary[ 'is_linked' ] = $_POST[ 'is_linked' ] ? 1 : 0;
|
996 |
$this->_summary[ 'apikey_ts' ] = time();
|
|
|
|
|
|
|
997 |
// Clear token
|
998 |
unset( $this->_summary[ 'token' ] );
|
999 |
self::save_summary();
|
@@ -1055,30 +1273,56 @@ class Cloud extends Base {
|
|
1055 |
exit;
|
1056 |
}
|
1057 |
|
|
|
|
|
|
|
|
|
|
|
1058 |
/**
|
1059 |
* Update is_linked status if is a redirected back from QC
|
1060 |
*
|
1061 |
* @since 3.0
|
|
|
1062 |
*/
|
1063 |
-
public function
|
1064 |
-
|
1065 |
-
|
|
|
|
|
|
|
|
|
1066 |
}
|
1067 |
|
1068 |
-
if (
|
1069 |
-
return;
|
1070 |
}
|
|
|
1071 |
|
1072 |
-
if (
|
1073 |
-
|
1074 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
1075 |
}
|
1076 |
|
1077 |
-
$
|
1078 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1079 |
|
1080 |
// Drop QS
|
1081 |
-
echo "<script>window.history.pushState( 'remove_gen_link', document.title, window.location.href
|
|
|
1082 |
}
|
1083 |
|
1084 |
/**
|
@@ -1122,9 +1366,7 @@ class Cloud extends Base {
|
|
1122 |
|
1123 |
$json = json_decode( $response[ 'body' ], true );
|
1124 |
|
1125 |
-
|
1126 |
-
$this->_summary[ 'ips' ] = $json;
|
1127 |
-
self::save_summary();
|
1128 |
}
|
1129 |
|
1130 |
/**
|
17 |
const SVC_D_NODES = 'd/nodes';
|
18 |
const SVC_D_SYNC_CONF = 'd/sync_conf';
|
19 |
const SVC_D_USAGE = 'd/usage';
|
20 |
+
const SVC_D_SETUP_TOKEN = 'd/get_token';
|
21 |
+
const SVC_D_DEL_CDN_DNS = 'd/del_cdn_dns';
|
22 |
const SVC_PAGE_OPTM = 'page_optm';
|
23 |
const SVC_CCSS = 'ccss';
|
24 |
const SVC_UCSS = 'ucss';
|
25 |
+
const SVC_VPI = 'vpi';
|
26 |
const SVC_LQIP = 'lqip';
|
27 |
+
const SVC_QUEUE = 'queue';
|
28 |
const SVC_IMG_OPTM = 'img_optm';
|
29 |
const SVC_HEALTH = 'health';
|
30 |
const SVC_CDN = 'cdn';
|
54 |
self::API_REPORT,
|
55 |
// self::API_VER,
|
56 |
// self::API_BETA_TEST,
|
57 |
+
self::SVC_D_SETUP_TOKEN,
|
58 |
+
self::SVC_D_DEL_CDN_DNS,
|
59 |
);
|
60 |
|
61 |
private static $WP_SVC_SET = array(
|
72 |
self::API_BETA_TEST,
|
73 |
);
|
74 |
|
75 |
+
private static $_QUEUE_SVC_SET = array(
|
76 |
+
self::SVC_VPI,
|
77 |
+
);
|
78 |
+
|
79 |
public static $SERVICES_LOAD_CHECK = array(
|
80 |
self::SVC_CCSS,
|
81 |
self::SVC_UCSS,
|
82 |
+
// self::SVC_VPI,
|
83 |
self::SVC_LQIP,
|
84 |
self::SVC_HEALTH,
|
85 |
);
|
89 |
self::SVC_PAGE_OPTM,
|
90 |
self::SVC_CCSS,
|
91 |
self::SVC_UCSS,
|
92 |
+
self::SVC_VPI,
|
93 |
self::SVC_LQIP,
|
94 |
self::SVC_CDN,
|
95 |
self::SVC_HEALTH,
|
96 |
+
// self::SVC_QUEUE,
|
97 |
);
|
98 |
|
99 |
const TYPE_CLEAR_PROMO = 'clear_promo';
|
104 |
const TYPE_SYNC_USAGE = 'sync_usage';
|
105 |
|
106 |
private $_api_key;
|
107 |
+
private $_setup_token;
|
108 |
protected $_summary;
|
109 |
|
110 |
/**
|
114 |
*/
|
115 |
public function __construct() {
|
116 |
$this->_api_key = $this->conf( self::O_API_KEY );
|
117 |
+
$this->_setup_token = $this->conf( self::O_QC_TOKEN );
|
118 |
$this->_summary = self::get_summary();
|
119 |
}
|
120 |
|
130 |
|
131 |
$last_check = empty( $this->_summary[ 'last_request.' . self::API_VER ] ) ? 0 : $this->_summary[ 'last_request.' . self::API_VER ] ;
|
132 |
|
133 |
+
if ( time() - $last_check > 86400 ) {
|
134 |
$auto_v = self::version_check( 'dev' );
|
135 |
if ( ! empty( $auto_v[ 'dev' ] ) ) {
|
136 |
+
self::save_summary( array( 'version.dev' => $auto_v[ 'dev' ] ) );
|
|
|
137 |
}
|
138 |
}
|
139 |
|
195 |
* @since 2.9.9.1
|
196 |
*/
|
197 |
private function _update_news() {
|
198 |
+
if ( ! empty( $this->_summary[ 'news.utime' ] ) && time() - $this->_summary[ 'news.utime' ] < 86400 * 7 ) {
|
199 |
return;
|
200 |
}
|
201 |
|
202 |
+
self::save_summary( array( 'news.utime' => time() ) );
|
|
|
203 |
|
204 |
$data = self::get( self::API_NEWS );
|
205 |
if ( empty( $data[ 'id' ] ) ) {
|
253 |
$this->sync_usage();
|
254 |
}
|
255 |
|
256 |
+
if ( in_array( $service, array( self::SVC_CCSS, self::SVC_UCSS, self::SVC_VPI ) ) ) { // @since 4.2
|
257 |
$service = self::SVC_PAGE_OPTM;
|
258 |
}
|
259 |
|
375 |
}
|
376 |
|
377 |
// Send request to Quic Online Service
|
378 |
+
$json = $this->_post( self::SVC_D_NODES, array( 'svc' => $this->_maybe_queue( $service ) ) );
|
379 |
|
380 |
// Check if get list correctly
|
381 |
if ( empty( $json[ 'list' ] ) || ! is_array( $json[ 'list' ] ) ) {
|
389 |
return false;
|
390 |
}
|
391 |
|
392 |
+
|
393 |
// Ping closest cloud
|
394 |
$speed_list = array();
|
395 |
foreach ( $json[ 'list' ] as $v ) {
|
396 |
+
// Exclude possible failed 503 nodes
|
397 |
+
if ( ! empty( $this->_summary['disabled_node'] ) && ! empty($this->_summary['disabled_node'][$v]) && time() - $this->_summary['disabled_node'][$v] < 86400 ) {
|
398 |
+
continue;
|
399 |
+
}
|
400 |
$speed_list[ $v ] = Utility::ping( $v );
|
401 |
}
|
402 |
|
403 |
+
if ( ! $speed_list ) {
|
404 |
+
self::debug( 'nodes are in 503 failed nodes' );
|
405 |
+
return false;
|
406 |
+
}
|
407 |
+
|
408 |
$min = min( $speed_list );
|
409 |
|
410 |
if ( $min == 99999 ) {
|
477 |
return $this->_summary[ 'server.' . $service ];
|
478 |
}
|
479 |
|
480 |
+
/**
|
481 |
+
* May need to convert to queue service
|
482 |
+
*/
|
483 |
+
private function _maybe_queue( $service ) {
|
484 |
+
if ( in_array( $service, self::$_QUEUE_SVC_SET ) ) return self::SVC_QUEUE;
|
485 |
+
return $service;
|
486 |
+
}
|
487 |
+
|
488 |
/**
|
489 |
* Get data from QUIC cloud server
|
490 |
*
|
522 |
$param = array(
|
523 |
'site_url' => home_url(),
|
524 |
'domain_key' => $this->_api_key,
|
525 |
+
'main_domain' => ! empty( $this->_summary[ 'main_domain' ] ) ? $this->_summary[ 'main_domain' ] : '',
|
526 |
'ver' => Core::VER,
|
527 |
);
|
528 |
|
534 |
|
535 |
self::debug( 'getting from : ' . $url );
|
536 |
|
537 |
+
self::save_summary( array( 'curr_request.' . $service_tag => time() ) );
|
|
|
538 |
|
539 |
$response = wp_remote_get( $url, array( 'timeout' => 15, 'sslverify' => true ) );
|
540 |
|
548 |
* @access private
|
549 |
*/
|
550 |
private function _maybe_cloud( $service_tag ) {
|
551 |
+
$home_url = home_url();
|
552 |
+
if ( ! wp_http_validate_url( $home_url ) ) {
|
553 |
+
return false;
|
554 |
+
}
|
555 |
+
|
556 |
+
/** @since 5.0 If in valid err_domains, bypass request */
|
557 |
+
if ( $this->_is_err_domain( $home_url ) ) {
|
558 |
return false;
|
559 |
}
|
560 |
|
563 |
return true;
|
564 |
}
|
565 |
|
566 |
+
if ( $service_tag == self::SVC_D_SYNC_CONF && $this->_setup_token && ! $this->_api_key ) {
|
567 |
+
self::debug( "Skip sync conf if API key is not available yet." );
|
568 |
+
return false;
|
569 |
+
}
|
570 |
+
|
571 |
$expiration_req = self::EXPIRATION_REQ;
|
572 |
// Limit frequent unfinished request to 5min
|
573 |
$timestamp_tag = 'curr_request.';
|
642 |
return;
|
643 |
}
|
644 |
|
645 |
+
$url = $server . '/' . $this->_maybe_queue( $service );
|
646 |
|
647 |
self::debug( 'posting to : ' . $url );
|
648 |
|
649 |
+
if ( $data ) {
|
650 |
+
$data[ 'service_type' ] = $service; // For queue distribution usage
|
651 |
+
}
|
652 |
+
|
653 |
$param = array(
|
654 |
'site_url' => home_url(),
|
655 |
'domain_key' => $this->_api_key,
|
656 |
+
'main_domain' => ! empty( $this->_summary[ 'main_domain' ] ) ? $this->_summary[ 'main_domain' ] : '',
|
657 |
'ver' => Core::VER,
|
658 |
'data' => $data,
|
659 |
);
|
660 |
|
661 |
+
self::save_summary( array( 'curr_request.' . $service_tag => time() ) );
|
|
|
662 |
|
663 |
$response = wp_remote_post( $url, array( 'body' => $param, 'timeout' => $time_out ?: 15, 'sslverify' => true ) );
|
664 |
|
680 |
$msg = __( 'Failed to request via WordPress', 'litespeed-cache' ) . ': ' . $error_message . " [server] $server [service] $service";
|
681 |
Admin_Display::error( $msg );
|
682 |
|
683 |
+
// Tmp disabled this node from reusing in 1 day
|
684 |
+
if (empty($this->_summary['disabled_node'])) $this->_summary['disabled_node'] = array();
|
685 |
+
$this->_summary['disabled_node'][$server] = time();
|
686 |
+
self::save_summary();
|
687 |
+
|
688 |
// Force redetect node
|
689 |
self::debug( 'Node error, redetecting node [svc] ' . $service );
|
690 |
$this->detect_cloud( $service, true );
|
701 |
$msg = __( 'Failed to request via WordPress', 'litespeed-cache' ) . ': ' . $response[ 'body' ] . " [server] $server [service] $service";
|
702 |
Admin_Display::error( $msg );
|
703 |
|
704 |
+
// Tmp disabled this node from reusing in 1 day
|
705 |
+
if (empty($this->_summary['disabled_node'])) $this->_summary['disabled_node'] = array();
|
706 |
+
$this->_summary['disabled_node'][$server] = time();
|
707 |
+
self::save_summary();
|
708 |
+
|
709 |
// Force redetect node
|
710 |
self::debug( 'Node error, redetecting node [svc] ' . $service );
|
711 |
$this->detect_cloud( $service, true );
|
737 |
return;
|
738 |
}
|
739 |
|
740 |
+
list( $json, $return ) = $this->extract_msg( $json, $service, $server );
|
741 |
+
if ( $return ) return;
|
742 |
+
|
743 |
+
self::save_summary( array(
|
744 |
+
'last_request.' . $service_tag => $this->_summary[ 'curr_request.' . $service_tag ],
|
745 |
+
'curr_request.' . $service_tag => 0
|
746 |
+
));
|
747 |
+
|
748 |
+
if ( $json ) {
|
749 |
+
self::debug2( 'response ok', $json );
|
750 |
+
}
|
751 |
+
else {
|
752 |
+
self::debug2( 'response ok' );
|
753 |
+
}
|
754 |
+
|
755 |
+
// Only successful request return Array
|
756 |
+
return $json;
|
757 |
+
}
|
758 |
+
|
759 |
+
/**
|
760 |
+
* Extract msg from json
|
761 |
+
* @since 5.0
|
762 |
+
*/
|
763 |
+
public function extract_msg( $json, $service, $server = false, $is_callback = false ) {
|
764 |
if ( ! empty( $json[ '_info' ] ) ) {
|
765 |
self::debug( '_info: ' . $json[ '_info' ] );
|
766 |
$msg = __( 'Message from QUIC.cloud server', 'litespeed-cache' ) . ': ' . $json[ '_info' ];
|
795 |
|
796 |
$msg2 .= $this->_parse_link( $json );
|
797 |
Admin_Display::error( $msg . $msg2 );
|
798 |
+
return array( $json, true );
|
799 |
}
|
800 |
|
801 |
// Parse _carry_on info
|
802 |
if ( ! empty( $json[ '_carry_on' ] ) ) {
|
803 |
self::debug( 'Carry_on usage', $json[ '_carry_on' ] );
|
804 |
// Store generic info
|
805 |
+
foreach ( array( 'usage', 'promo', '_err', '_info', '_note', '_success' ) as $v ) {
|
806 |
if ( ! empty( $json[ '_carry_on' ][ $v ] ) ) {
|
807 |
switch ( $v ) {
|
808 |
case 'usage':
|
809 |
+
$usage_svc_tag = in_array( $service, array( self::SVC_CCSS, self::SVC_UCSS, self::SVC_VPI ) ) ? self::SVC_PAGE_OPTM : $service;
|
810 |
$this->_summary[ 'usage.' . $usage_svc_tag ] = $json[ '_carry_on' ][ $v ];
|
811 |
break;
|
812 |
|
817 |
$this->_summary[ $v ][] = $json[ '_carry_on' ][ $v ];
|
818 |
break;
|
819 |
|
820 |
+
case '_error':
|
821 |
+
case '_info':
|
822 |
+
case '_note':
|
823 |
+
case '_success':
|
824 |
+
$color_mode = substr( $v, 1 );
|
825 |
+
$msgs = $json[ '_carry_on' ][ $v ];
|
826 |
+
Admin_Display::add_unique_notice( $color_mode, $msgs, true );
|
827 |
+
break;
|
828 |
+
|
829 |
default:
|
830 |
break;
|
831 |
}
|
836 |
}
|
837 |
|
838 |
// Parse general error msg
|
839 |
+
if ( !$is_callback && ( empty( $json[ '_res' ] ) || $json[ '_res' ] !== 'ok' ) ) {
|
840 |
$json_msg = ! empty( $json[ '_msg' ] ) ? $json[ '_msg' ] : 'unknown';
|
841 |
+
self::debug( '❌ _err: ' . $json_msg, $json );
|
842 |
|
843 |
+
$str_translated = Error::msg( $json_msg );
|
844 |
+
$msg = __( 'Failed to communicate with QUIC.cloud server', 'litespeed-cache' ) . ': ' . $str_translated . " [server] $server [service] $service";
|
845 |
$msg .= $this->_parse_link( $json );
|
846 |
Admin_Display::error( $msg );
|
847 |
|
848 |
+
// QC may try auto alias
|
849 |
+
/** @since 5.0 Store the domain as `err_domains` only for QC auto alias feature */
|
850 |
+
if ( $json_msg == 'err_alias' ) {
|
851 |
+
if ( empty( $this->_summary[ 'err_domains' ] ) ) {
|
852 |
+
$this->_summary[ 'err_domains' ] = array();
|
853 |
+
}
|
854 |
+
$home_url = home_url();
|
855 |
+
if ( ! array_key_exists( $home_url, $this->_summary[ 'err_domains' ] ) ) {
|
856 |
+
$this->_summary[ 'err_domains' ][ $home_url ] = time();
|
857 |
+
}
|
858 |
+
self::save_summary();
|
859 |
+
}
|
860 |
+
|
861 |
// Site not on QC, delete invalid domain key
|
862 |
if ( $json_msg == 'site_not_registered' || $json_msg == 'err_key' ) {
|
863 |
+
$this->_clean_api_key();
|
|
|
|
|
|
|
|
|
|
|
864 |
}
|
865 |
|
866 |
+
return array( $json, true );
|
867 |
}
|
868 |
|
869 |
unset( $json[ '_res' ] );
|
871 |
unset( $json[ '_msg' ] );
|
872 |
}
|
873 |
|
874 |
+
return array( $json, false );
|
875 |
+
}
|
876 |
+
|
877 |
+
/**
|
878 |
+
* Clear API key and QC linked status
|
879 |
+
* @since 5.0
|
880 |
+
*/
|
881 |
+
private function _clean_api_key() {
|
882 |
+
$this->cls( 'Conf' )->update_confs( array( self::O_API_KEY => '' ) );
|
883 |
+
$this->_summary['is_linked'] = 0;
|
884 |
self::save_summary();
|
885 |
|
886 |
+
$msg = __( 'Site not recognized. Domain Key has been automatically removed. Please request a new one.', 'litespeed-cache' );
|
887 |
+
$msg .= Doc::learn_more( admin_url( 'admin.php?page=litespeed-general' ), __( 'Click here to set.', 'litespeed-cache' ), true, false, true );
|
888 |
+
$msg .= Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/general/#domain-key', false, false, false, true );
|
889 |
+
Admin_Display::error( $msg, false, true );
|
890 |
+
}
|
891 |
+
|
892 |
+
/**
|
893 |
+
* REST call: check if the error domain is valid call for auto alias purpose
|
894 |
+
* @since 5.0
|
895 |
+
*/
|
896 |
+
public function rest_err_domains() {
|
897 |
+
// Validate token hash first
|
898 |
+
if ( empty( $_POST[ 'hash' ] ) || empty( $_POST[ 'main_domain' ] ) || empty( $_POST[ 'alias' ] ) ) {
|
899 |
+
return self::err( 'lack_of_param' );
|
900 |
}
|
901 |
+
|
902 |
+
if ( ! $this->_api_key || $_POST[ 'hash' ] !== md5( substr( $this->_api_key, 1, 8 ) ) ) {
|
903 |
+
return self::err( 'wrong_hash' );
|
904 |
+
}
|
905 |
+
|
906 |
+
list( $post_data ) = $this->extract_msg( $_POST, 'Quic.cloud', false, true );
|
907 |
+
|
908 |
+
if ( $this->_is_err_domain( $_POST[ 'alias' ] ) ) {
|
909 |
+
$this->_remove_domain_from_err_list( $_POST[ 'alias' ] );
|
910 |
+
|
911 |
+
$res_hash = substr( $this->_api_key, 2, 4 );
|
912 |
+
|
913 |
+
self::debug( '__callback IP request hash: md5(' . $res_hash . ')' );
|
914 |
+
|
915 |
+
return self::ok( array( 'hash' => md5( $res_hash ) ) );
|
916 |
+
}
|
917 |
+
|
918 |
+
return self::err( 'Not an alias req from here' );
|
919 |
+
}
|
920 |
+
|
921 |
+
/**
|
922 |
+
* Remove a domain from err domain
|
923 |
+
* @since 5.0
|
924 |
+
*/
|
925 |
+
private function _remove_domain_from_err_list( $url ) {
|
926 |
+
unset( $this->_summary[ 'err_domains' ][ $url ] );
|
927 |
+
self::save_summary();
|
928 |
+
}
|
929 |
+
|
930 |
+
/**
|
931 |
+
* Check if is err domain
|
932 |
+
* @since 5.0
|
933 |
+
*/
|
934 |
+
private function _is_err_domain( $home_url ) {
|
935 |
+
if ( empty( $this->_summary[ 'err_domains' ] ) ) return false;
|
936 |
+
if ( ! array_key_exists( $home_url, $this->_summary[ 'err_domains' ] ) ) return false;
|
937 |
+
// Auto delete if too long ago
|
938 |
+
if ( time() - $this->_summary[ 'err_domains' ][ $home_url ] > 86400 * 10 ) {
|
939 |
+
$this->_remove_domain_from_err_list( $home_url );
|
940 |
+
}
|
941 |
+
if ( time() - $this->_summary[ 'err_domains' ][ $home_url ] > 86400 ) return false;
|
942 |
+
return true;
|
943 |
+
}
|
944 |
+
|
945 |
+
public function req_rest_api($api, $body = array())
|
946 |
+
{
|
947 |
+
|
948 |
+
$token = $this->_setup_token;
|
949 |
+
|
950 |
+
if (empty($token)) {
|
951 |
+
|
952 |
+
Admin_Display::error( __( 'Cannot request REST API, no token saved.', 'litespeed-cache' ));
|
953 |
+
return;
|
954 |
+
}
|
955 |
+
$req_args = array(
|
956 |
+
'headers' => array(
|
957 |
+
'Authorization' => 'bearer ' . $token,
|
958 |
+
'Content-Type' => 'application/json',
|
959 |
+
),
|
960 |
+
);
|
961 |
+
if (!empty($body)) {
|
962 |
+
$req_args['body'] = json_encode($body);
|
963 |
+
|
964 |
+
$response = wp_remote_post(self::CLOUD_SERVER . '/v2' . $api, $req_args);
|
965 |
+
} else {
|
966 |
+
$response = wp_remote_get(self::CLOUD_SERVER . '/v2' . $api, $req_args);
|
967 |
+
}
|
968 |
+
|
969 |
+
return $this->_parse_rest_response($response);
|
970 |
+
}
|
971 |
+
|
972 |
+
private function _parse_rest_response($response)
|
973 |
+
{
|
974 |
+
if ( is_wp_error( $response ) ) {
|
975 |
+
|
976 |
+
$error_message = $response->get_error_message();
|
977 |
+
self::debug( 'failed to request REST API: ' . $error_message );
|
978 |
+
Admin_Display::error( __( 'Cloud REST Error', 'litespeed-cache' ) . ': ' . $error_message );
|
979 |
+
return $error_message;
|
980 |
+
}
|
981 |
+
|
982 |
+
$json = json_decode( $response[ 'body' ], true );
|
983 |
+
|
984 |
+
if (!$json['success']) {
|
985 |
+
if (isset($json['info']['errors'])) {
|
986 |
+
$errs = array();
|
987 |
+
foreach ($json['info']['errors'] as $err) {
|
988 |
+
$errs[] = 'Error ' . $err['code'] . ': ' . $err['message'];
|
989 |
+
}
|
990 |
+
$error_message = implode('<br>', $errs);
|
991 |
+
} else {
|
992 |
+
$error_message = 'Unknown error, contact QUIC.cloud support.';
|
993 |
+
}
|
994 |
+
Admin_Display::error( __( 'Cloud REST API returned error: ', 'litespeed-cache' ) . $error_message );
|
995 |
+
return $error_message;
|
996 |
}
|
997 |
|
|
|
998 |
return $json;
|
999 |
}
|
1000 |
|
1094 |
return empty( $this->_summary[ 'token_ts' ] ) || time() - $this->_summary[ 'token_ts' ] > self::EXPIRATION_TOKEN;
|
1095 |
}
|
1096 |
|
1097 |
+
public function set_keygen_token($token)
|
1098 |
+
{
|
1099 |
+
$this->_summary[ 'token' ] = $token;
|
1100 |
+
$this->_summary[ 'token_ts' ] = time();
|
1101 |
+
if ( ! empty( $this->_summary[ 'apikey_ts' ] ) ) {
|
1102 |
+
unset( $this->_summary[ 'apikey_ts' ] );
|
1103 |
+
}
|
1104 |
+
self::save_summary();
|
1105 |
+
}
|
1106 |
+
|
1107 |
/**
|
1108 |
* Send request for domain key, get json [ 'token' => 'asdfasdf' ]
|
1109 |
*
|
1132 |
|
1133 |
// Save token option
|
1134 |
if ( ! empty( $json[ 'token' ] ) ) {
|
1135 |
+
$this->set_keygen_token( $json[ 'token' ] );
|
|
|
|
|
|
|
|
|
|
|
1136 |
}
|
1137 |
|
1138 |
// Parse general error msg
|
1209 |
|
1210 |
$this->_summary[ 'is_linked' ] = $_POST[ 'is_linked' ] ? 1 : 0;
|
1211 |
$this->_summary[ 'apikey_ts' ] = time();
|
1212 |
+
if ( ! empty( $_POST[ 'main_domain' ] ) ) {
|
1213 |
+
$this->_summary[ 'main_domain' ] = $_POST[ 'main_domain' ];
|
1214 |
+
}
|
1215 |
// Clear token
|
1216 |
unset( $this->_summary[ 'token' ] );
|
1217 |
self::save_summary();
|
1273 |
exit;
|
1274 |
}
|
1275 |
|
1276 |
+
public function set_linked() {
|
1277 |
+
$this->_summary[ 'is_linked' ] = 1;
|
1278 |
+
self::save_summary();
|
1279 |
+
}
|
1280 |
+
|
1281 |
/**
|
1282 |
* Update is_linked status if is a redirected back from QC
|
1283 |
*
|
1284 |
* @since 3.0
|
1285 |
+
* @since 5.0 renamed update_is_linked_status -> parse_qc_redir, add param for additional args. Return args if exist.
|
1286 |
*/
|
1287 |
+
public function parse_qc_redir($extra = array()) {
|
1288 |
+
|
1289 |
+
$extraRet = array();
|
1290 |
+
$qsDrop = array();
|
1291 |
+
if ( ! $this->_api_key && $this->_summary[ 'is_linked' ]) {
|
1292 |
+
$this->_summary[ 'is_linked' ] = 0;
|
1293 |
+
self::save_summary();
|
1294 |
}
|
1295 |
|
1296 |
+
if ( empty( $_GET[ 'qc_res' ] ) ) {
|
1297 |
+
return $extraRet;
|
1298 |
}
|
1299 |
+
$qsDrop[] = ".replace( '&qc_res=" . sanitize_key( $_GET[ 'qc_res' ] ) . ', \'\' )';
|
1300 |
|
1301 |
+
if ( ! empty( $_GET[ 'domain_hash' ] ) ) {
|
1302 |
+
|
1303 |
+
if ( md5( substr( $this->_api_key, 2, 8 ) ) !== $_GET[ 'domain_hash' ] ) {
|
1304 |
+
Admin_Display::error( __( 'Domain Key hash mismatch', 'litespeed-cache' ), true );
|
1305 |
+
return $extraRet;
|
1306 |
+
}
|
1307 |
+
|
1308 |
+
$this->set_linked();
|
1309 |
+
$qsDrop[] = ".replace( '&domain_hash=" . sanitize_key( $_GET[ 'domain_hash' ] ) . ', \'\' )';
|
1310 |
}
|
1311 |
|
1312 |
+
if ( ! empty( $extra ) ) {
|
1313 |
+
foreach ( $extra as $key ) {
|
1314 |
+
if ( ! empty( $_GET[ $key ] ) ) {
|
1315 |
+
$extraRet[ $key ] = $_GET[ $key ];
|
1316 |
+
$qsDrop[] = ".replace( '&$key=" . urlencode( $_GET[ $key ] ) . ', \'\' )';
|
1317 |
+
}
|
1318 |
+
}
|
1319 |
+
}
|
1320 |
+
|
1321 |
+
$replaceStr = implode('', $qsDrop);
|
1322 |
|
1323 |
// Drop QS
|
1324 |
+
echo "<script>window.history.pushState( 'remove_gen_link', document.title, window.location.href" . $replaceStr . " );</script>";
|
1325 |
+
return $extraRet;
|
1326 |
}
|
1327 |
|
1328 |
/**
|
1366 |
|
1367 |
$json = json_decode( $response[ 'body' ], true );
|
1368 |
|
1369 |
+
self::save_summary( array( 'ips_ts' => time(), 'ips' => $json ) );
|
|
|
|
|
1370 |
}
|
1371 |
|
1372 |
/**
|
src/conf.cls.php
CHANGED
@@ -120,6 +120,9 @@ class Conf extends Base {
|
|
120 |
// Bcos we may ask clients to deactivate for debug temporarily, we need to keep the current cfg in deactivation, hence we need to only try adding default cfg when activating.
|
121 |
self::add_option( $k, $v );
|
122 |
}
|
|
|
|
|
|
|
123 |
}
|
124 |
|
125 |
/**
|
120 |
// Bcos we may ask clients to deactivate for debug temporarily, we need to keep the current cfg in deactivation, hence we need to only try adding default cfg when activating.
|
121 |
self::add_option( $k, $v );
|
122 |
}
|
123 |
+
|
124 |
+
// Force correct version in case a rare unexpected case that `_ver` exists but empty
|
125 |
+
self::update_option( Base::_VER, Core::VER );
|
126 |
}
|
127 |
|
128 |
/**
|
src/control.cls.php
CHANGED
@@ -502,6 +502,7 @@ class Control extends Root {
|
|
502 |
PHP_URL_SCHEME,
|
503 |
PHP_URL_HOST,
|
504 |
PHP_URL_PATH,
|
|
|
505 |
);
|
506 |
|
507 |
$is_same_redirect = true;
|
@@ -600,6 +601,17 @@ class Control extends Root {
|
|
600 |
// return;
|
601 |
}
|
602 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
603 |
// Check if URI is forced public cache
|
604 |
$excludes = $this->conf( Base::O_CACHE_FORCE_PUB_URI );
|
605 |
$hit = Utility::str_hit_array( $_SERVER[ 'REQUEST_URI' ], $excludes, true );
|
@@ -645,11 +657,6 @@ class Control extends Root {
|
|
645 |
return;
|
646 |
}
|
647 |
|
648 |
-
if ( is_preview() ) {
|
649 |
-
self::set_nocache( 'preview page' );
|
650 |
-
return;
|
651 |
-
}
|
652 |
-
|
653 |
// Check litespeed setting to set cacheable status
|
654 |
if ( ! $this->_setting_cacheable() ) {
|
655 |
self::set_nocache();
|
502 |
PHP_URL_SCHEME,
|
503 |
PHP_URL_HOST,
|
504 |
PHP_URL_PATH,
|
505 |
+
PHP_URL_QUERY,
|
506 |
);
|
507 |
|
508 |
$is_same_redirect = true;
|
601 |
// return;
|
602 |
}
|
603 |
|
604 |
+
if ( is_preview() ) {
|
605 |
+
self::set_nocache( 'preview page' );
|
606 |
+
return;
|
607 |
+
}
|
608 |
+
|
609 |
+
// Check if has metabox non-cacheable setting or not
|
610 |
+
if ( $this->cls( 'Metabox' )->setting( 'litespeed_no_cache' ) ) {
|
611 |
+
self::set_nocache( 'per post metabox setting' );
|
612 |
+
return;
|
613 |
+
}
|
614 |
+
|
615 |
// Check if URI is forced public cache
|
616 |
$excludes = $this->conf( Base::O_CACHE_FORCE_PUB_URI );
|
617 |
$hit = Utility::str_hit_array( $_SERVER[ 'REQUEST_URI' ], $excludes, true );
|
657 |
return;
|
658 |
}
|
659 |
|
|
|
|
|
|
|
|
|
|
|
660 |
// Check litespeed setting to set cacheable status
|
661 |
if ( ! $this->_setting_cacheable() ) {
|
662 |
self::set_nocache();
|
src/core.cls.php
CHANGED
@@ -465,7 +465,7 @@ class Core extends Root {
|
|
465 |
// Hook to modify buffer after
|
466 |
$buffer = apply_filters('litespeed_buffer_after', $buffer);
|
467 |
|
468 |
-
Debug2::
|
469 |
|
470 |
return $buffer;
|
471 |
}
|
465 |
// Hook to modify buffer after
|
466 |
$buffer = apply_filters('litespeed_buffer_after', $buffer);
|
467 |
|
468 |
+
Debug2::ended();
|
469 |
|
470 |
return $buffer;
|
471 |
}
|
src/crawler.cls.php
CHANGED
@@ -8,6 +8,8 @@ namespace LiteSpeed;
|
|
8 |
defined( 'WPINC' ) || exit;
|
9 |
|
10 |
class Crawler extends Root {
|
|
|
|
|
11 |
const TYPE_REFRESH_MAP = 'refresh_map';
|
12 |
const TYPE_EMPTY = 'empty';
|
13 |
const TYPE_BLACKLIST_EMPTY = 'blacklist_empty';
|
@@ -23,6 +25,7 @@ class Crawler extends Root {
|
|
23 |
private $_sitemeta = 'meta.data';
|
24 |
private $_resetfile;
|
25 |
private $_end_reason;
|
|
|
26 |
|
27 |
private $_crawler_conf = array(
|
28 |
'cookies' => array(),
|
@@ -55,7 +58,13 @@ class Crawler extends Root {
|
|
55 |
|
56 |
$this->_summary = self::get_summary();
|
57 |
|
58 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
}
|
60 |
|
61 |
/**
|
@@ -99,7 +108,7 @@ class Crawler extends Root {
|
|
99 |
$msg = __( 'Crawler disabled list is cleared! All crawlers are set to active! ', 'litespeed-cache' );
|
100 |
Admin_Display::note( $msg );
|
101 |
|
102 |
-
|
103 |
}
|
104 |
|
105 |
/**
|
@@ -150,15 +159,15 @@ class Crawler extends Root {
|
|
150 |
* @since 3.0
|
151 |
* @access public
|
152 |
*/
|
153 |
-
public static function save_summary( $data =
|
154 |
$instance = self::cls();
|
155 |
$instance->_summary[ 'meta_save_time' ] = time();
|
156 |
|
157 |
-
if ( $data
|
158 |
$data = $instance->_summary;
|
159 |
}
|
160 |
|
161 |
-
parent::save_summary( $data );
|
162 |
|
163 |
File::save( LITESPEED_STATIC_DIR . '/crawler/' . $instance->_sitemeta, json_encode( $data ), true );
|
164 |
}
|
@@ -171,12 +180,12 @@ class Crawler extends Root {
|
|
171 |
*/
|
172 |
public static function start( $force = false ) {
|
173 |
if ( ! Router::can_crawl() ) {
|
174 |
-
|
175 |
return false;
|
176 |
}
|
177 |
|
178 |
if ( $force ) {
|
179 |
-
|
180 |
}
|
181 |
|
182 |
self::cls()->_crawl_data( $force );
|
@@ -189,7 +198,7 @@ class Crawler extends Root {
|
|
189 |
* @access private
|
190 |
*/
|
191 |
private function _crawl_data( $force ) {
|
192 |
-
|
193 |
// for the first time running
|
194 |
if ( ! $this->_summary || ! Data::cls()->tb_exist( 'crawler' ) || ! Data::cls()->tb_exist( 'crawler_blacklist' ) ) {
|
195 |
$this->cls( 'Crawler_Map' )->gen();
|
@@ -200,11 +209,11 @@ class Crawler extends Root {
|
|
200 |
// check whole crawling interval
|
201 |
$last_fnished_at = $this->_summary[ 'last_full_time_cost' ] + $this->_summary[ 'this_full_beginning_time' ];
|
202 |
if ( ! $force && time() - $last_fnished_at < $this->conf( Base::O_CRAWLER_CRAWL_INTERVAL ) ) {
|
203 |
-
|
204 |
// if not reach whole crawling interval, exit
|
205 |
return;
|
206 |
}
|
207 |
-
|
208 |
$this->cls( 'Crawler_Map' )->gen();
|
209 |
}
|
210 |
|
@@ -212,7 +221,7 @@ class Crawler extends Root {
|
|
212 |
|
213 |
// Skip the crawlers that in bypassed list
|
214 |
while ( ! $this->is_active( $this->_summary[ 'curr_crawler' ] ) && $this->_summary[ 'curr_crawler' ] < count( $this->_crawlers ) ) {
|
215 |
-
|
216 |
$this->_summary[ 'curr_crawler' ]++;
|
217 |
}
|
218 |
if ( $this->_summary[ 'curr_crawler' ] >= count( $this->_crawlers ) ) {
|
@@ -318,7 +327,7 @@ class Crawler extends Root {
|
|
318 |
// check if is running
|
319 |
if ( $this->_summary['is_running'] && time() - $this->_summary['is_running'] < $this->_crawler_conf[ 'run_duration' ] ) {
|
320 |
$this->_end_reason = 'stopped';
|
321 |
-
|
322 |
return;
|
323 |
}
|
324 |
|
@@ -326,17 +335,16 @@ class Crawler extends Root {
|
|
326 |
$this->_adjust_current_threads();
|
327 |
if ( $this->_cur_threads == 0 ) {
|
328 |
$this->_end_reason = 'stopped_highload';
|
329 |
-
|
330 |
return;
|
331 |
}
|
332 |
|
333 |
// log started time
|
334 |
-
|
335 |
-
self::save_summary();
|
336 |
|
337 |
// set time limit
|
338 |
$maxTime = (int) ini_get( 'max_execution_time' );
|
339 |
-
|
340 |
if ( $maxTime == 0 ) {
|
341 |
$maxTime = 300; // hardlimit
|
342 |
}
|
@@ -345,13 +353,13 @@ class Crawler extends Root {
|
|
345 |
}
|
346 |
if ( $maxTime >= $this->_crawler_conf[ 'run_duration' ] ) {
|
347 |
$maxTime = $this->_crawler_conf[ 'run_duration' ];
|
348 |
-
|
349 |
}
|
350 |
elseif ( ini_set( 'max_execution_time', $this->_crawler_conf[ 'run_duration' ] + 15 ) !== false ) {
|
351 |
$maxTime = $this->_crawler_conf[ 'run_duration' ];
|
352 |
-
|
353 |
}
|
354 |
-
|
355 |
$this->_max_run_time = $maxTime + time();
|
356 |
|
357 |
// mark running
|
@@ -373,13 +381,17 @@ class Crawler extends Root {
|
|
373 |
* @see https://wordpress.org/support/topic/crawler-keeps-causing-crashes/
|
374 |
*/
|
375 |
if ( ! function_exists( 'sys_getloadavg' ) ) {
|
376 |
-
|
377 |
$this->_cur_threads = 0;
|
378 |
return;
|
379 |
}
|
380 |
|
381 |
-
$
|
382 |
-
$curload =
|
|
|
|
|
|
|
|
|
383 |
|
384 |
if ( $this->_cur_threads == -1 ) {
|
385 |
// init
|
@@ -406,9 +418,9 @@ class Crawler extends Root {
|
|
406 |
}
|
407 |
}
|
408 |
elseif ( $curload >= $this->_crawler_conf[ 'load_limit' ] ) {
|
409 |
-
if ( $curthreads > 1 ) {// if already 1, keep
|
410 |
$curthreads --;
|
411 |
-
}
|
412 |
}
|
413 |
elseif ( ($curload + 1) < $this->_crawler_conf[ 'load_limit' ] ) {
|
414 |
if ( $curthreads < $this->conf( Base::O_CRAWLER_THREADS ) ) {
|
@@ -478,11 +490,11 @@ class Crawler extends Root {
|
|
478 |
// check response
|
479 |
if ( $rets[ $row[ 'id' ] ][ 'code' ] == 428 ) { // HTTP/1.1 428 Precondition Required (need to test)
|
480 |
$this->_end_reason = 'crawler_disabled';
|
481 |
-
|
482 |
return;
|
483 |
}
|
484 |
|
485 |
-
$status = $this->_status_parse( $rets[ $row[ 'id' ] ][ 'header' ], $rets[ $row[ 'id' ] ][ 'code' ] ); // B or H or M or N(nocache)
|
486 |
$this->_map_status_list[ $status ][ $row[ 'id' ] ] = array(
|
487 |
'url' => $row[ 'url' ],
|
488 |
'code' => $rets[ $row[ 'id' ] ][ 'code' ], // 201 or 200 or 404
|
@@ -504,7 +516,7 @@ class Crawler extends Root {
|
|
504 |
// check duration
|
505 |
if ( $this->_summary[ 'last_update_time' ] > $this->_max_run_time ) {
|
506 |
$this->_end_reason = 'stopped_maxtime';
|
507 |
-
|
508 |
return;
|
509 |
// return __('Stopped due to exceeding defined Maximum Run Time', 'litespeed-cache');
|
510 |
}
|
@@ -519,7 +531,7 @@ class Crawler extends Root {
|
|
519 |
if ( $_time > $this->_summary[ 'pos_reset_check' ] ) {
|
520 |
$this->_summary[ 'pos_reset_check' ] = $_time + 5;
|
521 |
if ( file_exists( $this->_resetfile ) && unlink( $this->_resetfile ) ) {
|
522 |
-
|
523 |
|
524 |
$this->_summary[ 'last_pos' ] = 0;
|
525 |
$this->_summary[ 'curr_crawler' ] = 0;
|
@@ -538,7 +550,7 @@ class Crawler extends Root {
|
|
538 |
$this->_adjust_current_threads();
|
539 |
if ( $this->_cur_threads == 0 ) {
|
540 |
$this->_end_reason = 'stopped_highload';
|
541 |
-
|
542 |
return;
|
543 |
// return __('Stopped due to load over limit', 'litespeed-cache');
|
544 |
}
|
@@ -553,7 +565,7 @@ class Crawler extends Root {
|
|
553 |
// All URLs are done for current crawler
|
554 |
$this->_end_reason = 'end';
|
555 |
$this->_summary[ 'crawler_stats' ][ $this->_summary[ 'curr_crawler' ] ][ 'W' ] = 0;
|
556 |
-
|
557 |
}
|
558 |
|
559 |
/**
|
@@ -581,7 +593,7 @@ class Crawler extends Root {
|
|
581 |
$url = $this->_crawler_conf[ 'base' ] . $row[ 'url' ];
|
582 |
}
|
583 |
curl_setopt( $curls[ $row[ 'id' ] ], CURLOPT_URL, $url );
|
584 |
-
|
585 |
|
586 |
curl_setopt_array( $curls[ $row[ 'id' ] ], $options );
|
587 |
|
@@ -635,12 +647,22 @@ class Crawler extends Root {
|
|
635 |
* @since 2.0
|
636 |
* @access private
|
637 |
*/
|
638 |
-
private function _status_parse( $header, $code ) {
|
639 |
if ( $code == 201 ) {
|
640 |
return 'H';
|
641 |
}
|
642 |
|
643 |
if ( stripos( $header, 'X-Litespeed-Cache-Control: no-cache' ) !== false ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
644 |
return 'N'; // Blacklist
|
645 |
}
|
646 |
|
@@ -774,8 +796,14 @@ class Crawler extends Root {
|
|
774 |
curl_setopt_array( $ch, $options );
|
775 |
curl_setopt( $ch, CURLOPT_URL, $url );
|
776 |
$result = curl_exec( $ch );
|
|
|
777 |
curl_close( $ch );
|
778 |
|
|
|
|
|
|
|
|
|
|
|
779 |
return $result;
|
780 |
}
|
781 |
|
@@ -796,7 +824,7 @@ class Crawler extends Root {
|
|
796 |
$this->_summary[ 'last_crawler_total_cost' ] = time() - $this->_summary[ 'curr_crawler_beginning_time' ];
|
797 |
$count_crawlers = count( $this->list_crawlers() );
|
798 |
if ( $this->_summary[ 'curr_crawler' ] >= $count_crawlers ) {
|
799 |
-
|
800 |
$this->_summary[ 'curr_crawler' ] = 0;
|
801 |
// $this->_summary[ 'crawler_stats' ][ $this->_summary[ 'curr_crawler' ] ] = array();
|
802 |
$this->_summary[ 'done' ] = 'touchedEnd';// log done status
|
@@ -946,8 +974,7 @@ class Crawler extends Root {
|
|
946 |
public function reset_pos() {
|
947 |
File::save( $this->_resetfile, time() , true );
|
948 |
|
949 |
-
|
950 |
-
self::save_summary();
|
951 |
}
|
952 |
|
953 |
/**
|
8 |
defined( 'WPINC' ) || exit;
|
9 |
|
10 |
class Crawler extends Root {
|
11 |
+
const LOG_TAG = '🕸️';
|
12 |
+
|
13 |
const TYPE_REFRESH_MAP = 'refresh_map';
|
14 |
const TYPE_EMPTY = 'empty';
|
15 |
const TYPE_BLACKLIST_EMPTY = 'blacklist_empty';
|
25 |
private $_sitemeta = 'meta.data';
|
26 |
private $_resetfile;
|
27 |
private $_end_reason;
|
28 |
+
private $_ncpu = 1;
|
29 |
|
30 |
private $_crawler_conf = array(
|
31 |
'cookies' => array(),
|
58 |
|
59 |
$this->_summary = self::get_summary();
|
60 |
|
61 |
+
if(is_file('/proc/cpuinfo')) {
|
62 |
+
$cpuinfo = file_get_contents('/proc/cpuinfo');
|
63 |
+
preg_match_all('/^processor/m', $cpuinfo, $matches);
|
64 |
+
$this->_ncpu = count($matches[0]) ?: 1;
|
65 |
+
}
|
66 |
+
|
67 |
+
self::debug( 'Init w/ CPU cores=' . $this->_ncpu );
|
68 |
}
|
69 |
|
70 |
/**
|
108 |
$msg = __( 'Crawler disabled list is cleared! All crawlers are set to active! ', 'litespeed-cache' );
|
109 |
Admin_Display::note( $msg );
|
110 |
|
111 |
+
self::debug( 'All crawlers are set to active...... ' );
|
112 |
}
|
113 |
|
114 |
/**
|
159 |
* @since 3.0
|
160 |
* @access public
|
161 |
*/
|
162 |
+
public static function save_summary( $data = false, $reload = false, $overwrite = false ) {
|
163 |
$instance = self::cls();
|
164 |
$instance->_summary[ 'meta_save_time' ] = time();
|
165 |
|
166 |
+
if ( ! $data ) {
|
167 |
$data = $instance->_summary;
|
168 |
}
|
169 |
|
170 |
+
parent::save_summary( $data, $reload, $overwrite );
|
171 |
|
172 |
File::save( LITESPEED_STATIC_DIR . '/crawler/' . $instance->_sitemeta, json_encode( $data ), true );
|
173 |
}
|
180 |
*/
|
181 |
public static function start( $force = false ) {
|
182 |
if ( ! Router::can_crawl() ) {
|
183 |
+
self::debug( '......crawler is NOT allowed by the server admin......' );
|
184 |
return false;
|
185 |
}
|
186 |
|
187 |
if ( $force ) {
|
188 |
+
self::debug( '......crawler manually ran......' );
|
189 |
}
|
190 |
|
191 |
self::cls()->_crawl_data( $force );
|
198 |
* @access private
|
199 |
*/
|
200 |
private function _crawl_data( $force ) {
|
201 |
+
self::debug( '......crawler started......' );
|
202 |
// for the first time running
|
203 |
if ( ! $this->_summary || ! Data::cls()->tb_exist( 'crawler' ) || ! Data::cls()->tb_exist( 'crawler_blacklist' ) ) {
|
204 |
$this->cls( 'Crawler_Map' )->gen();
|
209 |
// check whole crawling interval
|
210 |
$last_fnished_at = $this->_summary[ 'last_full_time_cost' ] + $this->_summary[ 'this_full_beginning_time' ];
|
211 |
if ( ! $force && time() - $last_fnished_at < $this->conf( Base::O_CRAWLER_CRAWL_INTERVAL ) ) {
|
212 |
+
self::debug( 'Cron abort: cache warmed already.' );
|
213 |
// if not reach whole crawling interval, exit
|
214 |
return;
|
215 |
}
|
216 |
+
self::debug( 'TouchedEnd. regenerate sitemap....' );
|
217 |
$this->cls( 'Crawler_Map' )->gen();
|
218 |
}
|
219 |
|
221 |
|
222 |
// Skip the crawlers that in bypassed list
|
223 |
while ( ! $this->is_active( $this->_summary[ 'curr_crawler' ] ) && $this->_summary[ 'curr_crawler' ] < count( $this->_crawlers ) ) {
|
224 |
+
self::debug( 'Skipped the Crawler #' . $this->_summary[ 'curr_crawler' ] . ' ......' );
|
225 |
$this->_summary[ 'curr_crawler' ]++;
|
226 |
}
|
227 |
if ( $this->_summary[ 'curr_crawler' ] >= count( $this->_crawlers ) ) {
|
327 |
// check if is running
|
328 |
if ( $this->_summary['is_running'] && time() - $this->_summary['is_running'] < $this->_crawler_conf[ 'run_duration' ] ) {
|
329 |
$this->_end_reason = 'stopped';
|
330 |
+
self::debug( 'The crawler is running.' );
|
331 |
return;
|
332 |
}
|
333 |
|
335 |
$this->_adjust_current_threads();
|
336 |
if ( $this->_cur_threads == 0 ) {
|
337 |
$this->_end_reason = 'stopped_highload';
|
338 |
+
self::debug( 'Stopped due to heavy load.' );
|
339 |
return;
|
340 |
}
|
341 |
|
342 |
// log started time
|
343 |
+
self::save_summary( array( 'last_start_time' => time() ) );
|
|
|
344 |
|
345 |
// set time limit
|
346 |
$maxTime = (int) ini_get( 'max_execution_time' );
|
347 |
+
self::debug( 'ini_get max_execution_time=' . $maxTime );
|
348 |
if ( $maxTime == 0 ) {
|
349 |
$maxTime = 300; // hardlimit
|
350 |
}
|
353 |
}
|
354 |
if ( $maxTime >= $this->_crawler_conf[ 'run_duration' ] ) {
|
355 |
$maxTime = $this->_crawler_conf[ 'run_duration' ];
|
356 |
+
self::debug( 'Use run_duration setting as max_execution_time=' . $maxTime );
|
357 |
}
|
358 |
elseif ( ini_set( 'max_execution_time', $this->_crawler_conf[ 'run_duration' ] + 15 ) !== false ) {
|
359 |
$maxTime = $this->_crawler_conf[ 'run_duration' ];
|
360 |
+
self::debug( 'ini_set max_execution_time=' . $maxTime );
|
361 |
}
|
362 |
+
self::debug( 'final max_execution_time=' . $maxTime );
|
363 |
$this->_max_run_time = $maxTime + time();
|
364 |
|
365 |
// mark running
|
381 |
* @see https://wordpress.org/support/topic/crawler-keeps-causing-crashes/
|
382 |
*/
|
383 |
if ( ! function_exists( 'sys_getloadavg' ) ) {
|
384 |
+
self::debug( 'set threads=0 due to func sys_getloadavg not exist!' );
|
385 |
$this->_cur_threads = 0;
|
386 |
return;
|
387 |
}
|
388 |
|
389 |
+
$curload = sys_getloadavg();
|
390 |
+
$curload = $curload[0];
|
391 |
+
self::debug( 'Server load: ' . $curload );
|
392 |
+
$curload /= $this->_ncpu;
|
393 |
+
|
394 |
+
// $curload = 1;
|
395 |
|
396 |
if ( $this->_cur_threads == -1 ) {
|
397 |
// init
|
418 |
}
|
419 |
}
|
420 |
elseif ( $curload >= $this->_crawler_conf[ 'load_limit' ] ) {
|
421 |
+
// if ( $curthreads > 1 ) {// if already 1, keep
|
422 |
$curthreads --;
|
423 |
+
// }
|
424 |
}
|
425 |
elseif ( ($curload + 1) < $this->_crawler_conf[ 'load_limit' ] ) {
|
426 |
if ( $curthreads < $this->conf( Base::O_CRAWLER_THREADS ) ) {
|
490 |
// check response
|
491 |
if ( $rets[ $row[ 'id' ] ][ 'code' ] == 428 ) { // HTTP/1.1 428 Precondition Required (need to test)
|
492 |
$this->_end_reason = 'crawler_disabled';
|
493 |
+
self::debug( 'crawler_disabled' );
|
494 |
return;
|
495 |
}
|
496 |
|
497 |
+
$status = $this->_status_parse( $rets[ $row[ 'id' ] ][ 'header' ], $rets[ $row[ 'id' ] ][ 'code' ], $row[ 'url' ] ); // B or H or M or N(nocache)
|
498 |
$this->_map_status_list[ $status ][ $row[ 'id' ] ] = array(
|
499 |
'url' => $row[ 'url' ],
|
500 |
'code' => $rets[ $row[ 'id' ] ][ 'code' ], // 201 or 200 or 404
|
516 |
// check duration
|
517 |
if ( $this->_summary[ 'last_update_time' ] > $this->_max_run_time ) {
|
518 |
$this->_end_reason = 'stopped_maxtime';
|
519 |
+
self::debug( 'Terminated due to maxtime' );
|
520 |
return;
|
521 |
// return __('Stopped due to exceeding defined Maximum Run Time', 'litespeed-cache');
|
522 |
}
|
531 |
if ( $_time > $this->_summary[ 'pos_reset_check' ] ) {
|
532 |
$this->_summary[ 'pos_reset_check' ] = $_time + 5;
|
533 |
if ( file_exists( $this->_resetfile ) && unlink( $this->_resetfile ) ) {
|
534 |
+
self::debug( 'Terminated due to reset file' );
|
535 |
|
536 |
$this->_summary[ 'last_pos' ] = 0;
|
537 |
$this->_summary[ 'curr_crawler' ] = 0;
|
550 |
$this->_adjust_current_threads();
|
551 |
if ( $this->_cur_threads == 0 ) {
|
552 |
$this->_end_reason = 'stopped_highload';
|
553 |
+
self::debug( 'Terminated due to highload' );
|
554 |
return;
|
555 |
// return __('Stopped due to load over limit', 'litespeed-cache');
|
556 |
}
|
565 |
// All URLs are done for current crawler
|
566 |
$this->_end_reason = 'end';
|
567 |
$this->_summary[ 'crawler_stats' ][ $this->_summary[ 'curr_crawler' ] ][ 'W' ] = 0;
|
568 |
+
self::debug( 'Crawler #' . $this->_summary['curr_crawler'] . ' touched end' );
|
569 |
}
|
570 |
|
571 |
/**
|
593 |
$url = $this->_crawler_conf[ 'base' ] . $row[ 'url' ];
|
594 |
}
|
595 |
curl_setopt( $curls[ $row[ 'id' ] ], CURLOPT_URL, $url );
|
596 |
+
self::debug( 'Crawling [url] ' . $url . ( $url == $row[ 'url' ] ? '' : ' [ori] ' . $row[ 'url' ] ) );
|
597 |
|
598 |
curl_setopt_array( $curls[ $row[ 'id' ] ], $options );
|
599 |
|
647 |
* @since 2.0
|
648 |
* @access private
|
649 |
*/
|
650 |
+
private function _status_parse( $header, $code, $url ) {
|
651 |
if ( $code == 201 ) {
|
652 |
return 'H';
|
653 |
}
|
654 |
|
655 |
if ( stripos( $header, 'X-Litespeed-Cache-Control: no-cache' ) !== false ) {
|
656 |
+
// If is from DIVI, taken as miss
|
657 |
+
if ( defined( 'LITESPEED_CRAWLER_IGNORE_NONCACHEABLE' ) && LITESPEED_CRAWLER_IGNORE_NONCACHEABLE ) {
|
658 |
+
return 'M';
|
659 |
+
}
|
660 |
+
|
661 |
+
// If blacklist is disabled
|
662 |
+
if ( ( defined( 'LITESPEED_CRAWLER_DISABLE_BLOCKLIST' ) && LITESPEED_CRAWLER_DISABLE_BLOCKLIST ) || apply_filters( 'litespeed_crawler_disable_blocklist', '__return_false', $url ) ) {
|
663 |
+
return 'M';
|
664 |
+
}
|
665 |
+
|
666 |
return 'N'; // Blacklist
|
667 |
}
|
668 |
|
796 |
curl_setopt_array( $ch, $options );
|
797 |
curl_setopt( $ch, CURLOPT_URL, $url );
|
798 |
$result = curl_exec( $ch );
|
799 |
+
$code = curl_getinfo( $ch, CURLINFO_HTTP_CODE );
|
800 |
curl_close( $ch );
|
801 |
|
802 |
+
if ( $code != 200 ) {
|
803 |
+
self::debug('❌ Response code is not 200 in self_curl() [code] ' . var_export( $code, true ) );
|
804 |
+
return false;
|
805 |
+
}
|
806 |
+
|
807 |
return $result;
|
808 |
}
|
809 |
|
824 |
$this->_summary[ 'last_crawler_total_cost' ] = time() - $this->_summary[ 'curr_crawler_beginning_time' ];
|
825 |
$count_crawlers = count( $this->list_crawlers() );
|
826 |
if ( $this->_summary[ 'curr_crawler' ] >= $count_crawlers ) {
|
827 |
+
self::debug( '_terminate_running Touched end, whole crawled. Reload crawler!' );
|
828 |
$this->_summary[ 'curr_crawler' ] = 0;
|
829 |
// $this->_summary[ 'crawler_stats' ][ $this->_summary[ 'curr_crawler' ] ] = array();
|
830 |
$this->_summary[ 'done' ] = 'touchedEnd';// log done status
|
974 |
public function reset_pos() {
|
975 |
File::save( $this->_resetfile, time() , true );
|
976 |
|
977 |
+
self::save_summary( array( 'is_running' => 0 ) );
|
|
|
978 |
}
|
979 |
|
980 |
/**
|
src/css.cls.php
CHANGED
@@ -8,6 +8,8 @@ namespace LiteSpeed;
|
|
8 |
defined( 'WPINC' ) || exit;
|
9 |
|
10 |
class CSS extends Base {
|
|
|
|
|
11 |
const TYPE_GEN_CCSS = 'gen_ccss';
|
12 |
const TYPE_GEN_UCSS = 'gen_ucss';
|
13 |
const TYPE_CLEAR_Q_CCSS = 'clear_q_ccss';
|
@@ -157,7 +159,7 @@ class CSS extends Base {
|
|
157 |
$this->_queue = $this->load_queue( 'ccss' );
|
158 |
|
159 |
if ( count( $this->_queue ) > 500 ) {
|
160 |
-
|
161 |
return null;
|
162 |
}
|
163 |
|
@@ -165,14 +167,14 @@ class CSS extends Base {
|
|
165 |
$this->_queue[ $queue_k ] = array(
|
166 |
'url' => apply_filters( 'litespeed_ccss_url', $request_url ),
|
167 |
'user_agent' => substr( $ua, 0, 200 ),
|
168 |
-
'is_mobile' => $this->
|
169 |
'is_webp' => $this->cls( 'Media' )->webp_support() ? 1 : 0,
|
170 |
'uid' => $uid,
|
171 |
'vary' => $vary,
|
172 |
'url_tag' => $url_tag,
|
173 |
); // Current UA will be used to request
|
174 |
$this->save_queue( 'ccss', $this->_queue );
|
175 |
-
|
176 |
|
177 |
// Prepare cache tag for later purge
|
178 |
Tag::add( 'CCSS.' . md5( $queue_k ) );
|
@@ -194,6 +196,23 @@ class CSS extends Base {
|
|
194 |
return null;
|
195 |
}
|
196 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
197 |
/**
|
198 |
* Get UCSS path
|
199 |
*
|
@@ -203,19 +222,13 @@ class CSS extends Base {
|
|
203 |
// Check UCSS URI excludes
|
204 |
$ucss_exc = apply_filters( 'litespeed_ucss_exc', $this->conf( self::O_OPTM_UCSS_EXC ) );
|
205 |
if ( $ucss_exc && $hit = Utility::str_hit_array( $request_url, $ucss_exc ) ) {
|
206 |
-
|
207 |
return false;
|
208 |
}
|
209 |
|
210 |
$filepath_prefix = $this->_build_filepath_prefix( 'ucss' );
|
211 |
|
212 |
-
$url_tag = $request_url;
|
213 |
-
if ( is_404() ) {
|
214 |
-
$url_tag = '404';
|
215 |
-
}
|
216 |
-
elseif ( apply_filters( 'litespeed_ucss_per_pagetype', false ) ) {
|
217 |
-
$url_tag = Utility::page_type();
|
218 |
-
}
|
219 |
|
220 |
$vary = $this->cls( 'Vary' )->finalize_full_varies();
|
221 |
$filename = $this->cls( 'Data' )->load_url_file( $url_tag, $vary, 'ucss' );
|
@@ -247,7 +260,7 @@ class CSS extends Base {
|
|
247 |
$this->_queue = $this->load_queue( 'ucss' );
|
248 |
|
249 |
if ( count( $this->_queue ) > 500 ) {
|
250 |
-
|
251 |
return false;
|
252 |
}
|
253 |
|
@@ -255,14 +268,14 @@ class CSS extends Base {
|
|
255 |
$this->_queue[ $queue_k ] = array(
|
256 |
'url' => apply_filters( 'litespeed_ucss_url', $request_url ),
|
257 |
'user_agent' => substr( $ua, 0, 200 ),
|
258 |
-
'is_mobile' => $this->
|
259 |
'is_webp' => $this->cls( 'Media' )->webp_support() ? 1 : 0,
|
260 |
'uid' => $uid,
|
261 |
'vary' => $vary,
|
262 |
'url_tag' => $url_tag,
|
263 |
); // Current UA will be used to request
|
264 |
$this->save_queue( 'ucss', $this->_queue );
|
265 |
-
|
266 |
|
267 |
// Prepare cache tag for later purge
|
268 |
Tag::add( 'UCSS.' . md5( $queue_k ) );
|
@@ -281,16 +294,6 @@ class CSS extends Base {
|
|
281 |
return false;
|
282 |
}
|
283 |
|
284 |
-
/**
|
285 |
-
* Check if need to separate ccss for mobile
|
286 |
-
*
|
287 |
-
* @since 2.6.4
|
288 |
-
* @access private
|
289 |
-
*/
|
290 |
-
private function _separate_mobile_ccss() {
|
291 |
-
return ( wp_is_mobile() || apply_filters( 'litespeed_is_mobile', false ) ) && $this->conf( self::O_CACHE_MOBILE );
|
292 |
-
}
|
293 |
-
|
294 |
/**
|
295 |
* Cron ccss generation
|
296 |
*
|
@@ -364,7 +367,7 @@ class CSS extends Base {
|
|
364 |
}
|
365 |
|
366 |
if ( $i > 3 ) {
|
367 |
-
|
368 |
return Router::self_redirect( Router::ACTION_CSS, $type == 'ccss' ? CSS::TYPE_GEN_CCSS : CSS::TYPE_GEN_UCSS );
|
369 |
}
|
370 |
|
@@ -372,7 +375,7 @@ class CSS extends Base {
|
|
372 |
}
|
373 |
|
374 |
// Exit queue if out of quota
|
375 |
-
if ( $res
|
376 |
return;
|
377 |
}
|
378 |
|
@@ -385,7 +388,7 @@ class CSS extends Base {
|
|
385 |
}
|
386 |
|
387 |
if ( $i > 3 ) {
|
388 |
-
|
389 |
return Router::self_redirect( Router::ACTION_CSS, $type == 'ccss' ? CSS::TYPE_GEN_CCSS : CSS::TYPE_GEN_UCSS );
|
390 |
}
|
391 |
}
|
@@ -460,7 +463,7 @@ class CSS extends Base {
|
|
460 |
$data[ 'whitelist' ] = $this->_ucss_whitelist;
|
461 |
}
|
462 |
|
463 |
-
|
464 |
|
465 |
$json = Cloud::post( $svc, $data, 30 );
|
466 |
if ( ! is_array( $json ) ) {
|
@@ -502,7 +505,7 @@ class CSS extends Base {
|
|
502 |
Debug2::debug2( '[CSS] con: ' . $css );
|
503 |
|
504 |
if ( substr( $css, 0, 2 ) == '/*' && substr( $css, -2 ) == '*/' ) {
|
505 |
-
|
506 |
// continue; // Save the error info too
|
507 |
}
|
508 |
|
@@ -523,17 +526,6 @@ class CSS extends Base {
|
|
523 |
Purge::add( strtoupper( $type ) . '.' . md5( $queue_k ) );
|
524 |
}
|
525 |
|
526 |
-
/**
|
527 |
-
* Print a loading message when redirecting CCSS/UCSS page to aviod whiteboard confusion
|
528 |
-
*/
|
529 |
-
private function _print_loading( $counter, $type ) {
|
530 |
-
echo '<div style="font-size: 25px; text-align: center; padding-top: 150px; width: 100%; position: absolute;">';
|
531 |
-
echo "<img width='35' src='" . LSWCP_PLUGIN_URL . "assets/img/Litespeed.icon.svg' /> ";
|
532 |
-
echo sprintf( __( '%1$s %2$s files left in queue', 'litespeed-cache' ), $counter, $type );
|
533 |
-
echo '<p><a href="' . admin_url( 'admin.php?page=litespeed-page_optm' ) . '">' . __( 'Cancel', 'litespeed-cache' ) . '</a></p>';
|
534 |
-
echo '</div>';
|
535 |
-
}
|
536 |
-
|
537 |
/**
|
538 |
* Play for fun
|
539 |
*
|
@@ -561,7 +553,7 @@ class CSS extends Base {
|
|
561 |
'type' => 'CCSS',
|
562 |
);
|
563 |
|
564 |
-
//
|
565 |
|
566 |
$json = Cloud::post( Cloud::SVC_CCSS, $data, 180 );
|
567 |
|
8 |
defined( 'WPINC' ) || exit;
|
9 |
|
10 |
class CSS extends Base {
|
11 |
+
const LOG_TAG = '[CSS]';
|
12 |
+
|
13 |
const TYPE_GEN_CCSS = 'gen_ccss';
|
14 |
const TYPE_GEN_UCSS = 'gen_ucss';
|
15 |
const TYPE_CLEAR_Q_CCSS = 'clear_q_ccss';
|
159 |
$this->_queue = $this->load_queue( 'ccss' );
|
160 |
|
161 |
if ( count( $this->_queue ) > 500 ) {
|
162 |
+
self::debug( 'CCSS Queue is full - 500' );
|
163 |
return null;
|
164 |
}
|
165 |
|
167 |
$this->_queue[ $queue_k ] = array(
|
168 |
'url' => apply_filters( 'litespeed_ccss_url', $request_url ),
|
169 |
'user_agent' => substr( $ua, 0, 200 ),
|
170 |
+
'is_mobile' => $this->_separate_mobile(),
|
171 |
'is_webp' => $this->cls( 'Media' )->webp_support() ? 1 : 0,
|
172 |
'uid' => $uid,
|
173 |
'vary' => $vary,
|
174 |
'url_tag' => $url_tag,
|
175 |
); // Current UA will be used to request
|
176 |
$this->save_queue( 'ccss', $this->_queue );
|
177 |
+
self::debug( 'Added queue_ccss [url_tag] ' . $url_tag . ' [UA] ' . $ua . ' [vary] ' . $vary . ' [uid] ' . $uid );
|
178 |
|
179 |
// Prepare cache tag for later purge
|
180 |
Tag::add( 'CCSS.' . md5( $queue_k ) );
|
196 |
return null;
|
197 |
}
|
198 |
|
199 |
+
/**
|
200 |
+
* Uniform url tag for ucss usage
|
201 |
+
* @since 4.7
|
202 |
+
*/
|
203 |
+
public static function get_url_tag( $request_url = false ) {
|
204 |
+
$url_tag = $request_url;
|
205 |
+
if ( is_404() ) {
|
206 |
+
$url_tag = '404';
|
207 |
+
}
|
208 |
+
elseif ( apply_filters( 'litespeed_ucss_per_pagetype', false ) ) {
|
209 |
+
$url_tag = Utility::page_type();
|
210 |
+
self::debug( 'litespeed_ucss_per_pagetype filter altered url to ' . $url_tag );
|
211 |
+
}
|
212 |
+
|
213 |
+
return $url_tag;
|
214 |
+
}
|
215 |
+
|
216 |
/**
|
217 |
* Get UCSS path
|
218 |
*
|
222 |
// Check UCSS URI excludes
|
223 |
$ucss_exc = apply_filters( 'litespeed_ucss_exc', $this->conf( self::O_OPTM_UCSS_EXC ) );
|
224 |
if ( $ucss_exc && $hit = Utility::str_hit_array( $request_url, $ucss_exc ) ) {
|
225 |
+
self::debug( 'UCSS bypassed due to UCSS URI Exclude setting: ' . $hit );
|
226 |
return false;
|
227 |
}
|
228 |
|
229 |
$filepath_prefix = $this->_build_filepath_prefix( 'ucss' );
|
230 |
|
231 |
+
$url_tag = self::get_url_tag( $request_url );
|
|
|
|
|
|
|
|
|
|
|
|
|
232 |
|
233 |
$vary = $this->cls( 'Vary' )->finalize_full_varies();
|
234 |
$filename = $this->cls( 'Data' )->load_url_file( $url_tag, $vary, 'ucss' );
|
260 |
$this->_queue = $this->load_queue( 'ucss' );
|
261 |
|
262 |
if ( count( $this->_queue ) > 500 ) {
|
263 |
+
self::debug( 'UCSS Queue is full - 500' );
|
264 |
return false;
|
265 |
}
|
266 |
|
268 |
$this->_queue[ $queue_k ] = array(
|
269 |
'url' => apply_filters( 'litespeed_ucss_url', $request_url ),
|
270 |
'user_agent' => substr( $ua, 0, 200 ),
|
271 |
+
'is_mobile' => $this->_separate_mobile(),
|
272 |
'is_webp' => $this->cls( 'Media' )->webp_support() ? 1 : 0,
|
273 |
'uid' => $uid,
|
274 |
'vary' => $vary,
|
275 |
'url_tag' => $url_tag,
|
276 |
); // Current UA will be used to request
|
277 |
$this->save_queue( 'ucss', $this->_queue );
|
278 |
+
self::debug( 'Added queue_ucss [url_tag] ' . $url_tag . ' [UA] ' . $ua . ' [vary] ' . $vary . ' [uid] ' . $uid );
|
279 |
|
280 |
// Prepare cache tag for later purge
|
281 |
Tag::add( 'UCSS.' . md5( $queue_k ) );
|
294 |
return false;
|
295 |
}
|
296 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
297 |
/**
|
298 |
* Cron ccss generation
|
299 |
*
|
367 |
}
|
368 |
|
369 |
if ( $i > 3 ) {
|
370 |
+
GUI::print_loading( count( $this->_queue ), $type_tag );
|
371 |
return Router::self_redirect( Router::ACTION_CSS, $type == 'ccss' ? CSS::TYPE_GEN_CCSS : CSS::TYPE_GEN_UCSS );
|
372 |
}
|
373 |
|
375 |
}
|
376 |
|
377 |
// Exit queue if out of quota
|
378 |
+
if ( $res === 'out_of_quota' ) {
|
379 |
return;
|
380 |
}
|
381 |
|
388 |
}
|
389 |
|
390 |
if ( $i > 3 ) {
|
391 |
+
GUI::print_loading( count( $this->_queue ), $type_tag );
|
392 |
return Router::self_redirect( Router::ACTION_CSS, $type == 'ccss' ? CSS::TYPE_GEN_CCSS : CSS::TYPE_GEN_UCSS );
|
393 |
}
|
394 |
}
|
463 |
$data[ 'whitelist' ] = $this->_ucss_whitelist;
|
464 |
}
|
465 |
|
466 |
+
self::debug( 'Generating: ', $data );
|
467 |
|
468 |
$json = Cloud::post( $svc, $data, 30 );
|
469 |
if ( ! is_array( $json ) ) {
|
505 |
Debug2::debug2( '[CSS] con: ' . $css );
|
506 |
|
507 |
if ( substr( $css, 0, 2 ) == '/*' && substr( $css, -2 ) == '*/' ) {
|
508 |
+
self::debug( '❌ empty ' . $type . ' [content] ' . $css );
|
509 |
// continue; // Save the error info too
|
510 |
}
|
511 |
|
526 |
Purge::add( strtoupper( $type ) . '.' . md5( $queue_k ) );
|
527 |
}
|
528 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
529 |
/**
|
530 |
* Play for fun
|
531 |
*
|
553 |
'type' => 'CCSS',
|
554 |
);
|
555 |
|
556 |
+
// self::debug( 'Generating: ', $data );
|
557 |
|
558 |
$json = Cloud::post( Cloud::SVC_CCSS, $data, 180 );
|
559 |
|
src/data.cls.php
CHANGED
@@ -11,6 +11,8 @@ namespace LiteSpeed;
|
|
11 |
defined( 'WPINC' ) || exit;
|
12 |
|
13 |
class Data extends Root {
|
|
|
|
|
14 |
private $_db_updater = array(
|
15 |
'3.5.0.3' => array(
|
16 |
'litespeed_update_3_5',
|
@@ -541,6 +543,8 @@ class Data extends Root {
|
|
541 |
|
542 |
$type = $this->_url_file_types[ $file_type ];
|
543 |
|
|
|
|
|
544 |
$tb_url = $this->tb( 'url' );
|
545 |
$q = "SELECT * FROM `$tb_url` WHERE url=%s";
|
546 |
$url_row = $wpdb->get_row( $wpdb->prepare( $q, $request_url ), ARRAY_A );
|
11 |
defined( 'WPINC' ) || exit;
|
12 |
|
13 |
class Data extends Root {
|
14 |
+
const LOG_TAG = '[Data]';
|
15 |
+
|
16 |
private $_db_updater = array(
|
17 |
'3.5.0.3' => array(
|
18 |
'litespeed_update_3_5',
|
543 |
|
544 |
$type = $this->_url_file_types[ $file_type ];
|
545 |
|
546 |
+
self::debug2( 'load url file: ' . $request_url );
|
547 |
+
|
548 |
$tb_url = $this->tb( 'url' );
|
549 |
$q = "SELECT * FROM `$tb_url` WHERE url=%s";
|
550 |
$url_row = $wpdb->get_row( $wpdb->prepare( $q, $request_url ), ARRAY_A );
|
src/debug2.cls.php
CHANGED
@@ -39,6 +39,17 @@ class Debug2 extends Root {
|
|
39 |
! defined( 'LSCWP_LOG_MORE' ) && define( 'LSCWP_LOG_MORE', true );
|
40 |
}
|
41 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
}
|
43 |
|
44 |
/**
|
@@ -143,7 +154,7 @@ class Debug2 extends Root {
|
|
143 |
$debug = $this->conf( Base::O_DEBUG );
|
144 |
if ( $debug == Base::VAL_ON2 ) {
|
145 |
if ( ! $this->cls( 'Router' )->is_admin_ip() ) {
|
146 |
-
define( 'LSCWP_LOG_BYPASS_NOTADMIN', true );
|
147 |
return;
|
148 |
}
|
149 |
}
|
@@ -317,6 +328,10 @@ class Debug2 extends Root {
|
|
317 |
return;
|
318 |
}
|
319 |
|
|
|
|
|
|
|
|
|
320 |
if ( $backtrace_limit !== false ) {
|
321 |
if ( ! is_numeric( $backtrace_limit ) ) {
|
322 |
$backtrace_limit = self::trim_longtext( $backtrace_limit );
|
39 |
! defined( 'LSCWP_LOG_MORE' ) && define( 'LSCWP_LOG_MORE', true );
|
40 |
}
|
41 |
|
42 |
+
defined( 'LSCWP_DEBUG_EXC_STRINGS' ) || define( 'LSCWP_DEBUG_EXC_STRINGS', $this->conf( Base::O_DEBUG_EXC_STRINGS ) );
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* End call of one request process
|
47 |
+
* @since 4.7
|
48 |
+
* @access public
|
49 |
+
*/
|
50 |
+
public static function ended() {
|
51 |
+
self::debug( 'Response headers', headers_list() );
|
52 |
+
self::debug( "End response\n--------------------------------------------------------------------------------\n" );
|
53 |
}
|
54 |
|
55 |
/**
|
154 |
$debug = $this->conf( Base::O_DEBUG );
|
155 |
if ( $debug == Base::VAL_ON2 ) {
|
156 |
if ( ! $this->cls( 'Router' )->is_admin_ip() ) {
|
157 |
+
defined( 'LSCWP_LOG_BYPASS_NOTADMIN' ) || define( 'LSCWP_LOG_BYPASS_NOTADMIN', true );
|
158 |
return;
|
159 |
}
|
160 |
}
|
328 |
return;
|
329 |
}
|
330 |
|
331 |
+
if ( defined( 'LSCWP_DEBUG_EXC_STRINGS' ) && Utility::str_hit_array( $msg, LSCWP_DEBUG_EXC_STRINGS ) ) {
|
332 |
+
return;
|
333 |
+
}
|
334 |
+
|
335 |
if ( $backtrace_limit !== false ) {
|
336 |
if ( ! is_numeric( $backtrace_limit ) ) {
|
337 |
$backtrace_limit = self::trim_longtext( $backtrace_limit );
|
src/error.cls.php
CHANGED
@@ -80,6 +80,10 @@ class Error {
|
|
80 |
$msg = sprintf( __( 'There is proceeding queue not pulled yet. Queue info: %s.', 'litespeed-cache' ), '<code>' . substr( $code, strlen( 'unfinished_queue ' ) ) . '</code>' );
|
81 |
break;
|
82 |
|
|
|
|
|
|
|
|
|
83 |
case 'site_not_registered':
|
84 |
$msg = __( 'The site is not registered on QUIC.cloud.', 'litespeed-cache' );
|
85 |
break;
|
@@ -169,6 +173,10 @@ class Error {
|
|
169 |
$msg = __( 'Your domain has been forbidden from using our services due to a previous policy violation.', 'litespeed-cache' );
|
170 |
break;
|
171 |
|
|
|
|
|
|
|
|
|
172 |
default:
|
173 |
$msg = __( 'Unknown error', 'litespeed-cache' ) . ': ' . $code;
|
174 |
break;
|
80 |
$msg = sprintf( __( 'There is proceeding queue not pulled yet. Queue info: %s.', 'litespeed-cache' ), '<code>' . substr( $code, strlen( 'unfinished_queue ' ) ) . '</code>' );
|
81 |
break;
|
82 |
|
83 |
+
case 'err_alias':
|
84 |
+
$msg = __( 'The site is not a valid alias on QUIC.cloud.', 'litespeed-cache' );
|
85 |
+
break;
|
86 |
+
|
87 |
case 'site_not_registered':
|
88 |
$msg = __( 'The site is not registered on QUIC.cloud.', 'litespeed-cache' );
|
89 |
break;
|
173 |
$msg = __( 'Your domain has been forbidden from using our services due to a previous policy violation.', 'litespeed-cache' );
|
174 |
break;
|
175 |
|
176 |
+
case 'err_dns_active':
|
177 |
+
$msg = __( 'You cannot remove this DNS zone, because it is still in use. Please update the domain\'s nameservers, then try to delete this zone again, otherwise your site will become inaccessible.', 'litespeed-cache' );
|
178 |
+
break;
|
179 |
+
|
180 |
default:
|
181 |
$msg = __( 'Unknown error', 'litespeed-cache' ) . ': ' . $code;
|
182 |
break;
|
src/esi.cls.php
CHANGED
@@ -100,6 +100,7 @@ class ESI extends Root {
|
|
100 |
*
|
101 |
* 1. `cache` attribute is optional, default to 'public,no-vary'.
|
102 |
* 2. `ttl` attribute is optional, default is your public TTL setting.
|
|
|
103 |
*
|
104 |
* @since 2.8
|
105 |
* @since 2.8.1 Check is_admin for Elementor compatibility #726013
|
@@ -208,10 +209,15 @@ class ESI extends Root {
|
|
208 |
unset( $atts[ 'cache' ] );
|
209 |
}
|
210 |
|
|
|
|
|
|
|
|
|
|
|
211 |
do_action( 'litespeed_esi_shortcode-' . $atts[ 0 ] );
|
212 |
|
213 |
// Show ESI link
|
214 |
-
return $this->sub_esi_block( 'esi', 'esi-shortcode', $atts, $cache );
|
215 |
}
|
216 |
|
217 |
/**
|
@@ -423,7 +429,7 @@ class ESI extends Root {
|
|
423 |
}
|
424 |
|
425 |
if ( $silence ) {
|
426 |
-
// Don't add comment to esi block (
|
427 |
$params[ '_ls_silence' ] = true;
|
428 |
}
|
429 |
|
100 |
*
|
101 |
* 1. `cache` attribute is optional, default to 'public,no-vary'.
|
102 |
* 2. `ttl` attribute is optional, default is your public TTL setting.
|
103 |
+
* 3. `_ls_silence` attribute is optional, default is false.
|
104 |
*
|
105 |
* @since 2.8
|
106 |
* @since 2.8.1 Check is_admin for Elementor compatibility #726013
|
209 |
unset( $atts[ 'cache' ] );
|
210 |
}
|
211 |
|
212 |
+
$silence = false;
|
213 |
+
if ( ! empty( $atts[ '_ls_silence' ] ) ) {
|
214 |
+
$silence = true;
|
215 |
+
}
|
216 |
+
|
217 |
do_action( 'litespeed_esi_shortcode-' . $atts[ 0 ] );
|
218 |
|
219 |
// Show ESI link
|
220 |
+
return $this->sub_esi_block( 'esi', 'esi-shortcode', $atts, $cache, $silence );
|
221 |
}
|
222 |
|
223 |
/**
|
429 |
}
|
430 |
|
431 |
if ( $silence ) {
|
432 |
+
// Don't add comment to esi block ( original for nonce used in tag property data-nonce='esi_block' )
|
433 |
$params[ '_ls_silence' ] = true;
|
434 |
}
|
435 |
|
src/gui.cls.php
CHANGED
@@ -95,6 +95,17 @@ class GUI extends Base {
|
|
95 |
return $data;
|
96 |
}
|
97 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
98 |
/**
|
99 |
* Display a pie
|
100 |
*
|
@@ -400,11 +411,27 @@ class GUI extends Base {
|
|
400 |
$wp_admin_bar->add_menu( array(
|
401 |
'parent' => 'litespeed-menu',
|
402 |
'id' => 'litespeed-purge-single',
|
403 |
-
'title' => __( 'Purge this page', 'litespeed-cache' ),
|
404 |
'href' => Utility::build_url( Router::ACTION_PURGE, Purge::TYPE_PURGE_FRONT, false, true ),
|
405 |
'meta' => array( 'tabindex' => '0' ),
|
406 |
) );
|
407 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
408 |
$wp_admin_bar->add_menu( array(
|
409 |
'parent' => 'litespeed-menu',
|
410 |
'id' => 'litespeed-single-action',
|
95 |
return $data;
|
96 |
}
|
97 |
|
98 |
+
/**
|
99 |
+
* Print a loading message when redirecting CCSS/UCSS page to aviod whiteboard confusion
|
100 |
+
*/
|
101 |
+
public static function print_loading( $counter, $type ) {
|
102 |
+
echo '<div style="font-size: 25px; text-align: center; padding-top: 150px; width: 100%; position: absolute;">';
|
103 |
+
echo "<img width='35' src='" . LSWCP_PLUGIN_URL . "assets/img/Litespeed.icon.svg' /> ";
|
104 |
+
echo sprintf( __( '%1$s %2$s files left in queue', 'litespeed-cache' ), $counter, $type );
|
105 |
+
echo '<p><a href="' . admin_url( 'admin.php?page=litespeed-page_optm' ) . '">' . __( 'Cancel', 'litespeed-cache' ) . '</a></p>';
|
106 |
+
echo '</div>';
|
107 |
+
}
|
108 |
+
|
109 |
/**
|
110 |
* Display a pie
|
111 |
*
|
411 |
$wp_admin_bar->add_menu( array(
|
412 |
'parent' => 'litespeed-menu',
|
413 |
'id' => 'litespeed-purge-single',
|
414 |
+
'title' => __( 'Purge this page', 'litespeed-cache' ) . ' - LSCache',
|
415 |
'href' => Utility::build_url( Router::ACTION_PURGE, Purge::TYPE_PURGE_FRONT, false, true ),
|
416 |
'meta' => array( 'tabindex' => '0' ),
|
417 |
) );
|
418 |
|
419 |
+
if ( $this->has_cache_folder( 'ucss' ) ) {
|
420 |
+
$possible_url_tag = CSS::get_url_tag();
|
421 |
+
$append_arr = array();
|
422 |
+
if ( $possible_url_tag ) {
|
423 |
+
$append_arr[ 'url_tag' ] = $possible_url_tag;
|
424 |
+
}
|
425 |
+
|
426 |
+
$wp_admin_bar->add_menu( array(
|
427 |
+
'parent' => 'litespeed-menu',
|
428 |
+
'id' => 'litespeed-purge-single-ucss',
|
429 |
+
'title' => __( 'Purge this page', 'litespeed-cache' ) . ' - UCSS',
|
430 |
+
'href' => Utility::build_url( Router::ACTION_PURGE, Purge::TYPE_PURGE_UCSS, false, true, $append_arr ),
|
431 |
+
'meta' => array( 'tabindex' => '0' ),
|
432 |
+
) );
|
433 |
+
}
|
434 |
+
|
435 |
$wp_admin_bar->add_menu( array(
|
436 |
'parent' => 'litespeed-menu',
|
437 |
'id' => 'litespeed-single-action',
|
src/htaccess.cls.php
CHANGED
@@ -565,8 +565,7 @@ class Htaccess extends Root {
|
|
565 |
$id = Base::O_IMG_OPTM_WEBP_REPLACE;
|
566 |
if ( ! empty( $cfg[ $id ] ) || ! empty( $cfg[ Base::O_GUEST ] ) ) {
|
567 |
$new_rules[] = self::MARKER_WEBP . self::MARKER_START;
|
568 |
-
$new_rules[] = 'RewriteCond %{HTTP_ACCEPT} "image/webp"
|
569 |
-
$new_rules[] = 'RewriteCond %{HTTP_USER_AGENT} "Page Speed"';
|
570 |
$new_rules[] = 'RewriteRule .* - [E=Cache-Control:vary=%{ENV:LSCACHE_VARY_VALUE}+webp]';
|
571 |
$new_rules[] = 'RewriteCond %{HTTP_USER_AGENT} iPhone.*Version/(\d{2}).*Safari';
|
572 |
$new_rules[] = 'RewriteCond %1 >13';
|
565 |
$id = Base::O_IMG_OPTM_WEBP_REPLACE;
|
566 |
if ( ! empty( $cfg[ $id ] ) || ! empty( $cfg[ Base::O_GUEST ] ) ) {
|
567 |
$new_rules[] = self::MARKER_WEBP . self::MARKER_START;
|
568 |
+
$new_rules[] = 'RewriteCond %{HTTP_ACCEPT} "image/webp"';
|
|
|
569 |
$new_rules[] = 'RewriteRule .* - [E=Cache-Control:vary=%{ENV:LSCACHE_VARY_VALUE}+webp]';
|
570 |
$new_rules[] = 'RewriteCond %{HTTP_USER_AGENT} iPhone.*Version/(\d{2}).*Safari';
|
571 |
$new_rules[] = 'RewriteCond %1 >13';
|
src/lang.cls.php
CHANGED
@@ -41,6 +41,38 @@ class Lang extends Base {
|
|
41 |
return $list;
|
42 |
}
|
43 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
/**
|
45 |
* Get the title of id
|
46 |
*
|
@@ -164,6 +196,9 @@ class Lang extends Base {
|
|
164 |
self::O_MEDIA_PLACEHOLDER_RESP_ASYNC => __( 'Generate LQIP In Background', 'litespeed-cache' ),
|
165 |
self::O_MEDIA_IFRAME_LAZY => __( 'Lazy Load Iframes', 'litespeed-cache' ),
|
166 |
self::O_MEDIA_ADD_MISSING_SIZES => __( 'Add Missing Sizes', 'litespeed-cache' ),
|
|
|
|
|
|
|
167 |
self::O_IMG_OPTM_AUTO => __( 'Auto Request Cron', 'litespeed-cache' ),
|
168 |
self::O_IMG_OPTM_CRON => __( 'Auto Pull Cron', 'litespeed-cache' ),
|
169 |
self::O_IMG_OPTM_ORI => __( 'Optimize Original Images', 'litespeed-cache' ),
|
@@ -230,6 +265,7 @@ class Lang extends Base {
|
|
230 |
self::O_DEBUG_COLLAPS_QS => __( 'Collapse Query Strings', 'litespeed-cache' ),
|
231 |
self::O_DEBUG_INC => __( 'Debug URI Includes', 'litespeed-cache' ),
|
232 |
self::O_DEBUG_EXC => __( 'Debug URI Excludes', 'litespeed-cache' ),
|
|
|
233 |
|
234 |
self::O_DB_OPTM_REVISIONS_MAX => __( 'Revisions Max Number', 'litespeed-cache' ),
|
235 |
self::O_DB_OPTM_REVISIONS_AGE => __( 'Revisions Max Age', 'litespeed-cache' ),
|
41 |
return $list;
|
42 |
}
|
43 |
|
44 |
+
/**
|
45 |
+
* Try translating a string
|
46 |
+
*
|
47 |
+
* @since 4.7
|
48 |
+
*/
|
49 |
+
public static function maybe_translate( $raw_string ) {
|
50 |
+
$map = array(
|
51 |
+
'auto_alias_failed_cdn' => __( 'Unable to automatically add %1$s as a Domain Alias for main %2$s domain, due to potential CDN conflict.', 'litespeed-cache' ) . ' ' . Doc::learn_more( 'https://quic.cloud/docs/cdn/dns/how-to-setup-domain-alias/', false, false, false, true ),
|
52 |
+
|
53 |
+
'auto_alias_failed_uid' =>
|
54 |
+
__( 'Unable to automatically add %1$s as a Domain Alias for main %2$s domain.', 'litespeed-cache' ) .
|
55 |
+
' ' . __( 'Alias is in use by another QUIC.cloud account.', 'litespeed-cache' ) .
|
56 |
+
' ' . Doc::learn_more( 'https://quic.cloud/docs/cdn/dns/how-to-setup-domain-alias/', false, false, false, true ),
|
57 |
+
);
|
58 |
+
|
59 |
+
// Maybe has placeholder
|
60 |
+
if ( strpos( $raw_string, '::' ) ) {
|
61 |
+
$replacements = explode( '::', $raw_string );
|
62 |
+
if ( empty( $map[ $replacements[0] ] ) ) {
|
63 |
+
return $raw_string;
|
64 |
+
}
|
65 |
+
$tpl = $map[ $replacements[0] ];
|
66 |
+
unset($replacements[0]);
|
67 |
+
return vsprintf( $tpl, array_values( $replacements ) );
|
68 |
+
}
|
69 |
+
|
70 |
+
// Direct translation only
|
71 |
+
if ( empty( $map[ $raw_string ] ) ) return $raw_string;
|
72 |
+
|
73 |
+
return $map[ $raw_string ];
|
74 |
+
}
|
75 |
+
|
76 |
/**
|
77 |
* Get the title of id
|
78 |
*
|
196 |
self::O_MEDIA_PLACEHOLDER_RESP_ASYNC => __( 'Generate LQIP In Background', 'litespeed-cache' ),
|
197 |
self::O_MEDIA_IFRAME_LAZY => __( 'Lazy Load Iframes', 'litespeed-cache' ),
|
198 |
self::O_MEDIA_ADD_MISSING_SIZES => __( 'Add Missing Sizes', 'litespeed-cache' ),
|
199 |
+
self::O_MEDIA_VPI => __( 'Viewport Images', 'litespeed-cache' ),
|
200 |
+
self::O_MEDIA_VPI_CRON => __( 'Viewport Images Cron', 'litespeed-cache' ),
|
201 |
+
|
202 |
self::O_IMG_OPTM_AUTO => __( 'Auto Request Cron', 'litespeed-cache' ),
|
203 |
self::O_IMG_OPTM_CRON => __( 'Auto Pull Cron', 'litespeed-cache' ),
|
204 |
self::O_IMG_OPTM_ORI => __( 'Optimize Original Images', 'litespeed-cache' ),
|
265 |
self::O_DEBUG_COLLAPS_QS => __( 'Collapse Query Strings', 'litespeed-cache' ),
|
266 |
self::O_DEBUG_INC => __( 'Debug URI Includes', 'litespeed-cache' ),
|
267 |
self::O_DEBUG_EXC => __( 'Debug URI Excludes', 'litespeed-cache' ),
|
268 |
+
self::O_DEBUG_EXC_STRINGS => __( 'Debug String Excludes', 'litespeed-cache' ),
|
269 |
|
270 |
self::O_DB_OPTM_REVISIONS_MAX => __( 'Revisions Max Number', 'litespeed-cache' ),
|
271 |
self::O_DB_OPTM_REVISIONS_AGE => __( 'Revisions Max Age', 'litespeed-cache' ),
|
src/media.cls.php
CHANGED
@@ -13,6 +13,8 @@ namespace LiteSpeed;
|
|
13 |
defined( 'WPINC' ) || exit;
|
14 |
|
15 |
class Media extends Root {
|
|
|
|
|
16 |
const LIB_FILE_IMG_LAZYLOAD = 'assets/js/lazyload.min.js';
|
17 |
|
18 |
private $content;
|
@@ -53,7 +55,8 @@ class Media extends Root {
|
|
53 |
}
|
54 |
}
|
55 |
|
56 |
-
if ( $this->conf( Base::O_MEDIA_LAZY ) ) {
|
|
|
57 |
add_filter( 'wp_lazy_loading_enabled', '__return_false' );
|
58 |
}
|
59 |
|
@@ -115,7 +118,7 @@ class Media extends Root {
|
|
115 |
return;
|
116 |
}
|
117 |
|
118 |
-
|
119 |
Img_Optm::cls()->reset_row( $post_id );
|
120 |
}
|
121 |
|
@@ -162,7 +165,7 @@ class Media extends Root {
|
|
162 |
|
163 |
if ( file_exists( $real_file ) ) {
|
164 |
unlink( $real_file );
|
165 |
-
|
166 |
}
|
167 |
|
168 |
do_action( 'litespeed_media_del', $short_file_path, $post_id );
|
@@ -180,7 +183,7 @@ class Media extends Root {
|
|
180 |
|
181 |
if ( file_exists( $real_file ) ) {
|
182 |
rename( $real_file, $real_file_new );
|
183 |
-
|
184 |
}
|
185 |
|
186 |
do_action( 'litespeed_media_rename', $short_file_path, $short_file_path_new, $post_id );
|
@@ -421,11 +424,11 @@ class Media extends Root {
|
|
421 |
}
|
422 |
|
423 |
if ( ! Control::is_cacheable() ) {
|
424 |
-
|
425 |
return $content;
|
426 |
}
|
427 |
|
428 |
-
|
429 |
|
430 |
$this->content = $content;
|
431 |
$this->_finalize();
|
@@ -455,20 +458,27 @@ class Media extends Root {
|
|
455 |
if ( ! defined( 'LITESPEED_GUEST_OPTM' ) ) {
|
456 |
$result = Utility::str_hit_array( $_SERVER[ 'REQUEST_URI' ], $excludes );
|
457 |
if ( $result ) {
|
458 |
-
|
459 |
return;
|
460 |
}
|
461 |
}
|
462 |
|
463 |
-
$cfg_lazy = defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( Base::O_MEDIA_LAZY );
|
464 |
$cfg_iframe_lazy = defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( Base::O_MEDIA_IFRAME_LAZY );
|
465 |
$cfg_js_delay = defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( Base::O_OPTM_JS_DEFER ) == 2;
|
466 |
$cfg_trim_noscript = defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( Base::O_OPTM_NOSCRIPT_RM );
|
|
|
467 |
|
468 |
if ( $cfg_lazy ) {
|
|
|
|
|
|
|
469 |
list( $src_list, $html_list, $placeholder_list ) = $this->_parse_img();
|
470 |
$html_list_ori = $html_list;
|
471 |
}
|
|
|
|
|
|
|
472 |
|
473 |
// image lazy load
|
474 |
if ( $cfg_lazy ) {
|
@@ -608,7 +618,7 @@ class Media extends Root {
|
|
608 |
// Add missing dimensions
|
609 |
if ( defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( Base::O_MEDIA_ADD_MISSING_SIZES ) ) {
|
610 |
if ( empty( $attrs[ 'width' ] ) || $attrs[ 'width' ] == 'auto' || empty( $attrs[ 'height' ] ) || $attrs[ 'height' ] == 'auto' ) {
|
611 |
-
|
612 |
$dimensions = $this->_detect_dimensions( $attrs[ 'src' ] );
|
613 |
if ( $dimensions ) {
|
614 |
$ori_width = $dimensions[ 0 ];
|
@@ -625,7 +635,7 @@ class Media extends Root {
|
|
625 |
$attrs[ 'height' ] = $ori_height;
|
626 |
$new_html = preg_replace( '#(width|height)=(["\'])[^\2]*\2#', '', $match[ 0 ] );
|
627 |
$new_html = str_replace( '<img ', '<img width="' . $attrs[ 'width' ] . '" height="' . $attrs[ 'height' ] . '" ', $new_html );
|
628 |
-
|
629 |
$this->content = str_replace( $match[ 0 ], $new_html, $this->content );
|
630 |
$match[ 0 ] = $new_html;
|
631 |
}
|
@@ -658,6 +668,8 @@ class Media extends Root {
|
|
658 |
return false;
|
659 |
}
|
660 |
|
|
|
|
|
661 |
$sizes = getimagesize( $src );
|
662 |
|
663 |
if ( ! empty( $sizes[ 0 ] ) && ! empty( $sizes[ 1 ] ) ) {
|
13 |
defined( 'WPINC' ) || exit;
|
14 |
|
15 |
class Media extends Root {
|
16 |
+
const LOG_TAG = '📺';
|
17 |
+
|
18 |
const LIB_FILE_IMG_LAZYLOAD = 'assets/js/lazyload.min.js';
|
19 |
|
20 |
private $content;
|
55 |
}
|
56 |
}
|
57 |
|
58 |
+
if ( $this->conf( Base::O_MEDIA_LAZY ) && ! $this->cls( 'Metabox' )->setting( 'litespeed_no_image_lazy' ) ) {
|
59 |
+
self::debug( 'Suppress default WP lazyload' );
|
60 |
add_filter( 'wp_lazy_loading_enabled', '__return_false' );
|
61 |
}
|
62 |
|
118 |
return;
|
119 |
}
|
120 |
|
121 |
+
self::debug( 'delete_attachment [pid] ' . $post_id );
|
122 |
Img_Optm::cls()->reset_row( $post_id );
|
123 |
}
|
124 |
|
165 |
|
166 |
if ( file_exists( $real_file ) ) {
|
167 |
unlink( $real_file );
|
168 |
+
self::debug( 'deleted ' . $real_file );
|
169 |
}
|
170 |
|
171 |
do_action( 'litespeed_media_del', $short_file_path, $post_id );
|
183 |
|
184 |
if ( file_exists( $real_file ) ) {
|
185 |
rename( $real_file, $real_file_new );
|
186 |
+
self::debug( 'renamed ' . $real_file . ' to ' . $real_file_new );
|
187 |
}
|
188 |
|
189 |
do_action( 'litespeed_media_rename', $short_file_path, $short_file_path_new, $post_id );
|
424 |
}
|
425 |
|
426 |
if ( ! Control::is_cacheable() ) {
|
427 |
+
self::debug( 'bypass: Not cacheable' );
|
428 |
return $content;
|
429 |
}
|
430 |
|
431 |
+
self::debug( 'finalize' );
|
432 |
|
433 |
$this->content = $content;
|
434 |
$this->_finalize();
|
458 |
if ( ! defined( 'LITESPEED_GUEST_OPTM' ) ) {
|
459 |
$result = Utility::str_hit_array( $_SERVER[ 'REQUEST_URI' ], $excludes );
|
460 |
if ( $result ) {
|
461 |
+
self::debug( 'bypass lazyload: hit URI Excludes setting: ' . $result );
|
462 |
return;
|
463 |
}
|
464 |
}
|
465 |
|
466 |
+
$cfg_lazy = ( defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( Base::O_MEDIA_LAZY ) ) && ! $this->cls( 'Metabox' )->setting( 'litespeed_no_image_lazy' );
|
467 |
$cfg_iframe_lazy = defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( Base::O_MEDIA_IFRAME_LAZY );
|
468 |
$cfg_js_delay = defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( Base::O_OPTM_JS_DEFER ) == 2;
|
469 |
$cfg_trim_noscript = defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( Base::O_OPTM_NOSCRIPT_RM );
|
470 |
+
$cfg_vpi = defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( Base::O_MEDIA_VPI );
|
471 |
|
472 |
if ( $cfg_lazy ) {
|
473 |
+
if ( $cfg_vpi ) {
|
474 |
+
add_filter( 'litespeed_media_lazy_img_excludes', array( $this->cls( 'Metabox' ), 'lazy_img_excludes' ) );
|
475 |
+
}
|
476 |
list( $src_list, $html_list, $placeholder_list ) = $this->_parse_img();
|
477 |
$html_list_ori = $html_list;
|
478 |
}
|
479 |
+
else {
|
480 |
+
self::debug( 'lazyload disabled' );
|
481 |
+
}
|
482 |
|
483 |
// image lazy load
|
484 |
if ( $cfg_lazy ) {
|
618 |
// Add missing dimensions
|
619 |
if ( defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( Base::O_MEDIA_ADD_MISSING_SIZES ) ) {
|
620 |
if ( empty( $attrs[ 'width' ] ) || $attrs[ 'width' ] == 'auto' || empty( $attrs[ 'height' ] ) || $attrs[ 'height' ] == 'auto' ) {
|
621 |
+
self::debug( '⚠️ Missing sizes for image [src] ' . $attrs[ 'src' ] );
|
622 |
$dimensions = $this->_detect_dimensions( $attrs[ 'src' ] );
|
623 |
if ( $dimensions ) {
|
624 |
$ori_width = $dimensions[ 0 ];
|
635 |
$attrs[ 'height' ] = $ori_height;
|
636 |
$new_html = preg_replace( '#(width|height)=(["\'])[^\2]*\2#', '', $match[ 0 ] );
|
637 |
$new_html = str_replace( '<img ', '<img width="' . $attrs[ 'width' ] . '" height="' . $attrs[ 'height' ] . '" ', $new_html );
|
638 |
+
self::debug( 'Add missing sizes ' . $attrs[ 'width' ] . 'x' . $attrs[ 'height' ] . ' to ' . $attrs[ 'src' ] );
|
639 |
$this->content = str_replace( $match[ 0 ], $new_html, $this->content );
|
640 |
$match[ 0 ] = $new_html;
|
641 |
}
|
668 |
return false;
|
669 |
}
|
670 |
|
671 |
+
if ( substr( $src, 0, 2 ) == '//' ) $src = 'https:' . $src;
|
672 |
+
|
673 |
$sizes = getimagesize( $src );
|
674 |
|
675 |
if ( ! empty( $sizes[ 0 ] ) && ! empty( $sizes[ 1 ] ) ) {
|
src/metabox.cls.php
ADDED
@@ -0,0 +1,159 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* The class to operate post editor metabox settings
|
4 |
+
*
|
5 |
+
* @since 4.7
|
6 |
+
* @package Core
|
7 |
+
* @subpackage Core/inc
|
8 |
+
* @author LiteSpeed Technologies <info@litespeedtech.com>
|
9 |
+
*/
|
10 |
+
namespace LiteSpeed;
|
11 |
+
|
12 |
+
defined( 'WPINC' ) || exit;
|
13 |
+
|
14 |
+
class Metabox extends Root {
|
15 |
+
const LOG_TAG = '📦';
|
16 |
+
|
17 |
+
const POST_NONCE_ACTION = 'post_nonce_action';
|
18 |
+
|
19 |
+
private $_postmeta_settings;
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Get the setting list
|
23 |
+
* @since 4.7
|
24 |
+
*/
|
25 |
+
public function __construct() {
|
26 |
+
// Append meta box
|
27 |
+
$this->_postmeta_settings = array(
|
28 |
+
'litespeed_no_cache' => __( 'Disable Cache', 'litespeed-cache' ),
|
29 |
+
'litespeed_no_image_lazy' => __( 'Disable Image Lazyload', 'litespeed-cache' ),
|
30 |
+
'litespeed_no_vpi' => __( 'Disable VPI', 'litespeed-cache' ),
|
31 |
+
'litespeed_vpi_list' => __( 'Viewport Images', 'litespeed-cache' ),
|
32 |
+
'litespeed_vpi_list_mobile' => __( 'Viewport Images', 'litespeed-cache' ) . ' - ' . __( 'Mobile', 'litespeed-cache' ),
|
33 |
+
);
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Register post edit settings
|
38 |
+
* @since 4.7
|
39 |
+
*/
|
40 |
+
public function register_settings() {
|
41 |
+
add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ) );
|
42 |
+
add_action( 'save_post', array( $this, 'save_meta_box_settings' ), 15, 2 );
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Regsiter meta box
|
47 |
+
* @since 4.7
|
48 |
+
*/
|
49 |
+
public function add_meta_boxes( $post_type ) {
|
50 |
+
if ( apply_filters( 'litespeed_bypass_metabox', false, $post_type ) ) {
|
51 |
+
return;
|
52 |
+
}
|
53 |
+
add_meta_box( 'litespeed_meta_boxes', __( 'LiteSpeed Options', 'litespeed-cache' ), array( $this, 'meta_box_options' ), $post_type, 'side', 'core' );
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Show meta box content
|
58 |
+
* @since 4.7
|
59 |
+
*/
|
60 |
+
public function meta_box_options() {
|
61 |
+
require_once LSCWP_DIR . 'tpl/inc/metabox.php';
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
* Save settings
|
66 |
+
* @since 4.7
|
67 |
+
*/
|
68 |
+
public function save_meta_box_settings( $post_id, $post ) {
|
69 |
+
global $pagenow;
|
70 |
+
|
71 |
+
self::debug( 'Maybe save post2 [post_id] ' . $post_id );
|
72 |
+
|
73 |
+
if ( $pagenow != 'post.php' || ! $post || ! is_object( $post ) ) {
|
74 |
+
return;
|
75 |
+
}
|
76 |
+
|
77 |
+
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
|
78 |
+
return;
|
79 |
+
}
|
80 |
+
|
81 |
+
if ( ! $this->cls( 'Router' )->verify_nonce( self::POST_NONCE_ACTION ) ) {
|
82 |
+
return;
|
83 |
+
}
|
84 |
+
|
85 |
+
self::debug( 'Saving post [post_id] ' . $post_id );
|
86 |
+
|
87 |
+
foreach ( $this->_postmeta_settings as $k => $v ) {
|
88 |
+
$val = isset( $_POST[ $k ] ) ? $_POST[ $k ] : false;
|
89 |
+
$this->save( $post_id, $k, $val );
|
90 |
+
}
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* Load setting per post
|
95 |
+
* @since 4.7
|
96 |
+
*/
|
97 |
+
public function setting( $conf, $post_id = false ) {
|
98 |
+
// Check if has metabox non-cacheable setting or not
|
99 |
+
if ( ! $post_id ) {
|
100 |
+
if ( is_singular() ) {
|
101 |
+
$post_id = get_the_ID();
|
102 |
+
|
103 |
+
}
|
104 |
+
}
|
105 |
+
|
106 |
+
if ( $post_id && $val = get_post_meta( $post_id, $conf, true ) ) {
|
107 |
+
return $val;
|
108 |
+
}
|
109 |
+
|
110 |
+
return null;
|
111 |
+
}
|
112 |
+
|
113 |
+
/**
|
114 |
+
* Save a metabox value
|
115 |
+
* @since 4.7
|
116 |
+
*/
|
117 |
+
public function save( $post_id, $name, $val, $is_append = false ) {
|
118 |
+
if( strpos( $name, 'litespeed_vpi_list' ) !== false ) {
|
119 |
+
$val = Utility::sanitize_lines( $val, 'basename,drop_webp' );
|
120 |
+
}
|
121 |
+
|
122 |
+
// Load existing data if has set
|
123 |
+
if ( $is_append ) {
|
124 |
+
$existing_data = $this->setting( $name, $post_id );
|
125 |
+
if ( $existing_data ) {
|
126 |
+
$existing_data = Utility::sanitize_lines( $existing_data, 'basename' );
|
127 |
+
$val = array_unique( array_merge( $val, $existing_data ) );
|
128 |
+
}
|
129 |
+
}
|
130 |
+
|
131 |
+
if ( $val ) {
|
132 |
+
update_post_meta( $post_id, $name, $val );
|
133 |
+
}
|
134 |
+
else {
|
135 |
+
delete_post_meta( $post_id, $name );
|
136 |
+
}
|
137 |
+
}
|
138 |
+
|
139 |
+
/**
|
140 |
+
* Load exclude images per post
|
141 |
+
* @since 4.7
|
142 |
+
*/
|
143 |
+
public function lazy_img_excludes( $list ) {
|
144 |
+
$is_mobile = $this->_separate_mobile();
|
145 |
+
$excludes = $this->setting( $is_mobile ? 'litespeed_vpi_list_mobile' : 'litespeed_vpi_list' );
|
146 |
+
if ( $excludes !== null ) {
|
147 |
+
$excludes = Utility::sanitize_lines( $excludes, 'basename' );
|
148 |
+
if ( $excludes ) {
|
149 |
+
return array_merge( $list, $excludes );
|
150 |
+
}
|
151 |
+
|
152 |
+
return $list;
|
153 |
+
}
|
154 |
+
|
155 |
+
$this->cls( 'VPI' )->add_to_queue();
|
156 |
+
|
157 |
+
return $list;
|
158 |
+
}
|
159 |
+
}
|
src/optimize.cls.php
CHANGED
@@ -65,7 +65,7 @@ class Optimize extends Base {
|
|
65 |
Debug2::debug( '[Optm] ❌ CCSS set to OFF due to missing domain key' );
|
66 |
$this->cfg_css_async = false;
|
67 |
}
|
68 |
-
if ( ( defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( self::O_OPTM_UCSS ) ) && $this->conf( self::O_OPTM_UCSS_INLINE ) ) {
|
69 |
Debug2::debug( '[Optm] ❌ CCSS set to OFF due to UCSS Inline' );
|
70 |
$this->cfg_css_async = false;
|
71 |
}
|
@@ -784,7 +784,7 @@ class Optimize extends Base {
|
|
784 |
// Add cache tag in case later file deleted to avoid lscache served stale non-existed files @since 4.4.1
|
785 |
Tag::add( Tag::TYPE_MIN . '.' . $filename );
|
786 |
|
787 |
-
$qs_hash = substr( md5( self::get_option( self::ITEM_TIMESTAMP_PURGE_CSS) ), -5 )
|
788 |
// As filename is alreay realted to filecon md5, no need QS anymore
|
789 |
$filepath_prefix = $this->_build_filepath_prefix( $type );
|
790 |
return LITESPEED_STATIC_URL . $filepath_prefix . $filename . '?ver=' . $qs_hash;
|
65 |
Debug2::debug( '[Optm] ❌ CCSS set to OFF due to missing domain key' );
|
66 |
$this->cfg_css_async = false;
|
67 |
}
|
68 |
+
if ( ( defined( 'LITESPEED_GUEST_OPTM' ) || ( $this->conf( self::O_OPTM_UCSS ) && $this->conf( self::O_OPTM_CSS_COMB ) ) ) && $this->conf( self::O_OPTM_UCSS_INLINE ) ) {
|
69 |
Debug2::debug( '[Optm] ❌ CCSS set to OFF due to UCSS Inline' );
|
70 |
$this->cfg_css_async = false;
|
71 |
}
|
784 |
// Add cache tag in case later file deleted to avoid lscache served stale non-existed files @since 4.4.1
|
785 |
Tag::add( Tag::TYPE_MIN . '.' . $filename );
|
786 |
|
787 |
+
$qs_hash = substr( md5( self::get_option( self::ITEM_TIMESTAMP_PURGE_CSS) ), -5 );
|
788 |
// As filename is alreay realted to filecon md5, no need QS anymore
|
789 |
$filepath_prefix = $this->_build_filepath_prefix( $type );
|
790 |
return LITESPEED_STATIC_URL . $filepath_prefix . $filename . '?ver=' . $qs_hash;
|
src/optimizer.cls.php
CHANGED
@@ -44,7 +44,7 @@ class Optimizer extends Root {
|
|
44 |
$obj = new Lib\HTML_MIN( $content, $options );
|
45 |
$content_final = $obj->process();
|
46 |
if ( ! defined( 'LSCACHE_ESI_SILENCE' ) ) {
|
47 |
-
$content_final .= "\n" . '<!-- Page optimized by LiteSpeed Cache @' . date('Y-m-d H:i:s') . ' -->';
|
48 |
}
|
49 |
return $content_final;
|
50 |
|
@@ -183,6 +183,41 @@ class Optimizer extends Root {
|
|
183 |
return $content;
|
184 |
}
|
185 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
186 |
/**
|
187 |
* Load remote/local resource
|
188 |
*
|
@@ -194,16 +229,7 @@ class Optimizer extends Root {
|
|
194 |
if ( ! $real_file || $postfix != $file_type ) {
|
195 |
Debug2::debug2( '[CSS] Load Remote [' . $file_type . '] ' . $src );
|
196 |
$this_url = substr( $src, 0, 2 ) == '//' ? set_url_scheme( $src ) : $src;
|
197 |
-
$
|
198 |
-
$res_code = wp_remote_retrieve_response_code( $res );
|
199 |
-
if ( is_wp_error( $res ) || $res_code == 404 ) {
|
200 |
-
Debug2::debug2( '[CSS] ❌ Load Remote error [code] ' . $res_code );
|
201 |
-
return false;
|
202 |
-
}
|
203 |
-
$con = wp_remote_retrieve_body( $res );
|
204 |
-
if ( ! $con ) {
|
205 |
-
return false;
|
206 |
-
}
|
207 |
|
208 |
if ( $file_type == 'css' ) {
|
209 |
$dirname = dirname( $this_url ) . '/';
|
44 |
$obj = new Lib\HTML_MIN( $content, $options );
|
45 |
$content_final = $obj->process();
|
46 |
if ( ! defined( 'LSCACHE_ESI_SILENCE' ) ) {
|
47 |
+
$content_final .= "\n" . '<!-- Page optimized by LiteSpeed Cache @' . date( 'Y-m-d H:i:s', time() + LITESPEED_TIME_OFFSET ) . ' -->';
|
48 |
}
|
49 |
return $content_final;
|
50 |
|
183 |
return $content;
|
184 |
}
|
185 |
|
186 |
+
/**
|
187 |
+
* Load remote resource from cache if existed
|
188 |
+
*
|
189 |
+
* @since 4.7
|
190 |
+
*/
|
191 |
+
private function load_cached_file( $url, $file_type ) {
|
192 |
+
$file_path_prefix = $this->_build_filepath_prefix( $file_type );
|
193 |
+
$folder_name = LITESPEED_STATIC_DIR . $file_path_prefix;
|
194 |
+
$to_be_deleted_folder = $folder_name . date( 'Ymd', strtotime( '-2 days') );
|
195 |
+
if ( file_exists( $to_be_deleted_folder ) ) {
|
196 |
+
Debug2::debug( '[Optimizer] ❌ Clearning folder [name] ' . $to_be_deleted_folder );
|
197 |
+
File::rrmdir( $to_be_deleted_folder );
|
198 |
+
}
|
199 |
+
|
200 |
+
$today_file = $folder_name . date( 'Ymd' ) . '/' . md5( $url );
|
201 |
+
if( file_exists( $today_file ) ) return File::read( $today_file );
|
202 |
+
|
203 |
+
// Write file
|
204 |
+
$res = wp_remote_get( $url );
|
205 |
+
$res_code = wp_remote_retrieve_response_code( $res );
|
206 |
+
if ( is_wp_error( $res ) || $res_code != 200 ) {
|
207 |
+
Debug2::debug2( '[Optimizer] ❌ Load Remote error [code] ' . $res_code );
|
208 |
+
return false;
|
209 |
+
}
|
210 |
+
$con = wp_remote_retrieve_body( $res );
|
211 |
+
if ( ! $con ) {
|
212 |
+
return false;
|
213 |
+
}
|
214 |
+
|
215 |
+
Debug2::debug( '[Optimizer] ✅ Save remote file to cache [name] ' . $today_file );
|
216 |
+
File::save( $today_file, $con, true );
|
217 |
+
|
218 |
+
return $con;
|
219 |
+
}
|
220 |
+
|
221 |
/**
|
222 |
* Load remote/local resource
|
223 |
*
|
229 |
if ( ! $real_file || $postfix != $file_type ) {
|
230 |
Debug2::debug2( '[CSS] Load Remote [' . $file_type . '] ' . $src );
|
231 |
$this_url = substr( $src, 0, 2 ) == '//' ? set_url_scheme( $src ) : $src;
|
232 |
+
$con = $this->load_cached_file($this_url, $file_type);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
233 |
|
234 |
if ( $file_type == 'css' ) {
|
235 |
$dirname = dirname( $this_url ) . '/';
|
src/placeholder.cls.php
CHANGED
@@ -330,7 +330,7 @@ class Placeholder extends Base {
|
|
330 |
$res = $_instance->_generate_placeholder( $v, true );
|
331 |
|
332 |
// Exit queue if out of quota
|
333 |
-
if ( $res
|
334 |
return;
|
335 |
}
|
336 |
|
330 |
$res = $_instance->_generate_placeholder( $v, true );
|
331 |
|
332 |
// Exit queue if out of quota
|
333 |
+
if ( $res === 'out_of_quota' ) {
|
334 |
return;
|
335 |
}
|
336 |
|
src/purge.cls.php
CHANGED
@@ -36,6 +36,7 @@ class Purge extends Base {
|
|
36 |
const TYPE_PURGE_ALL_OPCACHE = 'purge_all_opcache';
|
37 |
|
38 |
const TYPE_PURGE_FRONT = 'purge_front';
|
|
|
39 |
const TYPE_PURGE_FRONTPAGE = 'purge_frontpage';
|
40 |
const TYPE_PURGE_PAGES = 'purge_pages';
|
41 |
const TYPE_PURGE_ERROR = 'purge_error';
|
@@ -135,6 +136,10 @@ class Purge extends Base {
|
|
135 |
$this->_purge_front();
|
136 |
break;
|
137 |
|
|
|
|
|
|
|
|
|
138 |
case self::TYPE_PURGE_FRONTPAGE:
|
139 |
$this->_purge_frontpage();
|
140 |
break;
|
@@ -597,6 +602,26 @@ class Purge extends Base {
|
|
597 |
exit();
|
598 |
}
|
599 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
600 |
/**
|
601 |
* Alerts LiteSpeed Web Server to purge the front page.
|
602 |
*
|
@@ -1091,7 +1116,13 @@ class Purge extends Base {
|
|
1091 |
|
1092 |
// post
|
1093 |
$purge_tags[] = Tag::TYPE_POST . $post_id;
|
1094 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
1095 |
|
1096 |
// for archive of categories|tags|custom tax
|
1097 |
global $post;
|
36 |
const TYPE_PURGE_ALL_OPCACHE = 'purge_all_opcache';
|
37 |
|
38 |
const TYPE_PURGE_FRONT = 'purge_front';
|
39 |
+
const TYPE_PURGE_UCSS = 'purge_ucss';
|
40 |
const TYPE_PURGE_FRONTPAGE = 'purge_frontpage';
|
41 |
const TYPE_PURGE_PAGES = 'purge_pages';
|
42 |
const TYPE_PURGE_ERROR = 'purge_error';
|
136 |
$this->_purge_front();
|
137 |
break;
|
138 |
|
139 |
+
case self::TYPE_PURGE_UCSS:
|
140 |
+
$this->_purge_ucss();
|
141 |
+
break;
|
142 |
+
|
143 |
case self::TYPE_PURGE_FRONTPAGE:
|
144 |
$this->_purge_frontpage();
|
145 |
break;
|
602 |
exit();
|
603 |
}
|
604 |
|
605 |
+
/**
|
606 |
+
* Purge single UCSS
|
607 |
+
* @since 4.7
|
608 |
+
*/
|
609 |
+
private function _purge_ucss() {
|
610 |
+
if ( empty( $_SERVER[ 'HTTP_REFERER' ] ) ) {
|
611 |
+
exit( 'no referer' );
|
612 |
+
}
|
613 |
+
|
614 |
+
$url_tag = empty( $_GET[ 'url_tag' ] ) ? $_SERVER[ 'HTTP_REFERER' ] : $_GET[ 'url_tag' ];
|
615 |
+
|
616 |
+
self::debug( 'Purge ucss [url_tag] ' . $url_tag );
|
617 |
+
|
618 |
+
do_action( 'litespeed_purge_ucss', $url_tag );
|
619 |
+
$this->purge_url( $_SERVER[ 'HTTP_REFERER' ] );
|
620 |
+
|
621 |
+
wp_redirect( $_SERVER[ 'HTTP_REFERER' ] );
|
622 |
+
exit();
|
623 |
+
}
|
624 |
+
|
625 |
/**
|
626 |
* Alerts LiteSpeed Web Server to purge the front page.
|
627 |
*
|
1116 |
|
1117 |
// post
|
1118 |
$purge_tags[] = Tag::TYPE_POST . $post_id;
|
1119 |
+
$post_status = get_post_status($post_id);
|
1120 |
+
if ( function_exists( 'is_post_status_viewable' ) ) {
|
1121 |
+
$viewable = is_post_status_viewable($post_status);
|
1122 |
+
if ($viewable) {
|
1123 |
+
$purge_tags[] = Tag::get_uri_tag(wp_make_link_relative(get_permalink($post_id)));
|
1124 |
+
}
|
1125 |
+
}
|
1126 |
|
1127 |
// for archive of categories|tags|custom tax
|
1128 |
global $post;
|
src/rest.cls.php
CHANGED
@@ -9,6 +9,7 @@ namespace LiteSpeed;
|
|
9 |
defined( 'WPINC' ) || exit;
|
10 |
|
11 |
class REST extends Root {
|
|
|
12 |
private $_internal_rest_status = false;
|
13 |
|
14 |
/**
|
@@ -77,6 +78,13 @@ class REST extends Root {
|
|
77 |
'permission_callback' => array( $this, 'is_from_cloud' ),
|
78 |
) );
|
79 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
80 |
// Image optm notify_img
|
81 |
// Need validation
|
82 |
register_rest_route( 'litespeed/v1', '/notify_img', array(
|
@@ -85,6 +93,18 @@ class REST extends Root {
|
|
85 |
'permission_callback' => array( $this, 'is_from_cloud' ),
|
86 |
) );
|
87 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
// Image optm check_img
|
89 |
// Need validation
|
90 |
register_rest_route( 'litespeed/v1', '/check_img', array(
|
@@ -171,6 +191,15 @@ class REST extends Root {
|
|
171 |
return $this->cls( 'Cloud' )->save_apikey();
|
172 |
}
|
173 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
174 |
/**
|
175 |
* Launch api call
|
176 |
*
|
@@ -180,6 +209,22 @@ class REST extends Root {
|
|
180 |
return Img_Optm::cls()->notify_img();
|
181 |
}
|
182 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
183 |
/**
|
184 |
* Launch api call
|
185 |
*
|
9 |
defined( 'WPINC' ) || exit;
|
10 |
|
11 |
class REST extends Root {
|
12 |
+
const LOG_TAG = '☎️';
|
13 |
private $_internal_rest_status = false;
|
14 |
|
15 |
/**
|
78 |
'permission_callback' => array( $this, 'is_from_cloud' ),
|
79 |
) );
|
80 |
|
81 |
+
// CDN setup callback notification
|
82 |
+
register_rest_route( 'litespeed/v1', '/cdn_status', array(
|
83 |
+
'methods' => 'POST',
|
84 |
+
'callback' => array( $this, 'cdn_status' ),
|
85 |
+
'permission_callback' => array( $this, 'is_from_cloud' ),
|
86 |
+
) );
|
87 |
+
|
88 |
// Image optm notify_img
|
89 |
// Need validation
|
90 |
register_rest_route( 'litespeed/v1', '/notify_img', array(
|
93 |
'permission_callback' => array( $this, 'is_from_cloud' ),
|
94 |
) );
|
95 |
|
96 |
+
register_rest_route( 'litespeed/v1', '/notify_vpi', array(
|
97 |
+
'methods' => 'POST',
|
98 |
+
'callback' => array( $this, 'notify_vpi' ),
|
99 |
+
'permission_callback' => array( $this, 'is_from_cloud' ),
|
100 |
+
) );
|
101 |
+
|
102 |
+
register_rest_route( 'litespeed/v1', '/err_domains', array(
|
103 |
+
'methods' => 'POST',
|
104 |
+
'callback' => array( $this, 'err_domains' ),
|
105 |
+
'permission_callback' => array( $this, 'is_from_cloud' ),
|
106 |
+
) );
|
107 |
+
|
108 |
// Image optm check_img
|
109 |
// Need validation
|
110 |
register_rest_route( 'litespeed/v1', '/check_img', array(
|
191 |
return $this->cls( 'Cloud' )->save_apikey();
|
192 |
}
|
193 |
|
194 |
+
/**
|
195 |
+
* Endpoint for QC to notify plugin of CDN setup status update.
|
196 |
+
*
|
197 |
+
* @since 3.0
|
198 |
+
*/
|
199 |
+
public function cdn_status() {
|
200 |
+
return $this->cls( 'Cdn_Setup' )->update_cdn_status();
|
201 |
+
}
|
202 |
+
|
203 |
/**
|
204 |
* Launch api call
|
205 |
*
|
209 |
return Img_Optm::cls()->notify_img();
|
210 |
}
|
211 |
|
212 |
+
/**
|
213 |
+
* @since 4.7
|
214 |
+
*/
|
215 |
+
public function notify_vpi() {
|
216 |
+
self::debug('notify_vpi');
|
217 |
+
return VPI::cls()->notify();
|
218 |
+
}
|
219 |
+
|
220 |
+
/**
|
221 |
+
* @since 4.7
|
222 |
+
*/
|
223 |
+
public function err_domains() {
|
224 |
+
self::debug('err_domains');
|
225 |
+
return $this->cls( 'Cloud' )->rest_err_domains();
|
226 |
+
}
|
227 |
+
|
228 |
/**
|
229 |
* Launch api call
|
230 |
*
|
src/root.cls.php
CHANGED
@@ -18,6 +18,16 @@ abstract class Root {
|
|
18 |
private static $_primary_options = array();
|
19 |
private static $_network_options = array();
|
20 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
/**
|
22 |
* Log a debug message.
|
23 |
*
|
@@ -95,8 +105,7 @@ abstract class Root {
|
|
95 |
File::rrmdir( LITESPEED_STATIC_DIR . '/' . $type . '/' . $subsite_id );
|
96 |
|
97 |
// Clear All summary data
|
98 |
-
|
99 |
-
self::save_summary();
|
100 |
|
101 |
if ( $type == 'ccss' || $type == 'ucss') {
|
102 |
Debug2::debug( '[CSS] Cleared ' . $type . ' queue' );
|
@@ -562,12 +571,28 @@ abstract class Root {
|
|
562 |
* @since 3.0
|
563 |
* @access public
|
564 |
*/
|
565 |
-
public static function save_summary( $data =
|
566 |
-
if ( $
|
567 |
-
|
568 |
}
|
569 |
|
570 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
571 |
}
|
572 |
|
573 |
/**
|
18 |
private static $_primary_options = array();
|
19 |
private static $_network_options = array();
|
20 |
|
21 |
+
/**
|
22 |
+
* Check if need to separate ccss for mobile
|
23 |
+
*
|
24 |
+
* @since 4.7
|
25 |
+
* @access protected
|
26 |
+
*/
|
27 |
+
protected function _separate_mobile() {
|
28 |
+
return ( wp_is_mobile() || apply_filters( 'litespeed_is_mobile', false ) ) && $this->conf( Base::O_CACHE_MOBILE );
|
29 |
+
}
|
30 |
+
|
31 |
/**
|
32 |
* Log a debug message.
|
33 |
*
|
105 |
File::rrmdir( LITESPEED_STATIC_DIR . '/' . $type . '/' . $subsite_id );
|
106 |
|
107 |
// Clear All summary data
|
108 |
+
self::save_summary( false, false, true );
|
|
|
109 |
|
110 |
if ( $type == 'ccss' || $type == 'ucss') {
|
111 |
Debug2::debug( '[CSS] Cleared ' . $type . ' queue' );
|
571 |
* @since 3.0
|
572 |
* @access public
|
573 |
*/
|
574 |
+
public static function save_summary( $data = false, $reload = false, $overwrite = false ) {
|
575 |
+
if ( $reload ) {
|
576 |
+
self::reload_summary();
|
577 |
}
|
578 |
|
579 |
+
$existing_summary = static::cls()->_summary;
|
580 |
+
if ( $overwrite ) {
|
581 |
+
$existing_summary = array();
|
582 |
+
}
|
583 |
+
$new_summary = array_merge( $existing_summary, $data ?: array() );
|
584 |
+
// self::debug2( 'Save after Reloaded summary', $new_summary );
|
585 |
+
|
586 |
+
self::update_option( '_summary', $new_summary );
|
587 |
+
}
|
588 |
+
|
589 |
+
/**
|
590 |
+
* Reload summary
|
591 |
+
* @since 5.0
|
592 |
+
*/
|
593 |
+
public static function reload_summary() {
|
594 |
+
static::cls()->_summary = self::get_summary();
|
595 |
+
// self::debug2( 'Reloaded summary', static::cls()->_summary );
|
596 |
}
|
597 |
|
598 |
/**
|
src/router.cls.php
CHANGED
@@ -20,6 +20,7 @@ class Router extends Base {
|
|
20 |
const ACTION_AVATAR = 'avatar';
|
21 |
const ACTION_SAVE_SETTINGS = 'save-settings';
|
22 |
const ACTION_CLOUD = 'cloud';
|
|
|
23 |
const ACTION_IMG_OPTM = 'img_optm';
|
24 |
const ACTION_HEALTH = 'health';
|
25 |
const ACTION_CRAWLER = 'crawler';
|
@@ -27,6 +28,7 @@ class Router extends Base {
|
|
27 |
const ACTION_CONF = 'conf';
|
28 |
const ACTION_ACTIVATION = 'activation';
|
29 |
const ACTION_CSS = 'css';
|
|
|
30 |
const ACTION_IMPORT = 'import';
|
31 |
const ACTION_REPORT = 'report';
|
32 |
const ACTION_DEBUG2 = 'debug2';
|
@@ -38,9 +40,11 @@ class Router extends Base {
|
|
38 |
self::ACTION_AVATAR,
|
39 |
self::ACTION_CDN_CLOUDFLARE,
|
40 |
self::ACTION_CLOUD,
|
|
|
41 |
self::ACTION_CONF,
|
42 |
self::ACTION_CRAWLER,
|
43 |
self::ACTION_CSS,
|
|
|
44 |
self::ACTION_DB_OPTM,
|
45 |
self::ACTION_DEBUG2,
|
46 |
self::ACTION_HEALTH,
|
@@ -557,11 +561,13 @@ class Router extends Base {
|
|
557 |
case self::ACTION_AVATAR:
|
558 |
case self::ACTION_IMG_OPTM:
|
559 |
case self::ACTION_CLOUD:
|
|
|
560 |
case self::ACTION_CDN_CLOUDFLARE:
|
561 |
case self::ACTION_CRAWLER:
|
562 |
case self::ACTION_IMPORT:
|
563 |
case self::ACTION_REPORT:
|
564 |
case self::ACTION_CSS:
|
|
|
565 |
case self::ACTION_CONF:
|
566 |
case self::ACTION_ACTIVATION:
|
567 |
case self::ACTION_HEALTH:
|
@@ -599,11 +605,11 @@ class Router extends Base {
|
|
599 |
* Verify nonce
|
600 |
*
|
601 |
* @since 1.1.0
|
602 |
-
* @access
|
603 |
* @param string $action
|
604 |
* @return bool
|
605 |
*/
|
606 |
-
|
607 |
if ( ! isset( $_REQUEST[ Router::NONCE ] ) || ! wp_verify_nonce( $_REQUEST[ Router::NONCE ], $action ) ) {
|
608 |
return false;
|
609 |
}
|
20 |
const ACTION_AVATAR = 'avatar';
|
21 |
const ACTION_SAVE_SETTINGS = 'save-settings';
|
22 |
const ACTION_CLOUD = 'cloud';
|
23 |
+
const ACTION_CDN_SETUP = 'cdn_setup';
|
24 |
const ACTION_IMG_OPTM = 'img_optm';
|
25 |
const ACTION_HEALTH = 'health';
|
26 |
const ACTION_CRAWLER = 'crawler';
|
28 |
const ACTION_CONF = 'conf';
|
29 |
const ACTION_ACTIVATION = 'activation';
|
30 |
const ACTION_CSS = 'css';
|
31 |
+
const ACTION_VPI = 'vpi';
|
32 |
const ACTION_IMPORT = 'import';
|
33 |
const ACTION_REPORT = 'report';
|
34 |
const ACTION_DEBUG2 = 'debug2';
|
40 |
self::ACTION_AVATAR,
|
41 |
self::ACTION_CDN_CLOUDFLARE,
|
42 |
self::ACTION_CLOUD,
|
43 |
+
self::ACTION_CDN_SETUP,
|
44 |
self::ACTION_CONF,
|
45 |
self::ACTION_CRAWLER,
|
46 |
self::ACTION_CSS,
|
47 |
+
self::ACTION_VPI,
|
48 |
self::ACTION_DB_OPTM,
|
49 |
self::ACTION_DEBUG2,
|
50 |
self::ACTION_HEALTH,
|
561 |
case self::ACTION_AVATAR:
|
562 |
case self::ACTION_IMG_OPTM:
|
563 |
case self::ACTION_CLOUD:
|
564 |
+
case self::ACTION_CDN_SETUP:
|
565 |
case self::ACTION_CDN_CLOUDFLARE:
|
566 |
case self::ACTION_CRAWLER:
|
567 |
case self::ACTION_IMPORT:
|
568 |
case self::ACTION_REPORT:
|
569 |
case self::ACTION_CSS:
|
570 |
+
case self::ACTION_VPI:
|
571 |
case self::ACTION_CONF:
|
572 |
case self::ACTION_ACTIVATION:
|
573 |
case self::ACTION_HEALTH:
|
605 |
* Verify nonce
|
606 |
*
|
607 |
* @since 1.1.0
|
608 |
+
* @access public
|
609 |
* @param string $action
|
610 |
* @return bool
|
611 |
*/
|
612 |
+
public function verify_nonce( $action ) {
|
613 |
if ( ! isset( $_REQUEST[ Router::NONCE ] ) || ! wp_verify_nonce( $_REQUEST[ Router::NONCE ], $action ) ) {
|
614 |
return false;
|
615 |
}
|
src/task.cls.php
CHANGED
@@ -14,6 +14,7 @@ class Task extends Root {
|
|
14 |
Base::O_IMG_OPTM_CRON => array( 'name' => 'litespeed_task_imgoptm_pull', 'hook' => 'LiteSpeed\Img_Optm::cron_pull' ), // always fetch immediately
|
15 |
Base::O_OPTM_CSS_ASYNC => array( 'name' => 'litespeed_task_ccss', 'hook' => 'LiteSpeed\CSS::cron_ccss' ),
|
16 |
Base::O_OPTM_UCSS => array( 'name' => 'litespeed_task_ucss', 'hook' => 'LiteSpeed\CSS::cron_ucss' ),
|
|
|
17 |
Base::O_MEDIA_PLACEHOLDER_RESP_ASYNC => array( 'name' => 'litespeed_task_lqip', 'hook' => 'LiteSpeed\Placeholder::cron' ),
|
18 |
Base::O_DISCUSS_AVATAR_CRON => array( 'name' => 'litespeed_task_avatar', 'hook' => 'LiteSpeed\Avatar::cron' ),
|
19 |
Base::O_IMG_OPTM_AUTO => array( 'name' => 'litespeed_task_imgoptm_req', 'hook' => 'LiteSpeed\Img_Optm::cron_auto_request' ),
|
@@ -23,6 +24,7 @@ class Task extends Root {
|
|
23 |
private static $_guest_options = array(
|
24 |
Base::O_OPTM_CSS_ASYNC,
|
25 |
Base::O_OPTM_UCSS,
|
|
|
26 |
);
|
27 |
|
28 |
const FITLER_CRAWLER = 'litespeed_crawl_filter';
|
14 |
Base::O_IMG_OPTM_CRON => array( 'name' => 'litespeed_task_imgoptm_pull', 'hook' => 'LiteSpeed\Img_Optm::cron_pull' ), // always fetch immediately
|
15 |
Base::O_OPTM_CSS_ASYNC => array( 'name' => 'litespeed_task_ccss', 'hook' => 'LiteSpeed\CSS::cron_ccss' ),
|
16 |
Base::O_OPTM_UCSS => array( 'name' => 'litespeed_task_ucss', 'hook' => 'LiteSpeed\CSS::cron_ucss' ),
|
17 |
+
Base::O_MEDIA_VPI_CRON => array( 'name' => 'litespeed_task_vpi', 'hook' => 'LiteSpeed\VPI::cron' ),
|
18 |
Base::O_MEDIA_PLACEHOLDER_RESP_ASYNC => array( 'name' => 'litespeed_task_lqip', 'hook' => 'LiteSpeed\Placeholder::cron' ),
|
19 |
Base::O_DISCUSS_AVATAR_CRON => array( 'name' => 'litespeed_task_avatar', 'hook' => 'LiteSpeed\Avatar::cron' ),
|
20 |
Base::O_IMG_OPTM_AUTO => array( 'name' => 'litespeed_task_imgoptm_req', 'hook' => 'LiteSpeed\Img_Optm::cron_auto_request' ),
|
24 |
private static $_guest_options = array(
|
25 |
Base::O_OPTM_CSS_ASYNC,
|
26 |
Base::O_OPTM_UCSS,
|
27 |
+
Base::O_MEDIA_VPI,
|
28 |
);
|
29 |
|
30 |
const FITLER_CRAWLER = 'litespeed_crawl_filter';
|
src/utility.cls.php
CHANGED
@@ -402,6 +402,30 @@ class Utility extends Root {
|
|
402 |
return $url;
|
403 |
}
|
404 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
405 |
/**
|
406 |
* Convert URL to URI
|
407 |
*
|
@@ -525,6 +549,8 @@ class Utility extends Root {
|
|
525 |
* @return string
|
526 |
*/
|
527 |
public static function sanitize_lines( $arr, $type = null ) {
|
|
|
|
|
528 |
if ( ! $arr ) {
|
529 |
if ( $type === 'string' ) {
|
530 |
return '';
|
@@ -538,31 +564,44 @@ class Utility extends Root {
|
|
538 |
|
539 |
$arr = array_map( 'trim', $arr );
|
540 |
$changed = false;
|
541 |
-
if (
|
542 |
$arr = array_map( __CLASS__ . '::url2uri', $arr );
|
543 |
$changed = true;
|
544 |
}
|
545 |
-
if (
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
546 |
$arr = array_map( __CLASS__ . '::make_relative', $arr );// Remove domain
|
547 |
$changed = true;
|
548 |
}
|
549 |
-
if (
|
550 |
$arr = array_map( __CLASS__ . '::parse_domain', $arr );// Only keep domain
|
551 |
$changed = true;
|
552 |
}
|
553 |
|
554 |
-
if (
|
555 |
$arr = array_map( __CLASS__ . '::noprotocol', $arr ); // Drop protocol, `https://example.com` -> `//example.com`
|
556 |
$changed = true;
|
557 |
}
|
558 |
|
|
|
|
|
|
|
|
|
|
|
559 |
if ( $changed ) {
|
560 |
$arr = array_map( 'trim', $arr );
|
561 |
}
|
562 |
$arr = array_unique( $arr );
|
563 |
$arr = array_filter( $arr );
|
564 |
|
565 |
-
if (
|
566 |
return implode( "\n", $arr );
|
567 |
}
|
568 |
|
402 |
return $url;
|
403 |
}
|
404 |
|
405 |
+
/**
|
406 |
+
* Convert URL to basename (filename)
|
407 |
+
*
|
408 |
+
* @since 4.7
|
409 |
+
*/
|
410 |
+
public static function basename( $url ) {
|
411 |
+
$url = trim( $url );
|
412 |
+
$uri = @parse_url( $url, PHP_URL_PATH );
|
413 |
+
$basename = pathinfo( $uri, PATHINFO_BASENAME );
|
414 |
+
|
415 |
+
return $basename;
|
416 |
+
}
|
417 |
+
|
418 |
+
/**
|
419 |
+
* Drop .webp if existed in filename
|
420 |
+
*
|
421 |
+
* @since 4.7
|
422 |
+
*/
|
423 |
+
public static function drop_webp( $filename ) {
|
424 |
+
if ( substr($filename, -5 ) === '.webp' ) $filename = substr( $filename, 0, -5 );
|
425 |
+
|
426 |
+
return $filename;
|
427 |
+
}
|
428 |
+
|
429 |
/**
|
430 |
* Convert URL to URI
|
431 |
*
|
549 |
* @return string
|
550 |
*/
|
551 |
public static function sanitize_lines( $arr, $type = null ) {
|
552 |
+
$types = $type ? explode( ',', $type ) : array();
|
553 |
+
|
554 |
if ( ! $arr ) {
|
555 |
if ( $type === 'string' ) {
|
556 |
return '';
|
564 |
|
565 |
$arr = array_map( 'trim', $arr );
|
566 |
$changed = false;
|
567 |
+
if ( in_array( 'uri', $types ) ) {
|
568 |
$arr = array_map( __CLASS__ . '::url2uri', $arr );
|
569 |
$changed = true;
|
570 |
}
|
571 |
+
if ( in_array( 'basename', $types ) ) {
|
572 |
+
$arr = array_map( __CLASS__ . '::basename', $arr );
|
573 |
+
$changed = true;
|
574 |
+
}
|
575 |
+
if ( in_array( 'drop_webp', $types ) ) {
|
576 |
+
$arr = array_map( __CLASS__ . '::drop_webp', $arr );
|
577 |
+
$changed = true;
|
578 |
+
}
|
579 |
+
if ( in_array( 'relative', $types ) ) {
|
580 |
$arr = array_map( __CLASS__ . '::make_relative', $arr );// Remove domain
|
581 |
$changed = true;
|
582 |
}
|
583 |
+
if ( in_array( 'domain', $types ) ) {
|
584 |
$arr = array_map( __CLASS__ . '::parse_domain', $arr );// Only keep domain
|
585 |
$changed = true;
|
586 |
}
|
587 |
|
588 |
+
if ( in_array( 'noprotocol', $types ) ) {
|
589 |
$arr = array_map( __CLASS__ . '::noprotocol', $arr ); // Drop protocol, `https://example.com` -> `//example.com`
|
590 |
$changed = true;
|
591 |
}
|
592 |
|
593 |
+
if ( in_array( 'trailingslash', $types ) ) {
|
594 |
+
$arr = array_map( 'trailingslashit', $arr ); // Append trailing slach, `https://example.com` -> `https://example.com/`
|
595 |
+
$changed = true;
|
596 |
+
}
|
597 |
+
|
598 |
if ( $changed ) {
|
599 |
$arr = array_map( 'trim', $arr );
|
600 |
}
|
601 |
$arr = array_unique( $arr );
|
602 |
$arr = array_filter( $arr );
|
603 |
|
604 |
+
if ( in_array( 'string', $types ) ) {
|
605 |
return implode( "\n", $arr );
|
606 |
}
|
607 |
|
src/vary.cls.php
CHANGED
@@ -170,6 +170,11 @@ class Vary extends Root {
|
|
170 |
return;
|
171 |
}
|
172 |
|
|
|
|
|
|
|
|
|
|
|
173 |
Debug2::debug( '[Vary] 👒👒 Guest mode' );
|
174 |
|
175 |
! defined( 'LITESPEED_GUEST' ) && define( 'LITESPEED_GUEST', true );
|
170 |
return;
|
171 |
}
|
172 |
|
173 |
+
/* @ref https://wordpress.org/support/topic/checkout-add-to-cart-executed-twice/ */
|
174 |
+
if ( ! empty( $_GET[ 'litespeed_guest_off' ] ) ) {
|
175 |
+
return;
|
176 |
+
}
|
177 |
+
|
178 |
Debug2::debug( '[Vary] 👒👒 Guest mode' );
|
179 |
|
180 |
! defined( 'LITESPEED_GUEST' ) && define( 'LITESPEED_GUEST', true );
|
src/vpi.cls.php
ADDED
@@ -0,0 +1,329 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* The viewport image class.
|
4 |
+
*
|
5 |
+
* @since 4.7
|
6 |
+
*/
|
7 |
+
namespace LiteSpeed;
|
8 |
+
defined( 'WPINC' ) || exit;
|
9 |
+
|
10 |
+
class VPI extends Base {
|
11 |
+
const LOG_TAG = '[VPI]';
|
12 |
+
|
13 |
+
const TYPE_GEN = 'gen';
|
14 |
+
const TYPE_CLEAR_Q = 'clear_q';
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Init
|
18 |
+
*
|
19 |
+
* @since 4.7
|
20 |
+
*/
|
21 |
+
public function __construct() {
|
22 |
+
$this->_summary = self::get_summary();
|
23 |
+
}
|
24 |
+
|
25 |
+
/**
|
26 |
+
* The VPI content of the current page
|
27 |
+
*
|
28 |
+
* @since 4.7
|
29 |
+
*/
|
30 |
+
public function add_to_queue() {
|
31 |
+
$is_mobile = $this->_separate_mobile();
|
32 |
+
|
33 |
+
global $wp;
|
34 |
+
$request_url = home_url( $wp->request );
|
35 |
+
|
36 |
+
$ua = ! empty( $_SERVER[ 'HTTP_USER_AGENT' ] ) ? $_SERVER[ 'HTTP_USER_AGENT' ] : '';
|
37 |
+
|
38 |
+
// Store it to prepare for cron
|
39 |
+
$this->_queue = $this->load_queue( 'vpi' );
|
40 |
+
|
41 |
+
if ( count( $this->_queue ) > 500 ) {
|
42 |
+
self::debug( 'Queue is full - 500' );
|
43 |
+
return;
|
44 |
+
}
|
45 |
+
|
46 |
+
if ( ! is_singular() ) {
|
47 |
+
self::debug( 'not single post ID' );
|
48 |
+
return;
|
49 |
+
}
|
50 |
+
|
51 |
+
$post_id = get_the_ID();
|
52 |
+
|
53 |
+
$queue_k = ( $is_mobile ? 'mobile' : '' ) . ' ' . $request_url;
|
54 |
+
if ( ! empty( $this->_queue[ $queue_k ] ) ) {
|
55 |
+
self::debug( 'queue k existed ' . $queue_k );
|
56 |
+
return;
|
57 |
+
}
|
58 |
+
|
59 |
+
$this->_queue[ $queue_k ] = array(
|
60 |
+
'url' => apply_filters( 'litespeed_vpi_url', $request_url ),
|
61 |
+
'post_id' => $post_id,
|
62 |
+
'user_agent' => substr( $ua, 0, 200 ),
|
63 |
+
'is_mobile' => $this->_separate_mobile(),
|
64 |
+
); // Current UA will be used to request
|
65 |
+
$this->save_queue( 'vpi', $this->_queue );
|
66 |
+
self::debug( 'Added queue_vpi [url] ' . $queue_k . ' [UA] ' . $ua );
|
67 |
+
|
68 |
+
// Prepare cache tag for later purge
|
69 |
+
Tag::add( 'VPI.' . md5( $queue_k ) );
|
70 |
+
|
71 |
+
return null;
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Notify finished from server
|
76 |
+
* @since 4.7
|
77 |
+
*/
|
78 |
+
public function notify() {
|
79 |
+
$post_data = json_decode(file_get_contents('php://input'), true);
|
80 |
+
if( is_null( $post_data ) ) {
|
81 |
+
$post_data = $_POST;
|
82 |
+
}
|
83 |
+
self::debug( 'notify() data', $post_data );
|
84 |
+
|
85 |
+
$this->_queue = $this->load_queue( 'vpi' );
|
86 |
+
|
87 |
+
// Validate key
|
88 |
+
if ( empty( $post_data[ 'domain_key' ] ) || $post_data[ 'domain_key' ] !== md5( $this->conf( self::O_API_KEY ) ) ) {
|
89 |
+
self::debug( '❌ notify wrong key' );
|
90 |
+
self::save_summary( array( 'notify_ts_err' => time() ) );
|
91 |
+
return Cloud::err( 'wrong_key' );
|
92 |
+
}
|
93 |
+
|
94 |
+
list( $post_data ) = $this->cls( 'Cloud' )->extract_msg( $post_data, 'vpi' );
|
95 |
+
|
96 |
+
global $wpdb;
|
97 |
+
|
98 |
+
$notified_data = $post_data[ 'data' ];
|
99 |
+
if ( empty( $notified_data ) || ! is_array( $notified_data ) ) {
|
100 |
+
self::debug( '❌ notify exit: no notified data' );
|
101 |
+
return Cloud::err( 'no notified data' );
|
102 |
+
}
|
103 |
+
|
104 |
+
// Check if its in queue or not
|
105 |
+
$valid_i = 0;
|
106 |
+
foreach ( $notified_data as $v ) {
|
107 |
+
if ( empty( $v[ 'request_url' ] ) ) {
|
108 |
+
self::debug( '❌ notify bypass: no request_url', $v );
|
109 |
+
continue;
|
110 |
+
}
|
111 |
+
$is_mobile = !empty( $v[ 'is_mobile' ] );
|
112 |
+
$queue_k = ( $is_mobile ? 'mobile' : '' ) . ' ' . $v[ 'request_url' ];
|
113 |
+
|
114 |
+
if ( empty( $this->_queue[ $queue_k ] ) ) {
|
115 |
+
self::debug( '❌ notify bypass: no this queue [q_k]' . $queue_k );
|
116 |
+
continue;
|
117 |
+
}
|
118 |
+
|
119 |
+
// Save data
|
120 |
+
if ( ! empty( $v[ 'data' ] ) ) {
|
121 |
+
$post_id = $this->_queue[ $queue_k ][ 'post_id' ];
|
122 |
+
$name = $is_mobile ? 'litespeed_vpi_list_mobile' : 'litespeed_vpi_list';
|
123 |
+
$this->cls( 'Metabox' )->save( $post_id, $name, $v[ 'data' ], true );
|
124 |
+
|
125 |
+
$valid_i ++;
|
126 |
+
}
|
127 |
+
|
128 |
+
unset( $this->_queue[ $queue_k ] );
|
129 |
+
self::debug( 'notify data handled, unset queue [q_k] ' . $queue_k );
|
130 |
+
}
|
131 |
+
$this->save_queue( 'vpi', $this->_queue );
|
132 |
+
|
133 |
+
self::debug( 'notified' );
|
134 |
+
|
135 |
+
return Cloud::ok( array( 'count' => $valid_i ) );
|
136 |
+
}
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Cron
|
140 |
+
*
|
141 |
+
* @since 4.7
|
142 |
+
*/
|
143 |
+
public static function cron( $continue = false ) {
|
144 |
+
$_instance = self::cls();
|
145 |
+
return $_instance->_cron_handler( $continue );
|
146 |
+
}
|
147 |
+
|
148 |
+
/**
|
149 |
+
* Cron generation
|
150 |
+
*
|
151 |
+
* @since 4.7
|
152 |
+
*/
|
153 |
+
private function _cron_handler( $continue = false ) {
|
154 |
+
self::debug( 'cron start' );
|
155 |
+
$this->_queue = $this->load_queue( 'vpi' );
|
156 |
+
|
157 |
+
if ( empty( $this->_queue ) ) {
|
158 |
+
return;
|
159 |
+
}
|
160 |
+
|
161 |
+
// For cron, need to check request interval too
|
162 |
+
if ( ! $continue ) {
|
163 |
+
if ( ! empty( $this->_summary[ 'curr_request_vpi' ] ) && time() - $this->_summary[ 'curr_request_vpi' ] < 300 && ! $this->conf( self::O_DEBUG ) ) {
|
164 |
+
self::debug( 'Last request not done' );
|
165 |
+
return;
|
166 |
+
}
|
167 |
+
}
|
168 |
+
|
169 |
+
$i = 0;
|
170 |
+
foreach ( $this->_queue as $k => $v ) {
|
171 |
+
if ( ! empty( $v[ '_status' ] ) ) {
|
172 |
+
continue;
|
173 |
+
}
|
174 |
+
|
175 |
+
self::debug( 'cron job [tag] ' . $k . ' [url] ' . $v[ 'url' ] . ( $v[ 'is_mobile' ] ? ' 📱 ' : '' ) . ' [UA] ' . $v[ 'user_agent' ] );
|
176 |
+
|
177 |
+
$i ++;
|
178 |
+
$res = $this->_send_req( $v[ 'url' ], $k, $v[ 'user_agent' ], $v[ 'is_mobile' ] );
|
179 |
+
if ( ! $res ) { // Status is wrong, drop this this->_queue
|
180 |
+
$this->_queue = $this->load_queue( 'vpi' );
|
181 |
+
unset( $this->_queue[ $k ] );
|
182 |
+
$this->save_queue( 'vpi', $this->_queue );
|
183 |
+
|
184 |
+
if ( ! $continue ) {
|
185 |
+
return;
|
186 |
+
}
|
187 |
+
|
188 |
+
// if ( $i > 3 ) {
|
189 |
+
GUI::print_loading( count( $this->_queue ), 'VPI' );
|
190 |
+
return Router::self_redirect( Router::ACTION_VPI, self::TYPE_GEN );
|
191 |
+
// }
|
192 |
+
|
193 |
+
continue;
|
194 |
+
}
|
195 |
+
|
196 |
+
// Exit queue if out of quota
|
197 |
+
if ( $res === 'out_of_quota' ) {
|
198 |
+
return;
|
199 |
+
}
|
200 |
+
|
201 |
+
$this->_queue = $this->load_queue( 'vpi' );
|
202 |
+
$this->_queue[ $k ][ '_status' ] = 'requested';
|
203 |
+
$this->save_queue( 'vpi', $this->_queue );
|
204 |
+
self::debug( 'Saved to queue [k] ' . $k );
|
205 |
+
|
206 |
+
// only request first one
|
207 |
+
if ( ! $continue ) {
|
208 |
+
return;
|
209 |
+
}
|
210 |
+
|
211 |
+
// if ( $i > 3 ) {
|
212 |
+
GUI::print_loading( count( $this->_queue ), 'VPI' );
|
213 |
+
return Router::self_redirect( Router::ACTION_VPI, self::TYPE_GEN );
|
214 |
+
// }
|
215 |
+
}
|
216 |
+
}
|
217 |
+
|
218 |
+
/**
|
219 |
+
* Prepare HTML from URL
|
220 |
+
*
|
221 |
+
* @since 4.7
|
222 |
+
*/
|
223 |
+
public function prepare_html( $request_url, $user_agent ) {
|
224 |
+
$html = $this->cls( 'Crawler' )->self_curl( $request_url, $user_agent );
|
225 |
+
self::debug2( 'self_curl result....', $html );
|
226 |
+
|
227 |
+
|
228 |
+
$html = $this->cls( 'Optimizer' )->html_min( $html, true );
|
229 |
+
// Drop <noscript>xxx</noscript>
|
230 |
+
$html = preg_replace( '#<noscript>.*</noscript>#isU', '', $html );
|
231 |
+
|
232 |
+
return $html;
|
233 |
+
}
|
234 |
+
|
235 |
+
/**
|
236 |
+
* Send to QC API to generate VPI
|
237 |
+
*
|
238 |
+
* @since 4.7
|
239 |
+
* @access private
|
240 |
+
*/
|
241 |
+
private function _send_req( $request_url, $queue_k, $user_agent, $is_mobile ) {
|
242 |
+
$svc = Cloud::SVC_VPI;
|
243 |
+
// Check if has credit to push or not
|
244 |
+
$err = false;
|
245 |
+
$allowance = $this->cls( 'Cloud' )->allowance( $svc, $err );
|
246 |
+
if ( ! $allowance ) {
|
247 |
+
self::debug( '❌ No credit: ' . $err );
|
248 |
+
$err && Admin_Display::error( Error::msg( $err ) );
|
249 |
+
return 'out_of_quota';
|
250 |
+
}
|
251 |
+
|
252 |
+
set_time_limit( 120 );
|
253 |
+
|
254 |
+
// Update css request status
|
255 |
+
self::save_summary( array( 'curr_request_vpi' => time() ), true );
|
256 |
+
|
257 |
+
// Gather guest HTML to send
|
258 |
+
$html = $this->prepare_html( $request_url, $user_agent );
|
259 |
+
|
260 |
+
if ( ! $html ) {
|
261 |
+
return false;
|
262 |
+
}
|
263 |
+
|
264 |
+
// Parse HTML to gather all CSS content before requesting
|
265 |
+
$css = false;
|
266 |
+
list( $css, $html ) = $this->cls( 'CSS' )->prepare_css( $html );
|
267 |
+
|
268 |
+
if ( ! $css ) {
|
269 |
+
self::debug( '❌ No css' );
|
270 |
+
return false;
|
271 |
+
}
|
272 |
+
|
273 |
+
// Generate critical css
|
274 |
+
$data = array(
|
275 |
+
// 'type' => strtoupper( $type ), // Backward compatibility for v4.1-
|
276 |
+
'url' => $request_url,
|
277 |
+
'queue_k' => $queue_k,
|
278 |
+
'user_agent' => $user_agent,
|
279 |
+
'is_mobile' => $is_mobile ? 1 : 0, // todo:compatible w/ tablet
|
280 |
+
'html' => $html,
|
281 |
+
'css' => $css,
|
282 |
+
);
|
283 |
+
self::debug( 'Generating: ', $data );
|
284 |
+
|
285 |
+
$json = Cloud::post( $svc, $data, 30 );
|
286 |
+
if ( ! is_array( $json ) ) {
|
287 |
+
return false;
|
288 |
+
}
|
289 |
+
|
290 |
+
// Unknown status, remove this line
|
291 |
+
if ( $json[ 'status' ] != 'queued' ) {
|
292 |
+
return false;
|
293 |
+
}
|
294 |
+
|
295 |
+
// Save summary data
|
296 |
+
self::reload_summary();
|
297 |
+
$this->_summary[ 'last_spent_vpi' ] = time() - $this->_summary[ 'curr_request_vpi' ];
|
298 |
+
$this->_summary[ 'last_request_vpi' ] = $this->_summary[ 'curr_request_vpi' ];
|
299 |
+
$this->_summary[ 'curr_request_vpi' ] = 0;
|
300 |
+
self::save_summary();
|
301 |
+
|
302 |
+
return true;
|
303 |
+
}
|
304 |
+
|
305 |
+
/**
|
306 |
+
* Handle all request actions from main cls
|
307 |
+
*
|
308 |
+
* @since 4.7
|
309 |
+
*/
|
310 |
+
public function handler() {
|
311 |
+
$type = Router::verify_type();
|
312 |
+
|
313 |
+
switch ( $type ) {
|
314 |
+
case self::TYPE_GEN:
|
315 |
+
self::cron( true );
|
316 |
+
break;
|
317 |
+
|
318 |
+
case self::TYPE_CLEAR_Q:
|
319 |
+
$this->clear_q( 'vpi' );
|
320 |
+
break;
|
321 |
+
|
322 |
+
default:
|
323 |
+
break;
|
324 |
+
}
|
325 |
+
|
326 |
+
Admin::redirect();
|
327 |
+
}
|
328 |
+
|
329 |
+
}
|
thirdparty/divi-theme-builder.cls.php
CHANGED
@@ -29,6 +29,10 @@ class Divi_Theme_Builder
|
|
29 |
public static function detect()
|
30 |
{
|
31 |
if ( ! defined( 'ET_CORE' ) ) return;
|
|
|
|
|
|
|
|
|
32 |
/**
|
33 |
* Add contact form to nonce
|
34 |
* @since 2.9.7.1 #475461
|
29 |
public static function detect()
|
30 |
{
|
31 |
if ( ! defined( 'ET_CORE' ) ) return;
|
32 |
+
|
33 |
+
// As DIVI will set page to non-cacheable for the 1st visit to generate CCSS, will need to ignore that no-cache for crawler
|
34 |
+
defined( 'LITESPEED_CRAWLER_IGNORE_NONCACHEABLE' ) || define( 'LITESPEED_CRAWLER_IGNORE_NONCACHEABLE', true );
|
35 |
+
|
36 |
/**
|
37 |
* Add contact form to nonce
|
38 |
* @since 2.9.7.1 #475461
|
thirdparty/entry.inc.php
CHANGED
@@ -23,6 +23,7 @@ $third_cls = array(
|
|
23 |
'Caldera_Forms',
|
24 |
'Divi_Theme_Builder',
|
25 |
'Facetwp',
|
|
|
26 |
'Theme_My_Login',
|
27 |
'User_Switching',
|
28 |
'WCML',
|
23 |
'Caldera_Forms',
|
24 |
'Divi_Theme_Builder',
|
25 |
'Facetwp',
|
26 |
+
'LiteSpeed_Check',
|
27 |
'Theme_My_Login',
|
28 |
'User_Switching',
|
29 |
'WCML',
|
thirdparty/litespeed-check.cls.php
ADDED
@@ -0,0 +1,151 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Check if any plugins that could conflict with LiteSpeed Cache are active.
|
4 |
+
* @since 4.7
|
5 |
+
*/
|
6 |
+
|
7 |
+
namespace LiteSpeed\Thirdparty;
|
8 |
+
|
9 |
+
defined( 'WPINC' ) || exit;
|
10 |
+
|
11 |
+
class LiteSpeed_Check {
|
12 |
+
|
13 |
+
public static $_incompatible_plugins =
|
14 |
+
array(
|
15 |
+
'autoptimize/autoptimize.php',
|
16 |
+
'breeze/breeze.php',
|
17 |
+
'cache-enabler/cache-enabler.php',
|
18 |
+
'cachify/cachify.php',
|
19 |
+
'cloudflare/cloudflare.php',
|
20 |
+
'comet-cache/comet-cache.php',
|
21 |
+
'docket-cache/docket-cache.php',
|
22 |
+
'fast-velocity-minify/fvm.php',
|
23 |
+
'hummingbird-performance/wp-hummingbird.php',
|
24 |
+
'nginx-cache/nginx-cache.php',
|
25 |
+
'nitropack/main.php',
|
26 |
+
'pantheon-advanced-page-cache/pantheon-advanced-page-cache.php',
|
27 |
+
'powered-cache/powered-cache.php',
|
28 |
+
'sg-cachepress/sg-cachepress.php',
|
29 |
+
'simple-cache/simple-cache.php',
|
30 |
+
'redis-cache/redis-cache.php',
|
31 |
+
'w3-total-cache/w3-total-cache.php',
|
32 |
+
'wp-cloudflare-page-cache/wp-cloudflare-page-cache.php',
|
33 |
+
'wp-fastest-cache/wpFastestCache.php',
|
34 |
+
'wp-meteor/wp-meteor.php',
|
35 |
+
'wp-optimize/wp-optimize.php',
|
36 |
+
'wp-performance-score-booster/wp-performance-score-booster.php',
|
37 |
+
'wp-rocket/wp-rocket.php',
|
38 |
+
'wp-super-cache/wp-cache.php',
|
39 |
+
);
|
40 |
+
|
41 |
+
private static $_option = 'thirdparty_litespeed_check';
|
42 |
+
private static $_msg_id = 'id="lscwp-incompatible-plugin-notice"';
|
43 |
+
|
44 |
+
public static function detect() {
|
45 |
+
if ( ! is_admin() ) {
|
46 |
+
return;
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Check for incompatible plugins when `litespeed-cache` is first activated.
|
51 |
+
*/
|
52 |
+
$plugin = basename( LSCWP_DIR ) . '/litespeed-cache.php';
|
53 |
+
register_deactivation_hook( $plugin, function( $_network_wide ) {
|
54 |
+
\LiteSpeed\Admin_Display::delete_option( self::$_option );
|
55 |
+
} );
|
56 |
+
if ( ! \LiteSpeed\Admin_Display::get_option( self::$_option ) ) {
|
57 |
+
self::activated_plugin( $plugin, null );
|
58 |
+
\LiteSpeed\Admin_Display::add_option( self::$_option, true );
|
59 |
+
}
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Check for incompatible plugins when any plugin is (de)activated.
|
63 |
+
*/
|
64 |
+
add_action( 'activated_plugin', __CLASS__ . '::activated_plugin', 10, 2 );
|
65 |
+
add_action( 'deactivated_plugin', __CLASS__ . '::deactivated_plugin', 10, 2 );
|
66 |
+
}
|
67 |
+
|
68 |
+
public static function activated_plugin( $plugin, $network_wide ) {
|
69 |
+
self::incompatible_plugin_notice( $plugin, $network_wide, 'activated' );
|
70 |
+
}
|
71 |
+
|
72 |
+
public static function deactivated_plugin( $plugin, $network_wide ) {
|
73 |
+
self::incompatible_plugin_notice( $plugin, $network_wide, 'deactivated' );
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Detect any incompatible plugins that are currently `active` and `valid`.
|
78 |
+
* Show a notification if there are any.
|
79 |
+
*/
|
80 |
+
public static function incompatible_plugin_notice( $plugin, $_network_wide, $action ) {
|
81 |
+
self::update_messages();
|
82 |
+
|
83 |
+
/**
|
84 |
+
* The 'deactivated_plugin' action fires before
|
85 |
+
* `wp_get_active_and_valid_plugins` can see the change, so we'll need to
|
86 |
+
* remove `$plugin` from the list.
|
87 |
+
*/
|
88 |
+
$deactivated = 'deactivated' === $action ? array( $plugin ) : array();
|
89 |
+
|
90 |
+
$incompatible_plugins =
|
91 |
+
array_map(
|
92 |
+
function( $plugin ) { return WP_PLUGIN_DIR . '/' . $plugin; },
|
93 |
+
array_diff( self::$_incompatible_plugins, $deactivated )
|
94 |
+
);
|
95 |
+
|
96 |
+
$active_incompatible_plugins =
|
97 |
+
array_map(
|
98 |
+
function( $plugin ) {
|
99 |
+
$plugin = get_plugin_data( $plugin, false, true );
|
100 |
+
return $plugin['Name'];
|
101 |
+
},
|
102 |
+
array_intersect( $incompatible_plugins, wp_get_active_and_valid_plugins() )
|
103 |
+
);
|
104 |
+
|
105 |
+
if ( empty( $active_incompatible_plugins ) ) {
|
106 |
+
return;
|
107 |
+
}
|
108 |
+
|
109 |
+
\LiteSpeed\Admin_Display::error(
|
110 |
+
'<div ' . self::$_msg_id . '>'
|
111 |
+
. esc_html__(
|
112 |
+
'Please consider disabling the following detected plugins, as they may conflict with LiteSpeed Cache:',
|
113 |
+
'litespeed-cache'
|
114 |
+
)
|
115 |
+
. '<p style="color: red; font-weight: 700;">'
|
116 |
+
. implode( ', ', $active_incompatible_plugins )
|
117 |
+
. '</p>'
|
118 |
+
. '</div>',
|
119 |
+
false,
|
120 |
+
true
|
121 |
+
);
|
122 |
+
}
|
123 |
+
|
124 |
+
/**
|
125 |
+
* Prevent multiple incompatible plugin notices, in case an admin (de)activates
|
126 |
+
* a number of incompatible plugins in succession without dismissing the
|
127 |
+
* notice(s).
|
128 |
+
*/
|
129 |
+
private static function update_messages() {
|
130 |
+
$messages =
|
131 |
+
\LiteSpeed\Admin_Display::get_option(
|
132 |
+
\LiteSpeed\Admin_Display::DB_MSG_PIN,
|
133 |
+
array()
|
134 |
+
);
|
135 |
+
if ( is_array( $messages ) ) {
|
136 |
+
foreach ( $messages as $index => $message ) {
|
137 |
+
if ( strpos( $message, self::$_msg_id ) !== false ) {
|
138 |
+
unset( $messages[ $index ] );
|
139 |
+
if ( ! $messages ) {
|
140 |
+
$messages = -1;
|
141 |
+
}
|
142 |
+
\LiteSpeed\Admin_Display::update_option(
|
143 |
+
\LiteSpeed\Admin_Display::DB_MSG_PIN,
|
144 |
+
$messages
|
145 |
+
);
|
146 |
+
break;
|
147 |
+
}
|
148 |
+
}
|
149 |
+
}
|
150 |
+
}
|
151 |
+
}
|
tpl/banner/new_version.php
CHANGED
@@ -21,14 +21,12 @@ if ( ! isset( $current->response[ Core::PLUGIN_FILE ] ) ) {
|
|
21 |
$last_check = empty( $this->_summary[ 'new_version.last_check' ] ) ? 0 : $this->_summary[ 'new_version.last_check' ];
|
22 |
// Check once in a half day
|
23 |
if ( time() - $last_check > 43200 ) {
|
24 |
-
|
25 |
-
Admin_Display::save_summary( $this->_summary );
|
26 |
|
27 |
// Detect version
|
28 |
$auto_v = Cloud::version_check( 'new_version_banner' );
|
29 |
if ( ! empty( $auto_v[ 'latest' ] ) ) {
|
30 |
-
|
31 |
-
Admin_Display::save_summary( $this->_summary );
|
32 |
}
|
33 |
// After detect, don't show, just return and show next time
|
34 |
return;
|
21 |
$last_check = empty( $this->_summary[ 'new_version.last_check' ] ) ? 0 : $this->_summary[ 'new_version.last_check' ];
|
22 |
// Check once in a half day
|
23 |
if ( time() - $last_check > 43200 ) {
|
24 |
+
Admin_Display::save_summary( array( 'new_version.last_check' => time() ) );
|
|
|
25 |
|
26 |
// Detect version
|
27 |
$auto_v = Cloud::version_check( 'new_version_banner' );
|
28 |
if ( ! empty( $auto_v[ 'latest' ] ) ) {
|
29 |
+
Admin_Display::save_summary( array( 'new_version.v' => $auto_v[ 'latest' ] ) );
|
|
|
30 |
}
|
31 |
// After detect, don't show, just return and show next time
|
32 |
return;
|
tpl/cache/settings-purge.tpl.php
CHANGED
@@ -128,7 +128,7 @@ $break_arr = array(
|
|
128 |
<?php $this->build_input( $id, null, null, 'time' ); ?>
|
129 |
<div class="litespeed-desc">
|
130 |
<?php echo sprintf( __( 'Specify the time to purge the "%s" list.', 'litespeed-cache' ), __( 'Scheduled Purge URLs', 'litespeed-cache' ) ); ?>
|
131 |
-
<?php echo sprintf( __( 'Current server time is %s.', 'litespeed-cache' ), '<code>' . date( 'H:i:s' ) . '</code>' ); ?>
|
132 |
</div>
|
133 |
</td>
|
134 |
</tr>
|
128 |
<?php $this->build_input( $id, null, null, 'time' ); ?>
|
129 |
<div class="litespeed-desc">
|
130 |
<?php echo sprintf( __( 'Specify the time to purge the "%s" list.', 'litespeed-cache' ), __( 'Scheduled Purge URLs', 'litespeed-cache' ) ); ?>
|
131 |
+
<?php echo sprintf( __( 'Current server time is %s.', 'litespeed-cache' ), '<code>' . date( 'H:i:s', time() + LITESPEED_TIME_OFFSET ) . '</code>' ); ?>
|
132 |
</div>
|
133 |
</td>
|
134 |
</tr>
|
tpl/cdn/auto_setup.tpl.php
ADDED
@@ -0,0 +1,260 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace LiteSpeed;
|
3 |
+
defined( 'WPINC' ) || exit;
|
4 |
+
|
5 |
+
$__cdnsetup = Cdn_Setup::cls();
|
6 |
+
|
7 |
+
// This will drop QS param `qc_res` `domain_hash` and `token` also
|
8 |
+
$__cdnsetup->maybe_extract_token();
|
9 |
+
|
10 |
+
$cloud_linked = Cloud::get_summary( 'is_linked' );
|
11 |
+
$setup_summary = Cdn_Setup::get_summary();
|
12 |
+
|
13 |
+
$cdn_setup_done_ts = 0;
|
14 |
+
if ( ! empty( $setup_summary[ 'cdn_setup_done_ts' ] ) ) {
|
15 |
+
$cdn_setup_done_ts = $setup_summary[ 'cdn_setup_done_ts' ];
|
16 |
+
}
|
17 |
+
|
18 |
+
$has_setup_token = $__cdnsetup->has_cdn_setup_token();
|
19 |
+
|
20 |
+
if ( ! empty( $setup_summary[ 'cdn_setup_ts' ] ) ) {
|
21 |
+
$cdn_setup_ts = $setup_summary[ 'cdn_setup_ts' ];
|
22 |
+
|
23 |
+
if ( !empty( $setup_summary[ 'cdn_setup_err' ] ) ) {
|
24 |
+
$cdn_setup_err = $setup_summary[ 'cdn_setup_err' ];
|
25 |
+
}
|
26 |
+
|
27 |
+
if ($this->conf( Base::O_QC_NAMESERVERS )) {
|
28 |
+
$nameservers = explode(',', $this->conf( Base::O_QC_NAMESERVERS ));
|
29 |
+
}
|
30 |
+
} else {
|
31 |
+
$cdn_setup_ts = 0;
|
32 |
+
}
|
33 |
+
|
34 |
+
$curr_status = '<span class="litespeed-desc">' . __('Not running', 'litespeed-cache') . '</span>';
|
35 |
+
$apply_btn_txt = __( 'Run CDN Setup', 'litespeed-cache' );
|
36 |
+
$apply_btn_type = Cdn_Setup::TYPE_RUN;
|
37 |
+
$disabled = '';
|
38 |
+
$dom = parse_url(home_url(), PHP_URL_HOST);
|
39 |
+
|
40 |
+
if ($cdn_setup_done_ts) {
|
41 |
+
$curr_status = '<span class="litespeed-success dashicons dashicons-yes"></span> '
|
42 |
+
. __('Done', 'litespeed-cache')
|
43 |
+
. ' <span class="litespeed-desc litespeed-left10">'
|
44 |
+
. sprintf( __('Completed at %s', 'litespeed-cache'), wp_date(get_option( 'date_format' ) . ' ' . get_option( 'time_format'), $cdn_setup_done_ts) )
|
45 |
+
. '</span>';
|
46 |
+
$disabled = 'disabled';
|
47 |
+
} else if (!$has_setup_token) {
|
48 |
+
$disabled = 'disabled';
|
49 |
+
} else if ( ! empty( $cdn_setup_err ) ) {
|
50 |
+
$curr_status = '<span class="litespeed-warning dashicons dashicons-controls-pause"></span> ' . __('Paused', 'litespeed-cache');
|
51 |
+
$curr_status_subline = '<p class="litespeed-desc">' . $cdn_setup_err . '</p>';
|
52 |
+
} else if ( $cdn_setup_ts > 0 ) {
|
53 |
+
if ( isset($nameservers) ) {
|
54 |
+
$curr_status = '<span class="litespeed-primary dashicons dashicons-hourglass"></span> ' . __('Verifying, waiting for nameservers to be updated.', 'litespeed-cache') . ' ' . __('Click the refresh button below to refresh status.', 'litespeed-cache');
|
55 |
+
if ( isset( $setup_summary[ 'cdn_verify_msg' ])) {
|
56 |
+
$curr_status_subline = '<p class="litespeed-desc">' . __( 'Last Verification Result', 'litespeed-cache' ) . ': ' . $setup_summary[ 'cdn_verify_msg' ] . '</p>';
|
57 |
+
}
|
58 |
+
} else {
|
59 |
+
$curr_status = '<span class="litespeed-primary dashicons dashicons-hourglass"></span> ' . __('In Progress', 'litespeed-cache');
|
60 |
+
$curr_status_subline = '<p class="litespeed-desc">' . __( 'You will receive an email upon status update.', 'litespeed-cache' ) . ' ' . __( 'This process may take several minutes.', 'litespeed-cache' ) . '</p>';
|
61 |
+
}
|
62 |
+
$apply_btn_txt = __( 'Refresh CDN Setup Status', 'litespeed-cache' );
|
63 |
+
$apply_btn_type = Cdn_Setup::TYPE_STATUS;
|
64 |
+
}
|
65 |
+
|
66 |
+
?>
|
67 |
+
<h3 class="litespeed-title">
|
68 |
+
<?php echo __( 'Auto QUIC.cloud CDN Setup', 'litespeed-cache' ); ?>
|
69 |
+
</h3>
|
70 |
+
<p>
|
71 |
+
<?php echo __( 'This is a three step process for configuring your site to use QUIC.cloud CDN with QUIC.cloud DNS. This setup will perform the following actions', 'litespeed-cache' ) . ':'; ?>
|
72 |
+
</p>
|
73 |
+
<ol>
|
74 |
+
<li><?php echo __( 'Set up a QUIC.cloud account.', 'litespeed-cache' ); ?></li>
|
75 |
+
<li><?php echo __( 'Prepare the site for QUIC.cloud CDN, detect the DNS, and create a DNS Zone.', 'litespeed-cache' ); ?></li>
|
76 |
+
<li><?php echo __( 'Provide the nameservers necessary to enable the CDN.', 'litespeed-cache' ); ?></li>
|
77 |
+
<li>
|
78 |
+
<?php echo __( 'After successful DNS detection, QUIC.cloud will attempt to generate an SSL certificate and enable the CDN.', 'litespeed-cache' ); ?>
|
79 |
+
<?php echo __( 'This last stage could take 15 to 20 minutes.', 'litespeed-cache' ); ?>
|
80 |
+
<?php echo __( 'Your site will be available, but browsers may issue a "not secure" warning during this time.', 'litespeed-cache' ); ?>
|
81 |
+
</li>
|
82 |
+
</ol>
|
83 |
+
|
84 |
+
<p>
|
85 |
+
<?php echo __( 'After you set your nameservers, QUIC.cloud will detect the change and automatically enable the CDN.', 'litespeed-cache' ); ?>
|
86 |
+
</p>
|
87 |
+
|
88 |
+
<p class="litespeed-desc">
|
89 |
+
<?php echo __( 'Notes', 'litespeed-cache' ) . ':'; ?>
|
90 |
+
</p>
|
91 |
+
<ul class="litespeed-desc">
|
92 |
+
<li>
|
93 |
+
<?php echo __( 'QUIC.cloud CDN/DNS does not support DNSSEC.', 'litespeed-cache' ); ?>
|
94 |
+
<?php echo __( 'If you have this enabled for your domain, you must disable DNSSEC to continue.', 'litespeed-cache' ); ?>
|
95 |
+
</li>
|
96 |
+
<li>
|
97 |
+
<?php echo __( 'This setup process will create a DNS zone on QUIC.cloud if one does not currently exist.', 'litespeed-cache' ); ?>
|
98 |
+
<?php printf(__( 'If you prefer to use the CNAME setup, please <a %s>set up the CDN manually at QUIC.cloud</a>.', 'litespeed-cache' ),
|
99 |
+
'href="https://quic.cloud/docs/onboarding/" target="_blank" class="litespeed-learn-more"'); ?>
|
100 |
+
</li>
|
101 |
+
<li>
|
102 |
+
<?php echo __( 'QUIC.cloud will detect most normal DNS entries.', 'litespeed-cache' ); ?>
|
103 |
+
<?php echo __( 'If you have custom DNS records, it is possible that they are not detected.', 'litespeed-cache' ); ?>
|
104 |
+
<?php echo __( 'Visit your QUIC.cloud dashboard after the DNS Zone is set up to confirm your DNS zone.', 'litespeed-cache' ); ?>
|
105 |
+
</li>
|
106 |
+
</ul>
|
107 |
+
|
108 |
+
<h3 class="litespeed-title-section">
|
109 |
+
<?php echo __( 'Set up QUIC.cloud Account', 'litespeed-cache' ); ?>
|
110 |
+
</h3>
|
111 |
+
|
112 |
+
<?php if ( $cdn_setup_done_ts ) : ?>
|
113 |
+
<p>
|
114 |
+
<?php echo '<span class="litespeed-right10"><span class="litespeed-success dashicons dashicons-yes"></span> ' . __( 'Account is linked!', 'litespeed-cache' ) . '</span>'; ?>
|
115 |
+
<p>
|
116 |
+
<?php Doc::learn_more( Cloud::CLOUD_SERVER_DASH . '/dm/' . $dom . '/cdn/',
|
117 |
+
__( 'Manage CDN', 'litespeed-cache' ) . ' <span class="dashicons dashicons-external"></span>',
|
118 |
+
false,
|
119 |
+
'litespeed-link-with-icon' ); ?>
|
120 |
+
<?php Doc::learn_more( Cloud::CLOUD_SERVER_DASH . '/dns/records/' . $dom . '.',
|
121 |
+
__( 'Manage DNS Zone', 'litespeed-cache' ) . ' <span class="dashicons dashicons-external"></span>',
|
122 |
+
false,
|
123 |
+
'litespeed-link-with-icon' ); ?>
|
124 |
+
</p>
|
125 |
+
</p>
|
126 |
+
<?php elseif ( $has_setup_token ) : ?>
|
127 |
+
<?php echo '<span class="litespeed-right10"><span class="litespeed-success dashicons dashicons-yes"></span> ' . __( 'Ready to run CDN setup.', 'litespeed-cache' ) . '</span>'; ?>
|
128 |
+
<?php elseif ( $cloud_linked ) : ?>
|
129 |
+
<p><?php echo __( 'Domain key and QUIC.cloud link detected.', 'litespeed-cache' ); ?></p>
|
130 |
+
<div><?php Doc::learn_more( Utility::build_url( Router::ACTION_CDN_SETUP, Cdn_Setup::TYPE_NOLINK ), __( 'Begin QUIC.cloud CDN Setup', 'litespeed-cache' ), true, 'button button-primary' ); ?></div>
|
131 |
+
<?php else: ?>
|
132 |
+
<div><?php Doc::learn_more( Utility::build_url( Router::ACTION_CDN_SETUP, Cdn_Setup::TYPE_LINK ), __( 'Link to QUIC.cloud', 'litespeed-cache' ), true, 'button button-primary' ); ?></div>
|
133 |
+
<?php endif; ?>
|
134 |
+
|
135 |
+
<h3 class="litespeed-title-section">
|
136 |
+
<?php echo __( 'CDN Setup Status', 'litespeed-cache' ); ?>
|
137 |
+
</h3>
|
138 |
+
|
139 |
+
<p>
|
140 |
+
<span class="litespeed-inline"><?php echo $curr_status; ?></span>
|
141 |
+
</p>
|
142 |
+
|
143 |
+
<?php if ( isset ( $curr_status_subline ) ) { ?>
|
144 |
+
<?php echo $curr_status_subline; ?>
|
145 |
+
<?php } ?>
|
146 |
+
|
147 |
+
<?php if ( !$cdn_setup_done_ts ) { ?>
|
148 |
+
<?php if ( isset( $setup_summary[ 'cdn_dns_summary' ] ) ) { ?>
|
149 |
+
<h4>
|
150 |
+
<?php echo __( 'QUIC.cloud Detected Records Summary', 'litespeed-cache' ); ?>
|
151 |
+
</h4>
|
152 |
+
<table class="wp-list-table widefat striped litespeed-width-auto litespeed-table-compact">
|
153 |
+
<thead>
|
154 |
+
<tr>
|
155 |
+
<th>
|
156 |
+
<?php echo __( 'Record Type', 'litespeed-cache' ); ?>
|
157 |
+
</th>
|
158 |
+
<th>
|
159 |
+
<?php echo __( 'Count', 'litespeed-cache' ); ?>
|
160 |
+
</th>
|
161 |
+
</tr>
|
162 |
+
</thead>
|
163 |
+
<tbody>
|
164 |
+
<?php foreach ( $setup_summary[ 'cdn_dns_summary' ]['types'] as $type => $cnt ) {
|
165 |
+
echo '<tr><td>' . $type . '</td><td>' . $cnt . '</td></tr>';
|
166 |
+
} ?>
|
167 |
+
</tbody>
|
168 |
+
</table>
|
169 |
+
|
170 |
+
<p>
|
171 |
+
<?php echo __( 'Record names found', 'litespeed-cache' ) . ': ' . $setup_summary[ 'cdn_dns_summary' ]['names'] ; ?>
|
172 |
+
</p>
|
173 |
+
<p>
|
174 |
+
<?php echo __( 'Is something missing?', 'litespeed-cache' ) ; ?>
|
175 |
+
<?php Doc::learn_more( Cloud::CLOUD_SERVER_DASH . '/dns/records/' . $dom . '.',
|
176 |
+
__( 'Review DNS records', 'litespeed-cache' ) . ' <span class="dashicons dashicons-external"></span>',
|
177 |
+
false,
|
178 |
+
'litespeed-link-with-icon' ); ?>
|
179 |
+
</p>
|
180 |
+
<p>
|
181 |
+
<?php echo __('Note: For 15 to 20 minutes after setup completes, browsers may issue a "not secure" warning for your site while QUIC.cloud generates your SSL certificate.', 'litespeed-cache'); ?>
|
182 |
+
</p>
|
183 |
+
<?php } ?>
|
184 |
+
<?php } ?>
|
185 |
+
|
186 |
+
<?php if ( !$cdn_setup_done_ts ) { ?>
|
187 |
+
|
188 |
+
<div>
|
189 |
+
<?php Doc::learn_more( ( $disabled ? '#' : Utility::build_url( Router::ACTION_CDN_SETUP, $apply_btn_type ) ), $apply_btn_txt, true, 'button button-primary ' . $disabled ); ?>
|
190 |
+
</div>
|
191 |
+
|
192 |
+
<h3 class="litespeed-title-section">
|
193 |
+
<?php echo __( 'Nameservers', 'litespeed-cache' ); ?>
|
194 |
+
</h3>
|
195 |
+
|
196 |
+
<?php if ( isset( $nameservers ) ) { ?>
|
197 |
+
<p>
|
198 |
+
<?php echo __( 'Please update your domain registrar to use these custom nameservers:', 'litespeed-cache' ); ?>
|
199 |
+
</p>
|
200 |
+
<ul>
|
201 |
+
<?php
|
202 |
+
foreach ( $nameservers as $nameserver ) {
|
203 |
+
echo '<li><strong>' . $nameserver . '</strong></li>';
|
204 |
+
}
|
205 |
+
?>
|
206 |
+
</ul>
|
207 |
+
<p>
|
208 |
+
<?php echo __( 'QUIC.cloud will attempt to verify the DNS update.', 'litespeed-cache' ); ?>
|
209 |
+
<?php echo __( 'If it does not verify within 24 hours, the CDN setup will mark the verification as failed.', 'litespeed-cache' ); ?>
|
210 |
+
<?php echo __( 'At that stage, you may re-start the verification process by pressing the Run CDN Setup button.', 'litespeed-cache' ); ?>
|
211 |
+
</p>
|
212 |
+
<?php } else { ?>
|
213 |
+
<p>
|
214 |
+
<?php echo __( 'This section will automatically populate once nameservers are configured for the site.', 'litespeed-cache' ); ?>
|
215 |
+
</p>
|
216 |
+
<?php } ?>
|
217 |
+
|
218 |
+
<?php } ?>
|
219 |
+
|
220 |
+
<?php if ( $has_setup_token || $cdn_setup_done_ts ) { ?>
|
221 |
+
<?php $disabled = $cdn_setup_done_ts && ! $cloud_linked ? 'disabled' : ''; ?>
|
222 |
+
<h3 class="litespeed-title-section">
|
223 |
+
<?php echo __( 'Action', 'litespeed-cache' ); ?>
|
224 |
+
</h3>
|
225 |
+
<div>
|
226 |
+
<p><?php echo __( 'The following actions are available:', 'litespeed-cache' ); ?></p>
|
227 |
+
<p>
|
228 |
+
<strong><?php echo __('Reset CDN Setup', 'litespeed-cache') . ': '; ?></strong>
|
229 |
+
<?php echo __( 'Resets all LiteSpeed Cache plugin settings related to CDN setup back to the initial state and disables the CDN.', 'litespeed-cache' ); ?>
|
230 |
+
<?php echo __( 'QUIC.cloud DNS settings are not changed.', 'litespeed-cache' ); ?>
|
231 |
+
<?php echo __( 'This allows you to try Auto CDN setup again.', 'litespeed-cache' ); ?>
|
232 |
+
<?php if ( $cdn_setup_done_ts ) : ?>
|
233 |
+
<br/>
|
234 |
+
<span class="litespeed-desc">
|
235 |
+
<?php echo __( 'NOTE', 'litespeed-cache' ) . ': '; ?>
|
236 |
+
<?php echo __( 'This action will not update anything on the QUIC.cloud servers.', 'litespeed-cache' ); ?>
|
237 |
+
</span>
|
238 |
+
<?php endif; ?>
|
239 |
+
</p>
|
240 |
+
<p>
|
241 |
+
<strong><?php echo __('Delete QUIC.cloud data', 'litespeed-cache') . ': '; ?></strong>
|
242 |
+
<?php echo __( 'Resets all LiteSpeed Cache plugin settings related to CDN setup back to the initial state and deletes the DNS Zone, if one exists for the domain.', 'litespeed-cache' ); ?>
|
243 |
+
<?php echo __( 'This allows you to try Auto CDN setup again, or abandon the setup entirely.', 'litespeed-cache' ); ?>
|
244 |
+
<br/>
|
245 |
+
<span class="litespeed-desc">
|
246 |
+
<?php echo __( 'NOTE', 'litespeed-cache' ) . ': '; ?>
|
247 |
+
<?php echo __( 'This action is not available if there is no domain key, the domain is not linked, or the DNS Zone is in active use.', 'litespeed-cache' ); ?>
|
248 |
+
<?php echo __( 'If you have not yet done so, please replace the QUIC.cloud nameservers at your domain registrar before proceeding. ', 'litespeed-cache' ); ?>
|
249 |
+
</span>
|
250 |
+
</p>
|
251 |
+
<div>
|
252 |
+
<a href="<?php echo Utility::build_url( Router::ACTION_CDN_SETUP, Cdn_Setup::TYPE_RESET ); ?>" data-litespeed-cfm="<?php echo __( 'Are you sure you want to reset CDN Setup?', 'litespeed-cache' ); ?>" class="button litespeed-btn-warning">
|
253 |
+
<?php echo __( 'Reset CDN Setup', 'litespeed-cache' ); ?>
|
254 |
+
</a>
|
255 |
+
<a href="<?php echo ( $disabled ? '#' : Utility::build_url( Router::ACTION_CDN_SETUP, Cdn_Setup::TYPE_DELETE ) ); ?>" <?php if (empty($disabled)) : ?> data-litespeed-cfm="<?php echo __( 'Are you sure you want to delete QUIC.cloud data?', 'litespeed-cache' ); ?>"<?php endif; ?> class="button litespeed-btn-danger <?php echo $disabled; ?>" >
|
256 |
+
<?php echo __( 'Delete QUIC.cloud data', 'litespeed-cache' ); ?>
|
257 |
+
</a>
|
258 |
+
</div>
|
259 |
+
</div>
|
260 |
+
<?php } ?>
|
tpl/cdn/entry.tpl.php
CHANGED
@@ -4,6 +4,7 @@ defined( 'WPINC' ) || exit ;
|
|
4 |
|
5 |
$menu_list = array(
|
6 |
'settings' => __( 'CDN Settings', 'litespeed-cache' ),
|
|
|
7 |
'manage' => __( 'Manage', 'litespeed-cache' ),
|
8 |
) ;
|
9 |
|
4 |
|
5 |
$menu_list = array(
|
6 |
'settings' => __( 'CDN Settings', 'litespeed-cache' ),
|
7 |
+
'auto_setup' => __( 'QUIC.cloud CDN Setup', 'litespeed-cache' ),
|
8 |
'manage' => __( 'Manage', 'litespeed-cache' ),
|
9 |
) ;
|
10 |
|
tpl/crawler/blacklist.tpl.php
CHANGED
@@ -50,7 +50,12 @@ $pagination = Utility::pagination( $count, 30 );
|
|
50 |
</tbody>
|
51 |
</table>
|
52 |
<?php echo $pagination; ?>
|
53 |
-
|
|
|
|
|
|
|
|
|
|
|
54 |
<p>
|
55 |
<i class="litespeed-dot litespeed-bg-default"></i> = <?php echo __( 'Not blocklisted', 'litespeed-cache' ); ?><br>
|
56 |
<i class="litespeed-dot litespeed-bg-warning"></i> = <?php echo __( 'Blocklisted due to not cacheable', 'litespeed-cache' ); ?><br>
|
50 |
</tbody>
|
51 |
</table>
|
52 |
<?php echo $pagination; ?>
|
53 |
+
<p>
|
54 |
+
<font class="litespeed-success">API: <?php echo sprintf( __( 'PHP Constant %s available to disable blocklist.', 'litespeed-cache' ), "<code>LITESPEED_CRAWLER_DISABLE_BLOCKLIST</code>" ); ?></font>
|
55 |
+
</p>
|
56 |
+
<p>
|
57 |
+
<font class="litespeed-success">API: <?php echo sprintf( __( 'Filter %s available to disable blocklist.', 'litespeed-cache' ), "<code>add_filter( 'litespeed_crawler_disable_blocklist', '__return_true' );</code>" ); ?></font>
|
58 |
+
</p>
|
59 |
<p>
|
60 |
<i class="litespeed-dot litespeed-bg-default"></i> = <?php echo __( 'Not blocklisted', 'litespeed-cache' ); ?><br>
|
61 |
<i class="litespeed-dot litespeed-bg-warning"></i> = <?php echo __( 'Blocklisted due to not cacheable', 'litespeed-cache' ); ?><br>
|
tpl/crawler/settings-general.tpl.php
CHANGED
@@ -145,9 +145,6 @@ $this->form_action();
|
|
145 |
<?php echo __('NOTE', 'litespeed-cache'); ?>:
|
146 |
<?php echo __( 'Server allowed max value', 'litespeed-cache'); ?>: <code><?php echo $_SERVER[ Base::ENV_CRAWLER_LOAD_LIMIT ]; ?></code>
|
147 |
</font>
|
148 |
-
<?php else : ?>
|
149 |
-
<?php $this->recommended($id); ?>
|
150 |
-
|
151 |
<?php endif; ?>
|
152 |
|
153 |
<br />
|
145 |
<?php echo __('NOTE', 'litespeed-cache'); ?>:
|
146 |
<?php echo __( 'Server allowed max value', 'litespeed-cache'); ?>: <code><?php echo $_SERVER[ Base::ENV_CRAWLER_LOAD_LIMIT ]; ?></code>
|
147 |
</font>
|
|
|
|
|
|
|
148 |
<?php endif; ?>
|
149 |
|
150 |
<br />
|
tpl/crawler/summary.tpl.php
CHANGED
@@ -116,7 +116,7 @@ if($seconds > 0):
|
|
116 |
</p>
|
117 |
|
118 |
|
119 |
-
<table class="wp-list-table widefat striped">
|
120 |
<thead><tr >
|
121 |
<th scope="col">#</th>
|
122 |
<th scope="col"><?php echo __('Cron Name', 'litespeed-cache'); ?></th>
|
116 |
</p>
|
117 |
|
118 |
|
119 |
+
<table class="wp-list-table widefat striped" data-crawler-list>
|
120 |
<thead><tr >
|
121 |
<th scope="col">#</th>
|
122 |
<th scope="col"><?php echo __('Cron Name', 'litespeed-cache'); ?></th>
|
tpl/dash/dashboard.tpl.php
CHANGED
@@ -28,10 +28,12 @@ else {
|
|
28 |
$cloud_summary = Cloud::get_summary();
|
29 |
$css_summary = CSS::get_summary();
|
30 |
$placeholder_summary = Placeholder::get_summary();
|
|
|
31 |
|
32 |
$ccss_count = count( $this->load_queue( 'ccss' ) );
|
33 |
$ucss_count = count( $this->load_queue( 'ucss' ) );
|
34 |
$placeholder_queue_count = count( $this->load_queue( 'lqip' ) );
|
|
|
35 |
?>
|
36 |
|
37 |
<div class="litespeed-dashboard">
|
@@ -137,7 +139,6 @@ $placeholder_queue_count = count( $this->load_queue( 'lqip' ) );
|
|
137 |
<?php if ( ! empty( $usage[ 'sub_svc' ] ) ) : ?>
|
138 |
<p class="litespeed-dashboard-stats-total">
|
139 |
<?php $i=0;foreach ( $usage[ 'sub_svc' ] as $sub_svc => $sub_usage ) : ?>
|
140 |
-
<?php if ($sub_svc=='vpi') continue; ?>
|
141 |
<span class="<?php if ( $i++>0 ) echo 'litespeed-left10'; ?>"><?php echo strtoupper( esc_html( $sub_svc ) ); ?>: <strong><?php echo (int)$sub_usage; ?></strong></span>
|
142 |
<?php endforeach; ?>
|
143 |
</p>
|
@@ -523,6 +524,38 @@ $placeholder_queue_count = count( $this->load_queue( 'lqip' ) );
|
|
523 |
<?php endif; ?>
|
524 |
</div>
|
525 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
526 |
<div class="postbox litespeed-postbox litespeed-postbox-crawler">
|
527 |
<div class="inside">
|
528 |
<h3 class="litespeed-title">
|
28 |
$cloud_summary = Cloud::get_summary();
|
29 |
$css_summary = CSS::get_summary();
|
30 |
$placeholder_summary = Placeholder::get_summary();
|
31 |
+
$vpi_summary = VPI::get_summary();
|
32 |
|
33 |
$ccss_count = count( $this->load_queue( 'ccss' ) );
|
34 |
$ucss_count = count( $this->load_queue( 'ucss' ) );
|
35 |
$placeholder_queue_count = count( $this->load_queue( 'lqip' ) );
|
36 |
+
$vpi_queue_count = count( $this->load_queue( 'vpi' ) );
|
37 |
?>
|
38 |
|
39 |
<div class="litespeed-dashboard">
|
139 |
<?php if ( ! empty( $usage[ 'sub_svc' ] ) ) : ?>
|
140 |
<p class="litespeed-dashboard-stats-total">
|
141 |
<?php $i=0;foreach ( $usage[ 'sub_svc' ] as $sub_svc => $sub_usage ) : ?>
|
|
|
142 |
<span class="<?php if ( $i++>0 ) echo 'litespeed-left10'; ?>"><?php echo strtoupper( esc_html( $sub_svc ) ); ?>: <strong><?php echo (int)$sub_usage; ?></strong></span>
|
143 |
<?php endforeach; ?>
|
144 |
</p>
|
524 |
<?php endif; ?>
|
525 |
</div>
|
526 |
|
527 |
+
<div class="postbox litespeed-postbox litespeed-postbox-vpi">
|
528 |
+
<div class="inside">
|
529 |
+
<h3 class="litespeed-title">
|
530 |
+
<?php echo __( 'Viewport Image', 'litespeed-cache' ); ?> (VPI)
|
531 |
+
<a href="<?php echo admin_url( 'admin.php?page=litespeed-page_optm#settings_vpi' ); ?>" class="litespeed-title-right-icon"><?php echo __( 'More', 'litespeed-cache' ); ?></a>
|
532 |
+
</h3>
|
533 |
+
|
534 |
+
<?php if ( ! empty( $vpi_summary[ 'last_request' ] ) ) : ?>
|
535 |
+
<p>
|
536 |
+
<?php echo __( 'Last generated', 'litespeed-cache' ) . ': <code>' . Utility::readable_time( $vpi_summary[ 'last_request' ] ) . '</code>'; ?>
|
537 |
+
</p>
|
538 |
+
<p>
|
539 |
+
<?php echo __( 'Time to execute previous request', 'litespeed-cache' ) . ': <code>' . esc_html( $vpi_summary[ 'last_spent' ] ) . 's</code>'; ?>
|
540 |
+
</p>
|
541 |
+
<?php endif; ?>
|
542 |
+
|
543 |
+
<p>
|
544 |
+
<?php echo __( 'Requests in queue', 'litespeed-cache' ); ?>: <code><?php echo $vpi_queue_count ?: '-' ?></code>
|
545 |
+
<a href="<?php echo $vpi_queue_count ? Utility::build_url( Router::ACTION_VPI, VPI::TYPE_GEN ) : 'javascript:;'; ?>" class="button button-secondary button-small <?php if ( ! $vpi_queue_count ) echo 'disabled'; ?>">
|
546 |
+
<?php echo __( 'Force cron', 'litespeed-cache' ); ?>
|
547 |
+
</a>
|
548 |
+
</p>
|
549 |
+
|
550 |
+
</div>
|
551 |
+
|
552 |
+
<?php if ( ! empty( $cloud_summary[ 'last_request.vpi' ] ) ) : ?>
|
553 |
+
<div class="inside litespeed-postbox-footer litespeed-postbox-footer--compact">
|
554 |
+
<?php echo __( 'Last requested', 'litespeed-cache' ) . ': ' . Utility::readable_time( $cloud_summary[ 'last_request.vpi' ] ) ?>
|
555 |
+
</div>
|
556 |
+
<?php endif; ?>
|
557 |
+
</div>
|
558 |
+
|
559 |
<div class="postbox litespeed-postbox litespeed-postbox-crawler">
|
560 |
<div class="inside">
|
561 |
<h3 class="litespeed-title">
|
tpl/general/settings.tpl.php
CHANGED
@@ -5,7 +5,7 @@ defined( 'WPINC' ) || exit;
|
|
5 |
$__cloud = Cloud::cls();
|
6 |
|
7 |
// This will drop QS param `qc_res` and `domain_hash` also
|
8 |
-
$__cloud->
|
9 |
|
10 |
$cloud_summary = Cloud::get_summary();
|
11 |
|
@@ -110,7 +110,18 @@ if ( ! $can_token ) {
|
|
110 |
|
111 |
<div class="litespeed-desc">
|
112 |
<?php echo __( 'A Domain Key is required for QUIC.cloud online services.', 'litespeed-cache' ); ?>
|
113 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
114 |
<div class="litespeed-callout notice notice-success inline">
|
115 |
<h4><?php echo __( 'Current Cloud Nodes in Service','litespeed-cache' ); ?>
|
116 |
<a class="litespeed-right" href="<?php echo Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_CLEAR_CLOUD ); ?>" data-balloon-pos="up" data-balloon-break aria-label='<?php echo __( 'Click to clear all nodes for further redetection.', 'litespeed-cache' ); ?>' data-litespeed-cfm="<?php echo __( 'Are you sure you want to clear all cloud nodes?', 'litespeed-cache' ); ?>"><i class='litespeed-quic-icon'></i></a>
|
@@ -130,7 +141,6 @@ if ( ! $can_token ) {
|
|
130 |
?>
|
131 |
</p>
|
132 |
</div>
|
133 |
-
|
134 |
</div>
|
135 |
</td>
|
136 |
</tr>
|
@@ -169,7 +179,7 @@ if ( ! $can_token ) {
|
|
169 |
|
170 |
<?php if ( ! $this->conf( Base::O_GUEST ) ) : ?>
|
171 |
<br /><font class="litespeed-warning litespeed-left10">
|
172 |
-
⚠️ <?php echo __( 'Notice', 'litespeed-cache' ); ?>: <?php echo sprintf( __( '
|
173 |
</font>
|
174 |
<?php endif; ?>
|
175 |
|
5 |
$__cloud = Cloud::cls();
|
6 |
|
7 |
// This will drop QS param `qc_res` and `domain_hash` also
|
8 |
+
$__cloud->parse_qc_redir();
|
9 |
|
10 |
$cloud_summary = Cloud::get_summary();
|
11 |
|
110 |
|
111 |
<div class="litespeed-desc">
|
112 |
<?php echo __( 'A Domain Key is required for QUIC.cloud online services.', 'litespeed-cache' ); ?>
|
113 |
+
|
114 |
+
<br />
|
115 |
+
<?php if ( ! empty( $cloud_summary[ 'main_domain' ] ) ) : ?>
|
116 |
+
<?php echo __( 'Main domain', 'litespeed-cache' ); ?>: <code><?php echo $cloud_summary[ 'main_domain' ]; ?></code>
|
117 |
+
<?php else: ?>
|
118 |
+
<font class="litespeed-warning">
|
119 |
+
⚠️ <?php echo __( 'Main domain not generated yet', 'litespeed-cache' ); ?>
|
120 |
+
</font>
|
121 |
+
<?php endif; ?>
|
122 |
+
|
123 |
+
<br />
|
124 |
+
<?php Doc::notice_ips(); ?>
|
125 |
<div class="litespeed-callout notice notice-success inline">
|
126 |
<h4><?php echo __( 'Current Cloud Nodes in Service','litespeed-cache' ); ?>
|
127 |
<a class="litespeed-right" href="<?php echo Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_CLEAR_CLOUD ); ?>" data-balloon-pos="up" data-balloon-break aria-label='<?php echo __( 'Click to clear all nodes for further redetection.', 'litespeed-cache' ); ?>' data-litespeed-cfm="<?php echo __( 'Are you sure you want to clear all cloud nodes?', 'litespeed-cache' ); ?>"><i class='litespeed-quic-icon'></i></a>
|
141 |
?>
|
142 |
</p>
|
143 |
</div>
|
|
|
144 |
</div>
|
145 |
</td>
|
146 |
</tr>
|
179 |
|
180 |
<?php if ( ! $this->conf( Base::O_GUEST ) ) : ?>
|
181 |
<br /><font class="litespeed-warning litespeed-left10">
|
182 |
+
⚠️ <?php echo __( 'Notice', 'litespeed-cache' ); ?>: <?php echo sprintf( __( '%s must be turned ON for this setting to work.', 'litespeed-cache' ), '<code>' . Lang::title( Base::O_GUEST ) . '</code>' ); ?>
|
183 |
</font>
|
184 |
<?php endif; ?>
|
185 |
|
tpl/inc/metabox.php
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace LiteSpeed;
|
3 |
+
defined( 'WPINC' ) || exit;
|
4 |
+
|
5 |
+
wp_nonce_field( self::POST_NONCE_ACTION, Router::NONCE );
|
6 |
+
|
7 |
+
$post_id = get_the_ID();
|
8 |
+
|
9 |
+
foreach ( $this->_postmeta_settings as $k => $v ) {
|
10 |
+
$existing_val = get_post_meta( $post_id, $k, true );
|
11 |
+
|
12 |
+
|
13 |
+
if ( in_array( $k, array( 'litespeed_vpi_list', 'litespeed_vpi_list_mobile' ) ) ) {
|
14 |
+
if ( is_array( $existing_val ) ) $existing_val = implode( PHP_EOL, $existing_val );
|
15 |
+
echo '<div style="margin-bottom:10px;"><label for="' . $k . '">' . $v . '</label>';
|
16 |
+
echo '<textarea style="width:100%" rows="5" id="' . $k . '" name="' . $k . '">' . $existing_val . '</textarea>';
|
17 |
+
echo '</div>';
|
18 |
+
}
|
19 |
+
else {
|
20 |
+
echo '<div style="display:flex;margin-bottom:10px;align-items: center;gap: 2ch;justify-content: space-between;"><label for="' . $k . '">' . $v . '</label>';
|
21 |
+
echo '<input class="litespeed-tiny-toggle" id="' . $k . '" name="' . $k . '" type="checkbox" value="1" ' . ( $existing_val ? 'checked' : '' ) . ' />';
|
22 |
+
echo '</div>';
|
23 |
+
}
|
24 |
+
}
|
25 |
+
|
26 |
+
echo '<div style="text-align:right;">';
|
27 |
+
Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/metabox/' );
|
28 |
+
echo '</div>';
|
tpl/page_optm/entry.tpl.php
CHANGED
@@ -7,6 +7,7 @@ $menu_list = array(
|
|
7 |
'settings_js' => __( 'JS Settings', 'litespeed-cache' ),
|
8 |
'settings_html' => __( 'HTML Settings', 'litespeed-cache' ),
|
9 |
'settings_media' => __( 'Media Settings', 'litespeed-cache' ),
|
|
|
10 |
'settings_media_exc' => __( 'Media Excludes', 'litespeed-cache' ),
|
11 |
'settings_localization' => __( 'Localization', 'litespeed-cache' ),
|
12 |
'settings_tuning' => __( 'Tuning', 'litespeed-cache' ),
|
7 |
'settings_js' => __( 'JS Settings', 'litespeed-cache' ),
|
8 |
'settings_html' => __( 'HTML Settings', 'litespeed-cache' ),
|
9 |
'settings_media' => __( 'Media Settings', 'litespeed-cache' ),
|
10 |
+
'settings_vpi' => __( 'VPI', 'litespeed-cache' ),
|
11 |
'settings_media_exc' => __( 'Media Excludes', 'litespeed-cache' ),
|
12 |
'settings_localization' => __( 'Localization', 'litespeed-cache' ),
|
13 |
'settings_tuning' => __( 'Tuning', 'litespeed-cache' ),
|
tpl/page_optm/settings_css.tpl.php
CHANGED
@@ -6,6 +6,7 @@ defined( 'WPINC' ) || exit;
|
|
6 |
// exit;
|
7 |
|
8 |
$css_summary = CSS::get_summary();
|
|
|
9 |
$closest_server = Cloud::get_summary( 'server.' . Cloud::SVC_CCSS );
|
10 |
|
11 |
$ccss_queue = $this->load_queue( 'ccss' );
|
@@ -87,8 +88,8 @@ $ucss_queue = $this->load_queue( 'ucss' );
|
|
87 |
<?php endif; ?>
|
88 |
<?php endif; ?>
|
89 |
|
90 |
-
<?php if ( $
|
91 |
-
<a href="<?php echo Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_REDETECT_CLOUD, false, null, array( 'svc' => Cloud::SVC_CCSS ) ); ?>" data-balloon-pos="up" data-balloon-break aria-label='<?php echo sprintf( __( 'Current closest Cloud server is %s. Click to redetect.', 'litespeed-cache' ), $
|
92 |
<?php endif; ?>
|
93 |
|
94 |
<?php if ( ! empty( $ucss_queue ) ) : ?>
|
6 |
// exit;
|
7 |
|
8 |
$css_summary = CSS::get_summary();
|
9 |
+
$closest_server_ucss = Cloud::get_summary( 'server.' . Cloud::SVC_UCSS );
|
10 |
$closest_server = Cloud::get_summary( 'server.' . Cloud::SVC_CCSS );
|
11 |
|
12 |
$ccss_queue = $this->load_queue( 'ccss' );
|
88 |
<?php endif; ?>
|
89 |
<?php endif; ?>
|
90 |
|
91 |
+
<?php if ( $closest_server_ucss ) : ?>
|
92 |
+
<a href="<?php echo Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_REDETECT_CLOUD, false, null, array( 'svc' => Cloud::SVC_CCSS ) ); ?>" data-balloon-pos="up" data-balloon-break aria-label='<?php echo sprintf( __( 'Current closest Cloud server is %s. Click to redetect.', 'litespeed-cache' ), $closest_server_ucss ); ?>' data-litespeed-cfm="<?php echo __( 'Are you sure you want to redetect the closest cloud server for this service?', 'litespeed-cache' ) ; ?>"><i class='litespeed-quic-icon'></i></a>
|
93 |
<?php endif; ?>
|
94 |
|
95 |
<?php if ( ! empty( $ucss_queue ) ) : ?>
|
tpl/page_optm/settings_media.tpl.php
CHANGED
@@ -226,7 +226,15 @@ $lqip_queue = $this->load_queue( 'lqip' );
|
|
226 |
<div class="litespeed-desc">
|
227 |
<?php echo __( 'Set an explicit width and height on image elements to reduce layout shifts and improve CLS (a Core Web Vitals metric).', 'litespeed-cache' ); ?>
|
228 |
<?php Doc::learn_more( 'https://web.dev/optimize-cls/#images-without-dimensions' ); ?>
|
229 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
230 |
</div>
|
231 |
</td>
|
232 |
</tr>
|
226 |
<div class="litespeed-desc">
|
227 |
<?php echo __( 'Set an explicit width and height on image elements to reduce layout shifts and improve CLS (a Core Web Vitals metric).', 'litespeed-cache' ); ?>
|
228 |
<?php Doc::learn_more( 'https://web.dev/optimize-cls/#images-without-dimensions' ); ?>
|
229 |
+
|
230 |
+
<br /><font class="litespeed-warning litespeed-left10">
|
231 |
+
⚠️ <?php echo __( 'Notice', 'litespeed-cache' ); ?>: <?php echo sprintf( __( '%s must be turned ON for this setting to work.', 'litespeed-cache' ), '<code>' . Lang::title( Base::O_MEDIA_LAZY ) . '</code>' ); ?>
|
232 |
+
</font>
|
233 |
+
|
234 |
+
<br /><font class="litespeed-success">
|
235 |
+
<?php echo __( 'API', 'litespeed-cache' ); ?>:
|
236 |
+
<?php echo sprintf( __( 'Use %1$s to bypass remote image dimension check when %2$s is ON.', 'litespeed-cache' ), '<code>add_filter( "litespeed_media_ignore_remote_missing_sizes", "__return_true" );</code>', '<code>' . Lang::title( Base::O_MEDIA_ADD_MISSING_SIZES ) . '</code>' ); ?>
|
237 |
+
</font>
|
238 |
</div>
|
239 |
</td>
|
240 |
</tr>
|
tpl/page_optm/settings_vpi.tpl.php
ADDED
@@ -0,0 +1,95 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace LiteSpeed;
|
3 |
+
defined( 'WPINC' ) || exit;
|
4 |
+
|
5 |
+
$summary = VPI::get_summary();
|
6 |
+
$closest_server = Cloud::get_summary( 'server.' . Cloud::SVC_VPI );
|
7 |
+
|
8 |
+
$queue = $this->load_queue( 'vpi' );
|
9 |
+
?>
|
10 |
+
|
11 |
+
<h3 class="litespeed-title-short">
|
12 |
+
<?php echo __( 'Viewport Images', 'litespeed-cache' ); ?>
|
13 |
+
<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#vpi-settings-tab' ); ?>
|
14 |
+
</h3>
|
15 |
+
|
16 |
+
<table class="wp-list-table striped litespeed-table"><tbody>
|
17 |
+
|
18 |
+
<tr>
|
19 |
+
<th>
|
20 |
+
<?php $id = Base::O_MEDIA_VPI; ?>
|
21 |
+
<?php $this->title( $id ); ?>
|
22 |
+
</th>
|
23 |
+
<td>
|
24 |
+
<?php $this->build_switch( $id ); ?>
|
25 |
+
<div class="litespeed-desc">
|
26 |
+
<?php echo __( 'When you use Lazy Load, it will delay the loading of all images on a page.', 'litespeed-cache' ); ?>
|
27 |
+
<br /><?php echo __( 'The Viewport Images service detects which images appear above the fold, and excludes them from lazy load.', 'litespeed-cache' ); ?>
|
28 |
+
<br /><?php echo __( 'This enables the page\'s initial screenful of imagery to be fully displayed without delay.', 'litespeed-cache' ); ?>
|
29 |
+
|
30 |
+
<?php if ( ! $this->conf( Base::O_MEDIA_LAZY ) ) : ?>
|
31 |
+
<br /><font class="litespeed-warning litespeed-left10">
|
32 |
+
⚠️ <?php echo __( 'Notice', 'litespeed-cache' ); ?>: <?php echo sprintf( __( '%s must be turned ON for this setting to work.', 'litespeed-cache' ), '<code>' . Lang::title( Base::O_MEDIA_LAZY ) . '</code>' ); ?>
|
33 |
+
</font>
|
34 |
+
<?php endif; ?>
|
35 |
+
|
36 |
+
</div>
|
37 |
+
|
38 |
+
<div class="litespeed-desc litespeed-left20">
|
39 |
+
<?php if ( $summary ) : ?>
|
40 |
+
<?php if ( ! empty( $summary[ 'last_request' ] ) ) : ?>
|
41 |
+
<p>
|
42 |
+
<?php echo __( 'Last generated', 'litespeed-cache' ) . ': <code>' . Utility::readable_time( $summary[ 'last_request' ] ) . '</code>'; ?>
|
43 |
+
</p>
|
44 |
+
<?php endif; ?>
|
45 |
+
<?php endif; ?>
|
46 |
+
|
47 |
+
<?php if ( $closest_server ) : ?>
|
48 |
+
<a href="<?php echo Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_REDETECT_CLOUD, false, null, array( 'svc' => Cloud::SVC_VPI ) ); ?>" data-balloon-pos="up" data-balloon-break aria-label='<?php echo sprintf( __( 'Current closest Cloud server is %s. Click to redetect.', 'litespeed-cache' ), $closest_server ); ?>' data-litespeed-cfm="<?php echo __( 'Are you sure you want to redetect the closest cloud server for this service?', 'litespeed-cache' ) ; ?>"><i class='litespeed-quic-icon'></i></a>
|
49 |
+
<?php endif; ?>
|
50 |
+
|
51 |
+
<?php if ( ! empty( $queue ) ) : ?>
|
52 |
+
<div class="litespeed-callout notice notice-warning inline">
|
53 |
+
<h4>
|
54 |
+
<?php echo sprintf( __( 'URL list in %s queue waiting for cron', 'litespeed-cache' ), 'VPI' ); ?> ( <?php echo count( $queue ); ?> )
|
55 |
+
<a href="<?php echo Utility::build_url( Router::ACTION_VPI, VPI::TYPE_CLEAR_Q ); ?>" class="button litespeed-btn-warning litespeed-right">Clear</a>
|
56 |
+
</h4>
|
57 |
+
<p>
|
58 |
+
<?php $i=0; foreach ( $queue as $k => $v ) : ?>
|
59 |
+
<?php if ( $i++ > 20 ) : ?>
|
60 |
+
<?php echo '...'; ?>
|
61 |
+
<?php break; ?>
|
62 |
+
<?php endif; ?>
|
63 |
+
<?php if ( ! is_array( $v ) ) continue; ?>
|
64 |
+
<?php if ( ! empty( $v[ '_status' ] ) ) : ?><span class="litespeed-success"><?php endif; ?>
|
65 |
+
<?php echo esc_html( $v[ 'url' ] ); ?>
|
66 |
+
<?php if ( ! empty( $v[ '_status' ] ) ) : ?></span><?php endif; ?>
|
67 |
+
<?php if ( $pos = strpos( $k, ' ' ) ) echo ' (' . __( 'Vary Group', 'litespeed-cache' ) . ':' . substr( $k, 0, $pos ) . ')'; ?>
|
68 |
+
<?php if ( $v[ 'is_mobile' ] ) echo ' <span data-balloon-pos="up" aria-label="mobile">📱</span>'; ?>
|
69 |
+
<br />
|
70 |
+
<?php endforeach; ?>
|
71 |
+
</p>
|
72 |
+
</div>
|
73 |
+
<a href="<?php echo Utility::build_url( Router::ACTION_VPI, VPI::TYPE_GEN ); ?>" class="button litespeed-btn-success">
|
74 |
+
<?php echo sprintf( __( 'Run %s Queue Manually', 'litespeed-cache' ), 'VPI' ); ?>
|
75 |
+
</a>
|
76 |
+
<?php endif; ?>
|
77 |
+
</div>
|
78 |
+
|
79 |
+
</td>
|
80 |
+
</tr>
|
81 |
+
|
82 |
+
<tr>
|
83 |
+
<th>
|
84 |
+
<?php $id = Base::O_MEDIA_VPI_CRON; ?>
|
85 |
+
<?php $this->title( $id ); ?>
|
86 |
+
</th>
|
87 |
+
<td>
|
88 |
+
<?php $this->build_switch( $id ); ?>
|
89 |
+
<div class="litespeed-desc">
|
90 |
+
<?php echo __( 'Enable Viewport Images auto generation cron.', 'litespeed-cache' ); ?>
|
91 |
+
</div>
|
92 |
+
</td>
|
93 |
+
</tr>
|
94 |
+
|
95 |
+
</tbody></table>
|
tpl/toolbox/beta_test.tpl.php
CHANGED
@@ -4,6 +4,7 @@ defined( 'WPINC' ) || exit;
|
|
4 |
|
5 |
// Existing public version list
|
6 |
$v_list = array(
|
|
|
7 |
'4.6',
|
8 |
'4.5.0.1',
|
9 |
'4.4.7',
|
4 |
|
5 |
// Existing public version list
|
6 |
$v_list = array(
|
7 |
+
'5.0',
|
8 |
'4.6',
|
9 |
'4.5.0.1',
|
10 |
'4.4.7',
|
tpl/toolbox/settings-debug.tpl.php
CHANGED
@@ -5,6 +5,18 @@ defined( 'WPINC' ) || exit;
|
|
5 |
$this->form_action( $this->_is_network_admin ? Router::ACTION_SAVE_SETTINGS_NETWORK : false );
|
6 |
?>
|
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
9 |
<h3 class="litespeed-title-short">
|
10 |
<?php echo __('Debug Settings', 'litespeed-cache'); ?>
|
@@ -143,6 +155,20 @@ $this->form_action( $this->_is_network_admin ? Router::ACTION_SAVE_SETTINGS_NETW
|
|
143 |
</td>
|
144 |
</tr>
|
145 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
146 |
</tbody></table>
|
147 |
|
148 |
<?php
|
5 |
$this->form_action( $this->_is_network_admin ? Router::ACTION_SAVE_SETTINGS_NETWORK : false );
|
6 |
?>
|
7 |
|
8 |
+
<h3 class="litespeed-title-short">
|
9 |
+
<?php echo __('Debug Helpers', 'litespeed-cache'); ?>
|
10 |
+
</h3>
|
11 |
+
|
12 |
+
<a href="<?php echo home_url( '/' ) . '?' . Router::ACTION . '=before_optm'; ?>" class="button button-success" target="_blank">
|
13 |
+
<?php echo __( 'View Site Before Optimization', 'litespeed-cache' ); ?>
|
14 |
+
</a>
|
15 |
+
|
16 |
+
<a href="<?php echo home_url( '/' ) . '?' . Router::ACTION . '=' . Core::ACTION_QS_NOCACHE; ?>" class="button button-success" target="_blank">
|
17 |
+
<?php echo __( 'View Site Before Cache', 'litespeed-cache' ); ?>
|
18 |
+
</a>
|
19 |
+
|
20 |
|
21 |
<h3 class="litespeed-title-short">
|
22 |
<?php echo __('Debug Settings', 'litespeed-cache'); ?>
|
155 |
</td>
|
156 |
</tr>
|
157 |
|
158 |
+
<tr>
|
159 |
+
<th>
|
160 |
+
<?php $id = Base::O_DEBUG_EXC_STRINGS; ?>
|
161 |
+
<?php $this->title( $id ); ?>
|
162 |
+
</th>
|
163 |
+
<td>
|
164 |
+
<?php $this->build_textarea( $id ); ?>
|
165 |
+
<div class="litespeed-desc">
|
166 |
+
<?php echo __( 'Prevent writing log entries that include listed strings.', 'litespeed-cache' ); ?>
|
167 |
+
<?php Doc::one_per_line(); ?>
|
168 |
+
</div>
|
169 |
+
</td>
|
170 |
+
</tr>
|
171 |
+
|
172 |
</tbody></table>
|
173 |
|
174 |
<?php
|