%PDF- %PDF-
| Direktori : /home/lightco1/upgrade.lightco.com.au/libraries/regularlabs/helpers/ |
| Current File : /home/lightco1/upgrade.lightco.com.au/libraries/regularlabs/helpers/functions.php |
<?php
/**
* @package Regular Labs Library
* @version 16.4.23089
*
* @author Peter van Westen <info@regularlabs.com>
* @link http://www.regularlabs.com
* @copyright Copyright © 2016 Regular Labs All Rights Reserved
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
*/
defined('_JEXEC') or die;
require_once __DIR__ . '/cache.php';
/**
* Framework Functions
*/
class RLFunctions
{
var $_version = '14.9.1';
public static function isFeed()
{
return (
JFactory::getDocument()->getType() == 'feed'
|| JFactory::getApplication()->input->getWord('format') == 'feed'
|| JFactory::getApplication()->input->getWord('type') == 'rss'
|| JFactory::getApplication()->input->getWord('type') == 'atom'
);
}
/*
* @Deprecated
* Use RLFunctions::script($url, $version) instead
* Can be removed before going public!
*/
public static function addScriptVersion($url)
{
jimport('joomla.filesystem.file');
if (!empty($_GET['debug']))
{
$url = str_replace('.min.', '.', $url);
}
if (!JFile::exists(JPATH_SITE . $url))
{
return JFactory::getDocument()->addScriptVersion($url);
}
JFactory::getDocument()->addScript($url . '?' . filemtime(JPATH_SITE . $url));
}
/*
* @Deprecated
* Use RLFunctions::stylesheet($url, $version) instead
* Can be removed before going public!
*/
public static function addStyleSheetVersion($url)
{
jimport('joomla.filesystem.file');
if (!empty($_GET['debug']))
{
$url = str_replace('.min.', '.', $url);
}
if (!JFile::exists(JPATH_SITE . $url))
{
return JFactory::getDocument()->addStyleSheetVersion($url);
}
JFactory::getDocument()->addStyleSheet($url . '?' . filemtime(JPATH_SITE . $url));
}
public static function script($file, $version = '')
{
if (!$file = self::getFileByFolder('js', $file))
{
return;
}
if (!empty($version))
{
/* >>> [NONE] >>> */
$version = $version == '5.0.0' ? '1.2.3' : $version;
/* <<< [NONE] <<< */
$file .= '?v=' . $version;
}
JFactory::getDocument()->addScript($file);
}
public static function stylesheet($file, $version = '')
{
if (!$file = self::getFileByFolder('css', $file))
{
return;
}
if (!empty($version))
{
/* >>> [NONE] >>> */
$version = $version == '5.0.0' ? '1.2.3' : $version;
/* <<< [NONE] <<< */
$file .= '?v=' . $version;
}
JFactory::getDocument()->addStylesheet($file);
}
protected static function getFileByFolder($folder, $file)
{
// If http is present in filename
if (strpos($file, 'http') === 0 || strpos($file, '//') === 0)
{
return $file;
}
// Get the template
$template = JFactory::getApplication()->getTemplate();
$files = array();
// Detect debug mode
if (JFactory::getConfig()->get('debug') || JFactory::getApplication()->input->get('debug'))
{
$files[] = str_replace(array('.min.', '-min.'), '.', $file);
}
$files[] = $file;
/*
* Loop on 1 or 2 files and break on first found.
* Add the content of the MD5SUM file located in the same folder to url to ensure cache browser refresh
* This MD5SUM file must represent the signature of the folder content
*/
foreach ($files as $check_file)
{
// If the file is in the template folder
if ($file_found = self::fileExists('/templates/' . $template . '/' . $folder . '/' . $check_file))
{
return $file_found;
}
// Try to deal with system files in the media folder
if (strpos($check_file, '/') === false)
{
if ($file_found = self::fileExists('/media/system' . $folder . '/' . $check_file))
{
return $file_found;
}
continue;
}
if ($file_found = self::fileExistsByFolder($check_file, $folder))
{
return $file_found;
}
}
return false;
}
private static function fileExistsByFolder($file, $folder)
{
$template = JFactory::getApplication()->getTemplate();
// If the file is in the template folder
if ($file_found = self::fileExists('/templates/' . $template . '/' . $folder . '/' . $file))
{
return $file_found;
}
// Try to deal with system files in the media folder
if (strpos($file, '/') === false)
{
if ($file_found = self::fileExists('/media/system/' . $folder . '/' . $file))
{
return $file_found;
}
return false;
}
$paths = array();
// If the file contains any /: it can be in a media extension subfolder
// Divide the file extracting the extension as the first part before /
list($extension, $file) = explode('/', $file, 2);
$paths[] = '/media/' . $extension . '/' . $folder;
$paths[] = '/templates/' . $template . '/' . $folder . '/system';
$paths[] = '/media/system/' . $folder;
foreach ($paths as $path)
{
if ($file_found = self::fileExists($path . '/' . $file))
{
return $file_found;
}
}
return false;
}
private static function fileExists($path)
{
if (!file_exists(JPATH_ROOT . $path))
{
return false;
}
return JUri::root(true) . $path;
}
public static function getByUrl($url)
{
$hash = md5('getByUrl_' . $url);
if (RLCache::has($hash))
{
return RLCache::get($hash);
}
// only allow url calls from administrator
if (!JFactory::getApplication()->isAdmin())
{
die;
}
// only allow when logged in
$user = JFactory::getUser();
if (!$user->id)
{
die;
}
if (substr($url, 0, 4) != 'http')
{
$url = 'http://' . $url;
}
// only allow url calls to regularlabs.com domain
if (!(preg_match('#^https?://([^/]+\.)?regularlabs\.com/#', $url)))
{
die;
}
// only allow url calls to certain files
if (
strpos($url, 'download.regularlabs.com/extensions.php') === false
&& strpos($url, 'download.regularlabs.com/extensions.json') === false
&& strpos($url, 'download.regularlabs.com/extensions.xml') === false
)
{
die;
}
$format = (strpos($url, '.json') !== false || strpos($url, 'format=json') !== false)
? 'application/json'
: 'text/xml';
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-type: " . $format);
return RLCache::set(
$hash,
self::getContents($url)
);
}
public static function getContents($url, $timeout = 20)
{
$hash = md5('getContents_' . $url);
if (RLCache::has($hash))
{
return RLCache::get($hash);
}
if (JFactory::getApplication()->input->getInt('cache', 0)
&& $content = RLCache::read($hash)
)
{
return $content;
}
try
{
$content = JHttpFactory::getHttp()->get($url, null, $timeout)->body;
}
catch (RuntimeException $e)
{
return '';
}
if ($ttl = JFactory::getApplication()->input->getInt('cache', 0))
{
return RLCache::write($hash, $content, $ttl > 1 ? $ttl : 0);
}
return RLCache::set($hash, $content);
}
public static function getComponentBuffer()
{
$buffer = JFactory::getDocument()->getBuffer('component');
if (empty($buffer) || !is_string($buffer))
{
return false;
}
$buffer = trim($buffer);
if (empty($buffer))
{
return false;
}
return $buffer;
}
public static function getAliasAndElement(&$name)
{
$name = self::getNameByAlias($name);
$alias = self::getAliasByName($name);
$element = self::getElementByAlias($alias);
return array($alias, $element);
}
public static function getNameByAlias($alias)
{
// Alias is a language string
if (strpos($alias, ' ') === false && strtoupper($alias) == $alias)
{
return JText::_($alias);
}
// Alias has a space and/or capitals, so is already a name
if (strpos($alias, ' ') !== false || $alias !== strtolower($alias))
{
return $alias;
}
return JText::_(self::getXMLValue('name', $alias));
}
public static function getAliasByName($name)
{
$alias = preg_replace('#[^a-z0-9]#', '', strtolower($name));
switch ($alias)
{
case 'advancedmodules':
return 'advancedmodulemanager';
case 'advancedtemplates':
return 'advancedtemplatemanager';
case 'nonumbermanager':
return 'nonumberextensionmanager';
case 'what-nothing':
return 'whatnothing';
}
return $alias;
}
public static function getElementByAlias($alias)
{
$alias = self::getAliasByName($alias);
switch ($alias)
{
case 'advancedmodulemanager':
return 'advancedmodules';
case 'advancedtemplatemanager':
return 'advancedtemplates';
case 'nonumberextensionmanager':
return 'nonumbermanager';
}
return $alias;
}
public static function getXMLValue($key, $alias, $type = 'component', $folder = 'system')
{
if (!$xml = self::getXML($alias, $type, $folder))
{
return '';
}
if (!isset($xml[$key]))
{
return '';
}
return isset($xml[$key]) ? $xml[$key] : '';
}
public static function getXML($alias, $type = 'component', $folder = 'system')
{
if (!$file = self::getXMLFile($alias, $type, $folder))
{
return false;
}
return JApplicationHelper::parseXMLInstallFile($file);
}
public static function getXMLFile($alias, $type = 'component', $folder = 'system')
{
jimport('joomla.filesystem.file');
$element = self::getElementByAlias($alias);
$files = array();
// Components
if (empty($type) || $type == 'component')
{
$files[] = JPATH_ADMINISTRATOR . '/components/com_' . $element . '/' . $element . '.xml';
$files[] = JPATH_SITE . '/components/com_' . $element . '/' . $element . '.xml';
$files[] = JPATH_ADMINISTRATOR . '/components/com_' . $element . '/com_' . $element . '.xml';
$files[] = JPATH_SITE . '/components/com_' . $element . '/com_' . $element . '.xml';
}
// Plugins
if (empty($type) || $type == 'plugin')
{
if (!empty($folder))
{
$files[] = JPATH_PLUGINS . '/' . $folder . '/' . $element . '/' . $element . '.xml';
$files[] = JPATH_PLUGINS . '/' . $folder . '/' . $element . '.xml';
}
// System Plugins
$files[] = JPATH_PLUGINS . '/system/' . $element . '/' . $element . '.xml';
$files[] = JPATH_PLUGINS . '/system/' . $element . '.xml';
// Editor Button Plugins
$files[] = JPATH_PLUGINS . '/editors-xtd/' . $element . '/' . $element . '.xml';
$files[] = JPATH_PLUGINS . '/editors-xtd/' . $element . '.xml';
}
// Modules
if (empty($type) || $type == 'module')
{
$files[] = JPATH_ADMINISTRATOR . '/modules/mod_' . $element . '/' . $element . '.xml';
$files[] = JPATH_SITE . '/modules/mod_' . $element . '/' . $element . '.xml';
$files[] = JPATH_ADMINISTRATOR . '/modules/mod_' . $element . '/mod_' . $element . '.xml';
$files[] = JPATH_SITE . '/modules/mod_' . $element . '/mod_' . $element . '.xml';
}
foreach ($files as $file)
{
if (!JFile::exists($file))
{
continue;
}
return $file;
}
return '';
}
public static function extensionInstalled($extension, $type = 'component', $folder = 'system')
{
jimport('joomla.filesystem.folder');
jimport('joomla.filesystem.file');
switch ($type)
{
case 'component':
if (JFile::exists(JPATH_ADMINISTRATOR . '/components/com_' . $extension . '/' . $extension . '.php')
|| JFile::exists(JPATH_ADMINISTRATOR . '/components/com_' . $extension . '/admin.' . $extension . '.php')
|| JFile::exists(JPATH_SITE . '/components/com_' . $extension . '/' . $extension . '.php')
)
{
if ($extension == 'cookieconfirm')
{
// Only Cookie Confirm 2.0.0.rc1 and above is supported, because
// previous versions don't have isCookiesAllowed()
require_once JPATH_ADMINISTRATOR . '/components/com_cookieconfirm/version.php';
if (version_compare(COOKIECONFIRM_VERSION, '2.2.0.rc1', '<'))
{
return false;
}
}
return true;
}
break;
case 'plugin':
return JFile::exists(JPATH_PLUGINS . '/' . $folder . '/' . $extension . '/' . $extension . '.php');
case 'module':
return (JFile::exists(JPATH_ADMINISTRATOR . '/modules/mod_' . $extension . '/' . $extension . '.php')
|| JFile::exists(JPATH_ADMINISTRATOR . '/modules/mod_' . $extension . '/mod_' . $extension . '.php')
|| JFile::exists(JPATH_SITE . '/modules/mod_' . $extension . '/' . $extension . '.php')
|| JFile::exists(JPATH_SITE . '/modules/mod_' . $extension . '/mod_' . $extension . '.php')
);
case 'library':
return JFolder::exists(JPATH_LIBRARIES . '/' . $extension);
}
return false;
}
public static function loadLanguage($extension = 'plg_system_regularlabs', $basePath = '')
{
if ($basePath && JFactory::getLanguage()->load($extension, $basePath))
{
return true;
}
$basePath = self::getExtensionPath($extension, $basePath, 'language');
return JFactory::getLanguage()->load($extension, $basePath);
}
public static function getExtensionPath($extension = 'plg_system_regularlabs', $basePath = JPATH_ADMINISTRATOR, $check_folder = '')
{
$basePath = $basePath ?: JPATH_SITE;
if (!in_array($basePath, array(JPATH_ADMINISTRATOR, JPATH_SITE)))
{
return $basePath;
}
switch (true)
{
case (strpos($extension, 'com_') === 0):
$path = 'components/' . $extension;
break;
case (strpos($extension, 'mod_') === 0):
$path = 'modules/' . $extension;
break;
case (strpos($extension, 'plg_system_') === 0):
$path = 'plugins/system/' . substr($extension, strlen('plg_system_'));
break;
case (strpos($extension, 'plg_editors-xtd_') === 0):
$path = 'plugins/editors-xtd/' . substr($extension, strlen('plg_editors-xtd_'));
break;
}
$check_folder = $check_folder ? '/' . $check_folder : '';
if (is_dir($basePath . '/' . $path . $check_folder))
{
return $basePath . '/' . $path;
}
if (is_dir(JPATH_ADMINISTRATOR . '/' . $path . $check_folder))
{
return JPATH_ADMINISTRATOR . '/' . $path;
}
if (is_dir(JPATH_SITE . '/' . $path . $check_folder))
{
return JPATH_SITE . '/' . $path;
}
return $basePath;
}
public static function xmlToObject($url, $root = '')
{
$hash = md5('xmlToObject_' . $url . '_' . $root);
if (RLCache::has($hash))
{
return RLCache::get($hash);
}
if (JFile::exists($url))
{
$xml = @new SimpleXMLElement($url, LIBXML_NONET | LIBXML_NOCDATA, 1);
}
else
{
$xml = simplexml_load_string($url, "SimpleXMLElement", LIBXML_NONET | LIBXML_NOCDATA);
}
if (!@count($xml))
{
return RLCache::set(
$hash,
new stdClass
);
}
if ($root)
{
if (!isset($xml->{$root}))
{
return RLCache::set(
$hash,
new stdClass
);
}
$xml = $xml->{$root};
}
$json = json_encode($xml);
$xml = json_decode($json);
if (is_null($xml))
{
$xml = new stdClass;
}
if ($root && isset($xml->{$root}))
{
$xml = $xml->{$root};
}
return RLCache::set(
$hash,
$xml
);
}
}