Commit 1985886c by Zen-PC\Zen

Zen : new UserController

parent dfd654f4
<?php <?php
namespace App\Controller; namespace App\Controller;
use App\Controller\AppController; use App\Controller\AppController;
use Cake\Auth\DefaultPasswordHasher; use Cake\Auth\DefaultPasswordHasher;
use Cake\Core\Configure; use Cake\Core\Configure;
...@@ -20,25 +18,13 @@ class UsersController extends AppController { ...@@ -20,25 +18,13 @@ class UsersController extends AppController {
*/ */
public function initialize() { public function initialize() {
parent::initialize(); parent::initialize();
// $this->Auth->allow(['signin', 'signout', 'signup', 'verify', 'forgotPassword', 'createAccount', 'pinCode', 'pinCodepassword', 'changeForgotpassword']);
$this->Auth->allow(['signin', 'signout', 'signup', 'verify','forgotPassword','createAccount','pinCode','pinCodepassword','registersendpin','forgotsendpin','changeForgotpassword']); $this->Auth->allow(['signin', 'signout', 'signup', 'verify','forgotPassword','createAccount','pinCode','pinCodepassword','registersendpin','forgotsendpin','changeForgotpassword']);
} }
public function index() { public function index() {
return $this->redirect(['controller' => 'Users', 'action' => 'signin']); return $this->redirect(['controller' => 'Users', 'action' => 'signin']);
} }
/**
*
* Function signin / login make for user authentication
* @author sarawutt.b
* @since 20108/05/24 10:49:20
* @license Pakgon
* @return void
*/
public function signin() { public function signin() {
$this->viewBuilder()->layout('blank'); $this->viewBuilder()->layout('blank');
} }
...@@ -64,12 +50,14 @@ class UsersController extends AppController { ...@@ -64,12 +50,14 @@ class UsersController extends AppController {
//$url = Router::url(['controller' => 'Homes', 'action' => 'index'], true); //$url = Router::url(['controller' => 'Homes', 'action' => 'index'], true);
// Before chan logic to OAUTH // Before chan logic to OAUTH
// echo "<script>setTimeout(function(){Login.onLogin('" . $response['result']['token'] . "','" . $url . "','" . $response['result']['topic'] . "')},1000);</script>"; // echo "<script>setTimeout(function(){Login.onLogin('" . $response['result']['token'] . "','" . $url . "','" . $response['result']['topic'] . "')},1000);</script>";
$statusCode = '200'; $statusCode = '200';
// echo "<script type='text/javascript'>setTimeout(function(){Login.onLogin('" . $statusCode . "','" . $this->_redirectApplicationURL . "','" . $response['result']['topic'] . "')},1000);</script>"; // echo "<script type='text/javascript'>setTimeout(function(){Login.onLogin('" . $statusCode . "','" . $this->_redirectApplicationURL . "','" . $response['result']['topic'] . "')},1000);</script>";
$RedirectApplicationURL = Configure::read('RedirectApplicationURL'); $redirectApplicationURL = Configure::read('RedirectApplicationURL');
$topic = $response['result']['topic']; $topic = $response['result']['topic'];
$token = $response['result']['token']; $this->set(compact('statusCode', 'redirectApplicationURL', 'topic'));
$this->set(compact('statusCode', 'RedirectApplicationURL', 'topic', 'token'));
#echo "<script>setTimeout(function(){alert('".$response['result']['token']."')},1000);</script>"; #echo "<script>setTimeout(function(){alert('".$response['result']['token']."')},1000);</script>";
#echo "<script>Login.onLogin('".$response['result']['token']."','".$url."','".$response['result']['topic']."');</script>"; #echo "<script>Login.onLogin('".$response['result']['token']."','".$url."','".$response['result']['topic']."');</script>";
...@@ -94,7 +82,6 @@ class UsersController extends AppController { ...@@ -94,7 +82,6 @@ class UsersController extends AppController {
#------------------------------------------------------------------ #------------------------------------------------------------------
//$this->redirect($this->_redirectApplicationURL); //$this->redirect($this->_redirectApplicationURL);
//header('Location: ' . $this->_redirectApplicationURL); //header('Location: ' . $this->_redirectApplicationURL);
//return $this->redirect($redirectApplicationURL);
} else { } else {
$this->Flash->error(__('Verify Fail')); $this->Flash->error(__('Verify Fail'));
return $this->redirect(['controller' => 'Users', 'action' => 'signin']); return $this->redirect(['controller' => 'Users', 'action' => 'signin']);
...@@ -110,44 +97,38 @@ class UsersController extends AppController { ...@@ -110,44 +97,38 @@ class UsersController extends AppController {
} }
} }
public function signup() { public function signup()
{
$this->loadModel('MasterCountries'); $this->loadModel('MasterCountries');
$this->loadModel('MasterProvinces'); $this->loadModel('MasterProvinces');
$countries = $this->MasterCountries->find('list', [ $countries = $this->MasterCountries->find('list',
[
'conditions' => ['is_used' => true], 'conditions' => ['is_used' => true],
'keyField' => 'id', 'keyField' => 'id',
'valueField' => ['country_name_th'] 'valueField' => ['country_name_th']
] ]
) );
->order([ if(!empty($countries)) $countries = $countries->toArray();
'country_name_th' => 'ASC',
]); $provinces = $this->MasterProvinces->find('list',
if (!empty($countries)) [
$countries = $countries->toArray();
$provinces = $this->MasterProvinces->find('list', [
'conditions' => ['is_used' => true], 'conditions' => ['is_used' => true],
'keyField' => 'id', 'keyField' => 'id',
'valueField' => 'province_name_th' 'valueField' => 'province_name_th'
] ]
) );
->order([ if(!empty($provinces)) $provinces = $provinces->toArray();
'province_name_th' => 'DESC', $this->set(compact('provinces','countries'));
]);
if (!empty($provinces))
$provinces = $provinces->toArray();
$this->set(compact('provinces', 'countries'));
$this->viewBuilder()->layout('blank'); $this->viewBuilder()->layout('blank');
} }
#--------------------------------------------------------------------------------------------------- #---------------------------------------------------------------------------------------------------
#Signup
public function createAccount() { #Signup
public function createAccount()
{
$this->loadModel('UserPersonals'); $this->loadModel('UserPersonals');
$users = $this->Users->newEntity(); $users = $this->Users->newEntity();
...@@ -169,11 +150,11 @@ class UsersController extends AppController { ...@@ -169,11 +150,11 @@ class UsersController extends AppController {
$confirm_password = $this->request->data['confirm_password']; $confirm_password = $this->request->data['confirm_password'];
$btn = $this->request->data['btn']; $btn = $this->request->data['btn'];
if (!empty($this->request->data['birthdate'])) { if(!empty($this->request->data['birthdate'])){
$birthdate = explode("/", $this->request->data['birthdate']); $birthdate = explode("/", $this->request->data['birthdate']);
$birthdate = $birthdate[2] . '-' . $birthdate[1] . '-' . $birthdate[0]; $birthdate = $birthdate[2].'-'.$birthdate[1].'-'.$birthdate[0];
$this->request->data['birthdate'] = $birthdate; $this->request->data['birthdate'] = $birthdate;
} else { }else{
$birthdate = '2000-10-10'; $birthdate = '2000-10-10';
} }
...@@ -184,30 +165,31 @@ class UsersController extends AppController { ...@@ -184,30 +165,31 @@ class UsersController extends AppController {
$users['dynamic_key'] = 'dynamic_key'; $users['dynamic_key'] = 'dynamic_key';
// $users['point'] = 0; // $users['point'] = 0;
$users['dynamic_key_expiry'] = date('Y-m-d', strtotime('+3 day')); $users['dynamic_key_expiry'] = date('Y-m-d',strtotime('+3 day'));
$users['token'] = Security::hash($this->request->data['username'] . date('Y-m-d h:i:s'), 'md5', true); $users['token'] = Security::hash($this->request->data['username'].date('Y-m-d h:i:s'), 'md5', true);
$users['token_expiry'] = date('Y-m-d', strtotime('+3 day')); $users['token_expiry'] = date('Y-m-d',strtotime('+3 day'));
// $users['modified_by'] = $modified_by; // $users['modified_by'] = $modified_by;
$digits = 4; $digits = 4;
$users['pin_code'] = str_pad(rand(0, pow(10, $digits) - 1), $digits, '0', STR_PAD_LEFT); $users['pin_code'] = str_pad(rand(0, pow(10, $digits)-1), $digits, '0', STR_PAD_LEFT);
if (!empty($this->request->data['accept'])) { if(!empty($this->request->data['accept'])){
$username_check = $this->Users->find('all', [ $username_check = $this->Users->find('all',[
'conditions' => [ 'conditions' => [
'Users.username' => $this->request->data['username'] 'Users.username' => $this->request->data['username']
] ]
])->toArray(); ])->toArray();
$email_check = $this->UserPersonals->find('all', [ $email_check = $this->UserPersonals->find('all',[
'conditions' => [ 'conditions' => [
'UserPersonals.email' => $this->request->data['email'] 'UserPersonals.email' => $this->request->data['email']
] ]
])->toArray(); ])->toArray();
if ((empty($username_check)) && (empty($email_check))) { if((empty($username_check))&&(empty($email_check))){
$users = $this->Users->patchEntity($users, $this->request->getData()); $users = $this->Users->patchEntity($users, $this->request->getData());
// pr($users);die; // pr($users);die;
//------------------------------ ส่งอีเมล์ ----------------------------------------------------- //------------------------------ ส่งอีเมล์ -----------------------------------------------------
$data_notification = []; $data_notification = [];
$data_notification['email'] = $this->request->data['email']; $data_notification['email'] = $this->request->data['email'];
...@@ -226,12 +208,12 @@ class UsersController extends AppController { ...@@ -226,12 +208,12 @@ class UsersController extends AppController {
$this->UserPersonals->save($user_personals); $this->UserPersonals->save($user_personals);
// $this->Flash->success(__('The register success.')); // $this->Flash->success(__('The register success.'));
return $this->redirect(['controller' => 'Users', 'action' => 'pinCode/' . $users['token']]); return $this->redirect(['controller' => 'Users', 'action' => 'pinCode/'.$users['token']]);
// return $this->redirect(['action' => 'signin']); // return $this->redirect(['action' => 'signin']);
} }
$this->Flash->error(__('Username or Email Address already used by others.')); $this->Flash->error(__('Username or Email Address already used by others.'));
return $this->redirect(['action' => 'signup']); return $this->redirect(['action' => 'signup']);
} else if (empty($this->request->data['accept'])) { }else if(empty($this->request->data['accept'])){
$this->Flash->error(__('please accept')); $this->Flash->error(__('please accept'));
return $this->redirect(['action' => 'signup']); return $this->redirect(['action' => 'signup']);
} }
...@@ -239,8 +221,10 @@ class UsersController extends AppController { ...@@ -239,8 +221,10 @@ class UsersController extends AppController {
} }
} }
public function notification($data = null) {
if (!empty($data)) { public function notification($data = null)
{
if(!empty($data)){
$verify_code = $data['pin_code']; $verify_code = $data['pin_code'];
$from_email = ['support@pakgon.com' => 'Support']; $from_email = ['support@pakgon.com' => 'Support'];
$to_emails = [$data['email']]; $to_emails = [$data['email']];
...@@ -257,13 +241,16 @@ class UsersController extends AppController { ...@@ -257,13 +241,16 @@ class UsersController extends AppController {
$email->viewVars(compact('verify_code')); $email->viewVars(compact('verify_code'));
#$email->send($message); #$email->send($message);
$email->send(); $email->send();
} catch (Exception $e) { } catch (Exception $e) {
echo 'Exception : ', $e->getMessage(), "\n"; echo 'Exception : ', $e->getMessage(), "\n";
} }
#$this->httpStatusCode = 200; #$this->httpStatusCode = 200;
#$this->apiResponse['message'] = 'Signup Connect Completed!!'; #$this->apiResponse['message'] = 'Signup Connect Completed!!';
} }
} }
#--------------------------------------------------------------------------------------------------- #---------------------------------------------------------------------------------------------------
...@@ -284,89 +271,85 @@ class UsersController extends AppController { ...@@ -284,89 +271,85 @@ class UsersController extends AppController {
// { // {
// $this->viewBuilder()->layout('blank'); // $this->viewBuilder()->layout('blank');
// } // }
#Verify Pin Code #Verify Pin Code
public function pinCode($token = null) { public function pinCode($token=null)
{
$this->viewBuilder()->layout('blank'); $this->viewBuilder()->layout('blank');
$data = $this->request->data(); $data = $this->request->data();
if (!empty($data)) { if(!empty($data)){
$api_core_verify_pin_code = Configure::read('Config.apiCore.verifyPinCode'); $api_core_verify_pin_code = Configure::read('Config.apiCore.verifyPinCode');
$http = new Client(); $http = new Client();
#$response = json_decode($http->post($api_core_verify_pin_code,$data)->body(),'_full'); #$response = json_decode($http->post($api_core_verify_pin_code,$data)->body(),'_full');
$response = $http->post($api_core_verify_pin_code, $data)->body(); $response = $http->post($api_core_verify_pin_code,$data)->body();
$response = json_decode($response, '_full'); $response = json_decode($response,'_full');
if (!empty($response)) { if(!empty($response)){
if (trim($response['status']) == 'Success') { if(trim($response['status']) == 'Success'){
$this->Flash->success(__('Verify Completed.')); $this->Flash->success(__('Verify Completed.'));
return $this->redirect(['controller' => 'Users', 'action' => 'signin']); return $this->redirect(['controller' => 'Users', 'action' => 'signin']);
} else { }else{
$this->Flash->error(__('Pin Code Invalid')); $this->Flash->error(__('Pin Code Invalid'));
return $this->redirect(['controller' => 'Users', 'action' => 'pinCode/' . $token]); return $this->redirect(['controller' => 'Users', 'action' => 'pinCode/'.$token]);
} }
} }
} }
$this->set(array('token' => $token, '_serialize' => array('token'))); $this->set(array('token' => $token, '_serialize' => array('token')));
} }
/** #---------------------------------------------------------------------------------------------------
*
* Function user forgot password
* @return void
*/
public function forgotPassword() { #---------------------------------------------------------------------------------------------------
public function forgotPassword()
{
$this->viewBuilder()->layout('blank'); $this->viewBuilder()->layout('blank');
$this->loadModel('UserPersonals'); $this->loadModel('UserPersonals');
if ($this->request->is('post')) { if ($this->request->is('post')) {
$hasher = new DefaultPasswordHasher(); $hasher = new DefaultPasswordHasher();
$email = $this->request->data['email']; $email = $this->request->data['email'];
$user_personals = $this->UserPersonals->find('all', [ $user_personals = $this->UserPersonals->find('all',[
'conditions' => [ 'conditions' => [
'UserPersonals.email' => $email 'UserPersonals.email' => $email
] ]
])->first(); ])->first();
if (!empty($user_personals)) { if(!empty($user_personals)){
$users = $this->Users->find('all', [ $users = $this->Users->find('all',[
'conditions' => [ 'conditions' => [
'Users.id' => $user_personals['user_id'] 'Users.id' => $user_personals['user_id']
] ]
])->first(); ])->first();
$digits = 4; $digits = 4;
$users['pin_pass'] = str_pad(rand(0, pow(10, $digits) - 1), $digits, '0', STR_PAD_LEFT); $users['pin_pass'] = str_pad(rand(0, pow(10, $digits)-1), $digits, '0', STR_PAD_LEFT);
$token = $users['token']; $token = $users['token'];
//--------------------ตัวส่ง Email --------------------------------------------------------- //--------------------ตัวส่ง Email ---------------------------------------------------------
//pr($user_personals);die; //pr($user_personals);die;
$data_notification = []; $data_notification = [];
$data_notification['email'] = $this->request->data['email']; $data_notification['email'] = $this->request->data['email'];
$data_notification['pin_code'] = $users['pin_pass']; $data_notification['pin_code'] = $users['pin_pass'].'<br>'." Username: ".$users['username'];
$this->notification($data_notification); $this->notification($data_notification);
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
$this->Users->save($users); $this->Users->save($users);
$this->Flash->success(__('send password to email success')); $this->Flash->success(__('send password to email success'));
return $this->redirect(['action' => 'pinCodepassword/' . $token]); return $this->redirect(['action' => 'pinCodepassword/'.$token]);
} else { }else{
$this->Flash->error(__('Invalid Email.')); $this->Flash->error(__('Invalid Email.'));
return $this->redirect(['action' => 'forgot-password']); return $this->redirect(['action' => 'forgot-password']);
} }
} }
} }
// public function pinCodepassword($token = null) {
// $this->viewBuilder()->layout('blank');
// $users = $this->Users->find('all', [
// 'conditions' => [
// 'Users.token' => $token
// ]
// ])->first();
public function pinCodepassword($token=null) public function pinCodepassword($token=null)
{ {
$this->viewBuilder()->layout('blank'); $this->viewBuilder()->layout('blank');
...@@ -440,73 +423,6 @@ class UsersController extends AppController { ...@@ -440,73 +423,6 @@ class UsersController extends AppController {
} }
if ($this->request->is('post')) {
$data = $this->request->data();
$data['pin_pass'] = $data['pin_code_1'] . $data['pin_code_2'] . $data['pin_code_3'] . $data['pin_code_4'];
if ($data['pin_pass'] == $users['pin_pass']) {
$this->Flash->success(__('Pin Completed.'));
return $this->redirect(['controller' => 'Users', 'action' => 'changeForgotpassword/' . $token]);
}
$this->Flash->error(__('Pin Invalid'));
return $this->redirect(['controller' => 'Users', 'action' => 'pinCodepassword/' . $token]);
}
$this->set(array('token' => $token, '_serialize' => array('token')));
}
public function changePassword($token = null) {
$id = $this->Auth->user('id');
$this->viewBuilder()->layout('blank');
$users = $this->Users->get($id);
if ($this->request->is('post')) {
$hasher = new DefaultPasswordHasher();
$password = $this->request->data['password'];
$confirm_password = $this->request->data['confirm_password'];
$oldpassword = $this->request->data['oldpassword'];
$this->request->data['password'] = $hasher->hash($this->request->data['password']);
//------- เทียบ password ที่เข้ารหัส ---------------password_verify($password,hashed_password)---------------------------
if (password_verify($oldpassword, $users['password'])) {
$users = $this->Users->patchEntity($users, $this->request->getData());
$this->Users->save($users);
$this->Flash->success(__('change password success'));
$this->Flash->success(__('You are now logged out.'));
return $this->redirect(['action' => 'signout']);
} else {
$this->Flash->error(__('Invalid password.'));
return $this->redirect(['action' => 'change-password']);
}
}
$this->set(array('token' => $token, '_serialize' => array('token')));
}
public function changeForgotpassword($token = null) {
$this->viewBuilder()->layout('blank');
$users = $this->Users->find('all', [
'conditions' => [
'Users.token' => $token
]
])->first();
if ($this->request->is('post')) {
$hasher = new DefaultPasswordHasher();
$password = $this->request->data['password'];
//$confirm_password = $this->request->data['confirm_password'];
$this->request->data['password'] = $hasher->hash($this->request->data['password']);
//------- เทียบ password ที่เข้ารหัส ---------------password_verify($password,hashed_password)---------------------------
$users = $this->Users->patchEntity($users, $this->request->getData());
if ($this->Users->save($users)) {
$this->Flash->success(__('change password success'));
return $this->redirect(['action' => 'signin']);
}
$this->Flash->error(__('Invalid password.'));
return $this->redirect(['action' => 'change_forgotpassword']);
}
$this->set(array('token' => $token, '_serialize' => array('token')));
}
#--------------------------------------------------------------------------------------------------- #---------------------------------------------------------------------------------------------------
/** /**
...@@ -524,7 +440,6 @@ class UsersController extends AppController { ...@@ -524,7 +440,6 @@ class UsersController extends AppController {
return $this->redirect($this->Auth->logout()); return $this->redirect($this->Auth->logout());
} }
public function forgotsendpin($token=null) { public function forgotsendpin($token=null) {
$this->loadModel('UserPersonals'); $this->loadModel('UserPersonals');
$users = $this->Users->find('all',[ $users = $this->Users->find('all',[
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment