diff --git a/_config/config.yml b/_config/config.yml index a69a26a..2c5c5b8 100755 --- a/_config/config.yml +++ b/_config/config.yml @@ -12,6 +12,7 @@ SilverStripe\Security\Member: WeDevelop\AdminToolbar\AdminToolbar: disabled_menus: + disabled_menu_items: disabled_buttons: disabled_toggles: @@ -21,6 +22,7 @@ Only: --- WeDevelop\AdminToolbar\AdminToolbar: disabled_menus: + disabled_menu_items: disabled_buttons: - 'Queries' disabled_toggles: diff --git a/src/AdminToolbar.php b/src/AdminToolbar.php index c12b3d0..0863812 100755 --- a/src/AdminToolbar.php +++ b/src/AdminToolbar.php @@ -20,16 +20,37 @@ use WeDevelop\AdminToolbar\Models\AdminToolbarMenuInterface; use WeDevelop\AdminToolbar\Models\AdminToolbarToggleInterface; use WeDevelop\AdminToolbar\Providers\AdminToolbarButtonProviderInterface; -use WeDevelop\AdminToolbar\Providers\AdminToolbarMenuProviderInterface; use WeDevelop\AdminToolbar\Providers\AdminToolbarJavascriptProviderInterface; +use WeDevelop\AdminToolbar\Providers\AdminToolbarMenuProviderInterface; use WeDevelop\AdminToolbar\Providers\AdminToolbarStylesheetProviderInterface; use WeDevelop\AdminToolbar\Providers\AdminToolbarToggleProviderInterface; class AdminToolbar extends ViewableData implements PermissionProvider { - /** @config */ + /** + * @config + * @var array + */ private static array $disabled_menus = []; + /** + * @config + * @var array + */ + private static array $disabled_menu_items = []; + + /** + * @config + * @var array + */ + private static array $disabled_buttons = []; + + /** + * @config + * @var array + */ + private static array $disabled_toggles = []; + public function render(): DBHTMLText { Requirements::css('wedevelopnl/silverstripe-admintoolbar:client/dist/main.css'); diff --git a/src/Extensions/MemberExtension.php b/src/Extensions/MemberExtension.php index 1398a9e..c977bd5 100755 --- a/src/Extensions/MemberExtension.php +++ b/src/Extensions/MemberExtension.php @@ -10,8 +10,16 @@ use SilverStripe\Security\Permission; use SilverStripe\Security\Security; +/** + * @property bool $DisableAdminToolbar + * @property bool $AdminToolbarDefaultCollapsed + */ class MemberExtension extends DataExtension { + /** + * @config + * @var array + */ private static array $db = [ 'DisableAdminToolbar' => 'Boolean', 'AdminToolbarDefaultCollapsed' => 'Boolean', diff --git a/src/Menus/CMSMenu/MenuItems/CMSMenuItem.php b/src/Menus/CMSMenu/MenuItems/CMSMenuItem.php index ea6cbda..a5a76a9 100644 --- a/src/Menus/CMSMenu/MenuItems/CMSMenuItem.php +++ b/src/Menus/CMSMenu/MenuItems/CMSMenuItem.php @@ -13,6 +13,11 @@ class CMSMenuItem extends AdminToolbarMenuItem { private ArrayData $menuItem; + public function getName(): string + { + return 'CMSMenuItem'; + } + public function isMenuItemSupported(): bool { return true; diff --git a/src/Menus/ElementalGrid/MenuItems/ElementalGridMenuItem.php b/src/Menus/ElementalGrid/MenuItems/ElementalGridMenuItem.php index 93d6172..5db5f7a 100644 --- a/src/Menus/ElementalGrid/MenuItems/ElementalGridMenuItem.php +++ b/src/Menus/ElementalGrid/MenuItems/ElementalGridMenuItem.php @@ -4,14 +4,18 @@ namespace WeDevelop\AdminToolbar\Menus\ElementalGrid\MenuItems; -use DNADesign\Elemental\Models\BaseElement; use SilverStripe\ORM\FieldType\DBHTMLText; use WeDevelop\AdminToolbar\Menus\ElementalGrid\ElementalGridMenu; use WeDevelop\AdminToolbar\Models\AdminToolbarMenuItem; class ElementalGridMenuItem extends AdminToolbarMenuItem { - private BaseElement $element; + private \DNADesign\Elemental\Models\BaseElement $element; + + public function getName(): string + { + return 'ElementalGrid'; + } public function isMenuItemSupported(): bool { @@ -28,14 +32,14 @@ public function getOrder(): int return 0; } - public function setElement(BaseElement $element): self + public function setElement(\DNADesign\Elemental\Models\BaseElement $element): self { $this->element = $element; return $this; } - public function getElement(): BaseElement + public function getElement(): \DNADesign\Elemental\Models\BaseElement { return $this->element; } diff --git a/src/Menus/Page/MenuItems/AddToCampaignMenuItem.php b/src/Menus/Page/MenuItems/AddToCampaignMenuItem.php index 231d835..27171c0 100644 --- a/src/Menus/Page/MenuItems/AddToCampaignMenuItem.php +++ b/src/Menus/Page/MenuItems/AddToCampaignMenuItem.php @@ -11,6 +11,11 @@ class AddToCampaignMenuItem extends AdminToolbarMenuItem implements AdminToolbarMenuItemProviderInterface { + public function getName(): string + { + return 'AddToCampaign'; + } + public function getTitle(): string { return "Add to campaign"; diff --git a/src/Menus/Page/MenuItems/ArchiveMenuItem.php b/src/Menus/Page/MenuItems/ArchiveMenuItem.php index e259e9a..1d05ff7 100644 --- a/src/Menus/Page/MenuItems/ArchiveMenuItem.php +++ b/src/Menus/Page/MenuItems/ArchiveMenuItem.php @@ -5,17 +5,22 @@ namespace WeDevelop\AdminToolbar\Menus\Page\MenuItems; use SilverStripe\CMS\Model\SiteTree; +use SilverStripe\Control\Controller; use SilverStripe\ORM\FieldType\DBHTMLText; use SilverStripe\View\ArrayData; use WeDevelop\AdminToolbar\Menus\Page\PageMenu; use WeDevelop\AdminToolbar\Models\AdminToolbarMenuItem; use WeDevelop\AdminToolbar\Providers\AdminToolbarMenuItemProviderInterface; -use SilverStripe\Control\Controller; class ArchiveMenuItem extends AdminToolbarMenuItem implements AdminToolbarMenuItemProviderInterface { public const ACTION = 'archive'; + public function getName(): string + { + return 'ArchivePage'; + } + public function getTitle(): string { return "Archive"; diff --git a/src/Menus/Page/MenuItems/EditMenuItem.php b/src/Menus/Page/MenuItems/EditMenuItem.php index 4843f45..f54d470 100644 --- a/src/Menus/Page/MenuItems/EditMenuItem.php +++ b/src/Menus/Page/MenuItems/EditMenuItem.php @@ -4,15 +4,20 @@ namespace WeDevelop\AdminToolbar\Menus\Page\MenuItems; +use SilverStripe\Control\Controller; use SilverStripe\View\ArrayData; use WeDevelop\AdminToolbar\Menus\Page\PageMenu; use WeDevelop\AdminToolbar\Models\AdminToolbarMenuItem; use WeDevelop\AdminToolbar\Providers\AdminToolbarMenuItemProviderInterface; -use SilverStripe\Control\Controller; use WeDevelop\AdminToolbar\URLTranslator; class EditMenuItem extends AdminToolbarMenuItem implements AdminToolbarMenuItemProviderInterface { + public function getName(): string + { + return 'EditPage'; + } + public function getTitle(): string { return _t('Page.EDIT', 'Edit page'); diff --git a/src/Menus/Page/MenuItems/UnpublishAndArchiveMenuItem.php b/src/Menus/Page/MenuItems/UnpublishAndArchiveMenuItem.php index e5bf7c3..ee3cc08 100644 --- a/src/Menus/Page/MenuItems/UnpublishAndArchiveMenuItem.php +++ b/src/Menus/Page/MenuItems/UnpublishAndArchiveMenuItem.php @@ -5,17 +5,22 @@ namespace WeDevelop\AdminToolbar\Menus\Page\MenuItems; use SilverStripe\CMS\Model\SiteTree; +use SilverStripe\Control\Controller; use SilverStripe\ORM\FieldType\DBHTMLText; use SilverStripe\View\ArrayData; use WeDevelop\AdminToolbar\Menus\Page\PageMenu; use WeDevelop\AdminToolbar\Models\AdminToolbarMenuItem; use WeDevelop\AdminToolbar\Providers\AdminToolbarMenuItemProviderInterface; -use SilverStripe\Control\Controller; class UnpublishAndArchiveMenuItem extends AdminToolbarMenuItem implements AdminToolbarMenuItemProviderInterface { public const ACTION = 'unpublishAndArchive'; + public function getName(): string + { + return 'UnpublishAndArchivePage'; + } + public function getTitle(): string { return _t('Page.UNPUBLISH_ARCHIVE', 'Unpublish and archive'); @@ -43,7 +48,6 @@ public function isMenuItemSupported(): bool $page = Controller::curr()->data(); return $page->canUnpublish() && $page->canArchive() && $page->isPublished(); - ; } public function provideAdminToolbarMenuItem(): AdminToolbarMenuItem diff --git a/src/Menus/Page/MenuItems/UnpublishMenuItem.php b/src/Menus/Page/MenuItems/UnpublishMenuItem.php index cf290d0..b222416 100644 --- a/src/Menus/Page/MenuItems/UnpublishMenuItem.php +++ b/src/Menus/Page/MenuItems/UnpublishMenuItem.php @@ -5,17 +5,22 @@ namespace WeDevelop\AdminToolbar\Menus\Page\MenuItems; use SilverStripe\CMS\Model\SiteTree; +use SilverStripe\Control\Controller; use SilverStripe\ORM\FieldType\DBHTMLText; use SilverStripe\View\ArrayData; use WeDevelop\AdminToolbar\Menus\Page\PageMenu; use WeDevelop\AdminToolbar\Models\AdminToolbarMenuItem; use WeDevelop\AdminToolbar\Providers\AdminToolbarMenuItemProviderInterface; -use SilverStripe\Control\Controller; class UnpublishMenuItem extends AdminToolbarMenuItem implements AdminToolbarMenuItemProviderInterface { public const ACTION = 'unpublish'; + public function getName(): string + { + return 'UnpublishMenuItem'; + } + public function getTitle(): string { return _t('Page.UNPUBLISH', 'Unpublish'); diff --git a/src/Menus/User/MenuItems/EditUserMenuItem.php b/src/Menus/User/MenuItems/EditUserMenuItem.php index 43fbd2e..e65511a 100644 --- a/src/Menus/User/MenuItems/EditUserMenuItem.php +++ b/src/Menus/User/MenuItems/EditUserMenuItem.php @@ -13,6 +13,11 @@ class EditUserMenuItem extends AdminToolbarMenuItem implements AdminToolbarMenuItemProviderInterface { + public function getName(): string + { + return 'EditUser'; + } + public function getEditLink(): string { $member = UserMenu::getCurrentMember(); diff --git a/src/Menus/User/MenuItems/UsernameMenuItem.php b/src/Menus/User/MenuItems/UsernameMenuItem.php index 2a0f67f..a8fc835 100644 --- a/src/Menus/User/MenuItems/UsernameMenuItem.php +++ b/src/Menus/User/MenuItems/UsernameMenuItem.php @@ -12,6 +12,11 @@ class UsernameMenuItem extends AdminToolbarMenuItem implements AdminToolbarMenuItemProviderInterface { + public function getName(): string + { + return 'Username'; + } + public function getCurrentMember(): ?Member { return UserMenu::getCurrentMember(); diff --git a/src/Menus/User/UserMenu.php b/src/Menus/User/UserMenu.php index 813d50e..50656f6 100644 --- a/src/Menus/User/UserMenu.php +++ b/src/Menus/User/UserMenu.php @@ -12,7 +12,9 @@ class UserMenu extends AdminToolbarMenu implements AdminToolbarMenuProviderInterface { + /** @config */ private static int $order = 9; + public const MENU_NAME = 'User'; public function getName(): string diff --git a/src/Models/AdminToolbarButton.php b/src/Models/AdminToolbarButton.php index 8e4198c..a742c08 100644 --- a/src/Models/AdminToolbarButton.php +++ b/src/Models/AdminToolbarButton.php @@ -12,6 +12,7 @@ abstract class AdminToolbarButton extends ViewableData implements AdminToolbarBu { use Configurable; + /** @config */ private static int $order = 10; public function getExtraClasses(): string diff --git a/src/Models/AdminToolbarMenu.php b/src/Models/AdminToolbarMenu.php index 96a8791..cdd569e 100644 --- a/src/Models/AdminToolbarMenu.php +++ b/src/Models/AdminToolbarMenu.php @@ -5,19 +5,22 @@ namespace WeDevelop\AdminToolbar\Models; use SilverStripe\Core\ClassInfo; +use SilverStripe\Core\Config\Config; use SilverStripe\Core\Config\Configurable; use SilverStripe\ORM\ArrayList; use SilverStripe\ORM\FieldType\DBHTMLText; use SilverStripe\View\Requirements; use SilverStripe\View\ViewableData; -use WeDevelop\AdminToolbar\Providers\AdminToolbarMenuItemProviderInterface; +use WeDevelop\AdminToolbar\AdminToolbar; use WeDevelop\AdminToolbar\Providers\AdminToolbarJavascriptProviderInterface; +use WeDevelop\AdminToolbar\Providers\AdminToolbarMenuItemProviderInterface; use WeDevelop\AdminToolbar\Providers\AdminToolbarStylesheetProviderInterface; abstract class AdminToolbarMenu extends ViewableData implements AdminToolbarMenuInterface { use Configurable; + /** @config */ private static int $order = 10; public function getItems(): ArrayList @@ -29,7 +32,10 @@ public function getItems(): ArrayList /** @var AdminToolbarMenuItemProviderInterface $inst */ $inst = $itemClass::create(); - if (!$inst->isMenuItemSupported()) { + if ( + !$inst->isMenuItemSupported() + || in_array($inst->provideAdminToolbarMenuItem->getName(), Config::forClass(AdminToolbar::class)->get('disabled_menu_items') ?? [], true) + ) { continue; } diff --git a/src/Models/AdminToolbarMenuItem.php b/src/Models/AdminToolbarMenuItem.php index 627cb82..77b4dbc 100644 --- a/src/Models/AdminToolbarMenuItem.php +++ b/src/Models/AdminToolbarMenuItem.php @@ -12,6 +12,7 @@ abstract class AdminToolbarMenuItem extends ViewableData implements AdminToolbar { use Configurable; + /** @config */ private static int $order = 10; public static string $forMenu = ''; diff --git a/src/Models/AdminToolbarMenuItemInterface.php b/src/Models/AdminToolbarMenuItemInterface.php index 98e95c2..4eff6a6 100644 --- a/src/Models/AdminToolbarMenuItemInterface.php +++ b/src/Models/AdminToolbarMenuItemInterface.php @@ -6,6 +6,7 @@ interface AdminToolbarMenuItemInterface { + public function getName(): string; public function isSubMenu(): bool; public function getSubMenu(): ?AdminToolbarMenu; public function getOrder(): int;