Completed
Push — master ( d72b5a...db2aef )
by frank
02:16
created

autoptimizeConfig::getFutttaFeeds()   B

Complexity

Conditions 5
Paths 5

Size

Total Lines 27
Code Lines 22

Duplication

Lines 4
Ratio 14.81 %

Importance

Changes 0
Metric Value
cc 5
eloc 22
nc 5
nop 1
dl 4
loc 27
rs 8.439
c 0
b 0
f 0
1
<?php
2
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
3
4
class autoptimizeConfig {
5
    private $config = null;
6
    static private $instance = null;
7
8
    //Singleton: private construct
9
    private function __construct() {
10
        if( is_admin() ) {
11
            //Add the admin page and settings
12
            add_action('admin_menu',array($this,'addmenu'));
13
            add_action('admin_init',array($this,'registersettings'));
14
15
            //Set meta info
16
            if(function_exists('plugin_row_meta')) {
17
                //2.8+
18
                add_filter('plugin_row_meta',array($this,'setmeta'),10,2);
19
            } elseif(function_exists('post_class')) {
20
                //2.7
21
                $plugin = plugin_basename(AUTOPTIMIZE_PLUGIN_DIR.'autoptimize.php');
22
                add_filter('plugin_action_links_'.$plugin,array($this,'setmeta'));
23
            }
24
25
            //Clean cache?
26
            if(get_option('autoptimize_cache_clean')) {
27
                autoptimizeCache::clearall();
28
                update_option('autoptimize_cache_clean',0);
29
            }
30
        }
31
32
        //Add the Autoptimize Toolbar to the Admin bar 
33
        //(we loaded outside the verification of is_admin to also be displayed on the frontend toolbar)
34
        $toolbar = new autoptimizeToolbar();
0 ignored issues
show
Unused Code introduced by
$toolbar is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
35
    }
36
    
37
    static public function instance() {
38
        //Only one instance
39
        if (self::$instance == null) {
40
            self::$instance = new autoptimizeConfig();
41
        }
42
        
43
        return self::$instance;
44
        }
45
    
46
    public function show() {
47
?>
48
<style>
49
/* title and button */
50
#ao_title_and_button:after {content:''; display:block; clear:both;}
51
#ao_adv_button{float:right;}
52
#ao_hide_adv:before, #ao_show_adv:before {
53
    display: inline-block;
54
    float: left;
55
    height: 20px;
56
    width: 35px;
57
    background: none;
58
    color: #b4b9be;
59
    font: normal 20px/26px dashicons;
60
    letter-spacing: -4px;
61
    text-align: left;
62
    speak: none;
63
    -webkit-font-smoothing: antialiased;
64
    -moz-osx-font-smoothing: grayscale;
65
}
66
#ao_hide_adv:before {
67
    content: "\f108 \f142";
68
}
69
#ao_show_adv:before {
70
    content: "\f108 \f140";
71
}
72
73
/* animate "show adv" button */
74
#ao_show_adv { animation: watchmenow 3s linear 5s 10; }
75
#ao_show_adv:hover { animation: none; }
76
@keyframes watchmenow {
77
  0% { box-shadow: unset; }
78
  100% { box-shadow: 0px 0px 20px yellow; }
79
}
80
81
/* form */
82
.itemDetail {
83
    background: #fff;
84
    border: 1px solid #ccc;
85
    padding: 15px;
86
    margin: 15px 10px 10px 0;
87
}
88
.itemTitle {
89
    margin-top: 0;
90
}
91
input[type=url]:invalid {color: red; border-color:red;} .form-table th{font-weight:100;}
92
#autoptimize_main .cb_label {display: block; padding-left: 25px; text-indent: -25px;}
93
94
/* rss block */
95
#futtta_feed ul{list-style:outside;}
96
#futtta_feed {font-size:medium; margin:0px 20px;} 
97
98
/* banner + unslider */
99
.autoptimize_banner {
100
    margin: 0 38px;
101
    padding-bottom: 5px;
102
}
103
.autoptimize_banner ul li {
104
    font-size:medium;
105
    text-align:center;
106
}
107
.unslider {
108
    position:relative;
109
}
110
.unslider-arrow {
111
    display: block;
112
    left: unset;
113
    margin-top: -35px;
114
    margin-left: 7px;
115
    margin-right: 7px;
116
    border-radius: 32px;
117
    background: rgba(0, 0, 0, 0.10) no-repeat 50% 50%;
118
    color: rgba(255, 255, 255, 0.8);
119
    font: normal 20px/1 dashicons;
120
    speak: none;
121
    padding: 3px 2px 3px 4px;
122
    -webkit-font-smoothing: antialiased;
123
    -moz-osx-font-smoothing: grayscale;
124
}
125
.unslider-arrow:hover {
126
    background-color: rgba(0, 0, 0, 0.20);
127
    color: #FFF;
128
}
129
.unslider-arrow.prev {
130
    padding: 3px 4px 3px 2px;
131
}
132
.unslider-arrow.next {
133
    right: 0px;
134
}
135
.unslider-arrow.prev::before {
136
    content: "\f341";
137
}
138
.unslider-arrow.next::before {
139
    content: "\f345";
140
}
141
/* responsive stuff: hide admin-feed on smaller screens */
142
@media (min-width: 961px) {
143
    #autoptimize_main {float:left;width:69%;}
144
    #autoptimize_admin_feed{float:right;width:30%;display:block !important;}
145
    }
