'desc'); // default order public function __construct() { parent::__construct(); $this->db->query("SET @@group_concat_max_len =30000"); } private function _get_export_query(){ return "SELECT es.start_date_time as start_date, es.end_date_time as end_date, e.location as event_venue, e.rate as price_rate, -- es.remaining_seat as num_remaining_places, -- es.total_available_seat as total_places_avl, (CASE WHEN e.seat_feature = 2 THEN 'COMBINE' ELSE \"\" END) as name_header_is_combine, (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE es.remaining_seat END) as num_remaining_places, (CASE WHEN e.seat_feature = 2 THEN e.total_combined_seat ELSE es.total_available_seat END) as total_places_avl, es.reservation_start_date as reservation_date, (CASE WHEN es.event_status = 'AVAILABLE' THEN 'Disponible' WHEN es.event_status = 'FULL' THEN 'Complet' ELSE 'Annulé' END) AS event_statuses, -- ecl.city as place_town, (CASE WHEN e.use_different_address_per_date = 1 THEN (CASE WHEN es.city_location IS NOT NULL THEN (SELECT Ecl.city FROM event_city_location Ecl WHERE Ecl.city_location_id = es.city_location AND Ecl.status =1) WHEN es.address IS NOT NULL THEN es.address WHEN es.city_name IS NOT NULL THEN es.city_name ELSE \"\" END) ELSE (CASE WHEN e.city_location IS NOT NULL THEN (SELECT Ecl.city FROM event_city_location Ecl WHERE Ecl.city_location_id = e.city_location AND Ecl.status =1) WHEN e.address IS NOT NULL THEN e.address WHEN e.city_name IS NOT NULL THEN e.city_name ELSE \"\" END) END)as place_town, CONCAT(IFNULL(DATE_FORMAT(es.start_date_time, '%e/%m/%Y') ,'00/00/0000'),' - ', IFNULL(DATE_FORMAT(es.end_date_time, '%e/%m/%Y') ,'00/00/0000')) AS date_month, CONCAT(IFNULL(DATE_FORMAT(es.start_date_time, '%Hh%i') ,'00h00'),' - ', IFNULL(DATE_FORMAT(es.end_date_time, '%Hh%i') ,'00h00')) AS hour "; } private function get_university_id_by_domain($domain) { $query = $this->db->select('id') ->from('user_cpay') ->where('domain', $domain) ->get(); if ($query->num_rows() > 0) { return $query->row()->id; } return null; } private function _get_event_list($where){ return "SELECT ".$this->add_to_custom_filter($where)." AS bostatus, (SELECT GROUP_CONCAT(CONCAT('{\"event_schedule_id\":\"',a.event_schedule_id, '\", \"reservation_start_date\":\"', ( CASE WHEN a.reservation_start_date IS NULL THEN \"\" ELSE DATE_FORMAT(a.reservation_start_date, '%e/%m/%Y %Hh%i') END), '\", \"start_date_time\":\"', (CASE WHEN a.start_date_time IS NULL THEN \"\" ELSE DATE_FORMAT(a.start_date_time, '%e/%m/%Y %Hh%i') END), '\", \"end_date_time\":\"', (CASE WHEN a.end_date_time IS NULL THEN \"\" ELSE DATE_FORMAT(a.end_date_time, '%e/%m/%Y %Hh%i') END), '\", \"total_available_seat\":\"', (CASE WHEN a.total_available_seat <= 0 THEN \"\" ELSE a.total_available_seat END), '\", \"remaining_seat\":\"', (CASE WHEN a.remaining_seat <=0 THEN \"\" ELSE a.remaining_seat END), '\", \"event_status\":\"',a.event_status, '\", \"event_url\":\"',(CASE WHEN a.event_url IS NULL THEN \"\" ELSE a.event_url END), '\", \"item_code\":\"',(CASE WHEN a.item_code IS NULL THEN \"\" ELSE a.item_code END), '\", \"seat_feature\":\"',e.seat_feature, '\", \"date_feature\":\"',e.date_feature, '\", \"back_office_status\":\"',a.back_office_status, '\", \"avl_seats\":\"',(CASE WHEN e.seat_feature = 2 THEN e.total_combined_seat ELSE a.total_available_seat END), '\", \"rem_seats\":\"',(CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE a.remaining_seat END), '\", \"reservation_end_date\":\"', (CASE WHEN a.reservation_end_date IS NULL THEN \"\" ELSE DATE_FORMAT(a.reservation_end_date, '%e/%m/%Y %Hh%i') END), '\", \"city_location\":\"', (CASE WHEN e.use_different_address_per_date = 1 THEN (CASE WHEN a.city_location IS NULL THEN \"\" ELSE a.city_location END) ELSE \"\" END), '\", \"location\":\"', (CASE WHEN e.use_different_address_per_date = 1 THEN (CASE WHEN a.location IS NULL THEN \"\" ELSE a.location END) ELSE \"\" END), '\", \"address\":\"', (CASE WHEN e.use_different_address_per_date = 1 THEN (CASE WHEN a.address IS NULL THEN \"\" ELSE a.address END) ELSE \"\" END), '\", \"code_postal\":\"', (CASE WHEN e.use_different_address_per_date = 1 THEN (CASE WHEN a.code_postal IS NULL THEN \"\" ELSE a.code_postal END) ELSE \"\" END), '\", \"city_name\":\"', (CASE WHEN e.use_different_address_per_date = 1 THEN (CASE WHEN a.city_name IS NULL THEN \"\" ELSE a.city_name END) ELSE \"\" END), '\", \"seats_per_subscriber\":\"', (CASE WHEN a.seats_per_subscriber <=0 THEN \"\" ELSE a.seats_per_subscriber END), '\", \"rem_wl_seats\":\"', (CASE WHEN a.quota_waiting_list_seat <=0 THEN \"\" ELSE a.quota_waiting_list_seat END), '\", \"avl_wl_seats\":\"', (CASE WHEN a.total_quota_waiting_list_seat <=0 THEN \"\" ELSE a.total_quota_waiting_list_seat END), '\", \"total_quota_waiting_list_seat\":\"', (CASE WHEN a.total_quota_waiting_list_seat <=0 THEN \"\" ELSE a.total_quota_waiting_list_seat END),'\"}' ) ORDER BY (CASE WHEN (a.back_office_status = 2 AND a.event_status ='AVAILABLE' AND (CASE WHEN e.seat_feature = 2 THEN (CASE WHEN e.remaining_combined_seat >0 && e.remaining_combined_seat IS NOT NULL THEN e.remaining_combined_seat ELSE 0 END) ELSE (CASE WHEN a.remaining_seat >0 && a.remaining_seat IS NOT NULL THEN a.remaining_seat ELSE 0 END) END) >0) THEN CONCAT('aa_',a.start_date_time,'_',a.event_schedule_id,'_') WHEN ((a.back_office_status = 2 OR a.back_office_status = 3) AND (a.event_status ='FULL' OR a.event_status ='AVAILABLE') AND (CASE WHEN e.seat_feature = 2 THEN (CASE WHEN e.remaining_combined_seat >0 && e.remaining_combined_seat IS NOT NULL THEN e.remaining_combined_seat ELSE 0 END) ELSE (CASE WHEN a.remaining_seat >0 && a.remaining_seat IS NOT NULL THEN a.remaining_seat ELSE 0 END) END)=0 AND a.quota_waiting_list_seat > 0) THEN CONCAT('ab_',a.start_date_time,'_',a.event_schedule_id,'_') WHEN a.back_office_status = 1 THEN CONCAT('ac_',a.start_date_time,'_',a.event_schedule_id,'_') WHEN (a.back_office_status = 3 AND (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE a.remaining_seat END)=0 AND a.quota_waiting_list_seat > 0) THEN CONCAT('ad_',a.start_date_time,'_',a.event_schedule_id,'_') WHEN ((a.back_office_status = 2 OR a.back_office_status = 3) AND a.event_status ='FULL' AND (CASE WHEN e.seat_feature = 2 THEN (CASE WHEN e.remaining_combined_seat >0 && e.remaining_combined_seat IS NOT NULL THEN e.remaining_combined_seat ELSE 0 END) ELSE (CASE WHEN a.remaining_seat >0 && a.remaining_seat IS NOT NULL THEN a.remaining_seat ELSE 0 END) END)=0 AND a.quota_waiting_list_seat = 0) THEN CONCAT('ae_',a.start_date_time,'_',a.event_schedule_id,'_') WHEN a.back_office_status = 7 THEN CONCAT('b_',a.start_date_time,'_',a.event_schedule_id,'_') WHEN a.back_office_status = 4 THEN CONCAT('c_',a.start_date_time,'_',a.event_schedule_id,'_') ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_') END) ASC, a.start_date_time ASC SEPARATOR ',') as child_events FROM event_schedule a WHERE a.event_id = e.event_id ".$where." AND a.back_office_status NOT IN (6) ) AS event_schedule, ecl.city as city"; } private function _get_datatables_query($data_source, $export=0, $event_schedule_id=0){ $_query = ""; $where = ""; $_search = ""; $_ordey_by = ""; $data = array(); $select = ""; $_group_by=""; if ($export) { $_query = $this->_get_export_query(); } else { // $domain = $_SERVER['HTTP_HOST']; // $university_id = (int) $this->get_university_id_by_domain($domain); $where = $this->filter_by_event_schedule($data_source, "city_location_id"); $where .= $this->filter_by_event_schedule($data_source, "back_office_status"); $where .= $this->filter_by_event_schedule($data_source, "event_status"); $where .= $this->filter_by_event_schedule($data_source, "start_date_time"); $_query = $this->_get_event_list($where); } $_query .=", es.event_status, e.event_category, e.event_id, e.use_different_address_per_date, e.title as event_title, et.event_type, e.description, e.workshop_session, DATE_FORMAT(e.date_created, '%e/%m/%Y %Hh%i') AS date_created, CONCAT(u.first_name, ' ', u.last_name) as author FROM event e LEFT JOIN event_schedule es ON es.event_id = e.event_id LEFT JOIN event_type et ON et.event_type_id = e.event_type_id LEFT JOIN event_city_location ecl ON ecl.city_location_id = e.city_location LEFT JOIN user u ON u.user_id = e.author WHERE e.status IN (1) "; if($event_schedule_id > 0) { $_query .= " AND es.back_office_status NOT IN(6) AND es.event_schedule_id = ".$this->db->escape($event_schedule_id); } if(isset($data_source["custom_filter_search"]) && !empty($data_source["custom_filter_search"]) && $data_source["custom_filter_search"] != "all"){ if($data_source["custom_filter_search"] == "start_date_time"){ $splitte = explode("/", $data_source['search']['value']); array_push($data, "%".$splitte[1]."-".$splitte[0]."%"); // echo $splitte[1]."-".$splitte[0]; $_search .= " AND ".$this->add_to_custom_filter($where)." IS NOT NULL AND ( es.start_date_time LIKE ? "; } else if($data_source["custom_filter_search"] == "back_office_status"){ array_push($data, "%".$data_source['search']['value']."%"); $_search .= " AND ( e.title LIKE ? "; if(!empty($data_source["filter_by_back_office_status"]) && isset($data_source["filter_by_back_office_status"])) { array_push($data, $data_source[$data_source["keyname"]]); $_search .= ") AND ( es." . $data_source["custom_filter_search"]." = ? "; } } else if($data_source["custom_filter_search"] == "event_status"){ array_push($data, "%".$data_source['search']['value']."%"); $_search .= " AND ( e.title LIKE ? "; if(!empty($data_source["filter_by_event_status"]) && isset($data_source["filter_by_event_status"])) { array_push($data, $data_source[$data_source["keyname"]]); $_search .= ") AND ( es." . $data_source["custom_filter_search"]." = ? "; } }else if($data_source["custom_filter_search"] == "city_location"){ array_push($data, "%".$data_source['search']['value']."%"); $_search .= " AND ( e.title LIKE ? "; if(!empty($data_source["filter_by_city_location_id"]) && isset($data_source["filter_by_city_location_id"])) { array_push($data, $data_source[$data_source["keyname"]]); array_push($data, $data_source[$data_source["keyname"]]); $_search .= ") AND (CASE WHEN e.use_different_address_per_date =0 THEN (e.city_location = ? OR e.city_location IS NULL OR e.city_location = 0) ELSE (es.city_location = ? OR es.city_location IS NULL OR es.city_location =0) END"; } } else { if (isset($data_source["keyname"]) && !empty($data_source["keyname"])) { if($data_source[$data_source["keyname"]] != "") { $_query .= " AND e.".$this->db->escape_str($data_source["custom_filter_search"])." = '".$this->db->escape_str($data_source[$data_source["keyname"]])."'"; } array_push($data, "%".$data_source['search']['value']."%"); $_search .= " AND ( e.title LIKE ? "; } else { array_push($data, "%".$data_source['search']['value']."%"); $_search .= " AND ( e." . $this->db->escape_str($data_source["custom_filter_search"])." LIKE ? "; } } $_search .= ")"; } else { if($data_source['search']['value']) { $i = 0; foreach ($this->column_search as $item) {// loop column if($i===0){ // first loop array_push($data, "%".$data_source['search']['value']."%"); $_search .= " AND ( ".$item." LIKE ? "; } else { array_push($data, "%".$data_source['search']['value']."%"); $_search .= " OR ".$item." LIKE ? "; } $i++; } $_search .= ")"; } } if($export<=0) { // group by event_id $_group_by .=" GROUP BY e.event_id "; // $_ordey_by .= " ORDER BY bostatus ASC "; } if(isset($data_source['order']) && !empty($data_source['order'])) { // here order processing if(isset($data_source['order']['0']['dir']) && !empty($data_source['order']['0']['dir'])) { if(isset($this->column_order[$data_source['order']['0']['column']])) $_ordey_by .= " ORDER BY ".$this->column_order[$data_source['order']['0']['column']]." ".$data_source['order']['0']['dir']; } else { $_ordey_by .= " ORDER BY ".key($this->order)." ".$this->order[key($this->order)]; } } else if(isset($this->order) && !empty($this->order)) { $_ordey_by .= " ORDER BY ".key($this->order)." ".$this->order[key($this->order)]; } if($export<=0) { $_ordey_by .= ($_ordey_by!="")?", ":" ORDER BY "; $_ordey_by .= " bostatus ASC "; } //echo $_query; return array("query"=>$_query.$_search.$_group_by.$_ordey_by, "data" =>$data); } public function get_events_list_export($data_source, $export, $event_schedule_id){ $_query = $this->_get_datatables_query($data_source, $export, $event_schedule_id); return $this->db->query($_query["query"], $_query["data"])->result(); } public function get_datatables($data_source, $export, $event_schedule_id){ $_query = $this->_get_datatables_query($data_source, $export, $event_schedule_id); //echo $_query["query"]; if($data_source['length'] != -1){ $_query["query"] .= " LIMIT ".$this->db->escape_str($data_source['start']).", ".$this->db->escape_str($data_source['length']); } return $this->db->query($_query["query"], $_query["data"])->result(); } public function count_filtered($data_source, $export, $event_schedule_id){ $_query = $this->_get_datatables_query($data_source, $export, $event_schedule_id); return $this->db->query($_query["query"], $_query["data"])->num_rows(); } public function count_all($data_source, $export, $event_schedule_id){ $_query = $this->_get_datatables_query($data_source, $export, $event_schedule_id); return $this->db->query($_query["query"], $_query["data"])->num_rows(); } private function filter_by_event_schedule($data_source, $filter){ if(isset($data_source["custom_filter_search"]) && !empty($data_source["custom_filter_search"]) && $data_source["custom_filter_search"] != "all"){ switch($filter){ case "back_office_status" : if(!empty($data_source["filter_by_".$filter]) && isset($data_source["filter_by_".$filter])) { return "AND a.back_office_status = ".$this->db->escape($data_source[$data_source["keyname"]])." "; } break; case "event_status" : if(!empty($data_source["filter_by_".$filter]) && isset($data_source["filter_by_".$filter])) { return "AND a.event_status = '".$this->db->escape_str($data_source[$data_source["keyname"]])."' "; } break; case "city_location_id" : if(!empty($data_source["filter_by_".$filter]) && isset($data_source["filter_by_".$filter])) { return " AND (a.city_location = '".$this->db->escape_str($data_source[$data_source["keyname"]])."' OR a.city_location IS NULL OR a.city_location =0) "; } break; case "start_date_time" : if(!empty($data_source["custom_filter_search"]) && isset($data_source["custom_filter_search"]) && $data_source["custom_filter_search"] == "start_date_time"){ $splitte = explode("/", $data_source['search']['value']); return " AND a.start_date_time LIKE '%".$this->db->escape_like_str($splitte[1]."-".$splitte[0])."%' ESCAPE '!' "; } break; default: return " "; break; } //end of switch return " "; } } private function add_to_custom_filter($where){ return "(SELECT GROUP_CONCAT(CONCAT( CASE -- Coming soon -- WHEN (a.back_office_status = 0) THEN CONCAT('aa_',a.start_date_time,'_',a.event_schedule_id,'_') -- Normal Reservation -- WHEN ( a.back_office_status = 2 AND a.event_status ='AVAILABLE' AND ( ( e.event_category = 'ONLINE_EVENT' AND a.start_date_time < NOW() ) OR ( (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE a.remaining_seat END) >0 ) ) ) THEN CONCAT('ab_',a.start_date_time,'_',a.event_schedule_id,'_') -- Waiting List -- WHEN ( a.back_office_status = 2 AND (a.event_status ='FULL' OR a.event_status ='AVAILABLE' ) AND e.event_category <> 'ONLINE_EVENT' AND (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE a.remaining_seat END)>=0 AND a.quota_waiting_list_seat > 0 ) THEN CONCAT('ac_',a.start_date_time,'_',a.event_schedule_id,'_') -- cancelled but not yet passe single dates WHEN (a.event_status = 'CANCEL' && a.end_date_time IS NOT NULL) && ((SELECT date_feature FROM event WHERE event_id = a.event_id) = 1) && a.back_office_status NOT IN (1) THEN CASE WHEN a.end_date_time > NOW() THEN CONCAT('ad1_',a.start_date_time,'_',a.event_schedule_id,'_') ELSE CONCAT('e_',a.start_date_time,'_',a.event_schedule_id,'_') END WHEN (a.event_status = 'CANCEL' && a.start_date_time IS NOT NULL) && ((SELECT date_feature FROM event WHERE event_id = a.event_id) = 1) && a.back_office_status NOT IN (1) THEN CASE WHEN DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') > NOW() THEN CONCAT('ad1_',DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00'),'_',a.event_schedule_id,'_') ELSE CONCAT('e_',a.start_date_time,'_',a.event_schedule_id,'_') END -- cancelled but not yet passe multi dates WHEN (a.event_status = 'CANCEL' && a.end_date_time IS NOT NULL) && ((SELECT date_feature FROM event WHERE event_id = a.event_id) = 2) && a.back_office_status NOT IN (1) THEN CASE WHEN a.end_date_time > NOW() THEN CONCAT('ad2_',a.start_date_time,'_',a.event_schedule_id,'_') ELSE CONCAT('e_',a.start_date_time,'_',a.event_schedule_id,'_') END WHEN (a.event_status = 'CANCEL' && a.start_date_time IS NOT NULL) && ((SELECT date_feature FROM event WHERE event_id = a.event_id) = 2) && a.back_office_status NOT IN (1) THEN CASE WHEN DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') > NOW() THEN CONCAT('ad2_',DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00'),'_',a.event_schedule_id,'_') ELSE CONCAT('e_',a.start_date_time,'_',a.event_schedule_id,'_') END -- Coming soon (Regular Event)-- WHEN a.back_office_status = 1 AND e.event_category <> 'ONLINE_EVENT' THEN CONCAT('ag_',a.start_date_time,'_',a.event_schedule_id,'_') -- Coming soon (Online Event) -- WHEN (a.back_office_status = 1 OR a.back_office_status = 2) AND a.start_date_time >= NOW() AND e.event_category = 'ONLINE_EVENT' THEN CONCAT('ag_',a.start_date_time,'_',a.event_schedule_id,'_') -- Coming soon -- WHEN a.back_office_status = 1 THEN CONCAT('ag_',a.start_date_time,'_',a.event_schedule_id,'_') -- Complete (Regular Event) -- WHEN ( (a.back_office_status = 2 OR a.back_office_status = 3) AND a.event_status ='FULL' AND e.event_category <> 'ONLINE_EVENT' AND (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE a.remaining_seat END)>=0 AND a.quota_waiting_list_seat = 0 ) THEN CONCAT('af_',a.start_date_time,'_',a.event_schedule_id,'_') -- Complete (Online Event)-- WHEN ( (a.back_office_status = 2 OR a.back_office_status = 3) AND a.event_status ='FULL' AND e.event_category = 'ONLINE_EVENT' ) THEN CONCAT('af_',a.start_date_time,'_',a.event_schedule_id,'_') -- Locked -- WHEN a.back_office_status = 3 THEN CONCAT('ae_',a.start_date_time,'_',a.event_schedule_id,'_') -- Terminee -- WHEN a.back_office_status = 7 THEN CONCAT('b_',a.start_date_time,'_',a.event_schedule_id,'_') -- Passe -- WHEN a.back_office_status = 4 THEN CONCAT('c_',a.start_date_time,'_',a.event_schedule_id,'_') -- Archived -- ELSE CONCAT('e_',a.start_date_time,'_',a.event_schedule_id,'_') END ) ORDER BY (CASE -- Normal Reservation -- WHEN ( a.back_office_status = 2 AND a.event_status ='AVAILABLE' AND ( ( e.event_category = 'ONLINE_EVENT' AND a.start_date_time < NOW() ) OR ( (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE a.remaining_seat END) > 0 ) ) ) THEN CONCAT('aa_',a.start_date_time,'_',a.event_schedule_id,'_') -- Waiting List -- WHEN ( a.back_office_status = 2 AND (a.event_status ='FULL' OR a.event_status ='AVAILABLE' ) AND e.event_category <> 'ONLINE_EVENT' AND (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE a.remaining_seat END)>=0 AND a.quota_waiting_list_seat > 0 ) THEN CONCAT('ab_',a.start_date_time,'_',a.event_schedule_id,'_') -- cancelled but not yet passe single dates WHEN a.event_status = 'CANCEL' && a.end_date_time IS NOT NULL && ((SELECT date_feature FROM event WHERE event_id = a.event_id) = 1) && a.back_office_status NOT IN (1) THEN CASE WHEN a.end_date_time > NOW() THEN CONCAT('aba1_',a.start_date_time,'_',a.event_schedule_id,'_') ELSE CONCAT('e_',a.start_date_time,'_',a.event_schedule_id,'_') END WHEN a.event_status = 'CANCEL' && a.start_date_time IS NOT NULL && ((SELECT date_feature FROM event WHERE event_id = a.event_id) = 1) && a.back_office_status NOT IN (1) THEN CASE WHEN DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') > NOW() THEN CONCAT('aba1_',DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00'),'_',a.event_schedule_id,'_') ELSE CONCAT('e_',a.start_date_time,'_',a.event_schedule_id,'_') END -- cancelled but not yet passe multi dates WHEN a.event_status = 'CANCEL' && a.end_date_time IS NOT NULL && ((SELECT date_feature FROM event WHERE event_id = a.event_id) = 2) && a.back_office_status NOT IN (1) THEN CASE WHEN a.end_date_time > NOW() THEN CONCAT('aba2_',a.start_date_time,'_',a.event_schedule_id,'_') ELSE CONCAT('e_',a.start_date_time,'_',a.event_schedule_id,'_') END WHEN a.event_status = 'CANCEL' && a.start_date_time IS NOT NULL && ((SELECT date_feature FROM event WHERE event_id = a.event_id) = 2) && a.back_office_status NOT IN (1) THEN CASE WHEN DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') > NOW() THEN CONCAT('aba2_',DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00'),'_',a.event_schedule_id,'_') ELSE CONCAT('e_',a.start_date_time,'_',a.event_schedule_id,'_') END -- Coming soon (Regular Event)-- WHEN a.back_office_status = 1 AND e.event_category <> 'ONLINE_EVENT' THEN CONCAT('ae_',a.start_date_time,'_',a.event_schedule_id,'_') -- Coming soon (Online Event) -- WHEN (a.back_office_status = 1 OR a.back_office_status = 2) AND a.start_date_time >= NOW() AND e.event_category = 'ONLINE_EVENT' THEN CONCAT('ae_',a.start_date_time,'_',a.event_schedule_id,'_') -- Complete -- WHEN ( (a.back_office_status = 2 OR a.back_office_status = 3) AND a.event_status ='FULL' AND e.event_category <> 'ONLINE_EVENT' AND (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE a.remaining_seat END)>=0 AND a.quota_waiting_list_seat = 0 ) THEN CONCAT('ac_',a.start_date_time,'_',a.event_schedule_id,'_') -- Complete (Online Event) -- WHEN ( (a.back_office_status = 2 OR a.back_office_status = 3) AND a.event_status ='FULL' AND e.event_category = 'ONLINE_EVENT' ) THEN CONCAT('ac_',a.start_date_time,'_',a.event_schedule_id,'_') -- Locked -- WHEN a.back_office_status = 3 THEN CONCAT('ae_',a.start_date_time,'_',a.event_schedule_id,'_') -- Terminee -- WHEN a.back_office_status = 7 THEN CONCAT('b_',a.start_date_time,'_',a.event_schedule_id,'_') -- Passe -- WHEN a.back_office_status = 4 THEN CONCAT('c_',a.start_date_time,'_',a.event_schedule_id,'_') -- Archived -- ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_') END) ASC, a.start_date_time ASC SEPARATOR '') as bostatus FROM event_schedule a WHERE a.event_id = e.event_id ".$where." AND a.back_office_status NOT IN (6) )"; } /* * @method get total reservations, available reservations etc. */ private function _get_my_reservations_info($user_id, $res_type = 0, $btype = 1) { if ($res_type == 1) { // My Reservation In History //0,6,3,1,2 $and_ = " AND (es.back_office_status NOT IN(0,6,3,1,2,7) AND es.event_status != 'CANCEL') AND e.status = 1 "; } else { $and_ = " AND es.back_office_status NOT IN(0,5,6,4) AND e.status = 1"; } // booking list switch ($btype) { case 1: // Normal Reservation $select = "SUM(err.number_of_guest+1) total_res, COUNT(DISTINCT es.event_schedule_id) nr_total_events"; $join = "LEFT JOIN event_registration err ON err.event_schedule_id = es.event_schedule_id"; $and_user = "AND err.subscriber = $user_id AND err.status = 1"; break; case 2: // Waitinglist Reservation $select = "SUM(erw.number_of_places) total_wres, COUNT(DISTINCT e.event_id) wl_total_events"; $join = "LEFT JOIN event_wait_list erw ON erw.event_schedule_id = es.event_schedule_id"; $and_user = "AND erw.wait_list_subscriber = $user_id AND erw.status = 1"; break; default: // Historique Reservation $select = "COUNT(DISTINCT es.event_schedule_id) mh_total_events, es.event_schedule_id as hevent"; $join = " LEFT JOIN event_registration err ON err.event_schedule_id = es.event_schedule_id"; $and_user = "AND ((err.subscriber = $user_id AND err.status = 1) )"; /* Removed WL in My Reservation Historique $join .= " LEFT JOIN event_wait_list erw ON erw.event_schedule_id = es.event_schedule_id"; || (erw.wait_list_subscriber = $user_id AND erw.status = 1) */ break; } $this->load->model("event_schedule_model"); return "SELECT $select FROM event e LEFT JOIN event_schedule es ON es.event_id = e.event_id $join LEFT JOIN event_type et ON e.event_type_id = et.event_type_id LEFT JOIN event_file_attachment efa ON e.event_id = efa.event_id WHERE efa.attachment_type = 1 AND efa.status = 1 $and_user $and_ "; } private function _get_my_reservations_winfo($user_id, $res_type = 0) { if ($res_type) { $and_ = " AND es.back_office_status NOT IN(0,5,6,1,2) AND e.status = 1 "; } else { $and_ = " AND es.back_office_status NOT IN(0,5,6,3,7,4) AND e.status = 1 AND es.event_status != 'CANCEL'"; } $this->load->model("event_schedule_model"); return "SELECT SUM(err.number_of_guest)+1, e.event_id, efa.file_name, e.title, et.event_type, e.description, es.event_status,e.date_feature, e.city_name, (SELECT COUNT(event_schedule_id) FROM event_schedule esc WHERE event_id = es.event_id) AS event_count, (CASE WHEN es.event_status = 'CANCEL' THEN (SELECT COUNT(event_status) FROM event_schedule es WHERE es.event_status='CANCEL' AND es.event_id = e.event_id ) ELSE \"\" END) AS cancel_count, (CASE WHEN e.is_favorite = 1 THEN (SELECT fl.image FROM frontoffice_logo fl WHERE fl.status =1 ) ELSE \"\" END) as event_favorite, (SELECT GROUP_CONCAT(CONCAT( CASE ".$this->sort_mres_events_by($user_id, $res_type)." END ) ORDER BY (CASE ".$this->sort_mres_events_by($user_id, $res_type)." END), a.start_date_time ASC SEPARATOR '#') as bostatus FROM event_schedule a WHERE a.event_id = e.event_id AND a.back_office_status NOT IN (0,5,6) LIMIT 1 ) AS bostatus ".$this->event_schedule_model->query_date()." FROM event e LEFT JOIN event_schedule es ON es.event_id = e.event_id LEFT JOIN event_registration err ON err.event_schedule_id = es.event_schedule_id LEFT JOIN event_wait_list erw ON erw.event_schedule_id = es.event_schedule_id LEFT JOIN event_type et ON e.event_type_id = et.event_type_id LEFT JOIN event_file_attachment efa ON e.event_id = efa.event_id WHERE efa.attachment_type = 1 AND efa.status = 1 AND ((err.subscriber = $user_id AND err.status = 1) || (erw.wait_list_subscriber = $user_id AND erw.status = 1)) "; } public function _get_preferences_query($user_id) { $subscriber_id = $this->db->select('subscriber_id') ->from('user_subscriber') ->where('subscriber', $user_id) ->get() ->row() ->subscriber_id; $preferences = $this->db->select('event_preference') ->from('user_subscriber_event_preference') ->where('subscriber_id', $subscriber_id) ->get() ->result_array(); $prefer = array(); foreach($preferences as $preference){ array_push($prefer, $preference['event_preference']); } return $prefer; } private function sort_mres_events_by($user_id, $res_type = 0){ if(isset($user_id) && !empty($user_id)){ $q_res = "-- Normal Reservation with reservation -- WHEN ( (a.back_office_status = 2 OR a.back_office_status = 3) AND (a.event_status ='AVAILABLE' OR a.event_status ='FULL') AND e.event_category <> 'ONLINE_EVENT' AND a.event_schedule_id IN( SELECT er.event_schedule_id FROM event_registration er LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE er.subscriber = '$user_id' AND ess.event_status != 'CANCEL' AND ets.event_id = a.event_id AND er.status =1 ) ) THEN CONCAT('abd_',a.start_date_time,'_',a.event_schedule_id,'_')"; $q_wl = "-- Waiting list with reservation -- WHEN ((a.back_office_status = 2 OR a.back_office_status = 3) AND (a.event_status ='FULL' OR a.event_status ='AVAILABLE') AND e.event_category <> 'ONLINE_EVENT' AND a.event_schedule_id IN( SELECT ewl.event_schedule_id FROM event_wait_list ewl WHERE ewl.wait_list_subscriber = '$user_id' AND ewl.event_schedule_id = a.event_schedule_id AND ewl.status =1 ) ) THEN CONCAT('abe_',a.start_date_time,'_',a.event_schedule_id,'_')"; switch ($res_type) { case 1: /*GET HISTORY */ $q_part = "{$q_res} {$q_wl}"; break; case 2: /*GET WAITLIST*/ $q_part = "{$q_wl}"; break; default: /*GET RESERVATIONS*/ $q_part = "{$q_res}"; break; } return "-- Normal Reservation (Reopened)-- WHEN ( a.back_office_status = 2 AND a.event_status ='AVAILABLE' AND e.event_category <> 'ONLINE_EVENT' AND (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE a.remaining_seat END) > 0 AND '$user_id' NOT IN( SELECT er.subscriber FROM event_registration er LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE er.subscriber = '$user_id' AND ess.event_status != 'CANCEL' AND ets.event_id = a.event_id AND er.status =1 ) AND '$user_id' NOT IN( SELECT ewl.wait_list_subscriber FROM event_wait_list ewl LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE ewl.wait_list_subscriber = '$user_id' AND ess.event_status != 'CANCEL' AND ets.event_id = a.event_id AND ewl.status =1 ) AND ".$this->db->escape($user_id)." NOT IN( SELECT ewl.wait_list_subscriber FROM event_wait_list ewl LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE ewl.wait_list_subscriber = '$user_id' AND ess.event_status != 'CANCEL' AND ets.event_id = a.event_id AND ewl.status = 1 ) AND ".$this->db->escape($user_id)." NOT IN( SELECT er.subscriber FROM event_registration er LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE er.subscriber = ".$this->db->escape($user_id)." AND ess.event_status != 'CANCEL' AND ets.event_id = a.event_id AND er.status = 1 ) ) THEN CONCAT('aa_',a.start_date_time,'_',a.event_schedule_id,'_') -- Normal Reservation -- WHEN ( a.back_office_status = 2 AND a.event_status ='AVAILABLE' AND (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE a.remaining_seat END) > 0 AND e.event_category <> 'ONLINE_EVENT' AND '$user_id' NOT IN( SELECT er.subscriber FROM event_registration er LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE er.subscriber = '$user_id' AND ess.event_status != 'CANCEL' AND ets.event_id = a.event_id AND er.status =1 ) AND ".$this->db->escape($user_id)." NOT IN( SELECT ewl.wait_list_subscriber FROM event_wait_list ewl LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE ewl.wait_list_subscriber = ".$this->db->escape($user_id)." AND ess.event_status != 'CANCEL' AND ets.event_id = a.event_id AND ewl.status = 1 ) AND ".$this->db->escape($user_id)." NOT IN( SELECT er.subscriber FROM event_registration er LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE er.subscriber = ".$this->db->escape($user_id)." AND ess.event_status != 'CANCEL' AND ets.event_id = a.event_id AND er.status = 1 ) /* AND '$user_id' NOT IN( SELECT ewl.wait_list_subscriber FROM event_wait_list ewl LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE ewl.wait_list_subscriber = '$user_id' AND ets.event_id = a.event_id AND ewl.status =1 )*/ ) THEN CONCAT('ab_',a.start_date_time,'_',a.event_schedule_id,'_') -- Waiting list -- -- Events with remaining seats greater than zero and event status 'FULL' fall in this condition -- WHEN ( a.back_office_status = 2 AND (a.event_status ='AVAILABLE' OR a.event_status ='FULL') AND e.event_category <> 'ONLINE_EVENT' AND ( ( (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE a.remaining_seat END) <= 0 ) OR ( (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE a.remaining_seat END) > 0 AND a.event_status ='FULL' ) ) AND a.quota_waiting_list_seat > 0 AND '$user_id' NOT IN( SELECT ewl.wait_list_subscriber FROM event_wait_list ewl WHERE ewl.wait_list_subscriber = '$user_id' AND ewl.event_schedule_id = a.event_schedule_id AND ewl.status =1 ) AND '$user_id' NOT IN( SELECT er.subscriber FROM event_registration er LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE er.subscriber = '$user_id' AND ess.event_status != 'CANCEL' AND ets.event_id = a.event_id AND er.status =1 ) AND ".$this->db->escape($user_id)." NOT IN( SELECT ewl.wait_list_subscriber FROM event_wait_list ewl LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE ewl.wait_list_subscriber = ".$this->db->escape($user_id)." AND ess.event_status != 'CANCEL' AND ets.event_id = a.event_id AND ewl.status = 1 ) AND ".$this->db->escape($user_id)." NOT IN( SELECT er.subscriber FROM event_registration er LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE er.subscriber = ".$this->db->escape($user_id)." AND ess.event_status != 'CANCEL' AND ets.event_id = a.event_id AND er.status = 1 ) ) THEN CONCAT('abc_',a.start_date_time,'_',a.event_schedule_id,'_') {$q_part} -- cancelled but not yet passe single dates WHEN (a.event_status = 'CANCEL' && a.end_date_time IS NOT NULL) && ((SELECT date_feature FROM event WHERE event_id = a.event_id) = 1) THEN CASE WHEN a.end_date_time > NOW() THEN CONCAT('abf1_',a.start_date_time,'_',a.event_schedule_id,'_') ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_') END WHEN (a.event_status = 'CANCEL' && a.start_date_time IS NOT NULL) && ((SELECT date_feature FROM event WHERE event_id = a.event_id) = 1) THEN CASE WHEN DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') > NOW() THEN CONCAT('abf1_',DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00'),'_',a.event_schedule_id,'_') ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_') END -- cancelled but not yet passe multi dates WHEN (a.event_status = 'CANCEL' && a.end_date_time IS NOT NULL) && ((SELECT date_feature FROM event WHERE event_id = a.event_id) = 2) THEN CASE WHEN a.end_date_time > NOW() THEN CONCAT('abf2_',a.start_date_time,'_',a.event_schedule_id,'_') ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_') END WHEN (a.event_status = 'CANCEL' && a.start_date_time IS NOT NULL) && ((SELECT date_feature FROM event WHERE event_id = a.event_id) = 2) THEN CASE WHEN DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') > NOW() THEN CONCAT('abf2_',DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00'),'_',a.event_schedule_id,'_') ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_') END -- Coming soon -- WHEN ( a.back_office_status = 1 AND ( e.event_category = 'ONLINE_EVENT' OR ( '$user_id' NOT IN( SELECT er.subscriber FROM event_registration er LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE er.subscriber = '$user_id' AND ess.event_status != 'CANCEL' AND ets.event_id = a.event_id AND er.status =1 ) AND '$user_id' NOT IN( SELECT ewl.wait_list_subscriber FROM event_wait_list ewl LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE ewl.wait_list_subscriber = '$user_id' AND ess.event_status != 'CANCEL' AND ets.event_id = a.event_id AND ewl.status =1 ) ) ) ) THEN CONCAT('ad_',a.start_date_time,'_',a.event_schedule_id,'_') -- Event is FULL -- WHEN ( (a.back_office_status = 2 OR a.back_office_status = 3) AND a.event_status ='FULL' AND e.event_category <> 'ONLINE_EVENT' AND (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE a.remaining_seat END)>=0 AND a.quota_waiting_list_seat = 0 AND '$user_id' NOT IN( SELECT er.subscriber FROM event_registration er LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE er.subscriber = '$user_id' AND ess.event_status != 'CANCEL' AND ets.event_id = a.event_id AND er.status =1 ) AND '$user_id' NOT IN( SELECT ewl.wait_list_subscriber FROM event_wait_list ewl LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE ewl.wait_list_subscriber = '$user_id' AND ess.event_status != 'CANCEL' AND ets.event_id = a.event_id AND ewl.status =1 ) ) THEN CONCAT('ac_',a.start_date_time,'_',a.event_schedule_id,'_') WHEN a.back_office_status = 3 THEN CONCAT('ad_',a.start_date_time,'_',a.event_schedule_id,'_') WHEN a.back_office_status = 7 THEN CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_') WHEN a.back_office_status = 4 THEN CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_') ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_') "; } } private function _get_filter_query_mreservations($user_id, $res_type = 0, $search = "") { $wsearch = ""; if (!empty($search)) { $wsearch =" AND (e.title LIKE \"%{$search}%\" OR et.event_type LIKE \"%{$search}%\" OR (CASE WHEN e.use_different_address_per_date = 1 THEN (CASE WHEN es.city_location IS NULL THEN \"\" ELSE es.city_location END) ELSE (CASE WHEN e.city_location IS NULL THEN \"\" ELSE e.city_location END) END) IN (SELECT city_location_id FROM event_city_location WHERE status = 1 AND city LIKE \"%{$search}%\") )"; } switch ($res_type) { case 1: /*GET HISTORY */ $and_ = " AND ((err.subscriber = {$user_id} AND err.status = 1))" ." AND (es.back_office_status NOT IN(0,6,3,1,2,7) AND es.event_status != 'CANCEL') AND e.status = 1 "; $join_ = 'LEFT JOIN event_registration err ON err.event_schedule_id = es.event_schedule_id '; $order_ = ''; $subQueryWhere = 'AND a.back_office_status NOT IN (0,6,3,1,2,7)'; /* Removed WL in My Reservation Historique $join .= " LEFT JOIN event_wait_list erw ON erw.event_schedule_id = es.event_schedule_id"; || (erw.wait_list_subscriber = $user_id AND erw.status = 1) */ break; case 2: /*GET WAITLIST*/ $and_ = " AND (erw.wait_list_subscriber = $user_id AND erw.status = 1)" ." AND es.back_office_status NOT IN(0,5,6,4) AND e.status = 1"; $join_ = 'LEFT JOIN event_wait_list erw ON erw.event_schedule_id = es.event_schedule_id'; $subQueryWhere = 'AND a.back_office_status NOT IN (0,5,6,4)'; break; default: /*GET RESERVATIONS*/ $and_ = " AND (err.subscriber = $user_id AND err.status = 1)" ." AND es.back_office_status NOT IN(0,5,6,4) AND e.status = 1 "; $join_ = 'LEFT JOIN event_registration err ON err.event_schedule_id = es.event_schedule_id '; $subQueryWhere = 'AND a.back_office_status NOT IN (0,5,6,4)'; break; } $this->load->model("event_schedule_model"); return "SELECT es.event_schedule_id, e.event_id, efa.file_name, e.title, et.event_type, e.description, es.event_status,e.date_feature, e.city_name, (SELECT COUNT(event_schedule_id) FROM event_schedule esc WHERE event_id = es.event_id) AS event_count, (CASE WHEN es.event_status = 'CANCEL' THEN (SELECT COUNT(event_status) FROM event_schedule es WHERE es.event_status='CANCEL' AND es.event_id = e.event_id ) ELSE \"\" END) AS cancel_count, (CASE WHEN e.is_favorite = 1 THEN (SELECT fl.image FROM frontoffice_logo fl WHERE fl.status =1 ) ELSE \"\" END) as event_favorite, (SELECT GROUP_CONCAT(CONCAT( CASE ".$this->sort_mres_events_by($user_id, $res_type)." END ) ORDER BY (CASE ".$this->sort_mres_events_by($user_id, $res_type)." END), a.start_date_time ASC SEPARATOR '#') as bostatus FROM event_schedule a WHERE a.event_id = e.event_id ".$subQueryWhere." LIMIT 1 ) AS bostatus FROM event e LEFT JOIN event_schedule es ON es.event_id = e.event_id $join_ LEFT JOIN event_type et ON e.event_type_id = et.event_type_id LEFT JOIN event_file_attachment efa ON e.event_id = efa.event_id WHERE efa.attachment_type = 1 AND efa.status = 1 $and_ $wsearch "; } /* * get all user reservations, limit by 6 */ public function filter_event_reservations($filter, $page, $month, $type, $city, $user_id, $logged_in, $res_type = 0, $search = "") { $pages = $page*6-6; if($logged_in) $preferences = $this->_get_preferences_query($user_id); // // $user_id = ($logged_in)?$user_id:false; // echo $user_id; // Filter ------------------------------------------------------------------------ $query = $this->_get_filter_query_mreservations($user_id, $res_type, $search); //$query .= $this->_get_filter_type($filter, $month, $type, $city); // $query .= ' GROUP BY es.event_schedule_id ORDER BY bostatus ASC'; $query .= ' GROUP BY es.event_schedule_id ORDER BY SUBSTRING_INDEX(bostatus,"_",1) ASC, CASE WHEN SUBSTRING_INDEX(bostatus,"_",1) NOT IN("d") THEN SUBSTRING_INDEX(SUBSTRING_INDEX(bostatus,"_",2),"_",-1) END ASC, CASE WHEN SUBSTRING_INDEX(bostatus,"_",1) IN("d") THEN SUBSTRING_INDEX(SUBSTRING_INDEX(bostatus,"_",2),"_",-1) END DESC'; $query .= ' LIMIT '.(($pages > 0)?$pages:0).', 6'; $events = $this->db->query($query); // Pagination --------------------------------------------------------------------- $query = $this->_get_filter_query_mreservations($user_id, $res_type, $search); //$query .= $this->_get_filter_type($filter, $month, $type, $city); $query .= ' GROUP BY es.event_schedule_id ORDER BY SUBSTRING_INDEX(bostatus,"_",1) ASC, CASE WHEN SUBSTRING_INDEX(bostatus,"_",1) NOT IN("d") THEN SUBSTRING_INDEX(SUBSTRING_INDEX(bostatus,"_",2),"_",-1) END ASC, CASE WHEN SUBSTRING_INDEX(bostatus,"_",1) IN("d") THEN SUBSTRING_INDEX(SUBSTRING_INDEX(bostatus,"_",2),"_",-1) END DESC'; // if($logged_in) $this->db->where_in('e.event_type_id', $preferences); $pagination = $this->db->query($query); return array( 'data' => $events->result(), 'pagination' => ceil($pagination->num_rows()/6), 'result_count' => $events->num_rows(), 'logged_in' => $logged_in ); } /* * get user reservations for the current even */ public function get_reservations_info($filter, $page, $month, $type, $city, $user_id, $logged_in, $res_type = 0) { $this->load->model('event_moderation_model'); if($logged_in) $preferences = $this->_get_preferences_query($user_id); //normal reservations $bquery = $this->_get_my_reservations_info($user_id, 0, 1); $bquery .= $this->_get_filter_type($filter, $month, $type, $city); $booking = $this->db->query($bquery); //waitlist reservations $wquery = $this->_get_my_reservations_info($user_id, 2, 2); $wquery .= $this->_get_filter_type($filter, $month, $type, $city); $waitlist = $this->db->query($wquery); //number of events participated $hquery = $this->_get_my_reservations_info($user_id, 1, 3); $hquery .= $this->_get_filter_type($filter, $month, $type, $city); $hev_count = $this->db->query($hquery); $total_waitlist_active_res = $this->event_moderation_model->getNumberOfReservation(3, $user_id, true, 0, 0, [], false, true); // Total number of cancelled moderated events that the user is reserved $total_waitlist_active_cancel_res = $this->event_moderation_model->getNumberOfCancelledReservation(3, $user_id, true, 0, 0, [], false, true); // Total number of moderated events that the user is reserved $total_moderated_waitlist_res_events = $this->event_moderation_model->getNumberOfReservation(3, $user_id, false, 0); return array( 'normal_res' => $booking->result()[0]->total_res ?? 0, 'waitlist_res' => $waitlist->result()[0]->total_wres ?? 0, 'total_waitlist_active_res' => $total_waitlist_active_res ?? 0, 'total_waitlist_cancel_res' => $total_waitlist_active_cancel_res ?? 0, 'total_moderated_waitlist_res_events' => $total_moderated_waitlist_res_events ?? 0, 'nr_total_events' => $booking->result()[0]->nr_total_events ?? 0, 'wl_total_events' => $waitlist->result()[0]->wl_total_events ?? 0, 'mh_total_events' => $hev_count->result()[0]->mh_total_events ?? 0, 'logged_in' => $logged_in ); } private function sort_fo_events_by($user_id){ if ( isset($user_id) && !empty($user_id) ) { return "-- Normal Reservation (Reopened)-- WHEN ( a.back_office_status = 2 AND a.event_status ='AVAILABLE' AND ( ( e.event_category = 'ONLINE_EVENT' AND a.start_date_time < NOW() ) OR ( e.event_category <> 'ONLINE_EVENT' AND (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE a.remaining_seat END) > 0 AND ".$this->db->escape($user_id)." NOT IN( SELECT er.subscriber FROM event_registration er LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id WHERE er.subscriber = ".$this->db->escape($user_id)." AND ess.event_status != 'CANCEL' AND er.event_schedule_id = a.event_schedule_id AND ess.event_id = a.event_id AND ess.back_office_status NOT IN(4, 5, 7) AND er.status = 1 ) AND ".$this->db->escape($user_id)." NOT IN( SELECT er.subscriber FROM event_registration er LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id WHERE er.subscriber = ".$this->db->escape($user_id)." AND ess.event_status != 'CANCEL' AND ess.event_id = a.event_id AND ess.back_office_status NOT IN(4, 5, 7) AND er.status = 1 ) AND ( (".$this->db->escape($user_id)." NOT IN( SELECT ewl.wait_list_subscriber FROM event_wait_list ewl LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id WHERE ewl.wait_list_subscriber = ".$this->db->escape($user_id)." AND ess.event_status != 'CANCEL' AND ess.back_office_status NOT IN(4, 5, 7) AND ess.event_id = a.event_id AND ewl.status =1) ) OR (".$this->db->escape($user_id)." IN( SELECT ewl.wait_list_subscriber FROM event_wait_list ewl LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id WHERE ewl.wait_list_subscriber = ".$this->db->escape($user_id)." AND ess.event_status != 'CANCEL' AND ess.event_id = a.event_id AND ess.back_office_status NOT IN(4, 5, 7) AND ess.remaining_seat > 0 AND ewl.status =1) ) ) ) ) -- ENDOR -- ) THEN CONCAT('aa_',a.start_date_time,'_',a.event_schedule_id,'_') -- Normal Reservation -- WHEN ( a.back_office_status = 2 AND a.event_status ='AVAILABLE' AND e.event_category <> 'ONLINE_EVENT' AND (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE a.remaining_seat END) > 0 AND ".$this->db->escape($user_id)." NOT IN( SELECT er.subscriber FROM event_registration er LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE er.subscriber = ".$this->db->escape($user_id)." AND ess.event_status != 'CANCEL' AND er.event_schedule_id = a.event_schedule_id AND ess.back_office_status NOT IN(4, 5, 7) AND ets.event_id = a.event_id AND er.status = 1 ) AND ".$this->db->escape($user_id)." NOT IN( SELECT er.subscriber FROM event_registration er LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE er.subscriber = ".$this->db->escape($user_id)." AND ess.event_status != 'CANCEL' AND ess.back_office_status IN(3,4) AND ess.back_office_status NOT IN(7, 5) AND ets.event_id = a.event_id AND er.status = 1 ) /*AND ".$this->db->escape($user_id)." NOT IN( SELECT ewl.wait_list_subscriber FROM event_wait_list ewl LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE ewl.wait_list_subscriber = ".$this->db->escape($user_id)." AND ets.event_id = a.event_id AND ess.back_office_status NOT IN(4, 5, 7) AND ewl.status = 1 )*/ ) THEN CONCAT('ab_',a.start_date_time,'_',a.event_schedule_id,'_') -- Waiting list -- WHEN (a.back_office_status = 2 AND (a.event_status ='AVAILABLE' OR a.event_status ='FULL') AND e.event_category <> 'ONLINE_EVENT' AND (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE a.remaining_seat END) >= 0 AND a.quota_waiting_list_seat > 0 AND ".$this->db->escape($user_id)." NOT IN( SELECT ewl.wait_list_subscriber FROM event_wait_list ewl WHERE ewl.wait_list_subscriber = ".$this->db->escape($user_id)." AND ewl.event_schedule_id = a.event_schedule_id AND ewl.status = 1 ) AND ".$this->db->escape($user_id)." NOT IN( SELECT er.subscriber FROM event_registration er LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE er.subscriber = ".$this->db->escape($user_id)." AND ess.event_status != 'CANCEL' AND ets.event_id = a.event_id AND er.event_schedule_id = a.event_schedule_id AND ess.back_office_status NOT IN(4, 5, 7) AND er.status = 1 ) AND ".$this->db->escape($user_id)." NOT IN( SELECT ewl.wait_list_subscriber FROM event_wait_list ewl LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE ewl.wait_list_subscriber = ".$this->db->escape($user_id)." AND ess.event_status != 'CANCEL' AND ets.event_id = a.event_id AND ess.back_office_status NOT IN(4, 5, 7) AND ewl.status = 1 ) AND ".$this->db->escape($user_id)." NOT IN( SELECT er.subscriber FROM event_registration er LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE er.subscriber = ".$this->db->escape($user_id)." AND ess.event_status != 'CANCEL' AND ets.event_id = a.event_id AND ess.back_office_status NOT IN(4, 5, 7) AND er.status = 1 ) ) THEN CONCAT('abc_',a.start_date_time,'_',a.event_schedule_id,'_') -- Normal Reservation with reservation -- WHEN ( (a.back_office_status = 2 OR a.back_office_status = 3) AND (a.event_status ='AVAILABLE' OR a.event_status ='FULL') AND e.event_category <> 'ONLINE_EVENT' AND a.event_schedule_id IN( SELECT er.event_schedule_id FROM event_registration er LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE er.subscriber = ".$this->db->escape($user_id)." AND ess.event_status != 'CANCEL' AND ets.event_id = a.event_id AND er.event_schedule_id = a.event_schedule_id AND er.status = 1 ) ) THEN CONCAT('abd_',a.start_date_time,'_',a.event_schedule_id,'_') -- Waiting list with reservation -- -- Events with remaining seats greater than zero and event status 'FULL' fall in this condition -- WHEN ((a.back_office_status = 2 OR a.back_office_status = 3) AND (a.event_status ='FULL' OR a.event_status ='AVAILABLE') AND e.event_category <> 'ONLINE_EVENT' AND ( ( (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE a.remaining_seat END) <= 0 ) OR ( (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE a.remaining_seat END) > 0 AND a.event_status ='FULL' ) ) AND a.event_schedule_id IN( SELECT ewl.event_schedule_id FROM event_wait_list ewl WHERE ewl.wait_list_subscriber = ".$this->db->escape($user_id)." AND ewl.event_schedule_id = a.event_schedule_id AND ewl.status = 1 ) AND ".$this->db->escape($user_id)." NOT IN( SELECT er.subscriber FROM event_registration er LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE er.subscriber = ".$this->db->escape($user_id)." AND ess.event_status != 'CANCEL' AND ets.event_id = a.event_id AND er.event_schedule_id = a.event_schedule_id AND er.status = 1 ) ) THEN CONCAT('abe_',a.start_date_time,'_',a.event_schedule_id,'_') -- Cancelled but not yet passe single dates WHEN (a.event_status = 'CANCEL' && a.end_date_time IS NOT NULL) && ((SELECT date_feature FROM event WHERE event_id = a.event_id) = 1) THEN CASE WHEN a.end_date_time > NOW() THEN CONCAT('abf1_',a.start_date_time,'_',a.event_schedule_id,'_') ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_') END WHEN (a.event_status = 'CANCEL' && a.start_date_time IS NOT NULL) && ((SELECT date_feature FROM event WHERE event_id = a.event_id) = 1) THEN CASE WHEN DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') > NOW() THEN CONCAT('abf1_',DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00'),'_',a.event_schedule_id,'_') ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_') END -- Cancelled but not yet passe multi dates WHEN (a.event_status = 'CANCEL' && a.end_date_time IS NOT NULL) && ((SELECT date_feature FROM event WHERE event_id = a.event_id) = 2) THEN CASE -- This is when theres is complete event that is earlier that the cancelled event -- WHEN a.end_date_time > NOW() && ( SELECT COUNT(event_schedule_id) FROM event_schedule es_2021 WHERE es_2021.event_id = e.event_id AND a.start_date_time > es_2021.start_date_time AND ( ( es_2021.back_office_status = 2 OR es_2021.back_office_status = 3) AND ( es_2021.event_status ='AVAILABLE' OR es_2021.event_status ='FULL') AND (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE es_2021.remaining_seat END) >= 0 AND es_2021.quota_waiting_list_seat = 0 AND e.event_category <> 'ONLINE_EVENT' AND ".$this->db->escape($user_id)." NOT IN( SELECT er.subscriber FROM event_registration er LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE er.subscriber = ".$this->db->escape($user_id)." AND ess.event_status != 'CANCEL' AND er.event_schedule_id = es_2021.event_schedule_id AND ets.event_id = es_2021.event_id AND er.status = 1 ) AND ".$this->db->escape($user_id)." NOT IN( SELECT ewl.wait_list_subscriber FROM event_wait_list ewl LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE ewl.wait_list_subscriber = ".$this->db->escape($user_id)." AND ess.event_status != 'CANCEL' AND ets.event_id = es_2021.event_id AND ewl.event_schedule_id = es_2021.event_schedule_id AND ewl.status = 1 ) ) OR ( ( es_2021.back_office_status = 2 OR es_2021.back_office_status = 3) AND es_2021.event_status ='FULL' AND e.event_category = 'ONLINE_EVENT' ) ) > 0 THEN CONCAT('ac_',a.start_date_time,'_',a.event_schedule_id,'_') WHEN a.end_date_time > NOW() THEN CONCAT('abf2_',a.start_date_time,'_',a.event_schedule_id,'_') ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_') END WHEN (a.event_status = 'CANCEL' && a.start_date_time IS NOT NULL) && ((SELECT date_feature FROM event WHERE event_id = a.event_id) = 2) THEN CASE -- This is when theres is complete event that is earlier that the cancelled event -- WHEN DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') > NOW() && ( SELECT COUNT( es_2021.event_schedule_id) FROM event_schedule es_2021 WHERE es_2021.event_id = e.event_id AND a.start_date_time > es_2021.start_date_time AND ( ( es_2021.back_office_status = 2 OR es_2021.back_office_status = 3) AND ( es_2021.event_status ='AVAILABLE' OR es_2021.event_status ='FULL') AND (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE es_2021.remaining_seat END) >= 0 AND es_2021.quota_waiting_list_seat = 0 AND e.event_category <> 'ONLINE_EVENT' AND ".$this->db->escape($user_id)." NOT IN( SELECT er.subscriber FROM event_registration er LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE er.subscriber = ".$this->db->escape($user_id)." AND ess.event_status != 'CANCEL' AND er.event_schedule_id = es_2021.event_schedule_id AND ets.event_id = es_2021.event_id AND er.status = 1 ) AND ".$this->db->escape($user_id)." NOT IN( SELECT ewl.wait_list_subscriber FROM event_wait_list ewl LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE ewl.wait_list_subscriber = ".$this->db->escape($user_id)." AND ess.event_status != 'CANCEL' AND ets.event_id = es_2021.event_id AND ewl.event_schedule_id = es_2021.event_schedule_id AND ewl.status = 1 ) ) OR ( ( es_2021.back_office_status = 2 OR es_2021.back_office_status = 3) AND es_2021.event_status ='FULL' AND e.event_category = 'ONLINE_EVENT' ) ) > 0 THEN CONCAT('ac_',a.start_date_time,'_',a.event_schedule_id,'_') WHEN DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') > NOW() THEN CONCAT('abf2_',DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00'),'_',a.event_schedule_id,'_') ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_') END -- Coming soon -- WHEN ( a.back_office_status = 1 AND ( ( e.event_category = 'ONLINE_EVENT' AND a.start_date_time >= NOW() ) OR ( ".$this->db->escape($user_id)." NOT IN( SELECT er.subscriber FROM event_registration er LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE er.subscriber = ".$this->db->escape($user_id)." AND ess.event_status != 'CANCEL' AND ets.event_id = a.event_id AND er.event_schedule_id = a.event_schedule_id AND er.status = 1 ) AND ".$this->db->escape($user_id)." NOT IN( SELECT ewl.wait_list_subscriber FROM event_wait_list ewl LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE ewl.wait_list_subscriber = ".$this->db->escape($user_id)." AND ess.event_status != 'CANCEL' AND ets.event_id = a.event_id AND ewl.event_schedule_id = a.event_schedule_id AND ewl.status = 1 ) ) ) ) THEN CONCAT('ad_',a.start_date_time,'_',a.event_schedule_id,'_') -- Event is FULL OR COMPLETE (Regular Event) -- WHEN ( (a.back_office_status = 2 OR a.back_office_status = 3) AND (a.event_status ='AVAILABLE' OR a.event_status ='FULL') AND (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE a.remaining_seat END) >= 0 AND a.quota_waiting_list_seat = 0 AND e.event_category <> 'ONLINE_EVENT' AND ".$this->db->escape($user_id)." NOT IN( SELECT er.subscriber FROM event_registration er LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE er.subscriber = ".$this->db->escape($user_id)." AND ess.event_status != 'CANCEL' AND er.event_schedule_id = a.event_schedule_id AND ets.event_id = a.event_id AND er.status = 1 ) AND ".$this->db->escape($user_id)." NOT IN( SELECT ewl.wait_list_subscriber FROM event_wait_list ewl LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id LEFT JOIN event ets ON ets.event_id = ess.event_id WHERE ewl.wait_list_subscriber = ".$this->db->escape($user_id)." AND ess.event_status != 'CANCEL' AND ets.event_id = a.event_id AND ewl.event_schedule_id = a.event_schedule_id AND ewl.status = 1 ) ) THEN CONCAT('ac_',a.start_date_time,'_',a.event_schedule_id,'_') -- Event is FULL OR COMPLETE (Online Event) -- WHEN ( (a.back_office_status = 2 OR a.back_office_status = 3) AND a.event_status ='FULL' AND e.event_category = 'ONLINE_EVENT' ) THEN CONCAT('ac_',a.start_date_time,'_',a.event_schedule_id,'_') WHEN a.back_office_status = 3 THEN CONCAT('ad_',a.start_date_time,'_',a.event_schedule_id,'_') WHEN a.back_office_status = 7 THEN CONCAT('c_',a.start_date_time,'_',a.event_schedule_id,'_') WHEN a.back_office_status = 4 THEN CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_') ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_') "; } else { return "-- Normal Reservation -- WHEN ( a.back_office_status = 2 AND a.event_status = 'AVAILABLE' AND ( ( e.event_category = 'ONLINE_EVENT' AND a.start_date_time < NOW() ) OR ( e.event_category <> 'ONLINE_EVENT' AND (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE a.remaining_seat END) > 0 ) ) ) THEN CONCAT('aa_',a.start_date_time,'_',a.event_schedule_id,'_') -- Waiting List -- WHEN a.back_office_status = 2 AND (a.event_status ='FULL' OR a.event_status ='AVAILABLE' ) AND e.event_category <> 'ONLINE_EVENT' AND (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE a.remaining_seat END) >= 0 AND a.quota_waiting_list_seat > 0 THEN CONCAT('ab_',a.start_date_time,'_',a.event_schedule_id,'_') -- Cancelled but not yet passe single dates -- WHEN (a.event_status = 'CANCEL' && a.end_date_time IS NOT NULL) && ((SELECT date_feature FROM event WHERE event_id = a.event_id) = 1) THEN CASE WHEN a.end_date_time > NOW() THEN CONCAT('ac1_',a.start_date_time,'_',a.event_schedule_id,'_') ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_') END WHEN (a.event_status = 'CANCEL' && a.start_date_time IS NOT NULL) && ((SELECT date_feature FROM event WHERE event_id = a.event_id) = 1) THEN CASE WHEN DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') > NOW() THEN CONCAT('ac1_',DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00'),'_',a.event_schedule_id,'_') ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_') END -- Cancelled but not yet passe multi dates -- WHEN (a.event_status = 'CANCEL' && a.end_date_time IS NOT NULL) && ((SELECT date_feature FROM event WHERE event_id = a.event_id) = 2) THEN CASE -- This is when theres is complete event that is earlier that the cancelled event -- WHEN a.end_date_time > NOW() && ( SELECT COUNT(es_2021.event_schedule_id) FROM event_schedule es_2021 WHERE es_2021.event_id = e.event_id AND a.start_date_time > es_2021.start_date_time AND ( (es_2021.back_office_status = 2 OR es_2021.back_office_status = 3) AND (es_2021.event_status ='AVAILABLE' OR es_2021.event_status ='FULL') AND (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE es_2021.remaining_seat END) >= 0 AND es_2021.quota_waiting_list_seat = 0 AND e.event_category <> 'ONLINE_EVENT' ) OR ( (es_2021.back_office_status = 2 OR es_2021.back_office_status = 3) AND es_2021.event_status ='FULL' AND e.event_category = 'ONLINE_EVENT' ) ) > 0 THEN CONCAT('ad_',a.start_date_time,'_',a.event_schedule_id,'_') WHEN a.end_date_time > NOW() THEN CONCAT('ac2_',a.start_date_time,'_',a.event_schedule_id,'_') ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_') END WHEN (a.event_status = 'CANCEL' && a.start_date_time IS NOT NULL) && ((SELECT date_feature FROM event WHERE event_id = a.event_id) = 2) THEN CASE -- This is when theres is complete event that is earlier that the cancelled event -- WHEN DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') > NOW() && ( SELECT COUNT(event_schedule_id) FROM event_schedule es_2021 WHERE es_2021.event_id = e.event_id AND a.start_date_time > es_2021.start_date_time AND ( (es_2021.back_office_status = 2 OR es_2021.back_office_status = 3) AND (es_2021.event_status ='AVAILABLE' OR es_2021.event_status ='FULL') AND (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE es_2021.remaining_seat END) >= 0 AND es_2021.quota_waiting_list_seat = 0 AND e.event_category <> 'ONLINE_EVENT' ) OR ( (es_2021.back_office_status = 2 OR es_2021.back_office_status = 3) AND es_2021.event_status ='FULL' AND e.event_category = 'ONLINE_EVENT' ) ) > 0 THEN CONCAT('ad_',a.start_date_time,'_',a.event_schedule_id,'_') WHEN DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') > NOW() THEN CONCAT('ac2_',DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00'),'_',a.event_schedule_id,'_') ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_') END -- Coming soon (Regular Event)-- WHEN a.back_office_status = 1 AND e.event_category <> 'ONLINE_EVENT' THEN CONCAT('ae_',a.start_date_time,'_',a.event_schedule_id,'_') -- Coming soon (Online Event) -- WHEN (a.back_office_status = 1 OR a.back_office_status = 2) AND a.start_date_time >= NOW() AND e.event_category = 'ONLINE_EVENT' THEN CONCAT('ae_',a.start_date_time,'_',a.event_schedule_id,'_') -- Complete (Regular Event) -- WHEN ( (a.back_office_status = 2 OR a.back_office_status = 3) AND (a.event_status ='AVAILABLE' OR a.event_status ='FULL') AND (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE a.remaining_seat END) >= 0 AND a.quota_waiting_list_seat = 0 AND e.event_category <> 'ONLINE_EVENT' ) THEN CONCAT('ad_',a.start_date_time,'_',a.event_schedule_id,'_') -- Complete (Online Event) -- WHEN ( (a.back_office_status = 2 OR a.back_office_status = 3) AND a.event_status ='FULL' AND e.event_category = 'ONLINE_EVENT' ) THEN CONCAT('ad_',a.start_date_time,'_',a.event_schedule_id,'_') -- Locked -- WHEN a.back_office_status = 3 THEN CONCAT('aeee_',a.start_date_time,'_',a.event_schedule_id,'_') -- Terminee -- WHEN a.back_office_status = 7 THEN CONCAT('b_',a.start_date_time,'_',a.event_schedule_id,'_') -- Passe -- WHEN a.back_office_status = 4 THEN CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_') -- Archived -- ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_') "; } } private function _get_filter_query($user_id) { $this->load->model("event_schedule_model"); // SELECT es.event_schedule_id, e.event_id, efa.file_name, return "SELECT es.event_schedule_id, e.event_id, e.trailer, e.workshop_session, e.title, e.workshop_author, e.author_label, e.workshop_author_description, e.workshop_banner, e.number_of_sessions, e.hours_per_session, e.event_status as status_of_event, e.remaining_combined_seat, et.event_type, e.description, es.event_status,e.date_feature, e.use_different_address_per_date, e.reservation_end_date, e.night_class_prices, COUNT(es.event_id) AS event_count, NOW() as _now, e.event_category, (CASE WHEN e.event_status = 'CANCEL' THEN (SELECT COUNT(event_status) FROM event_schedule es WHERE es.event_status='CANCEL' AND es.event_id = e.event_id ) ELSE \"\" END) AS cancel_count, (CASE WHEN e.is_favorite = 1 THEN (SELECT fl.image FROM frontoffice_logo fl WHERE fl.status =1 ) ELSE \"\" END) as event_favorite, (SELECT efa.file_name FROM event_file_attachment efa WHERE e.event_id = efa.event_id AND efa.attachment_type = 1 AND efa.status = 1 LIMIT 1) AS 'file_name', (SELECT GROUP_CONCAT(CONCAT( CASE ".$this->sort_fo_events_by($user_id)." END ) ORDER BY (CASE ".$this->sort_fo_events_by($user_id)." END), a.start_date_time ASC SEPARATOR '#') as bostatus FROM event_schedule a WHERE a.event_id = e.event_id AND a.back_office_status NOT IN (0,5,6) LIMIT 1 ) AS bostatus FROM event e INNER JOIN event_schedule es ON es.event_id = e.event_id LEFT JOIN event_type et ON e.event_type_id = et.event_type_id WHERE e.back_office_status NOT IN(0,5) AND e.status =1 "; // LEFT JOIN event_file_attachment efa ON e.event_id = efa.event_id // WHERE efa.attachment_type = 1 // AND efa.status = 1 } public function filter_events($filter, $page, $month, $type, $city, $user_id, $logged_in,$workshop_session='') { $pages = $page*HP_EVENT_DISPLAY['perPage']-HP_EVENT_DISPLAY['perPage']; if($logged_in) $preferences = $this->_get_preferences_query($user_id); // // $user_id = ($logged_in)?$user_id:false; // echo $user_id; // Filter ------------------------------------------------------------------------ $query = $this->_get_filter_query($user_id); $query .= $this->_get_filter_type($filter, $month, $type, $city,$workshop_session); // $query .= ' GROUP BY e.event_id ORDER BY bostatus ASC'; // Dev #44476 - FO - Sorting out workshops by the chronological posting date order // // $query .= ' GROUP BY e.event_id ORDER BY // SUBSTRING_INDEX(bostatus,"_",1) ASC, // CASE WHEN SUBSTRING_INDEX(bostatus,"_",1) NOT IN("d") THEN SUBSTRING_INDEX(SUBSTRING_INDEX(bostatus,"_",2),"_",-1) END ASC, // CASE WHEN SUBSTRING_INDEX(bostatus,"_",1) IN("d") THEN SUBSTRING_INDEX(SUBSTRING_INDEX(bostatus,"_",2),"_",-1) END DESC'; $query .= ' GROUP BY e.event_id ORDER BY e.event_id DESC'; $query .= ' LIMIT '.(($pages > 0)?$pages:0).', '.HP_EVENT_DISPLAY['perPage'].' '; //print $query; $events = $this->db->query($query); // Pagination --------------------------------------------------------------------- $query = $this->_get_filter_query($user_id); $query .= $this->_get_filter_type($filter, $month, $type, $city,$workshop_session); // Dev #44476 - FO - Sorting out workshops by the chronological posting date order // // $query .= ' GROUP BY e.event_id ORDER BY // SUBSTRING_INDEX(bostatus,"_",1) ASC, // CASE WHEN SUBSTRING_INDEX(bostatus,"_",1) NOT IN("d") THEN SUBSTRING_INDEX(SUBSTRING_INDEX(bostatus,"_",2),"_",-1) END ASC, // CASE WHEN SUBSTRING_INDEX(bostatus,"_",1) IN("d") THEN SUBSTRING_INDEX(SUBSTRING_INDEX(bostatus,"_",2),"_",-1) END DESC'; // if($logged_in) $this->db->where_in('e.event_type_id', $preferences); $query .= ' GROUP BY e.event_id ORDER BY e.event_id DESC'; $pagination = $this->db->query($query); return array( 'data' => $events->result(), 'pagination' => ceil($pagination->num_rows()/HP_EVENT_DISPLAY['perPage']), 'result_count' => $events->num_rows(), 'logged_in' => $logged_in ); } private function _get_filter_type($filter, $month, $type, $city, $workshop_session = '') { $q_w = ' AND '; $q = []; if(!empty($workshop_session)){ $ww = explode(",",$workshop_session); if(count($ww) ==1){ $q_w = " AND e.workshop_session = ".$this->db->escape($ww[0]); if($ww[0] == "PRESENTIEL") $q_w = " AND (e.workshop_session = ".$this->db->escape($ww[0])." OR e.workshop_session is null)"; } else{ foreach($ww as $w){ $q[] = "e.workshop_session = ".$this->db->escape($w); if($w == "PRESENTIEL") $q[] .= "e.workshop_session is null"; } $q_w .= "(".implode(" OR ",$q).")"; } } $q_t = ' AND '; $t = []; if(!empty($type)){ $tt = explode(",",$type); if(count($tt) ==1){ $q_t = " AND e.event_type_id = ".$this->db->escape($tt[0]); } else{ foreach($tt as $ttt => $o){ $t[] = "e.event_type_id = ".$this->db->escape($o); } $q_t .= "(".implode(" OR ",$t).")"; } } switch($filter) { case 'month': return " AND month(e.start_date_time) = ".$this->db->escape($month); case 'type': return " AND e.event_type_id = ".$this->db->escape($type); case 'type_multiple': return $q_t; case 'workshop_session': return $q_w; case 'workshop_session_type': return $q_w.$q_t; case 'city': return " AND (CASE WHEN e.use_different_address_per_date = 1 THEN (CASE WHEN es.city_location IS NULL THEN \"\" ELSE es.city_location END) ELSE (CASE WHEN e.city_location IS NULL THEN \"\" ELSE e.city_location END) END) = ".$this->db->escape($city); case 'month_city': return " AND month(e.start_date_time) = ".$this->db->escape($month). " AND (CASE WHEN e.use_different_address_per_date = 1 THEN (CASE WHEN es.city_location IS NULL THEN \"\" ELSE es.city_location END) ELSE (CASE WHEN e.city_location IS NULL THEN \"\" ELSE e.city_location END) END) = ".$this->db->escape($city); case 'month_type': return " AND month(e.start_date_time) = ".$this->db->escape($month). " AND e.event_type_id = ".$this->db->escape($type); case 'type_city': return " AND e.event_type_id = ".$type. " AND (CASE WHEN e.use_different_address_per_date = 1 THEN (CASE WHEN es.city_location IS NULL THEN \"\" ELSE es.city_location END) ELSE (CASE WHEN e.city_location IS NULL THEN \"\" ELSE e.city_location END) END) = ".$this->db->escape($city); case 'all': return " AND month(e.start_date_time) = ".$this->db->escape($month). " AND e.event_type_id = ".$this->db->escape($type). " AND (CASE WHEN e.use_different_address_per_date = 1 THEN (CASE WHEN es.city_location IS NULL THEN \"\" ELSE es.city_location END) ELSE (CASE WHEN e.city_location IS NULL THEN \"\" ELSE e.city_location END) END) = ".$this->db->escape($city); default : return; } } public function _get_page_number($event_id, $user_id=0) { $this->db->query('SET @row_num := 0'); $query = $this->db->query(" SELECT @row_num := @row_num + 1 as 'row_number', t.* FROM ( SELECT e.event_id, (SELECT GROUP_CONCAT(CONCAT( CASE ".$this->sort_fo_events_by($user_id)." END ) ORDER BY (CASE ".$this->sort_fo_events_by($user_id)." END), a.start_date_time ASC SEPARATOR '#') as bostatus FROM event_schedule a WHERE a.event_id = e.event_id AND a.back_office_status NOT IN (0,5,6) LIMIT 1 ) AS bostatus FROM event e LEFT JOIN event_schedule es ON es.event_id = e.event_id LEFT JOIN event_type et ON e.event_type_id = et.event_type_id LEFT JOIN event_file_attachment efa ON e.event_id = efa.event_id WHERE efa.status = 1 AND efa.attachment_type = 1 AND es.back_office_status NOT IN(0,5,6) AND e.status =1 GROUP BY e.event_id ORDER BY SUBSTRING_INDEX(bostatus,'_',1) ASC, CASE WHEN SUBSTRING_INDEX(bostatus,'_',1) NOT IN('d') THEN SUBSTRING_INDEX(SUBSTRING_INDEX(bostatus,'_',2),'_',-1) END ASC, CASE WHEN SUBSTRING_INDEX(bostatus,'_',1) IN('d') THEN SUBSTRING_INDEX(SUBSTRING_INDEX(bostatus,'_',2),'_',-1) END DESC ) t, (SELECT @rownum := 0) r "); foreach($query->result() as $row){ if($row->event_id == $event_id){ return ceil($row->row_number/HP_EVENT_DISPLAY['perPage']); } } } public function event_details($event_id) { $query = "SELECT e.event_id, e.title, e.event_type_id, et.event_type, e.description, (CASE WHEN e.rate > 0 THEN e.rate ELSE \"\" END) as event_rate, e.seat_feature, e.date_feature, e.is_multiple_reservation, e.is_multiple_waitlist_reservation, e.use_different_address_per_date, e.workshop_author, e.author_label, e.workshop_author_description, e.workshop_banner, e.workshop_event_type, e.number_of_sessions, e.hours_per_session, e.total_available_seat, e.reservation_start_date, e.reservation_end_date, e.start_date_time, (CASE WHEN e.start_date_time THEN DATE_FORMAT(e.start_date_time, '%M') ELSE \"\" END) AS event_start_month_name, (CASE WHEN e.start_date_time THEN DATE_FORMAT(e.start_date_time, '%e') ELSE \"\" END) AS event_start_day, e.event_category, e.remaining_combined_seat, e.end_date_time, e.back_office_status, e.workshop_author_awards, e.location, e.similar_events, e.workshop_session, e.learning_outcome, e.trailer, e.discounted_price, e.discount_apply, e.city_name, e.night_class_prices, e.event_status, e.tag, (SELECT efa.file_name FROM event_file_attachment efa WHERE efa.event_id = e.event_id AND efa.status = 1 AND efa.attachment_type = 1 LIMIT 1) AS 'file_name', (SELECT COUNT(esx.event_schedule_id) FROM event_schedule esx WHERE esx.event_id = ? AND esx.back_office_status IN(1,2,3,4,7,5)) as schedDatesCount, COUNT(es.event_id) AS event_count, (CASE WHEN es.event_status = 'CANCEL' THEN (SELECT COUNT(event_status) FROM event_schedule es WHERE es.event_status='CANCEL' AND es.event_id =? ) ELSE \"\" END) AS cancel_count, (CASE WHEN e.is_favorite = 1 THEN (SELECT fl.image FROM frontoffice_logo fl WHERE fl.status =1 ) ELSE \"\" END) as event_favorite, (CASE WHEN e.city_location IS NULL THEN \"\" ELSE (SELECT ecl.city FROM event_city_location ecl WHERE ecl.city_location_id = e.city_location AND ecl.status =1) END) as event_venue, (CASE WHEN e.use_different_address_per_date = 0 THEN (CASE WHEN e.address IS NULL THEN \"\" ELSE e.address END) ELSE \"\" END) as event_address, (CASE WHEN e.use_different_address_per_date = 0 THEN (CASE WHEN e.location IS NULL THEN \"\" ELSE e.location END) ELSE \"\" END) as event_place_name, (CASE WHEN e.use_different_address_per_date = 0 THEN (CASE WHEN e.city_name IS NULL THEN \"\" ELSE e.city_name END) ELSE \"\" END) as city, (CASE WHEN e.use_different_address_per_date = 0 THEN (CASE WHEN e.code_postal IS NULL THEN \"\" ELSE e.code_postal END) ELSE \"\" END) as event_postal_code FROM event e LEFT JOIN event_type et ON et.event_type_id = e.event_type_id LEFT JOIN user u ON u.user_id = e.author LEFT JOIN event_schedule es ON es.event_id = e.event_id WHERE e.status IN (1) AND e.event_id IN( SELECT event_id FROM event_schedule WHERE back_office_status IN(1,2,3,4,7,5) ) AND e.event_id = ?"; return $this->db->query($query, array($event_id, $event_id, $event_id))->row(); } public function event_details_email($event_id, $ws=false) { $this->load->model("event_schedule_model"); if (UserAuth::isLoggedInAsSubscriber()) { $exclusions = [ BO_STAT['del'], ]; } else { $exclusions = [ BO_STAT['en_c'], BO_STAT['arc'], BO_STAT['del'], BO_STAT['ter'] ]; } //".$this->event_schedule_model->use_diffent_address()." //es.event_schedule_id, $this->db->select("e.event_id, e.title as event_title, e.event_status, et.event_type, (CASE WHEN e.rate > 0 THEN e.rate ELSE \"\" END) as event_rate, (CASE WHEN DATE_FORMAT(e.start_date_time, '%Hh%i') = '00h00' THEN \"\" ELSE DATE_FORMAT(e.start_date_time, '%Hh%i') END) as event_start_hour, efa.file_name as event_picture, e.description as event_description, e.start_date_time as event_start_date"); $this->db->select("DAYNAME(e.start_date_time) AS event_start_day_name", FALSE); $this->db->select("DATE_FORMAT(e.start_date_time, '%e') AS event_start_day", FALSE); $this->db->select("DATE_FORMAT(e.start_date_time, '%m') AS event_start_month", FALSE); $this->db->select("DATE_FORMAT(e.start_date_time, '%M') AS event_start_month_name", FALSE); $this->db->select("DATE_FORMAT(e.start_date_time, '%Y') AS event_start_year", FALSE); $this->db->from('event e'); $this->db->join('event_type et', 'e.event_type_id=et.event_type_id'); $this->db->join('event_file_attachment efa', 'e.event_id=efa.event_id'); $this->db->where('e.event_id', $event_id); $this->db->where('efa.status !=', 0); $this->db->where('efa.attachment_type', 1); $this->db->where_not_in('e.back_office_status', $exclusions); $this->db->where('e.status !=', 0); $this->db->limit(1); return $this->db->get()->row(); } public function get_event_details($event_id){ return $this->db->select('status, title, date_feature, workshop_author, trailer') ->from('event') ->where('status !=', 0) ->where('event_id', $event_id) ->limit(1) ->get() ->row(); } public function event_details_attachment_type($event_id){ $query = $this->db->select('*') ->from('event_file_attachment') ->where('event_id', $event_id) ->where('attachment_type', 2) ->where('status !=', 0) ->get() ->row(); if($query) return 2; else return 1; } public function current_event($event_id){ $query = $this->db->select('') ->from('event') ->where('status !=', 0) ->where('event_id', $event_id) ->get() ->row(); return $query; } public function save_link_to_cookie($event_id){ $query = $this->db->select('event_type_id') ->from('event') ->where('status !=', 0) ->where('event_id', $event_id) ->get() ->row(); return $query->event_type_id; } public function preview_event($event_id){ $query = "SELECT e.event_id, e.title, e.event_type_id, et.event_type, e.description, (CASE WHEN e.rate > 0 THEN e.rate ELSE \"\" END) as event_rate, efa.file_name, efa.mime_type, e.seat_feature, e.date_feature, e.is_multiple_reservation, e.is_multiple_waitlist_reservation, e.use_different_address_per_date, e.start_date_time, e.end_date_time, e.workshop_author_awards, e.author_label, e.workshop_author_description, e.number_of_sessions, e.hours_per_session COUNT(es.event_schedule_id) as event_sched, COUNT(efa.event_id) as attachment_event_id, (CASE WHEN e.is_favorite = 1 THEN (SELECT fl.image FROM frontoffice_logo fl WHERE fl.status =1 ) ELSE \"\" END) as event_favorite, (CASE WHEN e.city_location IS NULL THEN \"\" ELSE (SELECT ecl.city FROM event_city_location ecl WHERE ecl.city_location_id = e.city_location AND ecl.status =1) END) as event_venue, (CASE WHEN e.use_different_address_per_date = 0 THEN (CASE WHEN e.address IS NULL THEN \"\" ELSE e.address END) ELSE \"\" END) as event_address, (CASE WHEN e.use_different_address_per_date = 0 THEN (CASE WHEN e.location IS NULL THEN \"\" ELSE e.location END) ELSE \"\" END) as event_place_name, (CASE WHEN e.use_different_address_per_date = 0 THEN (CASE WHEN e.city_name IS NULL THEN \"\" ELSE e.city_name END) ELSE \"\" END) as city, (CASE WHEN e.use_different_address_per_date = 0 THEN (CASE WHEN e.code_postal IS NULL THEN \"\" ELSE e.code_postal END) ELSE \"\" END) as event_postal_code FROM event e LEFT JOIN event_type et ON et.event_type_id = e.event_type_id LEFT JOIN event_file_attachment efa ON efa.event_id = e.event_id LEFT JOIN event_schedule es ON es.event_id = e.event_id LEFT JOIN user u ON u.user_id = e.author WHERE e.status IN (1) AND efa.status = 1 AND efa.attachment_type = 1 AND e.event_id = ?"; $result=$this->db->query($query, array($event_id))->row(); return $result; } public function event_information($event_id){ $this->db->select("e.*"); $this->db->from("event e"); $this->db->where("e.status !=", 0); $this->db->where("e.event_id", $event_id); $this->db->limit(1); $result = $this->db->get()->row(); return $result; } public function check_event_title($event_title, $event_id=""){ if($event_id != ""){ $this->db->where("event_id !=", $event_id); } $this->db->where("title", $event_title); $this->db->where("status !=", 0); //not deleted ones return $this->db->get("event")->num_rows(); } public function add_event($user_id, $event_data){ //add remaining values $event_data["author"] = $user_id; if(sizeof($event_data) > 0){ $this->db->insert("event", $event_data); $event_id = $this->db->insert_id(); if($event_id){ return $event_id; } } return false; } public function update_event($user_id, $event_data, $event_id){ $event_data["author"] = $user_id; if(sizeof($event_data)){ $this->db->where("event_id", $event_id); $update = $this->db->update("event", $event_data); if($update){ return true; } return false; } return false; } public function delete_event($event_id){ $this->db->where("event_id", $event_id); $update = $this->db->update("event", array("status" => 0, "back_office_status" => 6)); //update also all event schedule status to deleted $this->db->where("event_id", $event_id); $this->db->update("event_schedule", array("back_office_status" => 6)); return $update; } public function edit_display_status(){ $query = $this->db->select('*') ->from('event_schedule') ->where('back_office_status !=', 6) ->where('back_office_status !=', 7) ->where('back_office_status !=', 0) ->get(); $result = $query->result(); foreach($result as $row){ $this->db->where("event_schedule", $row->event_schedule); if($row->back_office_status == 4) $this->db->update("event_schedule", array("display_status" => 0)); else $this->db->update("event_schedule", array("display_status" => 1)); } } public function check_bo_status($query_id, $page) { $this->load->model("event_schedule_model"); $queryData = []; $where = " es.event_schedule_id = ".$this->db->escape($query_id); array_push($queryData, $query_id); $limit = " LIMIT 1 "; if($page == 2){ $where = " es.event_id = ".$this->db->escape($query_id)." and e.event_id = ".$this->db->escape($query_id); $limit = ""; } else { $this->load->model('event_schedule_model'); } $query = $this->db->query("select es.event_id, es.event_schedule_id, es.seats_per_subscriber, es.back_office_status, es.event_status, e.status, es.event_url, (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE es.remaining_seat END) as remaining_seat, ".$this->event_schedule_model->use_diffent_address()." e.seat_feature, e.date_feature, e.event_category, e.is_multiple_reservation, e.is_multiple_waitlist_reservation, e.is_favorite, e.rate, es.quota_waiting_list_seat, e.use_different_address_per_date, ( CASE WHEN es.start_date_time >= NOW() THEN 'coming_soon' ELSE '' END ) as is_coming_soon, ( CASE WHEN es.end_date_time IS NOT NULL THEN NOW() >= es.end_date_time ELSE NOW() >= es.start_date_time END ) as is_passed, (CASE WHEN (es.back_office_status = 2 AND es.event_status ='AVAILABLE') OR (es.back_office_status = 2 AND es.event_status ='FULL') OR (es.back_office_status = 3 AND es.event_status ='FULL') THEN CONCAT('a - ',es.start_date_time,' ') WHEN es.back_office_status = 3 THEN CONCAT('b - ',es.start_date_time,' ') WHEN es.back_office_status = 1 THEN CONCAT('c - ',es.start_date_time,' ') WHEN es.back_office_status = 7 THEN CONCAT('d - ',es.start_date_time,' ') WHEN es.back_office_status = 4 THEN CONCAT('e - ',es.start_date_time,' ') ELSE CONCAT('f - ',es.start_date_time,' ') END) as bostatus ".(($page==1 || $page==2)?$this->event_schedule_model->query_date():"")." from event_schedule es left join event e ON e.event_id = es.event_id -- LEFT JOIN event_registration err ON err.event_schedule_id = es.event_schedule_id -- LEFT JOIN event_wait_list erw ON erw.event_schedule_id = es.event_schedule_id where ".$where." ORDER BY bostatus ASC, es.start_date_time ASC ".$limit); if(!$query->num_rows()){ return false; } else { return $query->result(); } } public function check_bo_status_mres($query_id, $page) { $this->load->model("event_schedule_model"); $where = " es.event_schedule_id = ".$query_id." "; $limit = " LIMIT 1 "; $this->load->model('event_schedule_model'); $query = $this->db->query("select es.event_id, es.event_schedule_id, e.title, es.seats_per_subscriber, es.back_office_status, es.event_status, e.status, (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE es.remaining_seat END) as remaining_seat, ".$this->event_schedule_model->use_diffent_address()." e.seat_feature, e.date_feature, e.event_category, e.is_multiple_reservation, e.is_multiple_waitlist_reservation, e.is_favorite, es.quota_waiting_list_seat, ( CASE WHEN es.start_date_time >= NOW() THEN 'coming_soon' ELSE '' END ) as is_coming_soon, (CASE WHEN (es.back_office_status = 2 AND es.event_status ='AVAILABLE') OR (es.back_office_status = 2 AND es.event_status ='FULL') OR (es.back_office_status = 3 AND es.event_status ='FULL') THEN CONCAT('a - ',es.start_date_time,' ') WHEN es.back_office_status = 3 THEN CONCAT('b - ',es.start_date_time,' ') WHEN es.back_office_status = 1 THEN CONCAT('c - ',es.start_date_time,' ') WHEN es.back_office_status = 7 THEN CONCAT('d - ',es.start_date_time,' ') WHEN es.back_office_status = 4 THEN CONCAT('e - ',es.start_date_time,' ') ELSE CONCAT('f - ',es.start_date_time,' ') END) as bostatus ".(($page==1 || $page==2)?$this->event_schedule_model->query_date():"").", (CASE WHEN gsv.gm_mod_stat = 0 THEN 0 ELSE ges.mod_stat END) AS mod_stat from event_schedule es left join event e ON e.event_id = es.event_id LEFT JOIN event_registration err ON err.event_schedule_id = es.event_schedule_id LEFT JOIN event_wait_list erw ON erw.event_schedule_id = es.event_schedule_id LEFT JOIN gm_evsched_setting ges ON (es.event_schedule_id = ges.event_schedule_id) LEFT JOIN gm_settings_view gsv USING(gm_id) where ".$where." ".$limit); if(!$query->num_rows()){ return false; } else { return $query->result(); } } public function check_event_status($event_id) { $query = $this->db->select('status') ->from('event') ->where('event_id', $event_id) ->get() ->row(); return $query->event_status; } public function check_seats($event_id, $reg_type=1, $byPassRegularReservation=false, $session_type=null) { $query = $this->db->query("select remaining_combined_seat as remaining_seat, workshop_session, night_class_prices, event_status from event where back_office_status NOT IN(0,4,5,7,6) and status = 1 and event_id=? limit 1 ", array($event_id))->row(); if(countVal($query) <=0 ){ return 0; }// Full if($query->workshop_session == 'DISTANCE-PRESENTIEL') { $ncp = json_decode($query->night_class_prices); $rs = 0; if($session_type == 'soir-presentiel') $rs = $ncp->presentiel->total_available_seat - $this->count_total_reserved_seats($event_id, $session_type); else if($session_type == 'soir-distance') $rs = $ncp->distance->total_available_seat; return $rs; } if($query->remaining_seat == 0 && $query->workshop_session != 'ENLIGNE'){ return 0; }// Full else if(($query->remaining_seat > 0 && $reg_type == 1 && $query->event_status == 'AVAILABLE') || $query->workshop_session == 'ENLIGNE'){ return 1; // Book } else { if($reg_type == 2){ return 2; // Book in Waitlist } else { return ($byPassRegularReservation && $query->remaining_seat > 0)?2:0; // Full } } return 0; } public function is_seats_available($event_schedule_id, $reg_type=1) { $query = $this->db->query("select es.quota_waiting_list_seat, es.remaining_seat from event_schedule es left join event e ON e.event_id = es.event_id where es.event_schedule_id = ? and e.status = 1 limit 1 ", array($event_schedule_id))->row(); // return 1; switch ($reg_type) { case 1: if ($query->remaining_seat > 0) { return 1; } return 0; break; case 2: if ($query->quota_waiting_list_seat > 0) { return 1; } return 0; break; default: break; } } public function check_availability($event_id, $event_schedule_id, $seats_reserved, $reg_type, $byPassRegularReservation=false) { if($reg_type >= 3) {return 0;} $row = $this->db->query("select e.remaining_combined_seat as remaining_seat, e.seat_feature, e.is_multiple_reservation,. e.is_multiple_waitlist_reservation, e.back_office_status, e.event_status from event e where e.back_office_status NOT IN(0,7,6) and e.event_id = ? limit 1 ", array($event_id))->row(); // Event is Closed if(countVal($row) <= 0 || $row->back_office_status >= 4){ return 4; } // Event Registration disabled else if( $row->remaining_seat <=0){ return 5; } // Allow Reserver for normal or regular reservation else if($reg_type == 1 && $row->remaining_seat >= $seats_reserved && $row->remaining_seat > 0 && $seats_reserved > 0 && !$byPassRegularReservation){ return 1; } else if($reg_type == 1 && $row->remaining_seat <= 0 && !$byPassRegularReservation){ return 6; //register to regular/normal registration disabled : must register to waiting list } else if($reg_type == 2 && $row->remaining_seat > 0 && $row->event_status == 'AVAILABLE' && !$byPassRegularReservation){ return 3; //register to waiting list disabled : must register to regular/normal registration } // Allow Reserver or Book for waiting list else if($reg_type == 2 && $seats_reserved > 0 && (!$byPassRegularReservation || $byPassRegularReservation)){ return 2; } else { return 0; //Event registration disabled } } public function check_closed_event($event_schedule_id) { $query = $this->db->select('back_office_status') ->from('event_schedule') ->where('back_office_status !=', 6) ->where('back_office_status !=', 7) ->where('back_office_status !=', 0) ->where('event_status != \'FULL\'') ->where('event_schedule_id', $event_schedule_id) ->get() ->row(); if($query->back_office_status == 4) return 0; // Event Closed else return 1; // Event Available } public function update_remaining_seats($event_schedule_id) { $query = $this->db->select('remaining_seat') ->from('event_schedule') ->where('back_office_status !=', 6) ->where('back_office_status !=', 7) ->where('back_office_status !=', 0) ->where('event_status != \'FULL\'') ->where('event_schedule_id', $event_schedule_id) ->get() ->row(); return $query->remaining_seat; } public function open_events_for_reservations(){ //select and insert to event_log table all the events which are about to be opened $this->db->query( "INSERT INTO user_activity_log(reference_id, description, action, table_origin) ( SELECT e.event_id, 'Open event', 'AUTO OPEN EVENT FOR RESERVATION', 'event' FROM event e WHERE (CASE WHEN e.event_category <> 'ONLINE_EVENT' THEN e.reservation_start_date ELSE e.start_date_time END) <= NOW() AND e.back_office_status IN(1) ) "); $this->db->flush_cache(); $this->db->query("UPDATE event_schedule es LEFT JOIN event e ON e.event_id = es.event_id SET es.back_office_status = 2, es.event_status='AVAILABLE' WHERE (CASE WHEN e.event_category <> 'ONLINE_EVENT' THEN es.reservation_start_date ELSE es.start_date_time END) <= NOW() AND e.event_id = es.event_id AND es.back_office_status IN(1) "); $this->db->flush_cache(); $this->db->query("UPDATE event e SET e.back_office_status = 2, e.event_status='AVAILABLE' WHERE (CASE WHEN e.event_category <> 'ONLINE_EVENT' THEN e.reservation_start_date ELSE e.start_date_time END) <= NOW() AND e.back_office_status IN(1) "); // OPEN for Reservations return $this->db->affected_rows(); } public function terminate_events() { //defer sending of onqueue emails $this->defer_emails_and_sending_schedules(); //select and insert to event_log table all the events which are about to be terminated $this->db->query( "INSERT INTO user_activity_log(reference_id, description, action, table_origin) ( SELECT e.event_id, 'Terminate event', 'TERMINATE EVENT', 'event' FROM event e WHERE (CASE WHEN e.reservation_end_date IS NULL THEN e.start_date_time ELSE e.reservation_end_date END) <= NOW() AND e.event_category <> 'ONLINE_EVENT' AND e.back_office_status IN(1,2,3) ) "); $this->db->flush_cache(); $this->db->query("UPDATE event_schedule es LEFT JOIN event e ON e.event_id = es.event_id SET es.back_office_status = 7 WHERE (CASE WHEN e.reservation_end_date IS NULL THEN e.start_date_time ELSE e.reservation_end_date END) <= NOW() AND e.event_id = es.event_id AND e.event_category <> 'ONLINE_EVENT' AND es.back_office_status IN(1,2,3)" ); $this->db->flush_cache(); //then, update their statuses $this->db->query("UPDATE event e SET e.back_office_status = 7 WHERE (CASE WHEN e.reservation_end_date IS NULL THEN e.start_date_time ELSE e.reservation_end_date END) <= NOW() AND e.event_category <> 'ONLINE_EVENT' AND e.back_office_status IN(1,2,3)" ); //events terminated return $this->db->affected_rows(); } public function close_events() { //defer sending of onqueue emails $this->defer_emails_and_sending_schedules(); //select and insert to event_log table all the events which are about to be closed $this->db->query("INSERT INTO user_activity_log(reference_id, description, action, table_origin) SELECT event_id, 'Close event', 'AUTO CLOSE EVENT', 'event' FROM event_schedule WHERE (CASE WHEN end_date_time IS NULL THEN DATE_FORMAT( DATE_ADD(start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') ELSE DATE_ADD(end_date_time, INTERVAL 1 MINUTE) END) <= NOW() AND back_office_status IN(1,2,3,7)"); $this->db->flush_cache(); $this->db->query(" UPDATE event_schedule SET back_office_status = 4 WHERE (CASE WHEN end_date_time IS NULL THEN DATE_FORMAT( DATE_ADD(start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') ELSE DATE_ADD(end_date_time, INTERVAL 1 MINUTE) END) <= NOW() AND back_office_status IN(1,2,3,7) "); $this->db->flush_cache(); //then, update their statuses $this->db->query(" UPDATE event SET back_office_status = 4 WHERE (CASE WHEN end_date_time IS NULL THEN DATE_FORMAT( DATE_ADD(start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') ELSE DATE_ADD(end_date_time, INTERVAL 1 MINUTE) END) <= NOW() AND back_office_status IN(1,2,3,7) "); //events CLOSED return $this->db->affected_rows(); } private function defer_emails_and_sending_schedules(){ //defer sending of onqueue emails $this->db->query("UPDATE event_email_recipient eer SET eer.email_status = 5, eer.email_date_time = NOW() WHERE eer.email_status IN(0,2,3) AND eer.event_schedule_id IN(SELECT event_id FROM event WHERE start_date_time <= NOW() )"); $this->db->flush_cache(); //email sending schedules must be set to pass $this->db->query("UPDATE event_email_schedule ees SET ees.email_schedule_status = 2, ees.email_schedule_date_added = NOW() WHERE ees.email_schedule_status IN(1) AND ees.event_schedule_id IN(SELECT event_id FROM event WHERE start_date_time <= NOW() )"); $this->db->flush_cache(); } public function list_events_for_typeahead($search){ $this->db->select("event_id, title AS name") ->select("DATE_FORMAT(reservation_start_date, '%e/%m/%Y %Hh%m') AS reservation", FALSE); $this->db->where_in("back_office_status",array(1,2,3,4,5)); $this->db->limit(10); $this->db->like("title", $search); $this->db->order_by("event_id", "desc"); return $this->db->get("event")->result(); } public function reopen_event($event_schedule_id){ //insert to event log before reopening an event $this->db->query("INSERT INTO user_activity_log(reference_id, description, action, table_origin) VALUES(?, ?, ?, ?)", array($event_schedule_id, 'Re-open event', 'RE-OPEN EVENT', 'event_schedule')); //re-open an event $this->db->where("event_schedule_id", $event_schedule_id); $this->db->where("auto_event_status !=", 1); $this->db->update("event_schedule", array("back_office_status" => 2)); } public function get_events_for_waitinglist_email() { //get_events_with_free_places $result = $this->db->query("SELECT es.event_id, es.event_schedule_id, es.remaining_seat, es.start_date_time, es.end_date_time, ewl.wait_list_id, ( SELECT ees.email_schedule_id 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 = 2 WHERE ees.event_schedule_id = ewl.event_schedule_id AND ees.email_schedule_status=1 AND eeds.email_tpl_setting_status= 1 ORDER BY ees.email_schedule_id DESC LIMIT 1 ) AS email_schedule_id FROM event_wait_list ewl LEFT JOIN event_schedule es ON es.event_schedule_id = ewl.event_schedule_id LEFT JOIN event e ON e.event_id = es.event_id WHERE (CASE WHEN e.seat_feature = 2 THEN e.remaining_combined_seat ELSE es.remaining_seat END) > 0 AND es.event_status = 'AVAILABLE' AND e.status = 1 AND ewl.status = 1 AND ewl.isModeratedButAllowedInWL = 0 AND es.back_office_status IN (2, 3) AND es.start_date_time > NOW() AND ewl.event_schedule_id IN( select eses.event_schedule_id from event_schedule_email_status eses where eses.event_schedule_id = ewl.event_schedule_id and eses.email_type_id = 2 and eses.status = 1 ) AND ewl.wait_list_id NOT IN(SELECT eer.reference_id FROM event_email_recipient eer WHERE eer.event_schedule_id = ewl.event_schedule_id AND eer.email_status != 5 AND eer.reference_id IS NOT NULL AND eer.email_type_id = 2 GROUP BY eer.reference_id) GROUP BY ewl.event_schedule_id ORDER BY ewl.wait_list_id DESC ")->result(); return $result; } public function get_events_for_reminder_email() { return $this->db->query("SELECT e.event_id, e.start_date_time FROM event_registration er LEFT JOIN event e ON e.event_id = er.event_id AND e.status = 1 WHERE er.status = 1 AND e.back_office_status IN (2, 3) AND e.start_date_time > NOW() AND e.status = 1 AND er.event_id IN( SELECT eses.event_id FROM event_schedule_email_status eses WHERE eses.event_id = er.event_id AND eses.email_type_id = 3 AND eses.status = 1 ) AND e.event_status !='CANCEL' AND er.registration_id NOT IN(SELECT eer.reference_id FROM event_email_recipient eer WHERE eer.event_id = er.event_id AND eer.email_status NOT IN (1, 5) AND eer.reference_id IS NOT NULL AND eer.email_type_id = 3 ) AND ( CASE WHEN (SELECT COUNT(ees.email_schedule_id) FROM event_email_schedule ees LEFT JOIN event_email_default_setting eeds ON ees.reference = eeds.email_tpl_setting_id AND eeds.email_type_id = 3 WHERE eeds.email_type_id = 3 AND ees.reference = eeds.email_tpl_setting_id AND ees.email_schedule_status = 1 AND ees.event_id = er.event_id ) > 0 THEN (CASE WHEN ( SELECT COUNT(ees.email_schedule_id) FROM event_email_schedule ees LEFT JOIN event_email_default_setting eeds ON ees.reference = eeds.email_tpl_setting_id AND eeds.email_type_id = 3 WHERE eeds.email_type_id = 3 AND ees.reference = eeds.email_tpl_setting_id AND ees.email_schedule_status = 1 AND ees.event_id = er.event_id AND ees.email_schedule_id NOT IN ( SELECT eerod.email_sched_reference_id FROM event_email_recipient eer LEFT JOIN event_email_recipient_other_detail eerod ON eerod.email_recipient_id = eer.email_recipient_id AND eerod.email_sched_reference = 1 WHERE eer.event_id = er.event_id AND eer.email_type_id = 3 AND eer.email_status != 5 AND eerod.email_recipient_id = eer.email_recipient_id AND eerod.email_sched_reference = 1 ) ) >0 THEN 1 ELSE 0 END) WHEN ( SELECT COUNT(eeds.email_tpl_setting_id) FROM event_email_default_setting eeds WHERE eeds.email_type_id = 3 AND eeds.email_tpl_setting_status = 1 AND eeds.email_tpl_setting_id NOT IN ( SELECT eerod.email_sched_reference_id FROM event_email_recipient eer LEFT JOIN event_email_recipient_other_detail eerod ON eerod.email_recipient_id = eer.email_recipient_id AND eerod.email_sched_reference = 2 WHERE eer.event_id = er.event_id AND eer.email_type_id = 3 AND eer.email_status != 5 AND eerod.email_recipient_id = eer.email_recipient_id AND eerod.email_sched_reference = 2 ) ) > 0 THEN 1 ELSE 0 END ) > 0 GROUP BY er.event_id ORDER BY er.registration_id DESC ")->result(); } public function get_event_detail_for_test_email($event_schedule_id,$email_type_id){ $this->load->model("event_schedule_model"); $result = $this->db->select(" es.event_schedule_id, e.event_id, e.title as event_title, e.workshop_author, et.event_type, e.event_status, ".$this->event_schedule_model->use_diffent_address()." (CASE WHEN e.rate > 0 THEN e.rate ELSE \"\" END) as event_rate, efa.file_name as event_picture, e.description as event_description, e.start_date_time as event_start_date, (CASE WHEN DATE_FORMAT(e.start_date_time, '%Hh%i') = '00h00' THEN \"\" ELSE DATE_FORMAT(e.start_date_time, '%Hh%i') END) as event_start_hour, (CASE WHEN eeds.email_tpl_setting_sched = 0 THEN \"\" ELSE eeds.email_tpl_setting_sched END) as email_tpl_setting_sched, (CASE WHEN eeds.email_tpl_setting_sched_by = 0 THEN \"\" ELSE eeds.email_tpl_setting_sched_by END) as email_tpl_setting_sched_by ") ->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, '%Y') AS event_start_year", FALSE) ->select("DATE_FORMAT(e.start_date_time, '%M') AS event_start_month_name", 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("e.start_date_time AS date_complete", FALSE) ->from("event_schedule es") ->join("event e", "e.event_id = es.event_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_default_setting eeds", "eeds.email_type_id = $email_type_id AND eeds.email_tpl_setting_status=1", "left") ->where("es.event_schedule_id", $event_schedule_id) ->get(); if($result->num_rows() > 0){ return $result->row(); } return false; } public function check_all_sched($event_id, $isOpen=true) { // Tells whether there's an event open or all are closed $notIn = $isOpen ? '4,5,6' : '5,6'; if ( !$event_id ) { return []; } return $this->db->query("SELECT es.event_id as eventID, (SELECT @min_date := MIN(start_date_time) from event_schedule where event_id = ? AND back_office_status NOT IN (?)) AS mid_date, (SELECT GROUP_CONCAT(CONCAT ('{\"event_schedule_id\":\"', a.event_schedule_id, '\", \"end_date\":\"', {$this->prepare_query_to_get_end_date("a.end_date_time", "a.start_date_time")}, '\", \"max_end_date\":\"', {$this->prepare_query_to_get_end_date("a.end_date_time", "a.start_date_time")}, '\", \"event_enddate\":\"', {$this->prepare_query_to_get_end_date("DATE(a.end_date_time)", "DATE(a.start_date_time)")}, '\", \"max_end_date_day\":\"', {$this->prepare_query_to_get_end_date("DAYNAME(a.end_date_time)", "DAYNAME(a.start_date_time)")}, '\", \"max_mdate_date\":\"', {$this->prepare_query_to_get_end_date("DAY(a.end_date_time)", "DAY(a.start_date_time)")}, '\", \"max_mdate_month\":\"', {$this->prepare_query_to_get_end_date("MONTHNAME(a.end_date_time)", "MONTHNAME(a.start_date_time)")}, '\", \"max_mdate_year\":\"', {$this->prepare_query_to_get_end_date("YEAR(a.end_date_time)", "YEAR(a.start_date_time)")}, '\", \"end_mdate_hour\":\"', (CASE WHEN a.end_date_time IS NOT NULL AND DATE_FORMAT(a.end_date_time, '%Hh%i') != '00h00' AND a.end_date_time != @min_date THEN DATE_FORMAT(a.end_date_time, 'à %Hh%i') WHEN a.start_date_time IS NOT NULL AND DATE_FORMAT(a.start_date_time, '%Hh%i') != '00h00' AND a.start_date_time != @min_date THEN DATE_FORMAT(a.start_date_time, 'à %Hh%i') ELSE \"\" END), '\"}' ) ORDER BY a.start_date_time DESC, a.event_schedule_id DESC SEPARATOR ',') as child_events FROM event_schedule a WHERE a.event_id = ? AND a.back_office_status NOT IN (?) ) AS event_end_date, MIN(es.start_date_time) as start_date, DATE(min(es.start_date_time)) as event_startdate, DAYNAME(min(es.start_date_time)) as min_start_day, DAY(min(es.start_date_time)) as min_start_date, MONTHNAME(min(es.start_date_time)) as min_start_date_month, YEAR(min(es.start_date_time)) as min_date_year, MAX(es.start_date_time) as end_date, DAYNAME(max(es.start_date_time)) as end_sdate_day, DAY(max(es.start_date_time)) as end_sdate_date, MONTHNAME(max(es.start_date_time)) as max_sdate_month, YEAR(max(es.start_date_time)) as max_sdate_year, (CASE WHEN DATE_FORMAT(min(es.start_date_time), '%Hh%i') = '00h00' THEN \"\" ELSE DATE_FORMAT(min(es.start_date_time), 'de %Hh%i') END) AS start_date_hour, (CASE WHEN DATE_FORMAT(min(es.start_date_time), '%Hh%i') = '00h00' THEN \"\" ELSE DATE_FORMAT(min(es.start_date_time), 'à %Hh%i') END) AS min_start_date_hour, (CASE WHEN DATE_FORMAT(max(es.start_date_time), '%Hh%i') = '00h00' THEN \"\" ELSE DATE_FORMAT(max(es.start_date_time), 'à %Hh%i') END) AS max_end_sdate_hour FROM event_schedule es WHERE es.event_id = ? AND es.back_office_status NOT IN (?) ", array($event_id, $notIn, $event_id, $notIn, $event_id, $notIn))->result(); } private function prepare_query_to_get_end_date($date1, $date2) { return "(CASE WHEN ( a.end_date_time IS NOT NULL AND DATE_FORMAT(a.end_date_time, '%Y-%m-%d') = DATE_FORMAT(@min_date, '%Y-%m-%d') ) OR ( a.end_date_time IS NULL AND DATE_FORMAT(a.start_date_time, '%Y-%m-%d') = DATE_FORMAT(@min_date, '%Y-%m-%d') ) THEN \"\" WHEN a.end_date_time IS NOT NULL AND DATE_FORMAT(a.end_date_time, '%Y-%m-%d') != DATE_FORMAT(@min_date, '%Y-%m-%d') THEN {$date1} WHEN a.end_date_time IS NULL AND DATE_FORMAT(a.start_date_time, '%Y-%m-%d') != DATE_FORMAT(@min_date, '%Y-%m-%d') THEN {$date2} ELSE \"\" END)"; } public function count_workshop($filter, $type, $user_id) { $query = $this->_get_filter_query($user_id); $query .= $this->_get_filter_type($filter, NULL, $type, NULL); // $query .= ' GROUP BY e.event_id ORDER BY bostatus ASC'; $query .= ' GROUP BY e.event_id ORDER BY SUBSTRING_INDEX(bostatus,"_",1) ASC, CASE WHEN SUBSTRING_INDEX(bostatus,"_",1) NOT IN("d") THEN SUBSTRING_INDEX(SUBSTRING_INDEX(bostatus,"_",2),"_",-1) END ASC, CASE WHEN SUBSTRING_INDEX(bostatus,"_",1) IN("d") THEN SUBSTRING_INDEX(SUBSTRING_INDEX(bostatus,"_",2),"_",-1) END DESC'; //$query .= ' LIMIT '.(($pages > 0)?$pages:0).', '.HP_EVENT_DISPLAY['perPage'].' '; $events = $this->db->query($query); return $events->num_rows(); } public function get_file_attachments($event_id) { $this->db->select('file_name, display'); $this->db->where('status', 1); $this->db->where('event_id', $event_id); return $this->db->get('event_file_attachment')->result_array(); } public function event_details_reserved($event_id, $is_video = false) { $this->db->select("e.event_id, e.title AS event_title, e.description, e.rate as event_rate, e.seat_feature, e.date_feature, e.workshop_author, e.author_label, e.workshop_author_description, e.hours_per_session, e.total_available_seat, e.reservation_start_date, e.reservation_end_date, e.start_date_time, e.workshop_session, e.event_category, e.end_date_time, e.event_status"); $this->db->select("DAYNAME(e.start_date_time) AS event_start_day_name", FALSE); $this->db->select("DATE_FORMAT(e.start_date_time, '%e') AS event_start_day", FALSE); $this->db->select("DATE_FORMAT(e.start_date_time, '%m') AS event_start_month", FALSE); $this->db->select("DATE_FORMAT(e.start_date_time, '%M') AS event_start_month_name", FALSE); $this->db->select("DATE_FORMAT(e.start_date_time, '%Y') AS event_start_year", FALSE); $this->db->select("DATE_FORMAT(e.start_date_time, '%Hh%i') AS start_date_hour", FALSE); $this->db->select("DATE_FORMAT(e.start_date_time, '%Hh%i') AS commencement_de_lheure", FALSE); $this->db->select("e.start_date_time AS date_complete", FALSE); $this->db->from('event e'); $this->db->where('e.event_id', $event_id); return $this->db->get()->row(); } public function similar_events($category = 0, $event_id = null) { $this->db->select('event_id, title, workshop_author, status'); if($category != 0) { $this->db->where('event_type_id', $category); } if($event_id != null) { $this->db->where('event_id !=', $event_id); } $this->db->where_in('back_office_status', [1,2,3,4]); $this->db->where('end_date_time >=',date('Y-m-d')); $this->db->where('status', 1); $this->db->where('remaining_combined_seat >', 0); $this->db->or_where('workshop_session','ENLIGNE'); $events = $this->db->get('event')->result(); $similar_events= array(); if($events) { foreach($events as $event) { if($event->status == 1) { array_push($similar_events, (array) $event); } } } return $similar_events; } public function get_past_events() { $this->db->select('event_id, title, workshop_author, status'); $this->db->where_not_in('back_office_status', [0,6,7]); $this->db->where('end_date_time <',date('Y-m-d')); $this->db->where('status', 1); $this->db->where_not_in('workshop_session', ['ENLIGNE']); $events = $this->db->get('event')->result(); return $events; } public function get_selected_past_events() { $this->db->select('*'); $events = $this->db->get('event_past_featured')->row(); $event_details = array(); $ids = array(); if($events && $events->events != 'null') { $ids = json_decode($events->events); foreach($ids as $id) { $details = $this->event_details($id); array_push($event_details, $details); } } return $event_details; } public function add_selected_past_events(array $data) { $this->db->select('*'); $past_events = $this->db->get('event_past_featured')->row(); if($past_events) { /** update featured past events */ $event_data["events"] = $data['events']; $this->db->where("id", $past_events->id); return $this->db->update("event_past_featured", $event_data); } else { /** add featured past events */ $event = array('events' => $data['events']); $this->db->insert("event_past_featured", $event); return $this->db->insert_id(); } return $past_events; } public function get_similar_events($events) { $similar_events= array(); if($events) { foreach($events as $event) { $event_details = $this->event_details($event); if($event_details->back_office_status != 6 && $event_details->back_office_status != null) { $event_details->hours_per_session=$this->formatHour($event_details->hours_per_session); array_push($similar_events, (array) $event_details); } } } return $similar_events; } private function formatHour($time) { $hour = explode('.', $time); $minute = ''; if(count($hour)>1) { $minute = $this->formatMinute($hour[1]); } return $hour[0].'h'.$minute; } private function formatMinute($minute=null) { $m = ''; if($minute != null) { $minute = '.'.$minute; $m = (float)$minute*60; } return $m; } public function get_online_video() { $result = $this->db->select('event_id, workshop_session') ->from('event') ->where('workshop_session', 'ENLIGNE') ->where('status', 1); return $result->get()->result(); } public function format_night_class_prices($event) { $ncp = json_decode($event->night_class_prices); $presentiel_available_seats = $ncp->presentiel->total_available_seat - $this->count_total_reserved_seats($event->event_id, 'soir-presentiel'); $prices = [ "presentiel" => [ "p_rate" => $ncp->presentiel->rate, "p_total_available_seat" => $ncp->presentiel->total_available_seat, "p_discounted_price" => $ncp->presentiel->discounted_price, "p_discount_apply" => $ncp->presentiel->discount_apply, "p_remaining_combined_seat" => $presentiel_available_seats ], "distance" => [ "d_rate" => $ncp->distance->rate, "d_total_available_seat" => $ncp->distance->total_available_seat != '' ? $ncp->distance->total_available_seat : 0, "d_discounted_price" => $ncp->distance->discounted_price, "d_discount_apply" => $ncp->distance->discount_apply, "d_remaining_combined_seat" => ($ncp->distance->total_available_seat != '' ? $ncp->distance->total_available_seat : 0) - $this->count_total_reserved_seats($event->event_id, 'soir-distance') ] ]; $event->remaining_combined_seat = $presentiel_available_seats; return array_merge((array)$event, $prices); } public function count_total_reserved_seats($event_id, $registration_type) { $this->db->select_sum('number_of_guest'); $this->db->from('event_registration'); $this->db->where('event_id', $event_id); $this->db->where('registration_type', $registration_type); $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; } }