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.
1199 lines
42 KiB
1199 lines
42 KiB
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
|
|
|
|
use app\core\auth\User as UserAuth;
|
|
use app\core\utils\Response;
|
|
|
|
class Subscribe extends MY_Controller {
|
|
|
|
public function __construct()
|
|
{
|
|
$this->my_parent_controller();
|
|
|
|
//load language files
|
|
$this->load_language_frontoffice();
|
|
$this->lang->load('frontoffice/subscribe', 'fr');
|
|
|
|
//load model
|
|
$this->load->model("event_model");
|
|
$this->load->model("event_schedule_model");
|
|
$this->load->model('event_concurrent_process_model');
|
|
$this->load->model("user_activity_log_model");
|
|
$this->load->library("mailjet_libr");
|
|
}
|
|
|
|
private function determine_action_type($event_id, $action_type){
|
|
Response::handleSessionTimeout("fo");
|
|
|
|
if($this->session->userdata('first_logged_in')) {
|
|
|
|
$this->data["logged_in"]['rs_action'] = array(
|
|
"process_type" => $action_type,
|
|
"process_reference" => $event_id
|
|
);
|
|
$this->session->set_userdata('first_logged_in', $this->data["logged_in"]);
|
|
|
|
} else if($this->session->userdata('logged_in')) {
|
|
|
|
$this->data["logged_in"]['rs_action'] = array(
|
|
"process_type" => $action_type,
|
|
"process_reference" => $event_id
|
|
);
|
|
$this->session->set_userdata('logged_in', $this->data["logged_in"]);
|
|
}
|
|
}
|
|
|
|
public function exitp(){
|
|
Response::handleSessionTimeout("fo");
|
|
|
|
if($this->input->post('event_id') && $this->input->post('process_id')) {
|
|
$this->load->model('event_concurrent_process_model');
|
|
$check = $this->event_concurrent_process_model->update_process($this->data["logged_in"]['user_id'], $this->data["logged_in"]['login_id'], $this->input->post('event_id'), $this->input->post('process_type'), $this->input->post('process_id'));
|
|
if($check) output_to_json($this, true);
|
|
else output_to_json($this, false);
|
|
}
|
|
output_to_json($this, false);
|
|
}
|
|
|
|
public function validate(){
|
|
Response::handleSessionTimeout("fo");
|
|
$eventCategory = array_keys(EVENT_CATEGORY);
|
|
|
|
// Input is not empty and category is valid
|
|
if($this->input->post() && in_array($this->input->post('event_category'), $eventCategory)) {
|
|
//check if process_id exists : bug fixed for #24568
|
|
if(!$this->isPaidEvent() && $this->input->post('process_id')) {
|
|
//close previous process
|
|
$rest = $this->event_concurrent_process_model->unlock_action_by_process_id($this->data['logged_in']['login_id'], $this->input->post('process_type'), $this->input->post('process_id'));
|
|
unset($_POST['process_id']);
|
|
}
|
|
|
|
// Check if event is an online event!
|
|
if( $this->event_schedule_model->is_online_event($this->input->post("event_id")) ) {
|
|
return output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => "Cannot reserve in an online event"
|
|
));
|
|
}
|
|
|
|
if ($this->input->post("action") == "cancel") {
|
|
$this->check_before_cancelling();
|
|
} else if($this->input->post("action") == "register" || $this->input->post("action") == "modify") {
|
|
$this->check_before_register_or_modify();
|
|
} else {
|
|
output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => "Unknown action."
|
|
));
|
|
}
|
|
} else {
|
|
output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => "Unable to proceed."
|
|
));
|
|
}
|
|
}
|
|
|
|
private function checkIfReservationCanBeByPassed() {
|
|
if($this->input->post('bp') === "true") { //by pass validation, so user can reserve in wl in advanced!
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// Do not allow regular registration on paid event, they must register to La Botique
|
|
private function isPaidEvent() {
|
|
$process_types = [1, 2, 6]; // register, cancel registration
|
|
return $this->input->post('event_category')
|
|
&& $this->input->post('event_category') == 'PAID_EVENT'
|
|
&& in_array((int) $this->input->post('process_type'), $process_types);
|
|
}
|
|
|
|
private function check_before_cancelling() {
|
|
|
|
if($this->input->post() && $this->input->post('action') == "cancel" && ($this->input->post('process_type') == 2 || $this->input->post('process_type') == 4)) {
|
|
|
|
$is_locked = $this->event_concurrent_process_model->has_activity($this->data['logged_in']['user_id'], $this->data['logged_in']['login_id'], $this->input->post('process_type'), $this->input->post('event_id'));
|
|
|
|
/*
|
|
if cancellation process is being done at the same time,
|
|
on the same account with different login session
|
|
*/
|
|
if($is_locked) {
|
|
|
|
output_to_json($this, array(
|
|
'mtype' => "info",
|
|
'message' => $this->lang->line('logged_on_another_device')
|
|
));
|
|
|
|
} else {
|
|
//check if process_id is still valid
|
|
$this->check_process_id_validity();
|
|
|
|
$event_details = $this->event_schedule_model->event_schedule_details($this->input->post('event_id'), $this->input->post('event_schedule_id'), $this->input->post('action'));
|
|
|
|
/* check if event exists */
|
|
if(countVal($event_details) > 0) {
|
|
if(($event_details->back_office_status >= BO_STAT['fer']) && !(UserAuth::isLoggedInAsSubscriber())){ //check if event arent locked, closed, terminated, archived or deleted
|
|
output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => $this->lang->line("button_not_updated")
|
|
));
|
|
} else {
|
|
/* check if user has selected number of seats to be cancelled */
|
|
if($this->input->post("seats_cancelled") && $this->input->post("seats_cancelled") > 0) {
|
|
|
|
/* check whether seats to be cancelled are up to date or not
|
|
First, Check what type of registration is about to be cancelled through process_type
|
|
reg_type = 1, for normal registration
|
|
reg_type = 2, for waiting list registration
|
|
reg_type = 3, Cancellation
|
|
|
|
Process Type
|
|
1 = Event Registration,
|
|
2 = Cancel Event Registration,
|
|
3 = Register to Wait list,
|
|
4 = Cancel Wait list Registration,
|
|
5 = Update Profile
|
|
Now, check the current reserved seats before proceeding
|
|
*/
|
|
|
|
$this->load->model('event_registration_model');
|
|
$this->load->model('event_wait_list_model');
|
|
|
|
$current_seats_reserved = $this->input->post("process_type") == PROCESS_TYPE['cancel_reg']
|
|
?
|
|
$this->event_registration_model->count_all_event_subscription(
|
|
$this->data['logged_in']['user_id'],
|
|
$this->input->post('event_schedule_id'),
|
|
$this->input->post('event_id'), 2, $this->input->post("seats_reserved"))
|
|
: (
|
|
($this->input->post("process_type") == PROCESS_TYPE['cancel_wl_reg'])
|
|
?
|
|
$this->event_wait_list_model->count_all_waitlist_subscription(
|
|
$this->data['logged_in']['user_id'],
|
|
$this->input->post('event_schedule_id'),
|
|
$this->input->post('event_id'), 2, $this->input->post("seats_reserved"))
|
|
: 0
|
|
);
|
|
|
|
/* check if there stil seats to be cancelled */
|
|
if($current_seats_reserved > 0 && $current_seats_reserved >= $this->input->post("seats_cancelled")) {
|
|
//determine action type
|
|
$this->determine_action_type($this->input->post('event_id'), $this->input->post("process_type"));
|
|
// finally, if validated, proceed to cancellation
|
|
$this->deregister();
|
|
} else {
|
|
|
|
output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => $this->lang->line("button_not_updated")
|
|
));
|
|
}
|
|
|
|
} else {
|
|
$this->get_all_registration_details();
|
|
} // end of else if seats cancelled not defined
|
|
}//end of else if seats cancelled is not defined
|
|
|
|
} else{
|
|
|
|
output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => $this->lang->line("button_not_updated")
|
|
));
|
|
}
|
|
}
|
|
} else{
|
|
output_to_json($this, array(
|
|
'mtype' => "session_timeout",
|
|
'message' => "Vous n'êtes pas connecté"
|
|
));
|
|
}
|
|
}
|
|
|
|
private function check_before_register_or_modify()
|
|
{
|
|
if($this->input->post() && ($this->input->post('action') == "register" || $this->input->post('action') == "modify" ) && ($this->input->post('process_type') == 1 || $this->input->post('process_type') == 3 || $this->input->post('process_type') == 6 || $this->input->post('process_type') == 7))
|
|
{
|
|
// We do not appply button lock on paid_event
|
|
$is_locked = $this->event_concurrent_process_model->has_activity($this->data['logged_in']['user_id'], $this->data['logged_in']['login_id'], $this->input->post('process_type'), $this->input->post('event_id'));
|
|
|
|
/*
|
|
if cancellation process is being done at the same time,
|
|
on the same account with different login session
|
|
*/
|
|
if($is_locked) {
|
|
output_to_json($this, array(
|
|
'mtype' => "info",
|
|
'message' => $this->lang->line('logged_on_another_device')
|
|
));
|
|
|
|
} else {//locked action when not locked
|
|
|
|
//check if process_id is still valid
|
|
$this->check_process_id_validity();
|
|
|
|
//check if user is allowed to book for more than 1 date per event
|
|
if($this->event_schedule_model->continue_registration($this->input->post('event_id'), $this->data['logged_in']['user_id'], $this->input->post('action'), $this->input->post('reg_type'))) {
|
|
|
|
//check if can still reserved
|
|
$can_still_reserved = $this->event_model->check_seats($this->input->post('event_id'), $this->input->post('reg_type'), $this->checkIfReservationCanBeByPassed(), $this->input->post('session_type'));
|
|
|
|
if($can_still_reserved) {
|
|
//get event details seats_reserved_orig
|
|
//$event_sched_details = $this->event_schedule_model->event_schedule_details($this->input->post('event_id'), $this->input->post('event_schedule_id'), $this->input->post('request_type'));
|
|
$event_sched_details = $this->event_schedule_model->event_schedule_details($this->input->post('event_id'), $this->input->post('request_type'));
|
|
//get reservation information
|
|
$reservation_details = $this->get_reservation_details($this->input->post('action'), $this->input->post('reg_type'), $this->input->post('event_id'));
|
|
/* check if event exists */
|
|
if(countVal($event_sched_details) > 0) {
|
|
|
|
//check if event arent locked, closed, terminated, archived or deleted
|
|
if( $event_sched_details->back_office_status >= 3 || ($event_sched_details->event_status == 'FULL' && $event_sched_details->remaining_seat >=0 && $this->input->post('process_type') == 1)
|
|
|| ($event_sched_details->event_status == 'FULL' && $this->input->post('process_type') == 3)
|
|
){
|
|
output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => $this->lang->line("button_not_updated")
|
|
));
|
|
|
|
} else {
|
|
|
|
if($this->input->post("seats_reserved") && $this->input->post("seats_reserved") > 0)
|
|
{
|
|
//check subscription
|
|
$subscribed = $this->check_subscription($this->input->post('event_id'), $this->input->post('event_schedule_id'), $this->input->post("check_subscription"), 0);
|
|
|
|
if($this->input->post("action") == "register"){
|
|
|
|
if($subscribed){
|
|
|
|
output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => $this->lang->line('already_registered')
|
|
));
|
|
|
|
} else {
|
|
//if registration is valid
|
|
if($this->revalidate_reservation($this->input->post('event_id'), $this->input->post('event_schedule_id'), $this->input->post("seats_reserved"), $this->input->post("reg_type"), $this->checkIfReservationCanBeByPassed()))
|
|
{
|
|
//continue with the reservation
|
|
if($this->input->post("reg_type") == 1 || $this->input->post("reg_type") == 2){
|
|
//determine action type
|
|
$this->determine_action_type($this->input->post('event_id'), $this->input->post("process_type"));
|
|
|
|
//finally, got to reserve
|
|
$this->register();
|
|
} else{
|
|
output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => "Unknown registration type!"
|
|
));
|
|
}
|
|
}
|
|
} //not yet registered
|
|
|
|
} else if($this->input->post("action") == "modify"){
|
|
|
|
if(!$subscribed){
|
|
output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => $this->lang->line('already_registered'),
|
|
));
|
|
} else {
|
|
//do not allow modification of reservation once reg_type did not match with the subcription in the DB
|
|
if($subscribed != $this->input->post("reg_type")){
|
|
|
|
output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => $this->lang->line("button_not_updated")
|
|
));
|
|
|
|
} else {
|
|
|
|
//if action is valid
|
|
if($this->revalidate_reservation($this->input->post('event_id'), $this->input->post('event_schedule_id'), $this->input->post("seats_reserved"), $this->input->post("reg_type"), $this->checkIfReservationCanBeByPassed()))
|
|
{
|
|
//continue with modification of reservation
|
|
if($this->input->post("reg_type") == 1 || $this->input->post("reg_type") == 2){
|
|
|
|
//determine action type
|
|
$this->determine_action_type($this->input->post('event_id'), $this->input->post("process_type"));
|
|
|
|
//finally, got to reserve
|
|
$this->register();
|
|
} else{
|
|
|
|
//check subscription
|
|
$subscribed = $this->check_subscription($this->input->post('event_id'), $this->input->post('event_schedule_id'), $this->input->post("check_subscription"), $this->input->post('seats_reserved_orig'));
|
|
|
|
if(!$subsribed) {
|
|
output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => $this->lang->line("button_not_updated")
|
|
));
|
|
} else {
|
|
|
|
output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => "Unknown registration type!"
|
|
));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
} else {
|
|
output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => "Undefined action! Try again later."
|
|
));
|
|
}
|
|
|
|
} else{
|
|
//locked action when not locked
|
|
$check_process = $this->event_concurrent_process_model->lock_or_add_process($this->data['logged_in']['user_id'], $this->data['logged_in']['login_id'], $this->input->post('process_type'), $this->input->post('event_id'));
|
|
|
|
if($check_process['status']){
|
|
//determine action type
|
|
$this->determine_action_type($this->input->post('event_id'), $this->input->post("process_type"));
|
|
|
|
output_to_json($this, array(
|
|
"mtype" => "success",
|
|
"message" => "Vous n'êtes pas connecté",
|
|
'mdata' => ($reservation_details)? array("event_schedule" => $event_sched_details, "reservations" =>$reservation_details):$event_sched_details,
|
|
'process_id' => $check_process['process_id'] ?? null,
|
|
'logged_out' => !UserAuth::isAuth()
|
|
));
|
|
|
|
} else {
|
|
output_to_json($this, array(
|
|
'mtype' => "info",
|
|
'message' => $this->lang->line('logged_on_another_device')
|
|
));
|
|
}
|
|
}
|
|
} //event is not closed
|
|
|
|
} else{
|
|
|
|
output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => $this->lang->line("button_not_updated")
|
|
));
|
|
} //end of else event exists
|
|
|
|
} else { //subscriber cannot reserved due to no available seats
|
|
output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => $this->lang->line("button_not_updated")
|
|
));
|
|
}
|
|
|
|
} else {
|
|
output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => "You have reached the maximum reservation allowed per subscriber in this event."
|
|
));
|
|
}
|
|
}//end of else not locked
|
|
|
|
} else {
|
|
output_to_json($this, array(
|
|
'mtype' => "session_timeout",
|
|
'message' => "Vous n'êtes pas connecté"
|
|
));
|
|
}
|
|
}
|
|
|
|
private function check_process_id_validity(){
|
|
if(isset($_POST['process_id']) && !empty($_POST['process_id'])){
|
|
//check if process_id is still active;
|
|
$check = $this->event_concurrent_process_model->check_process_id_validity($this->data["logged_in"]['login_id'], $this->input->post('process_id'), $this->input->post('process_type'), $this->input->post('event_id'));
|
|
if($check<=0){
|
|
output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => $this->lang->line("button_not_updated")
|
|
));
|
|
}
|
|
}
|
|
}
|
|
|
|
private function revalidate_reservation($event_id, $event_schedule_id, $seats_reserved, $reg_type, $byPassRegularReservation){
|
|
|
|
$availability = $this->event_model->check_availability($event_id, $event_schedule_id, $seats_reserved, $reg_type, $byPassRegularReservation);
|
|
|
|
if($availability == 4){
|
|
output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => $this->lang->line("button_not_updated")
|
|
));
|
|
} else if($availability == 5) {
|
|
output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => "Registration to this event is disabled!",
|
|
));
|
|
} else if($availability == $reg_type){
|
|
|
|
return true;
|
|
|
|
} else if($availability == 3) {
|
|
output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => "You cannot register to waiting list yet! Please reload."
|
|
));
|
|
} else if($availability == 6){
|
|
output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => $this->lang->line('waiting_list'),
|
|
'mdata' => 1
|
|
));
|
|
} else {
|
|
output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => "Registration is not allowed at the moment!"
|
|
));
|
|
}
|
|
}
|
|
|
|
public function check_subscription($event_id, $event_schedule_id, $check_subscription=2, $seats_reserved_orig=0)
|
|
{
|
|
$this->load->model('event_registration_model');
|
|
$this->load->model('event_wait_list_model');
|
|
|
|
$subscribed = $this->event_registration_model->count_all_event_subscription($this->data['logged_in']['user_id'], $event_schedule_id, $event_id, 2, $seats_reserved_orig);
|
|
if($subscribed) {
|
|
return 1;
|
|
} else {
|
|
if($check_subscription < 2){
|
|
$subscribed_waitlist = $this->event_wait_list_model->count_all_waitlist_subscription($this->data['logged_in']['user_id'], $event_schedule_id, $event_id, 2, $seats_reserved_orig);
|
|
if($subscribed_waitlist) {
|
|
return 2;
|
|
}else {
|
|
return false;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
|
|
private function get_reservation_details($action=false, $reg_type=false, $event_id){
|
|
|
|
$this->load->model('event_wait_list_model');
|
|
$this->load->model('event_registration_model');
|
|
|
|
$user_id = $this->data['logged_in']['user_id'];
|
|
if($action && $reg_type){
|
|
if($reg_type == 1 && $action == "modify") {
|
|
return $this->event_registration_model->get_registration_details($user_id, $event_id);
|
|
} else if($reg_type == 2 && $action == "modify"){
|
|
return $this->event_wait_list_model->get_waitlist_registration_details($user_id, $event_id);
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function get_all_registration_details(){
|
|
|
|
if(!UserAuth::isAuth()) {
|
|
output_to_json($this, array(
|
|
'mtype' => "session_timeout",
|
|
'message' => "Vous n'êtes pas connecté",
|
|
));
|
|
} else {
|
|
if($this->input->post('event_id')){
|
|
|
|
$event_status = $this->event_schedule_model->get_all_registration_details($this->input->post('event_id'), $this->input->post('event_schedule_id'), $this->input->post('reg_type'), $this->data['logged_in']['user_id']);
|
|
|
|
if($event_status) {
|
|
|
|
//locked action when not locked
|
|
$check_process = $this->event_concurrent_process_model->lock_or_add_process($this->data['logged_in']['user_id'], $this->data['logged_in']['login_id'], $this->input->post('process_type'), $this->input->post('event_id'));
|
|
|
|
if($check_process['status']) {
|
|
//determine action type
|
|
$this->determine_action_type($this->input->post('event_id'), $this->input->post("process_type"));
|
|
|
|
output_to_json($this, array(
|
|
'mtype' => "success",
|
|
'message' => "Got Current Event",
|
|
'mdata' => $event_status,
|
|
'process_id' => $check_process['process_id'] ?? null
|
|
));
|
|
} else {
|
|
output_to_json($this, array(
|
|
'mtype' => "info",
|
|
'message' => $this->lang->line('logged_on_another_device')
|
|
));
|
|
}
|
|
} else {
|
|
output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => $this->lang->line("button_not_updated")
|
|
));
|
|
}
|
|
} else {
|
|
output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => $this->lang->line("button_not_updated")
|
|
));
|
|
}
|
|
}
|
|
}
|
|
|
|
private function deregister()
|
|
{
|
|
if( $this->event_schedule_model->is_paid_event($this->input->post("event_id")) && $this->isPaidEvent() ) {
|
|
return output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => "Cannot cancel reservation for Paid event"
|
|
));
|
|
}
|
|
|
|
if($this->input->post() && $this->input->post('seats_cancelled') && $this->data['logged_in']['user_id']){
|
|
|
|
$this->load->model("event_deregistration_model");
|
|
|
|
$client_session = $this->data['logged_in'];
|
|
$cancellation_info =$this->input->post();
|
|
$this->set_user_data();
|
|
|
|
$cancellation_info["login_id"] = $client_session['login_id'];
|
|
$cancellation_info["user_id"] = $client_session['user_id'];
|
|
$cancellation_info['user_agent'] = $this->data['agent'];
|
|
$data = array();
|
|
|
|
if($cancellation_info["reg_type"] == REG_TYPE['normal_reg']) {
|
|
|
|
$data = $this->email_unregistered($cancellation_info);
|
|
|
|
} else if($cancellation_info["reg_type"] == REG_TYPE['waitlist_reg']) {
|
|
|
|
$data = $this->email_unregistered_waitlist($cancellation_info);
|
|
}
|
|
|
|
if($data["mtype"] == false) {
|
|
//unlock process
|
|
$this->unlock_process($cancellation_info);
|
|
output_to_json($this, array(
|
|
"mtype" => "error",
|
|
"message" => "Reservation not cancelled. Please try again!",
|
|
"mdata" => $data["message"]
|
|
));
|
|
}else {
|
|
if($cancellation_info["seats_reserved"]==$cancellation_info["seats_cancelled"]){
|
|
output_to_json($this, array(
|
|
"mtype" => "success",
|
|
"message" => ($cancellation_info["reg_type"]==1)?$this->lang->line('unsubscribed'):$this->lang->line('unsubscribed_waitlist')
|
|
));
|
|
}else{
|
|
output_to_json($this, array(
|
|
"mtype" => "success",
|
|
"message" => ($cancellation_info["reg_type"]==1)?$this->lang->line('partial_unsubscribed'):$this->lang->line('partial_unsubscribed_waitlist')
|
|
));
|
|
}
|
|
|
|
}
|
|
|
|
}else {
|
|
//unlock process
|
|
$this->unlock_process($cancellation_info);
|
|
output_to_json($this, array(
|
|
"mtype" => "error",
|
|
"message" => "Reservation not cancelled. Please try again!"
|
|
));
|
|
}
|
|
}
|
|
|
|
private function register()
|
|
{
|
|
if( $this->event_schedule_model->is_paid_event($this->input->post("event_id")) && $this->isPaidEvent()) {
|
|
return output_to_json($this, array(
|
|
'mtype' => "error",
|
|
'message' => "Cannot reserve in Paid event"
|
|
));
|
|
}
|
|
|
|
$this->set_user_data();
|
|
|
|
$registration = array(
|
|
"event_id" => $this->input->post('event_id'),
|
|
"process_type" => $this->input->post('process_type'),
|
|
"process_id" => $this->input->post('process_id'),
|
|
"seat_feature" => $this->input->post('seat_feature'),
|
|
"action" => $this->input->post('action'),
|
|
"reg_type" => $this->input->post('reg_type'),
|
|
"user_id" => $this->data['logged_in']['user_id'],
|
|
"login_id" => $this->data['logged_in']['login_id'],
|
|
"seats_reserved" => $this->input->post('seats_reserved'),
|
|
//"event_schedule_id" => $this->input->post('event_schedule_id'),
|
|
"guest_emails" => $this->input->post('guest_emails') ?? '',
|
|
"user_agent" => $this->data['agent'],
|
|
"is_user_moderated" => $this->input->post('is_user_moderated')?? 0
|
|
);
|
|
|
|
if($this->input->post("reg_type") == 1){
|
|
|
|
$this->load->model("event_registration_model");
|
|
|
|
if($registration['action'] == "register"){
|
|
$this->email_registered($registration);
|
|
} else {
|
|
$this->modify_email_registered($registration);
|
|
}
|
|
} else if($this->input->post("reg_type") == 2){
|
|
|
|
$this->load->model('event_wait_list_model');
|
|
|
|
//check if the waitinglist reservation is from Moderation(Moderated but can reserve in WL in advanced)
|
|
if($this->checkIfReservationCanBeByPassed()){
|
|
$registration["isModeratedButAllowedInWL"] = 1;
|
|
}
|
|
|
|
if($registration['action'] == "register"){
|
|
$this->email_registered_waitlist($registration);
|
|
} else { //modify
|
|
$this->modify_email_registered_waitlist($registration);
|
|
}
|
|
}
|
|
}
|
|
|
|
private function email_registered($registration)
|
|
{
|
|
$this->load->model("user_subscriber_model");
|
|
$this->load->model("event_registration_model");
|
|
$this->load->model('event_email_template_model');
|
|
$this->load->model('event_email_recipient_model');
|
|
|
|
$event_info = $this->event_model->event_details_email($registration['event_id']);
|
|
$user_info = $this->user_subscriber_model->email_registered($registration['user_id']);
|
|
|
|
if(countVal($user_info) > 0 && countVal($event_info) >0)
|
|
{
|
|
$registered = $this->event_registration_model->register($registration);
|
|
|
|
//send email when reservation is successfull
|
|
if($registered){
|
|
$email_tpl = $this->event_email_template_model->get_current_event_email_template($registration['event_id'], 3, true);
|
|
|
|
$mailjet_response = false;
|
|
|
|
if(countVal($email_tpl) > 0)
|
|
{
|
|
$mailjet_response = $this->mailjet_libr->fo_send_template_email(array(
|
|
"message" => $email_tpl,
|
|
"vars" => $this->add_email_vars('foer', $user_info, $event_info, $registration['seats_reserved'])
|
|
));
|
|
|
|
if($mailjet_response){
|
|
//add email logs
|
|
$mailjet_response["event_id"] = $registration['event_id'];
|
|
$mailjet_response["reference_id"] = $registered;
|
|
$mailjet_response["email_type_id"] = 3;
|
|
$mailjet_response["email_tpl_id"] = $email_tpl->email_tpl_id;
|
|
$result = $this->event_email_recipient_model->add_email_logs($mailjet_response);
|
|
}
|
|
}
|
|
|
|
$result = array (
|
|
'mtype' => "success",
|
|
'message' => $this->lang->line('subscribed'),
|
|
// 'mdata' => $mailjet_response//array()//
|
|
);
|
|
} else {
|
|
//unlock process
|
|
$this->unlock_process($registration);
|
|
$result = array (
|
|
'mtype' => "error",
|
|
'message' => "Error - Not registered",
|
|
'mdata' => $mailjet_response//array()
|
|
);
|
|
}
|
|
|
|
output_to_json($this, $result);
|
|
|
|
} else {
|
|
//unlock process
|
|
$this->unlock_process($registration);
|
|
output_to_json($this, array (
|
|
'mtype' => "error",
|
|
'message' => "No email to send!"
|
|
));
|
|
}
|
|
}
|
|
|
|
/*modify email registration*/
|
|
private function modify_email_registered($registration)
|
|
{
|
|
$this->load->model("event_registration_model");
|
|
$this->set_user_data();
|
|
|
|
$registered = $this->event_registration_model->register($registration);
|
|
|
|
if($registered) {
|
|
$send_mod_email = $this->email_modified($registration);
|
|
$act_log = $this->user_activity_log_model->add_activity_log(array(
|
|
"description" => "Modified event reservations",
|
|
"user_id" => $registration["user_id"],
|
|
"action" => "EDIT",
|
|
"table_origin" => "event_resgitration",
|
|
"reference_id" => $registered
|
|
));
|
|
|
|
output_to_json($this, array (
|
|
'mtype' => "success",
|
|
'message' => "Vous avez ajouté des places à votre réservation.",
|
|
'mdata' => 5
|
|
));
|
|
} else {
|
|
//unlock process
|
|
$this->unlock_process($registration);
|
|
output_to_json($this, array (
|
|
'mtype' => "error",
|
|
'message' => "Something went wrong!",
|
|
'mdata' => 5
|
|
));
|
|
}
|
|
}
|
|
|
|
private function email_modified($modification)
|
|
{
|
|
$this->load->model('user_subscriber_model');
|
|
$this->load->model('event_registration_model');
|
|
$this->load->model('event_deregistration_model');
|
|
$this->load->model('event_email_template_model');
|
|
|
|
$seats_reserved = $this->event_registration_model->seats_reserved($modification['user_id'], $modification['event_schedule_id']);
|
|
|
|
if($seats_reserved <= 0){
|
|
return array (
|
|
'mtype' => false,
|
|
'message' => "No reservation to cancel. Please try again!"
|
|
);
|
|
} else {
|
|
|
|
return $this->send_email_on_modification_partial($modification, $seats_reserved);
|
|
}
|
|
}
|
|
private function email_unregistered($cancellation)
|
|
{
|
|
$this->load->model('user_subscriber_model');
|
|
$this->load->model('event_registration_model');
|
|
$this->load->model('event_deregistration_model');
|
|
$this->load->model('event_email_template_model');
|
|
|
|
$seats_reserved = $this->event_registration_model->seats_reserved($cancellation['user_id'], $cancellation['event_schedule_id']);
|
|
|
|
if($seats_reserved <= 0){
|
|
return array (
|
|
'mtype' => false,
|
|
'message' => "No reservation to cancel. Please try again!"
|
|
);
|
|
} else {
|
|
|
|
if($cancellation["seats_cancelled"] != $seats_reserved){
|
|
$this->send_email_on_deregistration_partial($cancellation, $seats_reserved);
|
|
|
|
return array (
|
|
'mtype' => true,
|
|
'message' => $this->lang->line('unsubscribed')
|
|
);
|
|
} else {
|
|
$this->send_email_on_deregistration($cancellation, $seats_reserved);
|
|
|
|
return array (
|
|
'mtype' => true,
|
|
'message' => $this->lang->line('unsubscribed')
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
private function send_email_on_modification_partial($modification, $seats_reserved){
|
|
|
|
$this->load->model('event_email_recipient_model');
|
|
$event_info = $this->event_model->event_details_email($modification["event_schedule_id"]);
|
|
|
|
$user_info = $this->user_subscriber_model->email_registered($modification['user_id']);
|
|
|
|
if(countVal($user_info) > 0 && countVal($event_info) >0){
|
|
|
|
$email_tpl = $this->event_email_template_model->get_current_event_email_template($modification['event_id'], $modification["event_schedule_id"], 5, true, 8);
|
|
|
|
$mailjet_response = false;
|
|
if(countVal($email_tpl) > 0){
|
|
$mailjet_response = $this->mailjet_libr->fo_send_template_email(array(
|
|
"message" => $email_tpl,
|
|
"vars" => $this->add_email_vars('pscl', $user_info, $event_info, ($seats_reserved))
|
|
));
|
|
}
|
|
|
|
//send email even when email template is dissabled
|
|
if($mailjet_response || countVal($email_tpl) <=0) {
|
|
} else {
|
|
//unlock process
|
|
$this->unlock_process($modification);
|
|
return array (
|
|
'mtype' => false,
|
|
'message' => "Something went wrong. Email not sent!"
|
|
);
|
|
}
|
|
} else {
|
|
//unlock process
|
|
$this->unlock_process($modification);
|
|
return array (
|
|
'mtype' => false,
|
|
'message' => "No email to send!"
|
|
);
|
|
}
|
|
}
|
|
private function send_email_on_deregistration_partial($cancellation, $seats_reserved)
|
|
{
|
|
$update_status = UserAuth::isLoggedInAsSubscriber()? false:true;
|
|
$this->load->model('event_email_recipient_model');
|
|
$deregistered = $this->event_deregistration_model->deregister($cancellation, $update_status);
|
|
$event_info = $this->event_model->event_details_email($cancellation["event_schedule_id"]);
|
|
|
|
$user_info = $this->user_subscriber_model->email_registered($cancellation['user_id']);
|
|
|
|
if(countVal($user_info) > 0 && countVal($event_info) >0){
|
|
|
|
$seats_reserved -= $cancellation["seats_cancelled"];
|
|
|
|
//send email after deregistration is successfull
|
|
if($deregistered){
|
|
|
|
$email_tpl = $this->event_email_template_model->get_current_event_email_template($cancellation['event_id'], $cancellation["event_schedule_id"], 5, true, 8);
|
|
|
|
$mailjet_response = false;
|
|
|
|
if(countVal($email_tpl) > 0)
|
|
{
|
|
$mailjet_response = $this->mailjet_libr->fo_send_template_email(array(
|
|
"message" => $email_tpl,
|
|
"vars" => $this->add_email_vars('pscl', $user_info, $event_info, ($seats_reserved))
|
|
));
|
|
|
|
if($mailjet_response){
|
|
//add email logs
|
|
$mailjet_response["event_schedule_id"] = $cancellation['event_schedule_id'];
|
|
$mailjet_response["reference_id"] = $deregistered;
|
|
$mailjet_response["email_type_id"] = 5;
|
|
$mailjet_response["email_tpl_id"] = $email_tpl->email_tpl_id;
|
|
$result = $this->event_email_recipient_model->add_email_logs($mailjet_response);
|
|
}
|
|
}
|
|
|
|
$this->event_model->reopen_event($cancellation['event_schedule_id']);
|
|
|
|
return array (
|
|
'mtype' => true,
|
|
'message' => $this->lang->line('unsubscribed')
|
|
);
|
|
|
|
} else {
|
|
//unlock process
|
|
$this->unlock_process($cancellation);
|
|
return array (
|
|
'mtype' => false,
|
|
'message' => "Reservation not cancelled. Please try again!"
|
|
);
|
|
}
|
|
|
|
} else {
|
|
//unlock process
|
|
$this->unlock_process($cancellation);
|
|
return array (
|
|
'mtype' => false,
|
|
'message' => "No email to send!"
|
|
);
|
|
}
|
|
}
|
|
|
|
private function send_email_on_deregistration($cancellation, $seats_reserved){
|
|
|
|
$this->load->model('event_email_recipient_model');
|
|
|
|
$event_info = $this->event_model->event_details_email($cancellation["event_schedule_id"]);
|
|
|
|
$user_info = $this->user_subscriber_model->email_registered($cancellation['user_id']);
|
|
|
|
if(countVal($user_info) > 0 && countVal($event_info) >0) {
|
|
$update_status = UserAuth::isLoggedInAsSubscriber()? false:true;
|
|
|
|
$deregistered = $this->event_deregistration_model->deregister($cancellation, $update_status);
|
|
|
|
//send email when deregistration is successfull
|
|
if($deregistered){
|
|
|
|
$email_tpl = $this->event_email_template_model->get_current_event_email_template($cancellation['event_id'], $cancellation["event_schedule_id"], 5, true);
|
|
|
|
$mailjet_response = false;
|
|
|
|
if(countVal($email_tpl) > 0)
|
|
{
|
|
$mailjet_response = $this->mailjet_libr->fo_send_template_email(array(
|
|
"message" => $email_tpl,
|
|
"vars" => $this->add_email_vars('four', $user_info, $event_info, $seats_reserved)
|
|
));
|
|
|
|
if($mailjet_response){
|
|
//add email logs
|
|
$mailjet_response["event_schedule_id"] = $cancellation['event_schedule_id'];
|
|
$mailjet_response["reference_id"] = $deregistered;
|
|
$mailjet_response["email_type_id"] = 5;
|
|
$mailjet_response["email_tpl_id"] = $email_tpl->email_tpl_id;
|
|
$result = $this->event_email_recipient_model->add_email_logs($mailjet_response);
|
|
}
|
|
}
|
|
|
|
$this->event_model->reopen_event($cancellation['event_schedule_id']);
|
|
|
|
return array (
|
|
'mtype' => true,
|
|
'message' => $this->lang->line('unsubscribed')
|
|
);
|
|
|
|
} else {
|
|
//unlock process
|
|
$this->unlock_process($cancellation);
|
|
return array (
|
|
'mtype' => false,
|
|
'message' => "Reservation not cancelled. Please try again!"
|
|
);
|
|
}
|
|
|
|
|
|
} else {
|
|
//unlock process
|
|
$this->unlock_process($cancellation);
|
|
return array (
|
|
'mtype' => false,
|
|
'message' => "No email to send!"
|
|
);
|
|
}
|
|
}
|
|
|
|
private function email_registered_waitlist($registration)
|
|
{
|
|
$this->load->model("user_subscriber_model");
|
|
$this->load->model("user_model");
|
|
$this->load->model('event_email_template_model');
|
|
$this->load->model('event_wait_list_model');
|
|
$this->load->model('event_email_recipient_model');
|
|
|
|
$event_info = $this->event_model->event_details_email($registration['event_schedule_id']);
|
|
$user_info = $this->user_subscriber_model->email_registered($registration['user_id']);
|
|
|
|
if(countVal($user_info) > 0 && countVal($event_info) >0)
|
|
{
|
|
$registered = $this->event_wait_list_model->register_waitlist($registration);
|
|
|
|
//send email when registration to waitlist is successfull
|
|
if($registered) {
|
|
|
|
$email_tpl = $this->event_email_template_model->get_current_event_email_template($registration['event_id'], $registration['event_schedule_id'], 6, true);
|
|
|
|
$mailjet_response = false;
|
|
|
|
if(countVal($email_tpl) > 0)
|
|
{
|
|
$mailjet_response = $this->mailjet_libr->fo_send_template_email(array(
|
|
"message" => $email_tpl,
|
|
"vars" => $this->add_email_vars('forwl', $user_info, $event_info, $registration['seats_reserved'])
|
|
));
|
|
|
|
if($mailjet_response){
|
|
//add email logs
|
|
$mailjet_response["event_schedule_id"] = $registration['event_schedule_id'];
|
|
$mailjet_response["reference_id"] = $registered;
|
|
$mailjet_response["email_type_id"] = 6;
|
|
$mailjet_response["email_tpl_id"] = $email_tpl->email_tpl_id;
|
|
$result = $this->event_email_recipient_model->add_email_logs($mailjet_response);
|
|
}
|
|
}
|
|
|
|
$result = array (
|
|
'mtype' => "success",
|
|
'message' => $this->lang->line('subscribed_waitlist'),
|
|
'mdata' => 5
|
|
);
|
|
} else {
|
|
//unlock process
|
|
$this->unlock_process($registration);
|
|
$result = array (
|
|
'mtype' => "error",
|
|
'message' => "Something went wron!",
|
|
'mdata' => 5
|
|
);
|
|
}
|
|
|
|
output_to_json($this, $result);
|
|
|
|
} else {
|
|
//unlock process
|
|
$this->unlock_process($registration);
|
|
output_to_json($this, array (
|
|
'mtype' => "error",
|
|
'message' => "No email to send!",
|
|
'mdata' => 5
|
|
));
|
|
}
|
|
}
|
|
|
|
private function email_unregistered_waitlist($cancellation)
|
|
{
|
|
$update_status = UserAuth::isLoggedInAsSubscriber()? false:true;
|
|
$this->load->model('event_wait_list_deregistration_model');
|
|
|
|
$deregistered = $this->event_wait_list_deregistration_model->deregister_waitlist($cancellation, $update_status);
|
|
|
|
if($deregistered){
|
|
return array(
|
|
'mtype' => true,
|
|
'message' => $this->lang->line('unsubscribed_waitlist')
|
|
);
|
|
} else {
|
|
//unlock process
|
|
$this->unlock_process($cancellation);
|
|
return array(
|
|
'mtype' => false,
|
|
'message' => "Reservation for waiting list not cancelled. Please try again!"
|
|
);
|
|
}
|
|
}
|
|
|
|
/*modify email waiting list registration*/
|
|
private function modify_email_registered_waitlist($registration)
|
|
{
|
|
$this->load->model("event_wait_list_model");
|
|
|
|
$registered = $this->event_wait_list_model->register_waitlist($registration);
|
|
|
|
if($registered) {
|
|
$act_log = $this->user_activity_log_model->add_activity_log(array(
|
|
"description" => "Modified event waiting list reservations",
|
|
"user_id" => $registration["user_id"],
|
|
"action" => "EDIT",
|
|
"table_origin" => "event_wait_list",
|
|
"reference_id" => $registered
|
|
));
|
|
output_to_json($this, array (
|
|
'mtype' => "success",
|
|
'message' => "Vous avez ajouté des places à votre inscription sur liste d'attente.",
|
|
'mdata' => 5
|
|
));
|
|
} else {
|
|
//unlock process
|
|
$this->unlock_process($registration);
|
|
output_to_json($this, array (
|
|
'mtype' => "error",
|
|
'message' => "Something went wrong!",
|
|
'mdata' => 5
|
|
));
|
|
}
|
|
}
|
|
|
|
public function revalidate(){
|
|
Response::handleSessionTimeout("fo");
|
|
|
|
if((isset($_POST['action']) && !empty($_POST['action']))
|
|
&& (isset($_POST['event_id']) && !empty($_POST['event_id']))
|
|
&& (isset($_POST['process_type']) && !empty($_POST['process_type']))
|
|
&& (isset($_POST['process_id']) && !empty($_POST['process_id']))){
|
|
$this->lock_or_unlock_process();
|
|
} else{
|
|
output_to_json($this, array (
|
|
'mtype' => "error",
|
|
'message' => "Not allowed to continue the process!"
|
|
));
|
|
}
|
|
}
|
|
|
|
private function lock_or_unlock_process(){
|
|
if($this->input->post("action") == 1){ //LOCKED
|
|
output_to_json($this, $this->event_concurrent_process_model->lock_or_add_process($this->data['logged_in']['user_id'], $this->data['logged_in']['login_id'], $this->input->post('process_type'), $this->input->post('event_id')));
|
|
} else if($this->input->post("action") == 2){ //UNLOCKED
|
|
output_to_json($this, array ($this->event_concurrent_process_model->unlock_action($this->data['logged_in']['user_id'], $this->data['logged_in']['login_id'], $this->input->post('event_id'), $this->input->post('process_type'), $this->input->post('process_id'))));
|
|
}
|
|
}
|
|
|
|
private function unlock_process($data){
|
|
Response::handleSessionTimeout("fo");
|
|
|
|
$this->event_concurrent_process_model->unlock_action($data['user_id'], $data['login_id'], $data['event_id'], $data['process_type'], $data['process_id']);
|
|
}
|
|
|
|
private function set_user_data(){
|
|
// User Agent
|
|
if ($this->agent->is_browser()){
|
|
$this->data['agent'] = $this->agent->browser().' '.$this->agent->version();
|
|
} elseif ($this->agent->is_robot()){
|
|
$this->data['agent'] = $this->agent->robot();
|
|
} elseif ($this->agent->is_mobile()){
|
|
$this->data['agent'] = $this->agent->mobile();
|
|
} else {
|
|
$this->data['agent'] = 'Unidentified User Agent';
|
|
}
|
|
}
|
|
|
|
public function page_visit()
|
|
{
|
|
$this->load->model('event_page_visit_model');
|
|
|
|
$event_id = $this->input->post('event_id');
|
|
$client_session = $this->data["logged_in"];
|
|
if(!UserAuth::isAuth()) $page_visitor = NULL;
|
|
else $page_visitor = $client_session["user_id"];
|
|
$this->event_page_visit_model->page_visit($event_id, $page_visitor);
|
|
}
|
|
|
|
public function save_link_to_cookie()
|
|
{
|
|
$this->load->helper('cookie');
|
|
$this->delete_link_cookie();
|
|
|
|
$event_id = $this->input->post('event_id');
|
|
$event_type = $this->event_model->save_link_to_cookie($event_id);
|
|
$cookie_eventpage = array(
|
|
'name' => 'eventpage',
|
|
'value' => json_encode(array(
|
|
"event_link" => base_url('event_details?event_id='.$event_id),
|
|
"event_type" => $event_type
|
|
)),
|
|
'expire' => 0, // time() + (86400 * 30),
|
|
'prefix' => $this->config->item('sess_cookie_name').'_'
|
|
);
|
|
set_cookie($cookie_eventpage);
|
|
|
|
output_to_json($this, array(
|
|
"mtype" => "success",
|
|
"message" => "Link Cookie Created!"
|
|
));
|
|
}
|
|
|
|
public function clear_link_cookie()
|
|
{
|
|
$this->delete_link_cookie();
|
|
}
|
|
|
|
private function delete_link_cookie()
|
|
{
|
|
delete_cookie($this->config->item('sess_cookie_name').'_eventpage');
|
|
}
|
|
|
|
private function add_email_vars($action, $user_info, $event_info, $seats_reserved){
|
|
|
|
$event_info->{"subscriber"} = $user_info->first_name." ".$user_info->last_name;
|
|
$event_info->{"subs_prenom"} = $user_info->first_name;
|
|
$event_info->{"subs_nom"} = $user_info->last_name;
|
|
$event_info->{"seats_reserved"} = ($seats_reserved <= 1)?$seats_reserved.' place': $seats_reserved.' places ';
|
|
$event_info->{"event_url"} = 'event_details?event_id='.$event_info->event_id;
|
|
$event_info->{"new_tab_url"} = "e/".$action."/".base64_encode($user_info->user_id."_".$event_info->event_id."_".$event_info->event_schedule_id."_".$seats_reserved);
|
|
$event_info->{"event_picture"} = 'resources/images/frontoffice/events/'.$event_info->event_picture;
|
|
$event_info->{"email_address"} = $user_info->email_address;
|
|
|
|
return $event_info;
|
|
}
|
|
}
|
|
|