146
@media (max-width: 960px) {
147
    #autoptimize_main {width:100%;}
148
    #autoptimize_admin_feed {width:0%;display:none !important;}
149
}
150
@media (max-width: 782px) {
151
    #ao_hide_adv span, #ao_show_adv span {display: none;}
152
    #ao_hide_adv,#ao_show_adv {height: 34px;padding: 4px 12px 8px 8px;}
153
    #ao_hide_adv:before,#ao_show_adv:before {font-size: 25px;}
154
    #autoptimize_main input[type="checkbox"] {margin-left: 10px;}
155
    #autoptimize_main .cb_label {display: block; padding-left: 45px; text-indent: -45px;}
156
}
157
</style>
158
159
<div class="wrap">
160
161
<?php if (version_compare(PHP_VERSION, '5.3.0') < 0) { ?>
162
<div class="notice-error notice"><?php echo '<p>' . __('<strong>You are using a very old version of PHP</strong> (5.2.x or older) which will not be supported as from the upcoming Autoptimize 2.4 any more. please ask your hoster to provide you with an upgrade path to 7.x.','autoptimize') . '</p>'; ?></div>
163
<?php } ?>
164
165
<?php if (defined('AUTOPTIMIZE_LEGACY_MINIFIERS')) { ?>
166
<div class="notice-error notice"><?php echo '<p>' . __('You are forcing Autoptimize to use the "legacy minifiers" as the AUTOPTIMIZE_LEGACY_MINFIERS constant in /wp-config.php. The "legacy minifiers" will not be supported as from the upcoming Autoptimize 2.4 any more.','autoptimize') . '</p>'; ?></div>
167
<?php } ?>
168
169
<div id="autoptimize_main">
170
<div id="ao_title_and_button">
171
    <h1 id="ao_title"><?php _e('Autoptimize Settings','autoptimize'); ?>
172
    <span id="ao_adv_button">
173
    <?php 
174
    if (get_option('autoptimize_show_adv','0')=='1') {
175
        ?>
176
        <a href="javascript:void(0);" id="ao_show_adv" class="button" style="display:none;"><span><?php _e("Show advanced settings","autoptimize") ?></span></a>
177
        <a href="javascript:void(0);" id="ao_hide_adv" class="button"><span><?php _e("Hide advanced settings","autoptimize") ?></span></a>
178
        <style>tr.ao_adv{display:table-row;} li.ao_adv{display:list-item;}</style>
179
        <?php
180
        $hiddenClass="";
181
    } else {
182
        ?>
183
        <a href="javascript:void(0);" id="ao_show_adv" class="button"><span><?php _e("Show advanced settings","autoptimize") ?></span></a>
184
        <a href="javascript:void(0);" id="ao_hide_adv" class="button" style="display:none;"><span><?php _e("Hide advanced settings","autoptimize") ?></span></a>
185
        <?php
186
        $hiddenClass="hidden ";
187
    }
188
    ?>
189
    </span>
190
    </h1>
