File "helper.php"
Full Path: /home/asmplong/www/ancien-site-2019/site/libraries/joomla/plugin/helper.php
File size: 5.61 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* @package Joomla.Platform
* @subpackage Plugin
*
* @copyright Copyright (C) 2005 - 2011 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
/**
* Plugin helper class
*
* @package Joomla.Platform
* @subpackage Plugin
* @since 11.1
*/
abstract class JPluginHelper
{
/**
* Get the plugin data of a specific type if no specific plugin is specified
* otherwise only the specific plugin data is returned.
*
* @param string $type The plugin type, relates to the sub-directory in the plugins directory.
* @param string $plugin The plugin name.
*
* @return mixed An array of plugin data objects, or a plugin data object.
*
* @since 11.1
*/
public static function getPlugin($type, $plugin = null)
{
$result = array();
$plugins = self::_load();
// Find the correct plugin(s) to return.
if (!$plugin) {
foreach($plugins as $p) {
// Is this the right plugin?
if ($p->type == $type) {
$result[] = $p;
}
}
} else {
foreach($plugins as $p) {
// Is this plugin in the right group?
if ($p->type == $type && $p->name == $plugin) {
$result = $p;
break;
}
}
}
return $result;
}
/**
* Checks if a plugin is enabled.
*
* @param string $type The plugin type, relates to the sub-directory in the plugins directory.
* @param string $plugin The plugin name.
*
* @return boolean
*
* @since 11.1
*/
public static function isEnabled($type, $plugin = null)
{
$result = self::getPlugin($type, $plugin);
return (!empty($result));
}
/**
* Loads all the plugin files for a particular type if no specific plugin is specified
* otherwise only the specific pugin is loaded.
*
* @param string $type The plugin type, relates to the sub-directory in the plugins directory.
* @param string $plugin The plugin name.
* @param boolean $autocreate
* @param JDispatcher $dispatcher Optionally allows the plugin to use a different dispatcher.
*
* @return boolean True on success.
*
* @since 11.1
*/
public static function importPlugin($type, $plugin = null, $autocreate = true, $dispatcher = null)
{
static $loaded = Array();
// check for the default args, if so we can optimise cheaply
$defaults = false;
if (is_null($plugin) && $autocreate == true && is_null($dispatcher)) {
$defaults = true;
}
if (!isset($loaded[$type]) || !$defaults) {
$results = null;
// Load the plugins from the database.
$plugins = self::_load();
// Get the specified plugin(s).
for ($i = 0, $t = count($plugins); $i < $t; $i++) {
if ($plugins[$i]->type == $type && ($plugin === null || $plugins[$i]->name == $plugin)) {
self::_import($plugins[$i], $autocreate, $dispatcher);
$results = true;
}
}
// Bail out early if we're not using default args
if(!$defaults) {
return $results;
}
$loaded[$type] = $results;
}
return $loaded[$type];
}
/**
* Loads the plugin file.
*
* @param JPlugin $plugin The plugin.
* @param boolean $autocreate True to autocreate.
* @param JDispatcher $dispatcher Optionally allows the plugin to use a different dispatcher.
*
* @return boolean True on success.
*
* @since 11.1
*/
protected static function _import(&$plugin, $autocreate = true, $dispatcher = null)
{
static $paths = array();
$plugin->type = preg_replace('/[^A-Z0-9_\.-]/i', '', $plugin->type);
$plugin->name = preg_replace('/[^A-Z0-9_\.-]/i', '', $plugin->name);
$legacypath = JPATH_PLUGINS . '/' . $plugin->type . '/' . $plugin->name.'.php';
$path = JPATH_PLUGINS . '/' . $plugin->type . '/' . $plugin->name . '/' . $plugin->name.'.php';
if (!isset( $paths[$path] ) || !isset($paths[$legacypath])) {
$pathExists = file_exists($path);
if ($pathExists || file_exists($legacypath)) {
$path = $pathExists ? $path : $legacypath;
jimport('joomla.plugin.plugin');
if (!isset($paths[$path])) {
require_once $path;
}
$paths[$path] = true;
if ($autocreate) {
// Makes sure we have an event dispatcher
if (!is_object($dispatcher)) {
$dispatcher = JDispatcher::getInstance();
}
$className = 'plg'.$plugin->type.$plugin->name;
if (class_exists($className)) {
// Load the plugin from the database.
if (!isset( $plugin->params )) {
// Seems like this could just go bye bye completely
$plugin = self::getPlugin($plugin->type, $plugin->name);
}
// Instantiate and register the plugin.
new $className($dispatcher, (array)($plugin));
}
}
} else {
$paths[$path] = false;
}
}
}
/**
* Loads the published plugins.
*
* @return void
* @since 11.1
*/
protected static function _load()
{
static $plugins;
if (isset($plugins)) {
return $plugins;
}
$user = JFactory::getUser();
$cache = JFactory::getCache('com_plugins', '');
$levels = implode(',', $user->getAuthorisedViewLevels());
if (!$plugins = $cache->get($levels)) {
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('folder AS type, element AS name, params')
->from('#__extensions')
->where('enabled >= 1')
->where('type ='.$db->Quote('plugin'))
->where('state >= 0')
->where('access IN ('.$levels.')')
->order('ordering');
$plugins = $db->setQuery($query)
->loadObjectList();
if ($error = $db->getErrorMsg()) {
JError::raiseWarning(500, $error);
return false;
}
$cache->store($plugins, $levels);
}
return $plugins;
}
}