Updated project for admin panel
This commit is contained in:
parent
984d2eeae6
commit
282e5ccc46
63
app/Http/Controllers/Dashboard/ProjectController.php
Normal file
63
app/Http/Controllers/Dashboard/ProjectController.php
Normal file
@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Dashboard;
|
||||
|
||||
use App\Http\Requests\ProjectRequest;
|
||||
use App\Models\Project;
|
||||
use App\Repository\Interfaces\ProjectRepository;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class ProjectController
|
||||
{
|
||||
|
||||
public function __construct(
|
||||
private ProjectRepository $projectRepository
|
||||
) {}
|
||||
|
||||
public function edit(Project $project): View
|
||||
{
|
||||
return view('dashboard.projects.edit', compact('project'));
|
||||
}
|
||||
|
||||
public function update(ProjectRequest $request, Project $project): RedirectResponse
|
||||
{
|
||||
$validated = $request->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 .'"');
|
||||
}
|
||||
|
||||
}
|
37
app/Http/Requests/ProjectRequest.php
Normal file
37
app/Http/Requests/ProjectRequest.php
Normal file
@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class ProjectRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'title' => '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',
|
||||
];
|
||||
}
|
||||
}
|
@ -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,
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
25
database/seeders/UserSeeder.php
Normal file
25
database/seeders/UserSeeder.php
Normal file
@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
|
||||
class UserSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
User::query()
|
||||
->create([
|
||||
'name' => 'Kamil Niemczycki',
|
||||
'email' => 'admin@admin.pl',
|
||||
'password' => Hash::make('password123^')
|
||||
]);
|
||||
}
|
||||
}
|
16
resources/sass/tags/form.scss
vendored
16
resources/sass/tags/form.scss
vendored
@ -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 {
|
||||
|
76
resources/views/dashboard/projects/create.blade.php
Normal file
76
resources/views/dashboard/projects/create.blade.php
Normal file
@ -0,0 +1,76 @@
|
||||
@extends('layout.app')
|
||||
@section('title', 'Utwórz projekt')
|
||||
|
||||
@section('main')
|
||||
@if (\Session::has('message'))
|
||||
<span>{{ \Session::get('message') }}</span>
|
||||
@endif
|
||||
@if ($errors->any())
|
||||
<div class="alert alert-danger">
|
||||
<ul>
|
||||
@foreach ($errors->all() as $error)
|
||||
<li>{{ $error }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
<form class="form" method="POST" action="{{ route('admin.project.store') }}">
|
||||
@csrf
|
||||
|
||||
<label for="title">Tytuł projektu</label>
|
||||
<input id="title" type="text" name="title" value="{{ old('title') }}" placeholder="Tytuł">
|
||||
@error('title')
|
||||
<span class="error">{{ $message }}</span>
|
||||
@enderror
|
||||
|
||||
<label for="author">Autor</label>
|
||||
<input id="author" type="text" name="author" value="{{ old('author') }}" placeholder="Imię i nazwisko">
|
||||
@error('author')
|
||||
<span class="error">{{ $message }}</span>
|
||||
@enderror
|
||||
|
||||
<label for="categories">Kategorie</label>
|
||||
<input id="categories" type="text" name="categories" value="{{ old('categories') }}" placeholder="kategoria1, kategoria2">
|
||||
@error('categories')
|
||||
<span class="error">{{ $message }}</span>
|
||||
@enderror
|
||||
|
||||
<label for="release_date">Data wydania</label>
|
||||
<input id="release_date" type="date" name="release_date" value="{{ old('release_date') }}">
|
||||
@error('release_date')
|
||||
<span class="error">{{ $message }}</span>
|
||||
@enderror
|
||||
|
||||
<label for="update_date">Data aktualizacji</label>
|
||||
<input id="update_date" type="date" name="update_date" value="{{ old('update_date') }}">
|
||||
@error('update_date')
|
||||
<span class="error">{{ $message }}</span>
|
||||
@enderror
|
||||
|
||||
<label for="project_url">Adres projektu</label>
|
||||
<input id="project_url" type="text" name="project_url" value="{{ old('project_url') }}" placeholder="Adres www">
|
||||
@error('project_url')
|
||||
<span class="error">{{ $message }}</span>
|
||||
@enderror
|
||||
|
||||
<label for="project_version">Wersja projektu</label>
|
||||
<input id="project_version" type="text" name="project_version" value="{{ old('project_version') }}" placeholder="v1.0.0">
|
||||
@error('project_version')
|
||||
<span class="error">{{ $message }}</span>
|
||||
@enderror
|
||||
|
||||
<label for="description">Opis</label>
|
||||
<textarea id="description" name="description" placeholder="Ładny opis projektu">{{ old('description') }}</textarea>
|
||||
@error('description')
|
||||
<span class="error">{{ $message }}</span>
|
||||
@enderror
|
||||
|
||||
<label for="visible">Visible</label>
|
||||
<input id="visible" type="checkbox" name="visible" {{ old('visible') != 0 ? 'checked' : '' }}>
|
||||
|
||||
<input type="submit" value="Utwórz">
|
||||
</form>
|
||||
<div>
|
||||
<a href="{{ route('admin.home') }}"><< Cofnij</a>
|
||||
</div>
|
||||
@endsection
|
14
resources/views/dashboard/projects/delete.blade.php
Normal file
14
resources/views/dashboard/projects/delete.blade.php
Normal file
@ -0,0 +1,14 @@
|
||||
@extends('layout.app')
|
||||
@section('title', 'Delete project')
|
||||
|
||||
@section('main')
|
||||
<form method="POST" action="{{ route('admin.project.destroy', compact('project')) }}">
|
||||
@method('DELETE')
|
||||
@csrf
|
||||
Czy jesteś pewien, że chcesz usunąć projekt "{{ $project->title }}"?
|
||||
<input type="submit" value="Tak, usuń!">
|
||||
</form>
|
||||
<div>
|
||||
<a href="{{ route('admin.project.edit', compact('project')) }}"><< Cofnij</a>
|
||||
</div>
|
||||
@endsection
|
78
resources/views/dashboard/projects/edit.blade.php
Normal file
78
resources/views/dashboard/projects/edit.blade.php
Normal file
@ -0,0 +1,78 @@
|
||||
@extends('layout.app')
|
||||
@section('title', 'Login')
|
||||
|
||||
@section('main')
|
||||
@if (\Session::has('message'))
|
||||
<span>{{ \Session::get('message') }}</span>
|
||||
@endif
|
||||
@if ($errors->any())
|
||||
<div class="alert alert-danger">
|
||||
<ul>
|
||||
@foreach ($errors->all() as $error)
|
||||
<li>{{ $error }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
<form class="form" method="POST" action="{{ route('admin.project.update', compact('project')) }}">
|
||||
@method('PUT')
|
||||
@csrf
|
||||
|
||||
<label for="title">Tytuł projektu</label>
|
||||
<input id="title" type="text" name="title" value="{{ old('title', $project->title) }}" placeholder="Tytuł">
|
||||
@error('title')
|
||||
<span class="error">{{ $message }}</span>
|
||||
@enderror
|
||||
|
||||
<label for="author">Autor</label>
|
||||
<input id="author" type="text" name="author" value="{{ old('author', $project->author) }}" placeholder="Imię i nazwisko">
|
||||
@error('author')
|
||||
<span class="error">{{ $message }}</span>
|
||||
@enderror
|
||||
|
||||
<label for="categories">Kategorie</label>
|
||||
<input id="categories" type="text" name="categories" value="{{ old('categories', implode(', ', $project->categories)) }}" placeholder="kategoria1, kategoria2">
|
||||
@error('categories')
|
||||
<span class="error">{{ $message }}</span>
|
||||
@enderror
|
||||
|
||||
<label for="release_date">Data wydania</label>
|
||||
<input id="release_date" type="date" name="release_date" value="{{ old('release_date', $project->release_date) }}">
|
||||
@error('release_date')
|
||||
<span class="error">{{ $message }}</span>
|
||||
@enderror
|
||||
|
||||
<label for="update_date">Data aktualizacji</label>
|
||||
<input id="update_date" type="date" name="update_date" value="{{ old('update_date', $project->update_date) }}">
|
||||
@error('update_date')
|
||||
<span class="error">{{ $message }}</span>
|
||||
@enderror
|
||||
|
||||
<label for="project_url">Adres projektu</label>
|
||||
<input id="project_url" type="text" name="project_url" value="{{ old('project_url', $project->project_url) }}" placeholder="Adres www">
|
||||
@error('project_url')
|
||||
<span class="error">{{ $message }}</span>
|
||||
@enderror
|
||||
|
||||
<label for="project_version">Wersja projektu</label>
|
||||
<input id="project_version" type="text" name="project_version" value="{{ old('project_version', $project->project_version) }}" placeholder="v1.0.0">
|
||||
@error('project_version')
|
||||
<span class="error">{{ $message }}</span>
|
||||
@enderror
|
||||
|
||||
<label for="description">Opis</label>
|
||||
<textarea id="description" name="description" placeholder="Ładny opis projektu">{{ old('description', $project->description) }}</textarea>
|
||||
@error('description')
|
||||
<span class="error">{{ $message }}</span>
|
||||
@enderror
|
||||
|
||||
<label for="visible">Visible</label>
|
||||
<input id="visible" type="checkbox" name="visible" {{ old('visible') != 0 ? 'checked' : '' }}>
|
||||
|
||||
<input type="submit" value="Aktualizuj">
|
||||
</form>
|
||||
<div>
|
||||
<a href="{{ route('admin.project.delete', compact('project')) }}">USUŃ!</a><br>
|
||||
<a href="{{ route('admin.home') }}"><< Cofnij</a>
|
||||
</div>
|
||||
@endsection
|
@ -1,11 +1,11 @@
|
||||
<div class="projects">
|
||||
<header><h1>Projekty</h1></header>
|
||||
<a href="{{ route('admin.category.create') }}">
|
||||
<a href="{{ route('admin.project.create') }}">
|
||||
<button>Utwórz nowy projekt</button>
|
||||
</a>
|
||||
<ul class="project_items">
|
||||
@foreach ($projects as $project)
|
||||
<li class="project_element">{{ $project->title }} | <a href="{{ route('admin.category.edit', ['category' => $project->id]) }}">Edytuj</a></li>
|
||||
<li class="project_element">{{ $project->title }} | <a href="{{ route('admin.project.edit', compact('project')) }}">Edytuj</a></li>
|
||||
@endforeach
|
||||
<ul>
|
||||
</div>
|
||||
|
@ -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');
|
||||
});
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user