191
</div>
192
193
<?php echo $this->ao_admin_tabs(); ?>
194
195
<form method="post" action="options.php">
196
<?php settings_fields('autoptimize'); ?>
197
198
<ul>
199
200
<li class="itemDetail">
201
<h2 class="itemTitle"><?php _e('HTML Options','autoptimize'); ?></h2>
202
<table class="form-table">
203
<tr valign="top">
204
<th scope="row"><?php _e('Optimize HTML Code?','autoptimize'); ?></th>
205
<td><input type="checkbox" id="autoptimize_html" name="autoptimize_html" <?php echo get_option('autoptimize_html')?'checked="checked" ':''; ?>/></td>
206
</tr>
207
<tr class="<?php echo $hiddenClass;?>html_sub ao_adv" valign="top">
208
<th scope="row"><?php _e('Keep HTML comments?','autoptimize'); ?></th>
209
<td><label class="cb_label"><input type="checkbox" name="autoptimize_html_keepcomments" <?php echo get_option('autoptimize_html_keepcomments')?'checked="checked" ':''; ?>/>
210
<?php _e('Enable this if you want HTML comments to remain in the page.','autoptimize'); ?></label></td>
211
</tr>
212
</table>
213
</li>
214
215
<li class="itemDetail">
216
<h2 class="itemTitle"><?php _e('JavaScript Options','autoptimize'); ?></h2>
217
<table class="form-table"> 
218
<tr valign="top">
219
<th scope="row"><?php _e('Optimize JavaScript Code?','autoptimize'); ?></th>
220
<td><input type="checkbox" id="autoptimize_js" name="autoptimize_js" <?php echo get_option('autoptimize_js')?'checked="checked" ':''; ?>/></td>
221
</tr>
222
<tr valign="top" class="<?php echo $hiddenClass;?>js_sub ao_adv">
223
<th scope="row"><?php _e('Force JavaScript in &lt;head&gt;?','autoptimize'); ?></th>
224
<td><label class="cb_label"><input type="checkbox" name="autoptimize_js_forcehead" <?php echo get_option('autoptimize_js_forcehead')?'checked="checked" ':''; ?>/>
225
<?php _e('Load JavaScript early, this can potentially fix some JS-errors, but makes the JS render blocking.','autoptimize'); ?></label></td>
226
</tr>
227 View Code Duplication
<?php if (get_option('autoptimize_js_justhead')) { ?>
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
228
<tr valign="top" class="<?php echo $hiddenClass;?>js_sub ao_adv">
229
<th scope="row"><?php _e('Look for scripts only in &lt;head&gt;?','autoptimize'); echo ' <i>'. __('(deprecated)','autoptimize') . '</i>'; ?></th>
230
<td><label class="cb_label"><input type="checkbox" name="autoptimize_js_justhead" <?php echo get_option('autoptimize_js_justhead')?'checked="checked" ':''; ?>/>
231
<?php _e('Mostly useful in combination with previous option when using jQuery-based templates, but might help keeping cache size under control.','autoptimize'); ?></label></td>
232
</tr>
233
<?php } ?>
234
<tr valign="top" class="<?php echo $hiddenClass;?>js_sub ao_adv">
235
<th scope="row"><?php _e('Also aggregate inline JS?','autoptimize'); ?></th>
236
<td><label class="cb_label"><input type="checkbox" name="autoptimize_js_include_inline" <?php echo get_option('autoptimize_js_include_inline')?'checked="checked" ':''; ?>/>
237
<?php _e('Let Autoptimize also extract JS from the HTML. <strong>Warning</strong>: this can make Autoptimize\'s cache size grow quickly, so only enable this if you know what you\'re doing.','autoptimize'); ?></label></td>
238
</tr>
239
<tr valign="top" class="<?php echo $hiddenClass;?>js_sub ao_adv">
240
<th scope="row"><?php _e('Exclude scripts from Autoptimize:','autoptimize'); ?></th>
241
<td><label><input type="text" style="width:100%;" name="autoptimize_js_exclude" value="<?php echo get_option('autoptimize_js_exclude',"seal.js, js/jquery/jquery.js"); ?>"/><br />
242
<?php _e('A comma-separated list of scripts you want to exclude from being optimized, for example \'whatever.js, another.js\' (without the quotes) to exclude those scripts from being aggregated and minimized by Autoptimize.','autoptimize'); ?></label></td>
243
</tr>
244
<tr valign="top" class="<?php echo $hiddenClass;?>js_sub ao_adv">
245
<th scope="row"><?php _e('Add try-catch wrapping?','autoptimize'); ?></th>
246
<td><label class="cb_label"><input type="checkbox" name="autoptimize_js_trycatch" <?php echo get_option('autoptimize_js_trycatch')?'checked="checked" ':''; ?>/>
247
<?php _e('If your scripts break because of a JS-error, you might want to try this.','autoptimize'); ?></label></td>
248
</tr>
249
</table>
250
</li>
251
252
<li class="itemDetail">
253
<h2 class="itemTitle"><?php _e('CSS Options','autoptimize'); ?></h2>
254
<table class="form-table"> 
255
<tr valign="top">
256
<th scope="row"><?php _e('Optimize CSS Code?','autoptimize'); ?></th>
257
<td><input type="checkbox" id="autoptimize_css" name="autoptimize_css" <?php echo get_option('autoptimize_css')?'checked="checked" ':''; ?>/></td>
258
</tr>
259
<tr class="<?php echo $hiddenClass;?>css_sub ao_adv" valign="top">
260
<th scope="row"><?php _e('Generate data: URIs for images?','autoptimize'); ?></th>
261
<td><label class="cb_label"><input type="checkbox" name="autoptimize_css_datauris" <?php echo get_option('autoptimize_css_datauris')?'checked="checked" ':''; ?>/>
262
<?php _e('Enable this to include small background-images in the CSS itself instead of as separate downloads.','autoptimize'); ?></label></td>
263
</tr>
264 View Code Duplication
<?php if (get_option('autoptimize_css_justhead')) { ?>
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
265
<tr valign="top" class="<?php echo $hiddenClass;?>css_sub ao_adv">
266
<th scope="row"><?php _e('Look for styles only in &lt;head&gt;?','autoptimize'); echo ' <i>'. __('(deprecated)','autoptimize') . '</i>'; ?></th>
267
<td><label class="cb_label"><input type="checkbox" name="autoptimize_css_justhead" <?php echo get_option('autoptimize_css_justhead')?'checked="checked" ':''; ?>/>
268
<?php _e('Don\'t autoptimize CSS outside the head-section. If the cache gets big, you might want to enable this.','autoptimize'); ?></label></td>
269
</tr>
270
<?php } ?>
271
<tr valign="top" class="<?php echo $hiddenClass;?>css_sub ao_adv">
272
<th scope="row"><?php _e('Also aggregate inline CSS?','autoptimize'); ?></th>
273
<td><label class="cb_label"><input type="checkbox" name="autoptimize_css_include_inline" <?php echo get_option('autoptimize_css_include_inline','1')?'checked="checked" ':''; ?>/>
274
<?php _e('Check this option for Autoptimize to also aggregate CSS in the HTML.','autoptimize'); ?></label></td>
275
</tr>
276
<tr valign="top" class="<?php echo $hiddenClass;?>css_sub ao_adv">
277
<th scope="row"><?php _e('Inline and Defer CSS?','autoptimize'); ?></th>
278
<td><label class="cb_label"><input type="checkbox" name="autoptimize_css_defer" id="autoptimize_css_defer" <?php echo get_option('autoptimize_css_defer')?'checked="checked" ':''; ?>/>
279
<?php _e('Inline "above the fold CSS" while loading the main autoptimized CSS only after page load. <a href="http://wordpress.org/plugins/autoptimize/faq/" target="_blank">Check the FAQ</a> before activating this option!','autoptimize'); ?></label></td>
280
</tr>
281
<tr valign="top" class="<?php echo $hiddenClass;?>css_sub ao_adv" id="autoptimize_css_defer_inline">
282
<th scope="row"></th>
283
<td><label><textarea rows="10" cols="10" style="width:100%;" placeholder="<?php _e('Paste the above the fold CSS here.','autoptimize'); ?>" name="autoptimize_css_defer_inline"><?php echo get_option('autoptimize_css_defer_inline'); ?></textarea></label></td>
284
</tr>
285
<tr valign="top" class="<?php echo $hiddenClass;?>ao_adv css_sub">
286
<th scope="row"><?php _e('Inline all CSS?','autoptimize'); ?></th>
287
<td><label class="cb_label"><input type="checkbox" id="autoptimize_css_inline" name="autoptimize_css_inline" <?php echo get_option('autoptimize_css_inline')?'checked="checked" ':''; ?>/>
288
<?php _e('Inlining all CSS can improve performance for sites with a low pageviews/ visitor-rate, but may slow down performance otherwise.','autoptimize'); ?></label></td>
289
</tr>
290
<tr valign="top" class="<?php echo $hiddenClass;?>ao_adv css_sub">
291
<th scope="row"><?php _e('Exclude CSS from Autoptimize:','autoptimize'); ?></th>
292
<td><label><input type="text" style="width:100%;" name="autoptimize_css_exclude" value="<?php echo get_option('autoptimize_css_exclude','wp-content/cache/, wp-content/uploads/, admin-bar.min.css, dashicons.min.css'); ?>"/><br />
293
<?php _e('A comma-separated list of CSS you want to exclude from being optimized.','autoptimize'); ?></label></td>
294
</tr>
295
</table>
296
</li>
297
298
<li class="itemDetail">
299
<h2 class="itemTitle"><?php _e('CDN Options','autoptimize'); ?></h2>
300
<table class="form-table"> 
301
<tr valign="top">
302
<th scope="row"><?php _e('CDN Base URL','autoptimize'); ?></th>
303
<td><label><input id="cdn_url" type="text" name="autoptimize_cdn_url" pattern="^(https?:)?\/\/([\da-z\.-]+)\.([\da-z\.]{2,6})([\/\w \.-]*)*(:\d{2,5})?\/?$" style="width:100%" value="<?php echo esc_url(get_option('autoptimize_cdn_url',''),array("http","https")); ?>" /><br />
304
<?php _e('Enter your CDN root URL to enable CDN for Autoptimized files. The URL can be http, https or protocol-relative (e.g. <code>//cdn.example.com/</code>). This is not needed for Cloudflare.','autoptimize'); ?></label></td>
305
</tr>
306
</table>
307
</li>
308
309
<li class="<?php echo $hiddenClass;?>itemDetail ao_adv">
310
<h2 class="itemTitle"><?php _e('Cache Info','autoptimize'); ?></h2>
311
<table class="form-table" > 
312
<tr valign="top" class="<?php echo $hiddenClass;?>ao_adv">
313
<th scope="row"><?php _e('Cache folder','autoptimize'); ?></th>
314
<td><?php echo htmlentities(AUTOPTIMIZE_CACHE_DIR); ?></td>
315
</tr>
316
<tr valign="top" class="<?php echo $hiddenClass;?>ao_adv">
317
<th scope="row"><?php _e('Can we write?','autoptimize'); ?></th>
318
<td><?php echo (autoptimizeCache::cacheavail() ? __('Yes','autoptimize') : __('No','autoptimize')); ?></td>
319
</tr>
320
<tr valign="top" class="<?php echo $hiddenClass;?>ao_adv">
321
<th scope="row"><?php _e('Cached styles and scripts','autoptimize'); ?></th>
322
<td><?php
323
    $AOstatArr=autoptimizeCache::stats(); 
