From 5f77e300bcecd7cf9d93a02a988446cd8d2cc9ca Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Mon, 26 Mar 2018 22:28:58 +0800 Subject: [PATCH] Add user photo upload on user profile Add nullable photo_path column on users table Restructure user profile page Restructure user profile edit page --- app/Http/Controllers/UsersController.php | 44 +++++++++++++++++---- .../2014_10_12_000000_create_users_table.php | 1 + public/images/icon_user_1.png | Bin 0 -> 10703 bytes public/images/icon_user_2.png | Bin 0 -> 11403 bytes resources/lang/en/user.php | 4 ++ resources/lang/id/user.php | 4 ++ resources/views/users/edit.blade.php | 28 +++++++++---- resources/views/users/partials/profile.blade.php | 9 ++++- resources/views/users/show.blade.php | 6 +-- routes/web.php | 15 +++---- tests/Feature/UsersProfileTest.php | 41 ++++++++++++++----- 11 files changed, 115 insertions(+), 37 deletions(-) create mode 100755 public/images/icon_user_1.png create mode 100644 public/images/icon_user_2.png diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/UsersController.php index fe72886..0259bac 100644 --- a/app/Http/Controllers/UsersController.php +++ b/app/Http/Controllers/UsersController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers; use App\Couple; use App\User; use Illuminate\Http\Request; +use Storage; class UsersController extends Controller { @@ -23,8 +24,8 @@ class UsersController extends Controller $query->where('name', 'like', '%'.$q.'%'); $query->orWhere('nickname', 'like', '%'.$q.'%'); }) - ->orderBy('name', 'asc') - ->paginate(24); + ->orderBy('name', 'asc') + ->paginate(24); } return view('users.search', compact('users')); @@ -44,7 +45,7 @@ class UsersController extends Controller } $allMariageList = []; - foreach (Couple::with('husband','wife')->get() as $couple) { + foreach (Couple::with('husband', 'wife')->get() as $couple) { $allMariageList[$couple->id] = $couple->husband->name.' & '.$couple->wife->name; } @@ -52,11 +53,11 @@ class UsersController extends Controller $femalePersonList = User::where('gender_id', 2)->pluck('nickname', 'id'); return view('users.show', [ - 'user' => $user, + 'user' => $user, 'usersMariageList' => $usersMariageList, - 'malePersonList' => $malePersonList, + 'malePersonList' => $malePersonList, 'femalePersonList' => $femalePersonList, - 'allMariageList' => $allMariageList + 'allMariageList' => $allMariageList, ]); } @@ -137,10 +138,11 @@ class UsersController extends Controller $user->dob = $request->get('dob'); $user->dod = $request->get('dod'); - if ($request->get('dod')) + if ($request->get('dod')) { $user->yod = substr($request->get('dod'), 0, 4); - else + } else { $user->yod = $request->get('yod'); + } $user->phone = $request->get('phone'); $user->address = $request->get('address'); @@ -166,4 +168,30 @@ class UsersController extends Controller { // } + + /** + * Upload users photo. + * + * @param \Illuminate\Http\Request $request + * @param \App\User $user + * + * @return \Illuminate\Http\Response + */ + public function photoUpload(Request $request, User $user) + { + $request->validate([ + 'photo' => 'required|image|max:200', + ]); + + $storage = env('APP_ENV') == 'testing' ? 'avatars' : 'public'; + + if (Storage::disk($storage)->exists($user->photo_path)) { + Storage::disk($storage)->delete($user->photo_path); + } + + $user->photo_path = $request->photo->store('images', $storage); + $user->save(); + + return back(); + } } 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 a180b73..b102aae 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -29,6 +29,7 @@ class CreateUsersTable extends Migration $table->string('address')->nullable(); $table->string('city')->nullable(); $table->string('phone')->nullable(); + $table->string('photo_path')->nullable(); $table->unsignedInteger('manager_id')->nullable(); $table->rememberToken(); $table->timestamps(); diff --git a/public/images/icon_user_1.png b/public/images/icon_user_1.png new file mode 100755 index 0000000000000000000000000000000000000000..9c32168950b92de243bec8c9de4076d90ceaaf62 GIT binary patch literal 10703 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%0AjsQTr_ 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 literal 0 HcmV?d00001 diff --git a/public/images/icon_user_2.png b/public/images/icon_user_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b1728550583b6b61d2eb348bed781e66005c3df0 GIT binary patch literal 11403 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 'City', 'phone' => 'Phone', 'manager' => 'Manager', + + // Photo + 'reupload_photo' => 'Re-upload Photo', + 'update_photo' => 'Update Photo', ]; \ No newline at end of file diff --git a/resources/lang/id/user.php b/resources/lang/id/user.php index 87d3ed0..f417821 100644 --- a/resources/lang/id/user.php +++ b/resources/lang/id/user.php @@ -45,4 +45,8 @@ return [ 'city' => 'Kota', 'phone' => 'Telp.', 'manager' => 'Pengelola', + + // Photo + 'reupload_photo' => 'Upload ulang Foto', + 'update_photo' => 'Update Foto', ]; \ No newline at end of file diff --git a/resources/views/users/edit.blade.php b/resources/views/users/edit.blade.php index 420b2bd..19c1af2 100644 --- a/resources/views/users/edit.blade.php +++ b/resources/views/users/edit.blade.php @@ -7,12 +7,19 @@ {{ trans('user.edit') }} {{ $user->profileLink() }} - {{ Form::model($user, ['route' => ['users.update', $user->id], 'method' =>'patch', 'autocomplete' => 'off']) }}
+ {{ Form::model($user, ['route' => ['users.update', $user->id], 'method' =>'patch', 'autocomplete' => 'off']) }}

{{ trans('user.edit') }}

+
+ @if ($user->photo_path && is_file(public_path('storage/'.$user->photo_path))) + {{ Html::image('storage/'.$user->photo_path, $user->name, ['style' => 'max-width:100%']) }} + @else + {{ Html::image('images/icon_user_'.$user->gender_id.'.png', $user->name, ['style' => 'max-width:100%']) }} + @endif +
{!! FormField::text('name', ['label' => trans('user.name')]) !!} {!! FormField::text('nickname', ['label' => trans('user.nickname')]) !!}
@@ -35,8 +42,6 @@ {!! FormField::text('phone', ['label' => trans('app.phone'), 'placeholder' => trans('app.example').' 081234567890']) !!}
-
-

{{ trans('app.login_account') }}

@@ -44,11 +49,18 @@ {!! FormField::text('password', ['label' => trans('auth.password'), 'placeholder' => '******', 'value' => '']) !!}
+
+ {{ Form::submit(trans('app.update'), ['class' => 'btn btn-primary']) }} + {{ link_to_route('users.show', trans('app.cancel'), [$user->id], ['class' => 'btn btn-default']) }} +
+
+ {{ Form::close() }} +
+ {{ Form::open(['route' => ['users.photo-upload', $user], 'method' => 'patch', 'files' => true]) }} + {!! FormField::file('photo', ['required' => true, 'label' => __('user.reupload_photo'), 'info' => ['text' => 'Format jpg, maks: 200 Kb.', 'class' => 'warning']]) !!} + {!! Form::submit(__('user.update_photo'), ['class' => 'btn btn-success']) !!} + {{ link_to_route('users.show', trans('app.cancel'), [$user], ['class' => 'btn btn-default']) }} + {{ Form::close() }}
-
- {{ Form::submit(trans('app.update'), ['class' => 'btn btn-primary']) }} - {{ link_to_route('users.show', trans('app.cancel'), [$user->id], ['class' => 'btn btn-default']) }} -
- {{ Form::close() }} @endsection diff --git a/resources/views/users/partials/profile.blade.php b/resources/views/users/partials/profile.blade.php index ee21293..462fa20 100644 --- a/resources/views/users/partials/profile.blade.php +++ b/resources/views/users/partials/profile.blade.php @@ -1,5 +1,12 @@

{{ trans('user.profile') }}

+
+ @if ($user->photo_path && is_file(public_path('storage/'.$user->photo_path))) + {{ Html::image('storage/'.$user->photo_path, $user->name, ['style' => 'max-width:100%']) }} + @else + {{ Html::image('images/icon_user_'.$user->gender_id.'.png', $user->name, ['style' => 'max-width:100%']) }} + @endif +
@@ -42,4 +49,4 @@
-
\ No newline at end of file +
diff --git a/resources/views/users/show.blade.php b/resources/views/users/show.blade.php index a291742..a4220d4 100644 --- a/resources/views/users/show.blade.php +++ b/resources/views/users/show.blade.php @@ -4,13 +4,13 @@ @section('user-content')
-
+
@include('users.partials.profile') - @include('users.partials.siblings')
-
+
@include('users.partials.parent-spouse') @include('users.partials.childs') + @include('users.partials.siblings')
@endsection diff --git a/routes/web.php b/routes/web.php index 7923150..d7d5503 100644 --- a/routes/web.php +++ b/routes/web.php @@ -30,20 +30,21 @@ Route::get('users/{user}/edit', 'UsersController@edit')->name('users.edit'); Route::patch('users/{user}', 'UsersController@update')->name('users.update'); Route::get('users/{user}/chart', 'UsersController@chart')->name('users.chart'); Route::get('users/{user}/tree', 'UsersController@tree')->name('users.tree'); +Route::patch('users/{user}/photo-upload', 'UsersController@photoUpload')->name('users.photo-upload'); Route::get('users/{user}/marriages', 'UserMarriagesController@index')->name('users.marriages'); /** * Couple/Marriages Routes */ -Route::get('couples/{couple}', ['as'=>'couples.show', 'uses'=>'CouplesController@show']); -Route::get('couples/{couple}/edit', ['as'=>'couples.edit', 'uses'=>'CouplesController@edit']); -Route::patch('couples/{couple}', ['as'=>'couples.update', 'uses'=>'CouplesController@update']); +Route::get('couples/{couple}', ['as' => 'couples.show', 'uses' => 'CouplesController@show']); +Route::get('couples/{couple}/edit', ['as' => 'couples.edit', 'uses' => 'CouplesController@edit']); +Route::patch('couples/{couple}', ['as' => 'couples.update', 'uses' => 'CouplesController@update']); /** * Backup Restore Database Routes */ -Route::post('backups/upload', ['as'=>'backups.upload', 'uses'=>'BackupsController@upload']); -Route::post('backups/{fileName}/restore', ['as'=>'backups.restore', 'uses'=>'BackupsController@restore']); -Route::get('backups/{fileName}/dl', ['as'=>'backups.download', 'uses'=>'BackupsController@download']); -Route::resource('backups','BackupsController'); \ No newline at end of file +Route::post('backups/upload', ['as' => 'backups.upload', 'uses' => 'BackupsController@upload']); +Route::post('backups/{fileName}/restore', ['as' => 'backups.restore', 'uses' => 'BackupsController@restore']); +Route::get('backups/{fileName}/dl', ['as' => 'backups.download', 'uses' => 'BackupsController@download']); +Route::resource('backups', 'BackupsController'); diff --git a/tests/Feature/UsersProfileTest.php b/tests/Feature/UsersProfileTest.php index 7502db3..94be8ec 100644 --- a/tests/Feature/UsersProfileTest.php +++ b/tests/Feature/UsersProfileTest.php @@ -4,6 +4,7 @@ namespace Tests\Feature; use App\User; use Illuminate\Foundation\Testing\RefreshDatabase; +use Storage; use Tests\TestCase; class UsersProfileTest extends TestCase @@ -40,21 +41,41 @@ class UsersProfileTest extends TestCase ]); $this->seeInDatabase('users', [ - 'nickname' => 'Nama Panggilan', - 'name' => 'Nama User', + 'nickname' => 'Nama Panggilan', + 'name' => 'Nama User', 'gender_id' => 1, - 'dob' => '1959-06-09', - 'dod' => '2003-10-17', - 'yod' => '2003', - 'address' => 'Jln. Angkasa, No. 70', - 'city' => 'Nama Kota', - 'phone' => '081234567890', - 'email' => null, - 'password' => null, + 'dob' => '1959-06-09', + 'dod' => '2003-10-17', + 'yod' => '2003', + 'address' => 'Jln. Angkasa, No. 70', + 'city' => 'Nama Kota', + 'phone' => '081234567890', + 'email' => null, + 'password' => null, ]); } /** @test */ + public function user_can_upload_their_own_photo() + { + Storage::fake('avatars'); + + $user = $this->loginAsUser(); + $this->visit(route('users.edit', $user->id)); + $this->assertNull($user->photo_path); + + $this->attach(public_path('images/icon_user_1.png'), 'photo'); + $this->press(trans('user.update_photo')); + + $this->seePageIs(route('users.edit', $user)); + + $user = $user->fresh(); + + $this->assertNotNull($user->photo_path); + Storage::disk('avatars')->assertExists($user->photo_path); + } + + /** @test */ public function guest_can_search_users_profile() { $this->visit(route('users.search'));