ArangoDB-PHP-Core API Documentation
  • Namespace
  • Class
  • Deprecated

Namespaces

  • frankmayer
    • ArangoDbPhpCore
      • Api
        • Rest
      • Config
      • Connectors
      • Plugins
      • Protocols
        • Http
      • TraitRepository

Classes

  • frankmayer\ArangoDbPhpCore\Api\Rest\Api
  • frankmayer\ArangoDbPhpCore\Api\Rest\Async
  • frankmayer\ArangoDbPhpCore\Api\Rest\Batch
  • frankmayer\ArangoDbPhpCore\Api\Rest\Collection
  • frankmayer\ArangoDbPhpCore\Api\Rest\Database
  • frankmayer\ArangoDbPhpCore\Api\Rest\Document
  • frankmayer\ArangoDbPhpCore\Api\Rest\DocumentBase
  • frankmayer\ArangoDbPhpCore\Api\Rest\Edge
  • frankmayer\ArangoDbPhpCore\Autoloader
  • frankmayer\ArangoDbPhpCore\Client
  • frankmayer\ArangoDbPhpCore\ClientOptions
  • frankmayer\ArangoDbPhpCore\Config\ConnectionOptions
  • frankmayer\ArangoDbPhpCore\Config\DefaultValues
  • frankmayer\ArangoDbPhpCore\Config\Endpoint
  • frankmayer\ArangoDbPhpCore\Config\UpdatePolicy
  • frankmayer\ArangoDbPhpCore\Connectors\AbstractHttpConnector
  • frankmayer\ArangoDbPhpCore\Plugins\Plugin
  • frankmayer\ArangoDbPhpCore\Plugins\PluginManager
  • frankmayer\ArangoDbPhpCore\Plugins\TestPlugin
  • frankmayer\ArangoDbPhpCore\Plugins\TracerPlugin
  • frankmayer\ArangoDbPhpCore\Protocols\Http\AbstractHttpRequest
  • frankmayer\ArangoDbPhpCore\Protocols\Http\HttpRequest
  • frankmayer\ArangoDbPhpCore\Protocols\Http\HttpResponse

Interfaces

  • frankmayer\ArangoDbPhpCore\Api\ApiInterface
  • frankmayer\ArangoDbPhpCore\Api\RestApiInterface
  • frankmayer\ArangoDbPhpCore\ClientInterface
  • frankmayer\ArangoDbPhpCore\ConnectorInterface
  • frankmayer\ArangoDbPhpCore\Plugins\PluginInterface
  • frankmayer\ArangoDbPhpCore\Protocols\Http\HttpConnectorInterface
  • frankmayer\ArangoDbPhpCore\Protocols\Http\HttpRequestInterface
  • frankmayer\ArangoDbPhpCore\Protocols\Http\HttpResponseInterface
  • frankmayer\ArangoDbPhpCore\Protocols\RequestInterface
  • frankmayer\ArangoDbPhpCore\Protocols\ResponseInterface

Traits

  • frankmayer\ArangoDbPhpCore\Api\Rest\DocumentTrait
  • frankmayer\ArangoDbPhpCore\Api\Rest\EdgeTrait
  • frankmayer\ArangoDbPhpCore\TraitRepository\ClientLogger

Exceptions

  • frankmayer\ArangoDbPhpCore\ClientException
  • frankmayer\ArangoDbPhpCore\ConnectionException
  • frankmayer\ArangoDbPhpCore\Exception
  • frankmayer\ArangoDbPhpCore\ServerException
  1 <?php
  2 
  3 /**
  4  * ArangoDB PHP Core Client: Plugin Manager Class
  5  *
  6  * @author    Frank Mayer
  7  * @copyright Copyright 2013-2015, FRANKMAYER.NET, Athens, Greece
  8  */
  9 
 10 namespace frankmayer\ArangoDbPhpCore\Plugins;
 11 
 12 use frankmayer\ArangoDbPhpCore\Client;
 13 use frankmayer\ArangoDbPhpCore\ClientException;
 14 
 15 
 16 /**
 17  * Class PluginManager
 18  *
 19  * @package frankmayer\ArangoDbPhpCore\Plugins
 20  */
 21 class PluginManager
 22 {
 23     /**
 24      * @var array $pluginStorage The Storgate Array for the plugin instances. The array is already in the correct order.
 25      */
 26     public $pluginStorage;
 27     /**
 28      * @var Client $client The instance of the client, for which this plugin-manager is doing its job.
 29      */
 30     public $client;
 31     /**
 32      * @var array $options Options passed to the plugin manager.
 33      */
 34     public $options;
 35 
 36 
 37     /**
 38      * @param       $client
 39      * @param array $plugins
 40      * @param array $options
 41      */
 42     public function __construct($client, $plugins = [], $options = ['notificationsEnabled' => true])
 43     {
 44         $options['notificationsEnabled'] = true;
 45 
 46         $this->client        = $client;
 47         $this->pluginStorage = [];
 48         $this->options       = $options;
 49         $this->setPluginsFromPluginArray($plugins);
 50     }
 51 
 52 
 53     /**
 54      * @param null $plugins
 55      *
 56      * @return bool
 57      * @throws \frankmayer\ArangoDbPhpCore\ClientException
 58      */
 59     public function setPluginsFromPluginArray($plugins = null)
 60     {
 61         if (is_array($plugins) && count($plugins) > 0) {
 62             foreach ($plugins as $key => $plugin) {
 63                 if (is_subclass_of($plugin, 'frankmayer\ArangoDbPhpCore\Plugins\Plugin')) {
 64                     $this->pluginStorage[$key]['plugin']   = $plugin;
 65                     $this->pluginStorage[$key]['priority'] = $plugin->priority;
 66                 } else {
 67                     throw new ClientException('Could not initialize plugin. Is not a subclass of frankmayer\ArangoDbPhpCore\Plugins\PluginPlugin');
 68                 }
 69             }
 70         }
 71         uksort($this->pluginStorage, [$this, 'comparePluginPriorities']);
 72 
 73         return true;
 74     }
 75 
 76 
 77     /**
 78      * @param       $eventName
 79      * @param array $eventData
 80      */
 81     public function notifyPlugins($eventName, $eventData = [])
 82     {
 83         if ($this->options['notificationsEnabled'] === true) {
 84             if (count($this->pluginStorage) > 0) {
 85                 foreach ($this->pluginStorage as $key => $priority) {
 86                     $plugin = $this->pluginStorage[$key]['plugin'];
 87                     /** @var $plugin Plugin */
 88                     $plugin->notify($eventName, $this->client, $eventData);
 89                 }
 90             }
 91         }
 92     }
 93 
 94 
 95     /**
 96      * @param $a
 97      * @param $b
 98      *
 99      * @return int
100      */
101     protected function comparePluginPriorities($a, $b)
102     {
103         if ($this->pluginStorage[$a]['priority'] === $this->pluginStorage[$b]['priority']) {
104             return 0;
105         }
106 
107         return ($this->pluginStorage[$a]['priority'] > $this->pluginStorage[$b]['priority']) ? -1 : 1;
108     }
109 
110     /**
111      * @param $instanceName
112      */
113     public function removePluginInstance($instanceName)
114     {
115         unset ($this->pluginStorage[$instanceName]);
116 
117         return;
118     }
119 }
ArangoDB-PHP-Core API Documentation API documentation generated by ApiGen