324
    $AOcacheSize=round($AOstatArr[1]/1024);
325
    printf( __( '%1$s files, totalling %2$s Kbytes (calculated at %3$s)', 'autoptimize'), $AOstatArr[0], $AOcacheSize, date("H:i e", $AOstatArr[2]) );
326
?></td>
327
</tr>
328
</table>
329
</li>
330
331
<li class="<?php echo $hiddenClass;?>itemDetail ao_adv">
332
<h2 class="itemTitle"><?php _e('Misc Options','autoptimize'); ?></h2>
333
<table class="form-table"> 
334
	<tr valign="top" class="<?php echo $hiddenClass;?>ao_adv">
335
		<th scope="row"><?php _e('Save aggregated script/css as static files?','autoptimize'); ?></th>
336
		<td><label class="cb_label"><input type="checkbox" name="autoptimize_cache_nogzip" <?php echo get_option('autoptimize_cache_nogzip','1')?'checked="checked" ':''; ?>/>
337
			<?php _e('By default files saved are static css/js, uncheck this option if your webserver doesn\'t properly handle the compression and expiry.','autoptimize'); ?></label>
338
		</td>
339
	</tr>
340
	<tr valign="top" class="<?php echo $hiddenClass;?>ao_adv">
341
		<th scope="row"><?php _e('Also optimize for logged in users?','autoptimize'); ?></th>
