From 0c13543c28cbd2354cb846eb1f7c1d9a905f5a7a Mon Sep 17 00:00:00 2001 From: Htet Phone Aung Date: Wed, 6 Sep 2023 14:37:03 +0630 Subject: [PATCH] added policies --- app/Http/Controllers/ChapterController.php | 5 +- app/Http/Controllers/HomeController.php | 4 +- app/Http/Controllers/MangaController.php | 6 ++ app/Http/Controllers/PageController.php | 9 +-- app/Http/Controllers/UserController.php | 17 +++++ app/Http/Kernel.php | 4 ++ app/Http/Middleware/AdminAccess.php | 27 ++++++++ app/Http/Requests/StoreMangaRequest.php | 3 +- app/Models/Chapter.php | 2 +- app/Models/User.php | 5 ++ app/Policies/ChapterPolicy.php | 10 ++- app/Policies/MangaPolicy.php | 20 ++++-- app/Providers/AppServiceProvider.php | 2 +- app/Providers/AuthServiceProvider.php | 13 +++- app/Providers/RouteServiceProvider.php | 2 +- database/factories/ChapterFactory.php | 1 + .../2014_10_12_000000_create_users_table.php | 2 +- ...023_08_23_115026_create_chapters_table.php | 1 + resources/views/chapter/create.blade.php | 62 ++++++++++------- resources/views/chapter/index.blade.php | 14 ++-- .../views/chapter/manageChapter.blade.php | 9 ++- resources/views/chapter_page.blade.php | 48 +++---------- .../views/components/card-card-body.blade.php | 5 ++ .../{partials => components}/footer.blade.php | 2 +- .../views/components/inner-manga.blade.php | 26 +++++++ .../views/components/latest-chapter.blade.php | 9 +++ .../views/components/manga-list.blade.php | 69 +++++++++++++++++++ .../components/outter-manga-frame.blade.php | 20 ++++++ resources/views/index.blade.php | 64 ++++------------- resources/views/layouts/master.blade.php | 19 ++--- resources/views/manga.blade.php | 30 +++----- resources/views/manga/create.blade.php | 51 +++++++------- resources/views/manga/detail.blade.php | 6 +- resources/views/manga/index.blade.php | 67 +----------------- .../partials/chapter-breadcrumb.blade.php | 8 +++ .../views/partials/chapter-paginate.blade.php | 4 ++ .../partials/chapter-select-box.blade.php | 8 +++ resources/views/partials/hot-manga.blade.php | 25 +++---- .../views/partials/manga-breadcrum.blade.php | 6 ++ resources/views/partials/side-bar.blade.php | 20 ++++-- resources/views/user/index.blade.php | 43 ++++++++++++ routes/web.php | 16 +++-- 42 files changed, 475 insertions(+), 289 deletions(-) create mode 100644 app/Http/Controllers/UserController.php create mode 100644 app/Http/Middleware/AdminAccess.php create mode 100644 resources/views/components/card-card-body.blade.php rename resources/views/{partials => components}/footer.blade.php (73%) create mode 100644 resources/views/components/inner-manga.blade.php create mode 100644 resources/views/components/latest-chapter.blade.php create mode 100644 resources/views/components/manga-list.blade.php create mode 100644 resources/views/components/outter-manga-frame.blade.php create mode 100644 resources/views/partials/chapter-breadcrumb.blade.php create mode 100644 resources/views/partials/chapter-paginate.blade.php create mode 100644 resources/views/partials/chapter-select-box.blade.php create mode 100644 resources/views/partials/manga-breadcrum.blade.php create mode 100644 resources/views/user/index.blade.php diff --git a/app/Http/Controllers/ChapterController.php b/app/Http/Controllers/ChapterController.php index f685f3e..0952afb 100644 --- a/app/Http/Controllers/ChapterController.php +++ b/app/Http/Controllers/ChapterController.php @@ -41,7 +41,9 @@ class ChapterController extends Controller } $formData['images'] = $images; } - + //chapter number + $manga = Manga::where('id', $request->manga_id)->first(); + $formData['chapter_no'] = $manga->chapters->count() + 1; Chapter::create($formData); return redirect()->route('home')->with(['message' => 'New Chapter has been added!!']); @@ -77,6 +79,7 @@ class ChapterController extends Controller */ public function destroy(Chapter $chapter) { + $this->authorize('delete', $chapter); $chapter->delete(); return back()->with(['message' => "Successfully Deleted!"]); } diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 2631f8f..703b14c 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -13,7 +13,7 @@ class HomeController extends Controller */ public function __construct() { - $this->middleware('auth'); + $this->middleware(['auth', 'admin.access']); } /** @@ -26,5 +26,5 @@ class HomeController extends Controller return view('home'); } - + } diff --git a/app/Http/Controllers/MangaController.php b/app/Http/Controllers/MangaController.php index a5b8235..2e620fe 100644 --- a/app/Http/Controllers/MangaController.php +++ b/app/Http/Controllers/MangaController.php @@ -61,6 +61,8 @@ class MangaController extends Controller */ public function edit(Manga $manga) { + $this->authorize('update', $manga); + return view('manga.edit', compact('manga')); } @@ -69,6 +71,8 @@ class MangaController extends Controller */ public function update(UpdateMangaRequest $request, Manga $manga) { + $this->authorize('update', $manga); + $formData = $request->validated(); $formData['slug'] = Str::slug($request->title); $formData['excerpt'] = Str::words($request->summary, 10, '...'); @@ -85,6 +89,8 @@ class MangaController extends Controller */ public function destroy(Manga $manga) { + $this->authorize('delete', $manga); + $manga->delete(); return redirect()->back()->with(['message' => 'Manga has been deleted!']); } diff --git a/app/Http/Controllers/PageController.php b/app/Http/Controllers/PageController.php index adb4ac0..404e3d2 100644 --- a/app/Http/Controllers/PageController.php +++ b/app/Http/Controllers/PageController.php @@ -10,11 +10,9 @@ class PageController extends Controller { public function index() { - $mangas = Manga::latest('id')->paginate(10)->withQueryString(); - $hotMangas = Manga::latest('id')->limit('3')->get(); + $mangas = Manga::latest('id')->paginate(8)->withQueryString(); return view('index', [ - 'mangas' => $mangas, - 'hotMangas' => $hotMangas + 'mangas' => $mangas ]); } @@ -24,9 +22,8 @@ class PageController extends Controller return view('manga', compact('manga')); } - public function chapter(Manga $manga, Chapter $chapter ) + public function chapter(Manga $manga, Chapter $chapter) { return view('chapter_page', ['manga' => $manga, 'chapter' => $chapter]); } - } diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php new file mode 100644 index 0000000..997d270 --- /dev/null +++ b/app/Http/Controllers/UserController.php @@ -0,0 +1,17 @@ +authorize('admin-only', Auth::user()->role); + $users = User::latest('id')->paginate(10)->withQueryString(); + return view('user.index', compact('users')); + } +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 494c050..555face 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -2,6 +2,7 @@ namespace App\Http; +use App\Http\Middleware\AdminAccess; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel @@ -21,6 +22,8 @@ class Kernel extends HttpKernel \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \App\Http\Middleware\TrimStrings::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, + AdminAccess::class + ]; /** @@ -64,5 +67,6 @@ class Kernel extends HttpKernel 'signed' => \App\Http\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + 'admin.access' => AdminAccess::class ]; } diff --git a/app/Http/Middleware/AdminAccess.php b/app/Http/Middleware/AdminAccess.php new file mode 100644 index 0000000..2d019d2 --- /dev/null +++ b/app/Http/Middleware/AdminAccess.php @@ -0,0 +1,27 @@ +role == "user") { + return redirect()->route('page.index')->with(['message' => 'You are not an admin!!']); + } + } + return $next($request); + } +} diff --git a/app/Http/Requests/StoreMangaRequest.php b/app/Http/Requests/StoreMangaRequest.php index b30e909..3cf9ccc 100644 --- a/app/Http/Requests/StoreMangaRequest.php +++ b/app/Http/Requests/StoreMangaRequest.php @@ -23,7 +23,8 @@ class StoreMangaRequest extends FormRequest { return [ 'title' => 'required|min:3|max:100', - 'summary' => 'required|min:3' + 'summary' => 'required|min:3', + 'cover' => 'required|file' ]; } } diff --git a/app/Models/Chapter.php b/app/Models/Chapter.php index 0460a6b..ec4c507 100644 --- a/app/Models/Chapter.php +++ b/app/Models/Chapter.php @@ -9,7 +9,7 @@ class Chapter extends Model { use HasFactory; - protected $fillable = ['title', 'images', 'manga_id', 'user_id']; + protected $fillable = ['title', 'images', 'manga_id', 'user_id', 'chapter_no']; protected $casts = [ 'images' => 'array' ]; diff --git a/app/Models/User.php b/app/Models/User.php index 4d7f70f..a1235b9 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -42,4 +42,9 @@ class User extends Authenticatable 'email_verified_at' => 'datetime', 'password' => 'hashed', ]; + + public function mangas() + { + return $this->hasMany(Manga::class, 'author_id'); + } } diff --git a/app/Policies/ChapterPolicy.php b/app/Policies/ChapterPolicy.php index 4f0c3cb..fe65607 100644 --- a/app/Policies/ChapterPolicy.php +++ b/app/Policies/ChapterPolicy.php @@ -8,6 +8,14 @@ use Illuminate\Auth\Access\Response; class ChapterPolicy { + //access all to admin + public function before(User $user) + { + if($user->role === 'admin') { + return true; + } + } + /** * Determine whether the user can view any models. */ @@ -45,7 +53,7 @@ class ChapterPolicy */ public function delete(User $user, Chapter $chapter): bool { - // + return $user->id == $chapter->user_id; } /** diff --git a/app/Policies/MangaPolicy.php b/app/Policies/MangaPolicy.php index a794aca..4a1b078 100644 --- a/app/Policies/MangaPolicy.php +++ b/app/Policies/MangaPolicy.php @@ -11,9 +11,19 @@ class MangaPolicy /** * Determine whether the user can view any models. */ - public function viewAny(User $user): bool + + //access all to admin + public function before(User $user) { - // + if($user->role === 'admin') { + return true; + } + } + + + public function viewAny(User $user, Manga $manga): bool + { + // return $user->id == $manga->author_id; } /** @@ -21,7 +31,7 @@ class MangaPolicy */ public function view(User $user, Manga $manga): bool { - // + return $user->id == $manga->author_id; } /** @@ -37,7 +47,7 @@ class MangaPolicy */ public function update(User $user, Manga $manga): bool { - // + return $user->id == $manga->author_id; } /** @@ -45,7 +55,7 @@ class MangaPolicy */ public function delete(User $user, Manga $manga): bool { - // + return $user->id == $manga->author_id; } /** diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 86b1719..b6e0fe6 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -20,6 +20,6 @@ class AppServiceProvider extends ServiceProvider */ public function boot(): void { - Paginator::useBootstrapFive(); + Paginator::useBootstrap(); } } diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index 54756cd..b78f5c5 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -3,6 +3,13 @@ namespace App\Providers; // use Illuminate\Support\Facades\Gate; + +use App\Models\User; +use App\Models\Manga; +use App\Models\Chapter; +use App\Policies\MangaPolicy; +use App\Policies\ChapterPolicy; +use Illuminate\Support\Facades\Gate; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; class AuthServiceProvider extends ServiceProvider @@ -13,7 +20,8 @@ class AuthServiceProvider extends ServiceProvider * @var array */ protected $policies = [ - // + Manga::class => MangaPolicy::class, + Chapter::class => ChapterPolicy::class ]; /** @@ -21,6 +29,7 @@ class AuthServiceProvider extends ServiceProvider */ public function boot(): void { - // + //gates here + Gate::define('admin-only', fn(User $user) => $user->role === 'admin'); } } diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 1cf5f15..973b544 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -17,7 +17,7 @@ class RouteServiceProvider extends ServiceProvider * * @var string */ - public const HOME = '/home'; + public const HOME = '/'; /** * Define your route model bindings, pattern filters, and other route configuration. diff --git a/database/factories/ChapterFactory.php b/database/factories/ChapterFactory.php index 12fe81a..81f0588 100644 --- a/database/factories/ChapterFactory.php +++ b/database/factories/ChapterFactory.php @@ -20,6 +20,7 @@ class ChapterFactory extends Factory for ($i = 0; $i < 10; $i++) { $images[] = fake()->imageUrl(400,400,'cats'); } + return [ 'title' => fake()->title(), 'images' => $images, diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index ac18148..67826cd 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -15,7 +15,7 @@ return new class extends Migration $table->id(); $table->string('name'); $table->string('email')->unique(); - $table->enum('role', ['user', 'admin'])->default('user'); + $table->enum('role', ['user', 'author', 'admin'])->default('user'); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); diff --git a/database/migrations/2023_08_23_115026_create_chapters_table.php b/database/migrations/2023_08_23_115026_create_chapters_table.php index 1b62d18..5ccfbf2 100644 --- a/database/migrations/2023_08_23_115026_create_chapters_table.php +++ b/database/migrations/2023_08_23_115026_create_chapters_table.php @@ -14,6 +14,7 @@ return new class extends Migration Schema::create('chapters', function (Blueprint $table) { $table->id(); $table->string('title')->nullable(); + $table->unsignedInteger('chapter_no')->nullable(); $table->json('images'); $table->foreignId('manga_id')->constrained()->onDelete('cascade'); $table->foreignId('user_id'); diff --git a/resources/views/chapter/create.blade.php b/resources/views/chapter/create.blade.php index 63fae88..a9968c1 100644 --- a/resources/views/chapter/create.blade.php +++ b/resources/views/chapter/create.blade.php @@ -1,33 +1,43 @@ @extends('layouts.app') @section('content') -
- @csrf -
- - - @error('manga_id') -

