Add FusionPBX events class.
This commit is contained in:
parent
c506c56efc
commit
595745ce30
|
|
@ -0,0 +1,164 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* events class provides an event system
|
||||
*
|
||||
* @method void load_plugins
|
||||
* @method dynamic __call
|
||||
*/
|
||||
class events {
|
||||
|
||||
/**
|
||||
* @var obj $db Database connnection object
|
||||
* @var array $plugins Store available plugin classes
|
||||
* @var array $methods store methods found on each plugin
|
||||
* @var array $headers headers provide information about the events
|
||||
* @var array $required array of items that are required
|
||||
* @var string $content optional additional data about the event
|
||||
*/
|
||||
public $db;
|
||||
private $plugins = array();
|
||||
private $methods = array();
|
||||
public $headers = array();
|
||||
public $required = array();
|
||||
private $content;
|
||||
|
||||
/**
|
||||
* Called when the object is created
|
||||
* Creates the database connection object
|
||||
*/
|
||||
public function __construct() {
|
||||
//create the database connection
|
||||
include "root.php";
|
||||
require_once "resources/classes/database.php";
|
||||
$database = new database;
|
||||
$database->connect();
|
||||
$this->db = $database->db;
|
||||
return $this->db = $database->db;
|
||||
|
||||
//load the plugins
|
||||
$this->load_plugins();
|
||||
|
||||
//add values to the required array
|
||||
$this->required['headers'][] = "content-type";
|
||||
$this->required['headers'][] = "date";
|
||||
$this->required['headers'][] = "host";
|
||||
$this->required['headers'][] = "status";
|
||||
$this->required['headers'][] = "app_name";
|
||||
$this->required['headers'][] = "app_uuid";
|
||||
$this->required['headers'][] = "domain_uuid";
|
||||
$this->required['headers'][] = "user_uuid";
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when there are no references to a particular object
|
||||
* unset the variables used in the class
|
||||
*/
|
||||
public function __destruct() {
|
||||
foreach ($this as $key => $value) {
|
||||
unset($this->$key);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This function will load all available plugins into the memory
|
||||
* Rules:
|
||||
* plugins are stored in ./plugins
|
||||
* plugin class is named plugin_<name>
|
||||
* php file is named <name>.php
|
||||
*/
|
||||
private function load_plugins() {
|
||||
$base = realpath(dirname(__FILE__)) . "/plugins";
|
||||
$this->plugins = glob($base . "/*.php");
|
||||
foreach($this->plugins as $plugin) {
|
||||
//include the plugin php file and define the class name
|
||||
include_once $plugin;
|
||||
$plugin_name = basename($plugin, ".php");
|
||||
$class_name = "plugin_".$plugin_name;
|
||||
|
||||
//create the plugin object so that it can be stored and called later
|
||||
$obj = new $class_name();
|
||||
$this->plugins[$plugin_name] = $obj;
|
||||
|
||||
//store all methods found in the plugin
|
||||
foreach (get_class_methods($obj) as $method ) {
|
||||
$this->methods[$method] = $plugin_name;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the plugin method
|
||||
* @param strint $method
|
||||
* @param string $args
|
||||
*
|
||||
*/
|
||||
public function __call($method, $args) {
|
||||
if (! key_exists($method, $this->methods)) {
|
||||
throw new Exception ("Call to undefined method: " . $method);
|
||||
}
|
||||
array_unshift($args, $this);
|
||||
try {
|
||||
$obj = call_user_func_array(array($this->plugins[$this->methods[$method]], $method), $args);
|
||||
}
|
||||
catch (Exception $e) {
|
||||
echo 'Exception: ', $e->getMessage(), "\n";
|
||||
}
|
||||
return $obj;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a new event header
|
||||
* @param string $category
|
||||
* @param string $name
|
||||
* @param string $value
|
||||
*/
|
||||
public function set_header($category, $name, $value) {
|
||||
$this->headers[$category][$name] = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* check for required headers
|
||||
* @param string $category
|
||||
* @return bolean $value
|
||||
*/
|
||||
public function check_required($category) {
|
||||
foreach ($this->required['headers'] as &$header) {
|
||||
if ($category == $header) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send the event
|
||||
*/
|
||||
public function send() {
|
||||
//check for required headers are present return false if any are missing
|
||||
foreach ($this->headers as &$header) {
|
||||
if (!$this->check_required($header)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//$this->content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Serialize the event headers
|
||||
* @param string $type values: array, json
|
||||
*/
|
||||
public function serialize($type) {
|
||||
$array = $this->headers;
|
||||
if ($type == "array") {
|
||||
return $array;
|
||||
} elseif ($type == "json") {
|
||||
return json_encode($array);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
Loading…
Reference in New Issue