You are here

private function crumbs_InjectedAPI_hookCrumbsPlugins::addPluginByType in Crumbs, the Breadcrumbs suite 7.2

Parameters

crumbs_MonoPlugin|crumbs_PluginInterface|null $plugin:

string|null $key:

string|null $route:

bool $is_multi: TRUE for a multi plugin.

Throws

Exception

4 calls to crumbs_InjectedAPI_hookCrumbsPlugins::addPluginByType()
crumbs_InjectedAPI_hookCrumbsPlugins::monoPlugin in lib/InjectedAPI/hookCrumbsPlugins.php
Register a "Mono" plugin. That is, a plugin that defines exactly one rule.
crumbs_InjectedAPI_hookCrumbsPlugins::multiPlugin in lib/InjectedAPI/hookCrumbsPlugins.php
Register a "Multi" plugin. That is, a plugin that defines more than one rule.
crumbs_InjectedAPI_hookCrumbsPlugins::routeMonoPlugin in lib/InjectedAPI/hookCrumbsPlugins.php
Register a "Mono" plugin that is restricted to a specific route.
crumbs_InjectedAPI_hookCrumbsPlugins::routeMultiPlugin in lib/InjectedAPI/hookCrumbsPlugins.php

File

lib/InjectedAPI/hookCrumbsPlugins.php, line 232

Class

crumbs_InjectedAPI_hookCrumbsPlugins
API object to be used as an argument for hook_crumbs_plugins() This is a sandbox class, currently not used..

Code

private function addPluginByType(crumbs_PluginInterface $plugin = NULL, $key = NULL, $route = NULL, $is_multi) {
  $plugin_key = isset($key) ? $this->module . '.' . $key : $this->module;
  if (!isset($plugin)) {
    $class = $is_multi ? $this->module . '_CrumbsMultiPlugin' : $this->module . '_CrumbsMonoPlugin';
    $class .= isset($key) ? '_' . $key : '';
    if (!class_exists($class)) {
      throw new \Exception("Plugin class {$class} does not exist.");
    }
    $plugin = new $class();
  }
  else {
    $class = get_class($plugin);
  }
  if ($is_multi) {
    if (!$plugin instanceof crumbs_MultiPlugin) {
      throw new Exception("{$class} must implement class_MultiPlugin.");
    }
  }
  else {
    if (!$plugin instanceof crumbs_MonoPlugin) {
      throw new Exception("{$class} must implement class_MonoPlugin.");
    }
  }
  $this
    ->addPlugin($plugin, $plugin_key, $route);
}