{{ $message }}

- @enderror -
-
- - - @error('title') -

{{ $message }}

- @enderror + + + + + @csrf +
+ + + @error('manga_id') +

{{ $message }}

+ @enderror +
+
+ + + @error('title') +

{{ $message }}

+ @enderror +
-
- - -
+
+ + +
- - + + +
@endsection diff --git a/resources/views/chapter/index.blade.php b/resources/views/chapter/index.blade.php index f839542..c8177b3 100644 --- a/resources/views/chapter/index.blade.php +++ b/resources/views/chapter/index.blade.php @@ -2,18 +2,20 @@ @section('content')
+

Choose Your Manga and See Chapters

+
@foreach ($mangas as $manga) -
+
- - @endforeach diff --git a/resources/views/chapter/manageChapter.blade.php b/resources/views/chapter/manageChapter.blade.php index 8f3fa5b..40beb13 100644 --- a/resources/views/chapter/manageChapter.blade.php +++ b/resources/views/chapter/manageChapter.blade.php @@ -7,12 +7,15 @@

{{ $manga->title }}


-
Chapters
+
+
Manage Your Chapters
+
+
- @foreach ($manga->chapters()->latest('id')->get() as $chapter) + @foreach ($manga->chapters()->latest('id')->paginate(20) as $chapter)
-

