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