342
		<td><label class="cb_label"><input type="checkbox" name="autoptimize_optimize_logged" <?php echo get_option('autoptimize_optimize_logged','1')?'checked="checked" ':''; ?>/>
343
			<?php _e('By default Autoptimize is also active for logged on users, uncheck not to optimize when logged in e.g. to use a pagebuilder.','autoptimize'); ?></label>
344
		</td>
345
	</tr>
346
	<?php
347
		if ( function_exists("is_checkout") || function_exists("is_cart") || function_exists("edd_is_checkout") || function_exists("wpsc_is_cart") || function_exists("wpsc_is_checkout") ) {
348
			?>
349
				<tr valign="top" class="<?php echo $hiddenClass;?>ao_adv">
350
					<th scope="row"><?php _e('Also optimize shop cart/ checkout?','autoptimize'); ?></th>
351
					<td><label class="cb_label"><input type="checkbox" name="autoptimize_optimize_checkout" <?php echo get_option('autoptimize_optimize_checkout','1')?'checked="checked" ':''; ?>/>
352
						<?php _e('By default Autoptimize is also active on your shop\'s cart/ checkout, uncheck not to optimize those.','autoptimize'); ?></label>
353
					</td>
354
				</tr>
355
			<?php
356
		}
357
	?>
358
</table>
359
</li>
360
361
</ul>
362
363
<input type="hidden" id="autoptimize_show_adv" name="autoptimize_show_adv" value="<?php echo get_option('autoptimize_show_adv','0'); ?>">
364
365
<p class="submit">
366
<input type="submit" class="button-secondary" value="<?php _e('Save Changes','autoptimize') ?>" />
367
<input type="submit" class="button-primary" name="autoptimize_cache_clean" value="<?php _e('Save Changes and Empty Cache','autoptimize') ?>" />
368
</p>
369
370
</form>
371
</div>
372
<div id="autoptimize_admin_feed" class="hidden">
373
    <div class="autoptimize_banner hidden">
374
        <ul>
375
        <?php
376
        if (apply_filters('autoptimize_settingsscreen_remotehttp',true)) {
377
            $AO_banner=get_transient("autoptimize_banner");
378
            if (empty($AO_banner)) {
379
                $banner_resp = wp_remote_get("http://misc.optimizingmatters.com/autoptimize_news.html");
380
                if (!is_wp_error($banner_resp)) {
381
                    if (wp_remote_retrieve_response_code($banner_resp)=="200") {
382
                        $AO_banner = wp_kses_post(wp_remote_retrieve_body($banner_resp));
383
                        set_transient("autoptimize_banner",$AO_banner,DAY_IN_SECONDS);
384
                    }
385
                }
386
            }
387
            echo $AO_banner;
388
        }
389
        ?>
390
        <li><?php _e("Need help? <a href='https://wordpress.org/plugins/autoptimize/faq/'>Check out the FAQ here</a>.","autoptimize"); ?></li>
391
        <li><?php _e("Happy with Autoptimize?","autoptimize"); ?><br /><a href="<?php echo network_admin_url(); ?>plugin-install.php?tab=search&type=author&s=optimizingmatters"><?php _e("Try my other plugins!","autoptimize"); ?></a></li>
392
        </ul>
393
    </div>
394
    <div style="margin-left:10px;margin-top:-5px;">
395
        <h2>
396
            <?php _e("futtta about","autoptimize") ?>
397
            <select id="feed_dropdown" >
