C:\xampp\htdocs\landing\wp-content\plugins\autoptimize\classes\autoptimizeCriticalCSSSettings.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
<?php
/**
 * Critical CSS Options page.
 */

if ( ! defined'ABSPATH' ) ) {
    exit;
}

class 
autoptimizeCriticalCSSSettings {
    
/**
     * Options.
     *
     * @var bool
     */
    
private $settings_screen_do_remote_http true;

    public function 
__construct()
    {
        
$this->settings_screen_do_remote_http apply_filters'autoptimize_settingsscreen_remotehttp'$this->settings_screen_do_remote_http );
        
$this->run();
    }

    protected function 
enabled()
    {
        return 
apply_filters'autoptimize_filter_show_criticalcss_tabs'true );
    }

    public function 
run()
    {
        if ( 
$this->enabled() ) {
            
add_filter'autoptimize_filter_settingsscreen_tabs', array( $this'add_critcss_tabs' ), 10);
            
add_action'admin_enqueue_scripts', array( $this'admin_assets' ) );

            if ( 
$this->is_multisite_network_admin() && autoptimizeOptionWrapper::is_ao_active_for_network() ) {
                
add_action'network_admin_menu', array( $this'add_critcss_admin_menu' ) );
            } else {
                
add_action'admin_menu', array( $this'add_critcss_admin_menu' ) );
            }

            
$criticalcss_ajax = new autoptimizeCriticalCSSSettingsAjax();
        }
    }

    public function 
add_critcss_tabs$in )
    {
        
$in array_merge$in, array( 'ao_critcss' => '⚡ ' __'Critical CSS''autoptimize' ) ) );

        return 
$in;
    }

    public function 
add_critcss_admin_menu()
    {
        
// Register settings.
        
register_setting'ao_ccss_options_group''autoptimize_css_defer_inline' );
        
register_setting'ao_ccss_options_group''autoptimize_ccss_rules' );
        
register_setting'ao_ccss_options_group''autoptimize_ccss_additional' );
        
register_setting'ao_ccss_options_group''autoptimize_ccss_queue' );
        
register_setting'ao_ccss_options_group''autoptimize_ccss_viewport' );
        
register_setting'ao_ccss_options_group''autoptimize_ccss_finclude' );
        
register_setting'ao_ccss_options_group''autoptimize_ccss_rtimelimit' );
        
register_setting'ao_ccss_options_group''autoptimize_ccss_noptimize' );
        
register_setting'ao_ccss_options_group''autoptimize_ccss_debug' );
        
register_setting'ao_ccss_options_group''autoptimize_ccss_key' );
        
register_setting'ao_ccss_options_group''autoptimize_ccss_keyst' );
        
register_setting'ao_ccss_options_group''autoptimize_ccss_loggedin' );
        
register_setting'ao_ccss_options_group''autoptimize_ccss_forcepath' );
        
register_setting'ao_ccss_options_group''autoptimize_ccss_deferjquery' );
        
register_setting'ao_ccss_options_group''autoptimize_ccss_domain' );
        
register_setting'ao_ccss_options_group''autoptimize_ccss_unloadccss' );

        
// And add submenu-page.
        
add_submenu_pagenull'Critical CSS''Critical CSS''manage_options''ao_critcss', array( $this'ao_criticalcsssettings_page' ) );
    }

    public function 
admin_assets$hook ) {
        
// Return if plugin is not hooked.
        
if ( 'settings_page_ao_critcss' != $hook && 'admin_page_ao_critcss' != $hook ) {
            return;
        }

        
// Stylesheets to add.
        
wp_enqueue_style'wp-jquery-ui-dialog' );
        
wp_enqueue_style'ao-tablesorter'plugins_url'critcss-inc/css/ao-tablesorter/style.css'__FILE__ ) );
        
wp_enqueue_style'ao-ccss-admin-css'plugins_url'critcss-inc/css/admin_styles.css'__FILE__ ) );

        
// Scripts to add.
        
