From 27dc110bdfccf5f5e8da3c19f7769d2f39945359 Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Wed, 15 Jun 2022 12:59:20 +0200 Subject: [PATCH] wip #4210 @0.5 --- .../Controllers/Operations/CloneEditOperation.php | 12 ++++++++++-- src/app/Magic/Fields/Model.php | 14 ++++++++++---- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/app/Http/Controllers/Operations/CloneEditOperation.php b/src/app/Http/Controllers/Operations/CloneEditOperation.php index dea8093..5df97fd 100644 --- a/src/app/Http/Controllers/Operations/CloneEditOperation.php +++ b/src/app/Http/Controllers/Operations/CloneEditOperation.php @@ -2,9 +2,9 @@ namespace Cubist\Backpack\Http\Controllers\Operations; +use Cubist\Backpack\Magic\Fields\Model; use Cubist\Backpack\Magic\Fields\SelectFromArray; use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel; -use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Route; trait CloneEditOperation @@ -34,7 +34,15 @@ trait CloneEditOperation if (isset($_GET['ajax'])) { $entry = call_user_func([$_GET['entry'], 'find'], $_GET['id']); - SelectFromArray::hashOptions($entry->getField($_GET['name'])['options'], $_GET['ajax']); + $field = $entry->getField($_GET['name']); + if ($field instanceof Model) { + $options = $field->_getOptions(); + } else if ($field instanceof SelectFromArray) { + $options = $field->getOptions(); + } else { + $options = []; + } + SelectFromArray::hashOptions($options, $_GET['ajax']); } return response()->redirectTo($url); diff --git a/src/app/Magic/Fields/Model.php b/src/app/Magic/Fields/Model.php index 9425c5f..ae29387 100644 --- a/src/app/Magic/Fields/Model.php +++ b/src/app/Magic/Fields/Model.php @@ -32,10 +32,11 @@ class Model extends Field $modelScope = $this->getAttribute('optionsmodel_scope', ''); $modelOrderBy = $this->getAttribute('optionsmodel_orderby', ''); $modelOrderByWay = $this->getAttribute('optionsmodel_orderby_way', 'asc'); - $baseCacheKey = '_getOption_Model_' . $modelClass . '-|' . $modelScope . '|-' . '!' . $modelOrderBy . '!' . $modelOrderByWay . '!!'; + $baseCacheKey = '_getOption_Model_' . $modelClass . '-|' . $modelScope; $globalCacheKey = $baseCacheKey . '|-' . $attr; $cacheKey = $globalCacheKey . '|-' . $bui; - $cacheKeysKey = $baseCacheKey . '/KEYS/' . '|-' . $bui; + $cacheKeysKey = $baseCacheKey . '/KEYS/' . '|-' . $bui . '|-' . '!' . $modelOrderBy . '!' . $modelOrderByWay . '!!'; + if (isset(static::$_options[$cacheKey])) { return static::$_options[$cacheKey]; } @@ -67,9 +68,14 @@ class Model extends Field } if (!isset(static::$_options[$cacheKeysKey])) { - static::$_options[$cacheKeysKey] = cache()->tags([$tag])->remember($cacheKeysKey, 86400, function () use ($modelClass) { + static::$_options[$cacheKeysKey] = cache()->tags([$tag])->remember($cacheKeysKey, 86400, function () use ($modelClass, $modelOrderBy, $modelOrderByWay) { set_time_limit(0); - return $modelClass::all()->modelKeys(); + /** @var Builder $q */ + $q = $modelClass::where('created_ok', 1); + if ($modelOrderBy) { + $q->orderBy($modelOrderBy, $modelOrderByWay); + } + return $q->get()->modelKeys(); }); } -- 2.39.5