From 7583b4cd37c048a76c39cf32a2a5b75f7e5026a7 Mon Sep 17 00:00:00 2001 From: Robbie Averill Date: Mon, 10 Sep 2018 09:19:37 +0200 Subject: [PATCH 1/4] FIX Ensure Versioned query has table name prefix so it will work with modules like fluent --- src/Models/ElementalArea.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Models/ElementalArea.php b/src/Models/ElementalArea.php index 0a2d5b9d..396b2054 100644 --- a/src/Models/ElementalArea.php +++ b/src/Models/ElementalArea.php @@ -157,6 +157,7 @@ public function getOwnerPage() if ($this->OwnerClassName) { $class = $this->OwnerClassName; + $tableName = DataObject::getSchema()->tableName($class); $instance = Injector::inst()->get($class); if (!ClassInfo::hasMethod($instance, 'getElementalRelations')) { return null; @@ -167,7 +168,7 @@ public function getOwnerPage() $areaID = $eaRelationship . 'ID'; $currentStage = Versioned::get_stage() ?: Versioned::DRAFT; - $page = Versioned::get_one_by_stage($class, $currentStage, "\"$areaID\" = {$this->ID}"); + $page = Versioned::get_one_by_stage($class, $currentStage, "\"$tableName\".\"$areaID\" = {$this->ID}"); if ($page) { $this->cacheData['owner_page'] = $page; @@ -177,6 +178,7 @@ public function getOwnerPage() } foreach ($this->supportedPageTypes() as $class) { + $tableName = DataObject::getSchema()->tableName($class); $instance = Injector::inst()->get($class); if (!ClassInfo::hasMethod($instance, 'getElementalRelations')) { return null; @@ -185,7 +187,7 @@ public function getOwnerPage() foreach ($elementalAreaRelations as $eaRelationship) { $areaID = $eaRelationship . 'ID'; - $page = Versioned::get_one_by_stage($class, Versioned::DRAFT, "\"$areaID\" = {$this->ID}"); + $page = Versioned::get_one_by_stage($class, Versioned::DRAFT, "\"$tableName\".\"$areaID\" = {$this->ID}"); if ($page) { if ($this->OwnerClassName !== $class) { From 7c1c3c7a7c8a65634624bf283445919a951457d0 Mon Sep 17 00:00:00 2001 From: Robbie Averill Date: Mon, 10 Sep 2018 10:04:21 +0200 Subject: [PATCH 2/4] FIX Revert Versioned call back to returning a DataList which is then filtered The return of this is cached as an internal property already anyway --- src/Models/ElementalArea.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Models/ElementalArea.php b/src/Models/ElementalArea.php index 396b2054..77a7f47d 100644 --- a/src/Models/ElementalArea.php +++ b/src/Models/ElementalArea.php @@ -157,7 +157,6 @@ public function getOwnerPage() if ($this->OwnerClassName) { $class = $this->OwnerClassName; - $tableName = DataObject::getSchema()->tableName($class); $instance = Injector::inst()->get($class); if (!ClassInfo::hasMethod($instance, 'getElementalRelations')) { return null; @@ -168,7 +167,7 @@ public function getOwnerPage() $areaID = $eaRelationship . 'ID'; $currentStage = Versioned::get_stage() ?: Versioned::DRAFT; - $page = Versioned::get_one_by_stage($class, $currentStage, "\"$tableName\".\"$areaID\" = {$this->ID}"); + $page = Versioned::get_by_stage($class, $currentStage)->filter($areaID, $this->ID)->first(); if ($page) { $this->cacheData['owner_page'] = $page; @@ -178,7 +177,6 @@ public function getOwnerPage() } foreach ($this->supportedPageTypes() as $class) { - $tableName = DataObject::getSchema()->tableName($class); $instance = Injector::inst()->get($class); if (!ClassInfo::hasMethod($instance, 'getElementalRelations')) { return null; @@ -187,7 +185,7 @@ public function getOwnerPage() foreach ($elementalAreaRelations as $eaRelationship) { $areaID = $eaRelationship . 'ID'; - $page = Versioned::get_one_by_stage($class, Versioned::DRAFT, "\"$tableName\".\"$areaID\" = {$this->ID}"); + $page = Versioned::get_by_stage($class, Versioned::DRAFT)->filter($areaID, $this->ID)->first(); if ($page) { if ($this->OwnerClassName !== $class) { From ad330f0c5f1816214302c5c729d78900544e35a1 Mon Sep 17 00:00:00 2001 From: eehondas Date: Mon, 17 Sep 2018 09:03:41 +1000 Subject: [PATCH 3/4] Check object exists before pushing History Tab to BaseElement --- src/Models/BaseElement.php | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/Models/BaseElement.php b/src/Models/BaseElement.php index 6af8e5e1..62b16fa9 100644 --- a/src/Models/BaseElement.php +++ b/src/Models/BaseElement.php @@ -300,15 +300,18 @@ public function getCMSFields() $fields->removeByName('Style'); } - // Support for new history viewer in SS 4.2+ - if (class_exists(HistoryViewerField::class)) { - Requirements::javascript('dnadesign/silverstripe-elemental:client/dist/js/bundle.js'); - - $historyViewer = HistoryViewerField::create('ElementHistory'); - $fields->addFieldToTab('Root.History', $historyViewer); - - $fields->fieldByName('Root.History') - ->addExtraClass('elemental-block__history-tab tab--history-viewer'); + // Check object exists before pushing History Tab + if($this->ID) { + // Support for new history viewer in SS 4.2+ + if (class_exists(HistoryViewerField::class)) { + Requirements::javascript('dnadesign/silverstripe-elemental:client/dist/js/bundle.js'); + + $historyViewer = HistoryViewerField::create('ElementHistory'); + $fields->addFieldToTab('Root.History', $historyViewer); + + $fields->fieldByName('Root.History') + ->addExtraClass('elemental-block__history-tab tab--history-viewer'); + } } }); From 4294017ad300b56eedecbecd94113e73bbfb9d6a Mon Sep 17 00:00:00 2001 From: eehondas Date: Mon, 17 Sep 2018 09:57:58 +1000 Subject: [PATCH 4/4] Revert and one line statement --- src/Models/BaseElement.php | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/Models/BaseElement.php b/src/Models/BaseElement.php index 62b16fa9..42c1195d 100644 --- a/src/Models/BaseElement.php +++ b/src/Models/BaseElement.php @@ -300,18 +300,15 @@ public function getCMSFields() $fields->removeByName('Style'); } - // Check object exists before pushing History Tab - if($this->ID) { - // Support for new history viewer in SS 4.2+ - if (class_exists(HistoryViewerField::class)) { - Requirements::javascript('dnadesign/silverstripe-elemental:client/dist/js/bundle.js'); - - $historyViewer = HistoryViewerField::create('ElementHistory'); - $fields->addFieldToTab('Root.History', $historyViewer); - - $fields->fieldByName('Root.History') - ->addExtraClass('elemental-block__history-tab tab--history-viewer'); - } + // Support for new history viewer in SS 4.2+ + if ($this->isInDB() && class_exists(HistoryViewerField::class)) { + Requirements::javascript('dnadesign/silverstripe-elemental:client/dist/js/bundle.js'); + + $historyViewer = HistoryViewerField::create('ElementHistory'); + $fields->addFieldToTab('Root.History', $historyViewer); + + $fields->fieldByName('Root.History') + ->addExtraClass('elemental-block__history-tab tab--history-viewer'); } });