Skip to content

Commit

Permalink
Links now only update after publish and unpublish
Browse files Browse the repository at this point in the history
  • Loading branch information
gorriecoe committed Apr 9, 2020
1 parent b838921 commit 9b95b58
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 18 deletions.
38 changes: 20 additions & 18 deletions src/extensions/SiteTreeAutoCreateExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
use gorriecoe\Menu\Models\MenuSet;
use gorriecoe\Menu\Models\MenuLink;
use SilverStripe\ORM\ArrayList;
use SilverStripe\ORM\DataObject;
use SilverStripe\ORM\DataExtension;

/**
Expand Down Expand Up @@ -36,19 +35,13 @@ public function getOwnsMenu()
}

/**
* Event handler called after writing to the database.
* Event handler called after Publishing to the live sitetree.
*/
public function onAfterWrite()
public function onAfterPublish()
{
parent::onAfterWrite();
$owner = $this->owner;

foreach ($this->getOwnsMenu() as $menuSet) {
$menuLink = DataObject::get_one(MenuLink::class, [
'Type' => 'SiteTree', // Ensures the editor hasn't intentionally changed this link.
'MenuSetID' => $menuSet->ID,
'SiteTreeID' => $owner->ID
]);
foreach ($owner->OwnsMenu as $menuSet) {
$menuLink = MenuLink::get_by_sitetreeID($menuSet, $owner->ID);
if ($menuLink) {
$menuLink->setField('Title', $owner->MenuTitle);
} else {
Expand All @@ -62,20 +55,29 @@ public function onAfterWrite()
}
}

/**
* Event handler called before unpublishing from live sitetree.
*/
public function onBeforeUnpublish()
{
$owner = $this->owner;
foreach ($owner->OwnsMenu as $menuSet) {
$menuLink = MenuLink::get_by_sitetreeID($menuSet, $owner->ID);
if ($menuLink) {
$menuLink->delete();
}
}
}

/**
* Event handler called before deleting from the database.
*/
public function onBeforeDelete()
{
parent::onBeforeDelete();
$owner = $this->owner;

foreach ($this->getOwnsMenu() as $menuSet) {
$menuLink = DataObject::get_one(MenuLink::class, [
'Type' => 'SiteTree',
'MenuSetID' => $menuSet->ID,
'SiteTreeID' => $owner->ID
]);
foreach ($owner->OwnsMenu as $menuSet) {
$menuLink = MenuLink::get_by_sitetreeID($menuSet, $owner->ID);
if ($menuLink) {
$menuLink->delete();
}
Expand Down
25 changes: 25 additions & 0 deletions src/models/MenuLink.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@
namespace gorriecoe\Menu\Models;

use gorriecoe\Link\Models\Link;
use gorriecoe\Menu\Models\MenuSet;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\GridField\GridField;
use SilverStripe\Forms\GridField\GridFieldConfig_RecordEditor;
use SilverStripe\GraphQL\Scaffolding\Interfaces\ScaffoldingProvider;
use SilverStripe\GraphQL\Scaffolding\Scaffolders\SchemaScaffolder;
use SilverStripe\ORM\HasManyList;
use SilverStripe\ORM\DataObject;
use SilverStripe\Security\Member;
use Symbiote\GridFieldExtensions\GridFieldOrderableRows;

Expand Down Expand Up @@ -231,4 +233,27 @@ public function provideGraphQLScaffolding(SchemaScaffolder $scaffolder)
->end();
return $scaffolder;
}

/**
* Return the first menulink matching the given MenuSet and SiteTreeID.
*
* @param gorriecoe\Menu\Models\MenuSet|String
* @param Int
*
* @return gorriecoe\Menu\Models\MenuLink|Null
*/
public static function get_by_sitetreeID($menuSet, Int $siteTreeID)
{
if (!$menuSet instanceof MenuSet) {
$menuSet = MenuSet::get_by_slug($menuSet);
}
if (!$menuSet) {
return;
}
return DataObject::get_one(self::class, [
'Type' => 'SiteTree', // Ensures the admin hasn't intentionally changed this link
'MenuSetID' => $menuSet->ID,
'SiteTreeID' => $siteTreeID
]);
}
}

0 comments on commit 9b95b58

Please sign in to comment.