398
                <option value="1"><?php _e("Autoptimize","autoptimize") ?></option>
399
                <option value="2"><?php _e("WordPress","autoptimize") ?></option>
400
                <option value="3"><?php _e("Web Technology","autoptimize") ?></option>
401
            </select>
402
        </h2>
403
        <div id="futtta_feed">
404
            <div id="autoptimizefeed">
405
                <?php $this->getFutttaFeeds("http://feeds.feedburner.com/futtta_autoptimize"); ?>
406
            </div>
407
            <div id="wordpressfeed">
408
                <?php $this->getFutttaFeeds("http://feeds.feedburner.com/futtta_wordpress"); ?>
409
            </div>
410
            <div id="webtechfeed">
411
                <?php $this->getFutttaFeeds("http://feeds.feedburner.com/futtta_webtech"); ?>
412
            </div>
413
        </div>
414
    </div>
415
    <div style="float:right;margin:50px 15px;"><a href="http://blog.futtta.be/2013/10/21/do-not-donate-to-me/" target="_blank"><img width="100px" height="85px" src="<?php echo plugins_url().'/'.plugin_basename(dirname(__FILE__)).'/external/do_not_donate_smallest.png'; ?>" title="<?php _e("Do not donate for this plugin!","autoptimize"); ?>"></a></div>
416
</div>
417
418
<script type="text/javascript">
419
    var feed = new Array;
420
    feed[1]="autoptimizefeed";
421
    feed[2]="wordpressfeed";
422
    feed[3]="webtechfeed";
423
    cookiename="autoptimize_feed";
424
425
    jQuery(document).ready(function() {
426
        check_ini_state();
427
        jQuery('#autoptimize_admin_feed').fadeTo("slow",1).show();        
428
        jQuery('.autoptimize_banner').unslider({autoplay:true, delay:3500, infinite: false, arrows:{prev:'<a class="unslider-arrow prev"></a>', next:'<a class="unslider-arrow next"></a>'}}).fadeTo("slow",1).show();
429
430
        jQuery( "#feed_dropdown" ).change(function() {
431
            jQuery("#futtta_feed").fadeTo(0,0);
432
            jQuery("#futtta_feed").fadeTo("slow",1);
433
        });
434
435
        jQuery( "#ao_show_adv" ).click(function() {
436
            jQuery( "#ao_show_adv" ).hide();
437
            jQuery( "#ao_hide_adv" ).show();
438
            jQuery( ".ao_adv" ).removeClass("hidden");
439
            jQuery( ".ao_adv" ).show("slow");
440
            if (jQuery("#autoptimize_css").attr('checked')) {
441
                jQuery(".css_sub:visible").fadeTo("fast",1);
442
                if (!jQuery("#autoptimize_css_defer").attr('checked')) {
443
                    jQuery("#autoptimize_css_defer_inline").hide();
444
                }
445
            }
446
            if (jQuery("#autoptimize_js").attr('checked')) {
447
                jQuery(".js_sub:visible").fadeTo("fast",1);
448
            }
449
            check_ini_state()
450
            jQuery( "input#autoptimize_show_adv" ).val("1");
451
        });
452
453
        jQuery( "#ao_hide_adv" ).click(function() {
454
            jQuery( "#ao_hide_adv" ).hide();
455
            jQuery( "#ao_show_adv" ).show();
456
            jQuery( ".ao_adv" ).hide("slow");
457
            jQuery( ".ao_adv" ).addClass("hidden");
458
            if (!jQuery("#autoptimize_css").attr('checked')) {
459
                jQuery(".css_sub:visible").fadeTo("fast",.33);
460
            }
461
            if (!jQuery("#autoptimize_js").attr('checked')) {
462
                jQuery(".js_sub:visible").fadeTo("fast",.33);
463
            }
464
            check_ini_state()
465
            jQuery( "input#autoptimize_show_adv" ).val("0");
466
        });
467
468
        jQuery( "#autoptimize_html" ).change(function() {
469
            if (this.checked) {
470
                jQuery(".html_sub:visible").fadeTo("fast",1);
471
            } else {
472
                jQuery(".html_sub:visible").fadeTo("fast",.33);
473
            }
474
        });
475
476
        jQuery( "#autoptimize_js" ).change(function() {
477
            if (this.checked) {
478
                jQuery(".js_sub:visible").fadeTo("fast",1);
479
            } else {
480
                jQuery(".js_sub:visible").fadeTo("fast",.33);
481
            }
482
        });
483
484
        jQuery( "#autoptimize_css" ).change(function() {
485
            if (this.checked) {
486
                jQuery(".css_sub:visible").fadeTo("fast",1);
487
            } else {
488
                jQuery(".css_sub:visible").fadeTo("fast",.33);
489
            }
490
        });
491
492
        jQuery( "#autoptimize_css_inline" ).change(function() {
493
            if (this.checked) {
494
                jQuery("#autoptimize_css_defer").prop("checked",false);
495
                jQuery("#autoptimize_css_defer_inline").hide("slow");
496
            }
497
        });
498
499
        jQuery( "#autoptimize_css_defer" ).change(function() {
500
            if (this.checked) {
501
                jQuery("#autoptimize_css_inline").prop("checked",false);
502
                jQuery("#autoptimize_css_defer_inline").show("slow");
503
            } else {
504
                jQuery("#autoptimize_css_defer_inline").hide("slow");
505
            }
506
        });
507
508
        jQuery("#feed_dropdown").change(function() { show_feed(jQuery("#feed_dropdown").val()) });
509
        feedid=jQuery.cookie(cookiename);
510
        if(typeof(feedid) !== "string") feedid=1;
511
        show_feed(feedid);
512
    })
