From a640d50bb552982a171f131c3954514bccdad804 Mon Sep 17 00:00:00 2001 From: Winarto <13515061@std.stei.itb.ac.id> Date: Fri, 16 Mar 2018 21:58:29 +0700 Subject: [PATCH] Ubah database, tambah image upload, email regex validation --- app/Http/Controllers/MembersController.php | 130 ++++++++++++++++++ app/Http/Controllers/UsersController.php | 5 +- app/Member.php | 10 ++ .../2014_10_12_000000_create_users_table.php | 4 - ...2018_03_16_121506_create_members_table.php | 37 +++++ .../2018_03_16_134857_profile_image.php | 32 +++++ public/.htaccess | 3 +- resources/views/layouts/app.blade.php | 3 +- resources/views/users/editprofile.blade.php | 15 +- resources/views/users/profile.blade.php | 3 +- routes/web.php | 2 +- storage/app/public/profile_image/noimage.jpg | Bin 0 -> 26644 bytes 12 files changed, 230 insertions(+), 14 deletions(-) create mode 100644 app/Http/Controllers/MembersController.php create mode 100644 app/Member.php create mode 100644 database/migrations/2018_03_16_121506_create_members_table.php create mode 100644 database/migrations/2018_03_16_134857_profile_image.php create mode 100644 storage/app/public/profile_image/noimage.jpg diff --git a/app/Http/Controllers/MembersController.php b/app/Http/Controllers/MembersController.php new file mode 100644 index 0000000..72b90e2 --- /dev/null +++ b/app/Http/Controllers/MembersController.php @@ -0,0 +1,130 @@ +<?php + +namespace App\Http\Controllers; + +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Storage; +use App\Member; + +class MembersController extends Controller +{ + /** + * Display a listing of the resource. + * + * @return \Illuminate\Http\Response + */ + public function index() + { + // + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + // + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + // + } + + /** + * Display the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function show($id) + { + $user = Member::find($id); + if($user !== null){ + return view('users.profile')->with('user', $user); + } else { + return abort(404); + } + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function edit($id) + { + $user = Member::find($id); + if($user !== null){ + return view('users.editprofile')->with('user', $user); + } else { + return abort(404); + } + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + $this->validate($request, [ + 'email' => + array( + 'required', + 'regex:/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}/'), + 'phone_number' => 'required', + 'company' => 'required', + 'interest' => 'required', + 'profile_image' => 'image|nullable|max:1999' + ]); + + if($request->hasFile('profile_image')){ + $fileNameWithExt = $request->file('profile_image')->getClientOriginalName(); + $fileName = pathinfo($fileNameWithExt, PATHINFO_FILENAME); + $extension = $request->file('profile_image')->getClientOriginalExtension(); + $fileNameToStore = $fileName . '_' . time() . '.' . $extension; + + $path = $request->file('profile_image')->storeAs('public/profile_image', $fileNameToStore); + } + + $user = Member::find($id); + $user->email = $request->input('email'); + $user->phone_number = $request->input('phone_number'); + $user->company = $request->input('company'); + $user->interest = $request->input('interest'); + $user->address = $request->input('address'); + if($request->hasFile('profile_image')){ + if($user->profile_image !== 'noimage.jpg'){ + Storage::delete('public/profile_image/' . $user->profile_image); + } + $user->profile_image = $fileNameToStore; + } + $user->save(); + + return redirect('/profile/' . $id)->with('success', 'Profile Updated'); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + // + } +} diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/UsersController.php index f125d07..98ce34e 100644 --- a/app/Http/Controllers/UsersController.php +++ b/app/Http/Controllers/UsersController.php @@ -72,7 +72,10 @@ class UsersController extends Controller public function update(Request $request, $id) { $this->validate($request, [ - 'email' => 'required', + 'email' => + array( + 'required', + 'regex:/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}/'), 'phone_number' => 'required', 'company' => 'required', 'interest' => 'required' diff --git a/app/Member.php b/app/Member.php new file mode 100644 index 0000000..e99ceff --- /dev/null +++ b/app/Member.php @@ -0,0 +1,10 @@ +<?php + +namespace App; + +use Illuminate\Database\Eloquent\Model; + +class Member extends Model +{ + // +} 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 6d36712..67220e3 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -17,11 +17,7 @@ class CreateUsersTable extends Migration $table->increments('id'); $table->string('name'); $table->string('email', 191)->unique(); - $table->string('phone_number'); $table->string('password'); - $table->string('company'); - $table->string('interest'); - $table->string('address')->nullable(); $table->rememberToken(); $table->timestamps(); }); diff --git a/database/migrations/2018_03_16_121506_create_members_table.php b/database/migrations/2018_03_16_121506_create_members_table.php new file mode 100644 index 0000000..5961cf6 --- /dev/null +++ b/database/migrations/2018_03_16_121506_create_members_table.php @@ -0,0 +1,37 @@ +<?php + +use Illuminate\Support\Facades\Schema; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Database\Migrations\Migration; + +class CreateMembersTable extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('members', function (Blueprint $table) { + $table->increments('id'); + $table->string('name'); + $table->string('email', 191)->unique(); + $table->string('phone_number'); + $table->string('company'); + $table->string('interest'); + $table->string('address')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('members'); + } +} diff --git a/database/migrations/2018_03_16_134857_profile_image.php b/database/migrations/2018_03_16_134857_profile_image.php new file mode 100644 index 0000000..db3e05d --- /dev/null +++ b/database/migrations/2018_03_16_134857_profile_image.php @@ -0,0 +1,32 @@ +<?php + +use Illuminate\Support\Facades\Schema; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Database\Migrations\Migration; + +class ProfileImage extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::table('members', function($table){ + $table->string('profile_image')->default('noimage.jpg'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('members', function($table){ + $table->dropColumn('profile_image'); + }); + } +} diff --git a/public/.htaccess b/public/.htaccess index b75525b..b323428 100644 --- a/public/.htaccess +++ b/public/.htaccess @@ -11,11 +11,10 @@ # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # Handle Front Controller... - RewriteCond %{REQUEST_FILENAME} !-d - RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule> diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 8181536..bfa5970 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -5,12 +5,13 @@ <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="{{asset('css/app.css')}}"> + <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css"> <title>@yield('title')</title> </head> <body> <div class="container"> - @include('inc.messages') @include('inc.navbar') + @include('inc.messages') @yield('content') </div> </body> diff --git a/resources/views/users/editprofile.blade.php b/resources/views/users/editprofile.blade.php index b4f21f4..9f77c78 100644 --- a/resources/views/users/editprofile.blade.php +++ b/resources/views/users/editprofile.blade.php @@ -3,7 +3,6 @@ @section('title', $user->name . ' | Update Profile') @section('content') - <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css"> <h2 class="sub-title">Edit Profile</h2> <div class="row"> <div class="col-xs-12 col-sm-12 col-md-6 col-lg-6 col-xs-offset-0 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 toppad" > @@ -14,12 +13,15 @@ <div class="panel-body"> <div class="row"> <div class="col-md-3 col-lg-3 " align="center"> <img alt="User Pic" - src="https://x1.xingassets.com/assets/frontend_minified/img/users/nobody_m.original.jpg" + src="/storage/profile_image/{{$user->profile_image}}" class="img-circle img-responsive" id=""> </div> <div class=" col-md-9 col-lg-9 "> - {!! Form::open(['action' => ['UsersController@update',$user->id], 'method' => 'POST']) !!} + {!! Form::open(['action' => ['MembersController@update',$user->id], 'method' => 'POST', 'enctype' => 'multipart/form-data']) !!} <div class="form-group"> + {{Form::label('profile_image','Profile Image')}} + {{Form::file('profile_image')}} + {{Form::label('email','Email')}} {{Form::text('email', $user->email , ['class' => 'form-control'])}} @@ -44,5 +46,12 @@ </div> </div> </div> + <link rel="stylesheet" type="text/css" href="css/file-upload.css" /> +<script src="js/file-upload.js"></script> +<script type="text/javascript"> + $(document).ready(function() { + $('.file-upload').file_upload(); + }); +</script> @endsection \ No newline at end of file diff --git a/resources/views/users/profile.blade.php b/resources/views/users/profile.blade.php index 86ea40a..3b1fd75 100644 --- a/resources/views/users/profile.blade.php +++ b/resources/views/users/profile.blade.php @@ -3,7 +3,6 @@ @section('title', $user->name . ' | Profile') @section('content') - <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css"> <h2 class="sub-title">Profile</h2> <div class="row"> <div class="col-xs-12 col-sm-12 col-md-6 col-lg-6 col-xs-offset-0 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 toppad" > @@ -14,7 +13,7 @@ <div class="panel-body"> <div class="row"> <div class="col-md-3 col-lg-3 " align="center"> <img alt="User Pic" - src="https://x1.xingassets.com/assets/frontend_minified/img/users/nobody_m.original.jpg" + src="/storage/profile_image/{{$user->profile_image}}" class="img-circle img-responsive" id=""> </div> <div class=" col-md-9 col-lg-9 "> diff --git a/routes/web.php b/routes/web.php index e580395..6fa3587 100644 --- a/routes/web.php +++ b/routes/web.php @@ -15,4 +15,4 @@ Route::get('/', function () { return '<h1>Under Construction</h1>'; }); -Route::resource('profile', 'UsersController'); \ No newline at end of file +Route::resource('profile', 'MembersController'); \ No newline at end of file diff --git a/storage/app/public/profile_image/noimage.jpg b/storage/app/public/profile_image/noimage.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bed17c901e5fcdca78e6d892fdcd7c07b4b4bdb4 GIT binary patch literal 26644 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 literal 0 HcmV?d00001 -- GitLab