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()) +