wp_enqueue_script'jquery-ui-dialog', array( 'jquery' ) );
        
wp_enqueue_script'md5'plugins_url'critcss-inc/js/md5.min.js'__FILE__ ), nullnulltrue );
        
wp_enqueue_script'tablesorter'plugins_url'critcss-inc/js/jquery.tablesorter.min.js'__FILE__ ), array( 'jquery' ), nulltrue );
        
wp_enqueue_script'ao-ccss-admin-license'plugins_url'critcss-inc/js/admin_settings.js'__FILE__ ), array( 'jquery' ), nulltrue );
    }

    public function 
ao_criticalcsssettings_page()
    {
        
// these are not OO yet, simply require for now.
        
require_once( 'critcss-inc/admin_settings_rules.php' );
        require_once( 
'critcss-inc/admin_settings_queue.php' );
        require_once( 
'critcss-inc/admin_settings_key.php' );
        require_once( 
'critcss-inc/admin_settings_adv.php' );
        require_once( 
'critcss-inc/admin_settings_explain.php' );

        
// fetch all options at once and populate them individually explicitely as globals.
        
$all_options autoptimizeCriticalCSSBase::fetch_options();
        foreach ( 
$all_options as $_option => $_value ) {
            global ${
$_option};
            ${
$_option} = $_value;
        }
        
?>
        <script>document.title = "Autoptimize: <?php _e'Critical CSS''autoptimize' ); ?> " + document.title;</script>
        <div class="wrap">
            <div id="autoptimize_main">
                <div id="ao_title_and_button">
                    <h1><?php _e'Autoptimize Settings''autoptimize' ); ?></h1>
                </div>

                <?php
                
// Print AO settings tabs.
                
echo autoptimizeConfig::ao_admin_tabs();

                
// Make sure dir to write ao_ccss exists and is writable.
                
if ( ! is_dirAO_CCSS_DIR ) ) {
                    
$mkdirresp = @mkdirAO_CCSS_DIR0775true ); // @codingStandardsIgnoreLine
                
} else {
                    
$mkdirresp true;
                }

                
// Make sure our index.html is there.
                
if ( ! is_fileAO_CCSS_DIR 'index.html' ) ) {
                    
$fileresp file_put_contentsAO_CCSS_DIR 'index.html''<html><head><meta name="robots" content="noindex, nofollow"></head><body>Generated by <a href="http://wordpress.org/extend/plugins/autoptimize/" rel="nofollow">Autoptimize</a></body></html>' );
                } else {
                    
$fileresp true;
                }

                
// Warn if we could not create those files.
                
if ( ( ! $mkdirresp ) || ( ! $fileresp ) ) {
                    
?>
                    <div class="notice-error notice"><p>
                    <?php
                    _e
'Could not create the required directory. Make sure the webserver can write to the wp-content directory.''autoptimize' );
                    
?>
                    </p></div>
                    <?php
                
}

                
// Check for "inline & defer CSS" being active in Autoptimize.
                
if ( ! empty( $ao_ccss_key ) && ! $ao_css_defer ) {
                    if ( empty( 
$ao_ccss_keyst ) ) {
                        
// no keystate so likely in activation-process of CCSS, let's enable "inline & defer CSS" immediately to make things easier!
                        
autoptimizeOptionWrapper::update_option'autoptimize_css_defer''on' );
                        
?>
                        <div class="notice-info notice"><p>
                        <?php
                        _e
"The \"Inline and Defer CSS\" option was activated to allow critical CSS to be used."'autoptimize' );
                        
?>
                        </p></div>
                        <?php
                    
} else {
                        
// we have keystate, so "inline & defer CSS" was probably disable for troubleshooting, warn but let users continue.
                        
?>
                        <div class="notice-warning notice"><p>
                        <?php
                        _e
"Oops! Please <strong>activate the \"Inline and Defer CSS\" option</strong> on Autoptimize's main settings page to ensure critical CSS is used on the front-end."'autoptimize' );
                        
