/**
  * Load plugin class with dependencies first
  *
  * @param AJXP_Plugin $plugin
  * @param array $pluginsPool
  */
 private function recursiveLoadPlugin($plugin, $pluginsPool)
 {
     if ($plugin->loadingState != "") {
         return;
     }
     $dependencies = $plugin->getDependencies();
     $plugin->loadingState = "lock";
     foreach ($dependencies as $dependencyId) {
         if (isset($pluginsPool[$dependencyId])) {
             $this->recursiveLoadPlugin($pluginsPool[$dependencyId], $pluginsPool);
         } else {
             if (strpos($dependencyId, "+") !== false) {
                 foreach (array_keys($pluginsPool) as $pId) {
                     if (strpos($pId, str_replace("+", "", $dependencyId)) === 0) {
                         $this->recursiveLoadPlugin($pluginsPool[$pId], $pluginsPool);
                     }
                 }
             }
         }
     }
     $plugType = $plugin->getType();
     if (!isset($this->registry[$plugType])) {
         $this->registry[$plugType] = array();
     }
     $options = $this->confStorage->loadPluginConfig($plugType, $plugin->getName());
     if ($plugin->isEnabled() || isset($options["AJXP_PLUGIN_ENABLED"]) && $options["AJXP_PLUGIN_ENABLED"] === true) {
         $plugin = $this->instanciatePluginClass($plugin);
     }
     $plugin->loadConfigs($options);
     $this->registry[$plugType][$plugin->getName()] = $plugin;
     $plugin->loadingState = "loaded";
 }