pluginManager = PluginManager::instance(); } protected function loadExtensions() { /* * Load module items */ foreach ($this->callbacks as $callback) { $callback($this); } /* * Load plugin items */ $plugins = $this->pluginManager->getPlugins(); foreach ($plugins as $id => $plugin) { $items = $plugin->registerMarkupTags(); if (!is_array($items)) continue; foreach ($items as $type => $definitions) { if (!is_array($definitions)) continue; $this->registerExtensions($type, $definitions); } } } /** * Registers a callback function that defines simple Twig extensions. * The callback function should register menu items by calling the manager's * registerFunctions(), registerFilters(), registerTokenParsers() function. * The manager instance is passed to the callback function as an argument. * Usage: *
* MarkupManager::registerCallback(function($manager){
* $manager->registerFilters([...]);
* $manager->registerFunctions([...]);
* $manager->registerTokenParsers([...]);
* });
*
* @param callable $callback A callable function.
*/
public function registerCallback(callable $callback)
{
$this->callbacks[] = $callback;
}
/**
* Registers the CMS Twig extension items.
* The argument is an array of the extension definitions. The array keys represent the
* function/filter name, specific for the plugin/module. Each element in the
* array should be an associative array.
* @param string $type The extension type: filters, functions, tokens
* @param array $definitions An array of the extension definitions.
*/
public function registerExtensions($type, array $definitions)
{
if (is_null($this->items))
$this->items = [];
if (!array_key_exists($type, $this->items))
$this->items[$type] = [];
foreach ($definitions as $name => $definition) {
switch ($type) {
case self::EXTENSION_TOKEN_PARSER:
$this->items[$type][] = $definition;
break;
case self::EXTENSION_FILTER:
case self::EXTENSION_FUNCTION:
$this->items[$type][$name] = $definition;
break;
}
}
}
/**
* Registers a CMS Twig Filter
* @param array $definitions An array of the extension definitions.
*/
public function registerFilters(array $definitions)
{
$this->registerExtensions(self::EXTENSION_FILTER, $definitions);
}
/**
* Registers a CMS Twig Function
* @param array $definitions An array of the extension definitions.
*/
public function registerFunctions(array $definitions)
{
$this->registerExtensions(self::EXTENSION_FUNCTION, $definitions);
}
/**
* Registers a CMS Twig Token Parser
* @param array $definitions An array of the extension definitions.
*/
public function registerTokenParsers(array $definitions)
{
$this->registerExtensions(self::EXTENSION_TOKEN_PARSER, $definitions);
}
/**
* Returns a list of the registered Twig extensions of a type.
* @param $type string The Twig extension type
* @return array
*/
public function listExtensions($type)
{
if ($this->items === null)
$this->loadExtensions();
if (!isset($this->items[$type]) || !is_array($this->items[$type]))
return [];
return $this->items[$type];
}
/**
* Returns a list of the registered Twig filters.
* @return array
*/
public function listFilters()
{
return $this->listExtensions(self::EXTENSION_FILTER);
}
/**
* Returns a list of the registered Twig functions.
* @return array
*/
public function listFunctions()
{
return $this->listExtensions(self::EXTENSION_FUNCTION);
}
/**
* Returns a list of the registered Twig token parsers.
* @return array
*/
public function listTokenParsers()
{
return $this->listExtensions(self::EXTENSION_TOKEN_PARSER);
}
}