513
514
    // validate cdn_url
515
    var cdn_url=document.getElementById("cdn_url");
516
    cdn_url_baseCSS=cdn_url.style.cssText;
517
    if ("validity" in cdn_url) {
518
        jQuery("#cdn_url").focusout(function (event) {
519
        if (cdn_url.validity.valid) {
520
            cdn_url.style.cssText=cdn_url_baseCSS;
521
        } else {
522
            cdn_url.style.cssText=cdn_url_baseCSS+"border:1px solid #f00;color:#f00;box-shadow: 0 0 2px #f00;";
523
        }});
524
    }
525
526
    function check_ini_state() {
527
        if (!jQuery("#autoptimize_css_defer").attr('checked')) {
528
            jQuery("#autoptimize_css_defer_inline").hide();
529
        }
530
        if (!jQuery("#autoptimize_html").attr('checked')) {
531
            jQuery(".html_sub:visible").fadeTo('fast',.33);
532
        }
533
        if (!jQuery("#autoptimize_css").attr('checked')) {
534
            jQuery(".css_sub:visible").fadeTo('fast',.33);
535
        }
536
        if (!jQuery("#autoptimize_js").attr('checked')) {
537
            jQuery(".js_sub:visible").fadeTo('fast',.33);
538
        }
539
    }
540
541
    function show_feed(id) {
542
        jQuery('#futtta_feed').children().hide();
543
        jQuery('#'+feed[id]).show();
544
        jQuery("#feed_dropdown").val(id);
545
        jQuery.cookie(cookiename,id,{ expires: 365 });
546
    }
547
</script>
548
</div>
549
550
<?php
551
    }
552
553
    public function addmenu() {
554
        $hook=add_options_page(__('Autoptimize Options','autoptimize'),'Autoptimize','manage_options','autoptimize',array($this,'show'));
555
        add_action( 'admin_print_scripts-'.$hook,array($this,'autoptimize_admin_scripts'));
556
        add_action( 'admin_print_styles-'.$hook,array($this,'autoptimize_admin_styles'));
557
    }
558
559
    public function autoptimize_admin_scripts() {
560
        wp_enqueue_script('jqcookie', plugins_url('/external/js/jquery.cookie.min.js', __FILE__), array('jquery'),null,true);
561
        wp_enqueue_script('unslider', plugins_url('/external/js/unslider-min.js', __FILE__), array('jquery'),null,true);
562
    }
563
564
    public function autoptimize_admin_styles() {
565
        wp_enqueue_style('unslider', plugins_url('/external/js/unslider.css', __FILE__));
566
        wp_enqueue_style('unslider-dots', plugins_url('/external/js/unslider-dots.css', __FILE__));
567
    }
568
569
    public function registersettings() {
570
        register_setting('autoptimize','autoptimize_html');
571
        register_setting('autoptimize','autoptimize_html_keepcomments');
572
        register_setting('autoptimize','autoptimize_js');
573
        register_setting('autoptimize','autoptimize_js_exclude');
574
        register_setting('autoptimize','autoptimize_js_trycatch');
575
        register_setting('autoptimize','autoptimize_js_justhead');
576
        register_setting('autoptimize','autoptimize_js_forcehead');
577
        register_setting('autoptimize','autoptimize_js_include_inline');
578
        register_setting('autoptimize','autoptimize_css');
579
        register_setting('autoptimize','autoptimize_css_exclude');
580
        register_setting('autoptimize','autoptimize_css_justhead');
581
        register_setting('autoptimize','autoptimize_css_datauris');
582
        register_setting('autoptimize','autoptimize_css_defer');
583
        register_setting('autoptimize','autoptimize_css_defer_inline');
584
        register_setting('autoptimize','autoptimize_css_inline');
585
        register_setting('autoptimize','autoptimize_css_include_inline');
586
        register_setting('autoptimize','autoptimize_cdn_url');
587
        register_setting('autoptimize','autoptimize_cache_clean');
588
        register_setting('autoptimize','autoptimize_cache_nogzip');
589
        register_setting('autoptimize','autoptimize_show_adv');
590
        register_setting('autoptimize','autoptimize_optimize_logged');
591
        register_setting('autoptimize','autoptimize_optimize_checkout');
592
    }
