From 4ee88ecafeb7025ac29e1b537abf9a68ab121b10 Mon Sep 17 00:00:00 2001 From: The Test Coder Date: Thu, 27 Aug 2020 10:20:03 +0530 Subject: [PATCH 01/44] chapter 2 code --- .idea/vcs.xml | 6 +++ .idea/workspace.xml | 47 ++++++++++++++++++- .../css/material-dashboard.min.css | 14 ++++++ .../views/backpanel/dashboard/index.blade.php | 1 + .../views/backpanel/layouts/master.blade.php | 32 +++++++++++++ .../views/backpanel/layouts/sidebar.blade.php | 21 +++++++++ .../views/backpanel/layouts/topbar.blade.php | 25 ++++++++++ routes/admin.php | 4 ++ routes/web.php | 2 + 9 files changed, 150 insertions(+), 2 deletions(-) create mode 100644 .idea/vcs.xml create mode 100644 public/back-assets/css/material-dashboard.min.css create mode 100644 resources/views/backpanel/dashboard/index.blade.php create mode 100644 resources/views/backpanel/layouts/master.blade.php create mode 100644 resources/views/backpanel/layouts/sidebar.blade.php create mode 100644 resources/views/backpanel/layouts/topbar.blade.php create mode 100644 routes/admin.php diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index fa80a93..532fba2 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,13 +1,34 @@ + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + +
+ + @endsection diff --git a/resources/views/backpanel/users/edit.blade.php b/resources/views/backpanel/users/edit.blade.php new file mode 100644 index 0000000..7f4b2dc --- /dev/null +++ b/resources/views/backpanel/users/edit.blade.php @@ -0,0 +1,36 @@ +@extends('backpanel.layouts.master') +@section('content') +
+ All Users +
+

Update {{$user->name}}

