/
home
/
assocoweys
/
avexp
/
libraries
/
syw
/
Upload File
HOME
<?php /** * @copyright Copyright (C) 2011 Simplify Your Web, Inc. All rights reserved. * @license GNU General Public License version 3 or later; see LICENSE.txt */ // no direct access defined('_JEXEC') or die; jimport('joomla.filesystem.file'); jimport('joomla.filesystem.folder'); class SYWCache { /** * Get file's content */ public static function getFileContent($file) { $content = ''; if (function_exists('curl_version')) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $file); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $content = curl_exec($curl); curl_close($curl); if (!$content) { JLog::add('SYWCache:getFileContent() - Error in curl_exec', JLog::ERROR, 'syw'); return false; // try an ultimate recovery with file_get_contents ? } } else if (ini_get('allow_url_fopen')) { $content = @file_get_contents($file); if ($content === false) { JLog::add('SYWCache:getFileContent() - Error in file_get_contents', JLog::ERROR, 'syw'); return false; } } else { if (defined('JDEBUG') && JDEBUG) { JLog::add('SYWCache:getFileContent() - curl extension missing and allow_url_fopen unset', JLog::WARNING, 'syw'); // avoid too much logging } return false; } //$content = ' some CSS here <html><head><title>Error 403 - Forbidden</title><head><body><h1>Error 403 - Forbidden</h1><p>You don\'t have permission to access ...</p></body></html> some CSS here'; // give feedback if there are access permission issues on the file // test the content of <html>...</html>, not the whole file, in case id, class or width... have the 404, 403, ... values $opening_pos = stripos($content, '<html'); if ($opening_pos !== false) { $str = substr($content, $opening_pos); // in case it does not start with <html> $closing_pos = stripos($str, '</html>'); $html_content = substr($str, 0, $closing_pos); if (stripos($html_content, '403')) { // permission error $lang = JFactory::getLanguage(); $lang->load('lib_syw.sys', JPATH_SITE); $file_array = explode('?', $file); JFactory::getApplication()->enqueueMessage(JText::sprintf('LIB_SYW_ERROR_403', $file_array[0]), 'error'); JLog::add('SYWCache:getFileContent() - Error 403 in content - No access permissions for file '.$file_array[0], JLog::ERROR, 'syw'); } else { // log the error JLog::add('SYWCache:getFileContent() - Error in content', JLog::ERROR, 'syw'); } return "\n"; // to return a 'clean' content - cannot return false or else will end up with the same errors in the file origin } return $content; } /** * Get the cached file * * @param string $path common path to origin and target files (ex: modules/mod_latest_news/) * @param string $file_origin (ex: style.css.php?x=3) - can be empty to create new file with just additional content * @param string $file_target (ex: style.css) * @param boolean $reset whether to reset the cached file or not * @param string $additional_content string content to be appended to the file origin * * @return string filepath (the cached version if everything went well, the filepath origin otherwise) */ public static function getCachedFilePath($path, $file_origin, $file_target, $reset = true, $additional_content = '') { JLog::addLogger(array('text_file' => 'syw.errors.php'), JLog::ALL, array('syw')); $trouble_in_paradise = false; $filepath_origin = $path.$file_origin; $filepath_target = $path.$file_target; if ($reset || !JFile::exists(JPATH_ROOT.'/'.$filepath_target)) { $content = "\n"; // if empty, does not work if (!empty($file_origin)) { $file = htmlspecialchars_decode(JURI::base().$filepath_origin); // replace & with & if any $content = self::getFileContent($file); } if ($content != false) { //if (ini_get('allow_url_fopen')) { // test not needed for file_put_contents $result = @file_put_contents(JPATH_ROOT.'/'.$filepath_target, $content); if ($result === false) { $trouble_in_paradise = true; JLog::add('SYWCache:getCachedFilePath() - Error in file_put_contents', JLog::ERROR, 'syw'); } else { if (!empty($additional_content)) { $result = @file_put_contents(JPATH_ROOT.'/'.$filepath_target, $additional_content, FILE_APPEND); if ($result === false) { $trouble_in_paradise = true; JLog::add('SYWCache:getCachedFilePath() - Error in file_put_contents when appending content', JLog::ERROR, 'syw'); } } } //} else { //$trouble_in_paradise = true; //JLog::add('SYWCache:getCachedFilePath() - allow_url_fopen is not set - cannot perform file_put_contents', JLog::ERROR, 'syw'); //} } else { $trouble_in_paradise = true; if (defined('JDEBUG') && JDEBUG) { JLog::add('SYWCache:getCachedFilePath() - Cannot cache content', JLog::WARNING, 'syw'); } } // } else { // if (!JFile::exists(JPATH_ROOT.'/'.$filepath_target)) { // $trouble_in_paradise = true; // } } if ($trouble_in_paradise) { if (empty($file_origin)) { return ''; } return JURI::base(true).'/'.$filepath_origin; } else { return JURI::base(true).'/'.$filepath_target; } } /** * Tests if a folder is ready to be used * If not, creates the proper folders, adding index.html files inside them if needed * */ public static function isFolderReady($root_path, $extra_path, $include_index = true) { $path = $root_path; $folders = explode("/", $extra_path); foreach ($folders as $folder) { $path .= '/'.$folder; if (!JFolder::exists($path)) { if (JFolder::create($path)) { if ($include_index) { $src = JPATH_ROOT.'/libraries/syw/index.html'; $dest = $path.'/index.html'; if (!JFile::copy($src, $dest)) { return false; } } } else { return false; } } } return true; } public static function getTmpPath($tmp_path_param = 'default', $sub_directory = 'thumbnails') { $app = JFactory::getApplication(); $tmp_path = str_replace(JPATH_ROOT.'/', '', $app->getCfg('tmp_path')); if ($tmp_path_param == 'images') { $media_params = JComponentHelper::getParams('com_media'); $images_path = $media_params->get('image_path', 'images'); if (self::isFolderReady(JPATH_ROOT.'/'.$images_path, $sub_directory)) { $tmp_path = $images_path.'/'.$sub_directory; } else { $lang = JFactory::getLanguage(); $lang->load('lib_syw.sys', JPATH_SITE); $app->enqueueMessage(JText::sprintf('LIB_SYW_WARNING_COULDNOTCREATETMPFOLDERUSINGDEFAULT', $images_path.'/'.$sub_directory), 'warning'); } } else if ($tmp_path_param == 'cache') { if (self::isFolderReady(JPATH_CACHE, $sub_directory)) { $tmp_path = 'cache/'.$sub_directory; } } return $tmp_path; } } ?>