Skip to content

Commit

Permalink
Introduce a new configuration option to disable individual menu items.
Browse files Browse the repository at this point in the history
  • Loading branch information
erikfrerejean committed Apr 11, 2024
1 parent 084a41c commit 1c707b5
Show file tree
Hide file tree
Showing 17 changed files with 98 additions and 13 deletions.
2 changes: 2 additions & 0 deletions _config/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ SilverStripe\Security\Member:

WeDevelop\AdminToolbar\AdminToolbar:
disabled_menus:
disabled_menu_items:
disabled_buttons:
disabled_toggles:

Expand All @@ -21,6 +22,7 @@ Only:
---
WeDevelop\AdminToolbar\AdminToolbar:
disabled_menus:
disabled_menu_items:
disabled_buttons:
- 'Queries'
disabled_toggles:
Expand Down
25 changes: 23 additions & 2 deletions src/AdminToolbar.php
Original file line number Diff line number Diff line change
Expand Up @@ -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<string>
*/
private static array $disabled_menus = [];

/**
* @config
* @var array<string>
*/
private static array $disabled_menu_items = [];

/**
* @config
* @var array<string>
*/
private static array $disabled_buttons = [];

/**
* @config
* @var array<string>
*/
private static array $disabled_toggles = [];

public function render(): DBHTMLText
{
Requirements::css('wedevelopnl/silverstripe-admintoolbar:client/dist/main.css');
Expand Down
8 changes: 8 additions & 0 deletions src/Extensions/MemberExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -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<string, string>
*/
private static array $db = [
'DisableAdminToolbar' => 'Boolean',
'AdminToolbarDefaultCollapsed' => 'Boolean',
Expand Down
5 changes: 5 additions & 0 deletions src/Menus/CMSMenu/MenuItems/CMSMenuItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ class CMSMenuItem extends AdminToolbarMenuItem
{
private ArrayData $menuItem;

public function getName(): string
{
return 'CMSMenuItem';
}

public function isMenuItemSupported(): bool
{
return true;
Expand Down
12 changes: 8 additions & 4 deletions src/Menus/ElementalGrid/MenuItems/ElementalGridMenuItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand All @@ -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;
}
Expand Down
5 changes: 5 additions & 0 deletions src/Menus/Page/MenuItems/AddToCampaignMenuItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@

class AddToCampaignMenuItem extends AdminToolbarMenuItem implements AdminToolbarMenuItemProviderInterface
{
public function getName(): string
{
return 'AddToCampaign';
}

public function getTitle(): string
{
return "Add to campaign";
Expand Down
7 changes: 6 additions & 1 deletion src/Menus/Page/MenuItems/ArchiveMenuItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down
7 changes: 6 additions & 1 deletion src/Menus/Page/MenuItems/EditMenuItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down
8 changes: 6 additions & 2 deletions src/Menus/Page/MenuItems/UnpublishAndArchiveMenuItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down Expand Up @@ -43,7 +48,6 @@ public function isMenuItemSupported(): bool
$page = Controller::curr()->data();

return $page->canUnpublish() && $page->canArchive() && $page->isPublished();
;
}

public function provideAdminToolbarMenuItem(): AdminToolbarMenuItem
Expand Down
7 changes: 6 additions & 1 deletion src/Menus/Page/MenuItems/UnpublishMenuItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down
5 changes: 5 additions & 0 deletions src/Menus/User/MenuItems/EditUserMenuItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@

class EditUserMenuItem extends AdminToolbarMenuItem implements AdminToolbarMenuItemProviderInterface
{
public function getName(): string
{
return 'EditUser';
}

public function getEditLink(): string
{
$member = UserMenu::getCurrentMember();
Expand Down
5 changes: 5 additions & 0 deletions src/Menus/User/MenuItems/UsernameMenuItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@

class UsernameMenuItem extends AdminToolbarMenuItem implements AdminToolbarMenuItemProviderInterface
{
public function getName(): string
{
return 'Username';
}

public function getCurrentMember(): ?Member
{
return UserMenu::getCurrentMember();
Expand Down
2 changes: 2 additions & 0 deletions src/Menus/User/UserMenu.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions src/Models/AdminToolbarButton.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ abstract class AdminToolbarButton extends ViewableData implements AdminToolbarBu
{
use Configurable;

/** @config */
private static int $order = 10;

public function getExtraClasses(): string
Expand Down
10 changes: 8 additions & 2 deletions src/Models/AdminToolbarMenu.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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;
}

Expand Down
1 change: 1 addition & 0 deletions src/Models/AdminToolbarMenuItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ abstract class AdminToolbarMenuItem extends ViewableData implements AdminToolbar
{
use Configurable;

/** @config */
private static int $order = 10;

public static string $forMenu = '';
Expand Down
1 change: 1 addition & 0 deletions src/Models/AdminToolbarMenuItemInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

interface AdminToolbarMenuItemInterface
{
public function getName(): string;
public function isSubMenu(): bool;
public function getSubMenu(): ?AdminToolbarMenu;
public function getOrder(): int;
Expand Down

0 comments on commit 1c707b5

Please sign in to comment.