{{ $chapter->title }}

+

Chapter {{ $chapter->chapter_no }}

@csrf diff --git a/resources/views/chapter_page.blade.php b/resources/views/chapter_page.blade.php index a5efd0b..b135637 100644 --- a/resources/views/chapter_page.blade.php +++ b/resources/views/chapter_page.blade.php @@ -3,55 +3,27 @@

{{ $manga->title }} - {{ $chapter->title }}

- {{-- breadcrumb --}} - + @include('partials.chapter-breadcrumb') + - {{-- select box and paginate --}}
-
- -
-
- Previous - Next -
+ @include('partials.chapter-select-box') + @include('partials.chapter-paginate')
{{-- manga images --}}
@foreach ($chapter->images as $image) - + @endforeach

- {{-- chapters and pagiantion --}} -
-
- -
-
- Previous - Next - {{-- {{ $allChap->links() }} --}} -
+ +
+ @include('partials.chapter-select-box') + @include('partials.chapter-paginate')
+
@endsection diff --git a/resources/views/components/card-card-body.blade.php b/resources/views/components/card-card-body.blade.php new file mode 100644 index 0000000..85c1016 --- /dev/null +++ b/resources/views/components/card-card-body.blade.php @@ -0,0 +1,5 @@ +
+
+ {{$slot}} +
+
diff --git a/resources/views/partials/footer.blade.php b/resources/views/components/footer.blade.php similarity index 73% rename from resources/views/partials/footer.blade.php rename to resources/views/components/footer.blade.php index 9fe9296..210b755 100644 --- a/resources/views/partials/footer.blade.php +++ b/resources/views/components/footer.blade.php @@ -1,3 +1,3 @@ -
+