+
+ @csrf + @method('PUT') +
+ + +
+
+ + +
+ +
+@endsection diff --git a/resources/views/backpanel/users/index.blade.php b/resources/views/backpanel/users/index.blade.php index c974622..e0b04a6 100644 --- a/resources/views/backpanel/users/index.blade.php +++ b/resources/views/backpanel/users/index.blade.php @@ -1,5 +1,10 @@ @extends('backpanel.layouts.master') @section('content') + @if(session('success')) +
+ {{session('success')}} +
+ @endif @@ -17,14 +22,19 @@ {{$user->email}} Admin - + edit Edit - - delete - Delete - +
+ @csrf + @method('DELETE') + +
+ @empty diff --git a/routes/admin.php b/routes/admin.php index ccc07f1..52d1104 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -7,3 +7,11 @@ //user routes Route::get('/backpanel/users', 'User\UserController@index')->name('user.index'); Route::get('/backpanel/users/create', 'User\UserController@create')->name('user.create'); + +Route::post('/backpanel/users/create', 'User\UserController@store')->name('user.store'); + +Route::get('/backpanel/users/{user}/edit', 'User\UserController@edit')->name('user.edit'); + +Route::put('/backpanel/users/{user}/edit', 'User\UserController@update')->name('user.update'); + +Route::delete('/backpanel/user/{user}/delete', 'User\UserController@destroy')->name('user.destroy'); From 36bb7853f2c3d2578694de21d8448613ed734991 Mon Sep 17 00:00:00 2001 From: The Test Coder Date: Mon, 31 Aug 2020 08:07:45 +0530 Subject: [PATCH 05/44] chapter 6 code --- .idea/codeStyles/codeStyleConfig.xml | 5 +++++ .idea/workspace.xml | 6 +++++- app/Http/Controllers/User/UserController.php | 15 ++++++++++++--- app/User.php | 7 +++++++ resources/views/backpanel/users/create.blade.php | 8 ++++++++ resources/views/backpanel/users/edit.blade.php | 10 ++++++++++ resources/views/backpanel/users/index.blade.php | 2 +- routes/admin.php | 4 ---- 8 files changed, 48 insertions(+), 9 deletions(-) create mode 100644 .idea/codeStyles/codeStyleConfig.xml diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..a55e7a1 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index c4d5a5e..614f93f 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -24,6 +24,7 @@ + @@ -162,6 +163,7 @@ +
@@ -194,7 +196,9 @@ - + + + diff --git a/app/Http/Controllers/User/UserController.php b/app/Http/Controllers/User/UserController.php index 0eb4f90..a5b9c85 100644 --- a/app/Http/Controllers/User/UserController.php +++ b/app/Http/Controllers/User/UserController.php @@ -5,9 +5,15 @@ use App\Http\Controllers\Controller; use App\User; use Illuminate\Http\Request; +use Spatie\Permission\Models\Role; class UserController extends Controller { + public $roles; + public function __construct() + { + $this->roles = Role::all(); + } public function index() { $users = User::all(); @@ -16,21 +22,24 @@ public function index() public function create() { - return view('backpanel.users.create'); + return view('backpanel.users.create')->with('roles', $this->roles); } public function store(Request $request) { $user = User::create($request->all()); - return $this->redirectUser($user->name." Added Successfully"); + $user->assignRole($request->role_id); + return $this->redirectUser($user->name." Added Successfully"); } public function edit(User $user){ - return view('backpanel.users.edit', compact('user')); + return view('backpanel.users.edit', compact('user')) + ->with('roles', $this->roles); } public function update(Request $request, User $user){ $user->update($request->all()); + $user->syncRoles([$request->role_id]); return $this->redirectUser($user->name." Updated Successfully"); } diff --git a/app/User.php b/app/User.php index 1257d0a..d25e326 100644 --- a/app/User.php +++ b/app/User.php @@ -38,10 +38,17 @@ class User extends Authenticatable 'email_verified_at' => 'datetime', ]; + protected $appends = ['role_id']; + //mutators public function setPasswordAttribute($value) { $this->attributes['password'] = bcrypt($value); } + + public function getRoleIdAttribute() + { + return $this->roles[0]->id; + } } diff --git a/resources/views/backpanel/users/create.blade.php b/resources/views/backpanel/users/create.blade.php index 9bf18c5..6d5cd55 100644 --- a/resources/views/backpanel/users/create.blade.php +++ b/resources/views/backpanel/users/create.blade.php @@ -33,6 +33,14 @@ class="form-control" name="password" placeholder="Enter User Password"> +
+ + +
diff --git a/resources/views/backpanel/users/edit.blade.php b/resources/views/backpanel/users/edit.blade.php index 7f4b2dc..316e9e5 100644 --- a/resources/views/backpanel/users/edit.blade.php +++ b/resources/views/backpanel/users/edit.blade.php @@ -29,6 +29,16 @@ class="form-control" value="{{$user->email}}" > +
+ + +
diff --git a/resources/views/backpanel/users/index.blade.php b/resources/views/backpanel/users/index.blade.php index e0b04a6..5205b3b 100644 --- a/resources/views/backpanel/users/index.blade.php +++ b/resources/views/backpanel/users/index.blade.php @@ -20,7 +20,7 @@ {{$user->name}} {{$user->email}} - Admin + {{strtoupper($user->roles[0]->name)}} edit diff --git a/routes/admin.php b/routes/admin.php index 52d1104..c7b1a89 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -7,11 +7,7 @@ //user routes Route::get('/backpanel/users', 'User\UserController@index')->name('user.index'); Route::get('/backpanel/users/create', 'User\UserController@create')->name('user.create'); - Route::post('/backpanel/users/create', 'User\UserController@store')->name('user.store'); - Route::get('/backpanel/users/{user}/edit', 'User\UserController@edit')->name('user.edit'); - Route::put('/backpanel/users/{user}/edit', 'User\UserController@update')->name('user.update'); - Route::delete('/backpanel/user/{user}/delete', 'User\UserController@destroy')->name('user.destroy'); From f5c99f7301796b699644974b3611eb46e50240a3 Mon Sep 17 00:00:00 2001 From: The Test Coder Date: Mon, 31 Aug 2020 10:00:18 +0530 Subject: [PATCH 06/44] Chaper 7 Code --- .idea/larablog.iml | 8 + .idea/php.xml | 8 + .idea/workspace.xml | 15 +- app/Http/Controllers/User/UserController.php | 6 +- app/Http/Requests/User/UserRequest.php | 44 ++ app/User.php | 19 +- composer.json | 1 + composer.lock | 496 +++++++++++++++++- config/media-library.php | 166 ++++++ .../2020_08_31_024353_create_media_table.php | 31 ++ .../views/backpanel/layouts/errors.blade.php | 7 + .../views/backpanel/users/create.blade.php | 10 +- .../views/backpanel/users/edit.blade.php | 1 + .../views/backpanel/users/index.blade.php | 4 + 14 files changed, 806 insertions(+), 10 deletions(-) create mode 100644 app/Http/Requests/User/UserRequest.php create mode 100644 config/media-library.php create mode 100644 database/migrations/2020_08_31_024353_create_media_table.php create mode 100644 resources/views/backpanel/layouts/errors.blade.php diff --git a/.idea/larablog.iml b/.idea/larablog.iml index 5b4e739..a942d5a 100644 --- a/.idea/larablog.iml +++ b/.idea/larablog.iml @@ -27,15 +27,19 @@ + + + + @@ -76,7 +80,11 @@ + + + + diff --git a/.idea/php.xml b/.idea/php.xml index 86958e8..7d0363e 100644 --- a/.idea/php.xml +++ b/.idea/php.xml @@ -105,6 +105,14 @@ + + + + + + + + diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 614f93f..adc01c7 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -20,13 +20,16 @@ + + + + - @@ -198,7 +209,7 @@ - + diff --git a/app/Http/Controllers/User/UserController.php b/app/Http/Controllers/User/UserController.php index a5b9c85..7194c5a 100644 --- a/app/Http/Controllers/User/UserController.php +++ b/app/Http/Controllers/User/UserController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\User; use App\Http\Controllers\Controller; +use App\Http\Requests\User\UserRequest; use App\User; use Illuminate\Http\Request; use Spatie\Permission\Models\Role; @@ -25,10 +26,11 @@ public function create() return view('backpanel.users.create')->with('roles', $this->roles); } - public function store(Request $request) + public function store(UserRequest $request) { $user = User::create($request->all()); $user->assignRole($request->role_id); + $user->addMedia($request->avatar)->toMediaCollection('user_avatar'); return $this->redirectUser($user->name." Added Successfully"); } @@ -37,7 +39,7 @@ public function edit(User $user){ ->with('roles', $this->roles); } - public function update(Request $request, User $user){ + public function update(UserRequest $request, User $user){ $user->update($request->all()); $user->syncRoles([$request->role_id]); return $this->redirectUser($user->name." Updated Successfully"); diff --git a/app/Http/Requests/User/UserRequest.php b/app/Http/Requests/User/UserRequest.php new file mode 100644 index 0000000..28d4960 --- /dev/null +++ b/app/Http/Requests/User/UserRequest.php @@ -0,0 +1,44 @@ +method() == "PUT" ? "": "|unique:users,email"; + $on_user_update = $this->method() == "PUT" ? "": "required|"; + return [ + 'name' => 'required|max:50', + 'email' => 'required|email'.$on_update, + 'password' => $on_user_update.'min:6', + 'role_id' => 'required|numeric', + 'avatar' => 'required|image' + ]; + } + + public function messages() + { + return [ + 'name.required' => 'User Name is required', + 'name.max' => "User name should be less than 50 char" + ]; + } +} diff --git a/app/User.php b/app/User.php index d25e326..512cc3c 100644 --- a/app/User.php +++ b/app/User.php @@ -5,11 +5,13 @@ use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; +use Spatie\MediaLibrary\HasMedia; +use Spatie\MediaLibrary\InteractsWithMedia; use Spatie\Permission\Traits\HasRoles; -class User extends Authenticatable +class User extends Authenticatable implements HasMedia { - use Notifiable, HasRoles; + use Notifiable, HasRoles, InteractsWithMedia; /** * The attributes that are mass assignable. @@ -38,7 +40,7 @@ class User extends Authenticatable 'email_verified_at' => 'datetime', ]; - protected $appends = ['role_id']; + protected $appends = ['role_id', 'avatar']; //mutators @@ -51,4 +53,15 @@ public function getRoleIdAttribute() { return $this->roles[0]->id; } + + public function getAvatarAttribute() + { + return $this->getMedia('user_avatar')->first()->getUrl(); + } + + //media method + public function clearMediaCollection(string $collectionName = 'default'): HasMedia + { + // + } } diff --git a/composer.json b/composer.json index 7294e3d..17b35a9 100644 --- a/composer.json +++ b/composer.json @@ -15,6 +15,7 @@ "laravel/framework": "^7.24", "laravel/tinker": "^2.0", "laravel/ui": "^2.2", + "spatie/laravel-medialibrary": "^8.0.0", "spatie/laravel-permission": "^3.16" }, "require-dev": { diff --git a/composer.lock b/composer.lock index 7f0f94f..fcc504a 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "5b3f01b78ec52e282c5f997e1138884f", + "content-hash": "5a68af94e764f7a648ab768511ee8d7e", "packages": [ { "name": "asm89/stack-cors", @@ -741,6 +741,76 @@ ], "time": "2019-07-01T23:21:34+00:00" }, + { + "name": "intervention/image", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/Intervention/image.git", + "reference": "abbf18d5ab8367f96b3205ca3c89fb2fa598c69e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Intervention/image/zipball/abbf18d5ab8367f96b3205ca3c89fb2fa598c69e", + "reference": "abbf18d5ab8367f96b3205ca3c89fb2fa598c69e", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "guzzlehttp/psr7": "~1.1", + "php": ">=5.4.0" + }, + "require-dev": { + "mockery/mockery": "~0.9.2", + "phpunit/phpunit": "^4.8 || ^5.7" + }, + "suggest": { + "ext-gd": "to use GD library based image processing.", + "ext-imagick": "to use Imagick based image processing.", + "intervention/imagecache": "Caching extension for the Intervention Image library" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + }, + "laravel": { + "providers": [ + "Intervention\\Image\\ImageServiceProvider" + ], + "aliases": { + "Image": "Intervention\\Image\\Facades\\Image" + } + } + }, + "autoload": { + "psr-4": { + "Intervention\\Image\\": "src/Intervention/Image" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Oliver Vogel", + "email": "oliver@olivervogel.com", + "homepage": "http://olivervogel.com/" + } + ], + "description": "Image handling and manipulation library with support for Laravel integration", + "homepage": "http://image.intervention.io/", + "keywords": [ + "gd", + "image", + "imagick", + "laravel", + "thumbnail", + "watermark" + ], + "time": "2019-11-02T09:15:47+00:00" + }, { "name": "laravel/framework", "version": "v7.26.0", @@ -1204,6 +1274,67 @@ ], "time": "2020-08-23T07:39:11+00:00" }, + { + "name": "league/glide", + "version": "1.6.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/glide.git", + "reference": "8759b8edfe953c8e6aceb45b3647fb7ae5349a0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/glide/zipball/8759b8edfe953c8e6aceb45b3647fb7ae5349a0c", + "reference": "8759b8edfe953c8e6aceb45b3647fb7ae5349a0c", + "shasum": "" + }, + "require": { + "intervention/image": "^2.4", + "league/flysystem": "^1.0", + "php": "^7.2", + "psr/http-message": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^1.2", + "phpunit/php-token-stream": "^3.1", + "phpunit/phpunit": "^8.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Glide\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Reinink", + "email": "jonathan@reinink.ca", + "homepage": "http://reinink.ca" + } + ], + "description": "Wonderfully easy on-demand image manipulation library with an HTTP based API.", + "homepage": "http://glide.thephpleague.com", + "keywords": [ + "ImageMagick", + "editing", + "gd", + "image", + "imagick", + "league", + "manipulation", + "processing" + ], + "time": "2020-07-07T12:23:45+00:00" + }, { "name": "league/mime-type-detection", "version": "1.4.0", @@ -1255,6 +1386,73 @@ ], "time": "2020-08-09T10:34:01+00:00" }, + { + "name": "maennchen/zipstream-php", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/maennchen/ZipStream-PHP.git", + "reference": "c4c5803cc1f93df3d2448478ef79394a5981cc58" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/c4c5803cc1f93df3d2448478ef79394a5981cc58", + "reference": "c4c5803cc1f93df3d2448478ef79394a5981cc58", + "shasum": "" + }, + "require": { + "myclabs/php-enum": "^1.5", + "php": ">= 7.1", + "psr/http-message": "^1.0", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "ext-zip": "*", + "guzzlehttp/guzzle": ">= 6.3", + "mikey179/vfsstream": "^1.6", + "phpunit/phpunit": ">= 7.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "ZipStream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paul Duncan", + "email": "pabs@pablotron.org" + }, + { + "name": "Jonatan Männchen", + "email": "jonatan@maennchen.ch" + }, + { + "name": "Jesse Donat", + "email": "donatj@gmail.com" + }, + { + "name": "András Kolesár", + "email": "kolesar@kolesar.hu" + } + ], + "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.", + "keywords": [ + "stream", + "zip" + ], + "funding": [ + { + "url": "https://opencollective.com/zipstream", + "type": "open_collective" + } + ], + "time": "2020-05-30T13:11:16+00:00" + }, { "name": "monolog/monolog", "version": "2.1.1", @@ -1346,6 +1544,52 @@ ], "time": "2020-07-23T08:41:23+00:00" }, + { + "name": "myclabs/php-enum", + "version": "1.7.6", + "source": { + "type": "git", + "url": "https://github.com/myclabs/php-enum.git", + "reference": "5f36467c7a87e20fbdc51e524fd8f9d1de80187c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/php-enum/zipball/5f36467c7a87e20fbdc51e524fd8f9d1de80187c", + "reference": "5f36467c7a87e20fbdc51e524fd8f9d1de80187c", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7", + "squizlabs/php_codesniffer": "1.*", + "vimeo/psalm": "^3.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "MyCLabs\\Enum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP Enum contributors", + "homepage": "https://github.com/myclabs/php-enum/graphs/contributors" + } + ], + "description": "PHP Enum implementation", + "homepage": "http://github.com/myclabs/php-enum", + "keywords": [ + "enum" + ], + "time": "2020-02-14T08:15:52+00:00" + }, { "name": "nesbot/carbon", "version": "2.39.0", @@ -2166,6 +2410,210 @@ ], "time": "2020-08-18T17:17:46+00:00" }, + { + "name": "spatie/image", + "version": "1.7.6", + "source": { + "type": "git", + "url": "https://github.com/spatie/image.git", + "reference": "74535b5fd67ace75840c00c408666660843e755e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/image/zipball/74535b5fd67ace75840c00c408666660843e755e", + "reference": "74535b5fd67ace75840c00c408666660843e755e", + "shasum": "" + }, + "require": { + "ext-exif": "*", + "ext-mbstring": "*", + "league/glide": "^1.4", + "php": "^7.0", + "spatie/image-optimizer": "^1.0", + "spatie/temporary-directory": "^1.0.0", + "symfony/process": "^3.0|^4.0|^5.0" + }, + "require-dev": { + "larapack/dd": "^1.1", + "phpunit/phpunit": "^6.0|^7.0", + "symfony/var-dumper": "^3.2|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Image\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Manipulate images with an expressive API", + "homepage": "https://github.com/spatie/image", + "keywords": [ + "image", + "spatie" + ], + "time": "2020-01-26T18:56:44+00:00" + }, + { + "name": "spatie/image-optimizer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/image-optimizer.git", + "reference": "9c1d470e34b28b715d25edb539dd6c899461527c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/image-optimizer/zipball/9c1d470e34b28b715d25edb539dd6c899461527c", + "reference": "9c1d470e34b28b715d25edb539dd6c899461527c", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.2", + "psr/log": "^1.0", + "symfony/process": "^4.2|^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.0", + "symfony/var-dumper": "^4.2|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\ImageOptimizer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Easily optimize images using PHP", + "homepage": "https://github.com/spatie/image-optimizer", + "keywords": [ + "image-optimizer", + "spatie" + ], + "time": "2019-11-25T12:29:24+00:00" + }, + { + "name": "spatie/laravel-medialibrary", + "version": "8.6.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-medialibrary.git", + "reference": "7d32d4fa352f063db728e0916b723372a0cdf514" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-medialibrary/zipball/7d32d4fa352f063db728e0916b723372a0cdf514", + "reference": "7d32d4fa352f063db728e0916b723372a0cdf514", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "ext-json": "*", + "illuminate/bus": "^6.18|^7.0", + "illuminate/console": "^6.18|^7.0", + "illuminate/database": "^6.18|^7.0", + "illuminate/pipeline": "^6.18|^7.0", + "illuminate/support": "^6.18|^7.0", + "league/flysystem": "^1.0.64", + "maennchen/zipstream-php": "^1.0|^2.0", + "php": "^7.4", + "spatie/image": "^1.4.0", + "spatie/temporary-directory": "^1.1", + "symfony/console": "^4.4|^5.0" + }, + "conflict": { + "php-ffmpeg/php-ffmpeg": "<0.6.1" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.133.11", + "doctrine/dbal": "^2.5.2", + "ext-pdo_sqlite": "*", + "ext-zip": "*", + "guzzlehttp/guzzle": "^6.3", + "league/flysystem-aws-s3-v3": "^1.0.23", + "mockery/mockery": "^1.3", + "orchestra/testbench": "^4.0|^5.0", + "php-ffmpeg/php-ffmpeg": "^0.16.0", + "phpunit/phpunit": "^9.1", + "spatie/pdf-to-image": "^2.0", + "spatie/phpunit-snapshot-assertions": "^4.0" + }, + "suggest": { + "league/flysystem-aws-s3-v3": "Required to use AWS S3 file storage", + "php-ffmpeg/php-ffmpeg": "Required for generating video thumbnails", + "spatie/pdf-to-image": "Required for generating thumbsnails of PDFs and SVGs" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\MediaLibrary\\MediaLibraryServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Spatie\\MediaLibrary\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Associate files with Eloquent models", + "homepage": "https://github.com/spatie/laravel-medialibrary", + "keywords": [ + "cms", + "conversion", + "downloads", + "images", + "laravel", + "laravel-medialibrary", + "media", + "spatie" + ], + "funding": [ + { + "url": "https://spatie.be/open-source/support-us", + "type": "custom" + }, + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2020-08-26T19:04:06+00:00" + }, { "name": "spatie/laravel-permission", "version": "3.16.0", @@ -2240,6 +2688,52 @@ ], "time": "2020-08-18T17:14:06+00:00" }, + { + "name": "spatie/temporary-directory", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/spatie/temporary-directory.git", + "reference": "eeb84a7a3543e90759cd852ccb468e3d3340d99d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/temporary-directory/zipball/eeb84a7a3543e90759cd852ccb468e3d3340d99d", + "reference": "eeb84a7a3543e90759cd852ccb468e3d3340d99d", + "shasum": "" + }, + "require": { + "php": "^7.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\TemporaryDirectory\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alex Vanderbist", + "email": "alex@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Easily create, use and destroy temporary directories", + "homepage": "https://github.com/spatie/temporary-directory", + "keywords": [ + "spatie", + "temporary-directory" + ], + "time": "2020-06-08T08:58:45+00:00" + }, { "name": "swiftmailer/swiftmailer", "version": "v6.2.3", diff --git a/config/media-library.php b/config/media-library.php new file mode 100644 index 0000000..4d8dbb4 --- /dev/null +++ b/config/media-library.php @@ -0,0 +1,166 @@ + env('MEDIA_DISK', 'public'), + + /* + * The maximum file size of an item in bytes. + * Adding a larger file will result in an exception. + */ + 'max_file_size' => 1024 * 1024 * 10, + + /* + * This queue will be used to generate derived and responsive images. + * Leave empty to use the default queue. + */ + 'queue_name' => '', + + /* + * The fully qualified class name of the media model. + */ + 'media_model' => Spatie\MediaLibrary\MediaCollections\Models\Media::class, + + 'remote' => [ + /* + * Any extra headers that should be included when uploading media to + * a remote disk. Even though supported headers may vary between + * different drivers, a sensible default has been provided. + * + * Supported by S3: CacheControl, Expires, StorageClass, + * ServerSideEncryption, Metadata, ACL, ContentEncoding + */ + 'extra_headers' => [ + 'CacheControl' => 'max-age=604800', + ], + ], + + 'responsive_images' => [ + + /* + * This class is responsible for calculating the target widths of the responsive + * images. By default we optimize for filesize and create variations that each are 20% + * smaller than the previous one. More info in the documentation. + * + * https://docs.spatie.be/laravel-medialibrary/v8/advanced-usage/generating-responsive-images + */ + 'width_calculator' => Spatie\MediaLibrary\ResponsiveImages\WidthCalculator\FileSizeOptimizedWidthCalculator::class, + + /* + * By default rendering media to a responsive image will add some javascript and a tiny placeholder. + * This ensures that the browser can already determine the correct layout. + */ + 'use_tiny_placeholders' => true, + + /* + * This class will generate the tiny placeholder used for progressive image loading. By default + * the medialibrary will use a tiny blurred jpg image. + */ + 'tiny_placeholder_generator' => Spatie\MediaLibrary\ResponsiveImages\TinyPlaceholderGenerator\Blurred::class, + ], + + /* + * When converting Media instances to response the medialibrary will add + * a `loading` attribute to the `img` tag. Here you can set the default + * value of that attribute. + * + * Possible values: 'auto', 'lazy' and 'eager, + * + * More info: https://css-tricks.com/native-lazy-loading/ + */ + 'default_loading_attribute_value' => 'auto', + + /* + * This is the class that is responsible for naming conversion files. By default, + * it will use the filename of the original and concatenate the conversion name to it. + */ + 'conversion_file_namer' => \Spatie\MediaLibrary\Conversions\DefaultConversionFileNamer::class, + + /* + * The class that contains the strategy for determining a media file's path. + */ + 'path_generator' => Spatie\MediaLibrary\Support\PathGenerator\DefaultPathGenerator::class, + + /* + * When urls to files get generated, this class will be called. Use the default + * if your files are stored locally above the site root or on s3. + */ + 'url_generator' => Spatie\MediaLibrary\Support\UrlGenerator\DefaultUrlGenerator::class, + + /* + * Whether to activate versioning when urls to files get generated. + * When activated, this attaches a ?v=xx query string to the URL. + */ + 'version_urls' => false, + + /* + * The media library will try to optimize all converted images by removing + * metadata and applying a little bit of compression. These are + * the optimizers that will be used by default. + */ + 'image_optimizers' => [ + Spatie\ImageOptimizer\Optimizers\Jpegoptim::class => [ + '--strip-all', // this strips out all text information such as comments and EXIF data + '--all-progressive', // this will make sure the resulting image is a progressive one + ], + Spatie\ImageOptimizer\Optimizers\Pngquant::class => [ + '--force', // required parameter for this package + ], + Spatie\ImageOptimizer\Optimizers\Optipng::class => [ + '-i0', // this will result in a non-interlaced, progressive scanned image + '-o2', // this set the optimization level to two (multiple IDAT compression trials) + '-quiet', // required parameter for this package + ], + Spatie\ImageOptimizer\Optimizers\Svgo::class => [ + '--disable=cleanupIDs', // disabling because it is known to cause troubles + ], + Spatie\ImageOptimizer\Optimizers\Gifsicle::class => [ + '-b', // required parameter for this package + '-O3', // this produces the slowest but best results + ], + ], + + /* + * These generators will be used to create an image of media files. + */ + 'image_generators' => [ + Spatie\MediaLibrary\Conversions\ImageGenerators\Image::class, + Spatie\MediaLibrary\Conversions\ImageGenerators\Webp::class, + Spatie\MediaLibrary\Conversions\ImageGenerators\Pdf::class, + Spatie\MediaLibrary\Conversions\ImageGenerators\Svg::class, + Spatie\MediaLibrary\Conversions\ImageGenerators\Video::class, + ], + + /* + * The engine that should perform the image conversions. + * Should be either `gd` or `imagick`. + */ + 'image_driver' => env('IMAGE_DRIVER', 'gd'), + + /* + * FFMPEG & FFProbe binaries paths, only used if you try to generate video + * thumbnails and have installed the php-ffmpeg/php-ffmpeg composer + * dependency. + */ + 'ffmpeg_path' => env('FFMPEG_PATH', '/usr/bin/ffmpeg'), + 'ffprobe_path' => env('FFPROBE_PATH', '/usr/bin/ffprobe'), + + /* + * The path where to store temporary files while performing image conversions. + * If set to null, storage_path('media-library/temp') will be used. + */ + 'temporary_directory_path' => null, + + /* + * Here you can override the class names of the jobs used by this package. Make sure + * your custom jobs extend the ones provided by the package. + */ + 'jobs' => [ + 'perform_conversions' => \Spatie\MediaLibrary\Conversions\Jobs\PerformConversionsJob::class, + 'generate_responsive_images' => \Spatie\MediaLibrary\ResponsiveImages\Jobs\GenerateResponsiveImagesJob::class, + ], +]; diff --git a/database/migrations/2020_08_31_024353_create_media_table.php b/database/migrations/2020_08_31_024353_create_media_table.php new file mode 100644 index 0000000..d0ac271 --- /dev/null +++ b/database/migrations/2020_08_31_024353_create_media_table.php @@ -0,0 +1,31 @@ +bigIncrements('id'); + + $table->morphs('model'); + $table->uuid('uuid')->nullable(); + $table->string('collection_name'); + $table->string('name'); + $table->string('file_name'); + $table->string('mime_type')->nullable(); + $table->string('disk'); + $table->string('conversions_disk')->nullable(); + $table->unsignedBigInteger('size'); + $table->json('manipulations'); + $table->json('custom_properties'); + $table->json('responsive_images'); + $table->unsignedInteger('order_column')->nullable(); + + $table->nullableTimestamps(); + }); + } +} diff --git a/resources/views/backpanel/layouts/errors.blade.php b/resources/views/backpanel/layouts/errors.blade.php new file mode 100644 index 0000000..5f5ca8b --- /dev/null +++ b/resources/views/backpanel/layouts/errors.blade.php @@ -0,0 +1,7 @@ +@if(count($errors)>0) + @foreach($errors->all() as $error) +
+ {{$error}} +
+ @endforeach +@endif diff --git a/resources/views/backpanel/users/create.blade.php b/resources/views/backpanel/users/create.blade.php index 6d5cd55..8bc486e 100644 --- a/resources/views/backpanel/users/create.blade.php +++ b/resources/views/backpanel/users/create.blade.php @@ -4,7 +4,8 @@
All Users

Create A New User

-
+ @include('backpanel.layouts.errors') + @csrf
@@ -13,7 +14,8 @@ type="text" class="form-control" name="name" - placeholder="Enter User Name"> + placeholder="Enter User Name" + >
@@ -41,6 +43,10 @@ class="form-control" @endforeach
+ + + + diff --git a/resources/views/backpanel/users/edit.blade.php b/resources/views/backpanel/users/edit.blade.php index 316e9e5..b67f9f8 100644 --- a/resources/views/backpanel/users/edit.blade.php +++ b/resources/views/backpanel/users/edit.blade.php @@ -4,6 +4,7 @@ All Users

Update {{$user->name}}

+ @include('backpanel.layouts.errors') @csrf @method('PUT') diff --git a/resources/views/backpanel/users/index.blade.php b/resources/views/backpanel/users/index.blade.php index 5205b3b..949b31b 100644 --- a/resources/views/backpanel/users/index.blade.php +++ b/resources/views/backpanel/users/index.blade.php @@ -11,6 +11,7 @@

All Users

+ @@ -18,6 +19,9 @@ @forelse($users as $user) + From af2e20dea7200a2bb0bb26c3e7a0f5198be33eff Mon Sep 17 00:00:00 2001 From: The Test Coder Date: Tue, 1 Sep 2020 08:36:53 +0530 Subject: [PATCH 07/44] Chapter 8 Code --- .idea/laravel-plugin.xml | 6 ++ .idea/workspace.xml | 18 ++-- app/Http/Controllers/User/RoleController.php | 100 ++++++++++++++++++ .../views/backpanel/layouts/sidebar.blade.php | 6 ++ .../views/backpanel/roles/create.blade.php | 24 +++++ .../views/backpanel/roles/edit.blade.php | 26 +++++ .../views/backpanel/roles/index.blade.php | 42 ++++++++ routes/admin.php | 11 +- 8 files changed, 218 insertions(+), 15 deletions(-) create mode 100644 .idea/laravel-plugin.xml create mode 100644 app/Http/Controllers/User/RoleController.php create mode 100644 resources/views/backpanel/roles/create.blade.php create mode 100644 resources/views/backpanel/roles/edit.blade.php create mode 100644 resources/views/backpanel/roles/index.blade.php diff --git a/.idea/laravel-plugin.xml b/.idea/laravel-plugin.xml new file mode 100644 index 0000000..5aae25d --- /dev/null +++ b/.idea/laravel-plugin.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index adc01c7..52f2fce 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -20,16 +20,9 @@ - - - - - - - - - + +
Thumb Name Email Role
+ {{$user->name}} + {{$user->name}} {{$user->email}} {{strtoupper($user->roles[0]->name)}}
+ + + + + @forelse($roles as $role) + + + + + @empty + + + + @endforelse +
NameActions
{{$role->name}} + + edit + Edit + +
+ @csrf + @method('DELETE') + +
+ +
No Role found
+@endsection diff --git a/routes/admin.php b/routes/admin.php index c7b1a89..fa736e1 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -5,9 +5,8 @@ //user routes -Route::get('/backpanel/users', 'User\UserController@index')->name('user.index'); -Route::get('/backpanel/users/create', 'User\UserController@create')->name('user.create'); -Route::post('/backpanel/users/create', 'User\UserController@store')->name('user.store'); -Route::get('/backpanel/users/{user}/edit', 'User\UserController@edit')->name('user.edit'); -Route::put('/backpanel/users/{user}/edit', 'User\UserController@update')->name('user.update'); -Route::delete('/backpanel/user/{user}/delete', 'User\UserController@destroy')->name('user.destroy'); +Route::resource('backpanel/user', 'User\UserController'); + + +//role routes +Route::resource('/backpanel/role', 'User\RoleController'); From aafb0149342345edb69e1a59b3fe425fb85353e4 Mon Sep 17 00:00:00 2001 From: The Test Coder Date: Thu, 3 Sep 2020 08:50:21 +0530 Subject: [PATCH 08/44] chapter 9 code --- .idea/workspace.xml | 7 ++-- app/Http/Controllers/User/RoleController.php | 6 ++-- app/Http/Requests/Role/RoleRequest.php | 38 ++++++++++++++++++++ 3 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 app/Http/Requests/Role/RoleRequest.php diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 52f2fce..20f136a 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -21,8 +21,7 @@ - - + diff --git a/app/Http/Controllers/User/RoleController.php b/app/Http/Controllers/User/RoleController.php index 1e2a95d..07fbc99 100644 --- a/app/Http/Controllers/User/RoleController.php +++ b/app/Http/Controllers/User/RoleController.php @@ -3,7 +3,7 @@ namespace App\Http\Controllers\User; use App\Http\Controllers\Controller; -use Illuminate\Http\Request; +use App\Http\Requests\Role\RoleRequest; use Spatie\Permission\Models\Role; class RoleController extends Controller @@ -34,7 +34,7 @@ public function create() * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ - public function store(Request $request) + public function store(RoleRequest $request) { $role = new Role(); $role->name = $request->name; @@ -75,7 +75,7 @@ public function edit(Role $role) * @param Role $role * @return \Illuminate\Http\RedirectResponse */ - public function update(Request $request, Role $role) + public function update(RoleRequest $request, Role $role) { $role->name = $request->name; $role->save(); diff --git a/app/Http/Requests/Role/RoleRequest.php b/app/Http/Requests/Role/RoleRequest.php new file mode 100644 index 0000000..995517a --- /dev/null +++ b/app/Http/Requests/Role/RoleRequest.php @@ -0,0 +1,38 @@ + 'required|string' + ]; + } + + public function messages() + { + return [ + 'name.required' => 'Role name is required', + 'name.string' => "Role name should in Character" + ]; + } +} From ac663c8ac960ee69b65968c0b90f5bbf739e2b8c Mon Sep 17 00:00:00 2001 From: The Test Coder Date: Thu, 3 Sep 2020 09:09:07 +0530 Subject: [PATCH 09/44] chapter 10 code --- .idea/workspace.xml | 14 +-- .../Controllers/User/PermissionController.php | 100 ++++++++++++++++++ .../Requests/Permission/PermissionRequest.php | 37 +++++++ .../views/backpanel/layouts/sidebar.blade.php | 6 ++ .../backpanel/permission/create.blade.php | 24 +++++ .../views/backpanel/permission/edit.blade.php | 26 +++++ .../backpanel/permission/index.blade.php | 42 ++++++++ routes/admin.php | 5 + 8 files changed, 248 insertions(+), 6 deletions(-) create mode 100644 app/Http/Controllers/User/PermissionController.php create mode 100644 app/Http/Requests/Permission/PermissionRequest.php create mode 100644 resources/views/backpanel/permission/create.blade.php create mode 100644 resources/views/backpanel/permission/edit.blade.php create mode 100644 resources/views/backpanel/permission/index.blade.php diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 20f136a..d6d1476 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -21,7 +21,8 @@ - + +