From 0def510a11d016ea4ec01f2974925ab526b38b26 Mon Sep 17 00:00:00 2001 From: Thibault Dockx <thibault.dockx@fusiondirectory.org> Date: Thu, 9 Feb 2023 11:23:29 +0000 Subject: [PATCH] :sparkles: Feat(PluginsManager) - Adds to core. Adds to core plugins manager developped by Gallak. Comments and schema numbering added. --- contrib/openldap/pluginsmanager-fd.schema | 165 ++++++++++++++++++ .../addons/dashboard/class_pluginsManager.inc | 88 ++++++++++ plugins/addons/dashboard/plugins_list.tpl | 8 + 3 files changed, 261 insertions(+) create mode 100644 contrib/openldap/pluginsmanager-fd.schema create mode 100644 plugins/addons/dashboard/class_pluginsManager.inc create mode 100644 plugins/addons/dashboard/plugins_list.tpl diff --git a/contrib/openldap/pluginsmanager-fd.schema b/contrib/openldap/pluginsmanager-fd.schema new file mode 100644 index 000000000..b534f73fb --- /dev/null +++ b/contrib/openldap/pluginsmanager-fd.schema @@ -0,0 +1,165 @@ +# pluginsmanager-fd.schema +# Needed by Fusion Directory for managing plugins + +# Attributes +attributetype ( 1.3.6.1.4.1.38414.96.1.1 NAME 'fdPluginInfoAuthors' + DESC 'FusionDirectory - Plugin authors attribute' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +# Attributes +attributetype ( 1.3.6.1.4.1.38414.96.1.2 NAME 'fdPluginInfoVersion' + DESC 'FusionDirectory - Plugin Version attribute' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +# Attributes +attributetype ( 1.3.6.1.4.1.38414.96.1.3 NAME 'fdPluginSupportHomeUrl' + DESC 'FusionDirectory - Plugin Support page url attribute' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +# Attributes +attributetype ( 1.3.6.1.4.1.38414.96.1.4 NAME 'fdPluginSupportTicketUrl' + DESC 'FusionDirectory - Plugin Suuport ticket url attribute' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +# Attributes +attributetype ( 1.3.6.1.4.1.38414.96.1.5 NAME 'fdPluginSupportDiscussionUrl' + DESC 'FusionDirectory - Pluging discussion url attribute' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +# Attributes +attributetype ( 1.3.6.1.4.1.38414.96.1.6 NAME 'fdPluginSupportSchemaUrl' + DESC 'FusionDirectory - Plugin schema url attribute needed if necessary' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +# Attributes +attributetype ( 1.3.6.1.4.1.38414.96.1.7 NAME 'fdPluginReqFdVersion' + DESC 'FusionDirectory - Plugin Fusiondirectory Version requirement attribute' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +# Attributes +attributetype ( 1.3.6.1.4.1.38414.96.1.8 NAME 'fdPluginReqPhpVersion' + DESC 'FusionDirectory - Plugin PHP Version requirement attribute' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +# Attributes +attributetype ( 1.3.6.1.4.1.38414.96.1.9 NAME 'fdPluginReqPlugin' + DESC 'FusionDirectory - Plugin Home Plugin list dependancy Attribute' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +# Attributes +attributetype ( 1.3.6.1.4.1.38414.96.1.10 NAME 'fdPluginContentPhpClass' + DESC 'FusionDirectory - Plugin Manager : list on php class provided' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +# Attributes +attributetype ( 1.3.6.1.4.1.38414.96.1.11 NAME 'fdPluginContentLdapObject' + DESC 'FusionDirectory - Plugin Manager : list on Ldap Object needed' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +# Attributes +attributetype ( 1.3.6.1.4.1.38414.96.1.12 NAME 'fdPluginContentLdapAttributes' + DESC 'FusionDirectory - Plugin Manager : list on Ldap attributes needed' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +# Attributes +attributetype ( 1.3.6.1.4.1.38414.96.1.13 NAME 'fdPluginContentFileList' + DESC 'FusionDirectory - Plugin Manager : list of file provided' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +# Attributes +attributetype ( 1.3.6.1.4.1.38414.96.1.14 NAME 'fdPluginInfoStatus' + DESC 'FusionDirectory - Plugin Manager : status of plugin : Dev / stable / dontuse ' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +# Attributes +attributetype ( 1.3.6.1.4.1.38414.96.1.15 NAME 'fdPluginSupportDownloadUrl' + DESC 'FusionDirectory - Plugin direct download url ' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +# Attributes +attributetype ( 1.3.6.1.4.1.38414.96.1.16 NAME 'fdPluginInfoTags' + DESC 'FusionDirectory - Plugin Tag for identiy plugins goals' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +# Attributes +attributetype ( 1.3.6.1.4.1.38414.96.1.17 NAME 'fdPluginInfoLogoUrl' + DESC 'FusionDirectory - Plugin Logo url ' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +# Attributes +attributetype ( 1.3.6.1.4.1.38414.96.1.18 NAME 'fdPluginInfoScreenshotUrl' + DESC 'FusionDirectory - Plugin Screenshot Url ' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +# Attributes +attributetype ( 1.3.6.1.4.1.38414.96.1.19 NAME 'fdPluginInfoLicence' + DESC 'FusionDirectory - Plugin Licence' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +# Attributes +attributetype ( 1.3.6.1.4.1.38414.96.1.20 NAME 'fdPluginInfoOrigin' + DESC 'FusionDirectory - Plugin Origin' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +# Attributes +attributetype ( 1.3.6.1.4.1.38414.96.1.21 NAME 'fdPluginSupportProvider' + DESC 'FusionDirectory - Plugin Support Provider' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +# Attributes +attributetype ( 1.3.6.1.4.1.38414.96.1.22 NAME 'fdPluginSupportContractUrl' + DESC 'FusionDirectory - Plugin Support Contract url' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + + + +# Object Class +objectclass (1.3.6.1.4.1.38414.96.2.1 NAME 'fdPlugin' + DESC 'FusionDirectory - Plugins Manager ObjectClass' + MUST ( cn $ description $ fdPluginInfoAuthors $ fdPluginInfoVersion $ fdPluginInfoStatus $ fdPluginInfoLicence $ fdPluginInfoOrigin $ fdPluginSupportDownloadUrl $ fdPluginSupportHomeUrl $ fdPluginReqFdVersion $ fdPluginReqPhpVersion $ fdPluginSupportProvider ) + MAY ( fdPluginInfoScreenshotUrl $ fdPluginInfoLogoUrl $ fdPluginInfoTags $ fdPluginSupportTicketUrl $ fdPluginSupportDiscussionUrl $ fdPluginSupportSchemaUrl $ fdPluginReqPlugin $ fdPluginContentPhpClass $ fdPluginContentLdapObject $ fdPluginContentLdapAttributes $ fdPluginContentFileList $ fdPluginSupportContractUrl )) + diff --git a/plugins/addons/dashboard/class_pluginsManager.inc b/plugins/addons/dashboard/class_pluginsManager.inc new file mode 100644 index 000000000..9dd723973 --- /dev/null +++ b/plugins/addons/dashboard/class_pluginsManager.inc @@ -0,0 +1,88 @@ +<?php +/* + This code is part of FusionDirectory (http://www.fusiondirectory.org) + Copyright (C) 2021 Antoine Gallavardin + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +class pluginsManager extends simplePlugin +{ + static function plInfo (): array + { + return [ + 'plShortName' => _('Plugins'), + 'plDescription' => _('Plugins List'), + 'plObjectType' => ['dashboard'], + + 'plProvidedAcls' => [] + ]; + } + + static function getAttributesInfo (): array + { + return [ + 'plugins' => [ + //'class' => ['fullwidth'], + 'name' => _('Plugins'), + 'attrs' => [new FakeAttribute('pluginsList')], + 'template' => get_template_path('plugins_list.tpl', TRUE, dirname(__FILE__)), + ], + ]; + } + + function __construct ($dn = NULL, $object = NULL, $parent = NULL, $mainTab = FALSE) + { + parent::__construct($dn, $object, $parent, $mainTab); + // pluginsList refers to the FakeAttribute. + // The return of drawList in plugisns_list requires an attribute definition. + $this->pluginsList = $this->plugins_list(); + } + + + function plugins_list () + { + global $config; + + $ldap = $config->get_ldap_link(); + $ldap->cd($config->current['BASE']); + $ldap->search('(objectClass=fdPlugin)', ['cn','description','fdPluginInfoVersion','fdPluginInfoAuthors','fdPluginInfoStatus','fdPluginInfoOrigin','fdPluginSupportProvider','fdPluginSupportHomeUrl','fdPluginReqPlugin']); + + $id = 'pluginsStats'; + $div = new divSelectBox('rows'.$id); + $smarty = get_smarty(); + $div->setHeight(300); + $div->setHeaders([_('Nom'), _('Description'), _('Version'),_('Authors'),_('Status'),_('Origin'),_('Provider'),_('Dependencies'),_('Link')]); + + while ($plugin = $ldap->fetch()) { + $fields = [ + ['string' => $plugin['cn'][0]], + ['string' => $plugin['description'][0]], + ['string' => $plugin['fdPluginInfoVersion'][0]], + ['string' => $plugin['fdPluginInfoAuthors'][0]], + ['string' => $plugin['fdPluginInfoStatus'][0]], + ['string' => $plugin['fdPluginInfoOrigin'][0]], + ['string' => $plugin['fdPluginSupportProvider'][0]], + ['string' => $plugin['fdPluginReqPlugin'][0]], + ['string' => $plugin['fdPluginSupportHomeUrl'][0]], + + ]; + + $div->addEntry($fields); + } + + return $div->drawList(); + } +} diff --git a/plugins/addons/dashboard/plugins_list.tpl b/plugins/addons/dashboard/plugins_list.tpl new file mode 100644 index 000000000..7ea149949 --- /dev/null +++ b/plugins/addons/dashboard/plugins_list.tpl @@ -0,0 +1,8 @@ +<div id="{$sectionId}" class="plugin-section fullwidth""> + <span class="legend"> + {if $sectionIcon}<img src="{$sectionIcon|escape}" alt=""/>{/if}{$section|escape} + </span> + <div> + {$attributes.pluginsList} + </div> +</div> -- GitLab