Copyright All Served @MangaDex

diff --git a/resources/views/components/inner-manga.blade.php b/resources/views/components/inner-manga.blade.php new file mode 100644 index 0000000..b46fdd8 --- /dev/null +++ b/resources/views/components/inner-manga.blade.php @@ -0,0 +1,26 @@ +@props(['manga']) +
+
+ +
+

{{ $manga->title }}

+

{{ $manga->summary }}

+ +
diff --git a/resources/views/components/latest-chapter.blade.php b/resources/views/components/latest-chapter.blade.php new file mode 100644 index 0000000..2b54b68 --- /dev/null +++ b/resources/views/components/latest-chapter.blade.php @@ -0,0 +1,9 @@ +@props(['manga', 'chapter']) + +
+ + Chapter {{ $chapter->chapter_no }} + + {{ $chapter->created_at->diffForHumans() }} +
diff --git a/resources/views/components/manga-list.blade.php b/resources/views/components/manga-list.blade.php new file mode 100644 index 0000000..372a75e --- /dev/null +++ b/resources/views/components/manga-list.blade.php @@ -0,0 +1,69 @@ +@props(['mangas']) + +
Manga List
+
+
+ + + + + + + + + + + + @forelse ($mangas as $manga) + + + + + + + + + @empty +

No Manga Yet

