From 416d871cca6b1c2243dcbde51e71c4ac0048d5ce Mon Sep 17 00:00:00 2001 From: prashant-webkul Date: Thu, 22 Nov 2018 18:13:03 +0530 Subject: [PATCH 01/15] Changes in api, subscription and verification --- .../Customer/AddressController.php | 67 ++++++++++++++++--- .../Controllers/Customer/AuthController.php | 26 ++++--- .../Customer/CustomerController.php | 18 ++++- .../Customer/WishlistController.php | 16 +++-- packages/Webkul/API/Http/api.php | 5 ++ .../Http/Controllers/AddressController.php | 1 + .../Controllers/RegistrationController.php | 46 ++++++++++++- .../Customer/src/Mail/VerificationEmail.php | 37 ++++++++++ .../Controllers/SubscriptionController.php | 29 ++++++-- packages/Webkul/Shop/src/Http/routes.php | 3 + .../Shop/src/Mail/SubscriptionEmail.php | 6 +- .../customers/account/profile/index.blade.php | 10 +++ .../customer/subscription-email.blade.php | 28 +++++--- .../customer/verification-email.blade.php | 24 +++++++ .../Resources/views/layouts/master.blade.php | 8 +++ 15 files changed, 273 insertions(+), 51 deletions(-) create mode 100644 packages/Webkul/Customer/src/Mail/VerificationEmail.php create mode 100644 packages/Webkul/Shop/src/Resources/views/emails/customer/verification-email.blade.php diff --git a/packages/Webkul/API/Http/Controllers/Customer/AddressController.php b/packages/Webkul/API/Http/Controllers/Customer/AddressController.php index df23f31d3..9a8cdfd3a 100644 --- a/packages/Webkul/API/Http/Controllers/Customer/AddressController.php +++ b/packages/Webkul/API/Http/Controllers/Customer/AddressController.php @@ -6,8 +6,10 @@ use Webkul\API\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\Event; +use Webkul\Customer\Repositories\CustomerAddressRepository as CustomerAddress; use Auth; use Cart; +use Validator; /** * Address controller for the APIs Customer Address @@ -18,13 +20,16 @@ use Cart; class AddressController extends Controller { protected $customer; + protected $customerAddress; - public function __construct() + public function __construct(CustomerAddress $customerAddress) { + $this->customerAddress = $customerAddress; + if(auth()->guard('customer')->check()) { $this->customer = auth()->guard('customer')->user(); } else { - return response()->json('Unauthorized', 401); + $this->customer = false; } } @@ -34,17 +39,61 @@ class AddressController extends Controller * @return response JSON */ public function getAddress() { - $addresses = $this->customer->addresses; + if($this->customer == false) { + return response()->json($this->customer, 401); + } else { + $addresses = $this->customer->addresses; - return response()->json($addresses, 200); + return response()->json($addresses, 200); + } } public function getDefaultAddress() { - $defaultAddress = $this->customer->default_address; + if($this->customer == false) { + return response()->json($this->customer, 401); + } else { + $defaultAddress = $this->customer->default_address; - if($defaultAddress->count() > 0) - return response()->json($defaultAddress, 200); - else - return response()->json(false, 200); + if ($defaultAddress->count() > 0) { + return response()->json($defaultAddress, 200); + } else { + return response()->json(['false, default address not found'], 200); + } + } + } + + public function createAddress() { + $data = request()->all(); + + $validator = Validator::make(request()->all(), [ + 'address1' => 'string|required', + 'address2' => 'string', + 'country' => 'string|required', + 'state' => 'string|required', + 'city' => 'string|required', + 'postcode' => 'required', + 'phone' => 'required' + ]); + + if ($validator->fails()) { + return response()->json($validator->messages(), 400); + } + + $cust_id['customer_id'] = $this->customer->id; + $data = array_merge($cust_id, $data); + + if($this->customer->addresses->count() == 0) { + $data['default_address'] = 1; + } + + if($this->address->create($data)) { + session()->flash('success', 'Address have been successfully added.'); + + return redirect()->route($this->_config['redirect']); + } else { + session()->flash('error', 'Address cannot be added.'); + + return redirect()->back(); + } } } \ No newline at end of file diff --git a/packages/Webkul/API/Http/Controllers/Customer/AuthController.php b/packages/Webkul/API/Http/Controllers/Customer/AuthController.php index 603ccd4d7..a22c61aaf 100644 --- a/packages/Webkul/API/Http/Controllers/Customer/AuthController.php +++ b/packages/Webkul/API/Http/Controllers/Customer/AuthController.php @@ -18,14 +18,6 @@ use Cart; */ class AuthController extends Controller { - public function __construct() - { - // $this->middleware('customer')->except(['show','create']); - // $this->_config = request('_config'); - // $subscriber = new CustomerEventsHandler; - // Event::subscribe($subscriber); - } - /** * To get the details of user to display on profile * @@ -34,10 +26,22 @@ class AuthController extends Controller public function create() { $data = request()->except('_token'); - if(!auth()->guard('customer')->attempt($data)) { - return response()->json('Incorrect Credentials', 200); + if(!auth()->guard('customer')->check()) { + if(!auth()->guard('customer')->attempt($data)) { + return response()->json(['unauthenticated', 'invalid creds'], 401); + } else { + return response()->json(['authenticated'], 200); + } } else { - return response()->json(auth()->guard('customer')->user(), 200); + return response()->json(['already authenticated'], 200); + } + } + + public function destroy() { + if(auth()->guard('customer')->logout()) { + return response()->json(['logged out'], 200); + } else { + return response()->json(['already logged out'], 200); } } } \ No newline at end of file diff --git a/packages/Webkul/API/Http/Controllers/Customer/CustomerController.php b/packages/Webkul/API/Http/Controllers/Customer/CustomerController.php index e1a74f30d..5c2aa06ce 100644 --- a/packages/Webkul/API/Http/Controllers/Customer/CustomerController.php +++ b/packages/Webkul/API/Http/Controllers/Customer/CustomerController.php @@ -24,7 +24,7 @@ class CustomerController extends Controller if(auth()->guard('customer')->check()) { $this->customer = auth()->guard('customer')->user(); } else { - return response()->json('Unauthorized', 401); + $this->customer = 'unauthorized'; } } @@ -34,6 +34,20 @@ class CustomerController extends Controller * @return response JSON */ public function getProfile() { - return $this->customer; + if($this->customer == 'unauthorized') { + return response()->json($this->customer, 401); + } else { + $customer = [ + 'id' => $this->customer->id, + 'first_name' => $this->customer->first_name, + 'last_name' => $this->customer->last_name, + 'gender' => $this->customer->gender, + 'date_of_birth' => $this->customer->date_of_birth, + 'email' => $this->customer->email, + 'subscribed_to_news_letter' => $this->customer->subscribed_to_news_letter, + ]; + } + + return response()->json($customer, 200); } } \ No newline at end of file diff --git a/packages/Webkul/API/Http/Controllers/Customer/WishlistController.php b/packages/Webkul/API/Http/Controllers/Customer/WishlistController.php index a975d3d14..5848b051f 100644 --- a/packages/Webkul/API/Http/Controllers/Customer/WishlistController.php +++ b/packages/Webkul/API/Http/Controllers/Customer/WishlistController.php @@ -23,18 +23,22 @@ class WishlistController extends Controller if(auth()->guard('customer')->check()) { $this->customer = auth()->guard('customer')->user(); } else { - return response()->json('Unauthorized', 401); + $this->customer = false; } } public function getWishlist() { - $wishlist = $this->customer->wishlist_items; - - if($wishlist->count() > 0) { - return response()->json($wishlist, 200); + if($this->customer == false) { + return response()->json($this->customer, 401); } else { - return response()->json('Wishlist Empty', 200); + $wishlist = $this->customer->wishlist_items; + + if($wishlist->count() > 0) { + return response()->json($wishlist, 200); + } else { + return response()->json('Wishlist Empty', 200); + } } } } \ No newline at end of file diff --git a/packages/Webkul/API/Http/api.php b/packages/Webkul/API/Http/api.php index 396c14e4f..92be9e123 100644 --- a/packages/Webkul/API/Http/api.php +++ b/packages/Webkul/API/Http/api.php @@ -4,6 +4,9 @@ Route::group(['namespace' => 'Webkul\API\Http\Controllers\Customer', 'prefix' => //auth route for customer Route::post('login', 'AuthController@create'); + //auth route for customer + Route::post('logout', 'AuthController@destroy'); + //get user Route::get('get/user', 'CustomerController@getProfile'); @@ -13,6 +16,8 @@ Route::group(['namespace' => 'Webkul\API\Http\Controllers\Customer', 'prefix' => //address Route::get('get/address', 'AddressController@getAddress'); Route::get('get/default/address', 'AddressController@getDefaultAddress'); + + Route::post('create/address', 'AddressController@createAddress'); }); Route::group(['namespace' => 'Webkul\API\Http\Controllers\Shop', 'prefix' => 'api/cart'], function ($router) { diff --git a/packages/Webkul/Customer/src/Http/Controllers/AddressController.php b/packages/Webkul/Customer/src/Http/Controllers/AddressController.php index 35a5c1ec4..ef292e343 100644 --- a/packages/Webkul/Customer/src/Http/Controllers/AddressController.php +++ b/packages/Webkul/Customer/src/Http/Controllers/AddressController.php @@ -73,6 +73,7 @@ class AddressController extends Controller $this->validate(request(), [ 'address1' => 'string|required', + 'address2' => 'string', 'country' => 'string|required', 'state' => 'string|required', 'city' => 'string|required', diff --git a/packages/Webkul/Customer/src/Http/Controllers/RegistrationController.php b/packages/Webkul/Customer/src/Http/Controllers/RegistrationController.php index f7770af29..6b1375abe 100644 --- a/packages/Webkul/Customer/src/Http/Controllers/RegistrationController.php +++ b/packages/Webkul/Customer/src/Http/Controllers/RegistrationController.php @@ -4,6 +4,8 @@ namespace Webkul\Customer\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Http\Response; +use Illuminate\Support\Facades\Mail; +use Webkul\Customer\Mail\VerificationEmail; use Illuminate\Routing\Controller; use Webkul\Customer\Repositories\CustomerRepository; @@ -61,18 +63,56 @@ class RegistrationController extends Controller $data['channel_id'] = core()->getCurrentChannel()->id; + $data['is_verified'] = 0; + if ($this->customer->create($data)) { + $verificationData['email'] = $data['email']; + session()->flash('success', 'Account Created Successfully'); - return redirect()->back(); + $attempt = auth()->guard('customer')->attempt(request(['email', 'password'])); - // return redirect()->route($this->_config['redirect'])->with('message', 'Account Created Successfully, Try To Log In'); + if($attempt) { + try { + Mail::send(new VerificationEmail($verificationData)); + }catch(\Exception $e) { + session()->flash('success', 'Account Created Successfully, But Verification Email Is Not Sent.'); + return redirect()->route($this->_config['redirect']); + } + + return redirect()->route($this->_config['redirect']); + } else { + return redirect()->back(); + } } else { session()->flash('error', 'Cannot Create Your Account'); return redirect()->back(); } } -} + + /** + * Method to verify account + * + */ + public function verifyAccount($email) + { + $customer = $this->customer->findOneByField('email', $email); + + if($customer) { + if($customer->is_verified == 1) { + session()->flash('error', 'Your Account is already verified'); + } else { + $data['is_verified'] = 1; + $this->customer->update($data,$customer->id); + session()->flash('info', 'Your Account has been verified'); + } + } else { + session()->flash('error', 'You dont have account with us'); + } + + return redirect()->back(); + } +} \ No newline at end of file diff --git a/packages/Webkul/Customer/src/Mail/VerificationEmail.php b/packages/Webkul/Customer/src/Mail/VerificationEmail.php new file mode 100644 index 000000000..2d3a83ce4 --- /dev/null +++ b/packages/Webkul/Customer/src/Mail/VerificationEmail.php @@ -0,0 +1,37 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ +class VerificationEmail extends Mailable +{ + use Queueable, SerializesModels; + + public $verificationData; + + public function __construct($verificationData) { + $this->verificationData = $verificationData; + } + + /** + * Build the message. + * + * @return $this + */ + public function build() + { + return $this->to($this->verificationData['email']) + ->subject('Verification email') + ->view('shop::emails.customer.verification-email')->with('data', ['email' => $this->verificationData['email']]); + } +} \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Http/Controllers/SubscriptionController.php b/packages/Webkul/Shop/src/Http/Controllers/SubscriptionController.php index 129d4c86a..c7d74980d 100644 --- a/packages/Webkul/Shop/src/Http/Controllers/SubscriptionController.php +++ b/packages/Webkul/Shop/src/Http/Controllers/SubscriptionController.php @@ -84,7 +84,7 @@ class SubscriptionController extends Controller $alreadySubscribed = $this->subscription->findWhere(['email' => $email]); $unique = function() use($alreadySubscribed){ - if($alreadySubscribed->count() > 0) { + if($alreadySubscribed->count() > 0 ) { return 0; } else { return 1; @@ -105,7 +105,7 @@ class SubscriptionController extends Controller ]); } else { $user = auth()->guard('customer')->user(); - + $token = auth()->guard('customer')->user()->email; $result = $user->update(['subscribed_to_news_letter' => 1]); } @@ -138,6 +138,27 @@ class SubscriptionController extends Controller * @var string $token */ public function unsubscribe($token) { - dd('unsubscribing'); + if(auth()->guard('customer')->check()) { + if(auth()->guard('customer')->user()->email == $token) { + auth()->guard('customer')->user()->update(['subscribed_to_news_letter' => 0]); + session('info', 'You Are Unsubscribed'); + } else { + session()->flash('warning', 'You must be logged in with correct to unsubscribe'); + } + } else { + $subscriber = $this->subscription->findOneByField('token', $token); + + if($subscriber->count() > 0 && $subscriber->delete()) { + session('info', 'You Are Unsubscribed'); + } else { + session('info', 'You Have Already Unsubscribed'); + } + + if($this->customer->findOneByField('email', $token)) { + session('info', 'You must Logged In To Unsubscribe'); + } + } + + return redirect()->back(); } -} +} \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Http/routes.php b/packages/Webkul/Shop/src/Http/routes.php index 631e50315..645bdc079 100644 --- a/packages/Webkul/Shop/src/Http/routes.php +++ b/packages/Webkul/Shop/src/Http/routes.php @@ -150,6 +150,9 @@ Route::group(['middleware' => ['web', 'theme', 'locale', 'currency']], function 'redirect' => 'customer.account.index', ])->name('customer.register.create'); + //verify account + Route::get('/verify-account/{email}', 'Webkul\Customer\Http\Controllers\RegistrationController@verifyAccount')->name('customer.verify'); + // Auth Routes Route::group(['middleware' => ['customer']], function () { diff --git a/packages/Webkul/Shop/src/Mail/SubscriptionEmail.php b/packages/Webkul/Shop/src/Mail/SubscriptionEmail.php index 31f306135..295b2883d 100644 --- a/packages/Webkul/Shop/src/Mail/SubscriptionEmail.php +++ b/packages/Webkul/Shop/src/Mail/SubscriptionEmail.php @@ -6,7 +6,6 @@ use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; use Illuminate\Contracts\Queue\ShouldQueue; - /** * Subscriber Mail class * @@ -16,13 +15,10 @@ use Illuminate\Contracts\Queue\ShouldQueue; class SubscriptionEmail extends Mailable { use Queueable, SerializesModels; - public $subscriptionData; - public function __construct($subscriptionData) { $this->subscriptionData = $subscriptionData; } - /** * Build the message. * @@ -34,4 +30,4 @@ class SubscriptionEmail extends Mailable ->subject('subscription email') ->view('shop::emails.customer.subscription-email')->with('data', ['content' => 'You Are Subscribed', 'token' => $this->subscriptionData['token']]); } -} +} \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Resources/views/customers/account/profile/index.blade.php b/packages/Webkul/Shop/src/Resources/views/customers/account/profile/index.blade.php index 2e5151fb5..b39596c16 100644 --- a/packages/Webkul/Shop/src/Resources/views/customers/account/profile/index.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/customers/account/profile/index.blade.php @@ -52,6 +52,16 @@ {{ __('shop::app.customer.account.profile.email') }} {{ $customer->email }} + + @if($customer->subscribed_to_news_letter == 1) + + {{ __('shop::app.footer.subscribe-newsletter') }} + + {{ __('shop::app.subscription.unsubscribe') }} + + + @endif + diff --git a/packages/Webkul/Shop/src/Resources/views/emails/customer/subscription-email.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/customer/subscription-email.blade.php index c6a6b5086..c58daca8b 100644 --- a/packages/Webkul/Shop/src/Resources/views/emails/customer/subscription-email.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/emails/customer/subscription-email.blade.php @@ -1,18 +1,24 @@ @component('shop::emails.layouts.master') -
- - - -
-
- {{ $data['content'] }} +
+
+ + + +
+ +
+ {{ __('shop::app.subscription.title') }} +
- You Can Unsubscribe From The List By Clicking Link Below. + {{ __('shop::app.subscription.message') }} +
+ +
+ {{ __('shop::app.subscription.unsubscribe') }}
- - {{ __('shop::app.subscription.unsubscribe') }} -
+ @endcomponent \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Resources/views/emails/customer/verification-email.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/customer/verification-email.blade.php new file mode 100644 index 000000000..122fdaef2 --- /dev/null +++ b/packages/Webkul/Shop/src/Resources/views/emails/customer/verification-email.blade.php @@ -0,0 +1,24 @@ +@component('shop::emails.layouts.master') + +
+
+ + + +
+ +
+ {{ __('shop::app.subscription.title') }} +
+ +
+ {{ __('shop::app.subscription.message') }} +
+ +
+ Verify Your Account +
+
+ +@endcomponent \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Resources/views/layouts/master.blade.php b/packages/Webkul/Shop/src/Resources/views/layouts/master.blade.php index 2fcb0c0a8..c31792968 100644 --- a/packages/Webkul/Shop/src/Resources/views/layouts/master.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/layouts/master.blade.php @@ -35,6 +35,14 @@ @include('shop::layouts.header.index') + @auth('customer') + @if(auth()->guard('customer')->user()->is_verified == 0) + + @endif + @endauth + @yield('slider')
From 5b5006b809cb05b069e602f2687f4c33a55e36aa Mon Sep 17 00:00:00 2001 From: prashant-webkul Date: Thu, 22 Nov 2018 20:21:37 +0530 Subject: [PATCH 02/15] Customer Address API for CRUD and getting and making the default address is complete --- .../Customer/AddressController.php | 40 ++++++++++++++----- packages/Webkul/API/Http/api.php | 10 +++-- .../Admin/src/DataGrids/AttributeDataGrid.php | 1 - .../account/address/create.blade.php | 8 ++-- 4 files changed, 42 insertions(+), 17 deletions(-) diff --git a/packages/Webkul/API/Http/Controllers/Customer/AddressController.php b/packages/Webkul/API/Http/Controllers/Customer/AddressController.php index 9a8cdfd3a..850ad197a 100644 --- a/packages/Webkul/API/Http/Controllers/Customer/AddressController.php +++ b/packages/Webkul/API/Http/Controllers/Customer/AddressController.php @@ -24,6 +24,8 @@ class AddressController extends Controller public function __construct(CustomerAddress $customerAddress) { + $this->middleware('customer'); + $this->customerAddress = $customerAddress; if(auth()->guard('customer')->check()) { @@ -38,7 +40,7 @@ class AddressController extends Controller * * @return response JSON */ - public function getAddress() { + public function get() { if($this->customer == false) { return response()->json($this->customer, 401); } else { @@ -48,7 +50,7 @@ class AddressController extends Controller } } - public function getDefaultAddress() { + public function getDefault() { if($this->customer == false) { return response()->json($this->customer, 401); } else { @@ -62,7 +64,7 @@ class AddressController extends Controller } } - public function createAddress() { + public function create() { $data = request()->all(); $validator = Validator::make(request()->all(), [ @@ -86,14 +88,34 @@ class AddressController extends Controller $data['default_address'] = 1; } - if($this->address->create($data)) { - session()->flash('success', 'Address have been successfully added.'); + $result = $this->customerAddress->create($data); - return redirect()->route($this->_config['redirect']); + if($result) { + return response()->json(true, 200); } else { - session()->flash('error', 'Address cannot be added.'); - - return redirect()->back(); + return response()->json(false, 200); } } + + public function delete($id) { + $result = $this->customerAddress->delete($id); + + return response()->json($result, 200); + } + + public function makeDefault($id) { + $defaultAddress = $this->customer->default_address; + + if($defaultAddress != null && $defaultAddress->count() > 0) { + $defaultAddress->update(['default_address' => 0]); + } + + if($this->customerAddress->find($id)->default_address == 1) { + return response()->json(false, 200); + } + + $result = $this->customerAddress->update(['default_address' => 1], $id); + + return response()->json($result, 200); + } } \ No newline at end of file diff --git a/packages/Webkul/API/Http/api.php b/packages/Webkul/API/Http/api.php index 92be9e123..9dc7abf1e 100644 --- a/packages/Webkul/API/Http/api.php +++ b/packages/Webkul/API/Http/api.php @@ -14,10 +14,14 @@ Route::group(['namespace' => 'Webkul\API\Http\Controllers\Customer', 'prefix' => Route::get('get/wishlist', 'WishlistController@getWishlist'); //address - Route::get('get/address', 'AddressController@getAddress'); - Route::get('get/default/address', 'AddressController@getDefaultAddress'); + Route::get('get/address', 'AddressController@get'); + Route::get('get/default/address', 'AddressController@getDefault'); - Route::post('create/address', 'AddressController@createAddress'); + Route::post('create/address', 'AddressController@create'); + + Route::put('make/default/address/{id}', 'AddressController@makeDefault'); + + Route::delete('delete/address/{id}', 'AddressController@delete'); }); Route::group(['namespace' => 'Webkul\API\Http\Controllers\Shop', 'prefix' => 'api/cart'], function ($router) { diff --git a/packages/Webkul/Admin/src/DataGrids/AttributeDataGrid.php b/packages/Webkul/Admin/src/DataGrids/AttributeDataGrid.php index 50a5dd83f..851154410 100644 --- a/packages/Webkul/Admin/src/DataGrids/AttributeDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/AttributeDataGrid.php @@ -5,7 +5,6 @@ namespace Webkul\Admin\DataGrids; use Illuminate\View\View; use Webkul\Ui\DataGrid\Facades\DataGrid; - /** * Attributes DataGrid * diff --git a/packages/Webkul/Shop/src/Resources/views/customers/account/address/create.blade.php b/packages/Webkul/Shop/src/Resources/views/customers/account/address/create.blade.php index 3ab8ef375..72de71a59 100644 --- a/packages/Webkul/Shop/src/Resources/views/customers/account/address/create.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/customers/account/address/create.blade.php @@ -16,7 +16,7 @@
- +
From 460b025b2b14ad61ca56b6d3639d29c549d196dd Mon Sep 17 00:00:00 2001 From: prashant-webkul Date: Thu, 22 Nov 2018 22:00:10 +0530 Subject: [PATCH 03/15] customer profile old password match bug fixed --- .../Customer/CustomerController.php | 49 +++++++++++++++---- packages/Webkul/API/Http/api.php | 8 ++- ..._is_verified_column_in_customers_table.php | 32 ++++++++++++ .../Http/Controllers/CustomerController.php | 19 ++++--- .../customers/account/profile/edit.blade.php | 4 +- 5 files changed, 89 insertions(+), 23 deletions(-) create mode 100644 packages/Webkul/Customer/src/Database/migrations/2018_11_17_165758_add_is_verified_column_in_customers_table.php diff --git a/packages/Webkul/API/Http/Controllers/Customer/CustomerController.php b/packages/Webkul/API/Http/Controllers/Customer/CustomerController.php index 5c2aa06ce..ab43cfe28 100644 --- a/packages/Webkul/API/Http/Controllers/Customer/CustomerController.php +++ b/packages/Webkul/API/Http/Controllers/Customer/CustomerController.php @@ -8,6 +8,8 @@ use Illuminate\Http\Response; use Illuminate\Support\Facades\Event; use Auth; use Cart; +use Validator; +use Hash; /** * Customer controller for the APIs of Profile customer @@ -37,17 +39,46 @@ class CustomerController extends Controller if($this->customer == 'unauthorized') { return response()->json($this->customer, 401); } else { - $customer = [ - 'id' => $this->customer->id, - 'first_name' => $this->customer->first_name, - 'last_name' => $this->customer->last_name, - 'gender' => $this->customer->gender, - 'date_of_birth' => $this->customer->date_of_birth, - 'email' => $this->customer->email, - 'subscribed_to_news_letter' => $this->customer->subscribed_to_news_letter, - ]; + $customer = auth()->guard('customer')->user(); } return response()->json($customer, 200); } + + public function updateProfile($id) { + $validator = Validator::make(request()->all(), [ + 'first_name' => 'string|required', + 'last_name' => 'string|required', + 'gender' => 'required', + 'date_of_birth' => 'date', + 'email' => 'email|required|unique:customers,email,'.$id, + 'password' => 'confirmed|required_if:oldpassword,!=,null' + ]); + + if ($validator->fails()) { + return response()->json($validator->messages(), 400); + } + + $data = collect(request()->all())->toArray(); + + if($data['oldpassword'] == null) { + $data = collect(request()->input())->except([ 'oldpassword', 'password', 'password_confirmation'])->toArray(); + } else { + if(Hash::check($data['oldpassword'], auth()->guard('customer')->user()->password)) { + $data = collect(request()->input())->toArray(); + + $data['password'] = bcrypt($data['password']); + } else { + return response()->json('Old password does not match', 200); + } + } + + $result = $this->customer->update($data); + + if($result) { + return response()->json(true, 200); + } else { + return response()->json(false, 200); + } + } } \ No newline at end of file diff --git a/packages/Webkul/API/Http/api.php b/packages/Webkul/API/Http/api.php index 9dc7abf1e..5f9e87de8 100644 --- a/packages/Webkul/API/Http/api.php +++ b/packages/Webkul/API/Http/api.php @@ -7,8 +7,9 @@ Route::group(['namespace' => 'Webkul\API\Http\Controllers\Customer', 'prefix' => //auth route for customer Route::post('logout', 'AuthController@destroy'); - //get user - Route::get('get/user', 'CustomerController@getProfile'); + //get customer profile + Route::get('get/profile', 'CustomerController@getProfile'); + Route::put('update/profile/{id}', 'CustomerController@updateProfile'); //wishlist Route::get('get/wishlist', 'WishlistController@getWishlist'); @@ -16,11 +17,8 @@ Route::group(['namespace' => 'Webkul\API\Http\Controllers\Customer', 'prefix' => //address Route::get('get/address', 'AddressController@get'); Route::get('get/default/address', 'AddressController@getDefault'); - Route::post('create/address', 'AddressController@create'); - Route::put('make/default/address/{id}', 'AddressController@makeDefault'); - Route::delete('delete/address/{id}', 'AddressController@delete'); }); diff --git a/packages/Webkul/Customer/src/Database/migrations/2018_11_17_165758_add_is_verified_column_in_customers_table.php b/packages/Webkul/Customer/src/Database/migrations/2018_11_17_165758_add_is_verified_column_in_customers_table.php new file mode 100644 index 000000000..3e2794ad1 --- /dev/null +++ b/packages/Webkul/Customer/src/Database/migrations/2018_11_17_165758_add_is_verified_column_in_customers_table.php @@ -0,0 +1,32 @@ +boolean('is_verified')->nullable()->after('subscribed_to_news_letter'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('customers', function (Blueprint $table) { + $table->dropColumn('is_verified'); + }); + } +} \ No newline at end of file diff --git a/packages/Webkul/Customer/src/Http/Controllers/CustomerController.php b/packages/Webkul/Customer/src/Http/Controllers/CustomerController.php index 1d6c172f2..30155dc53 100644 --- a/packages/Webkul/Customer/src/Http/Controllers/CustomerController.php +++ b/packages/Webkul/Customer/src/Http/Controllers/CustomerController.php @@ -8,6 +8,7 @@ use Webkul\Customer\Repositories\CustomerRepository; use Webkul\Product\Repositories\ProductReviewRepository as ProductReview; use Webkul\Customer\Models\Customer; use Auth; +use Hash; /** * Customer controlller for the customer basically for the tasks of customers which will be done after customer authentication. @@ -94,41 +95,45 @@ class CustomerController extends Controller $id = auth()->guard('customer')->user()->id; $this->validate(request(), [ - 'first_name' => 'string', 'last_name' => 'string', 'gender' => 'required', 'date_of_birth' => 'date', 'email' => 'email|unique:customers,email,'.$id, 'password' => 'confirmed|required_if:oldpassword,!=,null' - ]); $data = collect(request()->input())->except('_token')->toArray(); if($data['oldpassword'] == null) { $data = collect(request()->input())->except(['_token','password','password_confirmation','oldpassword'])->toArray(); - + if($this->customer->update($data, $id)) { Session()->flash('success','Profile Updated Successfully'); return redirect()->back(); } else { - Session()->flash('success','Profile Updated Successfully'); + Session()->flash('success','Profile Cannot Be Updated Successfully'); return redirect()->back(); } } else { - $data = collect(request()->input())->except(['_token','oldpassword'])->toArray(); + if(Hash::check($data['oldpassword'], auth()->guard('customer')->user()->password)) { + $data = collect(request()->input())->except(['_token','oldpassword'])->toArray(); - $data['password'] = bcrypt($data['password']); + $data['password'] = bcrypt($data['password']); + } else { + session()->flash('warning', 'The Old Password Does Not Match'); + + return redirect()->back(); + } if($this->customer->update($data, $id)) { Session()->flash('success','Profile Updated Successfully'); return redirect()->back(); } else { - Session()->flash('success','Profile Updated Successfully'); + Session()->flash('success','Profile Cannot Be Updated Successfully'); return redirect()->back(); } diff --git a/packages/Webkul/Shop/src/Resources/views/customers/account/profile/edit.blade.php b/packages/Webkul/Shop/src/Resources/views/customers/account/profile/edit.blade.php index 72162ffcf..d151e9533 100644 --- a/packages/Webkul/Shop/src/Resources/views/customers/account/profile/edit.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/customers/account/profile/edit.blade.php @@ -58,7 +58,7 @@
- + @{{ errors.first('oldpassword') }}
@@ -68,7 +68,7 @@ @{{ errors.first('password') }}
-
+
@{{ errors.first('password') }} From a4979142417aea6081a10dfec32b69d773a98111 Mon Sep 17 00:00:00 2001 From: prashant-webkul Date: Thu, 22 Nov 2018 22:17:20 +0530 Subject: [PATCH 04/15] Customer Registration API implemented --- .../Customer/RegistrationController.php | 55 +++++++++++++++++++ packages/Webkul/API/Http/api.php | 4 ++ 2 files changed, 59 insertions(+) create mode 100644 packages/Webkul/API/Http/Controllers/Customer/RegistrationController.php diff --git a/packages/Webkul/API/Http/Controllers/Customer/RegistrationController.php b/packages/Webkul/API/Http/Controllers/Customer/RegistrationController.php new file mode 100644 index 000000000..ee6a07465 --- /dev/null +++ b/packages/Webkul/API/Http/Controllers/Customer/RegistrationController.php @@ -0,0 +1,55 @@ + @prashant-webkul + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ +class RegistrationController extends Controller +{ + protected $customer; + + public function __construct(Customer $customer) { + $this->customer = $customer; + } + + public function create() { + $validator = Validator::make(request()->all(), [ + 'first_name' => 'string|required', + 'last_name' => 'string|required', + 'email' => 'email|required|unique:customers,email', + 'password' => 'confirmed|min:6|required', + 'agreement' => 'required' + ]); + + if ($validator->fails()) { + return response()->json($validator->messages(), 400); + } + + $data = request()->all(); + + $data['password'] = bcrypt($data['password']); + + $data['channel_id'] = core()->getCurrentChannel()->id; + + $data['is_verified'] = 0; + + $result = $this->customer->create($data); + + if ($result) { + return response()->json(true, 200); + } else { + return response()->json(false, 200); + } + } +} \ No newline at end of file diff --git a/packages/Webkul/API/Http/api.php b/packages/Webkul/API/Http/api.php index 5f9e87de8..545e6d9fa 100644 --- a/packages/Webkul/API/Http/api.php +++ b/packages/Webkul/API/Http/api.php @@ -1,5 +1,9 @@ 'Webkul\API\Http\Controllers\Customer', 'prefix' => 'api/customer'], function ($router) { + Route::post('/register', 'RegistrationController@create'); +}); + Route::group(['namespace' => 'Webkul\API\Http\Controllers\Customer', 'prefix' => 'api/customer'], function ($router) { //auth route for customer Route::post('login', 'AuthController@create'); From 9ce3e53914e1b31863b4c563628b016c29b24d5f Mon Sep 17 00:00:00 2001 From: prashant-webkul Date: Fri, 23 Nov 2018 16:22:19 +0530 Subject: [PATCH 05/15] Fixed Bug in Tax Module --- .../Admin/src/Resources/lang/en/app.php | 89 ++++++++++-------- .../views/tax/tax-categories/create.blade.php | 16 ++-- .../views/tax/tax-categories/edit.blade.php | 90 +++++++++---------- .../views/tax/tax-categories/index.blade.php | 6 +- .../views/tax/tax-rates/create.blade.php | 18 ++-- .../views/tax/tax-rates/edit.blade.php | 18 ++-- .../views/tax/tax-rates/index.blade.php | 6 +- .../Controllers/TaxCategoryController.php | 45 +++++----- .../Http/Controllers/TaxRateController.php | 16 ++-- .../Repositories/TaxCategoryRepository.php | 60 ++----------- .../src/Repositories/TaxRateRepository.php | 26 ------ 11 files changed, 161 insertions(+), 229 deletions(-) diff --git a/packages/Webkul/Admin/src/Resources/lang/en/app.php b/packages/Webkul/Admin/src/Resources/lang/en/app.php index 6619618d3..e6190a824 100644 --- a/packages/Webkul/Admin/src/Resources/lang/en/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/en/app.php @@ -297,44 +297,6 @@ return [ ], 'configuration' => [ - 'tax-categories' => [ - 'title' => 'Tax Categories', - 'add-title' => 'Add Tax Category', - 'edit-title' => 'Edit Tax Category', - 'save-btn-title' => 'Save Tax Category', - 'general' => 'Tax Category', - 'select-channel' => 'Select Channel', - 'name' => 'Name', - 'code' => 'Code', - 'description' => 'Description', - 'select-taxrates' => 'Select Tax Rates', - 'edit' => [ - 'title' => 'Edit Tax Category', - 'edit-button-title' => 'Edit Tax Category' - ] - ], - - 'tax-rates' => [ - 'title' => 'Tax Rates', - 'add-title' => 'Add Tax Rate', - 'edit-title' => 'Edit Tax Rate', - 'save-btn-title' => 'Save Tax Rate', - 'general' => 'Tax Rate', - 'identifier' => 'Identifier', - 'is_zip' => 'Enable Zip Range', - 'zip_from' => 'Zip From', - 'zip_to' => 'Zip To', - 'state' => 'State', - 'select-state' => 'Select a region, state or province.', - 'country' => 'Country', - 'tax_rate' => 'Rate', - 'edit' => [ - 'title' => 'Edit Tax Rate', - 'edit-button-title' => 'Edit Rate' - ], - 'zip_code' => 'Zip Code', - 'is_zip' => 'Enable Zip Range', - ], ], 'settings' => [ @@ -441,6 +403,57 @@ return [ 'delete-success' => 'Cannot Delete The Last Slider Item', 'delete-fail' => 'Slider Item Successfully Deleted' ], + + 'tax-categories' => [ + 'title' => 'Tax Categories', + 'add-title' => 'Create Tax Category', + 'edit-title' => 'Edit Tax Category', + 'save-btn-title' => 'Save Tax Category', + 'general' => 'Tax Category', + 'select-channel' => 'Select Channel', + 'name' => 'Name', + 'code' => 'Code', + 'description' => 'Description', + 'select-taxrates' => 'Select Tax Rates', + 'edit' => [ + 'title' => 'Edit Tax Category', + 'edit-button-title' => 'Edit Tax Category' + ], + 'create-success' => 'New Tax Category Created', + 'create-error' => 'Error, While Creating Tax Category', + 'update-success' => 'Successfully Updated Tax Category', + 'update-error' => 'Error While Updating Tax Category', + 'atleast-one' => 'Cannot Delete The Last Tax Category', + 'delete' => 'Tax Category Successfully Deleted' + ], + + 'tax-rates' => [ + 'title' => 'Tax Rates', + 'add-title' => 'Create Tax Rate', + 'edit-title' => 'Edit Tax Rate', + 'save-btn-title' => 'Create Tax Rate', + 'general' => 'Tax Rate', + 'identifier' => 'Identifier', + 'is_zip' => 'Enable Zip Range', + 'zip_from' => 'Zip From', + 'zip_to' => 'Zip To', + 'state' => 'State', + 'select-state' => 'Select a region, state or province.', + 'country' => 'Country', + 'tax_rate' => 'Rate', + 'edit' => [ + 'title' => 'Edit Tax Rate', + 'edit-button-title' => 'Edit Rate' + ], + 'zip_code' => 'Zip Code', + 'is_zip' => 'Enable Zip Range', + 'create-success' => 'Tax Rate Created Successfully', + 'create-error' => 'Cannot Create Tax Rate', + 'update-success' => 'Tax Rate Updated Successfully', + 'update-error' => 'Error! Tax Rate Cannot Be Updated', + 'delete' => 'Tax Rate Deleted Successfully', + 'atleast-one' => 'Cannot Delete Last Tax Rate' + ], ], 'customers' => [ 'groups' =>[ diff --git a/packages/Webkul/Admin/src/Resources/views/tax/tax-categories/create.blade.php b/packages/Webkul/Admin/src/Resources/views/tax/tax-categories/create.blade.php index 57d9f33de..79827961f 100644 --- a/packages/Webkul/Admin/src/Resources/views/tax/tax-categories/create.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/tax/tax-categories/create.blade.php @@ -1,7 +1,7 @@ @extends('admin::layouts.content') @section('page_title') - {{ __('admin::app.configuration.tax-categories.add-title') }} + {{ __('admin::app.settings.tax-categories.add-title') }} @stop @section('content') @@ -9,12 +9,12 @@
@@ -22,7 +22,7 @@
@csrf()
- + @@ -46,7 +46,7 @@
- + @@ -54,7 +54,7 @@
- + @@ -62,7 +62,7 @@
- + + @foreach(core()->getAllChannels() as $channelModel) - - @endforeach - + @{{ errors.first('channel') }} +
- @{{ errors.first('channel') }} -
+
+ -
- + - + @{{ errors.first('code') }} +
- @{{ errors.first('code') }} -
+
+ -
- + - + @{{ errors.first('name') }} +
- @{{ errors.first('name') }} -
+
+ -
- + - + @{{ errors.first('description') }} +
- @{{ errors.first('description') }} -
+
+ -
- + @inject('taxRates', 'Webkul\Tax\Repositories\TaxRateRepository') + - @foreach($taxRates->all() as $taxRate) + {{-- - - - @endforeach - - - @{{ errors.first('taxrates[]') }} -
- -
- + @endforeach + + @{{ errors.first('taxrates[]') }} +
diff --git a/packages/Webkul/Admin/src/Resources/views/tax/tax-categories/index.blade.php b/packages/Webkul/Admin/src/Resources/views/tax/tax-categories/index.blade.php index d482a2238..8695309da 100644 --- a/packages/Webkul/Admin/src/Resources/views/tax/tax-categories/index.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/tax/tax-categories/index.blade.php @@ -1,19 +1,19 @@ @extends('admin::layouts.content') @section('page_title') - {{ __('admin::app.configuration.tax-categories.title') }} + {{ __('admin::app.settings.tax-categories.title') }} @stop @section('content')
diff --git a/packages/Webkul/Admin/src/Resources/views/tax/tax-rates/create.blade.php b/packages/Webkul/Admin/src/Resources/views/tax/tax-rates/create.blade.php index 10e1d46a6..4fee18764 100644 --- a/packages/Webkul/Admin/src/Resources/views/tax/tax-rates/create.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/tax/tax-rates/create.blade.php @@ -1,7 +1,7 @@ @extends('admin::layouts.content') @section('page_title') - {{ __('admin::app.configuration.tax-rates.add-title') }} + {{ __('admin::app.settings.tax-rates.add-title') }} @stop @section('content') @@ -9,12 +9,12 @@
@@ -36,7 +36,7 @@