From 282e5ccc46ff4b30b260568d9794c2af9b024d04 Mon Sep 17 00:00:00 2001 From: Kamil Niemczycki Date: Tue, 15 Feb 2022 22:35:59 +0100 Subject: [PATCH] Updated project for admin panel --- .../Dashboard/ProjectController.php | 63 +++++++++++++++ app/Http/Requests/ProjectRequest.php | 37 +++++++++ app/Http/Resources/ProjectResource.php | 3 +- app/Models/Project.php | 28 ++++++- app/Repository/ProjectRepository.php | 8 +- database/seeders/DatabaseSeeder.php | 5 +- database/seeders/UserSeeder.php | 25 ++++++ resources/sass/tags/form.scss | 16 +++- .../views/dashboard/projects/create.blade.php | 76 ++++++++++++++++++ .../views/dashboard/projects/delete.blade.php | 14 ++++ .../views/dashboard/projects/edit.blade.php | 78 +++++++++++++++++++ .../views/dashboard/projects/list.blade.php | 4 +- routes/web.php | 28 ++++++- 13 files changed, 371 insertions(+), 14 deletions(-) create mode 100644 app/Http/Controllers/Dashboard/ProjectController.php create mode 100644 app/Http/Requests/ProjectRequest.php create mode 100644 database/seeders/UserSeeder.php create mode 100644 resources/views/dashboard/projects/create.blade.php create mode 100644 resources/views/dashboard/projects/delete.blade.php create mode 100644 resources/views/dashboard/projects/edit.blade.php diff --git a/app/Http/Controllers/Dashboard/ProjectController.php b/app/Http/Controllers/Dashboard/ProjectController.php new file mode 100644 index 0000000..6e1613a --- /dev/null +++ b/app/Http/Controllers/Dashboard/ProjectController.php @@ -0,0 +1,63 @@ +validated(); + if ($this->projectRepository->update($project, $validated)) { + return back()->with('message', 'Zaktualizowano projekt!'); + } + + return back()->withError(['message_error', 'Wystąpił błąd podczas aktualizacji!']); + } + + public function create(): View + { + return view('dashboard.projects.create'); + } + + public function store(ProjectRequest $request): RedirectResponse + { + $validated = $request->validated(); + if ($project = $this->projectRepository->create($validated)) { + return redirect() + ->route('admin.project.update', compact('project')) + ->with('message', 'Utworzono projekt!'); + } + + return back()->withError(['message_error', 'Wystąpił błąd podczas tworzenia!']); + } + + public function delete(Project $project): View + { + return view('dashboard.projects.delete', compact('project')); + } + + public function destroy(Project $project): RedirectResponse + { + $title = $project->title; + $project->delete(); + return redirect()->route('admin.home')->with('message', 'Usunięto projekt "'. $title .'"'); + } + +} diff --git a/app/Http/Requests/ProjectRequest.php b/app/Http/Requests/ProjectRequest.php new file mode 100644 index 0000000..7183a34 --- /dev/null +++ b/app/Http/Requests/ProjectRequest.php @@ -0,0 +1,37 @@ + 'required|string|min:3|max:255', + 'author' => 'required|string|min:3|max:50', + 'categories' => 'nullable|string', + 'release_date' => 'required|date:Y-m-d', + 'update_date' => 'nullable|date:Y-m-d', + 'project_url' => 'nullable|string', + 'project_version' => 'nullable|string', + 'description' => 'nullable|string', + ]; + } +} diff --git a/app/Http/Resources/ProjectResource.php b/app/Http/Resources/ProjectResource.php index 3415951..1b7e67a 100644 --- a/app/Http/Resources/ProjectResource.php +++ b/app/Http/Resources/ProjectResource.php @@ -23,7 +23,8 @@ class ProjectResource extends JsonResource 'categories' => $this->categories, 'author' => $this->author, 'images' => $this->images, - 'release_data' => $this->release_data, + 'release_date' => $this->release_date, + 'update_date' => $this->release_date, 'project_url' => $this->project_url, 'project_version' => $this->project_version, 'description' => $this->description, diff --git a/app/Models/Project.php b/app/Models/Project.php index 3e34600..56a296b 100644 --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -25,6 +25,8 @@ class Project extends Model // use HasFactory; + protected $dateFormat = 'Y-m-d'; + protected $guarded = []; protected $casts = [ 'id' => 'integer', @@ -32,10 +34,34 @@ class Project extends Model 'categories' => 'array', 'author' => 'string', 'images' => 'array', - 'release_data' => 'datetime:d-m-Y', + 'release_date' => 'datetime:Y-m-d', + 'update_date' => 'datetime:Y-m-d', 'project_url' => 'string', 'project_version' => 'string', 'description' => 'string' ]; + public function getReleaseDateAttribute($value): String + { + return $value; + } + + public function setReleaseDateAttribute($value): void + { + $this->attributes['release_date'] = $value; + } + + public function getUpdateDateAttribute($value): String|null + { + return $value; + } + + public function setUpdateDateAttribute($value): void + { + if (!is_null($value)) + $this->attributes['update_date'] = $value; + else + $this->attributes['update_date'] = null; + } + } diff --git a/app/Repository/ProjectRepository.php b/app/Repository/ProjectRepository.php index bac03ac..3eb1280 100644 --- a/app/Repository/ProjectRepository.php +++ b/app/Repository/ProjectRepository.php @@ -63,7 +63,7 @@ class ProjectRepository implements ProjectRepositoryInterface $toSave['author'] = $data['author']; if (isset($data['release_date'])) - $toSave['release_date'] = Carbon::createFromFormat('Y-d-m', $data['release_date']); + $toSave['release_date'] = $data['release_date']; if (isset($data['project_url'])) $toSave['project_url'] = $data['project_url']; @@ -76,12 +76,16 @@ class ProjectRepository implements ProjectRepositoryInterface if (isset($data['categories']) && is_array($data['categories'])) $toSave['categories'] = $data['categories']; + else if (isset($data['categories']) && !empty($data['categories'])) + $toSave['categories'] = explode(',', str_replace(', ', ',', $data['categories'])); if (isset($data['images']) && is_array($data['images'])) $toSave['images'] = $data['images']; if (isset($data['update_date']) && !empty($data['update_date'])) - $toSave['update_date'] = Carbon::createFromFormat('Y-d-m', $data['update_date']); + $toSave['update_date'] = $data['update_date']; + else + $toSave['update_date'] = null; return $toSave; } diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 8842fac..3d0bbbc 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -14,8 +14,7 @@ class DatabaseSeeder extends Seeder public function run() { // \App\Models\User::factory(10)->create(); - $this->call( - CategorySeeder::class - ); + $this->call(CategorySeeder::class); + $this->call(UserSeeder::class); } } diff --git a/database/seeders/UserSeeder.php b/database/seeders/UserSeeder.php new file mode 100644 index 0000000..249c364 --- /dev/null +++ b/database/seeders/UserSeeder.php @@ -0,0 +1,25 @@ +create([ + 'name' => 'Kamil Niemczycki', + 'email' => 'admin@admin.pl', + 'password' => Hash::make('password123^') + ]); + } +} diff --git a/resources/sass/tags/form.scss b/resources/sass/tags/form.scss index ad5b80b..e30a960 100644 --- a/resources/sass/tags/form.scss +++ b/resources/sass/tags/form.scss @@ -1,10 +1,22 @@ form { - label, input { + max-width: 600px; + + input[type="text"], input[type="date"], textarea { + width: 100%; + } + + .form textarea { + min-width: 100%; + max-width: 100%; + min-height: 250px; + } + + label, input, textarea { display: block; margin: 5px 10px; } - input { + input, textarea { padding: 5px 10px; } span.error { diff --git a/resources/views/dashboard/projects/create.blade.php b/resources/views/dashboard/projects/create.blade.php new file mode 100644 index 0000000..f9895f6 --- /dev/null +++ b/resources/views/dashboard/projects/create.blade.php @@ -0,0 +1,76 @@ +@extends('layout.app') +@section('title', 'Utwórz projekt') + +@section('main') +@if (\Session::has('message')) + {{ \Session::get('message') }} +@endif +@if ($errors->any()) +
+ +
+@endif +
+ @csrf + + + + @error('title') + {{ $message }} + @enderror + + + + @error('author') + {{ $message }} + @enderror + + + + @error('categories') + {{ $message }} + @enderror + + + + @error('release_date') + {{ $message }} + @enderror + + + + @error('update_date') + {{ $message }} + @enderror + + + + @error('project_url') + {{ $message }} + @enderror + + + + @error('project_version') + {{ $message }} + @enderror + + + + @error('description') + {{ $message }} + @enderror + + + + + +
+
+ << Cofnij +
+@endsection diff --git a/resources/views/dashboard/projects/delete.blade.php b/resources/views/dashboard/projects/delete.blade.php new file mode 100644 index 0000000..119fd59 --- /dev/null +++ b/resources/views/dashboard/projects/delete.blade.php @@ -0,0 +1,14 @@ +@extends('layout.app') +@section('title', 'Delete project') + +@section('main') +
+ @method('DELETE') + @csrf + Czy jesteś pewien, że chcesz usunąć projekt "{{ $project->title }}"? + +
+
+ << Cofnij +
+@endsection diff --git a/resources/views/dashboard/projects/edit.blade.php b/resources/views/dashboard/projects/edit.blade.php new file mode 100644 index 0000000..fb4bc47 --- /dev/null +++ b/resources/views/dashboard/projects/edit.blade.php @@ -0,0 +1,78 @@ +@extends('layout.app') +@section('title', 'Login') + +@section('main') +@if (\Session::has('message')) + {{ \Session::get('message') }} +@endif +@if ($errors->any()) +
+ +
+@endif +
+ @method('PUT') + @csrf + + + + @error('title') + {{ $message }} + @enderror + + + + @error('author') + {{ $message }} + @enderror + + + + @error('categories') + {{ $message }} + @enderror + + + + @error('release_date') + {{ $message }} + @enderror + + + + @error('update_date') + {{ $message }} + @enderror + + + + @error('project_url') + {{ $message }} + @enderror + + + + @error('project_version') + {{ $message }} + @enderror + + + + @error('description') + {{ $message }} + @enderror + + + + + +
+
+ USUŃ!
+ << Cofnij +
+@endsection diff --git a/resources/views/dashboard/projects/list.blade.php b/resources/views/dashboard/projects/list.blade.php index 1a98a13..2dfe6b7 100644 --- a/resources/views/dashboard/projects/list.blade.php +++ b/resources/views/dashboard/projects/list.blade.php @@ -1,11 +1,11 @@