+ @endforelse + + +
#TitleAuthorTotal ChaptersHandle
{{ $manga->id }} +

{{ $manga->title }}

+ {{ $manga->excerpt }} +
+ {{ $manga->user->name }} + + {{ $manga->chapters->count() }} + +
+ @can('view', $manga) + + + @endcan + + @can('update', $manga) + + + + @endcan + @can('delete', $manga) + + @endcan +
+ + @csrf + @method('delete') + + +
+
+ +
+ {{ $mangas->links() }} +
diff --git a/resources/views/components/outter-manga-frame.blade.php b/resources/views/components/outter-manga-frame.blade.php new file mode 100644 index 0000000..b8f7a5f --- /dev/null +++ b/resources/views/components/outter-manga-frame.blade.php @@ -0,0 +1,20 @@ +@props(['manga']) + +
+
+
+ + img + +
+
+
{{ $manga->title }}
+ @forelse ($manga->chapters()->latest('id')->limit(2)->get() as $chapter) + + @empty +

No Chapter Yet

+ @endforelse +
+
+
diff --git a/resources/views/index.blade.php b/resources/views/index.blade.php index f42079f..0a491eb 100644 --- a/resources/views/index.blade.php +++ b/resources/views/index.blade.php @@ -5,65 +5,27 @@
- @foreach ($mangas as $manga) -
-
-
- - img - -
-
-
{{ $manga->title }}
- @forelse ($manga->chapters()->latest('id')->limit(2)->get() as $chapter) - - - {{ $chapter->title }} - - - {{ $chapter->created_at->diffforhumans() }} - - + @forelse ($mangas as $manga) + + @empty +

No Manga Yet

