You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
254 lines
9.3 KiB
254 lines
9.3 KiB
<?php
|
|
namespace app\core\auth;
|
|
|
|
use app\core\utils\Cookie;
|
|
use app\core\auth\Subscription;
|
|
use app\core\auth\User as UserAuth;
|
|
use PragmaRX\Countries\Package\Countries;
|
|
use app\libraries\Axepta;
|
|
|
|
class Registration {
|
|
|
|
protected $CI;
|
|
const COOKIE_KEY = 'lmateliers_ureg';
|
|
const COOKIE_USER_PRE_INFO = 'lmateliers_upreinfo';
|
|
const COOKIE_USER_DETAILS = 'lmateliers_udetails';
|
|
|
|
public function __construct() {
|
|
// Get CI Instnce
|
|
$this->CI =& get_instance();
|
|
|
|
$this->subscription = new Subscription();
|
|
|
|
// Load Model
|
|
$this->CI->load->model('User_registration_model');
|
|
}
|
|
|
|
public function setUserSubscriptionTypeCookie(array $role) {
|
|
Cookie::create([
|
|
'name' => 'ureg',
|
|
'value' => json_encode(array(
|
|
"role_id" => $role['role_id'],
|
|
"name" => $role['name'],
|
|
"price" => $role['price'],
|
|
'price_id' =>$role['price_id']
|
|
)),
|
|
'expire' => '7200', //2days
|
|
'prefix' => $this->CI->config->item('sess_cookie_name').'_',
|
|
// 'domain' => 'localhost'
|
|
]);
|
|
}
|
|
|
|
public function getUserSubscriptionTypeCookie() {
|
|
$cookieData = json_decode(get_cookie(self::COOKIE_KEY));
|
|
return (empty($cookieData) || is_null($cookieData))
|
|
? redirect(base_url('/registration'))
|
|
: $cookieData;
|
|
}
|
|
|
|
public function deleteUserSubscriptionTypeCookie() {
|
|
// Delete registration cookie
|
|
Cookie::delete(self::COOKIE_KEY);
|
|
}
|
|
|
|
public function getUserTypeInfo(string $userType = '') {
|
|
$role = $this->CI->User_registration_model->get_subscriber_roles($userType);
|
|
if(empty($role) || is_null($role)) {
|
|
return redirect(base_url('/registration'));
|
|
}
|
|
if(!empty(get_cookie('registration_user_role'))) {
|
|
$this->deleteUserSubscriptionTypeCookie();
|
|
}
|
|
|
|
return $role;
|
|
}
|
|
|
|
public function getViewByRole(string $role = '') {
|
|
switch($role) {
|
|
case "Regular":
|
|
return 'frontoffice/registration/registration_regular_view';
|
|
case "Shareholder":
|
|
return 'frontoffice/registration/registration_shareholder_view';
|
|
case "Sponsored":
|
|
return 'frontoffice/registration/registration_sponsored_view';
|
|
case "Student":
|
|
return 'frontoffice/registration/registration_student_view';
|
|
}
|
|
}
|
|
|
|
public function getStatesByCountry(string $country = '') {
|
|
$countries = new Countries();
|
|
return $countries->where('name.common', $country)
|
|
->first()
|
|
->hydrateStates()
|
|
->states
|
|
->sortBy('name')
|
|
->pluck('name');
|
|
}
|
|
|
|
public function getAllCountries() {
|
|
$countries = new Countries();
|
|
return $countries->all()->pluck('name.common')->toArray();
|
|
}
|
|
|
|
public function checkModeOfPayment($mode) {
|
|
if(empty($mode) || is_null($mode) || !in_array(strtolower($mode), MODE_OF_PAYMENT) ) {
|
|
return redirect(base_url('/registration'));
|
|
}
|
|
return $mode;
|
|
}
|
|
|
|
public function generateMercanetData(int $price) {
|
|
$transactionReference = MERCANET['TRANSACTION_REFERENCE_PREFIX'] . rand(100000,999999);
|
|
// Build the return URL to retrieve the payment result from the merchant's e-commerce site
|
|
$http = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' ? "https://" : "http://";
|
|
$returnUrl = $http.$_SERVER["HTTP_HOST"].dirname($_SERVER["REQUEST_URI"])."/payment/receipt";
|
|
// Construct the data request to send to Mercanet
|
|
return "paypageData.bypassReceiptPage=false|amount=" . $price . "|currencyCode=978|merchantId=" . MERCANET['MERCHANT_ID'] . "|normalReturnUrl=".$returnUrl."|transactionReference=".$transactionReference."|keyVersion=1";
|
|
}
|
|
|
|
public function setUserPreInfoCookie(array $userData) {
|
|
Cookie::create([
|
|
'name' => 'upreinfo',
|
|
'value' => json_encode($userData),
|
|
'expire' => '7200', //2days
|
|
'prefix' => $this->CI->config->item('sess_cookie_name').'_',
|
|
// 'domain' => 'localhost'
|
|
]);
|
|
}
|
|
|
|
public function getUserPreInfoCookie() {
|
|
$cookieData = json_decode(get_cookie(self::COOKIE_USER_PRE_INFO));
|
|
return $cookieData;
|
|
}
|
|
|
|
public function deleteUserPreInfoCookie() {
|
|
Cookie::delete(self::COOKIE_USER_PRE_INFO);
|
|
}
|
|
|
|
public function setUserDetailsCookie(array $userData) {
|
|
Cookie::create([
|
|
'name' => 'udetails',
|
|
'value' => json_encode($userData),
|
|
'expire' => '7200', //2days
|
|
'prefix' => $this->CI->config->item('sess_cookie_name').'_',
|
|
// 'domain' => 'localhost'
|
|
]);
|
|
}
|
|
|
|
public function getUserDetailsCookie() {
|
|
$cookieData = json_decode(get_cookie(self::COOKIE_USER_DETAILS));
|
|
return $cookieData;
|
|
}
|
|
|
|
public function deleteUserDetailsCookie() {
|
|
Cookie::delete(self::COOKIE_USER_DETAILS);
|
|
}
|
|
|
|
public function saveUser(array $userData) {
|
|
return $this->CI->User_registration_model->saveUser($userData);
|
|
}
|
|
|
|
public function saveSubscriber(array $subscriberData) {
|
|
return $this->CI->User_registration_model->saveSubscriber($subscriberData);
|
|
}
|
|
|
|
public function deleteCookies() {
|
|
$this->deleteUserSubscriptionTypeCookie();
|
|
$this->deleteUserPreInfoCookie();
|
|
$this->deleteUserDetailsCookie();
|
|
}
|
|
|
|
public function saveSubscription(array $userDetails, array $userPreInfo, array $cookieData, array $receipt = null) {
|
|
//Save user
|
|
$userData = $this->subscription->formatUserData($userDetails, $cookieData);
|
|
$userId = $this->saveUser($userData);
|
|
//Save subscriber data
|
|
$subscriberData = $this->subscription->formatSubscriberData($userDetails, $userPreInfo, $cookieData, $userId);
|
|
$subscriberId = $this->saveSubscriber($subscriberData);
|
|
//Save subscription data
|
|
$subscriptionData = $this->subscription->formatSubscriptionData($userDetails, $userPreInfo, $cookieData, $userId, $receipt);
|
|
$this->CI->User_registration_model->saveSubscription($subscriptionData);
|
|
|
|
return (object) ['userData' => array_merge($userData, ['userId' => $userId]) ];
|
|
}
|
|
|
|
public function uploadConfig(string $fileName) {
|
|
return array(
|
|
'upload_path'=> FCPATH . "resources/images/frontoffice/tmp/",
|
|
'allowed_types' => 'jpeg|jpg|png',
|
|
'file_name' => strtotime("now").'_'.$fileName
|
|
);
|
|
}
|
|
|
|
public function autoLogin(object $user) {
|
|
// Login user
|
|
return UserAuth::login([
|
|
"user_id" => $user->userData['userId'],
|
|
"first_name" => $user->userData['first_name'],
|
|
"last_name" => $user->userData['last_name'],
|
|
"fullname" => $user->userData['first_name']." ".$user->userData['last_name'],
|
|
"email_address" => $user->userData['email_address'],
|
|
"password" => $user->userData['password'],
|
|
"role_id" => $user->userData['role_id'],
|
|
"remember_me" => false,
|
|
"isBOUser" => false
|
|
]);
|
|
}
|
|
|
|
public function validateUriSegment(string $segment, string $userType) {
|
|
if(strtolower($segment) != strtolower($userType)) {
|
|
$this->deleteUserSubscriptionTypeCookie();
|
|
redirect(base_url('/registration'));
|
|
}
|
|
}
|
|
|
|
public function configurePayment($cookieData) {
|
|
$paymentRequest = new Axepta(MERCANET['HMAC']);
|
|
$paymentRequest->setCryptKey(MERCANET['Blowfish']);
|
|
$paymentRequest->setUrl(Axepta::PAYSSL);
|
|
|
|
$paymentRequest->setMerchantID(MERCANET['MID']);
|
|
|
|
$paymentRequest->setTransID("sdl".rand(100000,999999));
|
|
|
|
$paymentRequest->setAmount($cookieData->price*100);
|
|
|
|
$paymentRequest->setCurrency('EUR');
|
|
$paymentRequest->setRefNr("ref".rand(100000,999999));
|
|
$returnUrl = "https://".$_SERVER["HTTP_HOST"].dirname($_SERVER["REQUEST_URI"])."/payment/receipt";
|
|
$cancelUrl = "https://".$_SERVER["HTTP_HOST"].dirname($_SERVER["REQUEST_URI"])."/payment/cancel";
|
|
$paymentRequest->setURLSuccess($returnUrl);
|
|
$paymentRequest->setMsgVer('2.0');
|
|
$paymentRequest->setUserData('mydata');
|
|
$paymentRequest->setURLFailure($returnUrl);
|
|
$paymentRequest->setURLNotify($returnUrl);
|
|
$paymentRequest->setURLBack($cancelUrl);
|
|
$paymentRequest->setReponse('encrypt');
|
|
|
|
$paymentRequest->setLanguage('fr');
|
|
|
|
$paymentRequest->setOrderDesc('Test:0000');
|
|
|
|
return $paymentRequest;
|
|
}
|
|
|
|
public function setFailurePamentCookie($message) {
|
|
Cookie::create([
|
|
'name' => 'failed_payment',
|
|
'value' => json_encode(array('message'=> $message)),
|
|
'expire' => '7200',
|
|
'prefix' => $this->CI->config->item('sess_cookie_name').'_',
|
|
// 'domain' => 'localhost'
|
|
]);
|
|
}
|
|
|
|
public function getFailurePamentCookie() {
|
|
return json_decode(get_cookie( $this->CI->config->item('sess_cookie_name').'_failed_payment'));
|
|
}
|
|
|
|
public function deleteFailurePamentCookie() {
|
|
// Delete registration cookie
|
|
Cookie::delete($this->CI->config->item('sess_cookie_name').'_failed_payment');
|
|
}
|
|
}
|