Projekty

- +
diff --git a/routes/web.php b/routes/web.php index d0793bd..d296dbb 100644 --- a/routes/web.php +++ b/routes/web.php @@ -21,19 +21,41 @@ Route::name('admin.')->group(function () { ->name('create'); Route::post('', 'CategoryController@store') ->name('store'); + Route::get('{category}', 'CategoryController@edit') ->name('edit'); Route::put('{category}', 'CategoryController@update') ->name('update'); + Route::get('{category}/delete', 'CategoryController@delete') ->name('delete'); Route::delete('{category}/delete', 'CategoryController@destroy') ->name('destroy'); }); + + Route::name('project.')->prefix('project')->group(function () { + Route::get('create', 'ProjectController@create') + ->name('create'); + Route::post('', 'ProjectController@store') + ->name('store'); + + Route::get('{project}', 'ProjectController@edit') + ->name('edit'); + Route::put('{project}', 'ProjectController@update') + ->name('update'); + + Route::get('{project}/delete', 'ProjectController@delete') + ->name('delete'); + Route::delete('{project}/delete', 'ProjectController@destroy') + ->name('destroy'); + }); }); Route::name('auth.')->namespace('Auth')->group(function () { - Route::get('login', 'LoginController@login')->name('login'); - Route::post('login', 'LoginController@authenticate')->name('authenticate'); - Route::post('logout', 'LoginController@logout')->name('logout'); + Route::get('login', 'LoginController@login') + ->name('login'); + Route::post('login', 'LoginController@authenticate') + ->name('authenticate'); + Route::post('logout', 'LoginController@logout') + ->name('logout'); }); });