From 000352052d220cf316bd230595a583ffa4de28ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Tue, 25 Oct 2016 20:11:58 +0200 Subject: [PATCH] FEATURE: make nicer URL uniqueness check --- .../Admin/Content/EditContent.php | 3 +- .../Interactions/Admin/Content/NewContent.php | 13 ++++---- ...d_unique_key_to_deleted_at_in_contents.php | 33 +++++++++++++++++++ 3 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 database/migrations/2016_10_25_174000_add_unique_key_to_deleted_at_in_contents.php diff --git a/app/CMS/Interactions/Admin/Content/EditContent.php b/app/CMS/Interactions/Admin/Content/EditContent.php index 897d3098..94eca57b 100644 --- a/app/CMS/Interactions/Admin/Content/EditContent.php +++ b/app/CMS/Interactions/Admin/Content/EditContent.php @@ -12,6 +12,7 @@ use App\Models\FileManager\File; use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\Event; use Illuminate\Support\Str; +use Mcamara\LaravelLocalization\Facades\LaravelLocalization; class EditContent implements Interaction { @@ -81,7 +82,7 @@ class EditContent implements Interaction return [ 'title' => 'required', - 'url' => 'required|unique:contents,url,' . $id, + 'url' => 'required|unique:contents,url,' . $id.',id,deleted_at,NULL,language,' . LaravelLocalization::getCurrentLocale(), 'publishedFrom' => 'date', 'publishedTo' => 'date', 'titlePhoto' => 'exists:files,id', diff --git a/app/CMS/Interactions/Admin/Content/NewContent.php b/app/CMS/Interactions/Admin/Content/NewContent.php index 14713e0c..b65d7ee0 100644 --- a/app/CMS/Interactions/Admin/Content/NewContent.php +++ b/app/CMS/Interactions/Admin/Content/NewContent.php @@ -4,14 +4,11 @@ namespace App\Cms\Interactions\Admin\Content; use App\CMS\Contracts\Interaction; use App\CMS\Contracts\Repositories\Content as ContentRepository; use App\CMS\Contracts\Repositories\Module; +use App\CMS\Enumerations\ContentStatuses; use App\CMS\Helpers\CurrentTemplate; -use App\Events\CreateNewContent; use App\Models\Content\Content; use App\Models\FileManager\File; -use Carbon\Carbon; use Illuminate\Support\Facades\App; -use Illuminate\Support\Facades\Event; -use Illuminate\Support\Str; use Mcamara\LaravelLocalization\Facades\LaravelLocalization; class NewContent implements Interaction @@ -75,11 +72,15 @@ class NewContent implements Interaction public function getValidationRules($parameters = []) { + // get all available statuses + $statuses = ContentStatuses::getSimple(); + $statuses = implode(',', $statuses); + return [ 'titlePhoto' => 'image', 'title' => 'required', - 'url' => 'required|unique:contents,url', - 'status' => 'required|in:draft,protected,public', + 'url' => 'required|unique:contents,url,NULL,id,deleted_at,NULL,language,' . LaravelLocalization::getCurrentLocale(), + 'status' => 'required|in:'.$statuses, 'parentPage' => 'exists:contents,id', 'publishedFrom' => 'date', 'publishedTo' => 'date', diff --git a/database/migrations/2016_10_25_174000_add_unique_key_to_deleted_at_in_contents.php b/database/migrations/2016_10_25_174000_add_unique_key_to_deleted_at_in_contents.php new file mode 100644 index 00000000..228d007d --- /dev/null +++ b/database/migrations/2016_10_25_174000_add_unique_key_to_deleted_at_in_contents.php @@ -0,0 +1,33 @@ +dropUnique(['language', 'url']); + $table->unique(['language', 'url', 'deleted_at']); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('contents', function (Blueprint $table) { + $table->dropUnique(['language', 'url', 'deleted_at']); + $table->unique(['language', 'url']); + }); + } +}