?>
                        </p></div>
                        <?php
                    
}
                }

                
// check if WordPress cron is disabled and warn if so.
                
if ( ! empty( $ao_ccss_key ) && defined'DISABLE_WP_CRON' ) && DISABLE_WP_CRON && PAnD::is_admin_notice_active'i-know-about-disable-cron-forever' ) ) {
                    
?>
                    <div data-dismissible="i-know-about-disable-cron-forever" class="notice-warning notice is-dismissible"><p>
                    <?php
                    _e
'WordPress cron (for task scheduling) seems to be disabled. Have a look at <a href="https://wordpress.org/plugins/autoptimize-criticalcss/faq/" target="_blank">the FAQ</a> or the info in the Job Queue instructions if all jobs remain in "N" status and no rules are created.''autoptimize' );
                    
?>
                    </p></div>
                    <?php
                
}

                
// warn if it looks as though the queue processing job looks isn't running
                // but store result in transient as to not to have to go through 2 arrays each and every time.
                
$_warn_cron get_transient'ao_ccss_cronwarning' );
                if ( ! empty( 
$ao_ccss_key ) && false === $_warn_cron ) {
                    
$_jobs_all_new         true;
                    
$_oldest_job_timestamp microtimetrue ); // now.
                    
$_jobs_too_old         true;

                    
// go over queue array.
                    
if ( empty( $ao_ccss_queue ) ) {
                        
// no jobs, then no warning.
                        
$_jobs_all_new false;
                    } else {
                        foreach ( 
$ao_ccss_queue as $job ) {
                            if ( 
$job['jctime'] < $_oldest_job_timestamp ) {
                                
// we need to catch the oldest job's timestamp.
                                
$_oldest_job_timestamp $job['jctime'];
                            }

                            if ( 
'NEW' !== $job['jqstat'] && 'firstrun' !== $job['ljid'] ) {
                                
// we have a non-"NEW" job which is not our pending firstrun job either, break the loop.
                                
$_jobs_all_new false;
                                break;
                            }
                        }
                    }

                    
// is the oldest job too old (4h)?
                    
if ( $_oldest_job_timestamp microtimetrue ) - 60 60 ) {
                        
$_jobs_too_old false;
                    }

                    if ( 
$_jobs_all_new && ! $this->ao_ccss_has_autorules() && $_jobs_too_old ) {
                        
$_warn_cron            'on';
                        
$_transient_multiplier 1// store for 1 hour.
                    
} else {
                        
$_warn_cron            'off';
                        
$_transient_multiplier 4// store for 4 hours.
                    
}
                    
// and set transient.
                    
set_transient'ao_ccss_cronwarning'$_warn_cron$_transient_multiplier HOUR_IN_SECONDS );
                }

                if ( ! empty( 
$ao_ccss_key ) && 'on' == $_warn_cron && PAnD::is_admin_notice_active'i-know-about-cron-1' ) ) {
                    
?>
                    <div data-dismissible="i-know-about-cron-1" class="notice-warning notice is-dismissible"><p>
                    <?php
                    _e
'It looks like there might be a problem with WordPress cron (task scheduling). Have a look at <a href="https://wordpress.org/plugins/autoptimize-criticalcss/faq/" target="_blank">the FAQ</a> or the info in the Job Queue instructions if all jobs remain in "N" status and no rules are created.''autoptimize' );
                    
?>
                    </p></div>
                    <?php
                
} elseif ( ! empty( $ao_ccss_key ) && '2' == $ao_ccss_keyst && 'on' != $_warn_cron && ! $this->ao_ccss_has_autorules() ) {
                    
?>
                    <div class="notice-success notice"><p>
                    <?php
                    _e
'Great, Autoptimize will now automatically start creating new critical CSS rules, you should see those appearing below in the next couple of hours.''autoptimize' );
                    echo 
' ';
                    
_e'In the meantime you might want to <strong>edit default rule CSS now</strong>, to avoid all CSS being inlined when no (applicable) rules are found.''autoptimize' );
                    
