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 0000000..9c32168 Binary files /dev/null and b/public/images/icon_user_1.png differ diff --git a/public/images/icon_user_2.png b/public/images/icon_user_2.png new file mode 100644 index 0000000..b172855 Binary files /dev/null and b/public/images/icon_user_2.png differ diff --git a/resources/lang/en/user.php b/resources/lang/en/user.php index 672ec1a..88de0e6 100644 --- a/resources/lang/en/user.php +++ b/resources/lang/en/user.php @@ -45,4 +45,8 @@ return [ 'city' => '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'));