WordPress.org

Plugin Directory

Changeset 665512


Ignore:
Timestamp:
02/09/13 06:15:47 (14 months ago)
Author:
fredericktownes
Message:

Still Attempting to recover from WP FS API issues.

Location:
w3-total-cache
Files:
524 added
25 edited

Legend:

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

    r664104 r665512  
    66 
    77define('W3TC', true); 
    8 define('W3TC_VERSION', '0.9.2.7'); 
     8define('W3TC_VERSION', '0.9.2.8'); 
    99define('W3TC_POWERED_BY', 'W3 Total Cache/' . W3TC_VERSION); 
    1010define('W3TC_EMAIL', 'w3tc@w3-edge.com'); 
     
    14351435 
    14361436/** 
    1437  * @param $filename 
    1438  * @param $content 
    1439  * @return bool 
    1440  */ 
    1441 function file_put_contents_atomic($filename, $content) { 
    1442  
    1443     $temp = tempnam(W3TC_CACHE_TMP_DIR, 'temp'); 
    1444     if (!($f = @fopen($temp, 'wb'))) { 
    1445         $temp = W3TC_CACHE_TMP_DIR . DIRECTORY_SEPARATOR . uniqid('temp'); 
    1446         if (!($f = @fopen($temp, 'wb'))) { 
    1447             trigger_error("file_put_contents_atomic() : error writing temporary file '$temp'", E_USER_WARNING); 
    1448             return false; 
    1449         } 
    1450     } 
    1451  
    1452     fwrite($f, $content); 
    1453     fclose($f); 
    1454  
    1455     if (!@rename($temp, $filename)) { 
    1456         @unlink($filename); 
    1457         @rename($temp, $filename); 
    1458     } 
    1459     $chmod = 0644; 
    1460     if (defined('FS_CHMOD_FILE')) 
    1461         $chmod = FS_CHMOD_FILE; 
    1462     @chmod($filename, $chmod); 
    1463     return true; 
    1464 } 
    1465  
    1466 /** 
    14671437 * Takes seconds and converts to array('Nh ','Nm ', 'Ns ', 'Nms ') or "Nh Nm Ns Nms" 
    14681438 * @param $input 
  • w3-total-cache/trunk/inc/functions/activation.php

    r663605 r665512  
    9999 * 
    100100 * @param string $path 
    101  * @throws FileOperationException 
    102  */ 
    103 function w3_throw_on_write_error($path) { 
     101 * @param string[] $chmod_dirs Directories that should be chmod 777 inorder to write 
     102 * @throws FileOperationException 
     103 */ 
     104function w3_throw_on_write_error($path, $chmod_dirs = array()) { 
    104105    w3_require_once(W3TC_INC_DIR . '/functions/file.php'); 
    105  
     106    $chmods = ''; 
     107    if ($chmod_dirs) { 
     108        $chmods = '<ul>'; 
     109        foreach($chmod_dirs as $dir) { 
     110            $chmods .= sprintf('<li><strong style="color: #f00;">chmod 777 %s</strong></li>', $dir); 
     111        } 
     112    } else { 
     113        $chmods = sprintf('<strong style="color: #f00;">chmod 777 %s</strong>', 
     114                         (file_exists($path) ? $path : dirname($path))); 
     115    } 
    106116    if (w3_check_open_basedir($path)) { 
    107117        $error = sprintf('<strong>%s</strong> could not be created, please run following ' . 
    108             'command:<br /><strong style="color: #f00;">chmod 777 %s</strong>', $path, 
    109             (file_exists($path) ? $path : dirname($path))); 
     118            'command:<br />%s', $path, 
     119            $chmods); 
    110120    } else { 
    111121        $error = sprintf('<strong>%s</strong> could not be created, <strong>open_basedir' . 
     
    152162        W3TC_CACHE_CONFIG_DIR, 
    153163        W3TC_CACHE_TMP_DIR); 
    154      
    155     foreach ($directories as $d) { 
    156         if (!@is_dir($d)) { 
    157             try{ 
    158                 w3_wp_create_folder($d, 'direct'); 
    159             } catch(Exception $ex) {} 
    160         } 
    161     } 
     164 
     165    try{ 
     166        w3_wp_create_folders($directories, 'direct'); 
     167    } catch(Exception $ex) {} 
    162168} 
    163169 
     
    209215 */ 
    210216function w3_wp_copy_file($source_filename, $destination_filename, $method = '', $url = '', $context = false) { 
     217    $contents = @file_get_contents($source_filename); 
     218    if ($contents) { 
     219        @file_put_contents($destination_filename, $contents); 
     220    } 
     221    if (@file_exists($destination_filename)) { 
     222        if (@file_get_contents($destination_filename) == $contents) 
     223            return; 
     224    } 
     225 
    211226    w3_wp_request_filesystem_credentials($method, $url, $context); 
    212227 
     
    228243 */ 
    229244function w3_wp_create_folder($folder, $method = '', $url = '', $context = false) { 
    230     w3_wp_request_filesystem_credentials($method, $url, $context); 
    231  
    232     global $wp_filesystem; 
    233     if (!$wp_filesystem->mkdir($folder, FS_CHMOD_DIR)) { 
    234         throw new FileOperationException('Could not create folder:' . $folder, 'create', 'folder', $folder); 
    235     } 
    236 } 
    237  
    238  
    239 /** 
    240  * @param $folders 
    241  * @param string $method Which method to use when creating 
    242  * @param string $url Where to redirect after creation 
    243  * @param bool|string $context folder to create folders in 
    244  * @throws FilesystemCredentialException with S/FTP form if it can't get the required filesystem credentials 
    245  * @throws FileOperationException 
    246  */ 
    247 function w3_wp_create_folders($folders, $method = '', $url = '', $context = false) { 
    248     w3_wp_request_filesystem_credentials($method, $url, $context); 
    249  
    250     global $wp_filesystem; 
    251  
    252     foreach($folders as $folder) { 
     245    if (!@is_dir($folder) && !@w3_mkdir($folder)) { 
     246        w3_wp_request_filesystem_credentials($method, $url, $context); 
     247 
     248        global $wp_filesystem; 
    253249        if (!$wp_filesystem->mkdir($folder, FS_CHMOD_DIR)) { 
    254             throw new FileOperationException('Could not create folder: ' . $folder, 'create', 'folder', $folder); 
     250            throw new FileOperationException('Could not create directory:' . $folder, 'create', 'folder', $folder); 
    255251        } 
    256252    } 
     
    268264    $delete_folders = array(); 
    269265    foreach($folders as $folder) { 
    270         if (is_dir($folder) && file_exists($folder)) 
     266        if (is_dir($folder)) 
    271267            $delete_folders[] = $folder; 
    272268    } 
    273269    if (empty($delete_folders)) 
     270        return; 
     271 
     272    $removed = true; 
     273    foreach ($delete_folders as $folder) { 
     274        w3_rmdir($folder); 
     275        if (@is_dir($folder)) 
     276            @rmdir($folder); 
     277        if (@is_dir($folder)) { 
     278            $removed = false; 
     279            break; 
     280        } 
     281    } 
     282 
     283    if ($removed) 
    274284        return; 
    275285    w3_wp_request_filesystem_credentials($method, $url, $context); 
     
    281291        if (file_exists($folder)) 
    282292            if (!$wp_filesystem->rmdir($folder, FS_CHMOD_DIR)) { 
    283                 throw new FileOperationException('Could not delete folder: ' . $folder, 'delete', 'folder', $folder); 
     293                throw new FileOperationException('Could not delete directory: ' . $folder, 'delete', 'folder', $folder); 
    284294            } 
    285295    } 
     
    295305 */ 
    296306function w3_wp_delete_file($file, $method = '', $url = '', $context = false) { 
    297     if (@unlink($file)) { 
     307    if (!@unlink($file)) { 
    298308        w3_wp_request_filesystem_credentials($method, $url, false, $context = false); 
    299309 
     
    302312        if (file_exists($file) && !$wp_filesystem->delete($file)) { 
    303313            throw new FileOperationException('Could not delete file: ' . $file, 'delete', 'file', $file); 
    304         } 
    305     } 
    306 } 
    307  
    308 /** 
    309  * Copy files using WordPress filesystem functions. 
    310  * @param $files 
    311  * @param string $method Which method to use when creating 
    312  * @param string $url Where to redirect after creation 
    313  * @param bool|string $context folder to copy too 
    314  * @throws FilesystemCredentialException with S/FTP form if it can't get the required filesystem credentials 
    315  * @throws FileOperationException 
    316  */ 
    317 function w3_wp_copy_files($files, $method = '', $url = '', $context = false) { 
    318     w3_wp_request_filesystem_credentials($method, $url, false, $context); 
    319  
    320     global $wp_filesystem; 
    321     foreach($files as $source_filename => $destination_filename) { 
    322         $contents = $wp_filesystem->get_contents($source_filename); 
    323  
    324         if (!$wp_filesystem->put_contents($destination_filename, $contents, FS_CHMOD_FILE)) { 
    325             throw new FileOperationException('Could not create file: ' . $destination_filename, 'create', 'file', $destination_filename); 
    326314        } 
    327315    } 
     
    359347 
    360348/** 
    361  * @param $add_in_files array with key as source and value as destination 
    362  * @param $cache_folders value is the folder path 
    363  * @param string $method Which method to use when creating 
    364  * @param string $url Where to redirect after creation 
    365  * @throws FilesystemCredentialException with S/FTP form if it can't get the required filesystem credentials 
    366  * @throws FileOperationException 
    367  */ 
    368 function w3_create_missing_files_and_folders($add_in_files, $cache_folders, $method = '', $url = '') { 
    369     if (empty($add_in_files) && empty($cache_folders)) 
    370         return; 
    371  
    372     w3_wp_request_filesystem_credentials($method, $url); 
    373  
    374     global $wp_filesystem; 
    375  
    376     foreach($cache_folders as $folder) { 
    377         if (!$wp_filesystem->mkdir($folder, FS_CHMOD_DIR)) { 
    378             throw new FileOperationException('Could not create folder:' . $folder, 'create', 'folder', $folder); 
    379         } 
    380     } 
    381     foreach($add_in_files as $source_filename => $destination_filename) { 
    382         $contents = $wp_filesystem->get_contents($source_filename); 
    383  
    384         if (file_exists($destination_filename) && ! $wp_filesystem->delete($destination_filename)) 
    385             throw new FileOperationException('Could not delete file: ' . $destination_filename, 'delete', 'file', $destination_filename); 
    386  
    387         if (!$wp_filesystem->put_contents($destination_filename, $contents, FS_CHMOD_FILE)) { 
    388             throw new FileOperationException('Could not create file: ' . $destination_filename, 'create', 'file', $destination_filename); 
    389         } 
    390     } 
    391 } 
    392  
    393 /** 
    394349 * Create files 
    395350 * @param $files array(from file => to file) 
     
    399354 * @throws FileOperationException 
    400355 */ 
    401 function w3_create_files($files, $method = '', $url = '', $context = false) { 
     356function w3_wp_create_files($files, $method = '', $url = '', $context = false) { 
    402357    if (empty($files)) 
    403358        return; 
    404359 
     360    $created = true; 
     361    foreach ($files as $source_filename => $destination_filename) { 
     362        $contents = @file_get_contents($source_filename); 
     363        if ($contents && !@file_put_contents($destination_filename, $contents)) { 
     364            $created = false; 
     365            break; 
     366        } 
     367    } 
     368 
     369    if ($created) 
     370        return; 
     371 
    405372    w3_wp_request_filesystem_credentials($method, $url, $context); 
    406373 
     
    420387 
    421388/** 
    422  * Create folders 
     389 * Create folders in wp content 
    423390 * @param $folders array(folderpath1, folderpath2, ...) 
    424391 * @param string $method 
    425392 * @param string $url 
    426  * @throws FileOperationException 
    427  */ 
    428 function w3_create_folders($folders, $method = '', $url = '') { 
    429     if (empty($add_in_files) && empty($folders)) 
     393 * @param bool|string $context folder to create folders in 
     394 * @throws FilesystemCredentialException with S/FTP form if it can't get the required filesystem credentials 
     395 * @throws FileOperationException 
     396 */ 
     397function w3_wp_create_folders($folders, $method = '', $url = '', $context = false) { 
     398    if (empty($folders)) 
    430399        return; 
    431400 
    432     w3_wp_request_filesystem_credentials($method, $url); 
     401    $created = true; 
     402    foreach ($folders as $folder) { 
     403        if (!@is_dir($folder) && !@w3_mkdir_from($folder, WP_CONTENT_DIR)) { 
     404            $created = false; 
     405            break; 
     406        } 
     407    } 
     408    if ($created) 
     409        return; 
     410 
     411    w3_wp_request_filesystem_credentials($method, $url, $context); 
    433412 
    434413    global $wp_filesystem; 
    435414 
    436415    foreach($folders as $folder) { 
    437         if (!$wp_filesystem->mkdir($folder, FS_CHMOD_DIR)) { 
    438             throw new FileOperationException('Could not create folder:' . $folder, 'create', 'folder', $folder); 
     416        if (!@is_dir($folder) && !$wp_filesystem->mkdir($folder, FS_CHMOD_DIR)) { 
     417            throw new FileOperationException('Could not create directory:' . $folder, 'create', 'folder', $folder); 
    439418        } 
    440419    } 
     
    443422/** 
    444423 * Tries to write file content 
    445  * @param $filename path to file 
    446  * @param $content data to write 
     424 * @param string $filename path to file 
     425 * @param string $content data to write 
    447426 * @param string $method Which method to use when creating 
    448427 * @param string $url Where to redirect after creation 
     
    450429 * @throws FilesystemCredentialException with S/FTP form if it can't get the required filesystem credentials 
    451430 * @throws FileOperationException 
    452  * @return true; 
    453  */ 
    454 function w3_write_to_file($filename, $content, $method = '', $url = '', $context = false) { 
    455     if (is_writable($filename)) { 
    456         if (@file_put_contents($filename, $content)) 
    457             return true; 
    458         w3_wp_request_filesystem_credentials('direct'); 
    459         global $wp_filesystem; 
    460         if ($wp_filesystem->put_contents($filename, $content)) 
    461             return true; 
    462     } 
     431 * @return bool; 
     432 */ 
     433function w3_wp_write_to_file($filename, $content, $method = '', $url = '', $context = false) { 
     434    if (@file_put_contents($filename, $content)) 
     435        return true; 
    463436 
    464437    w3_wp_request_filesystem_credentials($method, $url, $context); 
     
    480453/** 
    481454 * Tries to read file content 
    482  * @param $filename path to file 
     455 * @param string $filename path to file 
    483456 * @param string $method Which method to use when creating 
    484457 * @param string $url Where to redirect after creation 
     
    488461 * @throws FileOperationException 
    489462 */ 
    490 function w3_read_from_file($filename, $method = '', $url = '', $context = false) { 
     463function w3_wp_read_from_file($filename, $method = '', $url = '', $context = false) { 
     464    $content = @file_get_contents($filename); 
     465    if ($content) 
     466        return $content; 
     467 
    491468    w3_wp_request_filesystem_credentials($method, $url, $context); 
    492469 
     
    512489    if (!is_dir($dir) || !file_exists($dir)) 
    513490        return false; 
     491 
     492    if (@chmod($dir, $permission)) 
     493        return true; 
     494 
    514495    w3_wp_request_filesystem_credentials($method, $url, $context); 
    515496 
     
    524505 
    525506/** 
    526  * @param $file path to file 
     507 * @param string $file path to file 
    527508 * @param $permission 
    528509 * @param string $method 
     
    557538    if (is_null($time)) 
    558539        $time = 'time()'; 
    559     w3_write_to_file(w3_get_site_root() . '/.maintenance', "<?php \$upgrading = $time; ?>"); 
     540    w3_wp_write_to_file(w3_get_site_root() . '/.maintenance', "<?php \$upgrading = $time; ?>"); 
    560541} 
    561542 
  • w3-total-cache/trunk/inc/functions/file.php

    r663605 r665512  
    208208    foreach ($open_basedirs as $open_basedir) { 
    209209        $open_basedir = trim($open_basedir); 
    210         if ($open_basedir != '') { 
     210        if (!empty($open_basedir) && $open_basedir != '') { 
    211211            $result[] = w3_realpath($open_basedir); 
    212212        } 
     
    241241function w3_get_file_permissions($file) { 
    242242    if (function_exists('fileperms') && $fileperms = @fileperms($file)) { 
    243         $fileperms = sprintf('0%o', 0777 & $fileperms); 
     243        $fileperms = 0777 & $fileperms; 
    244244    } else { 
    245245        clearstatcache(); 
    246246        $stat=@stat($file); 
    247247        if ($stat) 
    248             $fileperms = sprintf("0%o", 0777 & $stat['mode']); 
     248            $fileperms = 0777 & $stat['mode']; 
    249249        else 
    250             $fileperms = 'unknown'; 
     250            $fileperms = 0; 
    251251    } 
    252252    return $fileperms; 
  • w3-total-cache/trunk/inc/options/common/header.php

    r663605 r665512  
    1818    <?php endforeach; ?> 
    1919 
    20     <?php if ($this->_rule_errors_autoinstall != ''): ?> 
     20    <?php if (!$this->_disable_cache_write_notification && $this->_rule_errors_autoinstall != ''): ?> 
    2121    <div class="error"> 
    2222        <p> 
    2323            The following configuration changes are needed to ensure optimal performance:<br /> 
     24        </p> 
    2425            <ul style="padding-left: 20px"> 
    2526                <?php foreach ($this->_rule_errors as $error): ?> 
     
    2728                <?php endforeach; ?> 
    2829            </ul> 
    29         </p> 
     30 
    3031        <p> 
    3132            If permission allow this can be done automatically, by clicking here: 
     
    3637    <?php endif; ?> 
    3738 
    38     <?php if ($this->_rule_errors_root): ?> 
     39    <?php if (!$this->_disable_file_operation_notification && $this->_rule_errors_root): ?> 
    3940    <div class="error"> 
    4041        <p> 
    4142            The following configuration changes are needed to ensure optimal performance:<br /> 
     43        </p> 
    4244        <ul style="padding-left: 20px"> 
    4345            <?php foreach ($this->_rule_errors_root as $error): ?> 
     
    4547            <?php endforeach; ?> 
    4648        </ul> 
    47         </p> 
     49 
    4850    <?php if (isset($this->_ftp_form) && ($this->_use_ftp_form || $this->_rule_errors_root)): ?> 
    4951        <p> 
  • w3-total-cache/trunk/inc/options/pgcache.php

    r664104 r665512  
    250250                <td> 
    251251                    <?php $this->checkbox('pgcache.compatibility') ?> Enable compatibility mode</label><br /> 
    252                     <span class="description">Decreases performance by ~20% at scale in exchange for increasing interoperability with more hosting environemtns and WordPress idiosyncracies. This option should be enabled for most sites.</span> 
     252                    <span class="description">Decreases performance by ~20% at scale in exchange for increasing interoperability with more hosting environemnts and WordPress idiosyncracies. This option should be enabled for most sites.</span> 
    253253                </td> 
    254254            </tr> 
  • w3-total-cache/trunk/inc/popup/cdn_purge.php

    r409551 r665512  
    99        case 'cotendo': ?> 
    1010        <ul> 
    11             <li><em>wp-content/themes/twentyten/images/headers/</em> &mdash; the folder itself (only when accessed directly without any file).</li> 
    12             <li><em>wp-content/themes/twentyten/images/headers/*.</em> &mdash; all files in the folder with no extension, with all parameter variations.</li> 
    13             <li><em>wp-content/themes/twentyten/images/headers/*.jpg</em> &mdash; all files in the folder whose extension is "jpg".</li> 
     11            <li><em>wp-content/themes/twentyten/images/headers/</em> &mdash; the directory itself (only when accessed directly without any file).</li> 
     12            <li><em>wp-content/themes/twentyten/images/headers/*.</em> &mdash; all files in the directory with no extension, with all parameter variations.</li> 
     13            <li><em>wp-content/themes/twentyten/images/headers/*.jpg</em> &mdash; all files in the directory whose extension is "jpg".</li> 
    1414            <li><em>wp-content/themes/twentyten/images/headers/path</em> &mdash; the specific file (when the file does not have an extension), and without parameters.</li> 
    1515            <li><em>wp-content/themes/twentyten/images/headers/path.jpg</em> &mdash; the specific file with its extension, and without parameters.</li> 
  • w3-total-cache/trunk/lib/W3/ConfigAdmin.php

    r663605 r665512  
    117117        } 
    118118 
     119        if (!is_dir(dirname(W3TC_CACHE_TMP_DIR))) { 
     120            w3_require_once(W3TC_INC_DIR . '/functions/file.php'); 
     121            w3_mkdir_from(dirname(W3TC_CACHE_TMP_DIR), WP_CONTENT_DIR); 
     122        } 
     123 
    119124        if (!$this->_data_object->write($filename)) { 
    120125            if (is_dir(W3TC_CONFIG_DIR)) { 
    121126                w3_require_once(W3TC_INC_DIR . '/functions/activation.php'); 
    122                 w3_throw_on_write_error($filename); 
     127                w3_throw_on_write_error($filename, array(dirname($filename), W3TC_CACHE_TMP_DIR)); 
    123128            } 
    124129        } 
  • w3-total-cache/trunk/lib/W3/ConfigData.php

    r663605 r665512  
    154154            $config .= $this->_write_item(1, $key, $value); 
    155155        $config .= ");"; 
    156         return @file_put_contents_atomic($filename, $config); 
     156        return @$this->file_put_contents_atomic($filename, $config); 
    157157    } 
    158158     
     
    211211        return $item; 
    212212    } 
     213 
     214    /** 
     215     * @param $filename 
     216     * @param $content 
     217     * @return bool 
     218     */ 
     219    function file_put_contents_atomic($filename, $content) { 
     220        if (is_dir(W3TC_CACHE_TMP_DIR) && is_writable(W3TC_CACHE_TMP_DIR)) { 
     221            $temp = tempnam(W3TC_CACHE_TMP_DIR, 'temp'); 
     222        } else { 
     223            trigger_error("file_put_contents_atomic() : error writing temporary file to '" . W3TC_CACHE_TMP_DIR . "'", E_USER_WARNING); 
     224            return false; 
     225        } 
     226 
     227        $chmod = 0644; 
     228        if (defined('FS_CHMOD_FILE')) 
     229            $chmod = FS_CHMOD_FILE; 
     230        @chmod($temp, $chmod); 
     231 
     232        if (!($f = @fopen($temp, 'wb'))) { 
     233            if (file_exists($temp)) 
     234                @unlink($temp); 
     235           trigger_error("file_put_contents_atomic() : error writing temporary file '$temp'", E_USER_WARNING); 
     236           return false; 
     237        } 
     238 
     239        fwrite($f, $content); 
     240        fclose($f); 
     241 
     242        if (!@rename($temp, $filename)) { 
     243            @unlink($filename); 
     244            @rename($temp, $filename); 
     245        } 
     246 
     247        if (file_exists($temp)) 
     248            @unlink($temp); 
     249 
     250        $chmod = 0644; 
     251        if (defined('FS_CHMOD_FILE')) 
     252            $chmod = FS_CHMOD_FILE; 
     253        @chmod($filename, $chmod); 
     254        return true; 
     255    } 
    213256} 
  • w3-total-cache/trunk/lib/W3/ConfigKeys.php

    r663605 r665512  
    11221122    'cloudflare.ips.ip4' => array( 
    11231123        'type' => 'array', 
    1124         'default' => array() 
     1124        'default' => array("204.93.240.0/24", "204.93.177.0/24", "199.27.128.0/21", "173.245.48.0/20", "103.22.200.0/22", "141.101.64.0/18", "108.162.192.0/18","190.93.240.1/20","188.114.96.0/20", "198.41.128.0/17") 
    11251125    ), 
    11261126    'cloudflare.ips.ip6' => array( 
    11271127        'type' => 'array', 
    1128         'default' => array() 
     1128        'default' => array("2400:cb00::/32", "2606:4700::/32", "2803:f800::/32") 
    11291129    ), 
    11301130 
     
    16441644    'minify.auto.filename_length' => array( 
    16451645        'type' => 'integer', 
    1646         'default' => 251 
     1646        'default' => 150 
    16471647    ), 
    16481648    'common.instance_id' => array( 
  • w3-total-cache/trunk/lib/W3/ConfigWriter.php

    r663605 r665512  
    157157            if (is_dir(W3TC_CONFIG_DIR)) { 
    158158                w3_require_once(W3TC_INC_DIR . '/functions/activation.php'); 
    159                 w3_throw_on_write_error($filename); 
     159                w3_throw_on_write_error($filename, array(W3TC_CACHE_TMP_DIR, W3TC_CONFIG_DIR)); 
    160160            } 
    161161        } else { 
  • w3-total-cache/trunk/lib/W3/FileVerification.php

    r663605 r665512  
    5757        } 
    5858 
    59         if ($this->objectcache_check_old_add_in() || !$this->objectcache_check()) { 
     59        if ($this->objectcache_installed() && ($this->objectcache_check_old_add_in() || !$this->objectcache_check())) { 
    6060            $addin_files[W3TC_INSTALL_FILE_OBJECT_CACHE] = W3TC_ADDIN_FILE_OBJECT_CACHE; 
    6161            $addin_files_messages[] = sprintf('Object caching will not function properly: %s is not latest version.' 
  • w3-total-cache/trunk/lib/W3/Minify.php

    r663605 r665512  
    974974        $imploded = implode(',',$input); 
    975975        $config = w3_instance('W3_Config'); 
    976         if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN') { 
    977             if (function_exists('gzdeflate') || function_exists('gzcompress')) 
    978                 $fn_length = $config->get_integer('minify.auto.filename_length',251); 
    979             else 
    980                 $fn_length = 251; 
     976        if (!W3TC_WIN) { 
     977            $fn_length = $config->get_integer('minify.auto.filename_length',150); 
     978            $fn_length = $fn_length>150 ? 150 : $fn_length; 
    981979        } else { 
    982980            $dir = w3_cache_blog_dir('minify'); 
  • w3-total-cache/trunk/lib/W3/Plugin/BrowserCacheAdmin.php

    r663605 r665512  
    697697 
    698698        w3_require_once(W3TC_INC_DIR . '/functions/activation.php'); 
    699         w3_write_to_file($path, $data); 
     699        w3_wp_write_to_file($path, $data); 
    700700    } 
    701701 
     
    756756 
    757757        w3_require_once(W3TC_INC_DIR . '/functions/activation.php'); 
    758         w3_write_to_file($path, $data); 
     758        w3_wp_write_to_file($path, $data); 
    759759    } 
    760760 
     
    797797 
    798798                w3_require_once(W3TC_INC_DIR . '/functions/activation.php'); 
    799                 w3_write_to_file($path, $data); 
     799                w3_wp_write_to_file($path, $data); 
    800800            } 
    801801        } 
     
    816816 
    817817                w3_require_once(W3TC_INC_DIR . '/functions/activation.php'); 
    818                 w3_write_to_file($path, $data); 
     818                w3_wp_write_to_file($path, $data); 
    819819            } 
    820820        } 
  • w3-total-cache/trunk/lib/W3/Plugin/CdnAdmin.php

    r663605 r665512  
    995995 
    996996        w3_require_once(W3TC_INC_DIR . '/functions/activation.php'); 
    997         w3_write_to_file($path, $data); 
     997        w3_wp_write_to_file($path, $data); 
    998998    } 
    999999 
     
    10241024 
    10251025                w3_require_once(W3TC_INC_DIR . '/functions/activation.php'); 
    1026                 w3_write_to_file($path, $data); 
     1026                w3_wp_write_to_file($path, $data); 
    10271027            } 
    10281028        } 
  • w3-total-cache/trunk/lib/W3/Plugin/Minify.php

    r663605 r665512  
    166166 
    167167                    if ($this->_config->get_boolean('minify.auto')) { 
    168                         if ($this->_config->get_boolean('minify.css.enable')) { 
    169                             $ignore_css_files = $this->_config->get_array('minify.reject.files.css'); 
    170                             $files_to_minify = array(); 
    171  
    172                             $embed_pos = strpos($buffer, '<!-- W3TC-include-css -->'); 
    173  
    174  
    175                             $buffer = str_replace('<!-- W3TC-include-css -->', '', $buffer); 
    176                             if ($embed_pos === false) { 
    177                                 preg_match('~<head(\s+[^<>]+)*>~Ui', $buffer, $match, PREG_OFFSET_CAPTURE); 
    178                                 $embed_pos = strlen($match[0][0]) + $match[0][1]; 
    179                             } 
    180  
    181                             $ignore_css_files = array_map('w3_normalize_file', $ignore_css_files); 
    182                             $handled_styles = array(); 
    183                             $style_tags = w3_extract_css2($buffer); 
    184                             $previous_file_was_ignored = false; 
    185                             foreach ($style_tags as $style_tag_tuple) { 
    186                                 $style_tag = $style_tag_tuple[0]; 
    187                                 $tag_pos = strpos($buffer, $style_tag); 
    188                                 $match = array(); 
    189                                 $file = $style_tag_tuple[1]; 
    190                                 $file = w3_normalize_file_minify2($file); 
    191                                 $style_len = strlen($style_tag); 
    192  
    193                                 if (!$this->_filter_files($file) || in_array($file, $handled_styles)) { 
    194                                     continue; 
    195                                 } 
    196                                 $handled_styles[] = $file; 
    197                                 if (in_array($file, $ignore_css_files)) { 
    198                                     if ($tag_pos > $embed_pos) { 
    199                                         if ($files_to_minify) { 
    200                                             $style = $this->get_style_custom($files_to_minify); 
    201                                             $buffer = substr_replace($buffer, $style, $embed_pos, 0); 
    202                                             $files_to_minify = array(); 
    203                                             $style_len = $style_len +strlen($style); 
    204                                         } 
    205                                         $embed_pos = $embed_pos + $style_len; 
    206                                         $previous_file_was_ignored = true; 
    207                                     } 
    208                                 } else { 
    209                                     $buffer = substr_replace($buffer,'', $tag_pos, $style_len); 
    210                                     if ($embed_pos > $tag_pos) 
    211                                         $embed_pos -= $style_len; 
    212                                     elseif ($previous_file_was_ignored) 
    213                                         $embed_pos = $tag_pos; 
    214  
    215                                     $files_to_minify[] = $file; 
    216                                 } 
    217                             } 
    218                             $style = $this->get_style_custom($files_to_minify); 
    219                             $buffer = substr_replace($buffer, $style, $embed_pos, 0); 
    220                         } 
    221  
    222168                        if ($this->_config->get_boolean('minify.js.enable')) { 
    223169                            $ignore_js_files = $this->_config->get_array('minify.reject.files.js'); 
     
    272218                            $buffer = substr_replace($buffer, $script, $embed_pos, 0); 
    273219                        } 
     220 
     221                        if ($this->_config->get_boolean('minify.css.enable')) { 
     222                            $ignore_css_files = $this->_config->get_array('minify.reject.files.css'); 
     223                            $files_to_minify = array(); 
     224 
     225                            $embed_pos = strpos($buffer, '<!-- W3TC-include-css -->'); 
     226 
     227 
     228                            $buffer = str_replace('<!-- W3TC-include-css -->', '', $buffer); 
     229                            if ($embed_pos === false) { 
     230                                preg_match('~<head(\s+[^<>]+)*>~Ui', $buffer, $match, PREG_OFFSET_CAPTURE); 
     231                                $embed_pos = strlen($match[0][0]) + $match[0][1]; 
     232                            } 
     233 
     234                            $ignore_css_files = array_map('w3_normalize_file', $ignore_css_files); 
     235                            $handled_styles = array(); 
     236                            $style_tags = w3_extract_css2($buffer); 
     237                            $previous_file_was_ignored = false; 
     238                            foreach ($style_tags as $style_tag_tuple) { 
     239                                $style_tag = $style_tag_tuple[0]; 
     240                                $tag_pos = strpos($buffer, $style_tag); 
     241                                $match = array(); 
     242                                $file = $style_tag_tuple[1]; 
     243                                $file = w3_normalize_file_minify2($file); 
     244                                $style_len = strlen($style_tag); 
     245 
     246                                if (!$this->_filter_files($file) || in_array($file, $handled_styles)) { 
     247                                    continue; 
     248                                } 
     249                                $handled_styles[] = $file; 
     250                                if (in_array($file, $ignore_css_files)) { 
     251                                    if ($tag_pos > $embed_pos) { 
     252                                        if ($files_to_minify) { 
     253                                            $style = $this->get_style_custom($files_to_minify); 
     254                                            $buffer = substr_replace($buffer, $style, $embed_pos, 0); 
     255                                            $files_to_minify = array(); 
     256                                            $style_len = $style_len +strlen($style); 
     257                                        } 
     258                                        $embed_pos = $embed_pos + $style_len; 
     259                                        $previous_file_was_ignored = true; 
     260                                    } 
     261                                } else { 
     262                                    $buffer = substr_replace($buffer,'', $tag_pos, $style_len); 
     263                                    if ($embed_pos > $tag_pos) 
     264                                        $embed_pos -= $style_len; 
     265                                    elseif ($previous_file_was_ignored) 
     266                                        $embed_pos = $tag_pos; 
     267 
     268                                    $files_to_minify[] = $file; 
     269                                } 
     270                            } 
     271                            $style = $this->get_style_custom($files_to_minify); 
     272                            $buffer = substr_replace($buffer, $style, $embed_pos, 0); 
     273                        } 
    274274                    } else { 
    275275                        if ($this->_config->get_boolean('minify.css.enable') && !in_array('include', $this->printed_styles)) { 
  • w3-total-cache/trunk/lib/W3/Plugin/NewRelicAdmin.php

    r663605 r665512  
    6262         */ 
    6363        $nerser = w3_instance('W3_NewRelicService'); 
    64         $account_id = $nerser->get_account_id($api_key); 
    65         if ($account_id) { 
    66             $this->_config->set('newrelic.account_id', $account_id); 
    67             $this->_config->save(); 
    68             echo $account_id; 
    69         } 
     64        try { 
     65            $account_id = $nerser->get_account_id($api_key); 
     66            if ($account_id) { 
     67                $this->_config->set('newrelic.account_id', $account_id); 
     68                $this->_config->save(); 
     69                echo $account_id; 
     70            } 
     71        }catch (Exception $ex) {} 
    7072        die(); 
    7173    } 
     
    8486        } 
    8587        $nerser = new W3_NewRelicService($api_key); 
    86         if(empty($account_id) || $account_id == '') 
    87             $account_id = $nerser->get_account_id(); 
    8888        $newrelic_applications = array(); 
    8989        try { 
     90            if(empty($account_id) || $account_id == '') 
     91                $account_id = $nerser->get_account_id(); 
    9092            $newrelic_applications = $nerser->get_applications($account_id); 
    91         }catch(Exception $ex) {} 
     93        } catch (Exception $ex) {} 
    9294        echo json_encode($newrelic_applications); 
    9395        die(); 
     
    149151 
    150152        w3_require_once(W3TC_INC_DIR . '/functions/activation.php'); 
    151         w3_write_to_file($path, $data); 
     153        w3_wp_write_to_file($path, $data); 
    152154    } 
    153155 
  • w3-total-cache/trunk/lib/W3/Plugin/PgCacheAdmin.php

    r663605 r665512  
    392392 
    393393        $config_path = w3_get_wp_config_path(); 
    394         $config_data = w3_read_from_file($config_path); 
     394        $config_data = w3_wp_read_from_file($config_path); 
    395395 
    396396        if ($config_data === false) { 
     
    402402 
    403403        if ($new_config_data != $config_data) { 
    404             w3_write_to_file($config_path, $new_config_data); 
     404            w3_wp_write_to_file($config_path, $new_config_data); 
    405405         } 
    406406 
     
    425425 
    426426        if ($new_config_data != $config_data) { 
    427             w3_write_to_file($config_path, $new_config_data); 
     427            w3_wp_write_to_file($config_path, $new_config_data); 
    428428        } 
    429429 
     
    12461246 
    12471247        w3_require_once(W3TC_INC_DIR . '/functions/activation.php'); 
    1248         w3_write_to_file($path, $data); 
     1248        w3_wp_write_to_file($path, $data); 
    12491249    } 
    12501250 
     
    13091309 
    13101310        if ($use_fs) { 
    1311             w3_write_to_file($path, $data); 
     1311            w3_wp_write_to_file($path, $data); 
    13121312        } else { 
    13131313            if (!@file_put_contents($path, $data)) { 
     
    13791379 
    13801380                w3_require_once(W3TC_INC_DIR . '/functions/activation.php'); 
    1381                 w3_write_to_file($path, $data); 
     1381                w3_wp_write_to_file($path, $data); 
    13821382            } 
    13831383        } 
     
    14191419 
    14201420                w3_require_once(W3TC_INC_DIR . '/functions/activation.php'); 
    1421                 w3_write_to_file($path, $data); 
     1421                w3_wp_write_to_file($path, $data); 
    14221422            } 
    14231423        } 
  • w3-total-cache/trunk/lib/W3/Plugin/TotalCacheAdmin.php

    r664104 r665512  
    158158     */ 
    159159    var $_ftp_form; 
     160 
     161    var $_disable_cache_write_notification = false; 
     162    var $_disable_add_in_files_notification = false; 
     163    var $_disable_minify_error_notification = false; 
     164    var $_disable_file_operation_notification = false; 
    160165 
    161166    /** 
     
    724729 
    725730        if ($new_value !== $old_value && in_array(W3TC_FILE, (array) $new_value) && in_array(W3TC_FILE, (array) $old_value)) { 
    726             $this->_config->set('notes.plugins_updated', true); 
    727             $this->_config->save(); 
     731                $this->_config->set('notes.plugins_updated', true); 
     732                try { 
     733                    $this->_config->save(); 
     734                } catch(Exception $ex) {} 
    728735        } 
    729736 
     
    871878            'enable_cookie_domain' => sprintf('<strong>%swp-config.php</strong> could not be written, please edit config and add:<br /><strong style="color:#f00;">define(\'COOKIE_DOMAIN\', \'%s\');</strong> before <strong style="color:#f00;">require_once(ABSPATH . \'wp-settings.php\');</strong>.', ABSPATH, addslashes($cookie_domain)), 
    872879            'disable_cookie_domain' => sprintf('<strong>%swp-config.php</strong> could not be written, please edit config and add:<br /><strong style="color:#f00;">define(\'COOKIE_DOMAIN\', false);</strong> before <strong style="color:#f00;">require_once(ABSPATH . \'wp-settings.php\');</strong>.', ABSPATH), 
    873             'cloudflare_api_request' => 'Unable to make CloudFlare API request.' 
     880            'cloudflare_api_request' => 'Unable to make CloudFlare API request.', 
    874881        ); 
    875882 
     
    976983                        $result_file = $w3_setup->try_create_wp_loader(); 
    977984                    } catch (TryException $ex) { 
     985                        $this->_disable_minify_error_notification = true; 
    978986                        $file_data = $w3_setup->w3tc_loader_file_data(); 
    979987                        $filename = $file_data['filename']; 
     
    981989 
    982990                        $errors[] = sprintf('<p>Minify and support requests will not function because <strong>%s</strong> 
    983                                                 is outside the WordPress folder. The plugin needs to add file: 
    984                                                 <br /><em>%s</em> with the following content:</p> 
     991                                                is outside the WordPress directory. The plugin needs to add file: 
     992                                                <br /><em>%s</em> with the following contents:</p> 
    985993                                            <pre>%s</pre>', 
    986994                        dirname(W3TC_WP_LOADER), $filename, 
     
    988996                        $this->_ftp_form = $ex->getFtpForm(); 
    989997                    } catch (W3TCErrorException $ex) { 
     998                        $this->_disable_minify_error_notification = true; 
    990999                        $w3tc_error[] =  $ex->getMessage(); 
    9911000                    } 
     
    9981007                        $add_in_files = $ex->getFiles(); 
    9991008                        $this->_ftp_form = $ex->getFtpForm(); 
     1009                        $this->_disable_add_in_files_notification = true; 
    10001010                    } catch (W3TCErrorException $ex) { 
     1011                        $this->_disable_add_in_files_notification = true; 
    10011012                        $w3tc_error[] =  $ex->getMessage(); 
    10021013                    } 
     
    10071018                        $cache_folders = $ex->getFiles(); 
    10081019                        $this->_ftp_form = $ex->getFtpForm(); 
     1020                        $this->_disable_cache_write_notification = true; 
    10091021                    } catch (W3TCErrorException $ex) { 
    10101022                        $w3tc_error[] =  $ex->getMessage(); 
     1023                        $this->_disable_cache_write_notification = true; 
    10111024                    } catch (TestException $ex) { 
    10121025                        $results = $ex->getTestResults(); 
     
    10141027                            $notes = array_merge($notes, $results['permissions']); 
    10151028                        } else { 
    1016                             $errors[] = sprintf('<p>File and folder creation tests failed %s</p> 
     1029                            $errors[] = sprintf('<p>File and directory creation tests failed %s</p> 
    10171030                                            <div class="w3tc-required-changes" style="display:none">%s</div>' 
    10181031                                ,$this->button('View required changes', '', 'w3tc-show-required-changes') 
    10191032                                , $w3_setup->format_test_result($results)); 
    10201033                        } 
     1034                        $this->_disable_cache_write_notification = true; 
    10211035                    } 
    10221036 
     
    10611075                                    $errors[] = sprintf('<p><form method="POST" action="'. 
    10621076                                        esc_attr($_SERVER['REQUEST_URI']).'" style="display:inline;"> 
    1063                                         The plugin cannot create/save the config file to <strong>%s</strong>. 
    1064                                         Folder could have wrong permissions.</p><p>Should the plugin remove the plugin 
    1065                                         folders it has created and restart setup process? ' . wp_nonce_field('w3tc') . 
     1077                                        The plugin cannot create / save the config file to <strong>%s</strong>. 
     1078                                        Directory may have incorrect permissions.</p><p>Should the plugin remove the plugin 
     1079                                        directories it has created and restart setup process? ' . wp_nonce_field('w3tc') . 
    10661080                                        '<input name="reset_folders" value="1" type="hidden" /> 
    1067                                         <input value="Yes, reset setup" type="submit" class="button-secondary"/> 
    1068                                         </form></p><p>Folders that will be deleted:</p> %s' 
     1081                                        <input value="Yes, restart setup" type="submit" class="button-secondary"/> 
     1082                                        </form></p><p>Directories that will be deleted:</p> %s' 
    10691083                                        , W3TC_CONFIG_DIR, $folders); 
    10701084                                } 
     
    10761090                                $not_installed .= '</ul>'; 
    10771091                                $headline = $pagenow == 'plugins.php' ? '<h2 id="w3tc">W3 Total Cache Error</h2>': ''; 
    1078                                 $errors[] = sprintf('%s<p>Unfortunately we\'re not able to remove folders to complete 
    1079                                     the reset for you automatically. Please enter FTP details 
     1092                                $errors[] = sprintf('%s<p>Directories could not be removed automatically. Please enter FTP details 
    10801093                                    <a href="#ftp_upload_form">below</a> to complete the reset. %s</p> 
    10811094                                    <div class="w3tc-required-changes" style="display:none">%s</div><p>' . 
     
    10961109                                $not_installed .= '</ul>'; 
    10971110                                $headline = $pagenow == 'plugins.php' ? '<h2 id="w3tc">W3 Total Cache Error</h2>': ''; 
    1098                                 $errors[] = sprintf('%s<p>Unfortunately we\'re not able to remove folders to complete 
    1099                                                 the reset for you automatically. %s</p> 
     1111                                $errors[] = sprintf('%s<p>Directories could not be removed  automatically. %s</p> 
    11001112                                                <div class="w3tc-required-changes" style="display:none">%s</div>' 
    11011113                                                , $headline 
     
    11061118                        } catch (Exception $e) {} 
    11071119                    } 
    1108                 } elseif (w3_get_blog_id() == 0 
    1109                     && (int)get_transient('test.verify_permissions') <= strtotime('-1 hours')) { 
     1120                } elseif ((!defined('W3TC_DISABLE_VERIFY_PERMISSIONS') || 
     1121                            (defined('W3TC_DISABLE_VERIFY_PERMISSIONS') && !W3TC_DISABLE_VERIFY_PERMISSIONS) 
     1122                          ) && w3_get_blog_id() == 0 && (int)get_transient('test.verify_permissions') <= strtotime('-1 hours')) { 
     1123                    w3_require_once(W3TC_INC_FUNCTIONS_DIR . '/activation.php'); 
    11101124                    try { 
    11111125                        $results = $w3_setup->test_file_writing(); 
     
    11151129                                $notes = array_merge($notes, $results['permissions']); 
    11161130                            } else 
    1117                                 $errors[] = sprintf('<p>File and folder creation tests failed %s</p> 
     1131                                $errors[] = sprintf('<p>File and directory creation tests failed %s</p> 
    11181132                                                <div class="w3tc-required-changes" style="display:none">%s</div>' 
    11191133                                                , $this->button('View required changes', '', 'w3tc-show-required-changes') 
     
    11251139                        $form = $ex->ftp_form(); 
    11261140                        $headline = $pagenow == 'plugins.php' ? '<h2 id="w3tc">W3 Total Cache Error</h2>': ''; 
    1127                         $errors[] = sprintf('%s<p>We need permission to change folder permissions for you 
    1128                                         automatically. Please enter FTP details <a href="#ftp_upload_form">below</a> 
    1129                                          to complete the reset. %s</p> 
    1130                                         <div class="w3tc-required-changes" style="display:none">%s</div>', 
    1131                                         $headline, WP_CONTENT_DIR, 'what is to be done'); 
    1132  
    1133                         $this->_ftp_form = '<div id="ftp_upload_form" class="updated fade" 
    1134                                                  style="background: none;border: none;">' . 
     1141                        $errors[] = sprintf('%s<p>The creation of cache / configuration files failed. <br />The directories with incorrect permissions are: <em>%s</em> and %s. Currently directory permissions are: %s. Please enter FTP details <a href="#ftp_upload_form">below</a> to automatically resolve the issue.</p>', 
     1142                                        $headline, W3TC_CACHE_DIR, W3TC_CONFIG_DIR, base_convert(w3_get_file_permissions(W3TC_CACHE_DIR), 10, 8)); 
     1143 
     1144                        $this->_ftp_form = '<div id="ftp_upload_form" class="updated fade" style="background:none;border:none;">' . 
    11351145                                                 str_replace('class="wrap"', '',$form) . '</div>'; 
    11361146                        $this->_use_ftp_form = true; 
    11371147                    } catch (FileOperationException $ex) { 
    1138                         $errors[] = '<p>Unfortunately we\'re not able to chmod folders to setup folders properly.</p>'; 
    1139  
     1148                        $errors[] = sprintf('<p>The creation of cache / configuration files failed. Unfortunately we\'re not able to change permissions from %s:<br /> <em>%s</em> <br /><em>%s</em><br />Directories typically should have at least 755 permissions. If it fails try 775 or 777 until this notification disappears.</p>', 
     1149                                            base_convert(w3_get_file_permissions(W3TC_CACHE_DIR), 10, 8), W3TC_CACHE_DIR, W3TC_CONFIG_DIR); 
    11401150                    } 
    11411151                } 
    11421152            } 
    11431153 
    1144             if (!$this->_config->own_config_exists() && empty($cache_folders) && 
     1154            if (!$this->_disable_cache_write_notification && !$this->_config->own_config_exists() && empty($cache_folders) && 
    11451155                strpos(W3_Request::get_string('page'), 'w3tc_') !== false) 
    1146                 $w3tc_error[] = sprintf('<strong>W3 Total Cache Error:</strong> Default settings are in use. 
    1147                                     The configuration file could not be read or doesn\'t exist. Please %s to create the 
    1148                                     file.' 
     1156                $w3tc_error[] = sprintf('<strong>W3 Total Cache Error:</strong> Default settings are in use. The configuration file could not be read or doesn\'t exist. Please %s to create the file.' 
    11491157                                    , $this->button_link('save the settings' 
    11501158                                    , wp_nonce_url(sprintf('admin.php?page=%s&w3tc_save_config', $this->_page) 
     
    13271335                    $instruction = '. Please enter FTP details <a href="#ftp_upload_form">below</a> to complete the deactivation.'; 
    13281336                } else { 
    1329                     $instruction = ' due to the <a target="_blank" href="http://codex.wordpress.org/Changing_File_Permissions">permission settings</a> on your files and folders.'; 
     1337                    $instruction = ' due to the <a target="_blank" href="http://codex.wordpress.org/Changing_File_Permissions">permission settings</a> on your files and directories.'; 
    13301338                } 
    13311339                $headline = '<h2 id="w3tc">W3 Total Cache Error</h2>'; 
    1332                 $errors[] = sprintf('%s<p>Unfortunately we\'re not able to remove folders and files or write to them to complete the uninstallation for you automatically%s %s</p> 
     1340                $errors[] = sprintf('%s<p>Unfortunately directories and files could not be automatically removed to complete the uninstallation%s %s</p> 
    13331341                        <div class="w3tc-required-changes" style="display:none">%s</div><p>' . 
    13341342                    'This error message will automatically disappear once the change is successfully made.</p> 
     
    13791387         * Check for page cache availability 
    13801388         */ 
     1389        $wp_config_edit = false; 
    13811390        if ($this->_config->get_boolean('pgcache.enabled')) { 
    1382  
    13831391            if ((!defined('WP_CACHE') || !WP_CACHE)) { 
    13841392                try { 
     
    13931401                    } elseif ($e instanceof FileOperationException) { 
    13941402                        $file_operation_exception = true; 
     1403                        $wp_config_edit = true; 
    13951404                    } 
    1396                     $this->_errors[] = sprintf('Page caching is not available: please add: <strong>define(\'WP_CACHE\', true);</strong> to <strong>%s</strong>. %s', w3_get_wp_config_path(), $ftp_message) ; 
     1405                    if (!$this->_disable_add_in_files_notification) 
     1406                        $this->_errors[] = sprintf('Page caching is not available: please add: <strong>define(\'WP_CACHE\', true);</strong> to <strong>%s</strong>. %s', w3_get_wp_config_path(), $ftp_message) ; 
    13971407                } 
    13981408            } 
    13991409 
    14001410            if (!$w3_verify->advanced_cache_check()) { 
    1401                 $this->_errors[] = sprintf('Page caching is not available. The current add-in %s is either an incorrect file or an old version. De-activate the plugin, remove the file, then activate the plugin again.', W3TC_ADDIN_FILE_ADVANCED_CACHE); 
     1411                if (!$this->_disable_add_in_files_notification) 
     1412                    $this->_errors[] = sprintf('Page caching is not available. The current add-in %s is either missing, an incorrect file or an old version. De-activate the plugin, remove the file, then activate the plugin again.', W3TC_ADDIN_FILE_ADVANCED_CACHE); 
    14021413            } elseif ($this->_config->get_string('pgcache.engine') == 'file_generic' && $this->_config->get_boolean('config.check') && w3_can_check_rules()) { 
    14031414                $w3_plugin_pgcache = w3_instance('W3_Plugin_PgCacheAdmin'); 
     
    15351546 
    15361547                if ($w3_plugin_minify->check_rules_core()) { 
    1537                     if (!$this->test_rewrite_minify()) { 
     1548                    if (!$this->test_rewrite_minify() && (!w3_is_multisite() || (w3_is_multisite() && w3_get_blog_id() != 0))) { 
    15381549                        $this->_errors[] = 'It appears Minify <acronym title="Uniform Resource Locator">URL</acronym> rewriting is not working. If using apache, verify that the server configuration allows .htaccess. Or if using nginx verify all configuration files are included in the main configuration fail (and that you have reloaded / restarted nginx).'; 
    15391550                    } 
     
    17231734         */ 
    17241735        if ($this->_config->get_boolean('dbcache.enabled')) { 
    1725             if (!$w3_verify->db_check()) { 
    1726                 $this->_errors[] = sprintf('Database caching is not available. The current add-in %s is either an incorrect file or an old version. De-activate the plugin, remove the file, then activate the plugin again.', W3TC_ADDIN_FILE_DB); 
     1736            if (!$this->_disable_add_in_files_notification && !$w3_verify->db_check()) { 
     1737                $this->_errors[] = sprintf('Database caching is not available. The current add-in %s is either missing, an incorrect file or an old version. De-activate the plugin, remove the file, then activate the plugin again.', W3TC_ADDIN_FILE_DB); 
    17271738            } 
    17281739        } 
     
    17321743         */ 
    17331744        if ($this->_config->get_boolean('objectcache.enabled')) { 
    1734             if (!$w3_verify->objectcache_check()) { 
    1735                 $this->_errors[] = sprintf('Object caching is not available. The current add-in %s is either an incorrect file or an old version. De-activate the plugin, remove the file, then activate the plugin again.', W3TC_ADDIN_FILE_OBJECT_CACHE); 
     1745            if (!$this->_disable_add_in_files_notification && !$w3_verify->objectcache_check()) { 
     1746                $this->_errors[] = sprintf('Object caching is not available. The current add-in %s is either missing, an incorrect file or an old version. De-activate the plugin, remove the file, then activate the plugin again.', W3TC_ADDIN_FILE_OBJECT_CACHE); 
    17361747            } 
    17371748        } 
     
    18201831            $wp_content_mode = w3_get_file_permissions(WP_CONTENT_DIR); 
    18211832 
    1822             if ($wp_content_mode > 755) { 
     1833            if ($wp_content_mode > 0755) { 
    18231834                $this->_notes[] = sprintf('<strong>%s</strong> is write-able. When finished installing the plugin, 
    18241835                                        change the permissions back to the default: <strong>chmod 755 %s</strong>. 
     
    18261837                                        , WP_CONTENT_DIR 
    18271838                                        , WP_CONTENT_DIR 
    1828                                         , w3_get_file_permissions(WP_CONTENT_DIR) 
     1839                                        , base_convert(w3_get_file_permissions(WP_CONTENT_DIR), 10, 8) 
    18291840                                        , $this->button_hide_note('Hide this message', 'wp_content_perms')); 
    18301841            } 
     
    18371848            $perm = get_transient('w3tc_prev_permission'); 
    18381849            $current_perm = w3_get_file_permissions(WP_CONTENT_DIR); 
    1839             if ($perm && $perm != $current_perm && ($current_perm > 0755 || $perm < $current_perm)) { 
     1850            if ($perm && $perm != base_convert($current_perm, 10, 8) && ($current_perm > 0755 || $perm < base_convert($current_perm, 10, 8))) { 
    18401851                $this->_notes[] = sprintf('<strong>%s</strong> permissions were changed during the setup process. 
    18411852                                        Permissions are currently %s.<br />To restore permissions run 
    18421853                                        <strong>chmod %s %s</strong>. %s' 
    18431854                                        , WP_CONTENT_DIR 
    1844                                         , $current_perm 
     1855                                        , base_convert($current_perm, 10, 8) 
    18451856                                        , $perm 
    18461857                                        , WP_CONTENT_DIR 
     
    20172028        } 
    20182029 
    2019         if (isset($file_operation_exception) && $file_operation_exception) { 
     2030        $this->_disable_file_operation_notification = $this->_disable_add_in_files_notification || $this->_disable_cache_write_notification; 
     2031 
     2032        if (!$this->_disable_file_operation_notification && isset($file_operation_exception) && $file_operation_exception) { 
    20202033            $tech_message = '<ul>'; 
    20212034            $core_rules_perms = ''; 
    2022             if (w3_get_file_permissions(w3_get_pgcache_rules_core_path()) != '0644') 
    2023                 $core_rules_perms = sprintf('File permissions are <strong>%s</strong> should be 
    2024                                             <strong>0644</strong>.' 
    2025                                             , w3_get_file_permissions(w3_get_pgcache_rules_core_path()) 
     2035            if (w3_get_file_permissions(w3_get_wp_config_path()) != 0644) 
     2036                $core_config_perms = sprintf('File permissions are <strong>%s</strong>, however they should be 
     2037                                        <strong>644</strong>.' 
     2038                    , base_convert(w3_get_file_permissions(w3_get_wp_config_path()), 10, 8) 
     2039                ); 
     2040            else 
     2041                $core_config_perms = sprintf('File permissions are <strong>%s</strong>', base_convert(w3_get_file_permissions(w3_get_wp_config_path()), 10, 8)); 
     2042 
     2043            if (w3_get_file_permissions(w3_get_pgcache_rules_core_path()) != 0644) 
     2044                $core_rules_perms = sprintf('File permissions are <strong>%s</strong>, however they should be 
     2045                                            <strong>644</strong>.' 
     2046                                            , base_convert(w3_get_file_permissions(w3_get_pgcache_rules_core_path()), 10, 8) 
    20262047                                            ); 
     2048            else 
     2049                $core_rules_perms = sprintf('File permissions are <strong>%s</strong>', base_convert(w3_get_file_permissions(w3_get_pgcache_rules_core_path()), 10, 8)); 
     2050 
    20272051            $wp_content_perms = ''; 
    2028             if (w3_get_file_permissions(WP_CONTENT_DIR) != '0755') 
    2029                 $wp_content_perms = sprintf('Folder permissions are <strong>%s</strong> should be 
    2030                                             <strong>0755</strong>.' 
    2031                                             , w3_get_file_permissions(WP_CONTENT_DIR) 
     2052            if (w3_get_file_permissions(WP_CONTENT_DIR) != 0755) 
     2053                $wp_content_perms = sprintf('Directory permissions are <strong>%s</strong>, however they should be 
     2054                                            <strong>755</strong>.' 
     2055                                            , base_convert(w3_get_file_permissions(WP_CONTENT_DIR), 10, 8) 
    20322056                                            ); 
    2033  
    20342057            $tech_message .= '<li>' . sprintf('File: <strong>%s</strong> %s File owner: %s' 
    2035                                             ,w3_get_pgcache_rules_core_path() 
    2036                                             ,$core_rules_perms 
    2037                                             , w3_get_file_owner(w3_get_pgcache_rules_core_path())) . 
    2038                              '</li>' ; 
     2058                    ,w3_get_wp_config_path() 
     2059                    ,$core_config_perms 
     2060                    , w3_get_file_owner(w3_get_wp_config_path())) . 
     2061                    '</li>' ; 
     2062 
    20392063            $tech_message .= '<li>' . sprintf('File: <strong>%s</strong> %s File owner: %s' 
     2064                                                ,w3_get_pgcache_rules_core_path() 
     2065                                                ,$core_rules_perms 
     2066                                                , w3_get_file_owner(w3_get_pgcache_rules_core_path())) . 
     2067                                 '</li>' ; 
     2068 
     2069            $tech_message .= '<li>' . sprintf('Directory: <strong>%s</strong> %s File owner: %s' 
    20402070                                            , WP_CONTENT_DIR 
    20412071                                            , $wp_content_perms 
    20422072                                            , w3_get_file_owner(WP_CONTENT_DIR)) . 
    20432073                             '</li>' ; 
    2044             $tech_message .= '<li>' . sprintf('File owner of current script: %s', w3_get_file_owner()) . 
     2074 
     2075            $tech_message .= '<li>' . sprintf('Owner of current file: %s', w3_get_file_owner()) . 
    20452076                             '</li>' ; 
    20462077            if (!(w3_get_file_owner() == w3_get_file_owner(w3_get_pgcache_rules_core_path()) && 
    20472078                w3_get_file_owner() == w3_get_file_owner(WP_CONTENT_DIR))) 
    2048                 $tech_message .= '<li>The files and folders have different owners. They should have the same owners. 
     2079                $tech_message .= '<li>The files and directories have different ownership, they should have the same ownership. 
    20492080                                  </li>'; 
    20502081            $tech_message .= '</ul>'; 
    20512082            $tech_message = '<div class="w3tc-technical-info" style="display:none">' . $tech_message . '</div>'; 
    20522083            $w3tc_error[] = sprintf('<strong>W3 Total Cache Error:</strong> The plugin tried to edit, %s, but failed. 
    2053                                 This means that the plugin cannot make the correct file/folder changes on its own. 
    2054                                 Please review your 
     2084                                Files and directories cannot be modified. Please review your 
    20552085                                <a target="_blank" href="http://codex.wordpress.org/Changing_File_Permissions"> 
    2056                                 file permissions</a> (file owner, rights ...). 
    2057                                 Common cause is %s and %s having different owners or permissions. %s %s' 
    2058                                 , w3_get_pgcache_rules_core_path() 
    2059                                 , basename(w3_get_pgcache_rules_core_path()) 
     2086                                file permissions</a>. A common cause is %s and %s having different ownership or permissions. 
     2087                                %s %s' 
     2088                                , $wp_config_edit ? w3_get_wp_config_path() :  w3_get_pgcache_rules_core_path() 
     2089                                , $wp_config_edit ? basename(w3_get_wp_config_path()) :  basename(w3_get_pgcache_rules_core_path()) 
    20602090                                , WP_CONTENT_DIR 
    20612091                                , $this->button('View technical information', '', 'w3tc-show-technical-info') 
     
    20702100                $this->_errors = array_merge($this->_errors, $result['errors']); 
    20712101                if (!isset($this->_ftp_form) && isset($result['ftp_form'])) { 
    2072                     $extra_ftp_message = 'Please enter FTP details <a href="#ftp_upload_form">below</a> to complete 
    2073                                           the removal of disabled modules. '; 
     2102                    $extra_ftp_message = 'Please enter FTP details <a href="#ftp_upload_form">below</a> to remove the disabled modules. '; 
    20742103                    $this->_ftp_form = $result['ftp_form']; 
    20752104                    $this->_use_ftp_form = true; 
     
    28542883        } 
    28552884 
    2856         if ($this->config_save($config, $this->_config_admin)) { 
    2857             $this->redirect(array( 
    2858                 'w3tc_note' => 'config_import' 
    2859             ), true); 
    2860  
    2861         } else { 
    2862             $this->redirect(array( 
    2863                 'w3tc_error' => 'config_save' 
    2864             ), true); 
    2865         } 
     2885        $this->config_save($config, $this->_config_admin); 
     2886        $this->redirect(array( 
     2887            'w3tc_note' => 'config_import' 
     2888        ), true); 
    28662889    } 
    28672890 
     
    28852908        @$config = new W3_Config(); 
    28862909        $config->set_defaults(); 
    2887  
    28882910        $this->config_save($config, $this->_config_admin); 
    28892911        $this->redirect(array( 
     
    29012923        $this->_config_admin->set('previewmode.enabled', true); 
    29022924        $this->_config_admin->save(); 
    2903  
    29042925        $this->redirect(array( 
    29052926            'w3tc_note' => 'preview_enable' 
     
    37963817            } catch (Exception $e) { 
    37973818                $error = $e->getMessage(); 
    3798             $this->redirect_with_custom_messages($params, array($error)); 
     3819                $this->redirect_with_custom_messages($params, array($error)); 
    37993820            } 
    38003821        } 
     
    41264147                    } 
    41274148                } else if ($method == 'manual' && $config->get_string('newrelic.appname')) { 
    4128                     if (strpos($config->get_string('newrelic.appname'), $newrelic_prefix) === false) { 
     4149                    if ($newrelic_prefix != '' && strpos($config->get_string('newrelic.appname'), $newrelic_prefix) === false) { 
    41294150                        $application_name = $newrelic_prefix . $config->get_string('newrelic.appname'); 
    41304151                        $config->set('newrelic.appname', $application_name); 
     
    45234544        $this->redirect(array( 
    45244545            'w3tc_note' => 'config_save' 
    4525         ), true); 
     4546            ), true); 
    45264547    } 
    45274548 
     
    45384559        $this->_config->set('common.tweeted', $tweeted); 
    45394560 
    4540         try { 
    4541             $this->_config->save(); 
    4542         }catch(Exception $ex) { 
    4543             $this->redirect(array( 
    4544                 'w3tc_error' => 'config_save' 
    4545             )); 
    4546         } 
     4561        $this->_config->save(); 
    45474562 
    45484563        $this->link_update(); 
     
    54135428            $this->_config->set('notes.need_empty_pgcache', false); 
    54145429            $this->_config->set('notes.plugins_updated', false); 
    5415  
    54165430            $this->_config->save(); 
    5417  
    54185431            $this->flush_pgcache(); 
    54195432        } 
     
    54335446        if ($this->_config->get_string('minify.engine') == $type && $this->_config->get_boolean('minify.enabled')) { 
    54345447            $this->_config->set('notes.need_empty_minify', false); 
    5435  
    54365448            $this->_config->save(); 
    5437  
    54385449            $this->flush_minify(); 
    54395450        } 
     
    55525563        if ($this->_config->get_boolean('browsercache.enabled')) { 
    55535564            $this->_config->set('browsercache.timestamp', time()); 
     5565 
    55545566            $this->_config->save(); 
    55555567        } 
  • w3-total-cache/trunk/lib/W3/Plugins.php

    r663605 r665512  
    213213        } 
    214214        foreach($dirs as $folder) 
    215             if (file_exists($folder)) 
     215            if (@is_dir($folder)) 
    216216                $errors[] = sprintf('Delete folder: <strong>%s</strong>',$folder); 
    217217 
  • w3-total-cache/trunk/lib/W3/Setup.php

    r664104 r665512  
    99    private static $test_dir; 
    1010    function __construct() { 
    11         self::$test_dir = W3TC_CACHE_DIR . DIRECTORY_SEPARATOR . '/test_dir'; 
     11        self::$test_dir = W3TC_CACHE_DIR . DIRECTORY_SEPARATOR . 'test_dir'; 
    1212    } 
    1313 
     
    2626        $not_installed .= '</ul>'; 
    2727        $headline = $pagenow == 'plugins.php' ? '<h2 id="w3tc">W3 Total Cache Error</h2>': ''; 
    28         $error = sprintf('%s<p>Unfortunately we\'re not able to create folders and files or write to them to complete 
    29                             the installation for you automatically. Please enter FTP details 
    30                             <a href="#ftp_upload_form">below</a> to complete the setup. %s</p> 
     28        $error = sprintf('%s<p>Files and directories could not be automatically created to complete the installation. Please enter FTP details 
     29                            <a href="#ftp_upload_form">below</a> to complete the setup. 
     30                            Also try <strong>chmod 777 %s</strong><br /> %s</p> 
    3131                            <div class="w3tc-required-changes" style="display:none">%s</div><p>' . 
    3232                            (($cache_folders || $addin_files) ? 
     
    3535                                : '') . 
    3636                            'This error message will automatically disappear once the change is successfully made.</p>' 
    37                             , $headline, $this->button('View required changes', '', 'w3tc-show-required-changes') 
     37                            , $headline 
     38                            , WP_CONTENT_DIR 
     39                            ,$this->button('View required changes', '', 'w3tc-show-required-changes') 
    3840                            , $not_installed, WP_CONTENT_DIR); 
    3941        if ($pagenow == 'plugins.php') { 
     
    7375 
    7476    public function try_create_missing_files() { 
    75         $prev_perm = get_transient('w3tc_prev_permission'); 
    76         if (!$prev_perm) { 
    77             $prev_perm = w3_get_file_permissions(WP_CONTENT_DIR); 
    78             set_transient('w3tc_prev_permission', $prev_perm, 3600*24); 
    79         } 
     77        $prev_perm = w3_get_file_permissions(WP_CONTENT_DIR); 
     78 
    8079        /** 
    8180         * @var $w3_verify W3_FileVerification 
     
    8887        $addin_files = $result_verify['files']; 
    8988        $url = w3_is_network() ? 
    90                     network_admin_url('admin.php?page=w3tc_general') : admin_url('admin.php?page=w3tc_general'); 
     89                    network_admin_url('plugins.php') : admin_url('plugins.php'); 
    9190        try { 
    9291            w3_require_once(W3TC_INC_DIR . '/functions/activation.php'); 
    93             w3_create_files($addin_files, '', $url); 
     92            w3_wp_create_files($addin_files, '', $url); 
    9493        } catch(Exception $ex) { 
    9594            if ($ex instanceof FilesystemCredentialException) { 
     
    103102                        throw new TryException('Could not create files', $result_verify, $ex->ftp_form()); 
    104103                    } else { 
    105                         if ($ex instanceof FileOperationException && $ex->getOperation() == 'chmod') { 
    106                             $current_perm = w3_get_file_permissions(WP_CONTENT_DIR); 
     104                        $current_perm = w3_get_file_permissions(WP_CONTENT_DIR); 
     105                        if ($current_perm != $prev_perm && $ex instanceof FileOperationException && $ex->getOperation() == 'chmod') { 
    107106                            throw new W3TCErrorException(sprintf('<strong>W3 Total Cache Error:</strong> Could not 
    108                                             change permissions %d on %s back to original permissions %d.' 
    109                                             , $current_perm, WP_CONTENT_DIR, $prev_perm)); 
     107                                            change permissions %s on %s back to original permissions %s.' 
     108                                            , base_convert($current_perm, 10, 8), WP_CONTENT_DIR, base_convert($prev_perm, 10, 8))); 
    110109                        }else 
    111                             throw new W3TCErrorException(sprintf('<strong>W3 Total Cache Error:</strong> %s<br /> 
     110                            $missing_files = '<ul>'; 
     111                            foreach ($addin_files as $result) 
     112                                $missing_files .= '<li>' . basename($result) . '</li>'; 
     113                            $missing_files.= '</ul>'; 
     114 
     115                            throw new W3TCErrorException(sprintf('<strong>W3 Total Cache Error:</strong> Moving missing files from <em>%s</em> to <em>%s</em> failed:%s 
    112116                                            Verify that correct (server, S/FTP) 
    113117                                            <a target="_blank" href="http://codex.wordpress.org/Changing_File_Permissions"> 
    114118                                                file permissions</a> 
    115                                             are set or set FS_CHMOD_* constants in wp-config.php 
     119                                            are set or set FS_CHMOD_* constants in wp-config.php and / or try adding <em>define(\'FS_METHOD\', \'direct\');</em> in wp-config.php 
    116120                                            <a target="_blank" href="http://codex.wordpress.org/Editing_wp-config.php#Override_of_default_file_permissions"> 
    117                                                 Learn more</a>.' 
    118                                             , $ex->getMessage())); 
     121                                                Learn more</a>. If all else fails, try <strong>chmod 777 %s</strong>' 
     122                                            , str_replace(dirname(WP_CONTENT_DIR), '', W3TC_INSTALL_DIR), basename(WP_CONTENT_DIR), $missing_files, 
     123                                            WP_CONTENT_DIR)); 
    119124                    } 
    120125                } 
     
    125130 
    126131    public function try_create_missing_folders() { 
    127         $prev_perm = get_transient('w3tc_prev_permission'); 
    128         if (!$prev_perm) { 
    129             $prev_perm = w3_get_file_permissions(WP_CONTENT_DIR); 
    130             set_transient('w3tc_prev_permission', $prev_perm, 3600); 
    131         } 
     132        $prev_perm = w3_get_file_permissions(WP_CONTENT_DIR); 
    132133 
    133134        /** 
     
    140141            return true; 
    141142        $url = w3_is_network() ? 
    142                     network_admin_url('admin.php?page=w3tc_general') : admin_url('admin.php?page=w3tc_general'); 
     143            network_admin_url('plugins.php') : admin_url('plugins.php'); 
     144 
    143145        try { 
    144146            w3_require_once(W3TC_INC_DIR . '/functions/activation.php'); 
    145             w3_create_folders($folders, '', $url); 
     147            w3_wp_create_folders($folders, '', $url); 
    146148            $results = $this->test_file_writing(); 
    147149        } catch(Exception $ex) { 
    148150            if ($ex instanceof FilesystemCredentialException) { 
    149                 throw new TryException('Could not create folders', $folders, $ex->ftp_form()); 
     151                throw new TryException('Could not create directories', $folders, $ex->ftp_form()); 
    150152            } else { 
    151153                try { 
     
    154156                } catch(Exception $ex) { 
    155157                    if ($ex instanceof FilesystemCredentialException) { 
    156                         throw new TryException('Could not create folders', $folders, $ex->ftp_form()); 
     158                        throw new TryException('Could not create directories', $folders, $ex->ftp_form()); 
    157159                    } else { 
    158                         if ($ex instanceof FileOperationException && $ex->getOperation() == 'chmod') { 
    159                             $current_perm = w3_get_file_permissions(WP_CONTENT_DIR); 
     160                        $current_perm = w3_get_file_permissions(WP_CONTENT_DIR); 
     161                        if ($current_perm != $prev_perm && $ex instanceof FileOperationException && $ex->getOperation() == 'chmod') { 
    160162                            throw new W3TCErrorException(sprintf('<strong>W3 Total Cache Error:</strong> Could not 
    161                                             change permissions %d on %s back to original permissions %d.' 
    162                                             , $current_perm, WP_CONTENT_DIR, $prev_perm)); 
    163                         }else 
    164                             throw new W3TCErrorException(sprintf('<strong>W3 Total Cache Error:</strong> %s<br />Verify 
     163                                            revert permissions %s on %s back to original permissions %s.' 
     164                                            , base_convert($current_perm, 10, 8), WP_CONTENT_DIR, base_convert($prev_perm, 10, 8))); 
     165                        }else { 
     166                            $missing_folders = '<ul>'; 
     167                            foreach ($folders as $result) 
     168                                $missing_folders .= '<li>' . str_replace(WP_CONTENT_DIR, '', $result) . '</li>'; 
     169                            $missing_folders .= '</ul>'; 
     170 
     171                            throw new W3TCErrorException(sprintf('<strong>W3 Total Cache Error:</strong> Failed to create missing directories in %s: %s Verify 
    165172                                            that correct (server, S/FTP) 
    166173                                            <a target="_blank" href="http://codex.wordpress.org/Changing_File_Permissions"> 
    167174                                                file permissions</a> 
    168                                             are set or set FS_CHMOD_* constants in wp-config.php 
     175                                            are set or set FS_CHMOD_* constants in wp-config.php and/or try adding <em>define(\'FS_METHOD\', \'direct\');</em> in wp-config.php 
    169176                                            <a target="_blank" href="http://codex.wordpress.org/Editing_wp-config.php#Override_of_default_file_permissions"> 
    170                                                 Learn more</a>.' 
    171                                             , $ex->getMessage())); 
     177                                                Learn more</a>. If all else fails, try <strong>chmod 777 %s</strong>' 
     178                                            , basename(WP_CONTENT_DIR), $missing_folders 
     179                                            , WP_CONTENT_DIR)); 
     180                        } 
    172181                    } 
    173182                } 
    174                 if ($results) 
    175                     throw new W3TCErrorException(sprintf('<strong>W3 Total Cache Error:</strong> %s<br />Verify that 
    176                                     correct (server, S/FTP) 
     183                if ($results) { 
     184                    $missing_folders = '<ul>'; 
     185                    foreach ($results as $result) 
     186                        $missing_folders .= '<li>' . $result . '</li>'; 
     187                    $missing_folders .= '</ul>'; 
     188                    throw new W3TCErrorException(sprintf('<strong>W3 Total Cache Error:</strong> Failed to create missing directories in %s: %s 
     189                                    Verify that correct (server, S/FTP) 
    177190                                    <a target="_blank" href="http://codex.wordpress.org/Changing_File_Permissions"> 
    178191                                        file permissions</a> 
    179192                                    are set or set FS_CHMOD_* constants in wp-config.php 
    180193                                    <a target="_blank" href="http://codex.wordpress.org/Editing_wp-config.php#Override_of_default_file_permissions"> 
    181                                         Learn more</a>.' 
    182                                     , $ex->getMessage())); 
     194                                        Learn more</a>. If all else fails, try <strong>chmod 777 %s</strong>' 
     195                                    , basename(WP_CONTENT_DIR), $missing_folders, 
     196                                    WP_CONTENT_DIR)); 
     197                } 
    183198            } 
    184199        } 
     
    212227        foreach ($permissions as $permission) { 
    213228            $result = true; 
    214             if ($permission == $prev_perm) 
     229            if ($prev_perm > $permission) 
    215230                continue; 
    216             if (!($result = @chmod(WP_CONTENT_DIR, $permission))) 
    217                 $result = w3_chmod_dir(WP_CONTENT_DIR, $permission); 
     231 
     232            if ($permission != $prev_perm) 
     233                if (!($result = @chmod(WP_CONTENT_DIR, $permission))) 
     234                    $result = w3_chmod_dir(WP_CONTENT_DIR, $permission); 
    218235            if ($result) { 
    219236                try { 
    220                     w3_create_folders($folders, '', $url); 
     237                    w3_wp_create_folders($folders, '', $url); 
    221238                    return true; 
    222239                }catch (Exception $ex) {} 
    223240            } 
    224             if (!@chmod(WP_CONTENT_DIR, $prev_perm)) 
    225                 w3_chmod_dir(WP_CONTENT_DIR, $prev_perm); 
     241            if ($permission != $prev_perm) 
     242                if (!@chmod(WP_CONTENT_DIR, $prev_perm)) 
     243                    w3_chmod_dir(WP_CONTENT_DIR, $prev_perm); 
    226244        } 
    227245        return true; 
     
    233251        foreach ($permissions as $permission) { 
    234252            $result = true; 
    235             if ($permission == $prev_perm) 
     253            if ($prev_perm > $permission) 
    236254                continue; 
    237             if (!($result = @chmod(WP_CONTENT_DIR, $permission))) 
    238                 $result = w3_chmod_dir(WP_CONTENT_DIR, $permission); 
     255 
     256            if ($permission != $prev_perm) 
     257                if (!($result = @chmod(WP_CONTENT_DIR, $permission))) 
     258                    $result = w3_chmod_dir(WP_CONTENT_DIR, $permission); 
    239259            if ($result) { 
    240260                try { 
    241                     w3_create_files($files, '', $url); 
     261                    w3_wp_create_files($files, '', $url); 
    242262                    return true; 
    243263                }catch (Exception $ex) {} 
    244264            } 
    245             if (!@chmod(WP_CONTENT_DIR, $prev_perm)) 
    246                 w3_chmod_dir(WP_CONTENT_DIR, $prev_perm); 
     265            if ($permission != $prev_perm) 
     266                if (!@chmod(WP_CONTENT_DIR, $prev_perm)) 
     267                    w3_chmod_dir(WP_CONTENT_DIR, $prev_perm); 
    247268        } 
    248269        return true; 
    249270    } 
    250271 
    251     public function test_file_writing() { 
     272    public function test_file_writing($single = false) { 
    252273        $results = array(); 
    253274        $permissions = array(0755, 0775, 0777); 
     
    258279            $prev_perm = w3_get_file_permissions(W3TC_CACHE_DIR); 
    259280            foreach ($permissions as $permission) { 
    260                 if ($permission == $prev_perm) 
     281                $result = true; 
     282 
     283                if ($prev_perm > $permission) 
    261284                    continue; 
    262                 $result = w3_chmod_dir(W3TC_CACHE_DIR, $permission, true); 
     285 
     286                if ($permission != $prev_perm) 
     287                    $result = w3_chmod_dir(W3TC_CACHE_DIR, $permission, true); 
    263288                if ($result) { 
    264289                    $test_result1 = $this->_test_cache_file_creation(); 
     
    267292                        $d_fileowngrp = w3_get_file_owner(); 
    268293 
    269                         $results['permissions'][] = sprintf('Plugin changed permissions on: %s to %d from %s. <br />' . 
     294                        $results['permissions'][] = sprintf('Plugin changed permissions on: %s to %s from %s. <br />' . 
    270295                            'Default file owner is %s, plugin created files is owned by %s.', 
    271                             W3TC_CACHE_DIR, decoct($permission), $prev_perm, 
     296                            W3TC_CACHE_DIR, base_convert($permission, 10, 8), base_convert($prev_perm, 10, 8), 
    272297                            $d_fileowngrp, $c_fileowngrp); 
    273298                        break; 
    274299                    } 
    275300                } else { 
    276                     $results[] = 'Folder does not exists: ' . W3TC_CACHE_DIR; 
     301                    $results[] = 'Directory does not exist: ' . W3TC_CACHE_DIR; 
    277302                } 
    278303            } 
     
    285310            $prev_perm = w3_get_file_permissions(W3TC_CONFIG_DIR); 
    286311            foreach ($permissions as $permission) { 
    287                 if ($permission == $prev_perm) 
     312                $result = true; 
     313                if ($prev_perm > $permission) 
    288314                    continue; 
    289                 $result = w3_chmod_dir(W3TC_CONFIG_DIR, $permission); 
     315 
     316                if ($permission != $prev_perm) 
     317                    $result = w3_chmod_dir(W3TC_CONFIG_DIR, $permission); 
    290318                if ($result) { 
    291319                    $test_result2 = $this->_test_w3tc_config_creation(); 
     
    294322                        $d_fileowngrp = w3_get_file_owner(); 
    295323 
    296                         $results['permissions'][] = sprintf('Plugin changed permissions on: %s to %d from %s. <br />' . 
     324                        $results['permissions'][] = sprintf('Plugin changed permissions on: %s to %s from %s. <br />' . 
    297325                                'Default file owner is %s, plugin created files is owned by %s.', 
    298                             W3TC_CONFIG_DIR, decoct($permission), $prev_perm, 
     326                            W3TC_CONFIG_DIR, base_convert($permission, 10, 8), base_convert($prev_perm, 10, 8), 
    299327                            $d_fileowngrp, $c_fileowngrp); 
    300328                        break; 
    301329                    } 
    302330                } else { 
    303                     $results[] = 'Folder does not exists: ' . W3TC_CONFIG_DIR; 
     331                    $results[] = 'Directory does not exist: ' . W3TC_CONFIG_DIR; 
    304332                } 
    305333            } 
     
    309337            if ($test == 'folder' && !$result) 
    310338                $results[] = sprintf('Could not mkdir: %s', self::$test_dir); 
    311             elseif (!$result) 
    312                 $results[] = sprintf('Could not create file in %s using %s.', self::$test_dir,  $test); 
     339            elseif (!$result && $test != 'success') 
     340                $results[] = sprintf('Could not create file in %s using %s.' , self::$test_dir,  $test); 
    313341        } 
    314342 
    315343        foreach ($test_result2 as $test => $result) { 
    316             if (!$result) 
     344            if (!$result && $test != 'success') 
    317345                $results[] = sprintf('Could not create file in %s using %s.', W3TC_CONFIG_DIR,  $test); 
    318346        } 
     
    467495        try { 
    468496            w3_require_once(W3TC_INC_DIR . '/functions/activation.php'); 
    469             $result = w3_write_to_file($filename, $data, $url); 
     497            $result = w3_wp_write_to_file($filename, $data, $url); 
    470498        } catch(Exception $ex) { 
    471499            if ($ex instanceof FilesystemCredentialException) { 
  • w3-total-cache/trunk/lib/W3/Widget/NewRelic.php

    r664104 r665512  
    8686        $slowest_webtransaction = array(); 
    8787        $slowest_database = array(); 
    88         $subscription_lvl = 'unknown. '; 
     88        $subscription_lvl = __('unknown', 'w3-total-cache'); 
    8989        $can_use_metrics = false; 
    9090        if ($new_relic_configured && $new_relic_enabled) { 
  • w3-total-cache/trunk/pub/css/options.css

    r664104 r665512  
    280280} 
    281281 
    282 #pgcache_reject_roles label { 
     282#pgcache_reject_roles label, #newrelic_accept_roles label, #cdn_reject_roles label { 
    283283    margin-right: 15px; 
    284284} 
  • w3-total-cache/trunk/pub/js/options.js

    r663605 r665512  
    376376        jQuery.getJSON(ajaxurl, params, function(data) { 
    377377            var app_id_select = jQuery('#newrelic_application_id_dropdown'); 
     378            var count = 0; 
    378379            app_id_select.empty(); 
    379380            app_id_select 
     
    381382                .attr("value",'') 
    382383                .text('-- Select Application --')); 
    383  
    384384            jQuery.each(data, function(key, value) { 
    385385                app_id_select 
     
    387387                    .attr("value",key) 
    388388                    .text(value)); 
     389                count++; 
    389390            }); 
     391            if (count == 0) 
     392                alert('Could not retrieve any applications. Verify your API key.'); 
    390393        }); 
    391394    }); 
  • w3-total-cache/trunk/readme.txt

    r664104 r665512  
    44Requires at least: 2.8 
    55Tested up to: 3.5.1 
    6 Stable tag: 0.9.2.7 
     6Stable tag: 0.9.2.8 
    77License: GPLv2 or later 
    88License URI: http://www.gnu.org/licenses/gpl-2.0.html 
     
    1414The **only** WordPress Performance Optimization (WPO) framework; designed to improve user experience and page speed. 
    1515 
    16 Recommended by web hosts like: Page.ly, DreamHost, MediaTemple, Go Daddy, Host Gator and countless more. 
     16Recommended by web hosts like: Page.ly, Synthesis, DreamHost, MediaTemple, Go Daddy, Host Gator and countless more. 
    1717 
    1818Trusted by countless companies like: AT&T, stevesouders.com, mattcutts.com, mashable.com, smashingmagazine.com, makeuseof.com, yoast.com, kiss925.com, pearsonified.com, lockergnome.com, johnchow.com, ilovetypography.com, webdesignerdepot.com, css-tricks.com and tens of thousands of others. 
     
    732732 
    733733== Changelog == 
     734= 0.9.2.8 = 
     735* Fixed /tmp file creation issue when saving settings 
     736* Fixed an issue with auto minify 
     737* Fixed an issue with New Relic API key verification 
     738* Fixed uncommon issue with require ObjectCache failing 
     739* Fixed uncommon open_basedir verification issue 
     740* Improved notification handling by modified WordPress FileSystem API implementation 
     741* Added PHP file handling to support cases not covered by default WordPress FileSystem API 
     742 
     743 
    734744= 0.9.2.7 = 
    735745* Fixed config file write in more hosting environments 
    736746* Fixed legacy config file import on servers with hardened file permissions 
    737747* Fixed page cache write cache rules in some environments 
    738 * Fixed retina images 
     748* Fixed HiDPI images 
    739749* Fixed false positive notifications when permissions are not changed or same 
    740750* Fixed minify help 
     
    850860* Improved minify custom placement usage 
    851861* Improved PHP 5 compability by removing deprecated functionality 
    852 * Improved WP 3.4 and 3.5 compability by removing deprecated functions usage 
     862* Improved WordPress 3.4 and 3.5 compability by removing deprecated functions usage 
    853863* Improved plugin by removing unnecessary ob_starts 
    854864* Improved minify usage by returning old minify files while generating new 
     
    12251235== Upgrade Notice == 
    12261236 
    1227 = 0.9.2.6 = 
    1228 Thanks for using W3 Total Cache! As always, this update is very strongly recommended. This release contains fixes for users improving compatibility across more hosting environments. We appreciate your patience and help as we move toward making updates more seamless. Unfortunately, it's not easy to upgrade "low level" functionality like server configurations. We do it because we're trying to give you the advantages that large corporations have, for free. 
     1237= 0.9.2.8 = 
     1238Thanks for using W3 Total Cache! As always, this update is very strongly recommended. The recent releases attempted to use WordPress' built in support for managing files and folders and clearly has not worked. Since W3TC is a caching plugin, file management is a critical issue that will cause lots of issues if it doesn't work perfectly. This release is hopefully the last attempt to restore file management back to the reliability of previous versions (0.9.2.4 etc). We realize that having *any* problems is not acceptable, but caching means changing server behavior so while this plugin is still in pre-release we're trying to work on learning the lessons. 
  • w3-total-cache/trunk/w3-total-cache.php

    r664104 r665512  
    33Plugin Name: W3 Total Cache 
    44Description: The highest rated and most complete WordPress performance plugin. Dramatically improve the speed and user experience of your site. Add browser, page, object and database caching as well as minify and content delivery network (CDN) to WordPress. 
    5 Version: 0.9.2.7 
     5Version: 0.9.2.8 
    66Plugin URI: http://www.w3-edge.com/wordpress-plugins/w3-total-cache/ 
    77Author: Frederick Townes 
Note: See TracChangeset for help on using the changeset viewer.