load->model("user_activity_log_model"); } public function check_subscription($user_id, $event_schedule_id) { $query = $this->db->select('er.status, er.number_of_guest') ->from('event_registration er') ->join('event_schedule es', 'er.event_schedule_id = es.event_schedule_id') ->where('er.event_schedule_id', $event_schedule_id) ->where('es.event_status !=', 'CANCEL') ->where('er.subscriber', $user_id) ->where('er.status !=', 0) ->order_by('er.date_time', 'DESC') ->limit(1) ->get() ->row(); if(!$query){ return false; } else { if($query->status == 0){ return false; }else{ return $query->number_of_guest+1; } } } public function count_all_event_subscription($user_id, $event_schedule_id, $event_id, $page=2, $seats_reserved=0) { if($page == 2){ if (UserAuth::isLoggedInAsSubscriber()) { $_where = ""; } else { $_where = "AND es.event_status != 'CANCEL'"; } $query = $this->db->query(" SELECT er.status, (number_of_guest+1) as number_of_guest FROM event_registration er INNER JOIN event_schedule es USING(event_schedule_id) WHERE er.event_schedule_id = ? AND er.subscriber = ? $_where AND er.status != 0 ".(($seats_reserved > 0)? "AND (number_of_guest+1) = '".$this->db->escape_str($seats_reserved)."'":"")." ORDER BY er.date_time DESC LIMIT 1 ", array($event_schedule_id, $user_id))->row(); } else{ $query = $this->db->query("SELECT SUM(er.number_of_guest+1) as number_of_guest from event_registration er LEFT JOIN event_schedule es ON es.event_schedule_id = er.event_schedule_id where er.subscriber = ? AND event_status != 'CANCEL' and es.event_id = ? and es.back_office_status IN(1,2,3) and er.status = 1", array($user_id, $event_id))->row(); } if(!$query){ return false; } else { return $query->number_of_guest; } } /** * @method count all subscription regardless the event/backoffice status of the event * count all reservations for all types of event status */ public function count_all_event_subscription_for_my_reservations($user_id, $event_schedule_id, $event_id) { /* * count all reservations for all types of event status */ $query = $this->db->query("SELECT SUM(er.number_of_guest+1) as number_of_guest from event_registration er LEFT JOIN event_schedule es ON es.event_schedule_id = er.event_schedule_id where er.subscriber = ".$user_id." and es.event_id = ".$event_id." and es.event_schedule_id = ".$event_schedule_id." and er.status = 1")->row(); if(!$query){ return false; } else { return $query->number_of_guest; } } public function count_registration_by_event_schedule($event_schedule_id){ $query = $this->db->query("SELECT SUM(er.number_of_guest+1) as number_of_guest FROM event_registration er LEFT JOIN event_schedule es ON es.event_schedule_id = er.event_schedule_id AND es.event_schedule_id = ? WHERE es.event_schedule_id = ? and es.back_office_status NOT IN(6) and er.status = 1", array($event_schedule_id, $event_schedule_id))->row(); return ($query->number_of_guest)?$query->number_of_guest:0; } public function register($registration, $ws = false) { /** * Negative values not allowed */ if ((int) $registration['seats_reserved'] <= 0 && !$ws) { return false; } $remaining_seats = $this->check_seats($registration['event_id'], 1); if ((!$remaining_seats || $remaining_seats->remaining_seat < $registration['seats_reserved']) && !$ws) { return false; } else { //by default $registeredSubcriber = false; if($registration["action"] == "register") { // Register Client and get the registration id $registeredSubcriber = $this->add_reserved_seats($registration); //to do if(($registration['workshop_session'] == 'DISTANCE-PRESENTIEL' && $registration['registration_type'] == 'soir-distance') || $registration['workshop_session'] == 'DISTANCE') { $ds = array( "user_id" => $registration['user_id'], "event_id" => $registration['event_id'], "registration_id" => $registeredSubcriber ); $this->save_ateriel_distance_subscriber($ds); } } else if($registration["action"] == "modify") { // Update registration $registeredSubcriber = $this->update_reserved_seats($registration); } //update remaining seats if(!$ws) { $this->update_remaining_seat($registration); } } if (isset($registration['login_id']) && isset($registration["process_type"])) { // Update event concurrent process $this->db->set('process_status', 0); $this->db->where('login_id', $registration['login_id']); $this->db->where('process_type', $registration["process_type"]); $this->db->update('event_concurrent_process'); } // check seats and update thes event_status and back_office_status if(!$ws) { $this->update_event_status($registration); } return $registeredSubcriber; } private function update_event_status($registration){ $check_seats = $this->check_seats($registration['event_id'], 0); if($registration["seat_feature"] == 1){ //per date if($check_seats->remaining_seat <= 0){ $this->db->where('event_id', $registration['event_id']); if($check_seats->remaining_seat <= 0) { $this->db->update('event', array('event_status' => "FULL", 'back_office_status' => 3)); $this->db->flush_cache(); $this->db->where('event_id', $registration['event_id']); $this->db->update('event_schedule', array('event_status' => "FULL", 'back_office_status' => 3)); $event_schedule_id = $registration['event_id']; $log_desc = "No more available waitlist seats. Event schedule is now locked for any registrations. Backoffice status changed from Open to Locked."; $act_log = $this->user_activity_log_model->add_activity_log(array( "description" => $log_desc." - event_schedule_id : ".$this->db->escape($event_schedule_id), "user_id" => $registration['user_id'] ?? $_SESSION["logged_in"]["user_id"], "action" => "EDIT", "table_origin" => "event", "reference_id" => $event_schedule_id )); } // else { // $this->db->update('event', array('event_status' => "FULL", 'back_office_status' => 2)); // $event_schedule_id = $registration['event_id']; // $log_desc = "No more available seats. Event schedule is now open for waitlist registration. Event status changed from Available to Full."; // $act_log = $this->user_activity_log_model->add_activity_log(array( // "description" => $log_desc." - event_schedule_id : ".$this->db->escape($event_schedule_id), // "user_id" => $registration['user_id'] ?? $_SESSION["logged_in"]["user_id"], // "action" => "EDIT", // "table_origin" => "event_schedule", // "reference_id" => $event_schedule_id // )); // } } } else if($registration["seat_feature"] == 2){ //combine //update all open events to FULL if($check_seats->remaining_seat <= 0){ $this->db->where('event_id', $registration["event_id"]); $this->db->where('back_office_status', 2); $this->db->where('event_status !=', 'CANCEL'); if($check_seats->quota_waiting_list_seat <= 0) { $this->db->where('event_status !=', 'FULL'); $this->db->where('back_office_status !=', '3'); $this->db->update('event_schedule', array('event_status' => "FULL", 'back_office_status' => 3, 'auto_event_status' => 1)); $event_schedule_id = $registration['event_schedule_id']; $log_desc = "No more available waitlist seats. Event schedule is now locked for any registrations. Backoffice status changed from Open to Locked."; $act_log = $this->user_activity_log_model->add_activity_log(array( "description" => $log_desc." - event_schedule_id : ".$this->db->escape($event_schedule_id), "user_id" => $registration['user_id'] ?? $_SESSION["logged_in"]["user_id"], "action" => "EDIT", "table_origin" => "event_schedule", "reference_id" => $event_schedule_id )); } else { $this->db->where('event_status !=', 'FULL'); $this->db->where('event_status !=', '2'); $this->db->update('event_schedule', array('event_status' => "FULL", 'back_office_status' => 2, 'auto_event_status' => 1)); $event_schedule_id = $registration['event_schedule_id']; $log_desc = "No more available seats. Event schedule is now open for waitlist registration. Event status changed from Available to Full."; $act_log = $this->user_activity_log_model->add_activity_log(array( "description" => $log_desc." - event_schedule_id : ".$this->db->escape($event_schedule_id), "user_id" => $registration['user_id'] ?? $_SESSION["logged_in"]["user_id"], "action" => "EDIT", "table_origin" => "event_schedule", "reference_id" => $event_schedule_id )); } } } } public function update_remaining_seat($registration){ $event = $this->check_seats((int)$registration['event_id']); $reserved_seats = $this->count_total_reserved_seats($registration['event_id']); //if($registration["seat_feature"] == 1){ $this->db->query(" UPDATE event SET remaining_combined_seat = ? WHERE event_id =?", array($event->total_available_seat - $reserved_seats, $registration['event_id'])); // } else if($registration["seat_feature"] == 2){ // $this->db->query(" // UPDATE event e // LEFT JOIN event_schedule es // ON es.event_id = e.event_id // SET e.remaining_combined_seat = (CASE // WHEN (e.remaining_combined_seat - ?) <= 0 THEN 0 // ELSE (e.remaining_combined_seat - ?) // END) // WHERE es.event_schedule_id =?", array($registration['seats_reserved'], $registration['seats_reserved'], $registration['event_schedule_id'])); // } } private function check_seats($event_id, $check_type=0){ return $this->db->query("select e.remaining_combined_seat as remaining_seat, e.total_available_seat from event e where e.back_office_status NOT IN(0,4,7,5,6) and e.event_id = ? and e.status =1 limit 1 ", array($event_id))->row(); } public function can_cancel_reservation($event_id){ return $this->db->query("select e.* from event e where e.back_office_status NOT IN(0,4,7,5,6) and e.event_id = ? and e.status =1 limit 1 ", array($event_id))->row(); } private function add_reserved_seats($registration, $ws=false){ // Check Waitlist first if(!$ws) { $this->load->model('event_wait_list_deregistration_model'); $check_waitlist = $this->db->select('wait_list_id, number_of_places') ->from('event_wait_list') ->where('wait_list_subscriber', $registration['user_id']) ->where('event_id', $registration['event_id']) ->where('status', 1) ->get() ->row(); if($check_waitlist){ $registration["seats_cancelled"] = $check_waitlist->number_of_places; $this->event_wait_list_deregistration_model->deregister_waitlist($registration); } } $this->db->insert('event_registration', array( 'event_id' => $registration['event_id'], 'subscriber' => $registration['user_id'], 'number_of_guest' => $registration['seats_reserved'], 'user_agent' => $registration['user_agent'], 'workshop_session' => $registration['workshop_session'], 'registration_type' => $registration['registration_type'], ) ); return $this->db->insert_id(); } private function update_reserved_seats($registration){ $row = $this->db->select("registration_id") ->from("event_registration") ->where("event_schedule_id", $registration['event_schedule_id']) ->where("subscriber", $registration['user_id']) ->where("status", 1) ->get() ->row(); if($row){ $this->db->query(" UPDATE event_registration SET number_of_guest = number_of_guest + ? WHERE event_schedule_id =? AND subscriber = ? AND registration_id = ? AND status =1", array($registration['seats_reserved'], $registration['event_schedule_id'], $registration['user_id'], $row->registration_id)); if($this->db->affected_rows()){ return $row->registration_id; } } return false; } public function get_registration_details($user_id, $event_schedule_id){ return $this->db->query("select er.*, er.number_of_guest as seats_reserved from event_registration er INNER JOIN event es USING(event_id) where er.subscriber = ? AND es.event_status != 'CANCEL' and er.event_id = ? and er.status = ? limit 1 ", array($user_id, $event_schedule_id, 1))->row(); } public function seats_reserved($user_id, $event_schedule_id){ $query = $this->db->select('number_of_guest') ->from('event_registration ereg') ->join("event_schedule evsched", "ereg.event_schedule_id = evsched.event_schedule_id") ->where('subscriber', $user_id) ->where('ereg.event_schedule_id', $event_schedule_id) ->where('status', 1) ->where('subscriber', $user_id) ->where('evsched.event_status !=', 'CANCEL') ->order_by('date_time', 'DESC') ->limit(1) ->get(); // echo var_dump($query); $guests = $query->row(); if($guests) return $guests->number_of_guest + 1; else return 0; } public function get_event_subscribers($event_schedule_id){ $result = $this->db->query(" SELECT er.date_time as date_registered, er.number_of_guest, CONCAT(UCASE(LEFT(u.first_name, 1)), SUBSTRING(u.first_name, 2)) AS first_name, CONCAT(UCASE(LEFT(u.last_name, 1)), SUBSTRING(u.last_name, 2)) AS last_name, u.email_address, (CASE WHEN u.status = 1 THEN 'Activé' ELSE 'Désactivé' END) AS status, us.additional_address as address_1, us.address as city, us.email_address as sub_email_address, us.phone as telephone_number, us.mobile as mobile_number, us.subscription_date as subscription_date_op, us.subscriber_id FROM event_registration er LEFT JOIN user u ON u.user_id = er.subscriber LEFT JOIN user_role ur ON u.role_id = ur.role_id LEFT JOIN user_subscriber us ON us.subscriber = u.user_id WHERE er.event_schedule_id = ? AND er.status = 1 AND u.role_id IN(3)", array($event_schedule_id)); return $result->result(); } public function get_event_subscribers_with_waitlist($event_id) { $result = $this->db->query(" SELECT u.user_id as subscriber_id, CONCAT(UCASE(LEFT(u.first_name, 1)), SUBSTRING(u.first_name, 2)) AS first_name, CONCAT(UCASE(LEFT(u.last_name, 1)), SUBSTRING(u.last_name, 2)) AS last_name, u.email_address, (CASE WHEN er.status = 1 THEN 'Confirmé' ELSE 'Confirmé' END ) AS reservation_status, DATE_FORMAT(er.date_time, '%e/%m/%Y') as reservation_date, DATE_FORMAT(er.date_time, '%Hh%i') as reservation_time, er.number_of_guest AS total_booked, us.address as address_1, us.additional_address as address_2, us.country as country, us.postal_code as code_postal, us.city as city, us.civility as civility, DATE_FORMAT(us.birthday,'%d/%m/%Y') as birth_date, us.phone as telephone_number, us.mobile as mobile_number, us.subscription_date as subscription_date_op FROM event_registration er LEFT JOIN user u ON u.user_id = er.subscriber LEFT JOIN user_role ur ON u.role_id = ur.role_id LEFT JOIN user_subscriber us ON us.subscriber = u.user_id WHERE er.event_id = ? AND er.status = 1 AND u.role_id IN(3)", array($event_id)); return $result->result(); } public function get_event_unsubscription($event_schedule_id){ $result = $this->db->query(" SELECT der.seats_reserve as total_booked, der.number_of_place as number_of_place_cancelled, CONCAT(UCASE(LEFT(u.first_name, 1)), SUBSTRING(u.first_name, 2)) AS first_name, CONCAT(UCASE(LEFT(u.last_name, 1)), SUBSTRING(u.last_name, 2)) AS last_name, u.email_address, der.user_agent as navigator, DATE_FORMAT(er.date_time, '%e/%m/%Y') as reservation_date, DATE_FORMAT(er.date_time, '%Hh%i') as reservation_time, DATE_FORMAT(der.date_time, '%e/%m/%Y') as date_of_cancellation, DATE_FORMAT(der.date_time, '%Hh%i') as time_of_cancellation, us.address as address_1, us.additional_address as address_2, DATE_FORMAT(us.birthday,'%d/%m/%Y') as birth_date, us.country as country, us.postal_code as code_postal, us.city as city, us.civility as civility, us.email_address as sub_email_address, us.phone as telephone_number, us.mobile as mobile_number, us.subscription_date as subscription_date_op, us.subscriber_id FROM event_deregistration der LEFT JOIN event_registration er ON er.registration_id = der.registration_id LEFT JOIN user u ON u.user_id = der.subscriber LEFT JOIN user_role ur ON u.role_id = ur.role_id LEFT JOIN user_subscriber us ON us.subscriber = u.user_id WHERE der.event_schedule_id = ? AND u.role_id IN(3)", array($event_schedule_id)); return $result->result(); } public function get_event_waitlist($event_schedule_id){ $result = $this->db->query(" SELECT ewl.number_of_places as total_booked, CONCAT(UCASE(LEFT(u.first_name, 1)), SUBSTRING(u.first_name, 2)) AS first_name, CONCAT(UCASE(LEFT(u.last_name, 1)), SUBSTRING(u.last_name, 2)) AS last_name, u.email_address, ewl.user_agent as navigator, DATE_FORMAT(ewl.date_time, '%e/%m/%Y') as reservation_date, DATE_FORMAT(ewl.date_time, '%Hh%i') as reservation_time, us.address as address_1, us.additional_address as address_2, DATE_FORMAT(us.birthday,'%d/%m/%Y') as birth_date, us.country as country, us.postal_code as code_postal, us.city as city, us.civility as civility, us.email_address as sub_email_address, us.phone as telephone_number, us.mobile as mobile_number, us.subscription_date as subscription_date_op, us.subscriber_id FROM event_wait_list ewl LEFT JOIN user u ON u.user_id = ewl.wait_list_subscriber LEFT JOIN user_role ur ON u.role_id = ur.role_id LEFT JOIN user_subscriber us ON us.subscriber = u.user_id WHERE ewl.event_schedule_id = ? AND ewl.status = 1 AND u.role_id IN(3)", array($event_schedule_id)); return $result->result(); } public function filter_reservations($user_id, $month, $city) { $query = $this->db->query(' SELECT e.title, er.date_time, er.number_of_guest FROM event e LEFT JOIN event_schedule es ON es.event_id = e.event_id LEFT JOIN event_registration er ON er.event_schedule_id = es.event_schedule_id WHERE er.status = 1 AND er.subscriber = ?', array($user_id) ); return $query->result(); } public function prepare_list_for_reimnder_email($email_schedule, $event){ /* Email key will be used to get the group of recipient ids in one single query which will also be used to insert into the table "event_email_recipient_other_detail" to get the exact id and exact connection. */ $this->load->model('event_email_default_setting_model'); $email_key = "1E".generate_random_keys(8); $this->db->query("INSERT INTO event_email_recipient(email_type_id, email_key, reference_id, event_id) (SELECT ?, ?, er.registration_id, er.event_id FROM event_registration er LEFT JOIN event e ON e.event_id = er.event_id WHERE e.back_office_status IN(2,3) AND er.registration_id NOT IN( SELECT eer.reference_id FROM event_email_recipient eer LEFT JOIN event_email_recipient_other_detail eerod ON eerod.email_recipient_id = eer.email_recipient_id WHERE eer.email_type_id = 3 AND eerod.email_sched_reference_id = ? AND eerod.email_sched_reference = ? AND eer.email_status IN(0, 5) AND eer.event_id = ? ) ".$this->event_email_default_setting_model->get_query_for_email_schedule(3, $email_schedule->email_schedule_id, $email_schedule->email_sched_reference, "er")." AND er.status = 1 AND er.event_id= ? )", array( 3, //email_type_id for reminder email $email_key, $email_schedule->email_schedule_id, $email_schedule->email_sched_reference, $event->event_id, $event->event_id) ); //insert into other details table $this->db->query("INSERT INTO event_email_recipient_other_detail(email_sched_reference_id, email_sched_reference, email_recipient_id) (SELECT ?, ?, email_recipient_id FROM event_email_recipient eer WHERE eer.email_type_id = ? AND eer.email_key = ? AND eer.event_id= ? )", array($email_schedule->email_schedule_id, $email_schedule->email_sched_reference, 3, //email_type_id for reminder email $email_key, $event->event_id) ); return $this->db->affected_rows(); } public function get_data_reminder_email_list(){ $this->load->model("event_schedule_model"); $result = $this->db->select(" e.event_id, e.title as event_title, e.event_status, e.workshop_author, et.event_type, e.description as event_description, (SELECT CONCAT(eeds.email_tpl_setting_sched, ' ', (CASE WHEN eeds.email_tpl_setting_sched_by = 'DAYS' THEN 'jours' WHEN eeds.email_tpl_setting_sched_by = 'HOURS' THEN 'heures' WHEN eeds.email_tpl_setting_sched_by = 'MINUTES' THEN 'minutes' ELSE '' END )) FROM event_email_default_setting eeds WHERE eerod.email_sched_reference_id = eeds.email_tpl_setting_id AND eerod.email_sched_reference = 2 ) as event_reminder_date, (SELECT timestampdiff(SECOND, ees.email_schedule_date, e.start_date_time) FROM event_email_schedule ees WHERE eerod.email_sched_reference_id = ees.email_schedule_id AND eerod.email_sched_reference = 1 ) as event_reminder_specific_date, (CASE WHEN e.rate > 0 THEN e.rate ELSE \"\" END) as event_rate, efa.file_name as event_picture") ->select("DAYNAME(e.start_date_time) AS event_start_day_name", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%e') AS event_start_day", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%m') AS event_start_month", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%M') AS event_start_month_name", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%Y') AS event_start_year", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%Hh%i') AS event_start_hour", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%Hh%i') AS start_date_hour", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%Y-%m-%e %H:%i:%s') AS event_start_date_time", FALSE) ->select("e.start_date_time AS date_complete", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%Hh%i') AS commencement_de_lheure", FALSE) ->from(" event_email_recipient eer") ->join("event e", "e.event_id = eer.event_id AND e.event_status != 'CANCEL'", "left") ->join("event_registration er", "er.event_id = eer.event_id AND er.registration_id = eer.reference_id", "left") ->join('event_type et', 'et.event_type_id = e.event_type_id',"left") ->join('event_file_attachment efa', 'efa.event_id = e.event_id AND efa.status=1 AND efa.attachment_type =1', "left") ->join('event_email_recipient_other_detail eerod', 'eerod.email_recipient_id = eer.email_recipient_id', "left") ->where("(eer.email_status = 0 OR (eer.email_status = 3 AND eer.email_number_of_send_attempt <=3))") ->where("er.registration_id = eer.reference_id") ->where("eerod.email_recipient_id = eer.email_recipient_id") ->where("er.status",1) ->where("eer.event_id IN( select eses.event_id from event_schedule_email_status eses where eses.event_id = eer.event_id and eses.email_type_id = 3 and eses.status = 1 )") ->where("e.status",1) ->where("e.event_status != 'CANCEL'") ->where("eer.email_type_id",3) ->where("(CASE WHEN eerod.email_sched_reference = 1 THEN (SELECT ees.email_schedule_date FROM event_email_schedule ees LEFT JOIN `event_email_default_setting` eeds ON `eeds`.`email_tpl_setting_id` = `ees`.`reference` AND eeds.email_type_id = 3 WHERE ees.email_schedule_id = eerod.email_sched_reference_id AND ees.event_schedule_id = eer.event_schedule_id AND ees.email_schedule_status != 0 AND ees.email_schedule_date <= NOW() ORDER BY ees.email_schedule_date ASC LIMIT 1) WHEN eerod.email_sched_reference = 2 THEN (SELECT (CASE WHEN eeds.email_tpl_setting_sched_by = 'HOURS' THEN DATE_SUB(e.start_date_time, INTERVAL email_tpl_setting_sched HOUR) WHEN eeds.email_tpl_setting_sched_by = 'DAYS' THEN DATE_SUB(e.start_date_time, INTERVAL email_tpl_setting_sched DAY) ELSE DATE_SUB(e.start_date_time, INTERVAL email_tpl_setting_sched MINUTE) END) as email_schedule_date FROM event_email_default_setting eeds WHERE eeds.email_type_id = 3 AND eeds.email_tpl_setting_id = eerod.email_sched_reference_id AND eeds.email_tpl_setting_status= 1 AND (CASE WHEN eeds.email_tpl_setting_sched_by = 'HOURS' THEN DATE_SUB(e.start_date_time, INTERVAL email_tpl_setting_sched HOUR) WHEN eeds.email_tpl_setting_sched_by = 'DAYS' THEN DATE_SUB(e.start_date_time, INTERVAL email_tpl_setting_sched DAY) ELSE DATE_SUB(e.start_date_time, INTERVAL email_tpl_setting_sched MINUTE) END) <= NOW() LIMIT 1) END) <= NOW() ") ->where_in("e.back_office_status", array(2,3)) ->where("e.start_date_time >= NOW()") ->group_by("eer.event_id") ->get(); if ($result->num_rows() > 0) { return $result->result(); } return false; } public function get_event_subscribers_list($event_start_date_time, $event_id, $limit=100){ // public function get_event_subscribers_list($event_start_date_time, $event_schedule_id, $limit=100){ $result = $this->db->query("SELECT es.event_schedule_id, er.subscriber as subscriber_id, eer.reference_id, (er.number_of_guest+1) as seats_reserved, u.email_address, CONCAT(u.first_name, ' ', u.last_name) AS subscriber, u.last_name subs_nom, u.first_name subs_prenom, eer.email_recipient_id, eer.email_number_of_send_attempt, (SELECT CONCAT(email_tpl_setting_sched, ' ', (CASE WHEN email_tpl_setting_sched_by = 'DAYS' THEN 'jours' WHEN email_tpl_setting_sched_by = 'HOURS' THEN 'heures' WHEN email_tpl_setting_sched_by = 'MINUTES' THEN 'minutes' ELSE '' END )) FROM event_email_default_setting WHERE eerod.email_sched_reference_id = email_tpl_setting_id AND eerod.email_sched_reference = 2 ) as event_reminder_date FROM event_email_recipient eer LEFT JOIN event_registration er ON er.event_id = eer.event_id AND er.registration_id = eer.reference_id LEFT JOIN user u ON u.user_id = er.subscriber LEFT JOIN event_schedule es ON es.event_id = eer.event_id LEFT JOIN event e ON e.event_id = es.event_id LEFT JOIN event_email_recipient_other_detail eerod ON eer.email_recipient_id = eerod.email_recipient_id WHERE eer.reference_id = er.registration_id AND e.status = 1 AND er.status = 1 AND eer.email_type_id = 3 AND (eer.email_status = 0 OR (eer.email_status = 3 AND eer.email_number_of_send_attempt <=3)) AND eer.event_id = $event_id AND CONCAT(eerod.email_sched_reference_id,'_',eerod.email_sched_reference) IN( SELECT CONCAT(eeds.email_tpl_setting_id,'_',2) FROM event_email_default_setting eeds WHERE eeds.email_type_id = 3 AND eeds.email_tpl_setting_status = 1 AND (CASE WHEN eeds.email_tpl_setting_sched_by = 'HOURS' THEN DATE_SUB(?, INTERVAL eeds.email_tpl_setting_sched HOUR) WHEN eeds.email_tpl_setting_sched_by = 'DAYS' THEN DATE_SUB(?, INTERVAL eeds.email_tpl_setting_sched DAY) ELSE DATE_SUB(?, INTERVAL eeds.email_tpl_setting_sched MINUTE) END) <= NOW() AND eeds.email_tpl_setting_id NOT IN ( SELECT ees.reference FROM event_email_schedule ees LEFT JOIN `event_email_default_setting` eedsx ON `eedsx`.`email_tpl_setting_id` = `ees`.`reference` WHERE ees.event_id = $event_id AND ees.event_id = eer.event_id AND eedsx.email_type_id = 3 AND ees.email_schedule_status IN (1,2) GROUP BY ees.reference ) UNION SELECT CONCAT(ees.email_schedule_id,'_',1) FROM `event_schedule` es LEFT JOIN `event_email_schedule` ees ON `ees`.`event_id` = `es`.`event_id` LEFT JOIN `event_email_default_setting` eeds ON `eeds`.`email_tpl_setting_id` = `ees`.`reference` WHERE `es`.`event_id` = $event_id AND ees.email_schedule_status != 0 AND eeds.email_type_id = 3 AND es.start_date_time >= NOW() AND es.back_office_status IN(2,3) AND ees.email_schedule_date <= NOW() ) AND e.start_date_time >= NOW() AND e.back_office_status IN(2,3) GROUP BY eer.reference_id LIMIT 0, $limit", array($event_start_date_time, $event_start_date_time, $event_start_date_time)); //AND e.remaining_seat > 0 //AND e.event_status = 'AVAILABLE' if ($result->num_rows() > 0) { return $result->result(); } return false; // $result = $this->db->query("SELECT // eer.event_id, // er.subscriber as subscriber_id, // eer.reference_id, // (er.number_of_guest+1) as seats_reserved, // u.email_address, // CONCAT(u.first_name, ' ', u.last_name) AS subscriber, // u.last_name subs_nom, // u.first_name subs_prenom, // eer.email_recipient_id, // eer.email_number_of_send_attempt, // (SELECT // CONCAT(email_tpl_setting_sched, ' ', // (CASE // WHEN email_tpl_setting_sched_by = 'DAYS' THEN 'jours' // WHEN email_tpl_setting_sched_by = 'HOURS' THEN 'heures' // WHEN email_tpl_setting_sched_by = 'MINUTES' THEN 'minutes' // ELSE '' // END // )) // FROM // event_email_default_setting // WHERE // eerod.email_sched_reference_id = email_tpl_setting_id // AND eerod.email_sched_reference = 2 // ) as event_reminder_date // FROM // event_email_recipient eer // LEFT JOIN event_registration er // ON er.event_id = eer.event_id // AND er.registration_id = eer.reference_id // LEFT JOIN user u // ON u.user_id = er.subscriber // LEFT JOIN event e // ON e.event_id = eer.event_id // LEFT JOIN event_email_recipient_other_detail eerod // ON eer.email_recipient_id = eerod.email_recipient_id // WHERE eer.reference_id = er.registration_id // AND e.status = 1 // AND er.status = 1 // AND eer.email_type_id = 3 // AND (eer.email_status = 0 OR (eer.email_status = 3 AND eer.email_number_of_send_attempt <=3)) // AND eer.event_id = $event_id // AND CONCAT(eerod.email_sched_reference_id,'_',eerod.email_sched_reference) // IN( // SELECT CONCAT(eeds.email_tpl_setting_id,'_',2) // FROM event_email_default_setting eeds // WHERE eeds.email_type_id = 3 // AND eeds.email_tpl_setting_status = 1 // AND (CASE // WHEN eeds.email_tpl_setting_sched_by = 'HOURS' // THEN DATE_SUB(?, INTERVAL eeds.email_tpl_setting_sched HOUR) // WHEN eeds.email_tpl_setting_sched_by = 'DAYS' // THEN DATE_SUB(?, INTERVAL eeds.email_tpl_setting_sched DAY) // ELSE DATE_SUB(?, INTERVAL eeds.email_tpl_setting_sched MINUTE) // END) <= NOW() // AND eeds.email_tpl_setting_id NOT IN // ( // SELECT ees.reference // FROM event_email_schedule ees // LEFT JOIN `event_email_default_setting` eedsx // ON `eedsx`.`email_tpl_setting_id` = `ees`.`reference` // WHERE ees.event_id = $event_id // AND ees.event_id = eer.event_id // AND eedsx.email_type_id = 3 // AND ees.email_schedule_status IN (1,2) // GROUP BY ees.reference // ) // UNION // SELECT CONCAT(ees.email_schedule_id,'_',1) // FROM `event_email_schedule` ees // LEFT JOIN `event_email_default_setting` eeds // ON `eeds`.`email_tpl_setting_id` = `ees`.`reference` // WHERE `ees`.`event_id` = $event_id // AND ees.email_schedule_status != 0 // AND ees.event_id = e.event_id` // AND eeds.email_type_id = 3 // AND e.start_date_time >= NOW() // AND e.back_office_status IN(2,3) // AND ees.email_schedule_date <= NOW() // ) // AND e.start_date_time >= NOW() // AND e.back_office_status IN(2,3) // GROUP BY eer.reference_id // LIMIT 0, $limit", array($event_start_date_time, $event_start_date_time, $event_start_date_time)); // //AND e.remaining_seat > 0 // //AND e.event_status = 'AVAILABLE' // if ($result->num_rows() > 0) { // return $result->result(); // } // return false; } public function get_subscribers_by_event($event_id){ $this->db->select("er.registration_id, er.subscriber, er.event_id, u.last_name as subscriber_last_name, u.first_name as subscriber_first_name, u.email_address, us.address, er.status, us.phone, e.workshop_author, er.number_of_guest as seats_reserved"); $this->db->select("DATE_FORMAT(er.date_time,, '%Y-%m-%e') AS booking_date", FALSE); $this->db->select("DATE_FORMAT(er.date_time,, '%Hh%i') AS booking_hour", FALSE); $this->db->select("(CASE WHEN er.status = 0 THEN 'Annulé' ELSE 'Actif' END) AS status_text", FALSE); $this->db->join('user as u', 'u.user_id = er.subscriber AND u.status=1'); $this->db->join('user_subscriber as us', 'us.subscriber = er.subscriber', 'left'); $this->db->join('event as e', 'e.event_id = er.event_id', 'left'); $this->db->where('er.event_id', $event_id); $this->db->where('er.status', 1); $result = $this->db->get('event_registration as er'); if ($result->num_rows()>0) { return $result->result(); } return false; } public function get_reminder_email_data($email_recipient_id, $subscriber){ $this->load->model("event_schedule_model"); $result = $this->db->select(" eer.event_schedule_id, e.event_id, e.title as event_title, et.event_type, es.event_status, u.email_address, ".$this->event_schedule_model->use_diffent_address()." (CASE WHEN e.rate > 0 THEN e.rate ELSE \"\" END) as event_rate, (er.number_of_guest+1) as seats_reserved, efa.file_name as event_picture, eet.email_tpl_detail, e.description as event_description, (SELECT CONCAT(eeds.email_tpl_setting_sched, ' ', (CASE WHEN eeds.email_tpl_setting_sched_by = 'DAYS' THEN 'jours' WHEN eeds.email_tpl_setting_sched_by = 'HOURS' THEN 'heures' WHEN eeds.email_tpl_setting_sched_by = 'MINUTES' THEN 'minutes' ELSE '' END )) FROM event_email_default_setting eeds WHERE eerod.email_sched_reference_id = eeds.email_tpl_setting_id AND eerod.email_sched_reference = 2 ) as event_reminder_date, (SELECT timestampdiff(SECOND, ees.email_schedule_date, es.start_date_time) FROM event_email_schedule ees WHERE eerod.email_sched_reference_id = ees.email_schedule_id AND eerod.email_sched_reference = 1 ) as event_reminder_specific_date, es.start_date_time as event_start_date") ->select("DAYNAME(es.start_date_time) AS event_start_day_name", FALSE) ->select("DATE_FORMAT(es.start_date_time, '%e') AS event_start_day", FALSE) ->select("DATE_FORMAT(es.start_date_time, '%m') AS event_start_month", FALSE) ->select("DATE_FORMAT(es.start_date_time, '%Hh%i') AS event_start_hour", FALSE) ->select("DATE_FORMAT(es.start_date_time, '%Y') AS event_start_year", FALSE) ->select("DATE_FORMAT(es.start_date_time, '%M') AS event_start_month_name", FALSE) ->select("CONCAT(u.first_name, ' ', u.last_name) AS subscriber", FALSE) ->select("u.first_name AS subs_prenom", FALSE) ->select("u.last_name AS subs_nom", FALSE) // ->select("CONCAT('(', u.email_address, ')') AS email_address", FALSE) ->from(" event_email_recipient eer") ->join("event_schedule es", "es.event_schedule_id = eer.event_schedule_id", "left") ->join("event e", "e.event_id = es.event_id", "left") ->join("event_registration er", "er.registration_id = eer.reference_id", "left") ->join("user u", "u.user_id = er.subscriber", "left") ->join('event_type et', 'et.event_type_id = e.event_type_id',"left") ->join('event_email_template eet', 'eet.email_tpl_id = eer.email_tpl_id',"left") ->join('event_email_recipient_other_detail eerod', 'eerod.email_recipient_id = eer.email_recipient_id', "left") ->join('event_file_attachment efa', 'efa.event_id = e.event_id AND efa.status=1 AND efa.attachment_type =1', "left") ->where("eer.email_recipient_id", $email_recipient_id) ->where("eerod.email_recipient_id = eer.email_recipient_id") ->group_by("eer.event_schedule_id") ->get(); if($result->num_rows() > 0){ return $result->row(); } return false; } public function list_places_schedule($event_id, $event_schedule_id, $subscriber){ $result= $this->db->select('*') ->from('event_registration') ->where('event_schedule_id',$event_schedule_id) ->where('subscriber',$subscriber) ->where('status',1) ->get(); return $result->result(); } /* Check if can still reserve more than 1 date per event schedule? */ public function count_all_user_registration_per_event($event_id, $user_id){ $result = $this->db->select('COUNT(er.status) as total_registration', FALSE) ->from('event_registration er') ->join('event_schedule es', 'es.event_schedule_id = er.event_schedule_id', 'left') ->where('es.event_id', $event_id) ->where('es.event_status !=', 'CANCEL') ->where_in('es.back_office_status', array(2,3)) ->where('er.subscriber', $user_id) ->where('er.status !=', 0) ->order_by('er.date_time', 'DESC') ->get() ->row(); if($result){ return $result->total_registration; } return 0; } public function count_total_reserved_seats($event_id) { $this->db->select_sum('number_of_guest'); $this->db->from('event_registration'); $this->db->where('event_id', $event_id); $this->db->where('status', 1); $this->db->count_all(); $query=$this->db->get(); if(!empty($query->row()->number_of_guest)) return $query->row()->number_of_guest; else return 0; } public function count_total_reserved_seats_by_subscriber($subscriber_id, $event_id) { $this->db->select_sum('number_of_guest'); $this->db->from('event_registration'); $this->db->where('subscriber', $subscriber_id); $this->db->where('event_id', $event_id); $this->db->where('status', 1); $this->db->count_all(); $query=$this->db->get(); if(!empty($query->row()->number_of_guest)) return $query->row()->number_of_guest; else return 0; } public function cancel_event_registration($registration_id) { $subscriber = $this->get_subscriber($registration_id); $subscriber->number_of_guest -= 1; $this->db->set('number_of_guest',$subscriber->number_of_guest); if($subscriber->number_of_guest == 0) { $this->db->set('status', 0); } $this->db->where('registration_id', $registration_id); $update = $this->db->update("event_registration"); if($update){ $this->update_event_remaining_seats($subscriber->event_id); return true; } return false; } private function get_subscriber($registration_id) { $this->db->select('*'); $this->db->where('registration_id', $registration_id); return $this->db->get('event_registration')->row(); } private function update_event_remaining_seats($event_id) { $query = $this->db->select() ->from('event') ->where('event_id', $event_id) ->get_compiled_select(); $data = $this->db->query("$query FOR UPDATE")->row(); $this->db->set('remaining_combined_seat', $data->remaining_combined_seat + 1); $this->db->where('event_id', $data->event_id)->update('event'); } public function get_subscribers() { $this->db->select('*'); return $this->db->get('event_registration')->result(); } public function is_subscribed($user_id, $event_id, $email = "") { $list = <<db->query("select * from event_registration where subscriber = ? and event_id = ? and status = ? limit 1 ", array($user_id, $event_id, 1))->row(); } public function is_subscribed_in_atelier_distance($user_id, $event_id) { return $this->db->query("select * from event_registration where subscriber = ? and event_id = ? and status = ? and workshop_session=? and registration_type=? or workshop_session=? limit 1 ", array($user_id, $event_id, 1, 'DISTANCE-PRESENTIEL', 'soir-distance', 'DISTANCE'))->row(); } public function update_expiring_video_reservation() { $this->db->set('is_expired', 0); $this->db->where("DATEDIFF(NOW(), date_time)>", VIDEO_EXPIRATION); //365 $this->db->where('is_expired', 1); $this->db->where('workshop_session', 'ENLIGNE'); $this->db->update('event_registration'); return $this->update_expiring_atelier_distance_reservation(); } private function update_expiring_atelier_distance_reservation() { $this->db->set('is_expired', 0); $this->db->where("DATEDIFF(NOW(), date_time)>", VIDEO_EXPIRATION); //365 $this->db->where('is_expired', 1); $this->db->where('registration_type', 'soir-distance'); $this->db->where('workshop_session', 'DISTANCE-PRESENTIEL'); $this->db->or_where('workshop_session', 'DISTANCE'); return $this->db->update('event_registration'); } public function update_reservation_workshop_session($ws, $event_id) { $this->db->set('workshop_session', $ws); $this->db->where('event_id', $event_id); return $this->db->update('event_registration'); } public function save_ateriel_distance_subscriber($data) { $this->db->insert('event_distance_subscribers', array( 'event_id' => $data['event_id'], 'subscriber' => $data['user_id'], 'registration_id' => $data['registration_id'] )); } public function get_atelier_distance_subscribers() { $results = $this->db->select('event_id, live_video_start_date') ->from('event_videos') ->where('live_video_start_date IS NOT NULL') ->where("TIMESTAMPDIFF(MINUTE, NOW(), live_video_start_date) =", 120) ->get() ->result(); $events = array(); foreach($results as $result) { array_push($events, $result->event_id); } if(count($events) > 0) { return $this->db->select('*') ->select("e.title AS event_title", FALSE) ->select("CONCAT(u.first_name, CONCAT(' ', u.last_name)) AS subscriber", FALSE) ->select("u.first_name AS subs_prenom", FALSE) ->select("u.last_name AS subs_nom", FALSE) ->select("u.first_name AS subscriber_first_name", FALSE) ->select("u.last_name AS subscriber_last_name", FALSE) ->select("e.rate AS event_rate", FALSE) ->select("e.status AS event_status", FALSE) ->select("e.description as event_description", FALSE) ->select("e.start_date_time as event_start_date", FALSE) ->select("DAYNAME(e.start_date_time) AS event_start_day_name", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%e') AS event_start_day", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%m') AS event_start_month", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%M') AS event_start_month_name", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%Y') AS event_start_year", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%Hh%i') AS event_start_hour", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%Hh%i') AS start_date_hour", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%Hh%i') AS commencement_de_lheure", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%Y-%m-%e %H:%i:%s') AS event_start_date_time", FALSE) ->select("e.start_date_time AS date_complete", FALSE) ->from('event_distance_subscribers eds') ->join('event_registration er', 'er.registration_id = eds.registration_id AND er.status=1 AND er.is_expired=1', 'left') ->join('event e', 'e.event_id = eds.event_id', 'left') ->join('user u', 'u.user_id=eds.subscriber', 'left') ->where_in('eds.event_id', $events) ->get() ->result(); } return false; } /** * Retrieve subscribers by event id * This function was used in static workshop * do not use this in you method */ public function get_subscribers_by_event_id($event_ids) { /** 47 and 53 */ $results = $this->check_event_videos_schedules($event_ids); $events = array(); foreach($results as $result) { array_push($events, $result->event_id); } if(count($events) > 0) { return $this->db->select('*') ->select("e.title AS event_title", FALSE) ->select("CONCAT(u.first_name, CONCAT(' ', u.last_name)) AS subscriber", FALSE) ->select("u.first_name AS subs_prenom", FALSE) ->select("u.last_name AS subs_nom", FALSE) ->select("u.first_name AS subscriber_first_name", FALSE) ->select("u.last_name AS subscriber_last_name", FALSE) ->select("e.rate AS event_rate", FALSE) ->select("e.status AS event_status", FALSE) ->select("e.description as event_description", FALSE) ->select("e.start_date_time as event_start_date", FALSE) ->select("DAYNAME(e.start_date_time) AS event_start_day_name", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%e') AS event_start_day", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%m') AS event_start_month", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%M') AS event_start_month_name", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%Y') AS event_start_year", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%Hh%i') AS event_start_hour", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%Hh%i') AS start_date_hour", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%Hh%i') AS commencement_de_lheure", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%Y-%m-%e %H:%i:%s') AS event_start_date_time", FALSE) ->select("e.start_date_time AS date_complete", FALSE) ->from('event_registration er') ->join('event e', 'e.event_id = er.event_id', 'left') ->join('user u', 'u.user_id=er.subscriber', 'left') ->where('er.status',1) ->where_in('er.event_id', $events) ->get() ->result(); } return false; } /** * This method is used in statice event * Do not reuse this on your function * This contains defined video datetime */ private function check_event_videos_schedules($event_ids) { return $this->db->select('event_id, start_date_time') ->from('event_schedule') ->where('start_date_time IS NOT NULL') ->where_in('event_id', $event_ids) ->where("TIMESTAMPDIFF(MINUTE, NOW(), start_date_time) =", 1726) //1440 ->get() ->result(); } }