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

<?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');
}
}