From 6a49271b93acf278c8d9d35da5d52f80ab64ba61 Mon Sep 17 00:00:00 2001 From: Leapfrognz Date: Sun, 2 Mar 2014 08:42:21 +1300 Subject: [PATCH 1/6] Use doPublish instead of publish('Stage', 'Live') From what I understand, doPublish does the same thing as publish, but it has the onBeforePublish and onAfterPublish hooks --- code/VersionedGridFieldDetailForm.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/VersionedGridFieldDetailForm.php b/code/VersionedGridFieldDetailForm.php index 7665bed..0cf24cb 100644 --- a/code/VersionedGridFieldDetailForm.php +++ b/code/VersionedGridFieldDetailForm.php @@ -176,7 +176,7 @@ public function doPublish($data, $form) { $form->saveInto($record); $record->write(); $this->gridField->getList()->add($record); - $record->publish("Stage", "Live"); + $record->doPublish(); $message = sprintf( _t('GridFieldDetailForm.Published', 'Published %s %s'), From 67888ec33e6a22fcc54c7e263965bc8230a01c3d Mon Sep 17 00:00:00 2001 From: Cameron Bourgeois Date: Wed, 11 Jun 2014 09:51:57 +1200 Subject: [PATCH 2/6] Avoid direct querying where possible, replace with calls to Versioned::get_by_stage() --- code/VersionedGridFieldDetailForm.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/VersionedGridFieldDetailForm.php b/code/VersionedGridFieldDetailForm.php index d8f8bbb..71385a1 100644 --- a/code/VersionedGridFieldDetailForm.php +++ b/code/VersionedGridFieldDetailForm.php @@ -66,8 +66,8 @@ function isPublished() { return false; $record = $this->record; - - return (DB::query("SELECT \"ID\" FROM \"{$this->baseTable()}_Live\" WHERE \"ID\" = $record->ID")->value()) + + return Versioned::get_by_stage($this->baseTable(), 'Live')->byID($record->ID) ? true : false; } @@ -289,7 +289,7 @@ function doRestoreToStage() { $record = $this->record; // if no record can be found on draft stage (meaning it has been "deleted from draft" before), // create an empty record - if(!DB::query("SELECT \"ID\" FROM \"{$this->baseTable()}\" WHERE \"ID\" = $record->ID")->value()) { + if(!Versioned::get_by_stage($this->baseTable(), 'Stage')->byID($record->ID)) { $conn = DB::getConn(); if(method_exists($conn, 'allowPrimaryKeyEditing')) $conn->allowPrimaryKeyEditing($record->class, true); DB::query("INSERT INTO \"{$this->baseTable()}\" (\"ID\") VALUES ($this->ID)"); From c47948d289b5568b8c4cc70cd7373061d3793c24 Mon Sep 17 00:00:00 2001 From: Cameron Bourgeois Date: Wed, 11 Jun 2014 10:07:21 +1200 Subject: [PATCH 3/6] Replace calls to htmlspecialchars() with Convert::raw2xml() --- code/VersionedGridFieldDetailForm.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/VersionedGridFieldDetailForm.php b/code/VersionedGridFieldDetailForm.php index d8f8bbb..dc66be3 100644 --- a/code/VersionedGridFieldDetailForm.php +++ b/code/VersionedGridFieldDetailForm.php @@ -203,7 +203,7 @@ public function doPublish($data, $form) { $message = sprintf( _t('GridFieldDetailForm.Published', 'Published %s %s'), $this->record->singular_name(), - '"'.htmlspecialchars($this->record->Title, ENT_QUOTES).'"' + '"'.Convert::raw2xml($this->record->Title).'"' ); $form->sessionMessage($message, 'good'); @@ -226,7 +226,7 @@ public function doUnpublish($data, $form) { $message = sprintf( 'Unpublished %s %s', $this->record->singular_name(), - '"'.htmlspecialchars($this->record->Title, ENT_QUOTES).'"' + '"'.Convert::raw2xml($this->record->Title).'"' ); $form->sessionMessage($message, 'good'); return $this->edit(Controller::curr()->getRequest()); @@ -239,7 +239,7 @@ function doRollback($data, $form) { //$clone = clone $record; $record->publish("Live", "Stage", false); //$record->writeWithoutVersion(); - $message = "Cancelled Draft changes for \"".htmlspecialchars($record->Title, ENT_QUOTES)."\""; + $message = "Cancelled Draft changes for \"".Convert::raw2xml($record->Title)."\""; $form->sessionMessage($message, 'good'); return Controller::curr()->redirect($this->Link('edit')); @@ -262,7 +262,7 @@ public function doDelete($data, $form) { $message = sprintf( _t('GridFieldDetailForm.Deleted', 'Deleted %s %s'), $this->record->singular_name(), - '"'.htmlspecialchars($this->record->Title, ENT_QUOTES).'"' + '"'.Convert::raw2xml($this->record->Title).'"' ); $form->sessionMessage($message, 'good'); From 060f984c4ee285bb8b06305057b950c58daa7818 Mon Sep 17 00:00:00 2001 From: Cameron Bourgeois Date: Wed, 11 Jun 2014 10:08:35 +1200 Subject: [PATCH 4/6] No need for an empty _config.php file --- _config.php | 1 - 1 file changed, 1 deletion(-) delete mode 100644 _config.php diff --git a/_config.php b/_config.php deleted file mode 100644 index b3d9bbc..0000000 --- a/_config.php +++ /dev/null @@ -1 +0,0 @@ - Date: Tue, 8 Jul 2014 21:50:28 +1200 Subject: [PATCH 5/6] added hook --- code/VersionedGridFieldDetailForm.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/VersionedGridFieldDetailForm.php b/code/VersionedGridFieldDetailForm.php index 686c293..2cf3c9e 100644 --- a/code/VersionedGridFieldDetailForm.php +++ b/code/VersionedGridFieldDetailForm.php @@ -175,7 +175,9 @@ function getCMSActions() { ); } } - + + $this->extend('updateCMSActions', $actions); + return $actions; } From bd2141e53f2ac3e1da0115f05b15e20b36d54077 Mon Sep 17 00:00:00 2001 From: James Ayers Date: Mon, 21 Jul 2014 15:57:55 +1200 Subject: [PATCH 6/6] Fallback to standard publish for objects without a doPublish --- code/VersionedGridFieldDetailForm.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/code/VersionedGridFieldDetailForm.php b/code/VersionedGridFieldDetailForm.php index 2cf3c9e..8dc3fed 100644 --- a/code/VersionedGridFieldDetailForm.php +++ b/code/VersionedGridFieldDetailForm.php @@ -200,7 +200,14 @@ public function doPublish($data, $form) { $form->saveInto($record); $record->write(); $this->gridField->getList()->add($record); - $record->doPublish(); + + // use doPublish if it's defined on the object (like SiteTree) which + // includes extension calls. + if($record->hasMethod('doPublish')) { + $record->doPublish(); + } else { + $record->publish('Stage', 'Live'); + } $message = sprintf( _t('GridFieldDetailForm.Published', 'Published %s %s'),