+ @endforelse - @empty - @endforelse -
-
-
- @endforeach - {{--
-
-
- img -
-
-
The Villainous Desciple
-
- Chapter - 5 - 5 mins ago -
-
- Chapter - 4 - 4 mins ago -
-
-
-
--}}
+
@include('partials.hot-manga')
+
+
+ {{ $mangas->links() }} +
+
-@endsection +@endsection @section('footer') - @include('partials.footer') + @endsection diff --git a/resources/views/layouts/master.blade.php b/resources/views/layouts/master.blade.php index 78b4d55..0d92503 100644 --- a/resources/views/layouts/master.blade.php +++ b/resources/views/layouts/master.blade.php @@ -12,16 +12,19 @@ - - @include('partials.nav') - @include('partials.patreon-nav') + + @include('partials.nav') + @include('partials.patreon-nav') - -
- @yield('content') -
+ +
+ @yield('content') +
+ @include('partials.alert-msg') - @yield('footer') + @yield('footer') + + diff --git a/resources/views/manga.blade.php b/resources/views/manga.blade.php index 521c308..ae7a743 100644 --- a/resources/views/manga.blade.php +++ b/resources/views/manga.blade.php @@ -1,28 +1,20 @@ @extends('layouts.master') @section('content') - Back -
-
- + + @include('partials.manga-breadcrum') + +
+
+ +
+ +
+ @include('partials.hot-manga')
-

{{ $manga->title }}

-

{{ $manga->summary }}

-
    -
    - Chapters -
    - @forelse ($manga->chapters()->latest('id')->get() as $chapter) - - {{ $chapter->title }} - - @empty -

    No Chapter Yet!

    - @endforelse -
@endsection @section('footer') - @include('partials.footer') + @endsection diff --git a/resources/views/manga/create.blade.php b/resources/views/manga/create.blade.php index 10ebee4..df0147e 100644 --- a/resources/views/manga/create.blade.php +++ b/resources/views/manga/create.blade.php @@ -1,29 +1,30 @@ @extends('layouts.app') @section('content') -
- @csrf -
- - - @error('title') -

{{ $message }}

- @enderror -
-
- - -
-
- - - @error('summary') -

{{ $message }}

- @enderror -
- -
+ + @error('summary') +

{{ $message }}

+ @enderror +
+ + + @endsection - diff --git a/resources/views/manga/detail.blade.php b/resources/views/manga/detail.blade.php index 573506f..eccd634 100644 --- a/resources/views/manga/detail.blade.php +++ b/resources/views/manga/detail.blade.php @@ -9,7 +9,7 @@

Cover Image :

- +

Summary :

@@ -18,10 +18,10 @@

Total Chapter : {{$manga->chapters->count()}} chapters

- +
diff --git a/resources/views/manga/index.blade.php b/resources/views/manga/index.blade.php index 5baad81..94f88e9 100644 --- a/resources/views/manga/index.blade.php +++ b/resources/views/manga/index.blade.php @@ -1,68 +1,7 @@ @extends('layouts.app') @section('content') -
-
-
Manga List
-
-
- - - - - - - - - - - - @forelse ($mangas as $manga) - - - - - - - - - @empty - @endforelse - - -
#TitleAuthorTotal ChaptersHandle
{{ $manga->id }} -

{{ $manga->title }}

- {{ $manga->excerpt }} -
- {{ $manga->user->name }} - - {{$manga->chapters->count()}} - -
- - - - - - -
-
- @csrf - @method('delete') - -
-
-
- -
- {{ $mangas->links() }} -
-
-
- + + + @endsection diff --git a/resources/views/partials/chapter-breadcrumb.blade.php b/resources/views/partials/chapter-breadcrumb.blade.php new file mode 100644 index 0000000..9100df3 --- /dev/null +++ b/resources/views/partials/chapter-breadcrumb.blade.php @@ -0,0 +1,8 @@ + diff --git a/resources/views/partials/chapter-paginate.blade.php b/resources/views/partials/chapter-paginate.blade.php new file mode 100644 index 0000000..4ee8cb3 --- /dev/null +++ b/resources/views/partials/chapter-paginate.blade.php @@ -0,0 +1,4 @@ +
+ Previous + Next +
diff --git a/resources/views/partials/chapter-select-box.blade.php b/resources/views/partials/chapter-select-box.blade.php new file mode 100644 index 0000000..2d3a823 --- /dev/null +++ b/resources/views/partials/chapter-select-box.blade.php @@ -0,0 +1,8 @@ +
+ +
diff --git a/resources/views/partials/hot-manga.blade.php b/resources/views/partials/hot-manga.blade.php index c1931b1..0102031 100644 --- a/resources/views/partials/hot-manga.blade.php +++ b/resources/views/partials/hot-manga.blade.php @@ -1,25 +1,26 @@

