Spade
Mini Shell
home/lmsyaran/public_html/j3/htaccess.back/src/Plugin/PluginHelper.php000064400000021412151170300100021754
0ustar00<?php
/**
* Joomla! Content Management System
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
namespace Joomla\CMS\Plugin;
defined('JPATH_PLATFORM') or die;
/**
* Plugin helper class
*
* @since 1.5
*/
abstract class PluginHelper
{
/**
* A persistent cache of the loaded plugins.
*
* @var array
* @since 1.7
*/
protected static $plugins = null;
/**
* Get the path to a layout from a Plugin
*
* @param string $type Plugin type
* @param string $name Plugin name
* @param string $layout Layout name
*
* @return string Layout path
*
* @since 3.0
*/
public static function getLayoutPath($type, $name, $layout =
'default')
{
$template = \JFactory::getApplication()->getTemplate();
$defaultLayout = $layout;
if (strpos($layout, ':') !== false)
{
// Get the template and file name from the string
$temp = explode(':', $layout);
$template = $temp[0] === '_' ? $template : $temp[0];
$layout = $temp[1];
$defaultLayout = $temp[1] ?: 'default';
}
// Build the template and base path for the layout
$tPath = JPATH_THEMES . '/' . $template .
'/html/plg_' . $type . '_' . $name . '/' .
$layout . '.php';
$bPath = JPATH_PLUGINS . '/' . $type . '/' . $name .
'/tmpl/' . $defaultLayout . '.php';
$dPath = JPATH_PLUGINS . '/' . $type . '/' . $name .
'/tmpl/default.php';
// If the template has a layout override use it
if (file_exists($tPath))
{
return $tPath;
}
elseif (file_exists($bPath))
{
return $bPath;
}
else
{
return $dPath;
}
}
/**
* 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 subdirectory
in the plugins directory.
* @param string $plugin The plugin name.
*
* @return mixed An array of plugin data objects, or a plugin data
object.
*
* @since 1.5
*/
public static function getPlugin($type, $plugin = null)
{
$result = array();
$plugins = static::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 subdirectory
in the plugins directory.
* @param string $plugin The plugin name.
*
* @return boolean
*
* @since 1.5
*/
public static function isEnabled($type, $plugin = null)
{
$result = static::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 plugin is loaded.
*
* @param string $type The plugin type, relates to
the subdirectory in the plugins directory.
* @param string $plugin The plugin name.
* @param boolean $autocreate Autocreate the plugin.
* @param \JEventDispatcher $dispatcher Optionally allows the plugin
to use a different dispatcher.
*
* @return boolean True on success.
*
* @since 1.5
*/
public static function importPlugin($type, $plugin = null, $autocreate =
true, \JEventDispatcher $dispatcher = null)
{
static $loaded = array();
// Check for the default args, if so we can optimise cheaply
$defaults = false;
if ($plugin === null && $autocreate === true &&
$dispatcher === null)
{
$defaults = true;
}
// Ensure we have a dispatcher now so we can correctly track the loaded
plugins
$dispatcher = $dispatcher ?: \JEventDispatcher::getInstance();
// Get the dispatcher's hash to allow plugins to be registered to
unique dispatchers
$dispatcherHash = spl_object_hash($dispatcher);
if (!isset($loaded[$dispatcherHash]))
{
$loaded[$dispatcherHash] = array();
}
if (!$defaults || !isset($loaded[$dispatcherHash][$type]))
{
$results = null;
// Load the plugins from the database.
$plugins = static::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))
{
static::import($plugins[$i], $autocreate, $dispatcher);
$results = true;
}
}
// Bail out early if we're not using default args
if (!$defaults)
{
return $results;
}
$loaded[$dispatcherHash][$type] = $results;
}
return $loaded[$dispatcherHash][$type];
}
/**
* Loads the plugin file.
*
* @param object $plugin The plugin.
* @param boolean $autocreate True to autocreate.
* @param \JEventDispatcher $dispatcher Optionally allows the plugin
to use a different dispatcher.
*
* @return void
*
* @since 1.5
* @deprecated 4.0 Use PluginHelper::import() instead
*/
protected static function _import($plugin, $autocreate = true,
\JEventDispatcher $dispatcher = null)
{
static::import($plugin, $autocreate, $dispatcher);
}
/**
* Loads the plugin file.
*
* @param object $plugin The plugin.
* @param boolean $autocreate True to autocreate.
* @param \JEventDispatcher $dispatcher Optionally allows the plugin
to use a different dispatcher.
*
* @return void
*
* @since 3.2
*/
protected static function import($plugin, $autocreate = true,
\JEventDispatcher $dispatcher = null)
{
static $paths = array();
// Ensure we have a dispatcher now so we can correctly track the loaded
paths
$dispatcher = $dispatcher ?: \JEventDispatcher::getInstance();
// Get the dispatcher's hash to allow paths to be tracked against
unique dispatchers
$dispatcherHash = spl_object_hash($dispatcher);
if (!isset($paths[$dispatcherHash]))
{
$paths[$dispatcherHash] = array();
}
$plugin->type = preg_replace('/[^A-Z0-9_\.-]/i',
'', $plugin->type);
$plugin->name = preg_replace('/[^A-Z0-9_\.-]/i',
'', $plugin->name);
$path = JPATH_PLUGINS . '/' . $plugin->type . '/'
. $plugin->name . '/' . $plugin->name . '.php';
if (!isset($paths[$dispatcherHash][$path]))
{
if (file_exists($path))
{
if (!isset($paths[$dispatcherHash][$path]))
{
require_once $path;
}
$paths[$dispatcherHash][$path] = true;
if ($autocreate)
{
$className = 'Plg' . str_replace('-',
'', $plugin->type) . $plugin->name;
if ($plugin->type == 'editors-xtd')
{
// This type doesn't follow the convention
$className = 'PlgEditorsXtd' . $plugin->name;
if (!class_exists($className))
{
$className = 'PlgButton' . $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 = static::getPlugin($plugin->type, $plugin->name);
}
// Instantiate and register the plugin.
new $className($dispatcher, (array) $plugin);
}
}
}
else
{
$paths[$dispatcherHash][$path] = false;
}
}
}
/**
* Loads the published plugins.
*
* @return array An array of published plugins
*
* @since 1.5
* @deprecated 4.0 Use PluginHelper::load() instead
*/
protected static function _load()
{
return static::load();
}
/**
* Loads the published plugins.
*
* @return array An array of published plugins
*
* @since 3.2
*/
protected static function load()
{
if (static::$plugins !== null)
{
return static::$plugins;
}
$levels = implode(',',
\JFactory::getUser()->getAuthorisedViewLevels());
/** @var \JCacheControllerCallback $cache */
$cache = \JFactory::getCache('com_plugins',
'callback');
$loader = function () use ($levels)
{
$db = \JFactory::getDbo();
$query = $db->getQuery(true)
->select(
$db->quoteName(
array(
'folder',
'element',
'params',
'extension_id'
),
array(
'type',
'name',
'params',
'id'
)
)
)
->from('#__extensions')
->where('enabled = 1')
->where('type = ' . $db->quote('plugin'))
->where('state IN (0,1)')
->where('access IN (' . $levels . ')')
->order('ordering');
$db->setQuery($query);
return $db->loadObjectList();
};
try
{
static::$plugins = $cache->get($loader, array(), md5($levels),
false);
}
catch (\JCacheException $cacheException)
{
static::$plugins = $loader();
}
return static::$plugins;
}
}
home/lmsyaran/public_html/joomla5/libraries/src/Plugin/PluginHelper.php000064400000022376151201457110022311
0ustar00<?php
/**
* Joomla! Content Management System
*
* @copyright (C) 2005 Open Source Matters, Inc.
<https://www.joomla.org>
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
namespace Joomla\CMS\Plugin;
use Joomla\CMS\Cache\Exception\CacheExceptionInterface;
use Joomla\CMS\Factory;
use Joomla\Event\DispatcherAwareInterface;
use Joomla\Event\DispatcherInterface;
// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
/**
* Plugin helper class
*
* @since 1.5
*/
abstract class PluginHelper
{
/**
* A persistent cache of the loaded plugins.
*
* @var array|null
*
* @since 1.7
*/
protected static $plugins = null;
/**
* Get the path to a layout from a Plugin
*
* @param string $type Plugin type
* @param string $name Plugin name
* @param string $layout Layout name
*
* @return string Layout path
*
* @since 3.0
*/
public static function getLayoutPath($type, $name, $layout =
'default')
{
$app = Factory::getApplication();
if ($app->isClient('site') ||
$app->isClient('administrator')) {
$templateObj = $app->getTemplate(true);
} else {
$templateObj = (object) [
'template' => '',
'parent' => '',
];
}
$defaultLayout = $layout;
$template = $templateObj->template;
if (strpos($layout, ':') !== false) {
// Get the template and file name from the string
$temp = explode(':', $layout);
$template = $temp[0] === '_' ?
$templateObj->template : $temp[0];
$layout = $temp[1];
$defaultLayout = $temp[1] ?: 'default';
}
// Build the template and base path for the layout
$layoutPaths = [];
if ($template) {
$layoutPaths[] = JPATH_THEMES . '/' . $template .
'/html/plg_' . $type . '_' . $name . '/' .
$layout . '.php';
}
if ($templateObj->parent) {
$layoutPaths[] = JPATH_THEMES . '/' .
$templateObj->parent . '/html/plg_' . $type . '_' .
$name . '/' . $layout . '.php';
}
$layoutPaths[] = JPATH_PLUGINS . '/' . $type .
'/' . $name . '/tmpl/' . $defaultLayout .
'.php';
$layoutPaths[] = JPATH_PLUGINS . '/' . $type .
'/' . $name . '/tmpl/default.php';
foreach ($layoutPaths as $path) {
if (is_file($path)) {
return $path;
}
}
return end($layoutPaths);
}
/**
* 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
subdirectory in the plugins directory.
* @param string $plugin The plugin name.
*
* @return mixed An array of plugin data objects, or a plugin data
object.
*
* @since 1.5
*/
public static function getPlugin($type, $plugin = null)
{
$result = [];
$plugins = static::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
subdirectory in the plugins directory.
* @param string $plugin The plugin name.
*
* @return boolean
*
* @since 1.5
*/
public static function isEnabled($type, $plugin = null)
{
$result = static::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 plugin is loaded.
*
* @param string $type The plugin type, relates
to the subdirectory in the plugins directory.
* @param string $plugin The plugin name.
* @param boolean $autocreate Autocreate the plugin.
* @param DispatcherInterface $dispatcher Optionally allows the
plugin to use a different dispatcher.
*
* @return boolean True on success.
*
* @since 1.5
*/
public static function importPlugin($type, $plugin = null, $autocreate
= true, DispatcherInterface $dispatcher = null)
{
static $loaded = [];
// Check for the default args, if so we can optimise cheaply
$defaults = false;
if ($plugin === null && $autocreate === true &&
$dispatcher === null) {
$defaults = true;
}
// Ensure we have a dispatcher now so we can correctly track the
loaded plugins
$dispatcher = $dispatcher ?:
Factory::getApplication()->getDispatcher();
// Get the dispatcher's hash to allow plugins to be registered
to unique dispatchers
$dispatcherHash = spl_object_hash($dispatcher);
if (!isset($loaded[$dispatcherHash])) {
$loaded[$dispatcherHash] = [];
}
if (!$defaults || !isset($loaded[$dispatcherHash][$type])) {
$results = null;
// Load the plugins from the database.
$plugins = static::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)) {
static::import($plugins[$i], $autocreate, $dispatcher);
$results = true;
}
}
// Bail out early if we're not using default args
if (!$defaults) {
return $results;
}
$loaded[$dispatcherHash][$type] = $results;
}
return $loaded[$dispatcherHash][$type];
}
/**
* Loads the plugin file.
*
* @param object $plugin The plugin.
* @param boolean $autocreate True to autocreate.
* @param DispatcherInterface $dispatcher Optionally allows the
plugin to use a different dispatcher.
*
* @return void
*
* @since 3.2
*/
protected static function import($plugin, $autocreate = true,
DispatcherInterface $dispatcher = null)
{
static $plugins = [];
// Get the dispatcher's hash to allow paths to be tracked
against unique dispatchers
$hash = spl_object_hash($dispatcher) . $plugin->type .
$plugin->name;
if (\array_key_exists($hash, $plugins)) {
return;
}
$plugins[$hash] = true;
$plugin =
Factory::getApplication()->bootPlugin($plugin->name,
$plugin->type);
if ($dispatcher && $plugin instanceof
DispatcherAwareInterface) {
$plugin->setDispatcher($dispatcher);
}
if (!$autocreate) {
return;
}
$plugin->registerListeners();
}
/**
* Loads the published plugins.
*
* @return array An array of published plugins
*
* @since 3.2
*/
protected static function load()
{
if (static::$plugins !== null) {
return static::$plugins;
}
$levels = Factory::getUser()->getAuthorisedViewLevels();
/** @var \Joomla\CMS\Cache\Controller\CallbackController $cache */
$cache = Factory::getCache('com_plugins',
'callback');
$loader = function () use ($levels) {
$db = Factory::getDbo();
$query = $db->getQuery(true)
->select(
$db->quoteName(
[
'folder',
'element',
'params',
'extension_id',
],
[
'type',
'name',
'params',
'id',
]
)
)
->from($db->quoteName('#__extensions'))
->where(
[
$db->quoteName('enabled') . ' =
1',
$db->quoteName('type') . ' =
' . $db->quote('plugin'),
$db->quoteName('state') . ' IN
(0,1)',
]
)
->whereIn($db->quoteName('access'),
$levels)
->order($db->quoteName('ordering'));
$db->setQuery($query);
return $db->loadObjectList();
};
try {
static::$plugins = $cache->get($loader, [],
md5(implode(',', $levels)), false);
} catch (CacheExceptionInterface $cacheException) {
static::$plugins = $loader();
}
return static::$plugins;
}
}