From 79a585eda41fec9770e43ead64ea4f1336c05663 Mon Sep 17 00:00:00 2001 From: Andrew Aitken-Fincham Date: Mon, 24 Apr 2017 18:17:09 +0100 Subject: [PATCH] Update to be compatible with SS4 (#27) plus some code tidying --- README.md | 2 +- _config/config.yml | 8 +-- composer.json | 40 +++++++++------ .../Extension}/BetterNavigatorExtension.php | 50 ++++++++++++++----- .../{ => BetterNavigator}/BetterNavigator.ss | 6 +-- .../Includes}/BetterNavigatorExtraContent.ss | 0 .../BetterNavigatorExtraDebugging.ss | 0 .../Includes}/BetterNavigatorExtraDevTools.ss | 0 8 files changed, 70 insertions(+), 36 deletions(-) rename {code => src/Extension}/BetterNavigatorExtension.php (62%) mode change 100755 => 100644 rename templates/{ => BetterNavigator}/BetterNavigator.ss (95%) rename templates/{includes => BetterNavigator/Includes}/BetterNavigatorExtraContent.ss (100%) rename templates/{includes => BetterNavigator/Includes}/BetterNavigatorExtraDebugging.ss (100%) rename templates/{includes => BetterNavigator/Includes}/BetterNavigatorExtraDevTools.ss (100%) diff --git a/README.md b/README.md index e6f6dad..6d53546 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ This module is intended to replicate and expand upon the functionality provided ## Requirements -SilverStripe 3.1 +SilverStripe 4.0 ## Installation diff --git a/_config/config.yml b/_config/config.yml index 91024aa..c04e163 100644 --- a/_config/config.yml +++ b/_config/config.yml @@ -1,10 +1,10 @@ --- Name: betternavigator -After: 'framework/*','cms/*' +After: 'framework/*, cms/*' --- -LeftAndMain: +SilverStripe\Admin\LeftAndMain: extra_requirements_javascript: - 'betternavigator/javascript/BN.LeftAndMain.Preview.js' -ContentController: +SilverStripe\CMS\Controllers\ContentController: extensions: - - BetterNavigatorExtension + - JonoM\BetterNavigator\Extension\BetterNavigatorExtension diff --git a/composer.json b/composer.json index 5e34e0e..a231420 100644 --- a/composer.json +++ b/composer.json @@ -1,17 +1,27 @@ { - "name": "jonom/silverstripe-betternavigator", - "description": "Front-end utility menu for SilverStripe websites featuring administration and development tools", - "type": "silverstripe-module", - "keywords": ["silverstripe", "navigator", "SilverStripeNavigator", "BetterNavigator"], - "license": "BSD-3-Clause", - "authors": [{ - "name": "Jonathon Menz", - "homepage": "http://jonathonmenz.com" - }], - "require": { - "silverstripe/framework": "~3.1" - }, - "extra": { - "installer-name": "betternavigator" - } + "name": "jonom/silverstripe-betternavigator", + "description": "Front-end utility menu for SilverStripe websites featuring administration and development tools", + "type": "silverstripe-module", + "keywords": [ + "silverstripe", + "navigator", + "SilverStripeNavigator", + "BetterNavigator" + ], + "license": "BSD-3-Clause", + "authors": [ + { + "name": "Jonathon Menz", + "homepage": "http://jonathonmenz.com" + } + ], + "require": { + "silverstripe/framework": "^4.0" + }, + "extra": { + "installer-name": "betternavigator" + }, + "autoload": { + "Jonom\\BetterNavigator\\": "src/" + } } diff --git a/code/BetterNavigatorExtension.php b/src/Extension/BetterNavigatorExtension.php old mode 100755 new mode 100644 similarity index 62% rename from code/BetterNavigatorExtension.php rename to src/Extension/BetterNavigatorExtension.php index e14ff5f..20eb36d --- a/code/BetterNavigatorExtension.php +++ b/src/Extension/BetterNavigatorExtension.php @@ -1,5 +1,18 @@ owner && $this->owner->dataRecord && $this->owner->dataRecord instanceof SiteTree && $this->owner->dataRecord->ID > 0)) return false; + if (!$this->isAPage()) return false; // Only show navigator to appropriate users $isDev = Director::isDev(); $canViewDraft = (Permission::check('VIEW_DRAFT_CONTENT') || Permission::check('CMS_ACCESS_CMSMain')); - if($isDev || $canViewDraft) { + if ($isDev || $canViewDraft) { // Get SilverStripeNavigator links & stage info (CMS/Stage/Live/Archive) - $nav = array(); + $nav = []; $viewing = ''; - $navigator = new SilverStripeNavigator($this->owner->dataRecord); + $navigator = SilverStripeNavigator::create($this->owner->dataRecord); $items = $navigator->getItems(); - foreach($items as $item) { + foreach ($items as $item) { $name = $item->getName(); $active = $item->isActive(); - $nav[$name] = array( + $nav[$name] = [ 'Link' => $item->getLink(), 'Active' => $active - ); + ]; if ($active) { if ($name == 'LiveLink') $viewing = 'Live'; if ($name == 'StageLink') $viewing = 'Draft'; @@ -35,7 +49,10 @@ class BetterNavigatorExtension extends DataExtension { } } // Only show edit link if user has permission to edit this page - $editLink = (($this->owner->dataRecord->canEdit() && Permission::check('CMS_ACCESS_CMSMain')) || $isDev) ? Controller::join_links(Director::absoluteBaseURL(), $nav['CMSLink']['Link']) : false; + $editLink = false; + if ($this->owner->dataRecord->canEdit() && Permission::check('CMS_ACCESS_CMSMain') || $isDev) { + $editLink = $nav['CMSLink']['Link']; + } // Is the logged in member nominated as a developer? $member = Member::currentUser(); @@ -45,22 +62,29 @@ class BetterNavigatorExtension extends DataExtension { // Add other data for template $backURL = '?BackURL=' . urlencode($this->owner->Link()); - $bNData = array_merge($nav, array( + $bNData = array_merge($nav, [ 'Member' => $member, - 'Stage' => Versioned::current_stage(), + 'Stage' => Versioned::get_stage(), 'Viewing' => $viewing, // What we're viewing doesn't necessarily align with the active Stage 'LoginLink' => Controller::join_links(Director::absoluteBaseURL(), Config::inst()->get('Security', 'login_url'), $backURL), 'LogoutLink' => Controller::join_links(Director::absoluteBaseURL() . 'Security/logout', $backURL), 'EditLink' => $editLink, 'Mode' => Director::get_environment_type(), 'IsDeveloper' => $isDeveloper - )); + ]); // Merge with page data, send to template and render $bNData = new ArrayData($bNData); - $page = $this->owner->customise(array('BetterNavigator' => $bNData)); - return $page->renderWith('BetterNavigator'); + $page = $this->owner->customise(['BetterNavigator' => $bNData]); + return $page->renderWith('BetterNavigator\\BetterNavigator'); } return false; } + + protected function isAPage() { + return $this->owner + && $this->owner->dataRecord + && $this->owner->dataRecord instanceof SiteTree + && $this->owner->dataRecord->ID > 0; + } } diff --git a/templates/BetterNavigator.ss b/templates/BetterNavigator/BetterNavigator.ss similarity index 95% rename from templates/BetterNavigator.ss rename to templates/BetterNavigator/BetterNavigator.ss index 6b209ec..9280313 100644 --- a/templates/BetterNavigator.ss +++ b/templates/BetterNavigator/BetterNavigator.ss @@ -45,7 +45,7 @@ - <% include BetterNavigatorExtraContent %> + <% include BetterNavigator\BetterNavigatorExtraContent %> <% if $BetterNavigator.Mode=='dev' || $BetterNavigator.IsDeveloper %> @@ -65,7 +65,7 @@ - <% include BetterNavigatorExtraDevTools %> + <% include BetterNavigator\BetterNavigatorExtraDevTools %>
Debugging
@@ -81,7 +81,7 @@ - <% include BetterNavigatorExtraDebugging %> + <% include BetterNavigator\BetterNavigatorExtraDebugging %> <% end_if %> diff --git a/templates/includes/BetterNavigatorExtraContent.ss b/templates/BetterNavigator/Includes/BetterNavigatorExtraContent.ss similarity index 100% rename from templates/includes/BetterNavigatorExtraContent.ss rename to templates/BetterNavigator/Includes/BetterNavigatorExtraContent.ss diff --git a/templates/includes/BetterNavigatorExtraDebugging.ss b/templates/BetterNavigator/Includes/BetterNavigatorExtraDebugging.ss similarity index 100% rename from templates/includes/BetterNavigatorExtraDebugging.ss rename to templates/BetterNavigator/Includes/BetterNavigatorExtraDebugging.ss diff --git a/templates/includes/BetterNavigatorExtraDevTools.ss b/templates/BetterNavigator/Includes/BetterNavigatorExtraDevTools.ss similarity index 100% rename from templates/includes/BetterNavigatorExtraDevTools.ss rename to templates/BetterNavigator/Includes/BetterNavigatorExtraDevTools.ss