Manga Hot

- @foreach ($hotMangas as $hotManga) + @forelse (App\Models\Manga::latest('id')->limit(3)->get() as $hotManga)
- img + + img +

{{ $hotManga->title }}

- @foreach ($hotManga->chapters()->latest('id')->limit(2)->get() as $hotChap) -
- - {{ $hotChap->title }} - - {{$hotChap->created_at->diffForHumans()}} -
- @endforeach + @foreach ($hotManga->chapters()->latest('id')->limit(2)->get() as $hotChap) + + @endforeach +
- @endforeach + + @empty +

No Hot Manga Yet

+ @endforelse
diff --git a/resources/views/partials/manga-breadcrum.blade.php b/resources/views/partials/manga-breadcrum.blade.php new file mode 100644 index 0000000..bf9501d --- /dev/null +++ b/resources/views/partials/manga-breadcrum.blade.php @@ -0,0 +1,6 @@ + diff --git a/resources/views/partials/side-bar.blade.php b/resources/views/partials/side-bar.blade.php index 5689066..88b1fb8 100644 --- a/resources/views/partials/side-bar.blade.php +++ b/resources/views/partials/side-bar.blade.php @@ -1,11 +1,19 @@ - - diff --git a/resources/views/user/index.blade.php b/resources/views/user/index.blade.php new file mode 100644 index 0000000..2af5410 --- /dev/null +++ b/resources/views/user/index.blade.php @@ -0,0 +1,43 @@ +@extends('layouts.app') + +@section('content') + +
User List
+
+
+ + + + + + + + + + + + + @forelse ($users as $key => $user) + + + + + + + + @empty +

No User Yet

+ @endforelse + +
#NameRoleManga Count(created) Created_at
{{ $key }} {{ $user->name }} {{ $user->role }} {{ $user->mangas->count() }} +

+ {{ $user->created_at->format('H:i a') }}

+

+ {{ $user->created_at->format('d-m-Y') }}

+
+
+
+ {{$users->links()}} +
+
+@endsection diff --git a/routes/web.php b/routes/web.php index 4dceeb7..f5064ea 100644 --- a/routes/web.php +++ b/routes/web.php @@ -4,6 +4,7 @@ use App\Http\Controllers\ChapterController; use App\Http\Controllers\HomeController; use App\Http\Controllers\MangaController; use App\Http\Controllers\PageController; +use App\Http\Controllers\UserController; use App\Models\Chapter; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Route; @@ -19,8 +20,8 @@ use Illuminate\Support\Facades\Route; | */ -Route::controller(PageController::class)->group(function() { - Route::get('/','index')->name('page.index'); +Route::controller(PageController::class)->group(function () { + Route::get('/', 'index')->name('page.index'); Route::get('/MangaDex/manga/{slug}', 'manga')->name('page.manga'); Route::get('/manga/{manga:slug}/chapter/{chapter}', 'chapter')->name('page.chapter'); }); @@ -29,7 +30,12 @@ Auth::routes(); Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home'); -Route::resource('manga', MangaController::class)->middleware('auth'); +Route::middleware(['auth', 'admin.access'])->group(function () { + Route::resource('manga', MangaController::class); -Route::resource('chapter', ChapterController::class)->middleware('auth'); -Route::get('/chapters/manage/{manga:slug}', [ChapterController::class, 'manage'])->name('chapters.manage')->middleware('auth'); + Route::resource('chapter', ChapterController::class); + + Route::get('/chapters/manage/{manga:slug}', [ChapterController::class, 'manage'])->name('chapters.manage'); + + Route::get('/users-list', [UserController::class, 'index'])->name('users.list')->middleware('can:admin-only'); +});