From f50f330cba9a2cb5e040ac800fb3df6823ea3a6c Mon Sep 17 00:00:00 2001 From: edalzell Date: Wed, 26 Feb 2025 16:24:50 -0800 Subject: [PATCH] save `publish_at` in the revision --- .../js/components/entries/PublishActions.vue | 16 ++++++++++++---- .../CP/Collections/EntryRevisionsController.php | 1 + src/Revisions/Revisable.php | 1 + src/Revisions/Revision.php | 15 +++++++++++++++ 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/resources/js/components/entries/PublishActions.vue b/resources/js/components/entries/PublishActions.vue index a06b19f030..bf8a8f4cf3 100644 --- a/resources/js/components/entries/PublishActions.vue +++ b/resources/js/components/entries/PublishActions.vue @@ -30,7 +30,7 @@
this.handleAxiosError(e)); }, - submitRevision() { + submitPublishLater() { + this.submitRevision(this.publishRevisionAt); + }, + + submitRevision(publishRevisionAt) { const payload = { message: this.revisionMessage }; + if (publishRevisionAt) { + payload.publish_at = publishRevisionAt; + } + this.$axios.post(this.actions.createRevision, payload).then(response => { this.$toast.success(__('Revision created')); this.revisionMessage = null; diff --git a/src/Http/Controllers/CP/Collections/EntryRevisionsController.php b/src/Http/Controllers/CP/Collections/EntryRevisionsController.php index c1ef85e20f..7f69004056 100644 --- a/src/Http/Controllers/CP/Collections/EntryRevisionsController.php +++ b/src/Http/Controllers/CP/Collections/EntryRevisionsController.php @@ -41,6 +41,7 @@ public function store(Request $request, $collection, $entry) { $entry->createRevision([ 'message' => $request->message, + 'publish_at' => $request->publish_at, 'user' => User::fromUser($request->user()), ]); diff --git a/src/Revisions/Revisable.php b/src/Revisions/Revisable.php index 2c1dfd0efc..8cc125ac76 100644 --- a/src/Revisions/Revisable.php +++ b/src/Revisions/Revisable.php @@ -169,6 +169,7 @@ public function createRevision($options = []) ->makeRevision() ->user($options['user'] ?? false) ->message($options['message'] ?? false) + ->publishAt($options['publish_at'] ?? null) ->save(); } diff --git a/src/Revisions/Revision.php b/src/Revisions/Revision.php index 171c1ca52e..8e3955fd38 100644 --- a/src/Revisions/Revision.php +++ b/src/Revisions/Revision.php @@ -3,6 +3,7 @@ namespace Statamic\Revisions; use Illuminate\Contracts\Support\Arrayable; +use Illuminate\Support\Carbon; use Statamic\Contracts\Auth\User; use Statamic\Contracts\Revisions\Revision as Contract; use Statamic\Data\ExistsAsFile; @@ -23,6 +24,7 @@ class Revision implements Arrayable, Contract protected $user; protected $userId; protected $message; + protected $publishAt; protected $action = 'revision'; protected $attributes = []; @@ -61,6 +63,17 @@ public function message($message = null) return $this->fluentlyGetOrSet('message')->value($message); } + public function publishAt($dateTime = null) + { + if (is_null($dateTime)) { + return $this; + } + + $carbon = new Carbon($dateTime['date'].' '.$dateTime['time'] ?? '00:00'); + + return $this->fluentlyGetOrSet('publishAt')->value($carbon->timestamp); + } + public function attributes($attributes = null) { return $this->fluentlyGetOrSet('attributes')->value($attributes); @@ -103,6 +116,7 @@ public function fileData() 'date' => $this->date->timestamp, 'user' => $this->userId ?: null, 'message' => $this->message ?: null, + 'publish_at' => $this->publishAt ?: null, 'attributes' => $this->attributes, ]; } @@ -125,6 +139,7 @@ public function toArray() 'date' => $this->date()->timestamp, 'user' => $user, 'message' => $this->message, + 'publish_at' => $this->publishAt, 'attributes' => $this->attributes, ]; }