%PDF- %PDF-
| Direktori : /home1/lightco1/public_html/plugins/system/jsnframework/libraries/ |
| Current File : //home1/lightco1/public_html/plugins/system/jsnframework/libraries/loader.php |
<?php
/**
* @version $Id$
* @package JSN_Framework
* @author JoomlaShine Team <support@joomlashine.com>
* @copyright Copyright (C) 2012 JoomlaShine.com. All Rights Reserved.
* @license GNU/GPL v2 or later http://www.gnu.org/licenses/gpl-2.0.html
*
* Websites: http://www.joomlashine.com
* Technical Support: Feedback - http://www.joomlashine.com/contact-us/get-support.html
*/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
if ( ! class_exists('JSN_Loader'))
{
/**
* Class autoloader.
*
* @package JSN_Framework
* @since 1.3.8
*/
class JSN_Loader
{
/**
* Path to search for class declaration.
*
* @var array
*/
protected static $paths = array();
/**
* Register base path to search for class declaration files.
*
* @param string $path Base path.
* @param string $prefix Class prefix.
*
* @return void
*/
public static function register($path, $prefix = 'JSN')
{
self::$paths[$path] = $prefix;
}
/**
* Auload InnoThemes's classes.
*
* @param string $className Name of class.
*
* @return void
*/
public static function load($className)
{
// Only autoload class name prefixed with JSN
if (substr($className, 0, 3) == 'JSN')
{
foreach (array_reverse(self::$paths) AS $base => $prefix)
{
if (strpos($className, $prefix) === 0)
{
// Split the class name into parts separated by camelCase
$path = preg_split('/(?<=[a-z0-9])(?=[A-Z])/x', str_replace($prefix, '', $className));
// Convert class name to file path
$path = implode('/', array_map('strtolower', $path));
// Check if class declaration file exists
$file = $base . '/' . $path . '.php';
while ( ! ($exists = @is_file($file)) AND strpos($file, '/') !== false)
{
$file = preg_replace('#/([^/]+)$#', '-\\1', $file);
}
if ( ! $exists AND strpos($path, '/') === false)
{
// If class name has single word, e.g. JSN_Version, duplicate it for alternative file path, e.g. version/version.php
$exists = @is_file($file = $base . '/' . $path . '/' . $path . '.php');
}
if ($exists)
{
return include_once $file;
}
}
}
return false;
}
}
/**
* Search a file in registered paths.
*
* @param string $file Relative file path to search for.
*
* @return string
*/
public static function get_path($file)
{
foreach (array_reverse(self::$paths) AS $base => $prefix)
{
if (@is_file($base . '/' . $file))
{
return $base . '/' . $file;
}
}
return null;
}
}
// Register class autoloader with PHP
spl_autoload_register(array('JSN_Loader', 'load'));
}
// Register path to JSN Extension Framework's libraries
JSN_Loader::register(dirname(__FILE__) . '/joomlashine');
/**
* Manually import class file of JSN Framework.
*
* Besides auto-loader, JSN Framework provides <b>jsnimport</b> function
* for manually load class declaration file using dot syntax as following:
*
* <dl>
* <dt>jsnimport('joomlashine.config.helper');</dt>
* <dd>will load the following file: <q>libraries/joomlashine/config/helper.php</q></dd>
* <dt>jsnimport('somevendor.somelib.someclass');</dt>
* <dd>will load the following file:<q>libraries/somevendor/somelib/someclass.php</q></dd>
* </dl>
*
* This function also supports loading class file from component directory
* instead of framework directory. For example, in the administration section
* of your component, create following directory structure:
*
* <pre>- JoomlaRoot/administrator/components/com_YourComponent
* - libraries
* - joomlashine
* + test
* </pre>
*
* Then create a file named <b>helper.php</b> under the <b>test</b> directory.
* Now, in your component, simply use following function call to load that file:
*
* <code>jsnimport('joomlashine.test.helper');</code>
*
* If you follow the class naming rule of JSN Framework, e.g. the class declared
* in the above file is named <b>JSNTestHelper</b>, then your class will
* autoload-able anywhere it is used without the need of executing the above
* code first.
*
* @param string $path A dot syntax path.
* @param string $className Class name.
*
* @return boolean
*/
function jsnimport($path, $className = '')
{
static $imported;
// Only import the library if not already attempted
if ( ! isset($imported[$path]))
{
// Check if class already declared
if ( ! empty($className) AND class_exists($className, false))
{
return ($imported[$path] = true);
}
// Initialize variables
$appl = is_object($appl = JFactory::getApplication()->input) ? $appl->getCmd('option') : '';
$file = str_replace('.', '/', $path) . '.php';;
$path = JPATH_ROOT . '/administrator/components/' . $appl . '/libraries';
// Prefer to look for class file from extension directory first
if ($appl)
{
$filePath = @is_file("{$path}/{ $file}") ? "{$path}/{ $file}" : null;
}
// Then look for class file from JSN Framework directory
if ( ! isset($filePath))
{
$filePath = @is_file(JSN_PATH_LIBRARIES . "/{$file}") ? JSN_PATH_LIBRARIES . "/{$file}" : null;
}
// If the file exists attempt to include it
if (isset($filePath))
{
$success = (bool) require_once $filePath;
}
// Add the import key to the memory cache container.
$imported[$path] = isset($success) ? $success : false;
}
return $imported[$path];
}