diff --git a/CHANGELOG.md b/CHANGELOG.md index 289f953a..76ee1c09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ 1. [](#improved) * Improved delete button UI [#1769](https://github.com/getgrav/grav-plugin-admin/issues/1769) + * Ability to configure display of 3rd party dashboard widgets [#1766](https://github.com/getgrav/grav-plugin-admin/issues/1766) 1. [](#bugfix) * Fixed administrator user creation when `Flex Users` is enabled * Fixed minor button alignment in FF [#1760](https://github.com/getgrav/grav-plugin-admin/issues/1760) diff --git a/admin.php b/admin.php index c15ba240..b04f6927 100644 --- a/admin.php +++ b/admin.php @@ -376,11 +376,27 @@ class AdminPlugin extends Plugin */ public function onAdminDashboard() { - $this->grav['twig']->plugins_hooked_dashboard_widgets_top[] = ['template' => 'dashboard-maintenance']; - $this->grav['twig']->plugins_hooked_dashboard_widgets_top[] = ['template' => 'dashboard-statistics']; - $this->grav['twig']->plugins_hooked_dashboard_widgets_top[] = ['template' => 'dashboard-notifications']; - $this->grav['twig']->plugins_hooked_dashboard_widgets_top[] = ['template' => 'dashboard-feed']; - $this->grav['twig']->plugins_hooked_dashboard_widgets_main[] = ['template' => 'dashboard-pages']; + $lang = $this->grav['language']; + $this->grav['twig']->plugins_hooked_dashboard_widgets_top[] = [ + 'name' => $lang->translate('PLUGIN_ADMIN.MAINTENANCE'), + 'template' => 'dashboard-maintenance', + ]; + $this->grav['twig']->plugins_hooked_dashboard_widgets_top[] = [ + 'name' => $lang->translate('PLUGIN_ADMIN.STATISTICS'), + 'template' => 'dashboard-statistics', + ]; + $this->grav['twig']->plugins_hooked_dashboard_widgets_top[] = [ + 'name' => $lang->translate('PLUGIN_ADMIN.NOTIFICATIONS'), + 'template' => 'dashboard-notifications', + ]; + $this->grav['twig']->plugins_hooked_dashboard_widgets_top[] = [ + 'name' => $lang->translate('PLUGIN_ADMIN.NEWS_FEED'), + 'template' => 'dashboard-feed', + ]; + $this->grav['twig']->plugins_hooked_dashboard_widgets_main[] = [ + 'name' => $lang->translate('PLUGIN_ADMIN.LATEST_PAGE_UPDATES'), + 'template' => 'dashboard-pages', + ]; } @@ -393,12 +409,13 @@ class AdminPlugin extends Plugin */ public function onAdminTools(Event $event) { + $lang = $this->grav['language']; $event['tools'] = array_merge($event['tools'], [ - 'backups' => [['admin.maintenance', 'admin.super'], $this->grav['language']->translate('PLUGIN_ADMIN.BACKUPS')], - 'scheduler' => [['admin.super'], $this->grav['language']->translate('PLUGIN_ADMIN.SCHEDULER')], - 'logs' => [['admin.super'], $this->grav['language']->translate('PLUGIN_ADMIN.LOGS')], - 'reports' => [['admin.super'], $this->grav['language']->translate('PLUGIN_ADMIN.REPORTS')], - 'direct-install' => [['admin.super'], $this->grav['language']->translate('PLUGIN_ADMIN.DIRECT_INSTALL')], + 'backups' => [['admin.maintenance', 'admin.super'], $lang->translate('PLUGIN_ADMIN.BACKUPS')], + 'scheduler' => [['admin.super'], $lang->translate('PLUGIN_ADMIN.SCHEDULER')], + 'logs' => [['admin.super'], $lang->translate('PLUGIN_ADMIN.LOGS')], + 'reports' => [['admin.super'], $lang->translate('PLUGIN_ADMIN.REPORTS')], + 'direct-install' => [['admin.super'], $lang->translate('PLUGIN_ADMIN.DIRECT_INSTALL')], ]); return $event; @@ -613,13 +630,12 @@ class AdminPlugin extends Plugin return $bc <=> $ac; }); + // Gather Plugin-hooked dashboard items + $this->grav->fireEvent('onAdminDashboard'); + switch ($this->template) { case 'dashboard': $twig->twig_vars['popularity'] = $this->popularity; - - // Gather Plugin-hooked dashboard items - $this->grav->fireEvent('onAdminDashboard'); - break; } diff --git a/admin.yaml b/admin.yaml index 56b39778..0db92caf 100644 --- a/admin.yaml +++ b/admin.yaml @@ -13,7 +13,7 @@ sidebar: size: auto dashboard: days_of_stats: 7 -widgets: +widgets_display: dashboard-maintenance: true dashboard-statistics: true dashboard-notifications: true diff --git a/blueprints.yaml b/blueprints.yaml index 5b8e5ae0..67a0114f 100644 --- a/blueprints.yaml +++ b/blueprints.yaml @@ -361,65 +361,11 @@ form: title: Dashboard underline: true - widgets.dashboard-maintenance: - type: toggle - label: Maintenance Widget - highlight: 1 - default: 1 - options: - 1: PLUGIN_ADMIN.ENABLED - 0: PLUGIN_ADMIN.DISABLED + widgets_display: + type: widgets + label: Widget Display Status validate: - type: bool - help: Display dashboard maintenance widget - - widgets.dashboard-statistics: - type: toggle - label: Statistics Widget - highlight: 1 - default: 1 - options: - 1: PLUGIN_ADMIN.ENABLED - 0: PLUGIN_ADMIN.DISABLED - validate: - type: bool - help: Display dashboard statistics widget - - widgets.dashboard-notifications: - type: toggle - label: Notifications Feed Widget - highlight: 1 - default: 1 - options: - 1: PLUGIN_ADMIN.ENABLED - 0: PLUGIN_ADMIN.DISABLED - validate: - type: bool - help: Display dashboard notifications feed widget - - widgets.dashboard-feed: - type: toggle - label: News Feed Widget - highlight: 1 - default: 1 - options: - 1: PLUGIN_ADMIN.ENABLED - 0: PLUGIN_ADMIN.DISABLED - validate: - type: bool - help: Display dashboard news feed widget - - widgets.dashboard-pages: - type: toggle - label: Latest Pages Widget - highlight: 1 - default: 1 - options: - 1: PLUGIN_ADMIN.ENABLED - 0: PLUGIN_ADMIN.DISABLED - validate: - type: bool - help: Display dashboard latest pages widget + type: array Notifications: type: section diff --git a/themes/grav/templates/dashboard.html.twig b/themes/grav/templates/dashboard.html.twig index a797b217..d9990f49 100644 --- a/themes/grav/templates/dashboard.html.twig +++ b/themes/grav/templates/dashboard.html.twig @@ -37,7 +37,7 @@
{% if grav.twig.plugins_hooked_dashboard_widgets_top %} {% for widget in grav.twig.plugins_hooked_dashboard_widgets_top %} - {% if attribute(config.plugins.admin.widgets, widget.template) == true %} + {% if attribute(config.plugins.admin.widgets_display, widget.template)|string in ['1', 'true'] %}
{% include 'partials/' ~ widget.template ~ '.html.twig' %}
@@ -50,7 +50,7 @@ {% block content %} {%- if grav.twig.plugins_hooked_dashboard_widgets_main -%} {%- for widget in grav.twig.plugins_hooked_dashboard_widgets_main -%} - {%- if attribute(config.plugins.admin.widgets, widget.template) == true %} + {% if attribute(config.plugins.admin.widgets_display, widget.template)|string in ['1', 'true'] %} {% include 'partials/' ~ widget.template ~ '.html.twig' %} {% endif -%} {%- endfor -%} @@ -61,7 +61,7 @@
{%- if grav.twig.plugins_hooked_dashboard_widgets_bottom -%} {%- for widget in grav.twig.plugins_hooked_dashboard_widgets_bottom -%} - {%- if attribute(config.plugins.admin.widgets, widget.template) == true %} + {% if attribute(config.plugins.admin.widgets_display, widget.template)|string in ['1', 'true'] %} {% include 'partials/' ~ widget.template ~ '.html.twig' %} {% endif -%} {%- endfor -%} diff --git a/themes/grav/templates/forms/fields/widgets/widgets.html.twig b/themes/grav/templates/forms/fields/widgets/widgets.html.twig new file mode 100644 index 00000000..695035fb --- /dev/null +++ b/themes/grav/templates/forms/fields/widgets/widgets.html.twig @@ -0,0 +1,61 @@ +{#{% extends "forms/field.html.twig" %}#} + +{% import _self as macro %} + +{% macro spanToggle(input, length) %} + {% set space = repeat('  ', (length - input|length) / 2) %} + {{ (space ~ input ~ space)|raw }} +{% endmacro %} + +{% macro outputWidget(widget) %} + +{% endmacro %} + +{% set widgets = grav.twig.plugins_hooked_dashboard_widgets_top|array|merge(grav.twig.plugins_hooked_dashboard_widgets_main|array)|merge(grav.twig.plugins_hooked_dashboard_widgets_bottom|array) %} +{% set widgets_display = grav.config.plugins.admin.widgets_display %} + +{% for widget in widgets %} + {% set widget_name = widget.name|default(widget.template|titleize) %} + {% set widget_id = widget.template %} + {% set widget_value = widgets_display[widget_id]|string in ['1', 'true'] ? 'true' : 'false' %} + {% set name = 'data['~field.name~']['~widget_id~']' %} + +
+
+
+ +
+
+
+ + {% set options = { true: 'PLUGIN_ADMIN.ENABLED', false: 'PLUGIN_ADMIN.DISABLED' } %} + + {% set maxLen = 0 %} + {% for value, text in options %} + {% set translation = grav.twig.twig.filters['tu'] is defined ? text|tu : text|t %} + {% set maxLen = max(translation|length, maxLen) %} + {% endfor %} + + {% for key, text in options %} + {% set id = "toggle_" ~ field.name ~ "." ~ widget_id ~ '.' ~ key %} + {% set translation = (grav.twig.twig.filters['tu'] is defined ? text|tu : text|t)|trim %} + + + + + {% endfor %} +
+
+
+
+{% endfor %}