From 115ed92e0aed63df1620700955afd6248fa97fae Mon Sep 17 00:00:00 2001 From: bergice <andre.kiste@silverstripe.com> Date: Fri, 31 Aug 2018 14:57:17 +1200 Subject: [PATCH] API: Add `show_sitetree_link_tracking` config to `SiteTreeLinkTracking` extension to control visibility of the Link Tracking tab --- _config/linktracking.yml | 5 +++++ code/Model/SiteTreeLinkTracking.php | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/_config/linktracking.yml b/_config/linktracking.yml index a08daf78d9..12065ad9f1 100644 --- a/_config/linktracking.yml +++ b/_config/linktracking.yml @@ -4,3 +4,8 @@ Name: cmslinktracking SilverStripe\ORM\DataObject: extensions: - SilverStripe\CMS\Model\SiteTreeLinkTracking +--- +Name: cmslinktrackingvisibility +--- +SilverStripe\Security\Member: + show_sitetree_link_tracking: true diff --git a/code/Model/SiteTreeLinkTracking.php b/code/Model/SiteTreeLinkTracking.php index d6e1d483dd..c3c2111d5e 100644 --- a/code/Model/SiteTreeLinkTracking.php +++ b/code/Model/SiteTreeLinkTracking.php @@ -4,6 +4,8 @@ use DOMElement; use SilverStripe\Assets\Shortcodes\FileLinkTracking; +use SilverStripe\Forms\FieldList; +use SilverStripe\Forms\FormScaffolder; use SilverStripe\ORM\DataExtension; use SilverStripe\ORM\DataObject; use SilverStripe\ORM\FieldType\DBHTMLText; @@ -52,6 +54,15 @@ class SiteTreeLinkTracking extends DataExtension ], ]; + /** + * Controls visibility of the Link Tracking tab + * + * @config + * @see linktracking.yml + * @var boolean + */ + private static $show_sitetree_link_tracking = false; + /** * Parser for link tracking * @@ -194,4 +205,13 @@ protected function toggleElementClass(DOMElement $domReference, $class, $toggle) $domReference->removeAttribute('class'); } } + + public function updateCMSFields(FieldList $fields) + { + if (!$this->owner->config()->get('show_sitetree_link_tracking')) { + $fields->removeByName('LinkTracking'); + } elseif ($this->owner->ID && !$this->owner->getField('LinkTracking')) { + FormScaffolder::addManyManyRelationshipFields($fields, 'LinkTracking', null, true, $this->owner); + } + } }