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);
+        }
+    }
 }