diff --git a/lib/Alchemy/Phrasea/Plugin/BasePluginMetadata.php b/lib/Alchemy/Phrasea/Plugin/BasePluginMetadata.php index 2bae6225d3..301f717b4d 100644 --- a/lib/Alchemy/Phrasea/Plugin/BasePluginMetadata.php +++ b/lib/Alchemy/Phrasea/Plugin/BasePluginMetadata.php @@ -9,6 +9,8 @@ */ namespace Alchemy\Phrasea\Plugin; +use Assert\Assertion; + class BasePluginMetadata implements PluginMetadataInterface { /** @var string */ @@ -19,6 +21,8 @@ class BasePluginMetadata implements PluginMetadataInterface private $iconUrl; /** @var string */ private $localeTextDomain; + /** @var ConfigurationTabInterface[] */ + private $configurationTabs; /** * @param string $name @@ -65,4 +69,38 @@ class BasePluginMetadata implements PluginMetadataInterface { return $this->localeTextDomain; } + + /** + * @param ConfigurationTabInterface[] $tabs + */ + public function setConfigurationTabs($tabs) + { + Assertion::allIsInstanceOf($tabs, 'Alchemy\Phrasea\Plugin\ConfigurationTabInterface'); + + foreach ($tabs as $name => $tab) { + $this->addConfigurationTab($name, $tab); + } + } + + /** + * @param string $name + * @param ConfigurationTabInterface $tab + */ + public function addConfigurationTab($name, ConfigurationTabInterface $tab) + { + Assertion::regex($name, '/^[a-zA-Z][-_a-zA-Z0-9]*$/'); + if (isset($this->configurationTabs[$name])) { + throw new \LogicException(sprintf( + 'A configuration tab with name "%s" is already defined. Registered tabs: "%s"', + implode('", "', array_keys($this->configurationTabs)) + )); + } + + $this->configurationTabs[$name] = $tab; + } + + public function getConfigurationTabs() + { + return $this->configurationTabs; + } } diff --git a/lib/Alchemy/Phrasea/Plugin/ConfigurationTabInterface.php b/lib/Alchemy/Phrasea/Plugin/ConfigurationTabInterface.php new file mode 100644 index 0000000000..eab5a2454b --- /dev/null +++ b/lib/Alchemy/Phrasea/Plugin/ConfigurationTabInterface.php @@ -0,0 +1,27 @@ +{% trans 'plugin.name' plugin.localeTextDomain %} - {{ block('about') }} -{% endblock %} - - -{% block about %} -

{% trans 'admin::plugins: about' %}

- - +
+ + + + +
+ {% for divId, configurationTab in plugin.configurationTabs %} +
+ {% endfor %} +
+
    +
  • {{ 'admin::plugins: name'|trans }}{{ plugin.name }}
  • +
  • {{ 'admin::plugins: version'|trans }}{{ plugin.version }}
  • +
+
+
+
+ + {% endblock %}