593
594
    public function setmeta($links,$file=null) {
595
        //Inspired on http://wpengineer.com/meta-links-for-wordpress-plugins/
596
        //Do it only once - saves time
597
        static $plugin;
598
        if(empty($plugin))
599
            $plugin = plugin_basename(AUTOPTIMIZE_PLUGIN_DIR.'autoptimize.php');
600
        
601
        if($file===null) {
602
            //2.7
603
            $settings_link = sprintf('<a href="options-general.php?page=autoptimize">%s</a>', __('Settings'));
604
            array_unshift($links,$settings_link);
605
        } else {
606
            //2.8
607
            //If it's us, add the link
608
            if($file === $plugin) {
609
                $newlink = array(sprintf('<a href="options-general.php?page=autoptimize">%s</a>',__('Settings')));
610
                $links = array_merge($links,$newlink);
611
            }
612
        }
613
614
        return $links;
615
    }
616
617
    public function get($key) {        
618
        if(!is_array($this->config)) {
619
            //Default config
620
            $config = array('autoptimize_html' => 0,
621
                'autoptimize_html_keepcomments' => 0,
622
                'autoptimize_js' => 0,
623
                'autoptimize_js_exclude' => "seal.js, js/jquery/jquery.js",
624
                'autoptimize_js_trycatch' => 0,
625
                'autoptimize_js_justhead' => 0,
626
                'autoptimize_js_include_inline' => 0,
627
                'autoptimize_js_forcehead' => 0,
628
                'autoptimize_css' => 0,
629
                'autoptimize_css_exclude' => "admin-bar.min.css, dashicons.min.css, wp-content/cache/, wp-content/uploads/",
630
                'autoptimize_css_justhead' => 0,
631
                'autoptimize_css_include_inline' => 1,
632
                'autoptimize_css_defer' => 0,
633
                'autoptimize_css_defer_inline' => "",
634
                'autoptimize_css_inline' => 0,
635
                'autoptimize_css_datauris' => 0,
636
                'autoptimize_cdn_url' => "",
637
                'autoptimize_cache_nogzip' => 1,
638
                'autoptimize_show_adv' => 0,
639
                'autoptimize_optimize_logged' => 1,
640
                'autoptimize_optimize_checkout' => 1
641
                );
642
643
            //Override with user settings
644
            foreach(array_keys($config) as $name) {
645
                $conf = get_option($name);
646
                if($conf!==false) {
647
                    //It was set before!
648
                    $config[$name] = $conf;
649
                }
650
            }
651
652
            //Save for next question
653
            $this->config = apply_filters( 'autoptimize_filter_get_config', $config );
654
        }
655
656
        if(isset($this->config[$key]))
657
            return $this->config[$key];
658
659
        return false;
660
    }
661
662
    private function getFutttaFeeds($url) {
663
        if (apply_filters('autoptimize_settingsscreen_remotehttp',true)) {
664
            $rss = fetch_feed( $url );
665
            $maxitems = 0;
666
667 View Code Duplication
            if ( ! is_wp_error( $rss ) ) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
668
                $maxitems = $rss->get_item_quantity( 7 ); 
669
                $rss_items = $rss->get_items( 0, $maxitems );
670
            }
671
            ?>
672
            <ul>
673
                <?php if ( $maxitems == 0 ) : ?>
674
                    <li><?php _e( 'No items', 'autoptimize' ); ?></li>
675
                <?php else : ?>
676
                    <?php foreach ( $rss_items as $item ) : ?>
0 ignored issues
show
Bug introduced by
The variable $rss_items does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
677
                        <li>
678
                            <a href="<?php echo esc_url( $item->get_permalink() ); ?>"
679
                                title="<?php printf( __( 'Posted %s', 'autoptimize' ), $item->get_date('j F Y | g:i a') ); ?>">
680
                                <?php echo esc_html( $item->get_title() ); ?>
681
                            </a>
682
                        </li>
683
                    <?php endforeach; ?>
684
                <?php endif; ?>
685
            </ul>
686
            <?php
687
        }
688
    }
689
690
    // based on http://wordpress.stackexchange.com/a/58826
691
    static function ao_admin_tabs(){
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
692
        $tabs = apply_filters('autoptimize_filter_settingsscreen_tabs',array('autoptimize' => __('Main','autoptimize')));
693
        $tabContent="";
694
        if (count($tabs)>1) {
695
            if(isset($_GET['page'])){
696
                $currentId = $_GET['page'];
697
            } else {
698
                $currentId = "autoptimize";
699
            }
700
            $tabContent .= "<h2 class=\"nav-tab-wrapper\">";
701
            foreach($tabs as $tabId => $tabName){
702
                if($currentId == $tabId){
703
                    $class = " nav-tab-active";
704
                } else{
705
                    $class = "";
706
                }
707
                $tabContent .= '<a class="nav-tab'.$class.'" href="?page='.$tabId.'">'.$tabName.'</a>';
708
            }
709
            $tabContent .= "</h2>";
710
        } else {
711
            $tabContent = "<hr/>";
712
        }
713
714
        return $tabContent;
715
    }
716
}
717