%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/lightco1/www/administrator/components/com_csvi/rantai/plugin/
Upload File :
Create Path :
Current File : /home/lightco1/www/administrator/components/com_csvi/rantai/plugin/dispatcher.php

<?php
/**
 * @package     CSVI
 * @subpackage  Rantai
 *
 * @author      Roland Dalmulder <contact@csvimproved.com>
 * @copyright   Copyright (C) 2006 - 2016 RolandD Cyber Produksi. All rights reserved.
 * @license     GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
 * @link        http://www.csvimproved.com
 */

defined('_JEXEC') or die;

require_once 'observable.php';

/**
 * Plugin helper.
 *
 * @package     CSVI
 * @subpackage  Rantai
 * @since       6.0
 */
class RantaiPluginDispatcher implements RantaiObservable
{

	/**
	 * An array of Observer objects to notify
	 *
	 * @var    array
	 * @since  11.3
	 */
	private $listeners = array();

	/**
	 * Add observers.
	 *
	 * @param   string  $strEventType  The event trigger
	 * @param   array   $listener      An observer to observer
	 *
	 * @return  void.
	 *
	 * @since   6.0
	 */
	public function addListener($strEventType, $listener)
	{
		$this->listeners[$strEventType][] = $listener;
	}

	/**
	 * Fire an event.
	 *
	 * @param   string  $strEventType  The event to trigger
	 * @param   array   $args          Arguments to pass to the observer
	 *
	 * @return  array  Array of plugin responses.
	 *
	 * @since   6.0
	 */
	public function trigger($strEventType, $args = array())
	{
		$result = array();

		if (!empty($this->listeners) && isset($this->listeners[$strEventType]))
		{
			foreach ($this->listeners[$strEventType] as $listener)
			{
				$value = call_user_func_array($listener, $args);

				if ($value)
				{
					$result[] = $value;
				}
			}
		}

		return $result;
	}

	/**
	 * Load the needed observers.
	 *
	 * @param   string           $type  The type of observers to load.
	 * @param   JDatabaseDriver  $db    A database connection.
	 *
	 * @return  void.
	 *
	 * @since   6.0
	 */
	public function importPlugins($type, $db)
	{
		if (is_dir(JPATH_SITE . '/plugins/' . $type))
		{
			$dir = new DirectoryIterator(JPATH_SITE . '/plugins/' . $type);

			foreach ($dir as $fileinfo)
			{
				if (!$fileinfo->isDot())
				{
					$filename = $fileinfo->getFilename();
					$file = JPATH_SITE . '/plugins/' . $type . '/' . $filename . '/' . $filename . '.php';

					if (file_exists($file))
					{
						require_once $file;

						$classname = 'Plg' . ucfirst($type) . ucfirst($filename);

						if (class_exists($classname))
						{
							// Check if the plugin is enabled
							$query = $db->getQuery(true)
								->select($db->quoteName('enabled'))
								->from($db->quoteName('#__extensions'))
								->where($db->quoteName('folder') . ' = ' . $db->quote($type))
								->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
								->where($db->quoteName('element') . ' = ' . $db->quote($filename));
							$db->setQuery($query);

							$enabled = $db->loadResult();

							if ($enabled)
							{
								// Instantiate the listener
								$listener = new $classname;

								// Get the methods
								$methods = get_class_methods($listener);

								foreach ($methods as $method)
								{
									$this->addListener($method, array($listener, $method));
								}
							}
						}
					}
				}
			}
		}
	}
}

Zerion Mini Shell 1.0