diff --git a/src/Stache/Indexes/Index.php b/src/Stache/Indexes/Index.php index 45b8084f700..8484a5ae541 100644 --- a/src/Stache/Indexes/Index.php +++ b/src/Stache/Indexes/Index.php @@ -2,8 +2,9 @@ namespace Statamic\Stache\Indexes; -use Illuminate\Support\Facades\Cache; +use Statamic\Facades\Entry; use Statamic\Facades\Stache; +use Illuminate\Support\Facades\Cache; abstract class Index { @@ -70,6 +71,16 @@ public function load() $this->items = Cache::get($this->cacheKey()); + if ($this->name === 'status') { + collect($this->items)->filter(function ($value) { + return $value === 'scheduled'; + })->each(function ($value, $id) { + if ($this->getItemTimestamp($id)->isPast()) { + $this->updateItem(Entry::find($id)); + } + }); + } + if ($this->items === null) { $this->update(); } diff --git a/src/Stache/Indexes/Value.php b/src/Stache/Indexes/Value.php index bbcbdcfe2a7..fc935d3518a 100644 --- a/src/Stache/Indexes/Value.php +++ b/src/Stache/Indexes/Value.php @@ -3,12 +3,15 @@ namespace Statamic\Stache\Indexes; use Statamic\Support\Str; +use Illuminate\Support\Facades\Cache; class Value extends Index { public function getItems() { return $this->store->getItemsFromFiles()->map(function ($item) { + $this->cacheItemTimestamp($item); + return $this->getItemValue($item); })->all(); } @@ -40,4 +43,22 @@ public function getItemValue($item) return $item->get($this->name); } + + public function cacheItemTimestamp($item) + { + $scheduledItems = Cache::get($this->timestampCacheKey()) ?? collect(); + $scheduledItems->put($item->id(), $item->date()); + + Cache::forever($this->timestampCacheKey(), collect($scheduledItems)); + } + + public function getItemTimestamp($id) + { + return Cache::get($this->timestampCacheKey())->get($id); + } + + protected function timestampCacheKey() + { + return "stache::timestamps::{$this->store->key()}"; + } } diff --git a/src/Stache/Stores/Store.php b/src/Stache/Stores/Store.php index de91f7864e3..c3368f9c752 100644 --- a/src/Stache/Stores/Store.php +++ b/src/Stache/Stores/Store.php @@ -10,6 +10,7 @@ use Statamic\Stache\Exceptions\DuplicateKeyException; use Statamic\Stache\Indexes; use Statamic\Stache\Indexes\Index; +use Statamic\Stache\Indexes\Value; use Statamic\Support\Arr; abstract class Store