You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

378 lines
16 KiB

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
use app\core\utils\Response;
class Event_schedule extends MY_Controller {
/**
* Holds insert command for table event_schedule_moderation_setting
*/
protected const INSERT_SETTINGS = 1;
/**
* Holds update command for table event_schedule_moderation_setting
*/
protected const UPDATE_SETTINGS = 2;
public function __construct()
{
$this->my_parent_controller();
Response::handleSessionTimeout("bo");
//load language files
$this->load_language_backoffice();
$this->lang->load('backoffice/events', 'fr');
//load models
$this->load->model("user_activity_log_model");
$this->load->model("event_schedule_model");
$this->load->model("event_registration_paid_event_model");
$this->load->model("nshow_model");
}
public function list_event_schedule($event_id=0){
if(isset($this->data["logged_in"]["user_id"])){
$list = $this->event_schedule_model->get_all_event_schedule($event_id);
$data = array();
$row = array();
foreach ($list as $event_sched) {
$row["event_schedule_id"] = $event_sched->event_schedule_id;
$row["start_date_time"] = $event_sched->start_date_time;
$row["end_date_time"] = $event_sched->end_date_time;
$row["reservation_start_date"] = $event_sched->reservation_start_date;
$row["reservation_end_date"] = $event_sched->reservation_end_date;
$row["event_status"] = $event_sched->event_status;
$row["back_office_status"] = $event_sched->back_office_status;
$row["total_available_remaining_seat"] = (empty($event_sched->rem_seats)?0:$event_sched->rem_seats).' / '.(empty($event_sched->avl_seats)?0:$event_sched->avl_seats);
/*
* Get noshow data for each event schedule
*/
$row["noshow"] = 'Désactivé';
$noshow_data = $this->nshow_model->getNoshowInfo($event_sched->event_schedule_id);
if (!empty($noshow_data)>0) {
if ($noshow_data['no_show_stat']) {
$row["noshow"] = "{$noshow_data['total_noshow']}/{$noshow_data['total_bookings']}";
}
}
$row["total_available_seat"] = $event_sched->total_available_seat;
$row["total_quota_waiting_list_seat"] = $event_sched->total_quota_waiting_list_seat;
$row["seats_per_subscriber"] = $event_sched->seats_per_subscriber;
$row["city_name"] = $event_sched->city_name;
$row["location"] = $event_sched->location;
$row["city_location"] = $event_sched->city_location;
$row["address"] = $event_sched->address;
$row["code_postal"] = $event_sched->code_postal;
$row["event_url"] = $event_sched->event_url;
$row["item_code"] = $event_sched->item_code;
$row["action"] = array(
"event_id" => $event_sched->event_id,
"event_schedule" => array(
"avl_seats" => $event_sched->avl_seats,
"rem_seats" => $event_sched->rem_seats,
"avl_wl_seats" => $event_sched->total_quota_waiting_list_seat,
"rem_wl_seats" => $event_sched->quota_waiting_list_seat,
"seat_feature" => $event_sched->seat_feature,
"seat_feature" => $event_sched->seat_feature
)
);
array_push($data, $row);
}
$output = array(
"draw" => (isset($_POST['draw']))?$_POST['draw']:0,
"data" => $data,
);
//output to json format
output_to_json($this, $output);
} else {
show_404();
}
}
public function event_schedule_information($event_sched_id){
if(isset($this->data["logged_in"]["user_id"])){
$ev_sched_info = $this->event_schedule_model->event_schedule_information($event_sched_id);
output_to_json($this, array(
"mtype" => "success",
"mdata" => $ev_sched_info
));
} else {
show_404();
}
}
public function change_seat_feature($event_id=0){
if($this->input->post() && isset($this->data["logged_in"]["user_id"]) && $event_id){
$update_e_schedule = $this->event_schedule_model->change_seat_feature($this->data["logged_in"]["user_id"], $this->input->post("seat_feature"), $event_id);
output_to_json($this, array(
"mtype" => "success",
"message" => "updated"
));
} else {
show_404();
}
}
public function add_event_schedule($event_id=0) {
if($this->input->post() && isset($this->data["logged_in"]["user_id"]) && $event_id){
if($this->input->post()){
$event_schedule = array($this->input->post());
// Get event category
$event_category = $this->event_registration_paid_event_model->get_event_category($event_schedule[0]['event_id']);
// Check Code selection duplicate
if (isset($event_schedule[0]['event_id'])) {
if ($event_category && $event_category == 'PAID_EVENT') {
$this->unique_code_selection($event_schedule[0]);
}
// Set event_category
$this->data['event_category'] = $event_category;
// Remove unecessary key
unset($event_schedule[0]['event_id']);
}
if(sizeof($event_schedule) > 0){
$result = $this->event_schedule_model->add_event_schedule($this->data["logged_in"]["user_id"], $event_id, $event_schedule, $this->data);
if(!$result){
output_to_json($this, array(
"mtype" => "warning",
"message" => $this->lang->line("unknown_error")
));
exit();
} else {
output_to_json($this, array(
"mtype" => "success",
"message" => $this->lang->line("added_new_event")
));
}
} else {
output_to_json($this, array(
"mtype" => "warning",
"message" => $this->lang->line("unknown_error")
));
exit();
}
}
} else {
show_404();
}
}
public function update_event_schedule($event_schedule_id=0) {
if($this->input->post() && isset($this->data["logged_in"]["user_id"]) && $event_schedule_id){
// Check Code selection duplicate
if ($this->input->post('event_id')) {
if ($this->event_registration_paid_event_model->is_paid_event($this->input->post('event_id'))) {
$this->unique_code_selection($_POST, $event_schedule_id);
}
// Remove unecessary key
unset($_POST['event_id']);
}
// store moderation settings data in a separate variable and remove them from main var
$ev_mod_settings = $this->extractEvSchedModData();
//check if total_avl_seat is undefined
$_POST['total_available_seat'] = (!isset($_POST['total_available_seat']) && empty($_POST['total_available_seat']))?0:$_POST['total_available_seat'];
//check if places dispondible is valid
$check_avl_places = $this->event_schedule_model->check_available_places($event_schedule_id, $this->input->post('total_available_seat'), $_POST['seat_feature']);
if($check_avl_places){
//check if valid wl quota
$check_wl_seats = $this->event_schedule_model->check_quota_wl($event_schedule_id, $this->input->post('total_quota_waiting_list_seat'));
if($check_wl_seats){
$update_e_schedule = $this->event_schedule_model->update_event_schedule($this->data["logged_in"]["user_id"], $this->input->post(), $event_schedule_id, $ev_mod_settings);
if($update_e_schedule) {
if ($this->input->post('event_status') == 'CANCEL' || $this->input->post('seat_feature') == 2) {
// if an event is cancelled on a combined seat event re add the available seats consumed
$update_combined_seats = $this->event_schedule_model->retrieve_combined_event_seats_from_cancelled($event_schedule_id);
}
output_to_json($this, array(
"mtype" => "success",
"message" => $this->lang->line("updated_event")
));
} else {
output_to_json($this, array(
"mtype" => "error",
"message" => $this->lang->line("unknown_error_on_saving")
));
}
} else {
output_to_json($this, array(
"mtype" => "warning",
"message" => "Invalid input, value is less than the total quota waiting list seats reserved.",
"mdetail" => array(array("field" => "total_quota_waiting_list_seat", "message" => "Invalid input, value is less than the total quota waiting list seats reserved."))
));
}
} else {
output_to_json($this, array(
"mtype" => "error",
"message" => "Invalid input, value is less than the total number of seats reserved.",
"mdetail" => array(array("field" => "total_available_seat", "message" => "Invalid input, value is less than the total number of seats reserved."))
));
}
} else {
show_404();
}
}
// multiple edit event schedule bo statuses
public function multi_update_evsched_status() {
if($this->input->post() && count($this->input->post('alL_status_ids')) > 0 && is_numeric($this->input->post('target_status'))){
$update_e_schedules = $this->event_schedule_model->multi_update_evsched_status($this->data["logged_in"]["user_id"], $this->input->post('target_status'), $this->input->post('alL_status_ids'));
if($update_e_schedules) {
foreach ($this->input->post('alL_status_ids') as $key => $id) {
$act_log = $this->user_activity_log_model->add_activity_log(array(
"description" => $this->lang->line("updated_event")." - event_schedule_id : ".$id,
"user_id" => $this->data["logged_in"]["user_id"],
"action" => "EDIT",
"table_origin" => "event_schedule",
"reference_id" => $id
));
}
if($act_log){
output_to_json($this, array(
"mtype" => "success",
"message" => $this->lang->line("updated_event")
));
} else {
output_to_json($this, array(
"mtype" => "warning",
"message" => $this->lang->line("unknown_error")
));
}
} else {
output_to_json($this, array(
"mtype" => "error",
"message" => $this->lang->line("unknown_error_on_saving")
));
}
} else {
show_404();
}
}
public function delete_event_schedule($event_schedule_id=0){
if($event_schedule_id && isset($this->data["logged_in"]["user_id"])){
//update also all event schedule status to deleted
$delete_e_schedule = $this->event_schedule_model->delete_event_schedule($event_schedule_id);
if($delete_e_schedule){
output_to_json($this, array(
"mtype" => "success",
"message" => $this->lang->line("event_deleted")
));
} else {
output_to_json($this, array(
"mtype" => "warning",
"message" => $this->lang->line("unknown_error")
));
}
} else {
show_404();
}
}
/**
* Save event moderation settings
*
* @param string $action = INSERT/UPDATE command
* @param integer $event_schedule_id = event schedule id
* @return void
* access private member
*/
private function extractEvSchedModData()
{
$moderationVariables = array();
/**
* Extract moderation settings from post
*/
//Unset 'Activer la Modération'
if (isAvailablePostKey($_POST, 'adapt_cur_mod_settings')) {
$moderationVariables['adapt_cur_mod_settings'] = ($_POST['adapt_cur_mod_settings'] == 'on' ? 1: 0);
unset($_POST['adapt_cur_mod_settings']);
}
if (isAvailablePostKey($_POST, 'moderationSwitchBtn')) {
$moderationVariables['mod_stat'] = ($_POST['moderationSwitchBtn'] == 'on' ? 1: 0);
unset($_POST['moderationSwitchBtn']);
}
//Unset 'Modération Flexible'
if (isAvailablePostKey($_POST, 'moderationSwitchFlexibleBtn')) {
$moderationVariables['flex_mod_stat'] = ($_POST['moderationSwitchFlexibleBtn'] == 'on' ? 1: 0);
unset($_POST['moderationSwitchFlexibleBtn']);
}
//Unset 'Désactivation de la modération [] heures '
if (isAvailablePostKey($_POST, 'flex_no_of_hours')) {
$moderationVariables['hrs_bef_event_closes'] = ($_POST['flex_no_of_hours']?:0);
unset($_POST['flex_no_of_hours']);
}
//Unset 'avant la date de fin de la réservation S'il reste % de places vacantes.'
if (isAvailablePostKey($_POST, 'flex_places_to_lift_moderation')) {
$moderationVariables['places_volume'] = ($_POST['flex_places_to_lift_moderation']?:0);
unset($_POST['flex_places_to_lift_moderation']);
}
/**
* End of collection for event_moderation_settings
*/
return $moderationVariables;
}
/**
* Check if item_code || code_selection is unique for every event_schedule
* Item code is only applicable to PAID EVENT
*
* @param $action add || edit
*/
private function unique_code_selection($data, $event_schedule_id = 0) {
if (!isset($data['item_code']) || empty($data['item_code'])) {
output_to_json($this, array(
"mtype" => "error",
"message" => "Code selection is required for PAID EVENT.",
"mdetail" => array(array("field" => "item_code", "message" => "Code selection is required"))
));
}
$result = $this->event_schedule_model->validate_code_selection($data['item_code'], $event_schedule_id);
if ($result) {
output_to_json($this, array(
"mtype" => "error",
"message" => "Code selection '".$data['item_code']."' already used by another event.",
"mdetail" => array(array("field" => "item_code", "message" => "Code selection already used by another event."))
));
}
}
public function has_duplicate_code_selection() {
if ($this->input->post('item_code')) {
$this->unique_code_selection($this->input->post(), 0);
}
output_to_json($this, array(
"mtype" => "success",
"message" => "No duplicate"
));
}
}