?>
                    </p></div>
                    <?php
                
}

                
// warn if service is down.
                
if ( ! empty( $ao_ccss_key ) && ! empty( $ao_ccss_servicestatus ) && is_array$ao_ccss_servicestatus ) && 'down' === $ao_ccss_servicestatus['critcss']['status'] ) {
                    
?>
                    <div class="notice-warning notice"><p>
                    <?php
                    _e
'The critical CSS service has been reported to be down. Although no new rules will be created for now, this does not prevent existing rules from being applied.''autoptimize' );
                    
?>
                    </p></div>
                    <?php
                
}

                
// warn if too many rules (based on length of ao_ccss_rules option) as that might cause issues at e.g. wpengine
                // see https://wpengine.com/support/database-optimization-best-practices/#Autoloaded_Data
                
$_raw_rules_length strlenget_option'autoptimize_ccss_rules''') );
                if ( 
$_raw_rules_length apply_filters'autoptimize_ccss_rules_length_warning'500000 ) ) {
                    
?>
                    <div class="notice-warning notice"><p>
                    <?php
                    _e
'It looks like the amount of Critical CSS rules is very high, it is recommended to reconfigure Autoptimize (e.g. by manually creating broader rules) to ensure less rules are created.''autoptimize' );
                    
?>
                    </p></div>
                    <?php
                
}

                
// Settings Form.
                
?>
                <form id="settings" method="post" action="options.php">
                    <?php
                    settings_fields
'ao_ccss_options_group' );

                    
// Get API key status.
                    
$key autoptimizeCriticalCSSCore::ao_ccss_key_statustrue );

                    if ( 
$this->is_multisite_network_admin() ) {
                        
?>
                        <ul id="key-panel">
                            <li class="itemDetail">
                            <?php
                                
// translators: the placesholder is for a line of code in wp-config.php.
                                
echo sprintf__'<p>Critical CSS settings cannot be set at network level as critical CSS is specific to each sub-site.</p><p>You can however provide the critical CSS API key for use by all sites by adding this your wp-config.php as %s</p>''autoptimize' ), '<br/><code>define(\'AUTOPTIMIZE_CRITICALCSS_API_KEY\', \'eyJhbGmorestringsherexHa7MkOQFtDFkZgLmBLe-LpcHx4\');</code>' );
                            
?>
                            </li>
                        </ul>
                        <?php
                    
} else {
                        if ( 
'valid' == $key['status'] ) {
                            
// If key status is valid, render other panels.
                            // Render rules section.
                            
ao_ccss_render_rules();
                            
// Render queue section.
                            
ao_ccss_render_queue();
                            
// Render advanced panel.
                            
ao_ccss_render_adv();
                        } else {
                            
// But if key is other than valid, add hidden fields to persist settings when submitting form
                            // Show explanation of why and how to get a API key.
                            
ao_ccss_render_explain();

                            
// Get viewport size.
                            
$viewport autoptimizeCriticalCSSCore::ao_ccss_viewport();

                            
// Add hidden fields.
                            
echo "<input class='hidden' name='autoptimize_ccss_rules' value='" $ao_ccss_rules_raw "'>";
                            echo 
"<input class='hidden' name='autoptimize_ccss_queue' value='" $ao_ccss_queue_raw "'>";
                            echo 
'<input class="hidden" name="autoptimize_ccss_viewport[w]" value="' $viewport['w'] . '">';
                            echo 
'<input class="hidden" name="autoptimize_ccss_viewport[h]" value="' $viewport['h'] . '">';
                            echo 
'<input class="hidden" name="autoptimize_ccss_finclude" value="' $ao_ccss_finclude '">';
                            echo 
'<input class="hidden" name="autoptimize_ccss_rtimelimit" value="' $ao_ccss_rtimelimit '">';
                            echo 
'<input class="hidden" name="autoptimize_ccss_debug" value="' $ao_ccss_debug '">';
                            echo 
'<input class="hidden" name="autoptimize_ccss_noptimize" value="' $ao_ccss_noptimize '">';
                            echo 
'<input class="hidden" name="autoptimize_css_defer_inline" value="' esc_attr$ao_css_defer_inline ) . '">';
                            echo 
'<input class="hidden" name="autoptimize_ccss_loggedin" value="' $ao_ccss_loggedin '">';
                            echo 
'<input class="hidden" name="autoptimize_ccss_forcepath" value="' $ao_ccss_forcepath '">';
                        }
                        
