PluginProbe
Autoptimize / 1.6.5
Autoptimize v1.6.5
2.2.2 2.3.0 2.3.1 2.3.2 2.3.3 2.3.4 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 2.7.8 All 107 releases
← All changes | autoptimize.php +128 -283 2.2.21.6.5 View file →
@@ -1,321 +1,166 @@
1 1 <?php
2 2 /*
3 3 Plugin Name: Autoptimize
4 -Plugin URI: http://autoptimize.com/
4 +Plugin URI: http://blog.futtta.be/category/autoptimize/
5 5 Description: Optimizes your website, concatenating the CSS and JavaScript code, and compressing it.
6 -Version: 2.2.2
6 +Version: 1.6.5
7 7 Author: Frank Goossens (futtta)
8 8 Author URI: http://blog.futtta.be/
9 -Domain Path: localization/
10 -Text Domain: autoptimize
11 9 Released under the GNU General Public License (GPL)
12 10 http://www.gnu.org/licenses/gpl.txt
13 11 */
14 12
15 -if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
13 +// Load config and cache class
14 +include(WP_PLUGIN_DIR.'/autoptimize/classes/autoptimizeConfig.php');
15 +include(WP_PLUGIN_DIR.'/autoptimize/classes/autoptimizeCache.php');
16 16
17 -define('AUTOPTIMIZE_PLUGIN_DIR',plugin_dir_path(__FILE__));
18 -
19 -// Load config class
20 -include(AUTOPTIMIZE_PLUGIN_DIR.'classes/autoptimizeConfig.php');
21 -
22 -// Load toolbar class
23 -include( AUTOPTIMIZE_PLUGIN_DIR.'classes/autoptimizeToolbar.php' );
24 -
25 -// Load partners tab if admin
26 -if (is_admin()) {
27 - include AUTOPTIMIZE_PLUGIN_DIR.'classlesses/autoptimizePartners.php';
28 -}
29 -
30 -// Do we gzip when caching (needed early to load autoptimizeCache.php)
31 -define('AUTOPTIMIZE_CACHE_NOGZIP',(bool) get_option('autoptimize_cache_nogzip'));
32 -
33 -// Load cache class
34 -include(AUTOPTIMIZE_PLUGIN_DIR.'classes/autoptimizeCache.php');
35 -
36 -// wp-content dir name (automagically set, should not be needed), dirname of AO cache dir and AO-prefix can be overridden in wp-config.php
37 -if (!defined('AUTOPTIMIZE_WP_CONTENT_NAME')) { define('AUTOPTIMIZE_WP_CONTENT_NAME','/'.wp_basename( WP_CONTENT_DIR )); }
38 -if (!defined('AUTOPTIMIZE_CACHE_CHILD_DIR')) { define('AUTOPTIMIZE_CACHE_CHILD_DIR','/cache/autoptimize/'); }
39 -if (!defined('AUTOPTIMIZE_CACHEFILE_PREFIX')) { define('AUTOPTIMIZE_CACHEFILE_PREFIX', 'autoptimize_'); }
40 -
41 -// Plugin dir constants (plugin url's defined later to accomodate domain mapped sites)
42 -if (is_multisite() && apply_filters( 'autoptimize_separate_blog_caches' , true )) {
43 - $blog_id = get_current_blog_id();
44 - define('AUTOPTIMIZE_CACHE_DIR', WP_CONTENT_DIR.AUTOPTIMIZE_CACHE_CHILD_DIR.$blog_id.'/' );
45 -} else {
46 - define('AUTOPTIMIZE_CACHE_DIR', WP_CONTENT_DIR.AUTOPTIMIZE_CACHE_CHILD_DIR);
47 -}
17 +// Plugin constants
18 +define('AUTOPTIMIZE_CACHE_DIR',WP_CONTENT_DIR.'/cache/autoptimize/');
19 +define('AUTOPTIMIZE_CACHE_URL',content_url().'/cache/autoptimize/');
48 20 define('AUTOPTIMIZE_CACHE_DELAY',true);
49 -define('WP_ROOT_DIR',str_replace(AUTOPTIMIZE_WP_CONTENT_NAME,'',WP_CONTENT_DIR));
21 +define('WP_ROOT_URL',str_replace('/wp-content','',content_url()));
22 +define('WP_ROOT_DIR',str_replace('/wp-content','',WP_CONTENT_DIR));
50 23
51 24 // Initialize the cache at least once
52 25 $conf = autoptimizeConfig::instance();
53 26
54 -/* Check if we're updating, in which case we might need to do stuff and flush the cache
27 +/* Check if we're updating, in which case we need to flush the cache
55 28 to avoid old versions of aggregated files lingering around */
56 29
57 -$autoptimize_version="2.2.0";
30 +$autoptimize_version="1.6.5";
58 31 $autoptimize_db_version=get_option('autoptimize_version','none');
59 32
60 33 if ($autoptimize_db_version !== $autoptimize_version) {
61 - if ($autoptimize_db_version==="none") {
62 - add_action('admin_notices', 'autoptimize_install_config_notice');
63 - } else {
64 - // updating, include the update-code
65 - include(AUTOPTIMIZE_PLUGIN_DIR.'classlesses/autoptimizeUpdateCode.php');
66 - }
34 + autoptimizeCache::clearall();
35 + update_option('autoptimize_version',$autoptimize_version);
36 + $autoptimize_db_version=$autoptimize_version;
37 +}
67 38
68 - update_option('autoptimize_version',$autoptimize_version);
69 - $autoptimize_db_version=$autoptimize_version;
70 -}
39 +// Do we gzip when caching?
40 +define('AUTOPTIMIZE_CACHE_NOGZIP',(bool) $conf->get('autoptimize_cache_nogzip'));
71 41
72 42 // Load translations
73 -function autoptimize_load_plugin_textdomain() {
74 - load_plugin_textdomain('autoptimize',false,plugin_basename(dirname( __FILE__ )).'/localization');
75 -}
76 -add_action( 'init', 'autoptimize_load_plugin_textdomain' );
43 +$plugin_dir = basename(dirname(__FILE__));
44 +load_plugin_textdomain('autoptimize','wp-content/plugins/'.$plugin_dir.'/localization',$plugin_dir.'/localization');
77 45
78 -function autoptimize_uninstall(){
79 - autoptimizeCache::clearall();
80 -
81 - $delete_options=array("autoptimize_cache_clean", "autoptimize_cache_nogzip", "autoptimize_css", "autoptimize_css_datauris", "autoptimize_css_justhead", "autoptimize_css_defer", "autoptimize_css_defer_inline", "autoptimize_css_inline", "autoptimize_css_exclude", "autoptimize_html", "autoptimize_html_keepcomments", "autoptimize_js", "autoptimize_js_exclude", "autoptimize_js_forcehead", "autoptimize_js_justhead", "autoptimize_js_trycatch", "autoptimize_version", "autoptimize_show_adv", "autoptimize_cdn_url", "autoptimize_cachesize_notice","autoptimize_css_include_inline","autoptimize_js_include_inline","autoptimize_css_nogooglefont","autoptimize_optimize_logged","autoptimize_optimize_checkout");
82 -
83 - if ( !is_multisite() ) {
84 - foreach ($delete_options as $del_opt) { delete_option( $del_opt ); }
85 - } else {
86 - global $wpdb;
87 - $blog_ids = $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs" );
88 - $original_blog_id = get_current_blog_id();
89 - foreach ( $blog_ids as $blog_id ) {
90 - switch_to_blog( $blog_id );
91 - foreach ($delete_options as $del_opt) { delete_option( $del_opt ); }
92 - }
93 - switch_to_blog( $original_blog_id );
94 - }
95 -
96 - if ( wp_get_schedule( 'ao_cachechecker' ) ) {
97 - wp_clear_scheduled_hook( 'ao_cachechecker' );
98 - }
99 -}
100 -
101 -function autoptimize_install_config_notice() {
102 - echo '<div class="updated"><p>';
103 - _e('Thank you for installing and activating Autoptimize. Please configure it under "Settings" -> "Autoptimize" to start improving your site\'s performance.', 'autoptimize' );
104 - echo '</p></div>';
105 -}
106 -
107 -function autoptimize_update_config_notice() {
108 - echo '<div class="updated"><p>';
109 - _e('Autoptimize has just been updated. Please <strong>test your site now</strong> and adapt Autoptimize config if needed.', 'autoptimize' );
110 - echo '</p></div>';
111 -}
112 -
113 -function autoptimize_cache_unavailable_notice() {
114 - echo '<div class="error"><p>';
115 - printf( __( 'Autoptimize cannot write to the cache directory (%s), please fix to enable CSS/ JS optimization!', 'autoptimize' ), AUTOPTIMIZE_CACHE_DIR );
116 - echo '</p></div>';
117 -}
118 -
119 46 // Set up the buffering
120 -function autoptimize_start_buffering() {
121 - $ao_noptimize = false;
47 +function autoptimize_start_buffering()
48 +{
49 + if (!is_feed()) {
122 50
123 - // noptimize in qs to get non-optimized page for debugging
124 - if (array_key_exists("ao_noptimize",$_GET) || array_key_exists("ao_noptirocket",$_GET)) {
125 - if ( ( ($_GET["ao_noptimize"]==="1") || ($_GET["ao_noptirocket"]==="1") ) && (apply_filters('autoptimize_filter_honor_qs_noptimize',true)) ) {
126 - $ao_noptimize = true;
127 - }
128 - }
51 + // Config element
52 + $conf = autoptimizeConfig::instance();
53 +
54 + // Load our base class
55 + include(WP_PLUGIN_DIR.'/autoptimize/classes/autoptimizeBase.php');
56 +
57 + // Load extra classes and set some vars
58 + if($conf->get('autoptimize_html'))
59 + {
60 + include(WP_PLUGIN_DIR.'/autoptimize/classes/autoptimizeHTML.php');
61 + @include(WP_PLUGIN_DIR.'/autoptimize/classes/minify-html.php');
62 + }
63 +
64 + if($conf->get('autoptimize_js'))
65 + {
66 + include(WP_PLUGIN_DIR.'/autoptimize/classes/autoptimizeScripts.php');
67 + @include(WP_PLUGIN_DIR.'/autoptimize/classes/jsmin-1.1.1.php');
68 + define('CONCATENATE_SCRIPTS',false);
69 + define('COMPRESS_SCRIPTS',false);
70 + }
71 +
72 + if($conf->get('autoptimize_css'))
73 + {
74 + include(WP_PLUGIN_DIR.'/autoptimize/classes/autoptimizeStyles.php');
75 + @include(WP_PLUGIN_DIR.'/autoptimize/classes/minify-css-compressor.php');
76 + define('COMPRESS_CSS',false);
77 + }
78 +
79 + if($conf->get('autoptimize_js_yui') || $conf->get('autoptimize_css_yui'))
80 + {
81 + include(WP_PLUGIN_DIR.'/autoptimize/classes/autoptimizeYUI.php');
82 + }
83 +
84 + if($conf->get('autoptimize_cdn_js') || $conf->get('autoptimize_cdn_css'))
85 + {
86 + include(WP_PLUGIN_DIR.'/autoptimize/classes/autoptimizeCDN.php');
87 + }
88 +
89 + // Now, start the real thing!
90 + ob_start('autoptimize_end_buffering');
129 91
130 - // check for DONOTMINIFY constant as used by e.g. WooCommerce POS
131 - if (defined('DONOTMINIFY') && (constant('DONOTMINIFY')===true || constant('DONOTMINIFY')==="true")) {
132 - $ao_noptimize = true;
133 - }
134 -
135 - // if setting says not to optimize logged in user and user is logged in
136 - if ( get_option('autoptimize_optimize_logged','on') !== 'on' && is_user_logged_in() && current_user_can('edit_posts') ) {
137 - $ao_noptimize = true;
138 92 }
93 +}
139 94
140 - // if setting says not to optimize cart/ checkout
141 - if ( get_option('autoptimize_optimize_checkout','on') !== 'on' ) {
142 - // checking for woocommerce, easy digital downloads and wp ecommerce
143 - foreach ( array("is_checkout","is_cart","edd_is_checkout","wpsc_is_cart","wpsc_is_checkout") as $shopCond ) {
144 - if ( function_exists($shopCond) && $shopCond() ) {
145 - $ao_noptimize = true;
146 - break;
147 - }
95 +//Action on end -
96 +function autoptimize_end_buffering($content)
97 +{
98 + // Config element
99 + $conf = autoptimizeConfig::instance();
100 +
101 + // Choose the classes
102 + $classes = array();
103 + if($conf->get('autoptimize_js'))
104 + $classes[] = 'autoptimizeScripts';
105 + if($conf->get('autoptimize_css'))
106 + $classes[] = 'autoptimizeStyles';
107 + if($conf->get('autoptimize_cdn_js') || $conf->get('autoptimize_cdn_css'))
108 + $classes[] = 'autoptimizeCDN';
109 + if($conf->get('autoptimize_html'))
110 + $classes[] = 'autoptimizeHTML';
111 +
112 + // Set some options
113 + $classoptions = array(
114 + 'autoptimizeScripts' => array(
115 + 'justhead' => $conf->get('autoptimize_js_justhead'),
116 + 'forcehead' => $conf->get('autoptimize_js_forcehead'),
117 + 'trycatch' => $conf->get('autoptimize_js_trycatch'),
118 + 'yui' => $conf->get('autoptimize_js_yui'),
119 + 'exclude' => $conf->get('autoptimize_js_exclude')
120 + ),
121 + 'autoptimizeStyles' => array(
122 + 'justhead' => $conf->get('autoptimize_css_justhead'),
123 + 'datauris' => $conf->get('autoptimize_css_datauris'),
124 + 'yui' => $conf->get('autoptimize_css_yui'),
125 + ),
126 + 'autoptimizeCDN' => array(
127 + 'js' => $conf->get('autoptimize_cdn_js'),
128 + 'jsurl' => $conf->get('autoptimize_cdn_js_url'),
129 + 'css' => $conf->get('autoptimize_cdn_css'),
130 + 'cssurl' => $conf->get('autoptimize_cdn_css_url'),
131 + 'img' => $conf->get('autoptimize_cdn_img'),
132 + 'imgurl' => $conf->get('autoptimize_cdn_img_url')
133 + ),
134 + 'autoptimizeHTML' => array(
135 + 'keepcomments' => $conf->get('autoptimize_html_keepcomments')
136 + )
137 + );
138 +
139 +
140 + // Run the classes
141 + foreach($classes as $name)
142 + {
143 + $instance = new $name($content);
144 + if($instance->read($classoptions[$name]))
145 + {
146 + $instance->minify();
147 + $instance->cache();
148 + $content = $instance->getcontent();
148 149 }
150 + unset($instance);
149 151 }
150 -
151 - // filter you can use to block autoptimization on your own terms
152 - $ao_noptimize = (bool) apply_filters( 'autoptimize_filter_noptimize', $ao_noptimize );
153 -
154 - if (!is_feed() && !$ao_noptimize && !is_admin() && ( !function_exists('is_customize_preview') || !is_customize_preview() ) ) {
155 - // load speedupper conditionally (true by default?)
156 - if ( apply_filters('autoptimize_filter_speedupper', true) ) {
157 - include(AUTOPTIMIZE_PLUGIN_DIR.'classlesses/autoptimizeSpeedupper.php');
158 - }
159 -
160 - // Config element
161 - $conf = autoptimizeConfig::instance();
162 -
163 - // Load our base class
164 - include(AUTOPTIMIZE_PLUGIN_DIR.'classes/autoptimizeBase.php');
165 -
166 - // Load extra classes and set some vars
167 - if($conf->get('autoptimize_html')) {
168 - include(AUTOPTIMIZE_PLUGIN_DIR.'classes/autoptimizeHTML.php');
169 - // BUG: new minify-html does not support keeping HTML comments, skipping for now
170 - // if (defined('AUTOPTIMIZE_LEGACY_MINIFIERS')) {
171 - @include(AUTOPTIMIZE_PLUGIN_DIR.'classes/external/php/minify-html.php');
172 - // } else {
173 - // @include(AUTOPTIMIZE_PLUGIN_DIR.'classes/external/php/minify-2.1.7-html.php');
174 - // }
175 - }
176 -
177 - if($conf->get('autoptimize_js')) {
178 - include(AUTOPTIMIZE_PLUGIN_DIR.'classes/autoptimizeScripts.php');
179 - if (!class_exists('JSMin')) {
180 - if (defined('AUTOPTIMIZE_LEGACY_MINIFIERS')) {
181 - @include(AUTOPTIMIZE_PLUGIN_DIR.'classes/external/php/jsmin-1.1.1.php');
182 - } else {
183 - @include(AUTOPTIMIZE_PLUGIN_DIR.'classes/external/php/minify-2.3.1-jsmin.php');
184 - }
185 - }
186 - if ( ! defined( 'CONCATENATE_SCRIPTS' )) {
187 - define('CONCATENATE_SCRIPTS',false);
188 - }
189 - if ( ! defined( 'COMPRESS_SCRIPTS' )) {
190 - define('COMPRESS_SCRIPTS',false);
191 - }
192 - }
193 -
194 - if($conf->get('autoptimize_css')) {
195 - include(AUTOPTIMIZE_PLUGIN_DIR.'classes/autoptimizeStyles.php');
196 - if (defined('AUTOPTIMIZE_LEGACY_MINIFIERS')) {
197 - if (!class_exists('Minify_CSS_Compressor')) {
198 - @include(AUTOPTIMIZE_PLUGIN_DIR.'classes/external/php/minify-css-compressor.php');
199 - }
200 - } else {
201 - if (!class_exists('CSSmin')) {
202 - @include(AUTOPTIMIZE_PLUGIN_DIR.'classes/external/php/yui-php-cssmin-2.4.8-4_fgo.php');
203 - }
204 - }
205 - if ( ! defined( 'COMPRESS_CSS' )) {
206 - define('COMPRESS_CSS',false);
207 - }
208 - }
209 -
210 - // filter to be used with care, kills all output buffers when true. use with extreme caution. you have been warned!
211 - if (apply_filters('autoptimize_filter_obkiller',false)) {
212 - while (ob_get_level() > 0) {
213 - ob_end_clean();
214 - }
215 - }
216 - // Now, start the real thing!
217 - ob_start('autoptimize_end_buffering');
218 - }
152 + return $content;
219 153 }
220 154
221 -// Action on end, this is where the magic happens
222 -function autoptimize_end_buffering($content) {
223 - if ( ((stripos($content,"<html") === false) && (stripos($content,"<!DOCTYPE html") === false)) || preg_match('/<html[^>]*(?:amp|âš¡)/',$content) === 1 || stripos($content,"<xsl:stylesheet") !== false ) { return $content; }
224 -
225 - // load URL constants as late as possible to allow domain mapper to kick in
226 - if (function_exists("domain_mapping_siteurl")) {
227 - define('AUTOPTIMIZE_WP_SITE_URL',domain_mapping_siteurl(get_current_blog_id()));
228 - define('AUTOPTIMIZE_WP_CONTENT_URL',str_replace(get_original_url(AUTOPTIMIZE_WP_SITE_URL),AUTOPTIMIZE_WP_SITE_URL,content_url()));
229 - } else {
230 - define('AUTOPTIMIZE_WP_SITE_URL',site_url());
231 - define('AUTOPTIMIZE_WP_CONTENT_URL',content_url());
232 - }
233 -
234 - if ( is_multisite() && apply_filters( 'autoptimize_separate_blog_caches' , true ) ) {
235 - $blog_id = get_current_blog_id();
236 - define('AUTOPTIMIZE_CACHE_URL',AUTOPTIMIZE_WP_CONTENT_URL.AUTOPTIMIZE_CACHE_CHILD_DIR.$blog_id.'/' );
237 - } else {
238 - define('AUTOPTIMIZE_CACHE_URL',AUTOPTIMIZE_WP_CONTENT_URL.AUTOPTIMIZE_CACHE_CHILD_DIR);
239 - }
240 - define('AUTOPTIMIZE_WP_ROOT_URL',str_replace(AUTOPTIMIZE_WP_CONTENT_NAME,'',AUTOPTIMIZE_WP_CONTENT_URL));
241 - define('AUTOPTIMIZE_HASH',wp_hash(AUTOPTIMIZE_CACHE_DIR));
242 -
243 - // Config element
244 - $conf = autoptimizeConfig::instance();
245 -
246 - // Choose the classes
247 - $classes = array();
248 - if($conf->get('autoptimize_js'))
249 - $classes[] = 'autoptimizeScripts';
250 - if($conf->get('autoptimize_css'))
251 - $classes[] = 'autoptimizeStyles';
252 - if($conf->get('autoptimize_html'))
253 - $classes[] = 'autoptimizeHTML';
254 -
255 - // Set some options
256 - $classoptions = array(
257 - 'autoptimizeScripts' => array(
258 - 'justhead' => $conf->get('autoptimize_js_justhead'),
259 - 'forcehead' => $conf->get('autoptimize_js_forcehead'),
260 - 'trycatch' => $conf->get('autoptimize_js_trycatch'),
261 - 'js_exclude' => $conf->get('autoptimize_js_exclude'),
262 - 'cdn_url' => $conf->get('autoptimize_cdn_url'),
263 - 'include_inline' => $conf->get('autoptimize_js_include_inline')
264 - ),
265 - 'autoptimizeStyles' => array(
266 - 'justhead' => $conf->get('autoptimize_css_justhead'),
267 - 'datauris' => $conf->get('autoptimize_css_datauris'),
268 - 'defer' => $conf->get('autoptimize_css_defer'),
269 - 'defer_inline' => $conf->get('autoptimize_css_defer_inline'),
270 - 'inline' => $conf->get('autoptimize_css_inline'),
271 - 'css_exclude' => $conf->get('autoptimize_css_exclude'),
272 - 'cdn_url' => $conf->get('autoptimize_cdn_url'),
273 - 'include_inline' => $conf->get('autoptimize_css_include_inline'),
274 - 'nogooglefont' => $conf->get('autoptimize_css_nogooglefont')
275 - ),
276 - 'autoptimizeHTML' => array(
277 - 'keepcomments' => $conf->get('autoptimize_html_keepcomments')
278 - )
279 - );
280 -
281 - $content = apply_filters( 'autoptimize_filter_html_before_minify', $content );
282 -
283 - // Run the classes
284 - foreach($classes as $name) {
285 - $instance = new $name($content);
286 - if($instance->read($classoptions[$name])) {
287 - $instance->minify();
288 - $instance->cache();
289 - $content = $instance->getcontent();
290 - }
291 - unset($instance);
292 - }
293 -
294 - $content = apply_filters( 'autoptimize_html_after_minify', $content );
295 - return $content;
155 +if(autoptimizeCache::cacheavail())
156 +{
157 + $conf = autoptimizeConfig::instance();
158 + if( $conf->get('autoptimize_html') || $conf->get('autoptimize_js') || $conf->get('autoptimize_css') || $conf->get('autoptimize_cdn_js') || $conf->get('autoptimize_cdn_css'))
159 + {
160 + // Hook to wordpress
161 + add_action('template_redirect','autoptimize_start_buffering',2);
162 + }
296 163 }
297 -
298 -if ( autoptimizeCache::cacheavail() ) {
299 - $conf = autoptimizeConfig::instance();
300 - if( $conf->get('autoptimize_html') || $conf->get('autoptimize_js') || $conf->get('autoptimize_css') ) {
301 - // Hook to wordpress
302 - if (defined('AUTOPTIMIZE_INIT_EARLIER')) {
303 - add_action('init','autoptimize_start_buffering',-1);
304 - } else {
305 - if (!defined('AUTOPTIMIZE_HOOK_INTO')) { define('AUTOPTIMIZE_HOOK_INTO', 'template_redirect'); }
306 - add_action(constant("AUTOPTIMIZE_HOOK_INTO"),'autoptimize_start_buffering',2);
307 - }
308 - }
309 -} else {
310 - add_action('admin_notices', 'autoptimize_cache_unavailable_notice');
311 -}
312 -
313 -function autoptimize_activate() {
314 - register_uninstall_hook( __FILE__, 'autoptimize_uninstall' );
315 -}
316 -register_activation_hook( __FILE__, 'autoptimize_activate' );
317 -
318 -include_once('classlesses/autoptimizeCacheChecker.php');
319 164
320 165 // Do not pollute other plugins
321 166 unset($conf);