WordPress.org

Plugin Directory

Changeset 410604


Ignore:
Timestamp:
07/16/11 10:51:24 (3 years ago)
Author:
fredericktownes
Message:
 
Location:
w3-total-cache/trunk
Files:
10 added
41 edited

Legend:

Unmodified
Added
Removed
  • w3-total-cache/trunk/inc/define.php

    r409551 r410604  
    203203 
    204204/** 
    205  * Check if WP permalink directives exists 
    206  * 
    207  * @return boolean 
    208  */ 
    209 function w3_is_permalink_rules() { 
    210     if (w3_is_apache() && !w3_is_network()) { 
    211         $path = w3_get_home_root() . '/.htaccess'; 
    212  
    213         return (($data = @file_get_contents($path)) && strstr($data, W3TC_MARKER_BEGIN_WORDPRESS) !== false); 
    214     } 
    215  
    216     return true; 
    217 } 
    218  
    219 /** 
    220205 * Check if there was database error 
    221206 * 
     
    777762 
    778763/** 
    779  * Returns nginx rules path 
    780  * 
    781  * @return string 
    782  */ 
    783 function w3_get_nginx_rules_path() { 
    784     $config = & w3_instance('/Config.php'); 
    785  
    786     $path = $config->get_string('config.path'); 
    787  
    788     if (!$path) { 
    789         $path = w3_get_document_root() . '/nginx.conf'; 
    790     } 
    791  
    792     return $path; 
    793 } 
    794  
    795 /** 
    796  * Returns path of pagecache core rules file 
    797  * 
    798  * @return string 
    799  */ 
    800 function w3_get_pgcache_rules_core_path() { 
    801     switch (true) { 
    802         case w3_is_apache(): 
    803             return w3_get_home_root() . '/.htaccess'; 
    804  
    805         case w3_is_nginx(): 
    806             return w3_get_nginx_rules_path(); 
    807     } 
    808  
    809     return false; 
    810 } 
    811  
    812 /** 
    813  * Returns path of pgcache cache rules file 
    814  * 
    815  * @return string 
    816  */ 
    817 function w3_get_pgcache_rules_cache_path() { 
    818     switch (true) { 
    819         case w3_is_apache(): 
    820             return W3TC_CACHE_FILE_PGCACHE_DIR . '/.htaccess'; 
    821  
    822         case w3_is_nginx(): 
    823             return w3_get_nginx_rules_path(); 
    824     } 
    825  
    826     return false; 
    827 } 
    828  
    829 /** 
    830  * Returns path of browsercache cache rules file 
    831  * 
    832  * @return string 
    833  */ 
    834 function w3_get_browsercache_rules_cache_path() { 
    835     switch (true) { 
    836         case w3_is_apache(): 
    837             return w3_get_home_root() . '/.htaccess'; 
    838  
    839         case w3_is_nginx(): 
    840             return w3_get_nginx_rules_path(); 
    841     } 
    842  
    843     return false; 
    844 } 
    845  
    846 /** 
    847  * Returns path of browsercache no404wp rules file 
    848  * 
    849  * @return string 
    850  */ 
    851 function w3_get_browsercache_rules_no404wp_path() { 
    852     switch (true) { 
    853         case w3_is_apache(): 
    854             return w3_get_home_root() . '/.htaccess'; 
    855  
    856         case w3_is_nginx(): 
    857             return w3_get_nginx_rules_path(); 
    858     } 
    859  
    860     return false; 
    861 } 
    862  
    863 /** 
    864  * Returns path of minify rules file 
    865  * 
    866  * @return string 
    867  */ 
    868 function w3_get_minify_rules_core_path() { 
    869     switch (true) { 
    870         case w3_is_apache(): 
    871             return W3TC_CACHE_FILE_MINIFY_DIR . '/.htaccess'; 
    872  
    873         case w3_is_nginx(): 
    874             return w3_get_nginx_rules_path(); 
    875     } 
    876  
    877     return false; 
    878 } 
    879  
    880 /** 
    881  * Returns path of minify rules file 
    882  * 
    883  * @return string 
    884  */ 
    885 function w3_get_minify_rules_cache_path() { 
    886     switch (true) { 
    887         case w3_is_apache(): 
    888             return W3TC_CACHE_FILE_MINIFY_DIR . '/.htaccess'; 
    889  
    890         case w3_is_nginx(): 
    891             return w3_get_nginx_rules_path(); 
    892     } 
    893  
    894     return false; 
    895 } 
    896  
    897 /** 
    898764 * Returns WP config file path 
    899765 * 
     
    943809 
    944810/** 
    945  * Returns path of minify rules file 
    946  * 
    947  * @return string 
    948  */ 
    949 function w3_get_cdn_rules_path() { 
    950     switch (true) { 
    951         case w3_is_apache(): 
    952             return '.htaccess'; 
    953  
    954         case w3_is_nginx(): 
    955             return 'nginx.conf'; 
    956     } 
    957  
    958     return false; 
    959 } 
    960  
    961 /** 
    962811 * Returns true if we can check rules 
    963812 * 
     
    966815function w3_can_check_rules() { 
    967816    return (w3_is_apache() || w3_is_nginx()); 
    968 } 
    969  
    970 /** 
    971  * Returns true if we can modify rules 
    972  * 
    973  * @param string $path 
    974  * @return boolean 
    975  */ 
    976 function w3_can_modify_rules($path) { 
    977     if (w3_is_network()) { 
    978         if (w3_is_apache()) { 
    979             switch ($path) { 
    980                 case w3_get_pgcache_rules_cache_path(): 
    981                 case w3_get_minify_rules_core_path(): 
    982                 case w3_get_minify_rules_cache_path(): 
    983                     return true; 
    984             } 
    985         } 
    986  
    987         return false; 
    988     } 
    989  
    990     return true; 
    991817} 
    992818 
     
    11751001 */ 
    11761002function w3_upload_info() { 
    1177     require_once W3TC_INC_DIR . '/http.php'; 
     1003    require_once W3TC_INC_DIR . '/functions/http.php'; 
    11781004    return w3_upload_info_dynamic(); 
    11791005} 
     
    12681094 
    12691095        case 'edgecast': 
    1270             $engine_name = 'edgecast'; 
     1096            $engine_name = 'media template procdn / edgecast'; 
    12711097            break; 
    12721098 
     
    13531179 
    13541180/** 
    1355  * Trim rules 
    1356  * 
    1357  * @param string $rules 
    1358  * @return string 
    1359  */ 
    1360 function w3_trim_rules($rules) { 
    1361     $rules = trim($rules); 
    1362  
    1363     if ($rules != '') { 
    1364         $rules .= "\n"; 
    1365     } 
    1366  
    1367     return $rules; 
    1368 } 
    1369  
    1370 /** 
    1371  * Cleanup rewrite rules 
    1372  * 
    1373  * @param string $rules 
    1374  * @return string 
    1375  */ 
    1376 function w3_clean_rules($rules) { 
    1377     $rules = preg_replace('~[\r\n]+~', "\n", $rules); 
    1378     $rules = preg_replace('~^\s+~m', '', $rules); 
    1379     $rules = w3_trim_rules($rules); 
    1380  
    1381     return $rules; 
    1382 } 
    1383  
    1384 /** 
    1385  * Erases text from start to end 
    1386  * 
    1387  * @param string $rules 
    1388  * @param string $start 
    1389  * @param string $end 
    1390  * @return string 
    1391  */ 
    1392 function w3_erase_rules($rules, $start, $end) { 
    1393     $rules = preg_replace('~' . w3_preg_quote($start) . "\n.*?" . w3_preg_quote($end) . "\n*~s", '', $rules); 
    1394     $rules = w3_trim_rules($rules); 
    1395  
    1396     return $rules; 
    1397 } 
    1398  
    1399 /** 
    1400  * Check if rules exist 
    1401  * 
    1402  * @param string $rules 
    1403  * @param string $start 
    1404  * @param string $end 
    1405  * @return int 
    1406  */ 
    1407 function w3_has_rules($rules, $start, $end) { 
    1408     return preg_match('~' . w3_preg_quote($start) . "\n.*?" . w3_preg_quote($end) . "\n*~s", $rules); 
    1409 } 
    1410  
    1411 /** 
    14121181 * Escapes HTML comment 
    14131182 * 
     
    14281197 * @return object 
    14291198 */ 
    1430 function &w3_instance($file) { 
     1199function &w3_instance($class) { 
    14311200    static $instances = array(); 
    14321201 
    1433     if (!isset($instances[$file])) { 
    1434         require_once W3TC_LIB_W3_DIR . $file; 
    1435         $class = 'W3_' . str_replace('/', '_', substr($file, 1, strlen($file) - 5)); 
    1436         $instances[$file] = & new $class(); 
    1437     } 
    1438  
    1439     return $instances[$file]; 
     1202    if (!isset($instances[$class])) { 
     1203        require_once W3TC_LIB_W3_DIR . '/' . 
     1204                str_replace('_', '/', substr($class, 3)) . '.php'; 
     1205        $instances[$class] = & new $class(); 
     1206    } 
     1207 
     1208    return $instances[$class]; 
    14401209} 
    14411210 
  • w3-total-cache/trunk/inc/functions/activation.php

    r409551 r410604  
    5353    $reactivate_button = sprintf('<input type="button" value="re-activate plugin" onclick="top.location.href = \'%s\'" />', addslashes($reactivate_url)); 
    5454 
    55     require_once W3TC_INC_DIR . '/file.php'; 
     55    require_once W3TC_INC_DIR . '/functions/file.php'; 
    5656 
    5757    if (w3_check_open_basedir($path)) { 
  • w3-total-cache/trunk/inc/functions/plugin.php

    r409551 r410604  
    4141 */ 
    4242function w3tc_pgcache_flush() { 
    43     $w3_pgcache = & w3_instance('/PgCache.php'); 
     43    $w3_pgcache = & w3_instance('W3_PgCacheFlush'); 
    4444    return $w3_pgcache->flush(); 
    4545} 
     
    5252 */ 
    5353function w3tc_pgcache_flush_post($post_id) { 
    54     $w3_pgcache = & w3_instance('/PgCache.php'); 
     54    $w3_pgcache = & w3_instance('W3_PgCacheFlush'); 
    5555 
    5656    return $w3_pgcache->flush_post($post_id); 
     
    7676 */ 
    7777function w3tc_minify_flush() { 
    78     $w3_minify = & w3_instance('/Minify.php'); 
     78    $w3_minify = & w3_instance('W3_Minify'); 
    7979 
    8080    return $w3_minify->flush(); 
     
    8787 */ 
    8888function w3tc_objectcache_flush() { 
    89     $w3_objectcache = & w3_instance('/ObjectCache.php'); 
     89    $w3_objectcache = & w3_instance('W3_ObjectCache'); 
    9090    return $w3_objectcache->flush(); 
    9191} 
     
    9898 */ 
    9999function w3tc_minify_script_group($location) { 
    100     $w3_plugin_minify = & w3_instance('/Plugin/MinifyEnabled.php'); 
     100    $w3_plugin_minify = & w3_instance('W3_Plugin_Minify'); 
    101101    $w3_plugin_minify->printed_scripts[] = $location; 
    102102 
     
    111111 */ 
    112112function w3tc_minify_style_group($location) { 
    113     $w3_plugin_minify = & w3_instance('/Plugin/MinifyEnabled.php'); 
     113    $w3_plugin_minify = & w3_instance('W3_Plugin_Minify'); 
    114114    $w3_plugin_minify->printed_styles[] = $location; 
    115115 
     
    125125 */ 
    126126function w3tc_minify_script_custom($files, $blocking = true) { 
    127     $w3_plugin_minify = & w3_instance('/Plugin/MinifyEnabled.php'); 
     127    $w3_plugin_minify = & w3_instance('W3_Plugin_Minify'); 
    128128    echo $w3_plugin_minify->get_script_custom($files, $blocking); 
    129129} 
     
    137137 */ 
    138138function w3tc_minify_style_custom($files, $import = false) { 
    139     $w3_plugin_minify = & w3_instance('/Plugin/MinifyEnabled.php'); 
     139    $w3_plugin_minify = & w3_instance('W3_Plugin_Minify'); 
    140140    echo $w3_plugin_minify->get_style_custom($files, $import); 
    141141} 
  • w3-total-cache/trunk/inc/lightbox/self_test.php

    r409551 r410604  
    44    die(); 
    55 
    6 require_once W3TC_INC_DIR . '/file.php'; 
     6require_once W3TC_INC_DIR . '/functions/file.php'; 
     7require_once W3TC_INC_DIR . '/functions/rule.php'; 
    78  
    89?> 
  • w3-total-cache/trunk/inc/options/cdn.php

    r409551 r410604  
    1010<?php if ($cdn_mirror): ?> 
    1111<p> 
    12     Maximize <acronym title="Content Delivery Network">CDN</acronym> usage by <input id="cdn_rename_domain" class="button" type="button" value="modify attachment URLs" /> or 
    13     <input id="cdn_import_library" class="button" type="button" value="importing attachments into the Media Library" />. 
     12    Maximize <acronym title="Content Delivery Network">CDN</acronym> usage by <input id="cdn_rename_domain" class="button {nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="modify attachment URLs" /> or 
     13    <input id="cdn_import_library" class="button {nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="importing attachments into the Media Library" />. 
    1414    <?php if (w3_can_cdn_purge($cdn_engine)): ?> 
    15     <input id="cdn_purge" class="button" type="button" value="Purge" /> objects from the CDN using this tool. 
     15    <input id="cdn_purge" class="button {nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Purge" /> objects from the CDN using this tool. 
    1616    <?php endif; ?> 
    1717</p> 
  • w3-total-cache/trunk/inc/options/general.php

    r409551 r410604  
    359359                    <select name="cdn.engine"> 
    360360                        <optgroup label="Origin Pull (mirror is best):"> 
    361                         <option value="mirror"<?php selected($this->_config->get_string('cdn.engine'), 'mirror'); ?>>Mirror</option> 
    362                         <option value="netdna"<?php selected($this->_config->get_string('cdn.engine'), 'netdna'); ?>>NetDNA / MaxCDN</option> 
    363                         <option value="cotendo"<?php selected($this->_config->get_string('cdn.engine'), 'cotendo'); ?>>Cotendo</option> 
    364                         <option value="cf2"<?php selected($this->_config->get_string('cdn.engine'), 'cf2'); ?><?php if (!W3TC_PHP5 || !$check_curl): ?> disabled="disabled"<?php endif; ?>>Amazon CloudFront</option> 
    365                         <option value="edgecast"<?php selected($this->_config->get_string('cdn.engine'), 'edgecast'); ?>>EdgeCast</option> 
    366                     </optgroup> 
    367                     <optgroup label="Origin Push:"> 
    368                         <option value="rscf"<?php selected($this->_config->get_string('cdn.engine'), 'rscf'); ?><?php if (!W3TC_PHP5 || !$check_curl): ?> disabled="disabled"<?php endif; ?>>Rackspace Cloud Files</option> 
    369                         <option value="cf"<?php selected($this->_config->get_string('cdn.engine'), 'cf'); ?><?php if (!W3TC_PHP5 || !$check_curl): ?> disabled="disabled"<?php endif; ?>>Amazon CloudFront</option> 
    370                         <option value="s3"<?php selected($this->_config->get_string('cdn.engine'), 's3'); ?><?php if (!W3TC_PHP5 || !$check_curl): ?> disabled="disabled"<?php endif; ?>>Amazon Simple Storage Service (S3)</option> 
    371                         <option value="azure"<?php selected($this->_config->get_string('cdn.engine'), 'azure'); ?><?php if (!W3TC_PHP5): ?> disabled="disabled"<?php endif; ?>>Microsoft Azure Storage</option> 
    372                         <option value="ftp"<?php selected($this->_config->get_string('cdn.engine'), 'ftp'); ?><?php if (!$check_ftp): ?> disabled="disabled"<?php endif; ?>>Self-hosted / File Transfer Protocol Upload</option> 
    373                     </optgroup> 
     361                            <option value="cf2"<?php selected($this->_config->get_string('cdn.engine'), 'cf2'); ?><?php if (!W3TC_PHP5 || !$check_curl): ?> disabled="disabled"<?php endif; ?>>Amazon CloudFront</option> 
     362                            <option value="cotendo"<?php selected($this->_config->get_string('cdn.engine'), 'cotendo'); ?>>Cotendo</option> 
     363                            <option value="mirror"<?php selected($this->_config->get_string('cdn.engine'), 'mirror'); ?>>Generic Mirror</option> 
     364                            <option value="edgecast"<?php selected($this->_config->get_string('cdn.engine'), 'edgecast'); ?>>Media Temple ProCDN / EdgeCast</option> 
     365                            <option value="netdna"<?php selected($this->_config->get_string('cdn.engine'), 'netdna'); ?>>NetDNA / MaxCDN</option> 
     366                        </optgroup> 
     367                        <optgroup label="Origin Push:"> 
     368                            <option value="cf"<?php selected($this->_config->get_string('cdn.engine'), 'cf'); ?><?php if (!W3TC_PHP5 || !$check_curl): ?> disabled="disabled"<?php endif; ?>>Amazon CloudFront</option> 
     369                            <option value="s3"<?php selected($this->_config->get_string('cdn.engine'), 's3'); ?><?php if (!W3TC_PHP5 || !$check_curl): ?> disabled="disabled"<?php endif; ?>>Amazon Simple Storage Service (S3)</option> 
     370                            <option value="azure"<?php selected($this->_config->get_string('cdn.engine'), 'azure'); ?><?php if (!W3TC_PHP5): ?> disabled="disabled"<?php endif; ?>>Microsoft Azure Storage</option> 
     371                            <option value="rscf"<?php selected($this->_config->get_string('cdn.engine'), 'rscf'); ?><?php if (!W3TC_PHP5 || !$check_curl): ?> disabled="disabled"<?php endif; ?>>Rackspace Cloud Files</option> 
     372                            <option value="ftp"<?php selected($this->_config->get_string('cdn.engine'), 'ftp'); ?><?php if (!$check_ftp): ?> disabled="disabled"<?php endif; ?>>Self-hosted / File Transfer Protocol Upload</option> 
     373                        </optgroup> 
    374374                    </select><br /> 
    375375                    <span class="description">Select the <acronym title="Content Delivery Network">CDN</acronym> type you wish to use.</span> 
     
    481481                <th colspan="2"> 
    482482                    <input type="hidden" name="file_locking" value="0"<?php if (! $can_empty_file): ?> disabled="disabled"<?php endif; ?> /> 
    483                     <label><input type="checkbox" name="file_locking" value="1"<?php checked($file_locking, true); ?><?php if (! $can_empty_file): ?> disabled="disabled"<?php endif; ?> /> Network based file system</label> 
     483                    <label><input type="checkbox" name="file_locking" value="1"<?php checked($file_locking, true); ?><?php if (! $can_empty_file): ?> disabled="disabled"<?php endif; ?> /> Enable file locking</label> 
    484484                    <br /><span class="description">Not recommended for "slow" network-based file systems.</span> 
     485                </th> 
     486            </tr> 
     487            <tr> 
     488                <th colspan="2"> 
     489                    <input type="hidden" name="file_nfs" value="0"<?php if (! $can_empty_file): ?> disabled="disabled"<?php endif; ?> /> 
     490                    <label><input type="checkbox" name="file_nfs" value="1"<?php checked($file_nfs, true); ?><?php if (! $can_empty_file): ?> disabled="disabled"<?php endif; ?> /> Optimize disk enhanced page and minify caching for NFS</label> 
     491                    <br /><span class="description">Try this option if your hosting environment uses a network based file system for a possible performance improvement.</span> 
    485492                </th> 
    486493            </tr> 
  • w3-total-cache/trunk/lib/Minify/Minify/CSS.php

    r370353 r410604  
    11<?php 
    22/** 
    3  * Class Minify_CSS   
     3 * Class Minify_CSS 
    44 * @package Minify 
    55 */ 
     
    88 * Minify CSS 
    99 * 
    10  * This class uses Minify_CSS_Compressor and Minify_CSS_UriRewriter to  
     10 * This class uses Minify_CSS_Compressor and Minify_CSS_UriRewriter to 
    1111 * minify CSS and rewrite relative URIs. 
    12  *  
     12 * 
    1313 * @package Minify 
    1414 * @author Stephen Clay <steve@mrclay.org> 
     
    1616 */ 
    1717class Minify_CSS { 
    18      
     18 
    1919    /** 
    2020     * Minify a CSS string 
    21      *  
     21     * 
    2222     * @param string $css 
    23      *  
     23     * 
    2424     * @param array $options available options: 
    25      *  
     25     * 
    2626     * 'preserveComments': (default true) multi-line comments that begin 
    2727     * with "/*!" will be preserved with newlines before and after to 
    2828     * enhance readability. 
    29      *  
     29     * 
    3030     * 'prependRelativePath': (default null) if given, this string will be 
    3131     * prepended to all relative URIs in import/url declarations 
    32      *  
     32     * 
    3333     * 'currentDir': (default null) if given, this is assumed to be the 
    3434     * directory of the current CSS file. Using this, minify will rewrite 
     
    3737     * visible by the PHP process. 
    3838     * 
    39      * 'symlinks': (default = array()) If the CSS file is stored in  
     39     * 'symlinks': (default = array()) If the CSS file is stored in 
    4040     * a symlink-ed directory, provide an array of link paths to 
    41      * target paths, where the link paths are within the document root. Because  
    42      * paths need to be normalized for this to work, use "//" to substitute  
     41     * target paths, where the link paths are within the document root. Because 
     42     * paths need to be normalized for this to work, use "//" to substitute 
    4343     * the doc root in the link paths (the array keys). E.g.: 
    4444     * <code> 
     
    4646     * array('//static' => 'D:\\staticStorage')  // Windows 
    4747     * </code> 
    48      *  
     48     * 
    4949     * @return string 
    5050     */ 
    51     public static function minify($css, $options = array())  
    52     { 
     51    public static function minify($css, $options = array()) { 
    5352        require_once W3TC_LIB_MINIFY_DIR . '/Minify/CSS/Compressor.php'; 
    54         if (isset($options['preserveComments'])  
    55             && !$options['preserveComments']) { 
    56             $css = Minify_CSS_Compressor::process($css, $options); 
    57         } else { 
     53 
     54        if (isset($options['preserveComments']) && $options['preserveComments']) { 
    5855            require_once W3TC_LIB_MINIFY_DIR . '/Minify/CommentPreserver.php'; 
     56 
    5957            $css = Minify_CommentPreserver::process( 
    60                 $css 
    61                 ,array('Minify_CSS_Compressor', 'process') 
    62                 ,array($options) 
    63             ); 
    64         } 
    65         if (! isset($options['currentDir']) && ! isset($options['prependRelativePath'])) { 
    66             return $css; 
    67         } 
    68         require_once W3TC_LIB_MINIFY_DIR . '/Minify/CSS/UriRewriter.php'; 
    69         if (isset($options['currentDir'])) { 
    70             return Minify_CSS_UriRewriter::rewrite( 
    71                 $css 
    72                 ,$options['currentDir'] 
    73                 ,isset($options['docRoot']) ? $options['docRoot'] : $_SERVER['DOCUMENT_ROOT'] 
    74                 ,isset($options['symlinks']) ? $options['symlinks'] : array() 
    75                 ,isset($options['browserCacheId']) ? $options['browserCacheId'] : 0 
    76                 ,isset($options['browserCacheExtensions']) ? $options['browserCacheExtensions'] : array() 
     58                $css, 
     59                array('Minify_CSS_Compressor', 'process'), 
     60                array($options) 
    7761            ); 
    7862        } else { 
    79             return Minify_CSS_UriRewriter::prepend( 
    80                 $css 
    81                 ,$options['prependRelativePath'] 
    82                 ,isset($options['browserCacheId']) ? $options['browserCacheId'] : 0 
    83                 ,isset($options['browserCacheExtensions']) ? $options['browserCacheExtensions'] : array() 
    84             ); 
     63            $css = Minify_CSS_Compressor::process($css, $options); 
    8564        } 
     65 
     66        require_once W3TC_LIB_MINIFY_DIR . '/Minify/CSS/UriRewriter.php'; 
     67 
     68        $css = Minify_CSS_UriRewriter::rewrite($css, $options); 
     69 
     70        return $css; 
    8671    } 
    8772} 
  • w3-total-cache/trunk/lib/Minify/Minify/CSS/UriRewriter.php

    r395284 r410604  
    2525     */ 
    2626    public static $debugText = ''; 
     27 
     28    /** 
     29     * Does CSS rewrite 
     30     * 
     31     * @static 
     32     * @param string $css 
     33     * @param array $options 
     34     * @return string 
     35     */ 
     36    public static function rewrite($css, $options) 
     37    { 
     38        if (isset($options['prependRelativePath']) || isset($options['currentDir'])) { 
     39            $browsercache_id = (isset($options['browserCacheId']) ? $options['browserCacheId'] : 0); 
     40            $browsercache_extensions = (isset($options['browserCacheExtensions']) ? $options['browserCacheExtensions'] : array()); 
     41 
     42            if ($options['prependRelativePath']) { 
     43                $css = self::_prepend( 
     44                    $css, 
     45                    $options['prependRelativePath'], 
     46                    $browsercache_id, 
     47                    $browsercache_extensions 
     48                ); 
     49            } 
     50 
     51            if (isset($options['currentDir'])) { 
     52                $document_root = (isset($options['docRoot']) ? $options['docRoot'] : $_SERVER['DOCUMENT_ROOT']); 
     53                $symlinks = (isset($options['symlinks']) ? $options['symlinks'] : array()); 
     54 
     55                $css = self::_rewrite( 
     56                    $css, 
     57                    $options['currentDir'], 
     58                    $document_root, 
     59                    $symlinks, 
     60                    $browsercache_id, 
     61                    $browsercache_extensions 
     62                ); 
     63            } 
     64        } 
     65 
     66        return $css; 
     67    } 
    2768 
    2869    /** 
     
    5293     * @return string 
    5394     */ 
    54     public static function rewrite($css, $currentDir, $docRoot = null, $symlinks = array(), $browserCacheId = 0, $browserCacheExtensions = array()) 
     95    private static function _rewrite($css, $currentDir, $docRoot = null, $symlinks = array(), $browserCacheId = 0, $browserCacheExtensions = array()) 
    5596    { 
    5697        self::$_docRoot = self::_realpath( 
     
    99140     * @return string 
    100141     */ 
    101     public static function prepend($css, $path, $browserCacheId = 0, $browserCacheExtensions = array()) 
     142    private static function _prepend($css, $path, $browserCacheId = 0, $browserCacheExtensions = array()) 
    102143    { 
    103144        self::$_prependPath = $path; 
     
    201242                } 
    202243            } else { 
    203                 $uri = self::rewriteRelative($uri, self::$_currentDir, self::$_docRoot, self::$_symlinks); 
     244                $uri = self::_rewriteRelative($uri, self::$_currentDir, self::$_docRoot, self::$_symlinks); 
    204245            } 
    205246 
     
    262303     * @return string 
    263304     */ 
    264     public static function rewriteRelative($uri, $realCurrentDir, $realDocRoot, $symlinks = array()) 
     305    private static function _rewriteRelative($uri, $realCurrentDir, $realDocRoot, $symlinks = array()) 
    265306    { 
    266307        if ('/' === $uri[0]) {                 // root-relative 
  • w3-total-cache/trunk/lib/Minify/Minify/CSSTidy.php

    r370353 r410604  
    3636        $css = $csstidy->print->plain(); 
    3737 
    38         if (isset($options['currentDir']) || isset($options['prependRelativePath'])) { 
    39             require_once W3TC_LIB_MINIFY_DIR . '/Minify/CSS/UriRewriter.php'; 
     38        require_once W3TC_LIB_MINIFY_DIR . '/Minify/CSS/UriRewriter.php'; 
    4039 
    41             $browsercache_id = (isset($options['browserCacheId']) ? $options['browserCacheId'] : 0); 
    42             $browsercache_extensions = (isset($options['browserCacheExtensions']) ? $options['browserCacheExtensions'] : array()); 
    43  
    44             if (isset($options['currentDir'])) { 
    45                 $document_root = (isset($options['docRoot']) ? $options['docRoot'] : $_SERVER['DOCUMENT_ROOT']); 
    46                 $symlinks = (isset($options['symlinks']) ? $options['symlinks'] : array()); 
    47  
    48                 return Minify_CSS_UriRewriter::rewrite($css, $options['currentDir'], $document_root, $symlinks, $browsercache_id, $browsercache_extensions); 
    49             } else { 
    50                 return Minify_CSS_UriRewriter::prepend($css, $options['prependRelativePath'], $browsercache_id, $browsercache_extensions); 
    51             } 
    52         } 
     40        $css = Minify_CSS_UriRewriter::rewrite($css, $options); 
    5341 
    5442        return $css; 
  • w3-total-cache/trunk/lib/Minify/Minify/Cache/File.php

    r409551 r410604  
    11<?php 
    22 
    3 require_once W3TC_INC_DIR . '/file.php'; 
     3require_once W3TC_INC_DIR . '/functions/file.php'; 
    44 
    55/** 
  • w3-total-cache/trunk/lib/Minify/Minify/CombineOnly.php

    r370353 r410604  
    1212     */ 
    1313    public static function minify($content, $options = array()) { 
    14         $browsercache_id = isset($options['browserCacheId']) ? $options['browserCacheId'] : 0; 
    15         $browsercache_extensions = (isset($options['browserCacheExtensions']) ? $options['browserCacheExtensions'] : array()); 
     14        require_once W3TC_LIB_MINIFY_DIR . '/Minify/CSS/UriRewriter.php'; 
    1615 
    17         if (isset($options['currentDir'])) { 
    18             require_once W3TC_LIB_MINIFY_DIR . '/Minify/CSS/UriRewriter.php'; 
    19  
    20             $document_root = isset($options['docRoot']) ? $options['docRoot'] : $_SERVER['DOCUMENT_ROOT']; 
    21             $symlinks = isset($options['symlinks']) ? $options['symlinks'] : array(); 
    22  
    23             $content = Minify_CSS_UriRewriter::rewrite($content, $options['currentDir'], $document_root, $symlinks, $browsercache_id, $browsercache_extensions); 
    24         } elseif (isset($options['prependRelativePath'])) { 
    25             require_once W3TC_LIB_MINIFY_DIR . '/Minify/CSS/UriRewriter.php'; 
    26  
    27             $content = Minify_CSS_UriRewriter::prepend($content, $options['prependRelativePath'], $browsercache_id, $browsercache_extensions); 
    28         } 
     16        $content = Minify_CSS_UriRewriter::rewrite($content, $options); 
    2917 
    3018        return $content; 
  • w3-total-cache/trunk/lib/Minify/Minify/Lines.php

    r370353 r410604  
    11<?php 
    22/** 
    3  * Class Minify_Lines   
     3 * Class Minify_Lines 
    44 * @package Minify 
    55 */ 
     
    1818     * 
    1919     * This uses a very basic parser easily fooled by comment tokens inside 
    20      * strings or regexes, but, otherwise, generally clean code will not be  
     20     * strings or regexes, but, otherwise, generally clean code will not be 
    2121     * mangled. URI rewriting can also be performed. 
    2222     * 
    2323     * @param string $content 
    24      *  
     24     * 
    2525     * @param array $options available options: 
    26      *  
     26     * 
    2727     * 'id': (optional) string to identify file. E.g. file name/path 
    2828     * 
     
    3232     * the desired files, and prepend a comment with debugging information about 
    3333     * this process. 
    34      *  
    35      * @return string  
     34     * 
     35     * @return string 
    3636     */ 
    37     public static function minify($content, $options = array())  
     37    public static function minify($content, $options = array()) 
    3838    { 
    3939        $id = (isset($options['id']) && $options['id']) 
     
    5757        } 
    5858        $content = implode("\n", $newLines) . "\n"; 
    59          
     59 
    6060        // check for desired URI rewriting 
    61         if (isset($options['currentDir'])) { 
    62             require_once W3TC_LIB_MINIFY_DIR . '/Minify/CSS/UriRewriter.php'; 
    63             Minify_CSS_UriRewriter::$debugText = ''; 
    64             $content = Minify_CSS_UriRewriter::rewrite( 
    65                  $content 
    66                 ,$options['currentDir'] 
    67                 ,isset($options['docRoot']) ? $options['docRoot'] : $_SERVER['DOCUMENT_ROOT'] 
    68                 ,isset($options['symlinks']) ? $options['symlinks'] : array() 
    69                 ,isset($options['browserCacheId']) ? $options['browserCacheId'] : 0 
    70                 ,isset($options['browserCacheExtensions']) ? $options['browserCacheExtensions'] : array() 
    71             ); 
    72             $content = "/* Minify_CSS_UriRewriter::\$debugText\n\n"  
    73                  . Minify_CSS_UriRewriter::$debugText . "*/\n" 
    74                  . $content; 
    75         } elseif (isset($options['prependRelativePath'])) { 
    76             require_once W3TC_LIB_MINIFY_DIR . '/Minify/CSS/UriRewriter.php'; 
    77             Minify_CSS_UriRewriter::$debugText = ''; 
    78             $content = Minify_CSS_UriRewriter::prepend( 
    79                 $content 
    80                 ,$options['prependRelativePath'] 
    81                 ,isset($options['browserCacheId']) ? $options['browserCacheId'] : 0 
    82                 ,isset($options['browserCacheExtensions']) ? $options['browserCacheExtensions'] : array() 
    83             ); 
    84         } 
    85          
     61        require_once W3TC_LIB_MINIFY_DIR . '/Minify/CSS/UriRewriter.php'; 
     62 
     63        $content = Minify_CSS_UriRewriter::rewrite($content, $options); 
     64 
    8665        return $content; 
    8766    } 
    88      
     67 
    8968    /** 
    9069     * Is the parser within a C-style comment at the end of this line? 
    9170     * 
    9271     * @param string $line current line of code 
    93      *  
     72     * 
    9473     * @param bool $inComment was the parser in a comment at the 
    9574     * beginning of the line? 
    96      *  
     75     * 
    9776     * @return bool 
    9877     */ 
     
    11998        return $inComment; 
    12099    } 
    121      
     100 
    122101    /** 
    123102     * Prepend a comment (or note) to the given line 
     
    126105     * 
    127106     * @param string $note content of note/comment 
    128      *  
     107     * 
    129108     * @param bool $inComment was the parser in a comment at the 
    130109     * beginning of the line? 
    131110     * 
    132111     * @param int $padTo minimum width of comment 
    133      *  
     112     * 
    134113     * @return string 
    135114     */ 
  • w3-total-cache/trunk/lib/Minify/Minify/YUICompressor.php

    r329563 r410604  
    1010 
    1111    public static function minifyCss($css, $options = array()) { 
    12         return self::_minify('css', $css, $options); 
     12        require_once W3TC_LIB_MINIFY_DIR . '/Minify/CSS/UriRewriter.php'; 
     13 
     14        $css = self::_minify('css', $css, $options); 
     15        $css = Minify_CSS_UriRewriter::rewrite($css, $options); 
     16 
     17        return $css; 
    1318    } 
    1419 
  • w3-total-cache/trunk/lib/W3/Cache/File.php

    r409551 r410604  
    1010define('W3TC_CACHE_FILE_EXPIRE_MAX', 2592000); 
    1111 
    12 require_once W3TC_INC_DIR . '/file.php'; 
     12require_once W3TC_INC_DIR . '/functions/file.php'; 
    1313require_once W3TC_LIB_W3_DIR . '/Cache/Base.php'; 
    1414 
  • w3-total-cache/trunk/lib/W3/Cache/File/Generic.php

    r409551 r410604  
    88} 
    99 
    10 require_once W3TC_INC_DIR . '/file.php'; 
     10require_once W3TC_INC_DIR . '/functions/file.php'; 
    1111require_once W3TC_LIB_W3_DIR . '/Cache/File.php'; 
    1212 
  • w3-total-cache/trunk/lib/W3/CloudFlare.php

    r409551 r410604  
    6363     */ 
    6464    function api_request($action, $value = null) { 
    65         require_once W3TC_INC_DIR . '/http.php'; 
     65        require_once W3TC_INC_DIR . '/functions/http.php'; 
    6666 
    6767        $url = sprintf('%s?email=%s&tkn=%s&z=%s&a=%s', W3TC_CLOUDFLARE_API_URL, urlencode($this->_config['email']), urlencode($this->_config['key']), urlencode($this->_config['zone']), urlencode($action)); 
     
    8888     */ 
    8989    function external_event($type, $value) { 
    90         require_once W3TC_INC_DIR . '/http.php'; 
     90        require_once W3TC_INC_DIR . '/functions/http.php'; 
    9191 
    9292        $url = sprintf('%s?u=%s&tkn=%s&evnt_t=%s&evnt_v=%s', W3TC_CLOUDFLARE_EXTERNAL_EVENT_URL, urlencode($this->_config['email']), urlencode($this->_config['key']), urlencode($type), urlencode($value)); 
  • w3-total-cache/trunk/lib/W3/Config.php

    r409551 r410604  
    5757        'pgcache.engine' => 'string', 
    5858        'pgcache.file.gc' => 'integer', 
     59        'pgcache.file.nfs' => 'boolean', 
    5960        'pgcache.file.locking' => 'boolean', 
    6061        'pgcache.memcached.servers' => 'array', 
     
    9596        'minify.engine' => 'string', 
    9697        'minify.file.gc' => 'integer', 
     98        'minify.file.nfs' => 'boolean', 
    9799        'minify.file.locking' => 'boolean', 
    98100        'minify.memcached.servers' => 'array', 
     
    386388        'pgcache.engine' => 'file_generic', 
    387389        'pgcache.file.gc' => 3600, 
     390        'pgcache.file.nfs' => false, 
    388391        'pgcache.file.locking' => false, 
    389392        'pgcache.memcached.servers' => array( 
     
    443446        'minify.engine' => 'file', 
    444447        'minify.file.gc' => 86400, 
     448        'minify.file.nfs' => false, 
    445449        'minify.file.locking' => false, 
    446450        'minify.memcached.servers' => array( 
  • w3-total-cache/trunk/lib/W3/Db.php

    r409551 r410604  
    7777     */ 
    7878    function __construct($dbuser, $dbpassword, $dbname, $dbhost) { 
    79         $this->_config = & w3_instance('/Config.php'); 
     79        $this->_config = & w3_instance('W3_Config'); 
    8080        $this->_lifetime = $this->_config->get_integer('dbcache.lifetime'); 
    8181 
  • w3-total-cache/trunk/lib/W3/Minifier.php

    r409551 r410604  
    4646     */ 
    4747    function __construct() { 
    48         $this->_config = & w3_instance('/Config.php'); 
     48        $this->_config = & w3_instance('W3_Config'); 
    4949    } 
    5050 
     
    270270 
    271271        if ($this->_config->get_boolean('browsercache.enabled') && ($this->_config->get_boolean('browsercache.cssjs.replace') || $this->_config->get_boolean('browsercache.html.replace') || $this->_config->get_boolean('browsercache.other.replace'))) { 
    272             $w3_plugin_browsercache = & w3_instance('/Plugin/BrowserCache.php'); 
     272            $w3_plugin_browsercache = & w3_instance('W3_Plugin_BrowserCache'); 
    273273 
    274274            $options = array_merge($options, array( 
     
    278278        } 
    279279 
     280        if ($this->_config->get_boolean('cdn.enabled')) { 
     281            $options = array_merge($options, array( 
     282                'prependRelativePath' => w3_get_domain_url() 
     283            )); 
     284        } 
     285 
    280286        return $options; 
    281287    } 
  • w3-total-cache/trunk/lib/W3/Minify.php

    r409551 r410604  
    2222     */ 
    2323    function &instance() { 
    24         return w3_instance('/Minify.php'); 
     24        return w3_instance('W3_Minify'); 
    2525    } 
    2626 
     
    2929     */ 
    3030    function __construct() { 
    31         $this->_config = & w3_instance('/Config.php'); 
     31        $this->_config = & w3_instance('W3_Config'); 
    3232    } 
    3333 
     
    137137         * Set minifier 
    138138         */ 
    139         $w3_minifier = & w3_instance('/Minifier.php'); 
     139        $w3_minifier = & w3_instance('W3_Minifier'); 
    140140 
    141141        if ($type == 'js') { 
     
    561561 
    562562        if (!file_exists($cache_path) || @filemtime($cache_path) < (time() - $lifetime)) { 
    563             require_once W3TC_INC_DIR . '/http.php'; 
     563            require_once W3TC_INC_DIR . '/functions/http.php'; 
    564564            w3_download($url, $cache_path); 
    565565        } 
     
    686686        $from_name = get_option('blogname'); 
    687687        $to_name = $to_email = get_option('admin_email'); 
    688         $body = @file_get_contents(W3TC_INC_DIR . '/email/minify_error_notification.html'); 
     688        $body = @file_get_contents(W3TC_INC_DIR . '/email/minify_error_notification.php'); 
    689689 
    690690        $headers = array( 
  • w3-total-cache/trunk/lib/W3/Mobile.php

    r409551 r410604  
    1919     */ 
    2020    function __construct() { 
    21         $config = & w3_instance('/Config.php'); 
     21        $config = & w3_instance('W3_Config'); 
    2222 
    2323        $this->groups = $config->get_array('mobile.rgroups'); 
  • w3-total-cache/trunk/lib/W3/ObjectCache.php

    r409551 r410604  
    109109     */ 
    110110    function &instance() { 
    111         return w3_instance('/ObjectCache.php'); 
     111        return w3_instance('W3_ObjectCache'); 
    112112    } 
    113113 
     
    116116     */ 
    117117    function __construct() { 
    118         $this->_config = & w3_instance('/Config.php'); 
     118        $this->_config = & w3_instance('W3_Config'); 
    119119        $this->_lifetime = $this->_config->get_integer('objectcache.lifetime'); 
    120120        $this->_debug = $this->_config->get_boolean('objectcache.debug'); 
  • w3-total-cache/trunk/lib/W3/PageSpeed.php

    r409551 r410604  
    2121     */ 
    2222    function __construct() { 
    23         $config = & w3_instance('/Config.php'); 
     23        $config = & w3_instance('W3_Config'); 
    2424 
    2525        $this->key = $config->get_string('widget.pagespeed.key'); 
     
    7171     */ 
    7272    function _request($url) { 
    73         require_once W3TC_INC_DIR . '/http.php'; 
     73        require_once W3TC_INC_DIR . '/functions/http.php'; 
    7474        require_once W3TC_INC_DIR . '/functions/url.php'; 
    7575 
  • w3-total-cache/trunk/lib/W3/PgCache.php

    r409551 r410604  
    9999     */ 
    100100    function &instance() { 
    101         return w3_instance('/PgCache.php'); 
     101        return w3_instance('W3_PgCache'); 
    102102    } 
    103103 
     
    106106     */ 
    107107    function __construct() { 
    108         $this->_config = & w3_instance('/Config.php'); 
     108        $this->_config = & w3_instance('W3_Config'); 
    109109        $this->_debug = $this->_config->get_boolean('pgcache.debug'); 
    110110        $this->_request_uri = $_SERVER['REQUEST_URI']; 
     
    113113 
    114114        if ($this->_config->get_boolean('mobile.enabled')) { 
    115             $this->_mobile = & w3_instance('/Mobile.php'); 
     115            $this->_mobile = & w3_instance('W3_Mobile'); 
    116116        } 
    117117 
    118118        if ($this->_config->get_boolean('referrer.enabled')) { 
    119             $this->_referrer = & w3_instance('/Referrer.php'); 
     119            $this->_referrer = & w3_instance('W3_Referrer'); 
    120120        } 
    121121    } 
     
    437437 
    438438    /** 
    439      * Flushes all caches 
    440      * 
    441      * @return boolean 
    442      */ 
    443     function flush() { 
    444         $cache = & $this->_get_cache(); 
    445  
    446         return $cache->flush(); 
    447     } 
    448  
    449     /** 
    450      * Flushes post cache 
    451      * 
    452      * @param integer $post_id 
    453      * @return boolean 
    454      */ 
    455     function flush_post($post_id = null) { 
    456         if (!$post_id) { 
    457             $post_id = $this->_detect_post_id(); 
    458         } 
    459  
    460         if ($post_id) { 
    461             $uris = array(); 
    462             $domain_url = w3_get_domain_url(); 
    463             $feeds = $this->_config->get_array('pgcache.purge.feed.types'); 
    464  
    465             if ($this->_config->get_boolean('pgcache.purge.terms') || $this->_config->get_boolean('pgcache.purge.feed.terms')) { 
    466                 $taxonomies = get_post_taxonomies($post_id); 
    467                 $terms = wp_get_post_terms($post_id, $taxonomies); 
    468             } 
    469  
    470             switch (true) { 
    471                 case $this->_config->get_boolean('pgcache.purge.author'): 
    472                 case $this->_config->get_boolean('pgcache.purge.archive.daily'): 
    473                 case $this->_config->get_boolean('pgcache.purge.archive.monthly'): 
    474                 case $this->_config->get_boolean('pgcache.purge.archive.yearly'): 
    475                 case $this->_config->get_boolean('pgcache.purge.feed.author'): 
    476                     $post = get_post($post_id); 
    477             } 
    478  
    479             /** 
    480              * Home URL 
    481              */ 
    482             if ($this->_config->get_boolean('pgcache.purge.home')) { 
    483                 $home_path = w3_get_home_path(); 
    484                 $site_path = w3_get_site_path(); 
    485  
    486                 $uris[] = $home_path; 
    487  
    488                 if ($site_path != $home_path) { 
    489                     $uris[] = $site_path; 
    490                 } 
    491             } 
    492  
    493             /** 
    494              * Post URL 
    495              */ 
    496             if ($this->_config->get_boolean('pgcache.purge.post')) { 
    497                 $post_link = post_permalink($post_id); 
    498                 $post_uri = str_replace($domain_url, '', $post_link); 
    499  
    500                 $uris[] = $post_uri; 
    501             } 
    502  
    503             /** 
    504              * Post comments URLs 
    505              */ 
    506             if ($this->_config->get_boolean('pgcache.purge.comments') && function_exists('get_comments_pagenum_link')) { 
    507                 $comments_number = get_comments_number($post_id); 
    508                 $comments_per_page = get_option('comments_per_page'); 
    509                 $comments_pages_number = @ceil($comments_number / $comments_per_page); 
    510  
    511                 for ($pagenum = 1; $pagenum <= $comments_pages_number; $pagenum++) { 
    512                     $comments_pagenum_link = $this->_get_comments_pagenum_link($post_id, $pagenum); 
    513                     $comments_pagenum_uri = str_replace($domain_url, '', $comments_pagenum_link); 
    514  
    515                     $uris[] = $comments_pagenum_uri; 
    516                 } 
    517             } 
    518  
    519             /** 
    520              * Post author URLs 
    521              */ 
    522             if ($this->_config->get_boolean('pgcache.purge.author') && $post) { 
    523                 $posts_number = count_user_posts($post->post_author); 
    524                 $posts_per_page = get_option('posts_per_page'); 
    525                 $posts_pages_number = @ceil($posts_number / $posts_per_page); 
    526  
    527                 $author_link = get_author_link(false, $post->post_author); 
    528                 $author_uri = str_replace($domain_url, '', $author_link); 
    529  
    530                 for ($pagenum = 1; $pagenum <= $posts_pages_number; $pagenum++) { 
    531                     $author_pagenum_link = $this->_get_pagenum_link($author_uri, $pagenum); 
    532                     $author_pagenum_uri = str_replace($domain_url, '', $author_pagenum_link); 
    533  
    534                     $uris[] = $author_pagenum_uri; 
    535                 } 
    536             } 
    537  
    538             /** 
    539              * Post terms URLs 
    540              */ 
    541             if ($this->_config->get_boolean('pgcache.purge.terms')) { 
    542                 $posts_per_page = get_option('posts_per_page'); 
    543  
    544                 foreach ($terms as $term) { 
    545                     $term_link = get_term_link($term, $term->taxonomy); 
    546                     $term_uri = str_replace($domain_url, '', $term_link); 
    547                     $posts_pages_number = @ceil($term->count / $posts_per_page); 
    548  
    549                     for ($pagenum = 1; $pagenum <= $posts_pages_number; $pagenum++) { 
    550                         $term_pagenum_link = $this->_get_pagenum_link($term_uri, $pagenum); 
    551                         $term_pagenum_uri = str_replace($domain_url, '', $term_pagenum_link); 
    552  
    553                         $uris[] = $term_pagenum_uri; 
    554                     } 
    555                 } 
    556             } 
    557  
    558             /** 
    559              * Daily archive URLs 
    560              */ 
    561             if ($this->_config->get_boolean('pgcache.purge.archive.daily') && $post) { 
    562                 $post_date = strtotime($post->post_date); 
    563                 $post_year = gmdate('Y', $post_date); 
    564                 $post_month = gmdate('m', $post_date); 
    565                 $post_day = gmdate('d', $post_date); 
    566  
    567                 $posts_per_page = get_option('posts_per_page'); 
    568                 $posts_number = $this->_get_archive_posts_count($post_year, $post_month, $post_day); 
    569                 $posts_pages_number = @ceil($posts_number / $posts_per_page); 
    570  
    571                 $day_link = get_day_link($post_year, $post_month, $post_day); 
    572                 $day_uri = str_replace($domain_url, '', $day_link); 
    573  
    574                 for ($pagenum = 1; $pagenum <= $posts_pages_number; $pagenum++) { 
    575                     $day_pagenum_link = $this->_get_pagenum_link($day_uri, $pagenum); 
    576                     $day_pagenum_uri = str_replace($domain_url, '', $day_pagenum_link); 
    577  
    578                     $uris[] = $day_pagenum_uri; 
    579                 } 
    580             } 
    581  
    582             /** 
    583              * Monthly archive URLs 
    584              */ 
    585             if ($this->_config->get_boolean('pgcache.purge.archive.monthly') && $post) { 
    586                 $post_date = strtotime($post->post_date); 
    587                 $post_year = gmdate('Y', $post_date); 
    588                 $post_month = gmdate('m', $post_date); 
    589  
    590                 $posts_per_page = get_option('posts_per_page'); 
    591                 $posts_number = $this->_get_archive_posts_count($post_year, $post_month); 
    592                 $posts_pages_number = @ceil($posts_number / $posts_per_page); 
    593  
    594                 $month_link = get_month_link($post_year, $post_month); 
    595                 $month_uri = str_replace($domain_url, '', $month_link); 
    596  
    597                 for ($pagenum = 1; $pagenum <= $posts_pages_number; $pagenum++) { 
    598                     $month_pagenum_link = $this->_get_pagenum_link($month_uri, $pagenum); 
    599                     $month_pagenum_uri = str_replace($domain_url, '', $month_pagenum_link); 
    600  
    601                     $uris[] = $month_pagenum_uri; 
    602                 } 
    603             } 
    604  
    605             /** 
    606              * Yearly archive URLs 
    607              */ 
    608             if ($this->_config->get_boolean('pgcache.purge.archive.yearly') && $post) { 
    609                 $post_date = strtotime($post->post_date); 
    610                 $post_year = gmdate('Y', $post_date); 
    611  
    612                 $posts_per_page = get_option('posts_per_page'); 
    613                 $posts_number = $this->_get_archive_posts_count($post_year); 
    614                 $posts_pages_number = @ceil($posts_number / $posts_per_page); 
    615  
    616                 $year_link = get_year_link($post_year); 
    617                 $year_uri = str_replace($domain_url, '', $year_link); 
    618  
    619                 for ($pagenum = 1; $pagenum <= $posts_pages_number; $pagenum++) { 
    620                     $year_pagenum_link = $this->_get_pagenum_link($year_uri, $pagenum); 
    621                     $year_pagenum_uri = str_replace($domain_url, '', $year_pagenum_link); 
    622  
    623                     $uris[] = $year_pagenum_uri; 
    624                 } 
    625             } 
    626  
    627             /** 
    628              * Feed URLs 
    629              */ 
    630             if ($this->_config->get_boolean('pgcache.purge.feed.blog')) { 
    631                 foreach ($feeds as $feed) { 
    632                     $feed_link = get_feed_link($feed); 
    633                     $feed_uri = str_replace($domain_url, '', $feed_link); 
    634  
    635                     $uris[] = $feed_uri; 
    636                 } 
    637             } 
    638  
    639             if ($this->_config->get_boolean('pgcache.purge.feed.comments')) { 
    640                 foreach ($feeds as $feed) { 
    641                     $post_comments_feed_link = get_post_comments_feed_link($post_id, $feed); 
    642                     $post_comments_feed_uri = str_replace($domain_url, '', $post_comments_feed_link); 
    643  
    644                     $uris[] = $post_comments_feed_uri; 
    645                 } 
    646             } 
    647  
    648             if ($this->_config->get_boolean('pgcache.purge.feed.author') && $post) { 
    649                 foreach ($feeds as $feed) { 
    650                     $author_feed_link = get_author_feed_link($post->post_author, $feed); 
    651                     $author_feed_uri = str_replace($domain_url, '', $author_feed_link); 
    652  
    653                     $uris[] = $author_feed_uri; 
    654                 } 
    655             } 
    656  
    657             if ($this->_config->get_boolean('pgcache.purge.feed.terms')) { 
    658                 foreach ($terms as $term) { 
    659                     foreach ($feeds as $feed) { 
    660                         $term_feed_link = get_term_feed_link($term->term_id, $term->taxonomy, $feed); 
    661                         $term_feed_uri = str_replace($domain_url, '', $term_feed_link); 
    662  
    663                         $uris[] = $term_feed_uri; 
    664                     } 
    665                 } 
    666             } 
    667  
    668             /** 
    669              * Flush cache 
    670              */ 
    671             if (count($uris)) { 
    672                 $cache = & $this->_get_cache(); 
    673                 $mobile_groups = $this->_get_mobile_groups(); 
    674                 $referrer_groups = $this->_get_referrer_groups(); 
    675                 $encryptions = $this->_get_encryptions(); 
    676                 $compressions = $this->_get_compressions(); 
    677  
    678                 foreach ($uris as $uri) { 
    679                     foreach ($mobile_groups as $mobile_group) { 
    680                         foreach ($referrer_groups as $referrer_group) { 
    681                             foreach ($encryptions as $encryption) { 
    682                                 foreach ($compressions as $compression) { 
    683                                     $page_key = $this->_get_page_key($uri, $mobile_group, $referrer_group, $encryption, $compression); 
    684  
    685                                     $cache->delete($page_key); 
    686                                 } 
    687                             } 
    688                         } 
    689                     } 
    690                 } 
    691  
    692                 /** 
    693                  * Purge varnish servers 
    694                  */ 
    695                 if ($this->_config->get_boolean('varnish.enabled')) { 
    696                     $varnish = & w3_instance('/Varnish.php'); 
    697  
    698                     foreach ($uris as $uri) { 
    699                         $varnish->purge($uri); 
    700                     } 
    701                 } 
    702             } 
    703  
    704             return true; 
    705         } 
    706  
    707         return false; 
    708     } 
    709  
    710     /** 
    711439     * Checks if can we do cache logic 
    712440     * 
     
    941669 
    942670    /** 
    943      * Checks accept URI 
    944      * 
    945      * @return boolean 
    946      */ 
    947     function _check_accept_uri() { 
    948         $accept_uri = $this->_config->get_array('pgcache.accept.uri'); 
    949         $accept_uri = array_map('w3_parse_path', $accept_uri); 
    950  
    951         foreach ($accept_uri as $expr) { 
    952             $expr = trim($expr); 
    953             if ($expr != '' && preg_match('~' . $expr . '~i', $this->_request_uri)) { 
    954                 return true; 
    955             } 
    956         } 
    957  
    958         return false; 
    959     } 
    960  
    961     /** 
    962671     * Checks User Agent 
    963672     * 
     
    1097806 
    1098807        return false; 
    1099     } 
    1100  
    1101     /** 
    1102      * Returns array of mobile groups 
    1103      * 
    1104      * @return array 
    1105      */ 
    1106     function _get_mobile_groups() { 
    1107         $mobile_groups = array(''); 
    1108  
    1109         if ($this->_mobile) { 
    1110             $mobile_groups = array_merge($mobile_groups, array_keys($this->_mobile->groups)); 
    1111         } 
    1112  
    1113         return $mobile_groups; 
    1114     } 
    1115  
    1116     /** 
    1117      * Returns array of referrer groups 
    1118      * 
    1119      * @return array 
    1120      */ 
    1121     function _get_referrer_groups() { 
    1122         $referrer_groups = array(''); 
    1123  
    1124         if ($this->_referrer) { 
    1125             $referrer_groups = array_merge($referrer_groups, array_keys($this->_referrer->groups)); 
    1126         } 
    1127  
    1128         return $referrer_groups; 
    1129     } 
    1130  
    1131     /** 
    1132      * Returns array of encryptions 
    1133      * 
    1134      * @return array 
    1135      */ 
    1136     function _get_encryptions() { 
    1137         return array(false, 'ssl'); 
    1138808    } 
    1139809 
     
    1303973 
    1304974        return $key; 
    1305     } 
    1306  
    1307     /** 
    1308      * Detects post ID 
    1309      * 
    1310      * @return integer 
    1311      */ 
    1312     function _detect_post_id() { 
    1313         global $posts, $comment_post_ID, $post_ID; 
    1314  
    1315         if ($post_ID) { 
    1316             return $post_ID; 
    1317         } elseif ($comment_post_ID) { 
    1318             return $comment_post_ID; 
    1319         } elseif (is_single() || is_page() && count($posts)) { 
    1320             return $posts[0]->ID; 
    1321         } elseif (isset($_REQUEST['p'])) { 
    1322             return (integer) $_REQUEST['p']; 
    1323         } 
    1324  
    1325         return 0; 
    1326975    } 
    1327976 
     
    15841233 
    15851234    /** 
    1586      * Workaround for get_pagenum_link function 
    1587      * 
    1588      * @param string $url 
    1589      * @param int $pagenum 
    1590      * @return string 
    1591      */ 
    1592     function _get_pagenum_link($url, $pagenum = 1) { 
    1593         $request_uri = $_SERVER['REQUEST_URI']; 
    1594         $_SERVER['REQUEST_URI'] = $url; 
    1595  
    1596         $link = get_pagenum_link($pagenum); 
    1597  
    1598         $_SERVER['REQUEST_URI'] = $request_uri; 
    1599  
    1600         return $link; 
    1601     } 
    1602  
    1603     /** 
    1604      * Workaround for get_comments_pagenum_link function 
    1605      * 
    1606      * @param integer $post_id 
    1607      * @return string 
    1608      */ 
    1609     function _get_comments_pagenum_link($post_id, $pagenum = 1, $max_page = 0) { 
    1610         if (isset($GLOBALS['post']) && is_object($GLOBALS['post'])) { 
    1611             $old_post = &$GLOBALS['post']; 
    1612         } else { 
    1613             $GLOBALS['post'] = & new stdClass(); 
    1614             $old_post = null; 
    1615         } 
    1616  
    1617         $GLOBALS['post']->ID = $post_id; 
    1618  
    1619         $link = get_comments_pagenum_link($pagenum, $max_page); 
    1620  
    1621         if ($old_post) { 
    1622             $GLOBALS['post'] = &$old_post; 
    1623         } 
    1624  
    1625         return $link; 
    1626     } 
    1627  
    1628     /** 
    16291235     * Parses dynamic tags 
    16301236     * @return string 
     
    17081314        return preg_match('~<!--\s*m(func|clude)(.*)-->(.*)<!--\s*/m(func|clude)\s*-->~Uis', $buffer); 
    17091315    } 
    1710  
    1711     /** 
    1712      * Returns number of posts in the archive 
    1713      * 
    1714      * @param int $year 
    1715      * @param int $month 
    1716      * @param int $day 
    1717      * @return int 
    1718      */ 
    1719     function _get_archive_posts_count($year = 0, $month = 0, $day = 0) { 
    1720         global $wpdb; 
    1721  
    1722         $filters = array( 
    1723             'post_type = "post"', 
    1724             'post_status = "publish"' 
    1725         ); 
    1726  
    1727         if ($year) { 
    1728             $filters[] = sprintf('YEAR(post_date) = %d', $year); 
    1729         } 
    1730  
    1731         if ($month) { 
    1732             $filters[] = sprintf('MONTH(post_date) = %d', $month); 
    1733         } 
    1734  
    1735         if ($day) { 
    1736             $filters[] = sprintf('DAY(post_date) = %d', $day); 
    1737         } 
    1738  
    1739         $where = implode(' AND ', $filters); 
    1740  
    1741         $sql = sprintf('SELECT COUNT(*) FROM %s WHERE %s', $wpdb->posts, $where); 
    1742  
    1743         $count = (int) $wpdb->get_var($sql); 
    1744  
    1745         return $count; 
    1746     } 
    17471316} 
  • w3-total-cache/trunk/lib/W3/Plugin.php

    r409551 r410604  
    2020     */ 
    2121    function __construct() { 
    22         $this->_config = & w3_instance('/Config.php'); 
     22        $this->_config = & w3_instance('W3_Config'); 
    2323    } 
    2424 
  • w3-total-cache/trunk/lib/W3/Plugin/BrowserCache.php

    r409551 r410604  
    1818     */ 
    1919    function run() { 
    20         register_activation_hook(W3TC_FILE, array( 
    21             &$this, 
    22             'activate' 
    23         )); 
    24  
    25         register_deactivation_hook(W3TC_FILE, array( 
    26             &$this, 
    27             'deactivate' 
    28         )); 
    29  
    30         if ($this->_config->get_boolean('browsercache.enabled') && $this->_config->get_boolean('browsercache.html.w3tc')) { 
     20        if ($this->_config->get_boolean('browsercache.html.w3tc')) { 
    3121            add_action('send_headers', array( 
    3222                &$this, 
     
    4434 
    4535    /** 
    46      * Activate plugin action 
     36     * Instantiates worker with admin functionality on demand 
     37     * 
     38     * @return W3_Plugin_BrowserCacheAdmin 
     39     */ 
     40    function &get_admin() { 
     41        return w3_instance('W3_Plugin_BrowserCacheAdmin'); 
     42    } 
     43 
     44    /** 
     45     * Activate plugin action (called by W3_PluginProxy) 
    4746     */ 
    4847    function activate() { 
    49         if ($this->_config->get_boolean('browsercache.enabled')) { 
    50             if (w3_can_modify_rules(w3_get_browsercache_rules_cache_path())) { 
    51                 $this->write_rules_cache(); 
    52             } 
    53  
    54             if ($this->_config->get_boolean('browsercache.no404wp') && w3_can_modify_rules(w3_get_browsercache_rules_no404wp_path())) { 
    55                 $this->write_rules_no404wp(); 
    56             } 
    57         } 
    58     } 
    59  
    60     /** 
    61      * Deactivate plugin action 
     48        $this->get_admin()->activate(); 
     49    } 
     50 
     51    /** 
     52     * Deactivate plugin action (called by W3_PluginProxy) 
    6253     */ 
    6354    function deactivate() { 
    64         if (w3_can_modify_rules(w3_get_browsercache_rules_no404wp_path())) { 
    65             $this->remove_rules_no404wp(); 
    66         } 
    67  
    68         if (w3_can_modify_rules(w3_get_browsercache_rules_cache_path())) { 
    69             $this->remove_rules_cache(); 
    70         } 
     55        $this->get_admin()->deactivate(); 
    7156    } 
    7257 
     
    7762     */ 
    7863    function can_ob() { 
    79         /** 
    80          * Browser cache should be enabled 
    81          */ 
    82         if (!$this->_config->get_boolean('browsercache.enabled')) { 
    83             return false; 
    84         } 
    85  
    8664        /** 
    8765         * Replace feature should be enabled 
     
    249227 
    250228            if ($this->_config->get_boolean('browsercache.cssjs.replace')) { 
    251                 $types = array_merge($types, array_keys($this->get_cssjs_types())); 
     229                $types = array_merge($types, array_keys($this->_get_cssjs_types())); 
    252230            } 
    253231 
    254232            if ($this->_config->get_boolean('browsercache.html.replace')) { 
    255                 $types = array_merge($types, array_keys($this->get_html_types())); 
     233                $types = array_merge($types, array_keys($this->_get_html_types())); 
    256234            } 
    257235 
    258236            if ($this->_config->get_boolean('browsercache.other.replace')) { 
    259                 $types = array_merge($types, array_keys($this->get_other_types())); 
     237                $types = array_merge($types, array_keys($this->_get_other_types())); 
    260238            } 
    261239 
     
    280258     * @return array 
    281259     */ 
    282     function get_cssjs_types() { 
     260    function _get_cssjs_types() { 
    283261        $mime_types = include W3TC_INC_DIR . '/mime/cssjs.php'; 
    284262 
     
    291269     * @return array 
    292270     */ 
    293     function get_html_types() { 
     271    function _get_html_types() { 
    294272        $mime_types = include W3TC_INC_DIR . '/mime/html.php'; 
    295273 
     
    302280     * @return array 
    303281     */ 
    304     function get_other_types() { 
     282    function _get_other_types() { 
    305283        $mime_types = include W3TC_INC_DIR . '/mime/other.php'; 
    306284 
    307285        return $mime_types; 
    308     } 
    309  
    310     /** 
    311      * Returns cache rules 
    312      * 
    313      * @param bool $cdn 
    314      * @return string 
    315      */ 
    316     function generate_rules_cache($cdn = false) { 
    317         switch (true) { 
    318             case w3_is_apache(): 
    319                 return $this->generate_rules_cache_apache($cdn); 
    320  
    321             case w3_is_nginx(): 
    322                 return $this->generate_rules_cache_nginx($cdn); 
    323         } 
    324  
    325         return false; 
    326     } 
    327  
    328     /** 
    329      * Returns cache rules 
    330      * 
    331      * @param bool $cdn 
    332      * @return string 
    333      */ 
    334     function generate_rules_cache_apache($cdn = false) { 
    335         $cssjs_types = $this->get_cssjs_types(); 
    336         $html_types = $this->get_html_types(); 
    337         $other_types = $this->get_other_types(); 
    338  
    339         $cssjs_expires = $this->_config->get_boolean('browsercache.cssjs.expires'); 
    340         $html_expires = $this->_config->get_boolean('browsercache.html.expires'); 
    341         $other_expires = $this->_config->get_boolean('browsercache.other.expires'); 
    342  
    343         $cssjs_lifetime = $this->_config->get_integer('browsercache.cssjs.lifetime'); 
    344         $html_lifetime = $this->_config->get_integer('browsercache.html.lifetime'); 
    345         $other_lifetime = $this->_config->get_integer('browsercache.other.lifetime'); 
    346  
    347         $mime_types = array(); 
    348  
    349         if ($cssjs_expires && $cssjs_lifetime) { 
    350             $mime_types = array_merge($mime_types, $cssjs_types); 
    351         } 
    352  
    353         if ($html_expires && $html_lifetime) { 
    354             $mime_types = array_merge($mime_types, $html_types); 
    355         } 
    356  
    357         if ($other_expires && $other_lifetime) { 
    358             $mime_types = array_merge($mime_types, $other_types); 
    359         } 
    360  
    361         $rules = ''; 
    362         $rules .= W3TC_MARKER_BEGIN_BROWSERCACHE_CACHE . "\n"; 
    363  
    364         if ($cdn) { 
    365             $rules .= "<IfModule mod_headers.c>\n"; 
    366             $rules .= "    Header set Access-Control-Allow-Origin *\n"; 
    367             $rules .= "</IfModule>\n"; 
    368         } 
    369  
    370         if (count($mime_types)) { 
    371             $rules .= "<IfModule mod_mime.c>\n"; 
    372  
    373             foreach ($mime_types as $ext => $mime_type) { 
    374                 $extensions = explode('|', $ext); 
    375  
    376                 $rules .= "    AddType " . $mime_type; 
    377  
    378                 foreach ($extensions as $extension) { 
    379                     $rules .= " ." . $extension; 
    380                 } 
    381  
    382                 $rules .= "\n"; 
    383             } 
    384  
    385             $rules .= "</IfModule>\n"; 
    386  
    387             $rules .= "<IfModule mod_expires.c>\n"; 
    388             $rules .= "    ExpiresActive On\n"; 
    389  
    390             if ($cssjs_expires && $cssjs_lifetime) { 
    391                 foreach ($cssjs_types as $mime_type) { 
    392                     $rules .= "    ExpiresByType " . $mime_type . " A" . $cssjs_lifetime . "\n"; 
    393                 } 
    394             } 
    395  
    396             if ($html_expires && $html_lifetime) { 
    397                 foreach ($html_types as $mime_type) { 
    398                     $rules .= "    ExpiresByType " . $mime_type . " A" . $html_lifetime . "\n"; 
    399                 } 
    400             } 
    401  
    402             if ($other_expires && $other_lifetime) { 
    403                 foreach ($other_types as $mime_type) { 
    404                     $rules .= "    ExpiresByType " . $mime_type . " A" . $other_lifetime . "\n"; 
    405                 } 
    406             } 
    407  
    408             $rules .= "</IfModule>\n"; 
    409         } 
    410  
    411         $cssjs_compression = $this->_config->get_boolean('browsercache.cssjs.compression'); 
    412         $html_compression = $this->_config->get_boolean('browsercache.html.compression'); 
    413         $other_compression = $this->_config->get_boolean('browsercache.other.compression'); 
    414  
    415         if ($cssjs_compression || $html_compression || $other_compression) { 
    416             $compression_types = array(); 
    417  
    418             if ($cssjs_compression) { 
    419                 $compression_types = array_merge($compression_types, $cssjs_types); 
    420             } 
    421  
    422             if ($html_compression) { 
    423                 $compression_types = array_merge($compression_types, $html_types); 
    424             } 
    425  
    426             if ($other_compression) { 
    427                 $compression_types = array_merge($compression_types, array( 
    428                     'ico' => 'image/x-icon' 
    429                 )); 
    430             } 
    431  
    432             $rules .= "<IfModule mod_deflate.c>\n"; 
    433             $rules .= "    <IfModule mod_setenvif.c>\n"; 
    434             $rules .= "        BrowserMatch ^Mozilla/4 gzip-only-text/html\n"; 
    435             $rules .= "        BrowserMatch ^Mozilla/4\\.0[678] no-gzip\n"; 
    436             $rules .= "        BrowserMatch \\bMSIE !no-gzip !gzip-only-text/html\n"; 
    437             $rules .= "        BrowserMatch \\bMSI[E] !no-gzip !gzip-only-text/html\n"; 
    438             $rules .= "    </IfModule>\n"; 
    439             $rules .= "    <IfModule mod_headers.c>\n"; 
    440             $rules .= "        Header append Vary User-Agent env=!dont-vary\n"; 
    441             $rules .= "    </IfModule>\n"; 
    442             $rules .= "    <IfModule mod_filter.c>\n"; 
    443             $rules .= "        AddOutputFilterByType DEFLATE " . implode(' ', $compression_types) . "\n"; 
    444             $rules .= "    </IfModule>\n"; 
    445             $rules .= "</IfModule>\n"; 
    446         } 
    447  
    448         $this->_generate_rules_cache_apache($rules, $cssjs_types, 'cssjs'); 
    449         $this->_generate_rules_cache_apache($rules, $html_types, 'html'); 
    450         $this->_generate_rules_cache_apache($rules, $other_types, 'other'); 
    451  
    452         $rules .= W3TC_MARKER_END_BROWSERCACHE_CACHE . "\n"; 
    453  
    454         return $rules; 
    455     } 
    456  
    457     /** 
    458      * Writes cache rules 
    459      * 
    460      * @param string $rules 
    461      * @param array $mime_types 
    462      * @param string $section 
    463      * @return void 
    464      */ 
    465     function _generate_rules_cache_apache(&$rules, $mime_types, $section) { 
    466         $cache_control = $this->_config->get_boolean('browsercache.' . $section . '.cache.control'); 
    467         $etag = $this->_config->get_boolean('browsercache.' . $section . '.etag'); 
    468         $w3tc = $this->_config->get_boolean('browsercache.' . $section . '.w3tc'); 
    469  
    470         $extensions = array_keys($mime_types); 
    471         $extensions_lowercase = array_map('strtolower', $extensions); 
    472         $extensions_uppercase = array_map('strtoupper', $extensions); 
    473  
    474         $rules .= "<FilesMatch \"\\.(" . implode('|', array_merge($extensions_lowercase, $extensions_uppercase)) . ")$\">\n"; 
    475  
    476         if ($cache_control) { 
    477             $cache_policy = $this->_config->get_string('browsercache.' . $section . '.cache.policy'); 
    478  
    479             switch ($cache_policy) { 
    480                 case 'cache': 
    481                     $rules .= "    <IfModule mod_headers.c>\n"; 
    482                     $rules .= "        Header set Pragma \"public\"\n"; 
    483                     $rules .= "        Header set Cache-Control \"public\"\n"; 
    484                     $rules .= "    </IfModule>\n"; 
    485                     break; 
    486  
    487                 case 'cache_validation': 
    488                     $rules .= "    <IfModule mod_headers.c>\n"; 
    489                     $rules .= "        Header set Pragma \"public\"\n"; 
    490                     $rules .= "        Header set Cache-Control \"public, must-revalidate, proxy-revalidate\"\n"; 
    491                     $rules .= "    </IfModule>\n"; 
    492                     break; 
    493  
    494                 case 'cache_noproxy': 
    495                     $rules .= "    <IfModule mod_headers.c>\n"; 
    496                     $rules .= "        Header set Pragma \"public\"\n"; 
    497                     $rules .= "        Header set Cache-Control \"public, must-revalidate\"\n"; 
    498                     $rules .= "    </IfModule>\n"; 
    499                     break; 
    500  
    501                 case 'cache_maxage': 
    502                     $expires = $this->_config->get_boolean('browsercache.' . $section . '.expires'); 
    503                     $lifetime = $this->_config->get_integer('browsercache.' . $section . '.lifetime'); 
    504  
    505                     $rules .= "    <IfModule mod_headers.c>\n"; 
    506                     $rules .= "        Header set Pragma \"public\"\n"; 
    507  
    508                     if ($expires) { 
    509                         $rules .= "        Header append Cache-Control \"public, must-revalidate, proxy-revalidate\"\n"; 
    510                     } else { 
    511                         $rules .= "        Header set Cache-Control \"max-age=" . $lifetime . ", public, must-revalidate, proxy-revalidate\"\n"; 
    512                     } 
    513  
    514                     $rules .= "    </IfModule>\n"; 
    515                     break; 
    516  
    517                 case 'no_cache': 
    518                     $rules .= "    <IfModule mod_headers.c>\n"; 
    519                     $rules .= "        Header set Pragma \"no-cache\"\n"; 
    520                     $rules .= "        Header set Cache-Control \"max-age=0, private, no-store, no-cache, must-revalidate\"\n"; 
    521                     $rules .= "    </IfModule>\n"; 
    522                     break; 
    523             } 
    524         } 
    525  
    526         if ($etag) { 
    527             $rules .= "    FileETag MTime Size\n"; 
    528         } else { 
    529             $rules .= "    FileETag None\n"; 
    530         } 
    531  
    532         if ($w3tc) { 
    533             $rules .= "    <IfModule mod_headers.c>\n"; 
    534             $rules .= "         Header set X-Powered-By \"" . W3TC_POWERED_BY . "\"\n"; 
    535             $rules .= "    </IfModule>\n"; 
    536         } 
    537  
    538         $rules .= "</FilesMatch>\n"; 
    539  
    540         return $rules; 
    541     } 
    542  
    543     /** 
    544      * Returns cache rules 
    545      * 
    546      * @param bool $cdn 
    547      * @return string 
    548      */ 
    549     function generate_rules_cache_nginx($cdn = false) { 
    550         $cssjs_types = $this->get_cssjs_types(); 
    551         $html_types = $this->get_html_types(); 
    552         $other_types = $this->get_other_types(); 
    553  
    554         $rules = ''; 
    555         $rules .= W3TC_MARKER_BEGIN_BROWSERCACHE_CACHE . "\n"; 
    556  
    557         if ($cdn) { 
    558             $rules .= "add_header Access-Control-Allow-Origin \"*\"\n"; 
    559         } 
    560  
    561         $cssjs_compression = $this->_config->get_boolean('browsercache.cssjs.compression'); 
    562         $html_compression = $this->_config->get_boolean('browsercache.html.compression'); 
    563         $other_compression = $this->_config->get_boolean('browsercache.other.compression'); 
    564  
    565         if ($cssjs_compression || $html_compression || $other_compression) { 
    566             $compression_types = array(); 
    567  
    568             if ($cssjs_compression) { 
    569                 $compression_types = array_merge($compression_types, $cssjs_types); 
    570             } 
    571  
    572             if ($html_compression) { 
    573                 $compression_types = array_merge($compression_types, $html_types); 
    574             } 
    575  
    576             if ($other_compression) { 
    577                 $compression_types = array_merge($compression_types, array( 
    578                     'ico' => 'image/x-icon' 
    579                 )); 
    580             } 
    581  
    582             unset($compression_types['html|htm']); 
    583  
    584             $rules .= "gzip on;\n"; 
    585             $rules .= "gzip_types " . implode(' ', $compression_types) . ";\n"; 
    586         } 
    587  
    588         $this->_generate_rules_cache_nginx($rules, $cssjs_types, 'cssjs'); 
    589         $this->_generate_rules_cache_nginx($rules, $html_types, 'html'); 
    590         $this->_generate_rules_cache_nginx($rules, $other_types, 'other'); 
    591  
    592         $rules .= W3TC_MARKER_END_BROWSERCACHE_CACHE . "\n"; 
    593  
    594         return $rules; 
    595     } 
    596  
    597     /** 
    598      * Writes cache rules 
    599      * 
    600      * @param string $rules 
    601      * @param array $mime_types 
    602      * @param string $section 
    603      * @return void 
    604      */ 
    605     function _generate_rules_cache_nginx(&$rules, $mime_types, $section) { 
    606         $expires = $this->_config->get_boolean('browsercache.' . $section . '.expires'); 
    607         $cache_control = $this->_config->get_boolean('browsercache.' . $section . '.cache.control'); 
    608         $w3tc = $this->_config->get_boolean('browsercache.' . $section . '.w3tc'); 
    609  
    610         if ($expires || $cache_control || $w3tc) { 
    611             $lifetime = $this->_config->get_integer('browsercache.' . $section . '.lifetime'); 
    612  
    613             $rules .= "location ~ \\.(" . implode('|', array_keys($mime_types)) . ")$ {\n"; 
    614  
    615             if ($expires) { 
    616                 $rules .= "    expires " . $lifetime . "s;\n"; 
    617             } 
    618  
    619             if ($cache_control) { 
    620                 $cache_policy = $this->_config->get_string('browsercache.cssjs.cache.policy'); 
    621  
    622                 switch ($cache_policy) { 
    623                     case 'cache': 
    624                         $rules .= "    add_header Pragma \"public\";\n"; 
    625                         $rules .= "    add_header Cache-Control \"public\";\n"; 
    626                         break; 
    627  
    628                     case 'cache_validation': 
    629                         $rules .= "    add_header Pragma \"public\";\n"; 
    630                         $rules .= "    add_header Cache-Control \"public, must-revalidate, proxy-revalidate\";\n"; 
    631                         break; 
    632  
    633                     case 'cache_noproxy': 
    634                         $rules .= "    add_header Pragma \"public\";\n"; 
    635                         $rules .= "    add_header Cache-Control \"public, must-revalidate\";\n"; 
    636                         break; 
    637  
    638                     case 'cache_maxage': 
    639                         $rules .= "    add_header Pragma \"public\";\n"; 
    640                         $rules .= "    add_header Cache-Control \"max-age=" . $lifetime . ", public, must-revalidate, proxy-revalidate\";\n"; 
    641                         break; 
    642  
    643                     case 'no_cache': 
    644                         $rules .= "    add_header Pragma \"no-cache\";\n"; 
    645                         $rules .= "    add_header Cache-Control \"max-age=0, private, no-store, no-cache, must-revalidate\";\n"; 
    646                         break; 
    647                 } 
    648             } 
    649  
    650             if ($w3tc) { 
    651                 $rules .= "    add_header X-Powered-By \"" . W3TC_POWERED_BY . "\";\n"; 
    652             } 
    653  
    654             $rules .= "}\n"; 
    655         } 
    656     } 
    657  
    658     /** 
    659      * Generate rules related to prevent for media 404 error by WP 
    660      * 
    661      * @return string 
    662      */ 
    663     function generate_rules_no404wp() { 
    664         switch (true) { 
    665             case w3_is_apache(): 
    666                 return $this->generate_rules_no404wp_apache(); 
    667  
    668             case w3_is_nginx(): 
    669                 return $this->generate_rules_no404wp_nginx(); 
    670         } 
    671  
    672         return false; 
    673     } 
    674  
    675     /** 
    676      * Generate rules related to prevent for media 404 error by WP 
    677      * 
    678      * @return string 
    679      */ 
    680     function generate_rules_no404wp_apache() { 
    681         $cssjs_types = $this->get_cssjs_types(); 
    682         $html_types = $this->get_html_types(); 
    683         $other_types = $this->get_other_types(); 
    684  
    685         $extensions = array_merge(array_keys($cssjs_types), array_keys($html_types), array_keys($other_types)); 
    686  
    687         $permalink_structure = get_option('permalink_structure'); 
    688         $permalink_structure_ext = ltrim(strrchr($permalink_structure, '.'), '.'); 
    689  
    690         if ($permalink_structure_ext != '') { 
    691             foreach ($extensions as $index => $extension) { 
    692                 if (strstr($extension, $permalink_structure_ext) !== false) { 
    693                     $extensions[$index] = preg_replace('~\|?' . w3_preg_quote($permalink_structure_ext) . '\|?~', '', $extension); 
    694                 } 
    695             } 
    696         } 
    697  
    698         $exceptions = $this->_config->get_array('browsercache.no404wp.exceptions'); 
    699  
    700         $rules = ''; 
    701         $rules .= W3TC_MARKER_BEGIN_BROWSERCACHE_NO404WP . "\n"; 
    702         $rules .= "<IfModule mod_rewrite.c>\n"; 
    703         $rules .= "    RewriteEngine On\n"; 
    704         $rules .= "    RewriteCond %{REQUEST_FILENAME} !-f\n"; 
    705         $rules .= "    RewriteCond %{REQUEST_FILENAME} !-d\n"; 
    706  
    707         if (count($exceptions)) { 
    708             $rules .= "    RewriteCond %{REQUEST_URI} !(" . implode('|', $exceptions) . ")\n"; 
    709         } 
    710  
    711         $rules .= "    RewriteCond %{REQUEST_FILENAME} \\.(" . implode('|', $extensions) . ")$ [NC]\n"; 
    712         $rules .= "    RewriteRule .* - [L]\n"; 
    713         $rules .= "</IfModule>\n"; 
    714         $rules .= W3TC_MARKER_END_BROWSERCACHE_NO404WP . "\n"; 
    715  
    716         return $rules; 
    717     } 
    718  
    719     /** 
    720      * Generate rules related to prevent for media 404 error by WP 
    721      * 
    722      * @return string 
    723      */ 
    724     function generate_rules_no404wp_nginx() { 
    725         $cssjs_types = $this->get_cssjs_types(); 
    726         $html_types = $this->get_html_types(); 
    727         $other_types = $this->get_other_types(); 
    728  
    729         $extensions = array_merge(array_keys($cssjs_types), array_keys($html_types), array_keys($other_types)); 
    730  
    731         $permalink_structure = get_option('permalink_structure'); 
    732         $permalink_structure_ext = ltrim(strrchr($permalink_structure, '.'), '.'); 
    733  
    734         if ($permalink_structure_ext != '') { 
    735             foreach ($extensions as $index => $extension) { 
    736                 if (strstr($extension, $permalink_structure_ext) !== false) { 
    737                     $extensions[$index] = preg_replace('~\|?' . w3_preg_quote($permalink_structure_ext) . '\|?~', '', $extension); 
    738                 } 
    739             } 
    740         } 
    741  
    742         $exceptions = $this->_config->get_array('browsercache.no404wp.exceptions'); 
    743  
    744         $rules = ''; 
    745         $rules .= W3TC_MARKER_BEGIN_BROWSERCACHE_NO404WP . "\n"; 
    746         $rules .= "if (-f \$request_filename) {\n"; 
    747         $rules .= "    break;\n"; 
    748         $rules .= "}\n"; 
    749         $rules .= "if (-d \$request_filename) {\n"; 
    750         $rules .= "    break;\n"; 
    751         $rules .= "}\n"; 
    752  
    753         if (count($exceptions)) { 
    754             $rules .= "if (\$request_uri ~ \"(" . implode('|', $exceptions) . ")\") {\n"; 
    755             $rules .= "    break;\n"; 
    756             $rules .= "}\n"; 
    757         } 
    758  
    759         $rules .= "if (\$request_uri ~* \\.(" . implode('|', $extensions) . ")$) {\n"; 
    760         $rules .= "    return 404;\n"; 
    761         $rules .= "}\n"; 
    762         $rules .= W3TC_MARKER_END_BROWSERCACHE_NO404WP . "\n"; 
    763  
    764         return $rules; 
    765     } 
    766  
    767     /** 
    768      * Writes cache rules 
    769      * 
    770      * @return boolean 
    771      */ 
    772     function write_rules_cache() { 
    773         $path = w3_get_browsercache_rules_cache_path(); 
    774  
    775         if (file_exists($path)) { 
    776             $data = @file_get_contents($path); 
    777  
    778             if ($data === false) { 
    779                 return false; 
    780             } 
    781         } else { 
    782             $data = ''; 
    783         } 
    784  
    785         $replace_start = strpos($data, W3TC_MARKER_BEGIN_BROWSERCACHE_CACHE); 
    786         $replace_end = strpos($data, W3TC_MARKER_END_BROWSERCACHE_CACHE); 
    787  
    788         if ($replace_start !== false && $replace_end !== false && $replace_start < $replace_end) { 
    789             $replace_length = $replace_end - $replace_start + strlen(W3TC_MARKER_END_BROWSERCACHE_CACHE) + 1; 
    790         } else { 
    791             $replace_start = false; 
    792             $replace_length = 0; 
    793  
    794             $search = array( 
    795                 W3TC_MARKER_BEGIN_MINIFY_CORE => 0, 
    796                 W3TC_MARKER_BEGIN_PGCACHE_CORE => 0, 
    797                 W3TC_MARKER_BEGIN_BROWSERCACHE_NO404WP => 0, 
    798                 W3TC_MARKER_BEGIN_WORDPRESS => 0, 
    799                 W3TC_MARKER_END_PGCACHE_CACHE => strlen(W3TC_MARKER_END_PGCACHE_CACHE) + 1, 
    800                 W3TC_MARKER_END_MINIFY_CACHE => strlen(W3TC_MARKER_END_MINIFY_CACHE) + 1 
    801             ); 
    802  
    803             foreach ($search as $string => $length) { 
    804                 $replace_start = strpos($data, $string); 
    805  
    806                 if ($replace_start !== false) { 
    807                     $replace_start += $length; 
    808                     break; 
    809                 } 
    810             } 
    811         } 
    812  
    813         $rules = $this->generate_rules_cache(); 
    814  
    815         if ($replace_start !== false) { 
    816             $data = w3_trim_rules(substr_replace($data, $rules, $replace_start, $replace_length)); 
    817         } else { 
    818             $data = w3_trim_rules($data . $rules); 
    819         } 
    820  
    821         return @file_put_contents($path, $data); 
    822     } 
    823  
    824     /** 
    825      * Writes no 404 by WP rules 
    826      * 
    827      * @return boolean 
    828      */ 
    829     function write_rules_no404wp() { 
    830         $path = w3_get_browsercache_rules_no404wp_path(); 
    831  
    832         if (file_exists($path)) { 
    833             $data = @file_get_contents($path); 
    834  
    835             if ($data === false) { 
    836                 return false; 
    837             } 
    838         } else { 
    839             $data = ''; 
    840         } 
    841  
    842         $replace_start = strpos($data, W3TC_MARKER_BEGIN_BROWSERCACHE_NO404WP); 
    843         $replace_end = strpos($data, W3TC_MARKER_END_BROWSERCACHE_NO404WP); 
    844  
    845         if ($replace_start !== false && $replace_end !== false && $replace_start < $replace_end) { 
    846             $replace_length = $replace_end - $replace_start + strlen(W3TC_MARKER_END_BROWSERCACHE_NO404WP) + 1; 
    847         } else { 
    848             $replace_start = false; 
    849             $replace_length = 0; 
    850  
    851             $search = array( 
    852                 W3TC_MARKER_BEGIN_WORDPRESS => 0, 
    853                 W3TC_MARKER_END_PGCACHE_CORE => strlen(W3TC_MARKER_END_PGCACHE_CORE) + 1, 
    854                 W3TC_MARKER_END_MINIFY_CORE => strlen(W3TC_MARKER_END_MINIFY_CORE) + 1, 
    855                 W3TC_MARKER_END_BROWSERCACHE_CACHE => strlen(W3TC_MARKER_END_BROWSERCACHE_CACHE) + 1, 
    856                 W3TC_MARKER_END_PGCACHE_CACHE => strlen(W3TC_MARKER_END_PGCACHE_CACHE) + 1, 
    857                 W3TC_MARKER_END_MINIFY_CACHE => strlen(W3TC_MARKER_END_MINIFY_CACHE) + 1 
    858             ); 
    859  
    860             foreach ($search as $string => $length) { 
    861                 $replace_start = strpos($data, $string); 
    862  
    863                 if ($replace_start !== false) { 
    864                     $replace_start += $length; 
    865                     break; 
    866                 } 
    867             } 
    868         } 
    869  
    870         $rules = $this->generate_rules_no404wp(); 
    871  
    872         if ($replace_start !== false) { 
    873             $data = w3_trim_rules(substr_replace($data, $rules, $replace_start, $replace_length)); 
    874         } else { 
    875             $data = w3_trim_rules($data . $rules); 
    876         } 
    877  
    878         return @file_put_contents($path, $data); 
    879     } 
    880  
    881     /** 
    882      * Erases cache rules 
    883      * 
    884      * @param string $data 
    885      * @return string 
    886      */ 
    887     function erase_rules_cache($data) { 
    888         $data = w3_erase_rules($data, W3TC_MARKER_BEGIN_BROWSERCACHE_CACHE, W3TC_MARKER_END_BROWSERCACHE_CACHE); 
    889  
    890         return $data; 
    891     } 
    892  
    893     /** 
    894      * Erases no404wp rules 
    895      * 
    896      * @param string $data 
    897      * @return string 
    898      */ 
    899     function erase_rules_no404wp($data) { 
    900         $data = w3_erase_rules($data, W3TC_MARKER_BEGIN_BROWSERCACHE_NO404WP, W3TC_MARKER_END_BROWSERCACHE_NO404WP); 
    901  
    902         return $data; 
    903     } 
    904  
    905     /** 
    906      * Removes cache rules 
    907      * 
    908      * @return boolean 
    909      */ 
    910     function remove_rules_cache() { 
    911         $path = w3_get_browsercache_rules_cache_path(); 
    912  
    913         if (file_exists($path)) { 
    914             if (($data = @file_get_contents($path)) !== false) { 
    915                 $data = $this->erase_rules_cache($data); 
    916  
    917                 return @file_put_contents($path, $data); 
    918             } 
    919  
    920             return false; 
    921         } 
    922  
    923         return true; 
    924     } 
    925  
    926     /** 
    927      * Removes no404wp rules 
    928      * 
    929      * @return boolean 
    930      */ 
    931     function remove_rules_no404wp() { 
    932         $path = w3_get_browsercache_rules_no404wp_path(); 
    933  
    934         if (file_exists($path)) { 
    935             if (($data = @file_get_contents($path)) !== false) { 
    936                 $data = $this->erase_rules_no404wp($data); 
    937  
    938                 return @file_put_contents($path, $data); 
    939             } 
    940  
    941             return false; 
    942         } 
    943  
    944         return true; 
    945     } 
    946  
    947     /** 
    948      * Check cache rules 
    949      * 
    950      * @return boolean 
    951      */ 
    952     function check_rules_cache() { 
    953         $path = w3_get_browsercache_rules_cache_path(); 
    954         $search = $this->generate_rules_cache(); 
    955  
    956         return (($data = @file_get_contents($path)) && strstr(w3_clean_rules($data), w3_clean_rules($search)) !== false); 
    957     } 
    958  
    959     /** 
    960      * Check no404wp rules 
    961      * 
    962      * @return boolean 
    963      */ 
    964     function check_rules_no404wp() { 
    965         $path = w3_get_browsercache_rules_no404wp_path(); 
    966         $search = $this->generate_rules_no404wp(); 
    967  
    968         return (($data = @file_get_contents($path)) && strstr(w3_clean_rules($data), w3_clean_rules($search)) !== false); 
    969286    } 
    970287 
     
    977294        $config = array(); 
    978295 
    979         $cssjs_types = $this->get_cssjs_types(); 
    980         $html_types = $this->get_html_types(); 
    981         $other_types = $this->get_other_types(); 
     296        $cssjs_types = $this->_get_cssjs_types(); 
     297        $html_types = $this->_get_html_types(); 
     298        $other_types = $this->_get_other_types(); 
    982299 
    983300        $this->_get_cache_config($config, $cssjs_types, 'cssjs'); 
  • w3-total-cache/trunk/lib/W3/Plugin/Cdn.php

    r409551 r410604  
    88} 
    99 
     10require_once W3TC_INC_DIR . '/functions/file.php'; 
    1011require_once W3TC_LIB_W3_DIR . '/Plugin.php'; 
    1112 
     
    1415 */ 
    1516class W3_Plugin_Cdn extends W3_Plugin { 
     17 
     18    /** 
     19     * CDN reject reason 
     20     * 
     21     * @var string 
     22     */ 
     23    var $cdn_reject_reason = ''; 
     24 
    1625    /** 
    1726     * Run plugin 
    1827     */ 
    1928    function run() { 
    20         register_activation_hook(W3TC_FILE, array( 
     29        add_filter('cron_schedules', array( 
    2130            &$this, 
    22             'activate' 
     31            'cron_schedules' 
    2332        )); 
    2433 
    25         register_deactivation_hook(W3TC_FILE, array( 
    26             &$this, 
    27             'deactivate' 
     34        $cdn_engine = $this->_config->get_string('cdn.engine'); 
     35 
     36        if (!w3_is_cdn_mirror($cdn_engine)) { 
     37            add_action('add_attachment', array( 
     38                &$this, 
     39                'add_attachment' 
     40            )); 
     41 
     42            add_action('delete_attachment', array( 
     43                &$this, 
     44                'delete_attachment' 
     45            )); 
     46 
     47            add_filter('update_attached_file', array( 
     48                &$this, 
     49                'update_attached_file' 
     50            )); 
     51 
     52            add_filter('wp_generate_attachment_metadata', array( 
     53                &$this, 
     54                'generate_attachment_metadata' 
     55            )); 
     56 
     57            add_filter('wp_update_attachment_metadata', array( 
     58                &$this, 
     59                'update_attachment_metadata' 
     60            )); 
     61 
     62            add_action('w3_cdn_cron_queue_process', array( 
     63                &$this, 
     64                'cron_queue_process' 
     65            )); 
     66 
     67            add_action('w3_cdn_cron_upload', array( 
     68                &$this, 
     69                'cron_upload' 
     70            )); 
     71 
     72            add_action('switch_theme', array( 
     73                &$this, 
     74                'switch_theme' 
     75            )); 
     76 
     77            add_filter('update_feedback', array( 
     78                &$this, 
     79                'update_feedback' 
     80            )); 
     81        } 
     82 
     83        /** 
     84         * Start rewrite engine 
     85         */ 
     86        if ($this->can_cdn()) { 
     87            ob_start(array( 
     88                &$this, 
     89                'ob_callback' 
     90            )); 
     91        } 
     92    } 
     93 
     94    /** 
     95     * Instantiates worker with admin functionality on demand 
     96     * 
     97     * @return W3_Plugin_CdnAdmin 
     98     */ 
     99    function &_get_admin() { 
     100        return w3_instance('W3_Plugin_CdnAdmin'); 
     101    } 
     102 
     103    /** 
     104     * Instantiates worker with common functionality on demand 
     105     * 
     106     * @return W3_Plugin_CdnCommon 
     107     */ 
     108    function &_get_common() { 
     109        return w3_instance('W3_Plugin_CdnCommon'); 
     110    } 
     111 
     112    /** 
     113     * Activate plugin action (called by W3_PluginProxy) 
     114     */ 
     115    function activate() { 
     116        $this->_get_admin()->activate(); 
     117    } 
     118 
     119    /** 
     120     * Deactivate plugin action (called by W3_PluginProxy) 
     121     */ 
     122    function deactivate() { 
     123        $this->_get_admin()->deactivate(); 
     124    } 
     125 
     126    /** 
     127     * Cron queue process event 
     128     */ 
     129    function cron_queue_process() { 
     130        $queue_limit = $this->_config->get_integer('cdn.queue.limit'); 
     131        $this->_get_admin()->queue_process($queue_limit); 
     132    } 
     133 
     134    /** 
     135     * Cron upload event 
     136     */ 
     137    function cron_upload() { 
     138        $files = $this->get_files(); 
     139        $document_root = w3_get_document_root(); 
     140 
     141        $upload = array(); 
     142        $results = array(); 
     143 
     144        foreach ($files as $file) { 
     145            $upload[$document_root . '/' . $file] = $file; 
     146        } 
     147 
     148        $this->_get_common()->upload($upload, true, $results); 
     149    } 
     150 
     151    /** 
     152     * On attachment add action 
     153     * 
     154     * Upload _wp_attached_file 
     155     * 
     156     * @param integer $attachment_id 
     157     * @return void 
     158     */ 
     159    function add_attachment($attachment_id) { 
     160        $attached_file = get_post_meta($attachment_id, '_wp_attached_file', true); 
     161 
     162        $files = $this->_get_common()->get_files_for_upload($attached_file); 
     163        $files = apply_filters('w3tc_cdn_add_attachment', $files); 
     164 
     165        $results = array(); 
     166 
     167        $this->_get_common()->upload($files, true, $results); 
     168    } 
     169 
     170    /** 
     171     * Update attachment file 
     172     * 
     173     * Upload _wp_attached_file 
     174     * 
     175     * @param string $attached_file 
     176     * @return string 
     177     */ 
     178    function update_attached_file($attached_file) { 
     179        $files = $this->_get_common()->get_files_for_upload($attached_file); 
     180        $files = apply_filters('w3tc_cdn_update_attachment', $files); 
     181 
     182        $results = array(); 
     183 
     184        $this->_get_common()->upload($files, true, $results); 
     185 
     186        return $attached_file; 
     187    } 
     188 
     189    /** 
     190     * On attachment delete action 
     191     * 
     192     * Delete _wp_attached_file, _wp_attachment_metadata, _wp_attachment_backup_sizes 
     193     * 
     194     * @param integer $attachment_id 
     195     */ 
     196    function delete_attachment($attachment_id) { 
     197        $files = $this->_get_common()->get_attachment_files($attachment_id); 
     198        $files = apply_filters('w3tc_cdn_delete_attachment', $files); 
     199 
     200        $results = array(); 
     201 
     202        $this->_get_common()->delete($files, true, $results); 
     203    } 
     204 
     205    /** 
     206     * Generate attachment metadata filter 
     207     * 
     208     * Upload _wp_attachment_metadata 
     209     * 
     210     * @param array $metadata 
     211     * @return array 
     212     */ 
     213    function generate_attachment_metadata($metadata) { 
     214        $files = $this->_get_common()->get_metadata_files($metadata); 
     215        $files = apply_filters('w3tc_cdn_generate_attachment_metadata', $files); 
     216 
     217        $results = array(); 
     218 
     219        $this->_get_common()->upload($files, true, $results); 
     220 
     221        return $metadata; 
     222    } 
     223 
     224    /** 
     225     * Update attachment metadata filter 
     226     * 
     227     * Upload _wp_attachment_metadata 
     228     * 
     229     * @param array $metadata 
     230     * @return array 
     231     */ 
     232    function update_attachment_metadata($metadata) { 
     233        $files = $this->_get_common()->get_metadata_files($metadata); 
     234        $files = apply_filters('w3tc_cdn_update_attachment_metadata', $files); 
     235 
     236        $results = array(); 
     237 
     238        $this->_get_common()->upload($files, true, $results); 
     239 
     240        return $metadata; 
     241    } 
     242 
     243    /** 
     244     * Cron schedules filter 
     245     * 
     246     * @param array $schedules 
     247     * @return array 
     248     */ 
     249    function cron_schedules($schedules) { 
     250        $queue_interval = $this->_config->get_integer('cdn.queue.interval'); 
     251        $autoupload_interval = $this->_config->get_integer('cdn.autoupload.interval'); 
     252 
     253        return array_merge($schedules, array( 
     254            'w3_cdn_cron_queue_process' => array( 
     255                'interval' => $queue_interval, 
     256                'display' => sprintf('[W3TC] CDN queue process (every %d seconds)', $queue_interval) 
     257            ), 
     258            'w3_cdn_cron_upload' => array( 
     259                'interval' => $autoupload_interval, 
     260                'display' => sprintf('[W3TC] CDN auto upload (every %d seconds)', $autoupload_interval) 
     261            ) 
    28262        )); 
    29  
    30         if ($this->_config->get_boolean('cdn.enabled')) { 
    31             $this->get_worker()->run(); 
    32         } 
    33     } 
    34  
    35     /** 
    36      * Instantiates worker on demand 
    37      * 
    38      * @return W3_Plugin_CdnEnabled 
    39      */ 
    40     function &get_worker() { 
    41         return w3_instance('/Plugin/CdnEnabled.php'); 
    42     } 
    43  
    44     /** 
    45      * Activation action 
    46      */ 
    47     function activate() { 
    48         $this->get_worker()->activate(); 
    49     } 
    50  
    51     /** 
    52      * Deactivation action 
    53      */ 
    54     function deactivate() { 
    55         $this->get_worker()->deactivate(); 
     263    } 
     264 
     265    /** 
     266     * Switch theme action 
     267     */ 
     268    function switch_theme() { 
     269        $this->_config->set('notes.theme_changed', true); 
     270        $this->_config->save(); 
     271    } 
     272 
     273    /** 
     274     * WP Upgrade action hack 
     275     * 
     276     * @param string $message 
     277     */ 
     278    function update_feedback($message) { 
     279        if ($message == __('Upgrading database')) { 
     280            $this->_config->set('notes.wp_upgraded', true); 
     281            $this->_config->save(); 
     282        } 
     283    } 
     284 
     285    /** 
     286     * OB Callback 
     287     * 
     288     * @param string $buffer 
     289     * @return string 
     290     */ 
     291    function ob_callback(&$buffer) { 
     292        if ($buffer != '' && w3_is_xml($buffer)) { 
     293            if ($this->can_cdn2($buffer)) { 
     294                $regexps = array(); 
     295                $site_path = w3_get_site_path(); 
     296                $domain_url_regexp = w3_get_domain_url_regexp(); 
     297 
     298                if ($this->_config->get_boolean('cdn.uploads.enable')) { 
     299                    $upload_info = w3_upload_info(); 
     300 
     301                    if ($upload_info) { 
     302                        if (preg_match('~' . $domain_url_regexp . '~i', $upload_info['baseurl'])) { 
     303                            $regexps[] = '~(["\'])((' . $domain_url_regexp . ')?(' . w3_preg_quote($upload_info['baseurlpath']) . '([^"\'>]+)))~'; 
     304                        } else { 
     305                            $regexps[] = '~(["\'])((' . w3_preg_quote($upload_info['baseurl']) . ')(([^"\'>]+)))~'; 
     306                        } 
     307                    } 
     308                } 
     309 
     310                if ($this->_config->get_boolean('cdn.includes.enable')) { 
     311                    $mask = $this->_config->get_string('cdn.includes.files'); 
     312                    if ($mask != '') { 
     313                        $regexps[] = '~(["\'])((' . $domain_url_regexp . ')?(' . w3_preg_quote($site_path . WPINC) . '/(' . $this->get_regexp_by_mask($mask) . ')))~'; 
     314                    } 
     315                } 
     316 
     317                if ($this->_config->get_boolean('cdn.theme.enable')) { 
     318                    $theme_dir = preg_replace('~' . $domain_url_regexp . '~i', '', get_theme_root_uri()); 
     319 
     320                    $mask = $this->_config->get_string('cdn.theme.files'); 
     321 
     322                    if ($mask != '') { 
     323                        $regexps[] = '~(["\'])((' . $domain_url_regexp . ')?(' . w3_preg_quote($theme_dir) . '/(' . $this->get_regexp_by_mask($mask) . ')))~'; 
     324                    } 
     325                } 
     326 
     327                if ($this->_config->get_boolean('cdn.minify.enable')) { 
     328                    if ($this->_config->get_boolean('minify.auto')) { 
     329                        $regexps[] = '~(["\'])((' . $domain_url_regexp . ')?(' . w3_preg_quote($site_path . W3TC_CONTENT_MINIFY_DIR_NAME) . '/[a-f0-9]+\.[a-f0-9]+\.(css|js)))~U'; 
     330                    } else { 
     331                        $regexps[] = '~(["\'])((' . $domain_url_regexp . ')?(' . w3_preg_quote($site_path . W3TC_CONTENT_MINIFY_DIR_NAME) . '/[a-f0-9]+/.+\.include(-(footer|body))?(-nb)?\.[a-f0-9]+\.(css|js)))~U'; 
     332                    } 
     333                } 
     334 
     335                if ($this->_config->get_boolean('cdn.custom.enable')) { 
     336                    $masks = $this->_config->get_array('cdn.custom.files'); 
     337                    $masks = array_map('w3_parse_path', $masks); 
     338 
     339                    if (count($masks)) { 
     340                        $mask_regexps = array(); 
     341 
     342                        foreach ($masks as $mask) { 
     343                            if ($mask != '') { 
     344                                $mask = w3_normalize_file($mask); 
     345                                $mask_regexps[] = $this->get_regexp_by_mask($mask); 
     346                            } 
     347                        } 
     348 
     349                        $regexps[] = '~(["\'])((' . $domain_url_regexp . ')?(' . w3_preg_quote($site_path) . '(' . implode('|', $mask_regexps) . ')))~i'; 
     350                    } 
     351                } 
     352 
     353                foreach ($regexps as $regexp) { 
     354                    $buffer = preg_replace_callback($regexp, array( 
     355                        &$this, 
     356                        'link_replace_callback' 
     357                    ), $buffer); 
     358                } 
     359            } 
     360 
     361            if ($this->_config->get_boolean('cdn.debug')) { 
     362                $buffer .= "\r\n\r\n" . $this->get_debug_info(); 
     363            } 
     364        } 
     365 
     366        return $buffer; 
     367    } 
     368 
     369    /** 
     370     * Returns array of files to upload 
     371     * 
     372     * @return array 
     373     */ 
     374    function get_files() { 
     375        $files = array(); 
     376 
     377        if ($this->_config->get_boolean('cdn.includes.enable')) { 
     378            $files = array_merge($files, $this->get_files_includes()); 
     379        } 
     380 
     381        if ($this->_config->get_boolean('cdn.theme.enable')) { 
     382            $files = array_merge($files, $this->get_files_theme()); 
     383        } 
     384 
     385        if ($this->_config->get_boolean('cdn.minify.enable')) { 
     386            $files = array_merge($files, $this->get_files_minify()); 
     387        } 
     388 
     389        if ($this->_config->get_boolean('cdn.custom.enable')) { 
     390            $files = array_merge($files, $this->get_files_custom()); 
     391        } 
     392 
     393        return $files; 
     394    } 
     395 
     396    /** 
     397     * Exports includes to CDN 
     398     * 
     399     * @return array 
     400     */ 
     401    function get_files_includes() { 
     402        $includes_root = w3_path(ABSPATH . WPINC); 
     403        $site_root = w3_get_site_root(); 
     404        $includes_path = ltrim(str_replace($site_root, rtrim(w3_get_site_path(), '/'), $includes_root), '/'); 
     405 
     406        $files = $this->search_files($includes_root, $includes_path, $this->_config->get_string('cdn.includes.files')); 
     407 
     408        return $files; 
     409    } 
     410 
     411    /** 
     412     * Exports theme to CDN 
     413     * 
     414     * @return array 
     415     */ 
     416    function get_files_theme() { 
     417        /** 
     418         * If mobile or referrer support enabled 
     419         * we should upload whole themes directory 
     420         */ 
     421        if ($this->_config->get_boolean('mobile.enabled') || $this->_config->get_boolean('referrer.enabled')) { 
     422            $themes_root = get_theme_root(); 
     423        } else { 
     424            $themes_root = get_stylesheet_directory(); 
     425        } 
     426 
     427        $themes_root = w3_path($themes_root); 
     428        $site_root = w3_get_site_root(); 
     429        $themes_path = ltrim(str_replace($site_root, rtrim(w3_get_site_path(), '/'), $themes_root), '/'); 
     430 
     431        $files = $this->search_files($themes_root, $themes_path, $this->_config->get_string('cdn.theme.files')); 
     432 
     433        return $files; 
     434    } 
     435 
     436    /** 
     437     * Exports min files to CDN 
     438     * 
     439     * @return array 
     440     */ 
     441    function get_files_minify() { 
     442        $files = array(); 
     443 
     444        if (W3TC_PHP5 && $this->_config->get_boolean('minify.rewrite') && (!$this->_config->get_boolean('minify.auto') || w3_is_cdn_mirror($this->_config->get_string('cdn.engine')))) { 
     445            require_once W3TC_INC_DIR . '/functions/http.php'; 
     446 
     447            $minify = & w3_instance('W3_Plugin_Minify'); 
     448 
     449            $document_root = w3_get_document_root(); 
     450            $site_root = w3_get_site_root(); 
     451            $minify_root = w3_path(W3TC_CACHE_FILE_MINIFY_DIR); 
     452            $minify_path = ltrim(str_replace($site_root, rtrim(w3_get_site_path(), '/'), $minify_root), '/'); 
     453 
     454            $urls = $minify->get_urls(); 
     455 
     456            if ($this->_config->get_string('minify.engine') == 'file') { 
     457                foreach ($urls as $url) { 
     458                    w3_http_get($url); 
     459                } 
     460 
     461                $files = $this->search_files($minify_root, $minify_path, '*.css;*.js'); 
     462            } else { 
     463                foreach ($urls as $url) { 
     464                    $file = w3_normalize_file_minify($url); 
     465                    $file = w3_translate_file($file); 
     466 
     467                    if (!w3_is_url($file)) { 
     468                        $file = $document_root . '/' . $file; 
     469                        $file = ltrim(str_replace($minify_root, '', $file), '/'); 
     470 
     471                        $dir = dirname($file); 
     472 
     473                        if ($dir) { 
     474                            w3_mkdir($dir, 0777, $minify_root); 
     475                        } 
     476 
     477                        if (w3_download($url, $minify_root . '/' . $file) !== false) { 
     478                            $files[] = $minify_path . '/' . $file; 
     479                        } 
     480                    } 
     481                } 
     482            } 
     483        } 
     484 
     485        return $files; 
     486    } 
     487 
     488    /** 
     489     * Exports custom files to CDN 
     490     * 
     491     * @return array 
     492     */ 
     493    function get_files_custom() { 
     494        $files = array(); 
     495        $document_root = w3_get_document_root(); 
     496        $custom_files = $this->_config->get_array('cdn.custom.files'); 
     497        $custom_files = array_map('w3_parse_path', $custom_files); 
     498 
     499        foreach ($custom_files as $custom_file) { 
     500            if ($custom_file != '') { 
     501                $custom_file = w3_normalize_file($custom_file); 
     502                $dir = trim(dirname($custom_file), '/\\'); 
     503 
     504                if ($dir == '.') { 
     505                    $dir = ''; 
     506                } 
     507 
     508                $mask = basename($custom_file); 
     509                $files = array_merge($files, $this->search_files($document_root . '/' . $dir, $dir, $mask)); 
     510            } 
     511        } 
     512 
     513        return $files; 
     514    } 
     515 
     516    /** 
     517     * Link replace callback 
     518     * 
     519     * @param array $matches 
     520     * @return string 
     521     */ 
     522    function link_replace_callback($matches) { 
     523        global $wpdb; 
     524        static $queue = null, $reject_files = null; 
     525 
     526        list($match, $quote, $url, , , , $path) = $matches; 
     527 
     528        $path = ltrim($path, '/'); 
     529 
     530        /** 
     531         * Check if URL was already replaced 
     532         */ 
     533        if (isset($this->replaced_urls[$url])) { 
     534            return $quote . $this->replaced_urls[$url]; 
     535        } 
     536 
     537        /** 
     538         * Check URL for rejected files 
     539         */ 
     540        if ($reject_files === null) { 
     541            $reject_files = $this->_config->get_array('cdn.reject.files'); 
     542        } 
     543 
     544        foreach ($reject_files as $reject_file) { 
     545            if ($reject_file != '') { 
     546                $reject_file = w3_normalize_file($reject_file); 
     547                $reject_file_regexp = '~^(' . $this->get_regexp_by_mask($reject_file) . ')~i'; 
     548 
     549                if (preg_match($reject_file_regexp, $path)) { 
     550                    return $match; 
     551                } 
     552            } 
     553        } 
     554 
     555        /** 
     556         * Don't replace URL for files that are in the CDN queue 
     557         */ 
     558        if ($queue === null) { 
     559            if (!w3_is_cdn_mirror($this->_config->get_string('cdn.engine'))) { 
     560                $sql = sprintf('SELECT remote_path FROM %s', $wpdb->prefix . W3TC_CDN_TABLE_QUEUE); 
     561                $queue = $wpdb->get_col($sql); 
     562            } else { 
     563                $queue = false; 
     564            } 
     565        } 
     566 
     567        if ($queue && in_array($path, $queue)) { 
     568            return $match; 
     569        } 
     570 
     571        /** 
     572         * Do replacement 
     573         */ 
     574        $cdn = & $this->_get_common()->get_cdn(); 
     575 
     576        $new_url = $cdn->format_url($path); 
     577 
     578        if ($new_url) { 
     579            $this->replaced_urls[$url] = $new_url; 
     580 
     581            return $quote . $new_url; 
     582        } 
     583 
     584        return $match; 
     585    } 
     586 
     587    /** 
     588     * Search files 
     589     * 
     590     * @param string $search_dir 
     591     * @param string $base_dir 
     592     * @param string $mask 
     593     * @param boolean $recursive 
     594     * @return array 
     595     */ 
     596    function search_files($search_dir, $base_dir, $mask = '*.*', $recursive = true) { 
     597        static $stack = array(); 
     598        $files = array(); 
     599        $ignore = array( 
     600            '.svn', 
     601            '.git', 
     602            '.DS_Store', 
     603            'CVS', 
     604            'Thumbs.db', 
     605            'desktop.ini' 
     606        ); 
     607 
     608        $dir = @opendir($search_dir); 
     609 
     610        if ($dir) { 
     611            while (($entry = @readdir($dir)) !== false) { 
     612                if ($entry != '.' && $entry != '..' && !in_array($entry, $ignore)) { 
     613                    $path = $search_dir . '/' . $entry; 
     614 
     615                    if (@is_dir($path) && $recursive) { 
     616                        array_push($stack, $entry); 
     617                        $files = array_merge($files, $this->search_files($path, $base_dir, $mask, $recursive)); 
     618                        array_pop($stack); 
     619                    } else { 
     620                        $regexp = '~^(' . $this->get_regexp_by_mask($mask) . ')$~i'; 
     621 
     622                        if (preg_match($regexp, $entry)) { 
     623                            $files[] = ($base_dir != '' ? $base_dir . '/' : '') . (($p = implode('/', $stack)) != '' ? $p . '/' : '') . $entry; 
     624                        } 
     625                    } 
     626                } 
     627            } 
     628 
     629            @closedir($dir); 
     630        } 
     631 
     632        return $files; 
     633    } 
     634 
     635    /** 
     636     * Returns regexp by mask 
     637     * 
     638     * @param string $mask 
     639     * @return string 
     640     */ 
     641    function get_regexp_by_mask($mask) { 
     642        $mask = trim($mask); 
     643        $mask = w3_preg_quote($mask); 
     644 
     645        $mask = str_replace(array( 
     646            '\*', 
     647            '\?', 
     648            ';' 
     649        ), array( 
     650            '@ASTERISK@', 
     651            '@QUESTION@', 
     652            '|' 
     653        ), $mask); 
     654 
     655        $regexp = str_replace(array( 
     656            '@ASTERISK@', 
     657            '@QUESTION@' 
     658        ), array( 
     659            '[^\\?\\*:\\|"<>]*', 
     660            '[^\\?\\*:\\|"<>]' 
     661        ), $mask); 
     662 
     663        return $regexp; 
     664    } 
     665 
     666    /** 
     667     * Returns debug info 
     668     * 
     669     * @return string 
     670     */ 
     671    function get_debug_info() { 
     672        $debug_info = "<!-- W3 Total Cache: CDN debug info:\r\n"; 
     673        $debug_info .= sprintf("%s%s\r\n", str_pad('Engine: ', 20), $this->_config->get_string('cdn.engine')); 
     674 
     675        if ($this->cdn_reject_reason) { 
     676            $debug_info .= sprintf("%s%s\r\n", str_pad('Reject reason: ', 20), $this->cdn_reject_reason); 
     677        } 
     678 
     679        if (count($this->replaced_urls)) { 
     680            $debug_info .= "\r\nReplaced URLs:\r\n"; 
     681 
     682            foreach ($this->replaced_urls as $old_url => $new_url) { 
     683                $debug_info .= sprintf("%s => %s\r\n", w3_escape_comment($old_url), w3_escape_comment($new_url)); 
     684            } 
     685        } 
     686 
     687        $debug_info .= '-->'; 
     688 
     689        return $debug_info; 
     690    } 
     691 
     692    /** 
     693     * Check if we can do CDN logic 
     694     * @return boolean 
     695     */ 
     696    function can_cdn() { 
     697        /** 
     698         * Skip if admin 
     699         */ 
     700        if (defined('WP_ADMIN')) { 
     701            $this->cdn_reject_reason = 'wp-admin'; 
     702 
     703            return false; 
     704        } 
     705 
     706        /** 
     707         * Check for WPMU's and WP's 3.0 short init 
     708         */ 
     709        if (defined('SHORTINIT') && SHORTINIT) { 
     710            $this->cdn_reject_reason = 'Short init'; 
     711 
     712            return false; 
     713        } 
     714 
     715        /** 
     716         * Check User agent 
     717         */ 
     718        if (!$this->check_ua()) { 
     719            $this->cdn_reject_reason = 'user agent is rejected'; 
     720 
     721            return false; 
     722        } 
     723 
     724        /** 
     725         * Check request URI 
     726         */ 
     727        if (!$this->check_request_uri()) { 
     728            $this->cdn_reject_reason = 'request URI is rejected'; 
     729 
     730            return false; 
     731        } 
     732 
     733        return true; 
     734    } 
     735 
     736    /** 
     737     * Returns true if we can do CDN logic 
     738     * 
     739     * @param $buffer 
     740     * @return string 
     741     */ 
     742    function can_cdn2(&$buffer) { 
     743        /** 
     744         * Check for database error 
     745         */ 
     746        if (w3_is_database_error($buffer)) { 
     747            $this->cdn_reject_reason = 'Database Error occurred'; 
     748 
     749            return false; 
     750        } 
     751 
     752        /** 
     753         * Check for DONOTCDN constant 
     754         */ 
     755        if (defined('DONOTCDN') && DONOTCDN) { 
     756            $this->cdn_reject_reason = 'DONOTCDN constant is defined'; 
     757 
     758            return false; 
     759        } 
     760 
     761        /** 
     762         * Check logged in admin 
     763         */ 
     764        if ($this->_config->get_boolean('cdn.reject.admins') && current_user_can('manage_options')) { 
     765            $this->cdn_reject_reason = 'logged in admin is rejected'; 
     766 
     767            return false; 
     768        } 
     769 
     770        return true; 
     771    } 
     772 
     773    /** 
     774     * Checks User Agent 
     775     * 
     776     * @return boolean 
     777     */ 
     778    function check_ua() { 
     779        $uas = array_merge($this->_config->get_array('cdn.reject.ua'), array( 
     780            W3TC_POWERED_BY 
     781        )); 
     782 
     783        foreach ($uas as $ua) { 
     784            if (isset($_SERVER['HTTP_USER_AGENT']) && stristr($_SERVER['HTTP_USER_AGENT'], $ua) !== false) { 
     785                return false; 
     786            } 
     787        } 
     788 
     789        return true; 
     790    } 
     791 
     792    /** 
     793     * Checks request URI 
     794     * 
     795     * @return boolean 
     796     */ 
     797    function check_request_uri() { 
     798        $auto_reject_uri = array( 
     799            'wp-login', 
     800            'wp-register' 
     801        ); 
     802 
     803        foreach ($auto_reject_uri as $uri) { 
     804            if (strstr($_SERVER['REQUEST_URI'], $uri) !== false) { 
     805                return false; 
     806            } 
     807        } 
     808 
     809        $reject_uri = $this->_config->get_array('cdn.reject.uri'); 
     810        $reject_uri = array_map('w3_parse_path', $reject_uri); 
     811 
     812        foreach ($reject_uri as $expr) { 
     813            $expr = trim($expr); 
     814            if ($expr != '' && preg_match('~' . $expr . '~i', $_SERVER['REQUEST_URI'])) { 
     815                return false; 
     816            } 
     817        } 
     818 
     819        return true; 
    56820    } 
    57821} 
  • w3-total-cache/trunk/lib/W3/Plugin/DbCache.php

    r409551 r410604  
    1818     */ 
    1919    function run() { 
    20         register_activation_hook(W3TC_FILE, array( 
    21             &$this, 
    22             'activate' 
    23         )); 
    24  
    25         register_deactivation_hook(W3TC_FILE, array( 
    26             &$this, 
    27             'deactivate' 
    28         )); 
    29  
    3020        add_filter('cron_schedules', array( 
    3121            &$this, 
     
    3323        )); 
    3424 
    35         if ($this->_config->get_boolean('dbcache.enabled')) { 
    36             if ($this->_config->get_string('dbcache.engine') == 'file') { 
    37                 add_action('w3_dbcache_cleanup', array( 
    38                     &$this, 
    39                     'cleanup' 
    40                 )); 
    41             } 
     25        if ($this->_config->get_string('dbcache.engine') == 'file') { 
     26            add_action('w3_dbcache_cleanup', array( 
     27                &$this, 
     28                'cleanup' 
     29            )); 
     30        } 
    4231 
    43             add_action('publish_phone', array( 
    44                 &$this, 
    45                 'on_change' 
    46             ), 0); 
     32        add_action('publish_phone', array( 
     33            &$this, 
     34            'on_change' 
     35        ), 0); 
    4736 
    48             add_action('publish_post', array( 
    49                 &$this, 
    50                 'on_change' 
    51             ), 0); 
     37        add_action('publish_post', array( 
     38            &$this, 
     39            'on_change' 
     40        ), 0); 
    5241 
    53             add_action('edit_post', array( 
    54                 &$this, 
    55                 'on_change' 
    56             ), 0); 
     42        add_action('edit_post', array( 
     43            &$this, 
     44            'on_change' 
     45        ), 0); 
    5746 
    58             add_action('delete_post', array( 
    59                 &$this, 
    60                 'on_change' 
    61             ), 0); 
     47        add_action('delete_post', array( 
     48            &$this, 
     49            'on_change' 
     50        ), 0); 
    6251 
    63             add_action('comment_post', array( 
    64                 &$this, 
    65                 'on_change' 
    66             ), 0); 
     52        add_action('comment_post', array( 
     53            &$this, 
     54            'on_change' 
     55        ), 0); 
    6756 
    68             add_action('edit_comment', array( 
    69                 &$this, 
    70                 'on_change' 
    71             ), 0); 
     57        add_action('edit_comment', array( 
     58            &$this, 
     59            'on_change' 
     60        ), 0); 
    7261 
    73             add_action('delete_comment', array( 
    74                 &$this, 
    75                 'on_change' 
    76             ), 0); 
     62        add_action('delete_comment', array( 
     63            &$this, 
     64            'on_change' 
     65        ), 0); 
    7766 
    78             add_action('wp_set_comment_status', array( 
    79                 &$this, 
    80                 'on_change' 
    81             ), 0); 
     67        add_action('wp_set_comment_status', array( 
     68            &$this, 
     69            'on_change' 
     70        ), 0); 
    8271 
    83             add_action('trackback_post', array( 
    84                 &$this, 
    85                 'on_change' 
    86             ), 0); 
     72        add_action('trackback_post', array( 
     73            &$this, 
     74            'on_change' 
     75        ), 0); 
    8776 
    88             add_action('pingback_post', array( 
    89                 &$this, 
    90                 'on_change' 
    91             ), 0); 
     77        add_action('pingback_post', array( 
     78            &$this, 
     79            'on_change' 
     80        ), 0); 
    9281 
    93             add_action('switch_theme', array( 
    94                 &$this, 
    95                 'on_change' 
    96             ), 0); 
     82        add_action('switch_theme', array( 
     83            &$this, 
     84            'on_change' 
     85        ), 0); 
    9786 
    98             add_action('edit_user_profile_update', array( 
    99                 &$this, 
    100                 'on_change' 
    101             ), 0); 
    102         } 
     87        add_action('edit_user_profile_update', array( 
     88            &$this, 
     89            'on_change' 
     90        ), 0); 
    10391    } 
    10492 
    10593    /** 
    106      * Activate plugin action 
     94     * Activate plugin action (called by W3_PluginProxy) 
    10795     */ 
    10896    function activate() { 
    10997        require_once W3TC_INC_DIR . '/functions/activation.php'; 
    110  
     98         
    11199        if (!$this->locked() && !@copy(W3TC_INSTALL_FILE_DB, W3TC_ADDIN_FILE_DB)) { 
    112100            w3_writable_error(W3TC_ADDIN_FILE_DB); 
    113101        } 
    114  
     102         
    115103        $this->schedule(); 
    116104    } 
    117  
     105     
    118106    /** 
    119      * Deactivate plugin action 
     107     * Deactivate plugin action (called by W3_PluginProxy) 
    120108     */ 
    121109    function deactivate() { 
    122110        $this->unschedule(); 
    123  
     111         
    124112        if (!$this->locked()) { 
    125113            @unlink(W3TC_ADDIN_FILE_DB); 
    126114        } 
    127115    } 
    128  
     116     
    129117    /** 
    130118     * Schedules events 
     
    139127        } 
    140128    } 
    141  
     129     
    142130    /** 
    143131     * Unschedules events 
     
    148136        } 
    149137    } 
    150  
     138     
    151139    /** 
    152140     * Does disk cache cleanup 
     
    156144    function cleanup() { 
    157145        require_once W3TC_LIB_W3_DIR . '/Cache/File/Cleaner.php'; 
    158  
     146         
    159147        $w3_cache_file_cleaner = & new W3_Cache_File_Cleaner(array( 
    160148            'cache_dir' => W3TC_CACHE_FILE_DBCACHE_DIR, 
    161149            'clean_timelimit' => $this->_config->get_integer('timelimit.cache_gc') 
    162150        )); 
    163  
     151         
    164152        $w3_cache_file_cleaner->clean(); 
    165153    } 
    166  
     154     
    167155    /** 
    168156     * Cron schedules filter 
  • w3-total-cache/trunk/lib/W3/Plugin/Minify.php

    r409551 r410604  
    1515class W3_Plugin_Minify extends W3_Plugin { 
    1616    /** 
    17      * Run plugin 
     17     * Minify reject reason 
     18     * 
     19     * @var string 
     20     */ 
     21    var $minify_reject_reason = ''; 
     22 
     23    /** 
     24     * Error 
     25     * 
     26     * @var string 
     27     */ 
     28    var $error = ''; 
     29 
     30    /** 
     31     * Array of printed styles 
     32     * 
     33     * @var array 
     34     */ 
     35    var $printed_styles = array(); 
     36 
     37    /** 
     38     * Array of printed scripts 
     39     * 
     40     * @var array 
     41     */ 
     42    var $printed_scripts = array(); 
     43 
     44    /** 
     45     * Array of replaced styles 
     46     * 
     47     * @var array 
     48     */ 
     49    var $replaced_styles = array(); 
     50 
     51    /** 
     52     * Array of replaced scripts 
     53     * 
     54     * @var array 
     55     */ 
     56    var $replaced_scripts = array(); 
     57 
     58    /** 
     59     * Runs plugin 
    1860     */ 
    1961    function run() { 
    20         register_activation_hook(W3TC_FILE, array( 
     62        add_filter('cron_schedules', array( 
    2163            &$this, 
    22             'activate' 
     64            'cron_schedules' 
    2365        )); 
    2466 
    25         register_deactivation_hook(W3TC_FILE, array( 
    26             &$this, 
    27             'deactivate' 
     67        if ($this->_config->get_string('minify.engine') == 'file') { 
     68            add_action('w3_minify_cleanup', array( 
     69                &$this, 
     70                'cleanup' 
     71            )); 
     72        } 
     73 
     74        /** 
     75         * Start minify 
     76         */ 
     77        if ($this->can_minify()) { 
     78            ob_start(array( 
     79                &$this, 
     80                'ob_callback' 
     81            )); 
     82        } 
     83    } 
     84 
     85    /** 
     86     * Instantiates worker with admin functionality on demand 
     87     * 
     88     * @return W3_Plugin_MinifyAdmin 
     89     */ 
     90    function &get_admin() { 
     91        return w3_instance('W3_Plugin_MinifyAdmin'); 
     92    } 
     93 
     94    /** 
     95     * Activate plugin action (called by W3_PluginProxy) 
     96     */ 
     97    function activate() { 
     98        $this->get_admin()->activate(); 
     99    } 
     100 
     101    /** 
     102     * Deactivate plugin action (called by W3_PluginProxy) 
     103     */ 
     104    function deactivate() { 
     105        $this->get_admin()->deactivate(); 
     106    } 
     107 
     108     /** 
     109     * Does disk cache cleanup 
     110     * 
     111     * @return void 
     112     */ 
     113    function cleanup() { 
     114        $this->get_admin()->cleanup(); 
     115    } 
     116 
     117    /** 
     118     * Cron schedules filter 
     119     * 
     120     * @param array $schedules 
     121     * @return array 
     122     */ 
     123    function cron_schedules($schedules) { 
     124        $gc = $this->_config->get_integer('minify.file.gc'); 
     125 
     126        return array_merge($schedules, array( 
     127            'w3_minify_cleanup' => array( 
     128                'interval' => $gc, 
     129                'display' => sprintf('[W3TC] Minify file GC (every %d seconds)', $gc) 
     130            ) 
    28131        )); 
    29  
    30         if ($this->_config->get_boolean('minify.enabled')) { 
    31             $this->get_worker()->run(); 
    32         } 
    33     } 
    34  
    35     /** 
    36      * Instantiates worker on demand 
    37      * 
    38      * @return W3_Plugin_MinifyEnabled 
    39      */ 
    40     function &get_worker() { 
    41         return w3_instance('/Plugin/MinifyEnabled.php'); 
    42     } 
    43  
    44     /** 
    45      * Activation action 
    46      */ 
    47     function activate() { 
    48         $this->get_worker()->activate(); 
    49     } 
    50  
    51     /** 
    52      * Deactivation action 
    53      */ 
    54     function deactivate() { 
    55         $this->get_worker()->deactivate(); 
     132    } 
     133 
     134    /** 
     135     * OB callback 
     136     * 
     137     * @param string $buffer 
     138     * @return string 
     139     */ 
     140    function ob_callback(&$buffer) { 
     141        if ($buffer != '' && w3_is_xml($buffer)) { 
     142            if ($this->can_minify2($buffer)) { 
     143                /** 
     144                 * Replace script and style tags 
     145                 */ 
     146                if (function_exists('is_feed') && !is_feed()) { 
     147                    $head_prepend = ''; 
     148                    $body_prepend = ''; 
     149                    $body_append = ''; 
     150 
     151                    if ($this->_config->get_boolean('minify.auto')) { 
     152                        if ($this->_config->get_boolean('minify.css.enable')) { 
     153                            $files_css = $this->get_files_css($buffer); 
     154                            $style = $this->get_style_custom($files_css); 
     155 
     156                            if ($style) { 
     157                                $head_prepend .= $style; 
     158                                $this->remove_styles($buffer, $files_css); 
     159                            } 
     160                        } 
     161 
     162                        if ($this->_config->get_boolean('minify.js.enable')) { 
     163                            $files_js = $this->get_files_js($buffer); 
     164                            $script = $this->get_script_custom($files_js); 
     165 
     166                            if ($script) { 
     167                                $head_prepend .= $script; 
     168                                $this->remove_scripts($buffer, $files_js); 
     169                            } 
     170                        } 
     171                    } else { 
     172                        if ($this->_config->get_boolean('minify.css.enable') && !in_array('include', $this->printed_styles)) { 
     173                            $style = $this->get_style_group('include'); 
     174 
     175                            if ($style) { 
     176                                $head_prepend .= $style; 
     177                                $this->remove_styles_group($buffer, 'include'); 
     178                            } 
     179                        } 
     180 
     181                        if ($this->_config->get_boolean('minify.js.enable')) { 
     182                            if (!in_array('include', $this->printed_scripts)) { 
     183                                $script = $this->get_script_group('include'); 
     184 
     185                                if ($script) { 
     186                                    $head_prepend .= $script; 
     187                                    $this->remove_scripts_group($buffer, 'include'); 
     188                                } 
     189                            } 
     190 
     191                            if (!in_array('include-nb', $this->printed_scripts)) { 
     192                                $script = $this->get_script_group('include-nb'); 
     193 
     194                                if ($script) { 
     195                                    $head_prepend .= $script; 
     196                                    $this->remove_scripts_group($buffer, 'include-nb'); 
     197                                } 
     198                            } 
     199 
     200                            if (!in_array('include-body', $this->printed_scripts)) { 
     201                                $script = $this->get_script_group('include-body'); 
     202 
     203                                if ($script) { 
     204                                    $body_prepend .= $script; 
     205                                    $this->remove_scripts_group($buffer, 'include-body'); 
     206                                } 
     207                            } 
     208 
     209                            if (!in_array('include-body-nb', $this->printed_scripts)) { 
     210                                $script = $this->get_script_group('include-body-nb'); 
     211 
     212                                if ($script) { 
     213                                    $body_prepend .= $script; 
     214                                    $this->remove_scripts_group($buffer, 'include-body-nb'); 
     215                                } 
     216                            } 
     217 
     218                            if (!in_array('include-footer', $this->printed_scripts)) { 
     219                                $script = $this->get_script_group('include-footer'); 
     220 
     221                                if ($script) { 
     222                                    $body_append .= $script; 
     223                                    $this->remove_scripts_group($buffer, 'include-footer'); 
     224                                } 
     225                            } 
     226 
     227                            if (!in_array('include-footer-nb', $this->printed_scripts)) { 
     228                                $script = $this->get_script_group('include-footer-nb'); 
     229 
     230                                if ($script) { 
     231                                    $body_append .= $script; 
     232                                    $this->remove_scripts_group($buffer, 'include-footer-nb'); 
     233                                } 
     234                            } 
     235                        } 
     236                    } 
     237 
     238                    if ($head_prepend != '') { 
     239                        $buffer = preg_replace('~<head(\s+[^<>]+)*>~Ui', '\\0' . $head_prepend, $buffer, 1); 
     240                    } 
     241 
     242                    if ($body_prepend != '') { 
     243                        $buffer = preg_replace('~<body(\s+[^<>]+)*>~Ui', '\\0' . $body_prepend, $buffer, 1); 
     244                    } 
     245 
     246                    if ($body_append != '') { 
     247                        $buffer = preg_replace('~<\\/body>~', $body_append . '\\0', $buffer, 1); 
     248                    } 
     249                } 
     250 
     251                /** 
     252                 * Minify HTML/Feed 
     253                 */ 
     254                if ($this->_config->get_boolean('minify.html.enable')) { 
     255                    try { 
     256                        $this->minify_html($buffer); 
     257                    } catch (Exception $exception) { 
     258                        $this->error = $exception->getMessage(); 
     259                    } 
     260                } 
     261            } 
     262 
     263            if ($this->_config->get_boolean('minify.debug')) { 
     264                $buffer .= "\r\n\r\n" . $this->get_debug_info(); 
     265            } 
     266        } 
     267 
     268        return $buffer; 
     269    } 
     270 
     271    /** 
     272     * Parse buffer and return array of JS files from it 
     273     * 
     274     * @param string $buffer 
     275     * @return array 
     276     */ 
     277    function get_files_js(&$buffer) { 
     278        require_once W3TC_INC_DIR . '/functions/extract.php'; 
     279 
     280        $files = w3_extract_js($buffer); 
     281        $files = $this->filter_files($files); 
     282 
     283        return $files; 
     284    } 
     285 
     286    /** 
     287     * Parse buffer and return array of CSS files from it 
     288     * 
     289     * @param string $buffer 
     290     * @return array 
     291     */ 
     292    function get_files_css(&$buffer) { 
     293        require_once W3TC_INC_DIR . '/functions/extract.php'; 
     294 
     295        $files = w3_extract_css($buffer); 
     296        $files = $this->filter_files($files); 
     297        return $files; 
     298    } 
     299 
     300    /** 
     301     * Filters files 
     302     * 
     303     * @param array $files 
     304     * @return array 
     305     */ 
     306    function filter_files($files) { 
     307        $files = array_map('w3_normalize_file_minify2', $files); 
     308        $files = array_filter($files, array(&$this, '_filter_files')); 
     309        $files = array_values(array_unique($files)); 
     310        return $files; 
     311    } 
     312 
     313    /** 
     314     * URL file filter 
     315     * 
     316     * @param string $file 
     317     * @return bool 
     318     */ 
     319    function _filter_files($file) { 
     320        if (w3_is_url($file)) { 
     321            return false; 
     322        } 
     323 
     324        $ext = strrchr($file, '.'); 
     325 
     326        if ($ext != '.js' && $ext != '.css') { 
     327            return false; 
     328        } 
     329 
     330        $path = w3_get_document_root() . '/' . $file; 
     331 
     332        if (!file_exists($path)) { 
     333            return false; 
     334        } 
     335 
     336        return true; 
     337    } 
     338 
     339    /** 
     340     * Removes style tags from the source 
     341     * 
     342     * @param string $content 
     343     * @param array $files 
     344     * @return void 
     345     */ 
     346    function remove_styles(&$content, $files) { 
     347        $regexps = array(); 
     348        $domain_url_regexp = w3_get_domain_url_regexp(); 
     349 
     350        foreach ($files as $file) { 
     351            $this->replaced_styles[] = $file; 
     352 
     353            if (w3_is_url($file) && !preg_match('~' . $domain_url_regexp . '~i', $file)) { 
     354                // external CSS files 
     355                $regexps[] = w3_preg_quote($file); 
     356            } else { 
     357                // local CSS files 
     358                $file = ltrim(preg_replace('~' . $domain_url_regexp . '~i', '', $file), '/\\'); 
     359                $regexps[] = '(' . $domain_url_regexp . ')?/?' . w3_preg_quote($file); 
     360            } 
     361        } 
     362 
     363        foreach ($regexps as $regexp) { 
     364            $content = preg_replace('~<link\s+[^<>]*href=["\']?' . $regexp . '["\']?[^<>]*/?>(.*</link>)?~Uis', '', $content); 
     365            $content = preg_replace('~@import\s+(url\s*)?\(?["\']?\s*' . $regexp . '\s*["\']?\)?[^;]*;?~is', '', $content); 
     366        } 
     367 
     368        $content = preg_replace('~<style[^<>]*>\s*</style>~', '', $content); 
     369    } 
     370 
     371    /** 
     372     * Remove script tags from the source 
     373     * 
     374     * @param string $content 
     375     * @param array $files 
     376     * @return void 
     377     */ 
     378    function remove_scripts(&$content, $files) { 
     379        $regexps = array(); 
     380        $domain_url_regexp = w3_get_domain_url_regexp(); 
     381 
     382        foreach ($files as $file) { 
     383            $this->replaced_scripts[] = $file; 
     384 
     385            if (w3_is_url($file) && !preg_match('~' . $domain_url_regexp . '~i', $file)) { 
     386                // external JS files 
     387                $regexps[] = w3_preg_quote($file); 
     388            } else { 
     389                // local JS files 
     390                $file = ltrim(preg_replace('~' . $domain_url_regexp . '~i', '', $file), '/\\'); 
     391                $regexps[] = '(' . $domain_url_regexp . ')?/?' . w3_preg_quote($file); 
     392            } 
     393        } 
     394 
     395        foreach ($regexps as $regexp) { 
     396            $content = preg_replace('~<script\s+[^<>]*src=["\']?' . $regexp . '["\']?[^<>]*>\s*</script>~Uis', '', $content); 
     397        } 
     398    } 
     399 
     400    /** 
     401     * Removes style tag from the source for group 
     402     * 
     403     * @param string $content 
     404     * @param string $location 
     405     * @return void 
     406     */ 
     407    function remove_styles_group(&$content, $location) { 
     408        $theme = $this->get_theme(); 
     409        $template = $this->get_template(); 
     410 
     411        $files = array(); 
     412        $groups = $this->_config->get_array('minify.css.groups'); 
     413 
     414        if (isset($groups[$theme]['default'][$location]['files'])) { 
     415            $files = (array) $groups[$theme]['default'][$location]['files']; 
     416        } 
     417 
     418        if ($template != 'default' && isset($groups[$theme][$template][$location]['files'])) { 
     419            $files = array_merge($files, (array) $groups[$theme][$template][$location]['files']); 
     420        } 
     421 
     422        $this->remove_styles($content, $files); 
     423    } 
     424 
     425    /** 
     426     * Removes script tags from the source for group 
     427     * 
     428     * @param string $content 
     429     * @param string $location 
     430     * @return void 
     431     */ 
     432    function remove_scripts_group(&$content, $location) { 
     433        $theme = $this->get_theme(); 
     434        $template = $this->get_template(); 
     435 
     436        $files = array(); 
     437        $groups = $this->_config->get_array('minify.js.groups'); 
     438 
     439        if (isset($groups[$theme]['default'][$location]['files'])) { 
     440            $files = (array) $groups[$theme]['default'][$location]['files']; 
     441        } 
     442 
     443        if ($template != 'default' && isset($groups[$theme][$template][$location]['files'])) { 
     444            $files = array_merge($files, (array) $groups[$theme][$template][$location]['files']); 
     445        } 
     446 
     447        $this->remove_scripts($content, $files); 
     448    } 
     449 
     450    /** 
     451     * Minifies HTML 
     452     * 
     453     * @param string $html 
     454     * @return string 
     455     */ 
     456    function minify_html(&$html) { 
     457        $w3_minifier = & w3_instance('W3_Minifier'); 
     458 
     459        $ignored_comments = $this->_config->get_array('minify.html.comments.ignore'); 
     460 
     461        if (count($ignored_comments)) { 
     462            require_once W3TC_LIB_MINIFY_DIR . '/Minify/IgnoredCommentPreserver.php'; 
     463 
     464            $ignored_comments_preserver =& new Minify_IgnoredCommentPreserver(); 
     465            $ignored_comments_preserver->setIgnoredComments($ignored_comments); 
     466 
     467            $ignored_comments_preserver->search($html); 
     468        } 
     469 
     470        if ($this->_config->get_boolean('minify.html.inline.js')) { 
     471            $js_engine = $this->_config->get_string('minify.js.engine'); 
     472 
     473            if (!$w3_minifier->exists($js_engine) || !$w3_minifier->available($js_engine)) { 
     474                $js_engine = 'js'; 
     475            } 
     476 
     477            $js_minifier = $w3_minifier->get_minifier($js_engine); 
     478            $js_options = $w3_minifier->get_options($js_engine); 
     479 
     480            $w3_minifier->init($js_engine); 
     481 
     482            require_once W3TC_LIB_MINIFY_DIR . '/Minify/Inline.php'; 
     483            require_once W3TC_LIB_MINIFY_DIR . '/Minify/Inline/JavaScript.php'; 
     484 
     485            $html = Minify_Inline_JavaScript::minify($html, $js_minifier, $js_options); 
     486        } 
     487 
     488        if ($this->_config->get_boolean('minify.html.inline.css')) { 
     489            $css_engine = $this->_config->get_string('minify.css.engine'); 
     490 
     491            if (!$w3_minifier->exists($css_engine) || !$w3_minifier->available($css_engine)) { 
     492                $css_engine = 'css'; 
     493            } 
     494 
     495            $css_minifier = $w3_minifier->get_minifier($css_engine); 
     496            $css_options = $w3_minifier->get_options($css_engine); 
     497 
     498            $w3_minifier->init($css_engine); 
     499 
     500            require_once W3TC_LIB_MINIFY_DIR . '/Minify/Inline.php'; 
     501            require_once W3TC_LIB_MINIFY_DIR . '/Minify/Inline/CSS.php'; 
     502 
     503            $html = Minify_Inline_CSS::minify($html, $css_minifier, $css_options); 
     504        } 
     505 
     506        $engine = $this->_config->get_string('minify.html.engine'); 
     507 
     508        if (!$w3_minifier->exists($engine) || !$w3_minifier->available($engine)) { 
     509            $engine = 'html'; 
     510        } 
     511 
     512        if (function_exists('is_feed') && is_feed()) { 
     513            $engine .= 'xml'; 
     514        } 
     515 
     516        $minifier = $w3_minifier->get_minifier($engine); 
     517        $options = $w3_minifier->get_options($engine); 
     518 
     519        $w3_minifier->init($engine); 
     520 
     521        $html = call_user_func($minifier, $html, $options); 
     522 
     523        if (isset($ignored_comments_preserver)) { 
     524            $ignored_comments_preserver->replace($html); 
     525        } 
     526    } 
     527 
     528    /** 
     529     * Returns current theme 
     530     * 
     531     * @return string 
     532     */ 
     533    function get_theme() { 
     534        static $theme = null; 
     535 
     536        if ($theme === null) { 
     537            $theme = w3_get_theme_key(get_theme_root(), get_template(), get_stylesheet()); 
     538        } 
     539 
     540        return $theme; 
     541    } 
     542 
     543    /** 
     544     * Returns current template 
     545     * 
     546     * @return string 
     547     */ 
     548    function get_template() { 
     549        static $template = null; 
     550 
     551        if ($template === null) { 
     552            switch (true) { 
     553                case (is_404() && ($template_file = get_404_template())): 
     554                case (is_search() && ($template_file = get_search_template())): 
     555                case (is_tax() && ($template_file = get_taxonomy_template())): 
     556                case (is_front_page() && function_exists('get_front_page_template') && $template = get_front_page_template()): 
     557                case (is_home() && ($template_file = get_home_template())): 
     558                case (is_attachment() && ($template_file = get_attachment_template())): 
     559                case (is_single() && ($template_file = get_single_template())): 
     560                case (is_page() && ($template_file = get_page_template())): 
     561                case (is_category() && ($template_file = get_category_template())): 
     562                case (is_tag() && ($template_file = get_tag_template())): 
     563                case (is_author() && ($template_file = get_author_template())): 
     564                case (is_date() && ($template_file = get_date_template())): 
     565                case (is_archive() && ($template_file = get_archive_template())): 
     566                case (is_comments_popup() && ($template_file = get_comments_popup_template())): 
     567                case (is_paged() && ($template_file = get_paged_template())): 
     568                    break; 
     569 
     570                default: 
     571                    if (function_exists('get_index_template')) { 
     572                        $template_file = get_index_template(); 
     573                    } else { 
     574                        $template_file = 'index.php'; 
     575                    } 
     576                    break; 
     577            } 
     578 
     579            $template = basename($template_file, '.php'); 
     580        } 
     581 
     582        return $template; 
     583    } 
     584 
     585    /** 
     586     * Returns style tag 
     587     * 
     588     * @param string $url 
     589     * @param boolean $import 
     590     * @return string 
     591     */ 
     592    function get_style($url, $import = false) { 
     593        if ($import) { 
     594            return "<style type=\"text/css\" media=\"all\">@import url(\"" . $url . "\");</style>\r\n"; 
     595        } else { 
     596            return "<link rel=\"stylesheet\" type=\"text/css\" href=\"" . str_replace('&', '&amp;', $url) . "\" media=\"all\" />\r\n"; 
     597        } 
     598    } 
     599 
     600    /** 
     601     * Prints script tag 
     602     * 
     603     * @param string $url 
     604     * @param boolean $blocking 
     605     * @return string 
     606     */ 
     607    function get_script($url, $blocking = true) { 
     608        static $non_blocking_function = false; 
     609 
     610        if ($blocking) { 
     611            return '<script type="text/javascript" src="' . str_replace('&', '&amp;', $url) . '"></script>'; 
     612        } else { 
     613            $script = ''; 
     614 
     615            if (!$non_blocking_function) { 
     616                $non_blocking_function = true; 
     617                $script = "<script type=\"text/javascript\">function w3tc_load_js(u){var d=document,p=d.getElementsByTagName('HEAD')[0],c=d.createElement('script');c.type='text/javascript';c.src=u;p.appendChild(c);}</script>"; 
     618            } 
     619 
     620            $script .= "<script type=\"text/javascript\">w3tc_load_js('" . $url . "');</script>"; 
     621 
     622            return $script; 
     623        } 
     624    } 
     625 
     626    /** 
     627     * Returns style tag for style group 
     628     * 
     629     * @param string $location 
     630     * @return array 
     631     */ 
     632    function get_style_group($location) { 
     633        $style = false; 
     634        $type = 'css'; 
     635        $groups = $this->_config->get_array('minify.css.groups'); 
     636        $theme = $this->get_theme(); 
     637        $template = $this->get_template(); 
     638 
     639        if ($template != 'default' && empty($groups[$theme][$template][$location]['files'])) { 
     640            $template = 'default'; 
     641        } 
     642 
     643        if (!empty($groups[$theme][$template][$location]['files'])) { 
     644            $url = $this->format_url_group($theme, $template, $location, $type); 
     645 
     646            if ($url) { 
     647                $import = (isset($groups[$theme][$template][$location]['import']) ? (boolean) $groups[$theme][$template][$location]['import'] : false); 
     648 
     649                $style = $this->get_style($url, $import); 
     650            } 
     651        } 
     652 
     653        return $style; 
     654    } 
     655 
     656    /** 
     657     * Returns script tag for script group 
     658     * 
     659     * @param string $location 
     660     * @return array 
     661     */ 
     662    function get_script_group($location) { 
     663        $script = false; 
     664        $type = 'js'; 
     665        $theme = $this->get_theme(); 
     666        $template = $this->get_template(); 
     667        $groups = $this->_config->get_array('minify.js.groups'); 
     668 
     669        if ($template != 'default' && empty($groups[$theme][$template][$location]['files'])) { 
     670            $template = 'default'; 
     671        } 
     672 
     673        if (!empty($groups[$theme][$template][$location]['files'])) { 
     674            $url = $this->format_url_group($theme, $template, $location, $type); 
     675 
     676            if ($url) { 
     677                $blocking = (isset($groups[$theme][$template][$location]['blocking']) ? (boolean) $groups[$theme][$template][$location]['blocking'] : true); 
     678 
     679                $script = $this->get_script($url, $blocking); 
     680            } 
     681        } 
     682 
     683        return $script; 
     684    } 
     685 
     686    /** 
     687     * Returns script tag for custom files 
     688     * 
     689     * @param string|array $files 
     690     * @param bool $blocking 
     691     * @return string 
     692     */ 
     693    function get_script_custom($files, $blocking = true) { 
     694        $script = false; 
     695 
     696        if (count($files)) { 
     697            $url = $this->format_url_custom($files, 'js'); 
     698 
     699            if ($url) { 
     700                $script = $this->get_script($url, $blocking); 
     701            } 
     702        } 
     703 
     704        return $script; 
     705    } 
     706 
     707    /** 
     708     * Returns style tag for custom files 
     709     * 
     710     * @param string|array $files 
     711     * @param boolean $import 
     712     * @return string 
     713     */ 
     714    function get_style_custom($files, $import = false) { 
     715        $style = false; 
     716 
     717        if (count($files)) { 
     718            $url = $this->format_url_custom($files, 'css'); 
     719 
     720            if ($url) { 
     721                $style = $this->get_style($url, $import); 
     722            } 
     723        } 
     724 
     725        return $style; 
     726    } 
     727 
     728    /** 
     729     * Formats URL 
     730     * 
     731     * @param string $theme 
     732     * @param string $template 
     733     * @param string $location 
     734     * @param string $type 
     735     * @param boolean $rewrite 
     736     * @return string 
     737     */ 
     738    function format_url_group($theme, $template, $location, $type, $rewrite = null) { 
     739        $w3_minify = & w3_instance('W3_Minify'); 
     740 
     741        $url = false; 
     742        $id = $w3_minify->get_id_group($theme, $template, $location, $type); 
     743 
     744        if ($id) { 
     745            $site_url_ssl = w3_get_site_url_ssl(); 
     746 
     747            if ($this->_config->get_boolean('minify.rewrite')) { 
     748                $url = sprintf('%s/%s/%s/%s.%s.%s.%s', $site_url_ssl, W3TC_CONTENT_MINIFY_DIR_NAME, $theme, $template, $location, $id, $type); 
     749            } else { 
     750                $url = sprintf('%s/%s/index.php?file=%s/%s.%s.%s.%s', $site_url_ssl, W3TC_CONTENT_MINIFY_DIR_NAME, $theme, $template, $location, $id, $type); 
     751            } 
     752        } 
     753 
     754        return $url; 
     755    } 
     756 
     757    /** 
     758     * Formats custom URL 
     759     * 
     760     * @param array $files 
     761     * @param string $type 
     762     * @return string 
     763     */ 
     764    function format_url_custom($files, $type) { 
     765        $w3_minify = & w3_instance('W3_Minify'); 
     766        $url = false; 
     767        $w3_minify->set_custom_files($files, $type); 
     768        $hash = $w3_minify->get_custom_files_hash($files); 
     769        $id = $w3_minify->get_id_custom($hash, $type); 
     770 
     771        if ($id) { 
     772            $site_url_ssl = w3_get_site_url_ssl(); 
     773 
     774            if ($this->_config->get_boolean('minify.rewrite')) { 
     775                $url = sprintf('%s/%s/%s.%s.%s', $site_url_ssl, W3TC_CONTENT_MINIFY_DIR_NAME, $hash, $id, $type); 
     776            } else { 
     777                $url = sprintf('%s/%s/index.php?file=%s.%s.%s', $site_url_ssl, W3TC_CONTENT_MINIFY_DIR_NAME, $hash, $id, $type); 
     778            } 
     779        } 
     780 
     781        return $url; 
     782    } 
     783 
     784    /** 
     785     * Returns array of minify URLs 
     786     * 
     787     * @return array 
     788     */ 
     789    function get_urls() { 
     790        $files = array(); 
     791 
     792        $js_groups = $this->_config->get_array('minify.js.groups'); 
     793        $css_groups = $this->_config->get_array('minify.css.groups'); 
     794 
     795        foreach ($js_groups as $js_theme => $js_templates) { 
     796            foreach ($js_templates as $js_template => $js_locations) { 
     797                foreach ((array) $js_locations as $js_location => $js_config) { 
     798                    if (!empty($js_config['files'])) { 
     799                        $files[] = $this->format_url_group($js_theme, $js_template, $js_location, 'js'); 
     800                    } 
     801                } 
     802            } 
     803        } 
     804 
     805        foreach ($css_groups as $css_theme => $css_templates) { 
     806            foreach ($css_templates as $css_template => $css_locations) { 
     807                foreach ((array) $css_locations as $css_location => $css_config) { 
     808                    if (!empty($css_config['files'])) { 
     809                        $files[] = $this->format_url_group($css_theme, $css_template, $css_location, 'css'); 
     810                    } 
     811                } 
     812            } 
     813        } 
     814 
     815        return $files; 
     816    } 
     817 
     818    /** 
     819     * Returns debug info 
     820     * 
     821     * @return string 
     822     */ 
     823    function get_debug_info() { 
     824        $debug_info = "<!-- W3 Total Cache: Minify debug info:\r\n"; 
     825        $debug_info .= sprintf("%s%s\r\n", str_pad('Engine: ', 20), w3_get_engine_name($this->_config->get_string('minify.engine'))); 
     826        $debug_info .= sprintf("%s%s\r\n", str_pad('Theme: ', 20), $this->get_theme()); 
     827        $debug_info .= sprintf("%s%s\r\n", str_pad('Template: ', 20), $this->get_template()); 
     828 
     829        if ($this->minify_reject_reason) { 
     830            $debug_info .= sprintf("%s%s\r\n", str_pad('Reject reason: ', 20), $this->minify_reject_reason); 
     831        } 
     832 
     833        if ($this->error) { 
     834            $debug_info .= sprintf("%s%s\r\n", str_pad('Errors: ', 20), $this->error); 
     835        } 
     836 
     837        if (count($this->replaced_styles)) { 
     838            $debug_info .= "\r\nReplaced CSS files:\r\n"; 
     839 
     840            foreach ($this->replaced_styles as $index => $file) { 
     841                $debug_info .= sprintf("%d. %s\r\n", $index + 1, w3_escape_comment($file)); 
     842            } 
     843        } 
     844 
     845        if (count($this->replaced_scripts)) { 
     846            $debug_info .= "\r\nReplaced JavaScript files:\r\n"; 
     847 
     848            foreach ($this->replaced_scripts as $index => $file) { 
     849                $debug_info .= sprintf("%d. %s\r\n", $index + 1, w3_escape_comment($file)); 
     850            } 
     851        } 
     852 
     853        $debug_info .= '-->'; 
     854 
     855        return $debug_info; 
     856    } 
     857 
     858    /** 
     859     * Check if we can do minify logic 
     860     * 
     861     * @return boolean 
     862     */ 
     863    function can_minify() { 
     864        /** 
     865         * Skip if doint AJAX 
     866         */ 
     867        if (defined('DOING_AJAX')) { 
     868            $this->minify_reject_reason = 'Doing AJAX'; 
     869 
     870            return false; 
     871        } 
     872 
     873        /** 
     874         * Skip if doing cron 
     875         */ 
     876        if (defined('DOING_CRON')) { 
     877            $this->minify_reject_reason = 'Doing cron'; 
     878 
     879            return false; 
     880        } 
     881 
     882        /** 
     883         * Skip if APP request 
     884         */ 
     885        if (defined('APP_REQUEST')) { 
     886            $this->minify_reject_reason = 'Application request'; 
     887 
     888            return false; 
     889        } 
     890 
     891        /** 
     892         * Skip if XMLRPC request 
     893         */ 
     894        if (defined('XMLRPC_REQUEST')) { 
     895            $this->minify_reject_reason = 'XMLRPC request'; 
     896 
     897            return false; 
     898        } 
     899 
     900        /** 
     901         * Skip if Admin 
     902         */ 
     903        if (defined('WP_ADMIN')) { 
     904            $this->minify_reject_reason = 'wp-admin'; 
     905 
     906            return false; 
     907        } 
     908 
     909        /** 
     910         * Check for WPMU's and WP's 3.0 short init 
     911         */ 
     912        if (defined('SHORTINIT') && SHORTINIT) { 
     913            $this->minify_reject_reason = 'Short init'; 
     914 
     915            return false; 
     916        } 
     917 
     918        /** 
     919         * Check User agent 
     920         */ 
     921        if (!$this->check_ua()) { 
     922            $this->minify_reject_reason = 'User agent is rejected'; 
     923 
     924            return false; 
     925        } 
     926 
     927        /** 
     928         * Check request URI 
     929         */ 
     930        if (!$this->check_request_uri()) { 
     931            $this->minify_reject_reason = 'Request URI is rejected'; 
     932 
     933            return false; 
     934        } 
     935 
     936        /** 
     937         * Skip if user is logged in 
     938         */ 
     939        if ($this->_config->get_boolean('minify.reject.logged') && !$this->check_logged_in()) { 
     940            $this->minify_reject_reason = 'User is logged in'; 
     941 
     942            return false; 
     943        } 
     944 
     945        /** 
     946         * Check feed 
     947         */ 
     948        if ($this->_config->get_boolean('minify.html.reject.feed') && function_exists('is_feed') && is_feed()) { 
     949            $this->minify_reject_reason = 'Feed is rejected'; 
     950 
     951            return false; 
     952        } 
     953 
     954        return true; 
     955    } 
     956 
     957    /** 
     958     * Returns true if we can minify 
     959     * 
     960     * @param string $buffer 
     961     * @return string 
     962     */ 
     963    function can_minify2(&$buffer) { 
     964        /** 
     965         * Check for database error 
     966         */ 
     967        if (w3_is_database_error($buffer)) { 
     968            $this->minify_reject_reason = 'Database Error occurred'; 
     969 
     970            return false; 
     971        } 
     972 
     973        /** 
     974         * Check for DONOTMINIFY constant 
     975         */ 
     976        if (defined('DONOTMINIFY') && DONOTMINIFY) { 
     977            $this->minify_reject_reason = 'DONOTMINIFY constant is defined'; 
     978 
     979            return false; 
     980        } 
     981 
     982        return true; 
     983    } 
     984 
     985    /** 
     986     * Checks User Agent 
     987     * 
     988     * @return boolean 
     989     */ 
     990    function check_ua() { 
     991        $uas = array_merge($this->_config->get_array('minify.reject.ua'), array( 
     992            W3TC_POWERED_BY 
     993        )); 
     994 
     995        foreach ($uas as $ua) { 
     996            if (isset($_SERVER['HTTP_USER_AGENT']) && stristr($_SERVER['HTTP_USER_AGENT'], $ua) !== false) { 
     997                return false; 
     998            } 
     999        } 
     1000 
     1001        return true; 
     1002    } 
     1003 
     1004    /** 
     1005     * Check if user is logged in 
     1006     * 
     1007     * @return boolean 
     1008     */ 
     1009    function check_logged_in() { 
     1010        foreach (array_keys($_COOKIE) as $cookie_name) { 
     1011            if ($cookie_name == 'wordpress_test_cookie') { 
     1012                continue; 
     1013            } 
     1014            if (strpos($cookie_name, 'wordpress') === 0) { 
     1015                return false; 
     1016            } 
     1017        } 
     1018 
     1019        return true; 
     1020    } 
     1021 
     1022    /** 
     1023     * Checks request URI 
     1024     * 
     1025     * @return boolean 
     1026     */ 
     1027    function check_request_uri() { 
     1028        $auto_reject_uri = array( 
     1029            'wp-login', 
     1030            'wp-register' 
     1031        ); 
     1032 
     1033        foreach ($auto_reject_uri as $uri) { 
     1034            if (strstr($_SERVER['REQUEST_URI'], $uri) !== false) { 
     1035                return false; 
     1036            } 
     1037        } 
     1038 
     1039        $reject_uri = $this->_config->get_array('minify.reject.uri'); 
     1040        $reject_uri = array_map('w3_parse_path', $reject_uri); 
     1041 
     1042        foreach ($reject_uri as $expr) { 
     1043            $expr = trim($expr); 
     1044            if ($expr != '' && preg_match('~' . $expr . '~i', $_SERVER['REQUEST_URI'])) { 
     1045                return false; 
     1046            } 
     1047        } 
     1048 
     1049        return true; 
    561050    } 
    571051} 
  • w3-total-cache/trunk/lib/W3/Plugin/ObjectCache.php

    r409551 r410604  
    1818     */ 
    1919    function run() { 
    20         register_activation_hook(W3TC_FILE, array( 
    21             &$this, 
    22             'activate' 
    23         )); 
    24  
    25         register_deactivation_hook(W3TC_FILE, array( 
    26             &$this, 
    27             'deactivate' 
    28         )); 
    29  
    3020        add_filter('cron_schedules', array( 
    3121            &$this, 
     
    3323        )); 
    3424 
    35         if ($this->_config->get_boolean('objectcache.enabled')) { 
    36             if ($this->_config->get_string('objectcache.engine') == 'file') { 
    37                 add_action('w3_objectcache_cleanup', array( 
    38                     &$this, 
    39                     'cleanup' 
    40                 )); 
    41             } 
     25        if ($this->_config->get_string('objectcache.engine') == 'file') { 
     26            add_action('w3_objectcache_cleanup', array( 
     27                &$this, 
     28                'cleanup' 
     29            )); 
     30        } 
    4231 
    43             add_action('publish_phone', array( 
    44                 &$this, 
    45                 'on_change' 
    46             ), 0); 
     32        add_action('publish_phone', array( 
     33            &$this, 
     34            'on_change' 
     35        ), 0); 
    4736 
    48             add_action('publish_post', array( 
    49                 &$this, 
    50                 'on_change' 
    51             ), 0); 
     37        add_action('publish_post', array( 
     38            &$this, 
     39            'on_change' 
     40        ), 0); 
    5241 
    53             add_action('edit_post', array( 
    54                 &$this, 
    55                 'on_change' 
    56             ), 0); 
     42        add_action('edit_post', array( 
     43            &$this, 
     44            'on_change' 
     45        ), 0); 
    5746 
    58             add_action('delete_post', array( 
    59                 &$this, 
    60                 'on_change' 
    61             ), 0); 
     47        add_action('delete_post', array( 
     48            &$this, 
     49            'on_change' 
     50        ), 0); 
    6251 
    63             add_action('comment_post', array( 
    64                 &$this, 
    65                 'on_change' 
    66             ), 0); 
     52        add_action('comment_post', array( 
     53            &$this, 
     54            'on_change' 
     55        ), 0); 
    6756 
    68             add_action('edit_comment', array( 
    69                 &$this, 
    70                 'on_change' 
    71             ), 0); 
     57        add_action('edit_comment', array( 
     58            &$this, 
     59            'on_change' 
     60        ), 0); 
    7261 
    73             add_action('delete_comment', array( 
    74                 &$this, 
    75                 'on_change' 
    76             ), 0); 
     62        add_action('delete_comment', array( 
     63            &$this, 
     64            'on_change' 
     65        ), 0); 
    7766 
    78             add_action('wp_set_comment_status', array( 
    79                 &$this, 
    80                 'on_change' 
    81             ), 0); 
     67        add_action('wp_set_comment_status', array( 
     68            &$this, 
     69            'on_change' 
     70        ), 0); 
    8271 
    83             add_action('trackback_post', array( 
    84                 &$this, 
    85                 'on_change' 
    86             ), 0); 
     72        add_action('trackback_post', array( 
     73            &$this, 
     74            'on_change' 
     75        ), 0); 
    8776 
    88             add_action('pingback_post', array( 
    89                 &$this, 
    90                 'on_change' 
    91             ), 0); 
     77        add_action('pingback_post', array( 
     78            &$this, 
     79            'on_change' 
     80        ), 0); 
    9281 
    93             add_action('switch_theme', array( 
    94                 &$this, 
    95                 'on_change' 
    96             ), 0); 
     82        add_action('switch_theme', array( 
     83            &$this, 
     84            'on_change' 
     85        ), 0); 
    9786 
    98             add_action('edit_user_profile_update', array( 
    99                 &$this, 
    100                 'on_change' 
    101             ), 0); 
    102         } 
     87        add_action('edit_user_profile_update', array( 
     88            &$this, 
     89            'on_change' 
     90        ), 0); 
    10391    } 
    10492 
    10593    /** 
    106      * Activate plugin action 
     94     * Activate plugin action (called by W3_PluginProxy) 
    10795     */ 
    10896    function activate() { 
     
    117105 
    118106    /** 
    119      * Deactivate plugin action 
     107     * Deactivate plugin action (called by W3_PluginProxy) 
    120108     */ 
    121109    function deactivate() { 
     
    189177 
    190178        if (!$flushed) { 
    191             $wp_object_cache = & w3_instance('/ObjectCache.php'); 
     179            $wp_object_cache = & w3_instance('W3_ObjectCache'); 
    192180            $wp_object_cache->flush(); 
    193181        } 
  • w3-total-cache/trunk/lib/W3/Plugin/PgCache.php

    r409551 r410604  
    1818     */ 
    1919    function run() { 
    20         register_activation_hook(W3TC_FILE, array( 
    21             &$this, 
    22             'activate' 
     20        add_filter('cron_schedules', array( 
     21            &$this, 
     22            'cron_schedules' 
    2323        )); 
    24  
    25         register_deactivation_hook(W3TC_FILE, array( 
    26             &$this, 
    27             'deactivate' 
     24     
     25        if ($this->_config->get_string('pgcache.engine') == 'file' ||  
     26                $this->_config->get_string('pgcache.engine') == 'file_generic') { 
     27            add_action('w3_pgcache_cleanup', array( 
     28                &$this, 
     29                'cleanup' 
     30            )); 
     31        } 
     32 
     33        add_action('w3_pgcache_prime', array( 
     34            &$this, 
     35            'prime' 
    2836        )); 
    2937 
    30         if ($this->_config->get_boolean('pgcache.enabled')) { 
    31             add_filter('cron_schedules', array( 
    32                 &$this, 
    33                 'cron_schedules' 
    34             )); 
    35          
    36             if ($this->_config->get_string('pgcache.engine') == 'file' ||  
    37                     $this->_config->get_string('pgcache.engine') == 'file_generic') { 
    38                 add_action('w3_pgcache_cleanup', array( 
    39                     &$this, 
    40                     'cleanup' 
    41                 )); 
    42             } 
    43  
    44             add_action('w3_pgcache_prime', array( 
    45                 &$this, 
    46                 'prime' 
    47             )); 
    48  
    49             add_action('publish_phone', array( 
    50                 &$this, 
    51                 'on_post_edit' 
    52             ), 0); 
    53  
    54             add_action('publish_post', array( 
    55                 &$this, 
    56                 'on_post_edit' 
    57             ), 0); 
    58  
    59             add_action('edit_post', array( 
    60                 &$this, 
    61                 'on_post_change' 
    62             ), 0); 
    63  
    64             add_action('delete_post', array( 
    65                 &$this, 
    66                 'on_post_edit' 
    67             ), 0); 
    68  
    69             add_action('comment_post', array( 
    70                 &$this, 
    71                 'on_comment_change' 
    72             ), 0); 
    73  
    74             add_action('edit_comment', array( 
    75                 &$this, 
    76                 'on_comment_change' 
    77             ), 0); 
    78  
    79             add_action('delete_comment', array( 
    80                 &$this, 
    81                 'on_comment_change' 
    82             ), 0); 
    83  
    84             add_action('wp_set_comment_status', array( 
    85                 &$this, 
    86                 'on_comment_status' 
    87             ), 0, 2); 
    88  
    89             add_action('trackback_post', array( 
    90                 &$this, 
    91                 'on_comment_change' 
    92             ), 0); 
    93  
    94             add_action('pingback_post', array( 
    95                 &$this, 
    96                 'on_comment_change' 
    97             ), 0); 
    98  
    99             add_action('switch_theme', array( 
    100                 &$this, 
    101                 'on_change' 
    102             ), 0); 
    103  
    104             add_action('edit_user_profile_update', array( 
    105                 &$this, 
    106                 'on_change' 
    107             ), 0); 
    108         } 
    109     } 
    110  
    111     /** 
    112      * Activate plugin action 
     38        add_action('publish_phone', array( 
     39            &$this, 
     40            'on_post_edit' 
     41        ), 0); 
     42 
     43        add_action('publish_post', array( 
     44            &$this, 
     45            'on_post_edit' 
     46        ), 0); 
     47 
     48        add_action('edit_post', array( 
     49            &$this, 
     50            'on_post_change' 
     51        ), 0); 
     52 
     53        add_action('delete_post', array( 
     54            &$this, 
     55            'on_post_edit' 
     56        ), 0); 
     57 
     58        add_action('comment_post', array( 
     59            &$this, 
     60            'on_comment_change' 
     61        ), 0); 
     62 
     63        add_action('edit_comment', array( 
     64            &$this, 
     65            'on_comment_change' 
     66        ), 0); 
     67 
     68        add_action('delete_comment', array( 
     69            &$this, 
     70            'on_comment_change' 
     71        ), 0); 
     72 
     73        add_action('wp_set_comment_status', array( 
     74            &$this, 
     75            'on_comment_status' 
     76        ), 0, 2); 
     77 
     78        add_action('trackback_post', array( 
     79            &$this, 
     80            'on_comment_change' 
     81        ), 0); 
     82 
     83        add_action('pingback_post', array( 
     84            &$this, 
     85            'on_comment_change' 
     86        ), 0); 
     87 
     88        add_action('switch_theme', array( 
     89            &$this, 
     90            'on_change' 
     91        ), 0); 
     92 
     93        add_action('edit_user_profile_update', array( 
     94            &$this, 
     95            'on_change' 
     96        ), 0); 
     97    } 
     98 
     99    /** 
     100     * Activate plugin action (called by W3_PluginProxy) 
    113101     */ 
    114102    function activate() { 
     
    117105 
    118106    /** 
    119      * Deactivate plugin action 
     107     * Deactivate plugin action (called by W3_PluginProxy) 
    120108     */ 
    121109    function deactivate() { 
     
    148136     */ 
    149137    function &get_admin() { 
    150         return w3_instance('/Plugin/PgCacheAdmin.php'); 
     138        return w3_instance('W3_Plugin_PgCacheAdmin'); 
    151139    } 
    152140 
     
    195183 
    196184        if (!in_array($post_id, $flushed_posts)) { 
    197             $w3_pgcache = & w3_instance('/PgCache.php'); 
     185            $w3_pgcache = & w3_instance('W3_PgCacheFlush'); 
    198186            $w3_pgcache->flush_post($post_id); 
    199187 
     
    237225 
    238226        if (!$flushed) { 
    239             $w3_pgcache = & w3_instance('/PgCache.php'); 
     227            $w3_pgcache = & w3_instance('W3_PgCacheFlush'); 
    240228            $w3_pgcache->flush(); 
    241229        } 
  • w3-total-cache/trunk/lib/W3/Plugin/PgCacheAdmin.php

    r409551 r410604  
    88} 
    99 
     10require_once W3TC_INC_DIR . '/functions/rule.php'; 
    1011require_once W3TC_LIB_W3_DIR . '/Plugin.php'; 
    1112 
     
    207208         * Make HTTP requests and prime cache 
    208209         */ 
    209         require_once W3TC_INC_DIR . '/http.php'; 
     210        require_once W3TC_INC_DIR . '/functions/http.php'; 
    210211 
    211212        foreach ($queue as $url) { 
     
    221222     */ 
    222223    function parse_sitemap($url) { 
    223         require_once W3TC_INC_DIR . '/http.php'; 
     224        require_once W3TC_INC_DIR . '/functions/http.php'; 
    224225 
    225226        $urls = array(); 
     
    661662         * Check if cache file exists 
    662663         */ 
    663         $rules .= "    RewriteCond \"%{DOCUMENT_ROOT}" . $cache_path . "/%{REQUEST_URI}/_index%{ENV:W3TC_UA}%{ENV:W3TC_REF}%{ENV:W3TC_SSL}.html%{ENV:W3TC_ENC}\" -" . ($this->_config->get_boolean('pgcache.file.locking') ? 'F' : 'f') . "\n"; 
     664        $rules .= "    RewriteCond \"%{DOCUMENT_ROOT}" . $cache_path . "/%{REQUEST_URI}/_index%{ENV:W3TC_UA}%{ENV:W3TC_REF}%{ENV:W3TC_SSL}.html%{ENV:W3TC_ENC}\" -" . ($this->_config->get_boolean('pgcache.file.nfs') ? 'F' : 'f') . "\n"; 
    664665 
    665666        /** 
  • w3-total-cache/trunk/lib/W3/Plugin/TotalCache.php

    r409551 r410604  
    99 
    1010require_once W3TC_LIB_W3_DIR . '/Plugin.php'; 
     11require_once W3TC_LIB_W3_DIR . '/PluginProxy.php'; 
    1112 
    1213/** 
     
    4041        ), 150); 
    4142 
    42         if (isset($_REQUEST['w3tc_theme']) && isset($_SERVER['HTTP_USER_AGENT']) && $_SERVER['HTTP_USER_AGENT'] == W3TC_POWERED_BY) { 
     43        if (isset($_REQUEST['w3tc_theme']) && isset($_SERVER['HTTP_USER_AGENT']) && 
     44                $_SERVER['HTTP_USER_AGENT'] == W3TC_POWERED_BY) { 
    4345            add_filter('template', array( 
    4446                &$this, 
     
    9395 
    9496        /** 
    95          * Run DbCache plugin 
    96          */ 
    97         $w3_plugin_dbcache = & w3_instance('/Plugin/DbCache.php'); 
    98         $w3_plugin_dbcache->run(); 
    99  
    100         /** 
    101          * Run ObjectCache plugin 
    102          */ 
    103         $w3_plugin_objectcache = & w3_instance('/Plugin/ObjectCache.php'); 
    104         $w3_plugin_objectcache->run(); 
    105  
    106         /** 
    107          * Run PgCache plugin 
    108          */ 
    109         $w3_plugin_pgcache = & w3_instance('/Plugin/PgCache.php'); 
    110         $w3_plugin_pgcache->run(); 
    111  
    112         /** 
    113          * Run CDN plugin 
    114          */ 
    115         $w3_plugin_cdn = & w3_instance('/Plugin/Cdn.php'); 
    116         $w3_plugin_cdn->run(); 
    117  
    118         /** 
    119          * Run BrowserCache plugin 
    120          */ 
    121         $w3_plugin_browsercache = & w3_instance('/Plugin/BrowserCache.php'); 
    122         $w3_plugin_browsercache->run(); 
    123  
    124         /** 
    125          * Run Minify plugin 
    126          */ 
    127         if (W3TC_PHP5) { 
    128             $w3_plugin_minify = & w3_instance('/Plugin/Minify.php'); 
    129             $w3_plugin_minify->run(); 
    130         } 
    131  
    132         /** 
    133          * Run admin plugin 
    134          */ 
     97         * Create plugin proxies, they should live during request since attaches to actions 
     98         */ 
     99        $this->_plugins = array( 
     100            new W3_PluginProxy('W3_Plugin_DbCache', 'dbcache.enabled'), 
     101            new W3_PluginProxy('W3_Plugin_ObjectCache', 'objectcache.enabled'), 
     102            new W3_PluginProxy('W3_Plugin_PgCache', 'pgcache.enabled'), 
     103            new W3_PluginProxy('W3_Plugin_Cdn', 'cdn.enabled'), 
     104            new W3_PluginProxy('W3_Plugin_BrowserCache', 'browsercache.enabled'), 
     105            new W3_PluginProxy('W3_Plugin_Minify', 'minify.enabled')); 
     106 
    135107        if (is_admin()) { 
    136             $w3_plugin_totalcacheadmin = & w3_instance('/Plugin/TotalCacheAdmin.php'); 
    137             $w3_plugin_totalcacheadmin->run(); 
    138         } 
     108            $plugin_totalcacheadmin = & w3_instance('W3_Plugin_TotalCacheAdmin'); 
     109            array_push($this->_plugins, $plugin_totalcacheadmin); 
     110        } 
     111 
     112        /** 
     113         * Run plugins 
     114         */ 
     115        foreach ($this->_plugins as $plugin) 
     116            $plugin->run(); 
    139117    } 
    140118 
     
    145123     */ 
    146124    function activate() { 
    147         $activation_worker = & w3_instance('/Plugin/TotalCacheActivation.php'); 
     125        $activation_worker = & w3_instance('W3_Plugin_TotalCacheActivation'); 
    148126        $activation_worker->activate(); 
    149127    } 
     
    155133     */ 
    156134    function deactivate() { 
    157         $activation_worker = & w3_instance('/Plugin/TotalCacheActivation.php'); 
     135        $activation_worker = & w3_instance('W3_Plugin_TotalCacheActivation'); 
    158136        $activation_worker->deactivate(); 
    159137    } 
     
    282260     */ 
    283261    function template($template) { 
    284         $w3_mobile = & w3_instance('/Mobile.php'); 
     262        $w3_mobile = & w3_instance('W3_Mobile'); 
    285263 
    286264        $mobile_template = $w3_mobile->get_template(); 
     
    289267            return $mobile_template; 
    290268        } else { 
    291             $w3_referrer = & w3_instance('/Referrer.php'); 
     269            $w3_referrer = & w3_instance('W3_Referrer'); 
    292270 
    293271            $referrer_template = $w3_referrer->get_template(); 
     
    308286     */ 
    309287    function stylesheet($stylesheet) { 
    310         $w3_mobile = & w3_instance('/Mobile.php'); 
     288        $w3_mobile = & w3_instance('W3_Mobile'); 
    311289 
    312290        $mobile_stylesheet = $w3_mobile->get_stylesheet(); 
     
    315293            return $mobile_stylesheet; 
    316294        } else { 
    317             $w3_referrer = & w3_instance('/Referrer.php'); 
     295            $w3_referrer = & w3_instance('W3_Referrer'); 
    318296 
    319297            $referrer_stylesheet = $w3_referrer->get_stylesheet(); 
     
    411389 
    412390                    if ($this->_config->get_boolean('minify.enabled') && !$this->_config->get_boolean('minify.debug')) { 
    413                         $w3_plugin_minify = & w3_instance('/Plugin/MinifyEnabled.php'); 
     391                        $w3_plugin_minify = & w3_instance('W3_Plugin_Minify'); 
    414392 
    415393                        $strings[] = sprintf("Minified using %s%s", w3_get_engine_name($this->_config->get_string('minify.engine')), ($w3_plugin_minify->minify_reject_reason != '' ? sprintf(' (%s)', $w3_plugin_minify->minify_reject_reason) : '')); 
     
    417395 
    418396                    if ($this->_config->get_boolean('pgcache.enabled') && !$this->_config->get_boolean('pgcache.debug')) { 
    419                         $w3_pgcache = & w3_instance('/PgCache.php'); 
     397                        $w3_pgcache = & w3_instance('W3_PgCache'); 
    420398 
    421399                        $strings[] = sprintf("Page Caching using %s%s", w3_get_engine_name($this->_config->get_string('pgcache.engine')), ($w3_pgcache->cache_reject_reason != '' ? sprintf(' (%s)', $w3_pgcache->cache_reject_reason) : '')); 
     
    433411 
    434412                    if ($this->_config->get_boolean('objectcache.enabled') && !$this->_config->get_boolean('objectcache.debug')) { 
    435                         $w3_objectcache = & w3_instance('/ObjectCache.php'); 
     413                        $w3_objectcache = & w3_instance('W3_ObjectCache'); 
    436414 
    437415                        $strings[] = sprintf("Object Caching %d/%d objects using %s", $w3_objectcache->cache_hits, $w3_objectcache->cache_total, w3_get_engine_name($this->_config->get_string('objectcache.engine'))); 
     
    439417 
    440418                    if ($this->_config->get_boolean('cdn.enabled') && !$this->_config->get_boolean('cdn.debug')) { 
    441                         $w3_plugin_cdn = & w3_instance('/Plugin/CdnEnabled.php'); 
    442                         $cdn = & $w3_plugin_cdn->get_cdn(); 
     419                        $w3_plugin_cdn = & w3_instance('W3_Plugin_Cdn'); 
     420                        $w3_plugin_cdncommon = & w3_instance('W3_Plugin_CdnCommon'); 
     421                        $cdn = & $w3_plugin_cdncommon->get_cdn(); 
    443422                        $via = $cdn->get_via(); 
    444423 
  • w3-total-cache/trunk/lib/W3/Plugin/TotalCacheActivation.php

    r409551 r410604  
    88} 
    99 
    10 require_once W3TC_INC_DIR . '/file.php'; 
     10require_once W3TC_INC_DIR . '/functions/file.php'; 
    1111require_once W3TC_LIB_W3_DIR . '/Plugin.php'; 
    1212 
  • w3-total-cache/trunk/lib/W3/Plugin/TotalCacheAdmin.php

    r409551 r410604  
    1010define('W3TC_PLUGIN_TOTALCACHE_REGEXP_COOKIEDOMAIN', '~define\s*\(\s*[\'"]COOKIE_DOMAIN[\'"]\s*,.*?\)~is'); 
    1111 
     12require_once W3TC_INC_DIR . '/functions/rule.php'; 
    1213require_once W3TC_LIB_W3_DIR . '/Plugin.php'; 
    1314 
     
    478479     */ 
    479480    function in_plugin_update_message() { 
    480         require_once W3TC_INC_DIR . '/http.php'; 
     481        require_once W3TC_INC_DIR . '/functions/http.php'; 
    481482 
    482483        $response = w3_http_get(W3TC_README_URL); 
     
    846847                $this->_errors[] = sprintf('Page caching is not available: please add: <strong>define(\'WP_CACHE\', true);</strong> to <strong>%swp-config.php</strong>. This error message will automatically disappear once the change is successfully made.', ABSPATH); 
    847848            } elseif ($this->_config->get_string('pgcache.engine') == 'file_generic' && $this->_config->get_boolean('config.check') && w3_can_check_rules()) { 
    848                 $w3_plugin_pgcache = & w3_instance('/Plugin/PgCacheAdmin.php'); 
     849                $w3_plugin_pgcache = & w3_instance('W3_Plugin_PgCacheAdmin'); 
    849850 
    850851                if ($w3_plugin_pgcache->check_rules_core()) { 
     
    874875         */ 
    875876        if ($this->_config->get_boolean('browsercache.enabled') && $this->_config->get_boolean('config.check') && w3_can_check_rules()) { 
    876             $w3_plugin_browsercache = & w3_instance('/Plugin/BrowserCache.php'); 
     877            $w3_plugin_browsercache = & w3_instance('W3_Plugin_BrowserCacheAdmin'); 
    877878 
    878879            if ($this->_config->get_boolean('notes.browsercache_rules_cache') && !$w3_plugin_browsercache->check_rules_cache()) { 
     
    890891        if ($this->_config->get_boolean('minify.enabled')) { 
    891892            if ($this->_config->get_boolean('minify.rewrite') && $this->_config->get_boolean('config.check') && w3_can_check_rules()) { 
    892                 $w3_plugin_minify = & w3_instance('/Plugin/MinifyEnabled.php'); 
     893                $w3_plugin_minify = & w3_instance('W3_Plugin_MinifyAdmin'); 
    893894 
    894895                if ($w3_plugin_minify->check_rules_core()) { 
     
    13141315 
    13151316        $debug = ($this->_config->get_boolean('dbcache.debug') || $this->_config->get_boolean('objectcache.debug') || $this->_config->get_boolean('pgcache.debug') || $this->_config->get_boolean('minify.debug') || $this->_config->get_boolean('cdn.debug')); 
     1317        $file_nfs = ($this->_config->get_boolean('pgcache.file.nfs') || $this->_config->get_boolean('minify.file.nfs')); 
    13161318        $file_locking = ($this->_config->get_boolean('dbcache.file.locking') || $this->_config->get_boolean('objectcache.file.locking') || $this->_config->get_boolean('pgcache.file.locking') || $this->_config->get_boolean('minify.file.locking')); 
    13171319 
     
    14391441        $groups = $this->_config->get_array('mobile.rgroups'); 
    14401442 
    1441         $w3_mobile = & w3_instance('/Mobile.php'); 
     1443        $w3_mobile = & w3_instance('W3_Mobile'); 
    14421444        $themes = $w3_mobile->get_themes(); 
    14431445 
     
    14531455        $groups = $this->_config->get_array('referrer.rgroups'); 
    14541456 
    1455         $w3_referrer = & w3_instance('/Referrer.php'); 
     1457        $w3_referrer = & w3_instance('W3_Referrer'); 
    14561458 
    14571459        $themes = $w3_referrer->get_themes(); 
     
    15131515        if (w3_can_check_rules()) { 
    15141516            if ($this->_config->get_boolean('minify.enabled') && $this->_config->get_string('minify.engine') == 'file') { 
    1515                 $w3_plugin_minify = & w3_instance('/Plugin/MinifyEnabled.php'); 
     1517                $w3_plugin_minify = & w3_instance('W3_Plugin_MinifyAdmin'); 
    15161518 
    15171519                $minify_rules_cache_path = w3_get_minify_rules_cache_path(); 
     
    15251527 
    15261528            if ($this->_config->get_boolean('pgcache.enabled')) { 
    1527                 $w3_plugin_pgcache = & w3_instance('/Plugin/PgCacheAdmin.php'); 
     1529                $w3_plugin_pgcache = & w3_instance('W3_Plugin_PgCacheAdmin'); 
    15281530 
    15291531                $pgcache_rules_cache_path = w3_get_pgcache_rules_cache_path(); 
     
    15371539 
    15381540            if ($this->_config->get_boolean('browsercache.enabled')) { 
    1539                 $w3_plugin_browsercache = & w3_instance('/Plugin/BrowserCache.php'); 
     1541                $w3_plugin_browsercache = & w3_instance('W3_Plugin_BrowserCacheAdmin'); 
    15401542 
    15411543                $browsercache_rules_cache_path = w3_get_browsercache_rules_cache_path(); 
     
    15491551 
    15501552            if ($this->_config->get_boolean('minify.enabled')) { 
    1551                 $w3_plugin_minify = & w3_instance('/Plugin/MinifyEnabled.php'); 
     1553                $w3_plugin_minify = & w3_instance('W3_Plugin_MinifyAdmin'); 
    15521554 
    15531555                $minify_rules_core_path = w3_get_minify_rules_core_path(); 
     
    15611563 
    15621564            if ($this->_config->get_boolean('pgcache.enabled')) { 
    1563                 $w3_plugin_pgcache = & w3_instance('/Plugin/PgCacheAdmin.php'); 
     1565                $w3_plugin_pgcache = & w3_instance('W3_Plugin_PgCacheAdmin'); 
    15641566 
    15651567                $pgcache_rules_core_path = w3_get_pgcache_rules_core_path(); 
     
    15731575 
    15741576            if ($this->_config->get_boolean('browsercache.enabled') && $this->_config->get_boolean('browsercache.no404wp')) { 
    1575                 $w3_plugin_browsercache = & w3_instance('/Plugin/BrowserCache.php'); 
     1577                $w3_plugin_browsercache = & w3_instance('W3_Plugin_BrowserCacheAdmin'); 
    15761578 
    15771579                $browsercache_rules_no404wp_path = w3_get_browsercache_rules_no404wp_path(); 
     
    15851587 
    15861588            if ($this->_config->get_boolean('browsercache.enabled') && $this->_config->get_boolean('cdn.enabled') && $this->_config->get_string('cdn.engine') == 'ftp') { 
    1587                 $w3_plugin_cdn = & w3_instance('/Plugin/CdnEnabled.php'); 
     1589                $w3_plugin_cdn = & w3_instance('W3_Plugin_CdnCommon'); 
    15881590                $cdn = & $w3_plugin_cdn->get_cdn(); 
    15891591 
     
    23832385        require_once W3TC_LIB_W3_DIR . '/Request.php'; 
    23842386 
    2385         $w3_plugin_cdn = & w3_instance('/Plugin/CdnEnabled.php'); 
     2387        $w3_plugin_cdn = & w3_instance('W3_Plugin_CdnAdmin'); 
    23862388        $cdn_queue_action = W3_Request::get_string('cdn_queue_action'); 
    23872389        $cdn_queue_tab = W3_Request::get_string('cdn_queue_tab'); 
     
    24302432     */ 
    24312433    function action_cdn_export_library() { 
    2432         $w3_plugin_cdn = & w3_instance('/Plugin/CdnEnabled.php'); 
     2434        $w3_plugin_cdn = & w3_instance('W3_Plugin_CdnAdmin'); 
    24332435 
    24342436        $total = $w3_plugin_cdn->get_attachments_count(); 
     
    24462448        require_once W3TC_LIB_W3_DIR . '/Request.php'; 
    24472449 
    2448         $w3_plugin_cdn = & w3_instance('/Plugin/CdnEnabled.php'); 
     2450        $w3_plugin_cdn = & w3_instance('W3_Plugin_CdnAdmin'); 
    24492451 
    24502452        $limit = W3_Request::get_integer('limit'); 
     
    24742476     */ 
    24752477    function action_cdn_import_library() { 
    2476         $w3_plugin_cdn = & w3_instance('/Plugin/CdnEnabled.php'); 
    2477         $cdn = & $w3_plugin_cdn->get_cdn(); 
     2478        $w3_plugin_cdn = & w3_instance('W3_Plugin_CdnAdmin'); 
     2479        $w3_plugin_cdncommon = & w3_instance('W3_Plugin_CdnCommon'); 
     2480 
     2481        $cdn = & $w3_plugin_cdncommon->get_cdn(); 
    24782482 
    24792483        $total = $w3_plugin_cdn->get_import_posts_count(); 
     
    24932497        require_once W3TC_LIB_W3_DIR . '/Request.php'; 
    24942498 
    2495         $w3_plugin_cdn = & w3_instance('/Plugin/CdnEnabled.php'); 
     2499        $w3_plugin_cdn = & w3_instance('W3_Plugin_CdnAdmin'); 
    24962500 
    24972501        $limit = W3_Request::get_integer('limit'); 
     
    25212525     */ 
    25222526    function action_cdn_rename_domain() { 
    2523         $w3_plugin_cdn = & w3_instance('/Plugin/CdnEnabled.php'); 
     2527        $w3_plugin_cdn = & w3_instance('W3_Plugin_CdnAdmin'); 
    25242528 
    25252529        $total = $w3_plugin_cdn->get_rename_posts_count(); 
     
    25382542        require_once W3TC_LIB_W3_DIR . '/Request.php'; 
    25392543 
    2540         $w3_plugin_cdn = & w3_instance('/Plugin/CdnEnabled.php'); 
     2544        $w3_plugin_cdn = & w3_instance('W3_Plugin_CdnAdmin'); 
    25412545 
    25422546        $limit = W3_Request::get_integer('limit'); 
     
    25692573        require_once W3TC_LIB_W3_DIR . '/Request.php'; 
    25702574 
    2571         $w3_plugin_cdn = & w3_instance('/Plugin/CdnEnabled.php'); 
     2575        $w3_plugin_cdn = & w3_instance('W3_Plugin_Cdn'); 
    25722576 
    25732577        $cdn_export_type = W3_Request::get_string('cdn_export_type', 'custom'); 
     
    26072611        require_once W3TC_LIB_W3_DIR . '/Request.php'; 
    26082612 
    2609         $w3_plugin_cdn = & w3_instance('/Plugin/CdnEnabled.php'); 
     2613        $w3_plugin_cdn = & w3_instance('W3_Plugin_CdnCommon'); 
    26102614 
    26112615        $files = W3_Request::get_array('files'); 
     
    26632667 
    26642668        if (count($purge)) { 
    2665             $w3_plugin_cdn = & w3_instance('/Plugin/CdnEnabled.php'); 
     2669            $w3_plugin_cdn = & w3_instance('W3_Plugin_CdnCommon'); 
    26662670            $w3_plugin_cdn->purge($purge, false, $results); 
    26672671        } else { 
     
    26832687        $attachment_id = W3_Request::get_integer('attachment_id'); 
    26842688 
    2685         $w3_plugin_cdn = & w3_instance('/Plugin/CdnEnabled.php'); 
     2689        $w3_plugin_cdn = & w3_instance('W3_Plugin_CdnAdmin'); 
    26862690 
    26872691        if ($w3_plugin_cdn->purge_attachment($attachment_id, $results)) { 
     
    29592963         */ 
    29602964        if ($this->_page == 'w3tc_general') { 
     2965            $file_nfs = W3_Request::get_boolean('file_nfs'); 
    29612966            $file_locking = W3_Request::get_boolean('file_locking'); 
     2967 
     2968            $config->set('pgcache.file.nfs', $file_nfs); 
     2969            $config->set('minify.file.nfs', $file_nfs); 
    29622970 
    29632971            $config->set('dbcache.file.locking', $file_locking); 
     
    34033411        $post_id = W3_Request::get_integer('post_id'); 
    34043412 
    3405         $w3_pgcache = & w3_instance('/PgCache.php'); 
     3413        $w3_pgcache = & w3_instance('W3_PgCacheFlush'); 
    34063414 
    34073415        if ($w3_pgcache->flush_post($post_id)) { 
     
    34263434        $post_id = W3_Request::get_integer('post_id'); 
    34273435 
    3428         $w3_pgcache = & w3_instance('/PgCache.php'); 
     3436        $w3_pgcache = & w3_instance('W3_PgCacheFlush'); 
    34293437 
    34303438        if ($w3_pgcache->flush_post($post_id)) { 
     
    34453453     */ 
    34463454    function action_pgcache_write_rules_core() { 
    3447         $w3_plugin_pgcache = & w3_instance('/Plugin/PgCacheAdmin.php'); 
     3455        $w3_plugin_pgcache = & w3_instance('W3_Plugin_PgCacheAdmin'); 
    34483456 
    34493457        if ($w3_plugin_pgcache->write_rules_core()) { 
     
    34643472     */ 
    34653473    function action_pgcache_write_rules_cache() { 
    3466         $w3_plugin_pgcache = & w3_instance('/Plugin/PgCacheAdmin.php'); 
     3474        $w3_plugin_pgcache = & w3_instance('W3_Plugin_PgCacheAdmin'); 
    34673475 
    34683476        if ($w3_plugin_pgcache->write_rules_cache()) { 
     
    34833491     */ 
    34843492    function action_pgcache_remove_rules_legacy() { 
    3485         $w3_plugin_pgcache = & w3_instance('/Plugin/PgCacheAdmin.php'); 
     3493        $w3_plugin_pgcache = & w3_instance('W3_Plugin_PgCacheAdmin'); 
    34863494 
    34873495        if ($w3_plugin_pgcache->remove_rules_legacy()) { 
     
    35023510     */ 
    35033511    function action_pgcache_remove_rules_wpsc() { 
    3504         $w3_plugin_pgcache = & w3_instance('/Plugin/PgCacheAdmin.php'); 
     3512        $w3_plugin_pgcache = & w3_instance('W3_Plugin_PgCacheAdmin'); 
    35053513 
    35063514        if ($w3_plugin_pgcache->remove_rules_wpsc()) { 
     
    35213529     */ 
    35223530    function action_browsercache_write_rules_cache() { 
    3523         $w3_plugin_browsercache = & w3_instance('/Plugin/BrowserCache.php'); 
     3531        $w3_plugin_browsercache = & w3_instance('W3_Plugin_BrowserCacheAdmin'); 
    35243532 
    35253533        if ($w3_plugin_browsercache->write_rules_cache()) { 
     
    35403548     */ 
    35413549    function action_browsercache_write_rules_no404wp() { 
    3542         $w3_plugin_browsercache = & w3_instance('/Plugin/BrowserCache.php'); 
     3550        $w3_plugin_browsercache = & w3_instance('W3_Plugin_BrowserCacheAdmin'); 
    35433551 
    35443552        if ($w3_plugin_browsercache->write_rules_no404wp()) { 
     
    35593567     */ 
    35603568    function action_minify_write_rules_core() { 
    3561         $w3_plugin_minify = & w3_instance('/Plugin/MinifyEnabled.php'); 
     3569        $w3_plugin_minify = & w3_instance('W3_Plugin_MinifyAdmin'); 
    35623570 
    35633571        if ($w3_plugin_minify->write_rules_core()) { 
     
    35783586     */ 
    35793587    function action_minify_write_rules_cache() { 
    3580         $w3_plugin_minify = & w3_instance('/Plugin/MinifyEnabled.php'); 
     3588        $w3_plugin_minify = & w3_instance('W3_Plugin_MinifyAdmin'); 
    35813589 
    35823590        if ($w3_plugin_minify->write_rules_cache()) { 
     
    35973605     */ 
    35983606    function action_minify_remove_rules_legacy() { 
    3599         $w3_plugin_minify = & w3_instance('/Plugin/MinifyEnabled.php'); 
     3607        $w3_plugin_minify = & w3_instance('W3_Plugin_MinifyAdmin'); 
    36003608 
    36013609        if ($w3_plugin_minify->remove_rules_legacy()) { 
     
    41194127         */ 
    41204128        if ($new_config->save($preview)) { 
    4121             $w3_plugin_pgcache = & w3_instance('/Plugin/PgCacheAdmin.php'); 
    4122             $w3_plugin_dbcache = & w3_instance('/Plugin/DbCache.php'); 
    4123             $w3_plugin_objectcache = & w3_instance('/Plugin/ObjectCache.php'); 
    4124             $w3_plugin_browsercache = & w3_instance('/Plugin/BrowserCache.php'); 
    4125             $w3_plugin_cdn = & w3_instance('/Plugin/CdnEnabled.php'); 
     4129            $w3_plugin_pgcache = & w3_instance('W3_Plugin_PgCacheAdmin'); 
     4130            $w3_plugin_dbcache = & w3_instance('W3_Plugin_DbCache'); 
     4131            $w3_plugin_objectcache = & w3_instance('W3_Plugin_ObjectCache'); 
     4132            $w3_plugin_browsercache = & w3_instance('W3_Plugin_BrowserCacheAdmin'); 
     4133            $w3_plugin_cdn = & w3_instance('W3_Plugin_CdnAdmin'); 
    41264134 
    41274135            if (W3TC_PHP5) { 
    4128                 $w3_plugin_minify = & w3_instance('/Plugin/MinifyEnabled.php'); 
     4136                $w3_plugin_minify = & w3_instance('W3_Plugin_MinifyAdmin'); 
    41294137            } 
    41304138 
     
    41654173            } 
    41664174 
    4167             if (W3TC_PHP5 && $old_config->get_integer('minify.file.gc') != $new_config->get_integer('minify.file.gc')) { 
    4168                 $w3_plugin_minify->unschedule(); 
     4175            if (W3TC_PHP5) { 
     4176                 $w3_plugin_minify->before_config_change($old_config, $new_config); 
    41694177            } 
    41704178 
     
    42074215            $w3_plugin_objectcache->schedule(); 
    42084216            $w3_plugin_cdn->after_config_change(); 
    4209  
    4210             if (W3TC_PHP5) { 
    4211                 $w3_plugin_minify->schedule(); 
    4212             } 
    42134217 
    42144218            /** 
     
    42484252             */ 
    42494253            if (W3TC_PHP5) { 
    4250                 if ($new_config->get_boolean('minify.enabled') && $new_config->get_boolean('minify.rewrite')) { 
    4251                     if (w3_can_modify_rules(w3_get_minify_rules_core_path())) { 
    4252                         $w3_plugin_minify->write_rules_core(); 
    4253                     } 
    4254  
    4255                     if ($this->_config->get_string('minify.engine') == 'file') { 
    4256                         if (w3_can_modify_rules(w3_get_minify_rules_cache_path())) { 
    4257                             $w3_plugin_minify->write_rules_cache(); 
    4258                         } 
    4259                     } else { 
    4260                         if (w3_can_modify_rules(w3_get_minify_rules_cache_path())) { 
    4261                             $w3_plugin_minify->remove_rules_cache(); 
    4262                         } 
    4263                     } 
    4264                 } else { 
    4265                     if (w3_can_modify_rules(w3_get_minify_rules_core_path())) { 
    4266                         $w3_plugin_minify->remove_rules_core(); 
    4267                     } 
    4268  
    4269                     if (w3_can_modify_rules(w3_get_minify_rules_cache_path())) { 
    4270                         $w3_plugin_minify->remove_rules_cache(); 
    4271                     } 
    4272                 } 
     4254                $w3_plugin_minify->after_config_change(); 
    42734255            } 
    42744256 
     
    42964278            if ($update_cf_cnames) { 
    42974279                $error = null; 
    4298                 $cdn = $w3_plugin_cdn->get_cdn(); 
    4299                 $cdn->update_cnames($error); 
     4280                $w3_plugin_cdn->update_cnames($error); 
    43004281            } 
    43014282 
     
    44024383     */ 
    44034384    function flush_pgcache() { 
    4404         $w3_pgcache = & w3_instance('/PgCache.php'); 
     4385        $w3_pgcache = & w3_instance('W3_PgCacheFlush'); 
    44054386        $w3_pgcache->flush(); 
    44064387    } 
     
    44244405     */ 
    44254406    function flush_objectcache() { 
    4426         $w3_objectcache = & w3_instance('/ObjectCache.php'); 
     4407        $w3_objectcache = & w3_instance('W3_ObjectCache'); 
    44274408        $w3_objectcache->flush(); 
    44284409    } 
     
    44354416    function flush_minify() { 
    44364417        if (W3TC_PHP5) { 
    4437             $w3_minify = & w3_instance('/Minify.php'); 
     4418            $w3_minify = & w3_instance('W3_Minify'); 
    44384419            $w3_minify->flush(); 
    44394420        } 
     
    49164897             * Get page contents 
    49174898             */ 
    4918             require_once W3TC_INC_DIR . '/http.php'; 
     4899            require_once W3TC_INC_DIR . '/functions/http.php'; 
    49194900 
    49204901            $response = w3_http_get($url); 
     
    52795260 
    52805261        if ($result === false) { 
    5281             require_once W3TC_INC_DIR . '/http.php'; 
     5262            require_once W3TC_INC_DIR . '/functions/http.php'; 
    52825263 
    52835264            $response = w3_http_get($url); 
     
    53925373     */ 
    53935374    function cdn_upload_minify() { 
    5394         $w3_plugin_cdn = & w3_instance('/Plugin/CdnEnabled.php'); 
     5375        $w3_plugin_cdn = & w3_instance('W3_Plugin_Cdn'); 
     5376        $w3_plugin_cdncommon = & w3_instance('W3_Plugin_CdnCommon'); 
    53955377 
    53965378        $files = $w3_plugin_cdn->get_files_minify(); 
     
    54045386        } 
    54055387 
    5406         $w3_plugin_cdn->upload($upload, true, $results); 
     5388        $w3_plugin_cdncommon->upload($upload, true, $results); 
    54075389    } 
    54085390 
     
    54135395     */ 
    54145396    function cdn_upload_browsercache() { 
    5415         $w3_plugin_cdn = & w3_instance('/Plugin/CdnEnabled.php'); 
    5416         $w3_plugin_browsercache = & w3_instance('/Plugin/BrowserCache.php'); 
     5397        $w3_plugin_cdn = & w3_instance('W3_Plugin_CdnCommon'); 
     5398        $w3_plugin_browsercache = & w3_instance('W3_Plugin_BrowserCacheAdmin'); 
    54175399 
    54185400        $rules = $w3_plugin_browsercache->generate_rules_cache(true); 
     
    54375419     */ 
    54385420    function cdn_delete_browsercache() { 
    5439         $w3_plugin_cdn = & w3_instance('/Plugin/CdnEnabled.php'); 
     5421        $w3_plugin_cdn = & w3_instance('W3_Plugin_CdnCommon'); 
    54405422 
    54415423        $cdn_path = w3_get_cdn_rules_path(); 
  • w3-total-cache/trunk/lib/W3/Referrer.php

    r409551 r410604  
    2020     */ 
    2121    function __construct() { 
    22         $config = & w3_instance('/Config.php'); 
     22        $config = & w3_instance('W3_Config'); 
    2323 
    2424        $this->groups = $config->get_array('referrer.rgroups'); 
  • w3-total-cache/trunk/lib/W3/Varnish.php

    r409551 r410604  
    3434     */ 
    3535    function __construct() { 
    36         $config = & w3_instance('/Config.php'); 
     36        $config = & w3_instance('W3_Config'); 
    3737 
    3838        $this->_debug = $config->get_boolean('varnish.debug'); 
     
    5555     */ 
    5656    function purge($uri) { 
    57         require_once W3TC_INC_DIR . '/http.php'; 
     57        require_once W3TC_INC_DIR . '/functions/http.php'; 
    5858 
    5959        @set_time_limit($this->_timeout); 
  • w3-total-cache/trunk/w3-total-cache.php

    r409551 r410604  
    4949     * Run plugin 
    5050     */ 
    51     $w3_plugin_totalcache = & w3_instance('/Plugin/TotalCache.php'); 
     51    $w3_plugin_totalcache = & w3_instance('W3_Plugin_TotalCache'); 
    5252    $w3_plugin_totalcache->run(); 
    5353} 
  • w3-total-cache/trunk/wp-content/advanced-cache.php

    r409551 r410604  
    2121        require_once W3TC_DIR . '/inc/define.php'; 
    2222 
    23         $w3_pgcache = & w3_instance('/PgCache.php'); 
     23        $w3_pgcache = & w3_instance('W3_PgCache'); 
    2424        $w3_pgcache->process(); 
    2525    } 
  • w3-total-cache/trunk/wp-content/object-cache.php

    r409551 r410604  
    2828     */ 
    2929    function wp_cache_init() { 
    30         $GLOBALS['wp_object_cache'] = & w3_instance('/ObjectCache.php'); 
     30        $GLOBALS['wp_object_cache'] = & w3_instance('W3_ObjectCache'); 
    3131    } 
    3232 
  • w3-total-cache/trunk/wp-content/w3tc/min/index.php

    r409551 r410604  
    2525require_once W3TC_DIR . '/inc/define.php'; 
    2626 
    27 $w3_minify = & w3_instance('/Minify.php'); 
     27$w3_minify = & w3_instance('W3_Minify'); 
    2828$w3_minify->process(); 
Note: See TracChangeset for help on using the changeset viewer.