// Render key panel unconditionally.
                        
ao_ccss_render_key$ao_ccss_key$key['status'], $key['stmsg'], $key['msg'], $key['color'] );
                        
?>
                        <p class="submit left">
                            <input type="submit" class="button-primary" value="<?php _e'Save Changes''autoptimize' ); ?>" />
                        </p>
                        <?php
                    
}
                    
?>
                </form>
                <script>
                jQuery("form#settings").submit(function(){
                    var input = jQuery("#autoptimize_ccss_domain");
                    input.val(rot(input.val(), 13));
                });
                // rot JS from http://stackoverflow.com/a/617685/987044 .
                function rot(domainstring, itype) {
                    return domainstring.toString().replace(/[a-zA-Z]/g, function (letter) {
                        return String.fromCharCode((letter <= 'Z' ? 90 : 122) >= (letter = letter.charCodeAt(0) + itype) ? letter : letter   - 26);
                    });
                }
                </script>
                <form id="importSettingsForm"<?php if ( $this->is_multisite_network_admin() ) { echo ' class="hidden"'; } ?>>
                    <span id="exportSettings" class="button-secondary"><?php _e'Export Settings''autoptimize' ); ?></span>
                    <input class="button-secondary" id="importSettings" type="button" value="<?php _e'Import Settings''autoptimize' ); ?>" onclick="upload();return false;" />
                    <input class="button-secondary" id="settingsfile" name="settingsfile" type="file" />
                </form>
                <div id="importdialog"></div>
            </div><!-- /#autoptimize_main -->
        </div><!-- /#wrap -->
        <?php
        
if ( ! $this->is_multisite_network_admin() ) {
            
// Include debug panel if debug mode is enable.
            
if ( $ao_ccss_debug ) {
            
?>
                <div id="debug">
                    <?php
                    
// Include debug panel.
                    
include( 'critcss-inc/admin_settings_debug.php' );
                    
?>
                </div><!-- /#debug -->
            <?php
            
}
            echo 
'<script>';
            include( 
'critcss-inc/admin_settings_rules.js.php' );
            include( 
'critcss-inc/admin_settings_queue.js.php' );
            include( 
'critcss-inc/admin_settings_impexp.js.php' );
            echo 
'</script>';
        }
    }

    public static function 
ao_ccss_has_autorules() {
        static 
$_has_auto_rules null;

        if ( 
null === $_has_auto_rules ) {
            global 
$ao_ccss_rules;
            
$_has_auto_rules false;
            if ( ! empty( 
$ao_ccss_rules ) ) {
                foreach ( array( 
'types''paths' ) as $_typat ) {
                    foreach ( 
$ao_ccss_rules$_typat ] as $rule ) {
                        if ( ! empty( 
$rule['hash'] ) ) {
                            
// we have at least one AUTO job, so all is fine.
                            
$_has_auto_rules true;
                            break;
                        }
                    }
                    if ( 
$_has_auto_rules ) {
                        break;
                    }
                }
            }
        }

        return 
$_has_auto_rules;
    }

    public function 
is_multisite_network_admin() {
        static 
$_multisite_network_admin null;

        if ( 
null === $_multisite_network_admin ) {
            if ( 
is_multisite() && is_network_admin() ) {
                
$_multisite_network_admin true;
            } else {
                
$_multisite_network_admin false;
            }
        }

        return 
$_multisite_network_admin;
    }
}
x

Windows NT KPTV 6.2 build 9200 (Windows Server 2012 Datacenter Edition) i586