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
+
-
\ 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'));