File "dispatcher.php"
Full Path: /home/romayxjt/public_html/wp-content/plugins/vikbooking/libraries/adapter/sms/dispatcher.php
File size: 4 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* @package VikWP - Libraries
* @subpackage adapter.sms
* @author E4J s.r.l.
* @copyright Copyright (C) 2023 E4J s.r.l. All Rights Reserved.
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
* @link https://vikwp.com
*/
// No direct access
defined('ABSPATH') or die('No script kiddies please!');
JLoader::import('adapter.sms.driver');
/**
* Abstract factory used to instantiate different SMS drivers.
* The example below describes how to hook the drivers to this dispatcher.
*
* add_action('load_sms_driver_myplugin', function(&$drivers, $driver)
* {
* if ($driver == 'clickatell')
* {
* JLoader::import('driver.clickatell', MYPLUGIN_BASE);
* $drivers[] = 'MyPluginSmsClickatell';
* }
* }, 10, 2);
*
* It is mandatory to indicate also the number of accepted arguments.
*
* @since 10.1.30
*/
class JSmsDispatcher
{
/**
* A list containing all the driver instances.
*
* @var JSmsDriver[]
*/
protected static $instances = array();
/**
* Provides a new instance for the specified arguments.
*
* @param string $plugin The name of the plugin that requested the driver.
* @param string $driver The name of the driver that should be instantiated.
* @param mixed $order The details of the order that has to be notified.
* @param mixed $config The driver configuration array or a JSON string.
*
* @return JSmsDriver
*
* @throws RuntimeException In case the requested driver doesn't exist.
*/
public static function getInstance($plugin, $driver, $order = array(), $config = array())
{
if (substr($driver, -4) == '.php')
{
// make sure the driver doesn't contain PHP extension
$driver = substr($driver, 0, -4);
}
// create unique identifier
$sign = $plugin . '.' . $driver;
// check if the driver was already instantiated
if (!isset(static::$instances[$sign]))
{
$classname = null;
$drivers = array();
/**
* Trigger action to obtain a list of classnames of the sms driver.
* The action should autoload the file that contains the classname.
* In case the sms driver should be loaded, the classname MUST be
* pushed within the &$drivers array.
* Fires before the instantiation of the returned classname.
*
* @param array A reference to the list of available drivers.
* @param string The name of the driver to load.
*
* @since 10.1.30
*/
do_action_ref_array('load_sms_driver_' . $plugin, array(&$drivers, $driver));
// use the last driver in the list
$classname = array_pop($drivers);
if (!$classname || !class_exists($classname))
{
// driver not found, raise an exception
throw new RuntimeException('The SMS driver [' . $driver . '] for [' . $plugin . '] does not exist.', 404);
}
// instantiate the driver
$driver = new $classname($plugin, $order, $config);
if (!$driver instanceof JSmsDriver)
{
// the class is not an instance of JSmsDriver, raise an exception
throw new RuntimeException('The SMS driver [' . $classname . '] is not a valid instance.', 500);
}
// cache the driver
static::$instances[$sign] = $driver;
}
return static::$instances[$sign];
}
/**
* Returns a list of all the drivers supported by the specified plugin.
* The SMS drivers will be returned in ascending order.
*
* @param string $plugin The name of the plugin.
*
* @return array A list of paths.
*/
public static function getSupportedDrivers($plugin)
{
// init drivers array
$drivers = array();
/**
* Hook used to filter the list of all the supported drivers.
* Every plugin attached to this filter will be able to push one
* or more drivers within the $drivers array.
*
* @param array An array containing the list of the supported drivers.
*
* @since 10.1.30
*/
$drivers = apply_filters('get_supported_sms_drivers_' . $plugin, $drivers);
// remove duplicated records
$drivers = array_unique($drivers);
// sort by ascending driver name
sort($drivers);
return $drivers;
}
}