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.
1064 lines
50 KiB
1064 lines
50 KiB
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
|
|
|
|
use app\core\utils\Response;
|
|
use app\controllers\events\Event_workshop_informer;
|
|
use app\core\event\Event as WorkshopEvent;
|
|
class Event extends MY_Controller {
|
|
|
|
public function __construct()
|
|
{
|
|
//parent::__construct();
|
|
$this->my_parent_controller();
|
|
Response::handleSessionTimeout("bo", /*whitelisted route*/['workshop/register']);
|
|
//load language files
|
|
$this->load_language_backoffice();
|
|
$this->lang->load('backoffice/events', 'fr');
|
|
//origin folders
|
|
$this->hstroke_origin = origin_folders('hstroke');
|
|
$this->banner_origin = origin_folders('banner');
|
|
|
|
//banner and heartstroke folder
|
|
$this->banner_folder = banner_bundle();
|
|
$this->hstroke_folder = hstroke_bundle();
|
|
|
|
//load model
|
|
$this->load->model("event_model");
|
|
$this->load->model("event_file_attachment_model");
|
|
$this->load->model("user_activity_log_model");
|
|
$this->load->helper('htmlpurifier');
|
|
$this->workshop_event = new WorkshopEvent();
|
|
}
|
|
|
|
public function event_duplicate(){
|
|
if($this->input->post()) {
|
|
if($this->event_model->check_event_title($this->input->post('title'), "")){
|
|
output_to_json($this, array(
|
|
"mtype" => "error",
|
|
"message" => $this->lang->line("event_title_exist"),
|
|
"field" => "title"
|
|
));
|
|
}else{
|
|
output_to_json($this, array(
|
|
"mtype" => "success"
|
|
));
|
|
}
|
|
}
|
|
}
|
|
public function is_seats_available($event_schedule_id, $subs_type = 1){
|
|
$seats_available = $this->event_model->is_seats_available($event_schedule_id, $subs_type);
|
|
if($seats_available){
|
|
output_to_json($this, array(
|
|
"available" => 1
|
|
));
|
|
} else{
|
|
output_to_json($this, array(
|
|
"available" => 0
|
|
));
|
|
}
|
|
}
|
|
|
|
public function add_event(){
|
|
if($this->input->post()) {
|
|
if(!empty($this->input->post()["p_discount_apply"])){
|
|
$this->input->post()["discount_apply"] = $this->input->post()["p_discount_apply"];
|
|
unset($this->input->post()["p_discount_apply"]);
|
|
}
|
|
if(!empty($this->input->post()["p_discounted_price"])){
|
|
$this->input->post()["discounted_price"] = $this->input->post()["p_discounted_price"];
|
|
unset($this->input->post()["p_discounted_price"]);
|
|
}
|
|
if(!empty($this->input->post()["p_total_available_seat"])){
|
|
$this->input->post()["total_available_seat"] = $this->input->post()["p_total_available_seat"];
|
|
unset($this->input->post()["p_total_available_seat"]);
|
|
}
|
|
if(!empty($this->input->post()["p_rate"])){
|
|
$this->input->post()["rate"] = $this->input->post()["p_rate"];
|
|
unset($this->input->post()["p_rate"]);
|
|
}
|
|
if(!empty($this->input->post()["d_discount_apply"])){
|
|
$this->input->post()["discount_apply"] = $this->input->post()["d_discount_apply"];
|
|
unset($this->input->post()["d_discount_apply"]);
|
|
}
|
|
if(!empty($this->input->post()["d_discounted_price"])){
|
|
$this->input->post()["discounted_price"] = $this->input->post()["d_discounted_price"];
|
|
unset($this->input->post()["d_discounted_price"]);
|
|
}
|
|
if(!empty($this->input->post()["d_total_available_seat"])){
|
|
$this->input->post()["total_available_seat"] = $this->input->post()["d_total_available_seat"];
|
|
unset($this->input->post()["d_total_available_seat"]);
|
|
}
|
|
if(!empty($this->input->post()["d_rate"])){
|
|
$this->input->post()["rate"] = $this->input->post()["d_rate"];
|
|
unset($this->input->post()["d_rate"]);
|
|
}
|
|
/*if($this->event_model->check_event_title($this->input->post('title'), "")){
|
|
output_to_json($this, array(
|
|
"mtype" => "success",
|
|
"message" => $this->lang->line("event_title_exist"),
|
|
"mdetail" => array(array("field" => "title", "message" => $this->lang->line("event_title_exist")))
|
|
));
|
|
} else {*/
|
|
|
|
$new_event_data = array();
|
|
|
|
$new_event_data = $this->input->post();
|
|
if(isset($new_event_data['session_dates']))
|
|
$new_event_data['session_dates'] = json_decode($this->input->post('session_dates'));
|
|
|
|
if(isset($new_event_data['workshop_banner']) && !empty($new_event_data['workshop_banner'])) {
|
|
$new_event_data['workshop_banner'] = $this->add_event_banner($new_event_data['workshop_banner'], 1, 'banner');
|
|
}
|
|
$new_event = $this->check_boxes_is_checked($new_event_data);
|
|
//$new_event['workshop_banner'] = $this->add_event_banner();
|
|
// This is to solve the problem when saving href with target attribute. XSS removes the target=_blank.
|
|
|
|
if(isset($new_event_data['description']))
|
|
$new_event_data['description'] = html_purify($this->input->post('description', FALSE), 'comment');
|
|
|
|
if(isset($new_event_data['domain']))
|
|
$new_event_data['domain'] = $this->event_model->get_university_by_domain($new_event_data['domain']);
|
|
|
|
if(isset($new_event_data['workshop_author_description']))
|
|
$new_event_data['workshop_author_description'] = html_purify($this->input->post('workshop_author_description'), false, 'comment');
|
|
/* total_combined_seat and remaining_combined_seat values must be the same upon event creation */
|
|
// if(isset($new_event_data['seat_feature']) && !empty($new_event_data['seat_feature'])){
|
|
// if($new_event_data['seat_feature'] == 2){
|
|
// //update event dates with combined features
|
|
// $new_event_data["remaining_combined_seat"] = (isset($new_event_data['total_combined_seat']) && !empty($new_event_data['total_combined_seat']))?$new_event_data['total_combined_seat']:0;
|
|
// }
|
|
// }
|
|
|
|
UNSET($new_event_data["event_sponsor_files"], $new_event_data["event_attachment_files"], $new_event_data["event_attachment"], $new_event_data["speaker"], $new_event_data["event_speaker"], $new_event_data["event_sponsor"], $new_event_data["event_schedule"], $new_event_data["event-file-attachment"]);
|
|
|
|
//try to insert new event in event table
|
|
$event_id = $this->event_model->add_event($this->data["logged_in"]["user_id"], $new_event);
|
|
if($event_id) {
|
|
|
|
$act_log = $this->user_activity_log_model->add_activity_log(array(
|
|
"description" => $this->lang->line("added_new_event")." - ".$new_event_data['title'],
|
|
"user_id" => $this->data["logged_in"]["user_id"],
|
|
"action" => "ADD",
|
|
"table_origin" => "event",
|
|
"reference_id" => $event_id
|
|
));
|
|
|
|
//try to insert event schedules by bulk
|
|
$catch = $this->add_event_schedule_by_bulk($event_id, $new_event_data);
|
|
|
|
// //try to insert event speakers by bulk
|
|
$catch = $this->add_event_speaker_by_bulk($event_id);
|
|
|
|
// try to uplaod/insert event attachments
|
|
$catch = $this->add_event_sponsor_by_bulk($event_id);
|
|
|
|
$catch = $this->add_author_works($event_id);
|
|
|
|
$catch = $this->add_event_venue_photos($event_id);
|
|
//try to upload/insert event sponsors
|
|
$catch = $this->add_event_attachment_by_bulk($event_id);
|
|
|
|
$catch = $this->add_event_videos($event_id);
|
|
// if($new_event_data['use_different_address_per_date'] == 0){
|
|
// //reset address per date
|
|
// $this->load->model("event_schedule_model");
|
|
// $this->event_schedule_model->reset_address_per_date($event_id);
|
|
// }
|
|
|
|
if($act_log){
|
|
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"),
|
|
"error_log" => $act_log
|
|
));
|
|
}
|
|
} else {
|
|
output_to_json($this, array(
|
|
"mtype" => "error",
|
|
"message" => $this->lang->line("unknown_error_on_saving")
|
|
));
|
|
}
|
|
//} //end of event title name duplicate checker
|
|
//output_to_json($this, $new_event_data);
|
|
} else {
|
|
show_404();
|
|
}
|
|
}
|
|
|
|
//edit event information
|
|
public function update_event($event_id=0){
|
|
if($this->input->post() && $event_id) {
|
|
if($this->event_model->check_event_title($this->input->post('title'), $event_id)){
|
|
output_to_json($this, array(
|
|
"mtype" => "error",
|
|
"message" => $this->lang->line("event_title_exist"),
|
|
"mdetail" => array(array("field" => "title", "message" => $this->lang->line("event_title_exist")))
|
|
));
|
|
} else {
|
|
$new_event_data = array();
|
|
$is_combined_seat = false;
|
|
|
|
$new_event_data = $this->check_boxes_is_checked($this->input->post());
|
|
$this->load->model('event_registration_model');
|
|
$reservedSeats = $this->event_registration_model->count_total_reserved_seats($event_id);
|
|
$new_event_data['remaining_combined_seat'] = (int)$new_event_data['total_available_seat'] - $reservedSeats;
|
|
$event = $this->event_model->event_details_reserved($event_id);
|
|
// This is to solve the problem when saving href with target attribute. XSS removes the target=_blank.
|
|
$new_event_data['description'] = html_purify($this->input->post('description', FALSE), 'comment');
|
|
//update remaining seat when total_combined_seat is edited
|
|
if(isset($new_event_data['seat_feature']) && !empty($new_event_data['seat_feature'])){
|
|
if($new_event_data['seat_feature'] == 2){
|
|
$is_combined_seat = true;
|
|
|
|
$new_event_data = $this->recalculate_combined_seats($event_id, $new_event_data['total_combined_seat'], $new_event_data);
|
|
|
|
if((int) $new_event_data["total_combined_seat"] >= 1 && (int) $new_event_data["rem_com_seats"] == 0) {
|
|
$this->load->model('event_wait_list_model');
|
|
/**
|
|
* If the seat feature is combined, make sure to update the affected records in the WL
|
|
* reset the moderation of the subscribers in the WL so that once the event
|
|
* becomes available again the subscriber who are already
|
|
* in the WL can now reserve in the event regardless of the moderation
|
|
*/
|
|
$this->event_wait_list_model->resetModeratedReservationsFronWaitingListByEvent($event_id);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
UNSET($new_event_data["event_sponsor_files"], $new_event_data["event_attachment_files"], $new_event_data["event_attachment"], $new_event_data["speaker"], $new_event_data["event_speaker"], $new_event_data["event_sponsor"], $new_event_data["event_schedule"], $new_event_data["event-file-attachment"], $new_event_data['avl_com_seats'], $new_event_data['rem_com_seats']);
|
|
|
|
$update_event = $this->event_model->update_event($this->data["logged_in"]["user_id"], $new_event_data, $event_id);
|
|
//update attachments
|
|
// $this->event_file_attachment_model->attachment_type_action($event_id);
|
|
|
|
if($update_event) {
|
|
|
|
/* when switching from per date to combined seats and/or editing combined seats value,
|
|
all event dates depending on it must change its status too from locked || full to open or from open to locked || full
|
|
|
|
Here, total_comined_seat could also mean as remaining_combined_seat.
|
|
*/
|
|
if($is_combined_seat){
|
|
//update event dates with combined features
|
|
$this->load->model("event_schedule_model");
|
|
$this->event_schedule_model->update_combined_feature_event_dates($event_id, $new_event_data['remaining_combined_seat']);
|
|
}
|
|
if($new_event_data['use_different_address_per_date'] == 0){
|
|
//reset address per date
|
|
$this->load->model("event_schedule_model");
|
|
$this->event_schedule_model->reset_address_per_date($event_id);
|
|
}
|
|
|
|
$act_log = $this->user_activity_log_model->add_activity_log(array(
|
|
"description" => $this->lang->line("updated_event")." - ".$this->input->post('title'),
|
|
"user_id" => $this->data["logged_in"]["user_id"],
|
|
"action" => "EDIT",
|
|
"table_origin" => "event",
|
|
"reference_id" => $event_id
|
|
));
|
|
|
|
// Update event schedule/sessions
|
|
$new_event_data['session_dates'] = json_decode($this->input->post('session_dates'));
|
|
$this->update_event_schedule_by_bulk($event_id, $new_event_data);
|
|
$this->update_author_works($event_id);
|
|
$this->update_venue_photos($event_id);
|
|
$this->update_event_comments($event_id);
|
|
$this->update_event_videos($event_id);
|
|
if($act_log){
|
|
if($new_event_data['event_status'] == 'CANCEL' && $event->event_status != 'CANCEL') {
|
|
$this->workshop_event->sendEventUpdate($event, 4);
|
|
} else if($this->input->post('sendUpdateEmail')) {
|
|
if($this->input->post('editedDate')) {
|
|
$edited_date = json_decode($this->input->post('editedDate'));
|
|
$event->start_date_time = $edited_date->date;
|
|
}
|
|
$this->workshop_event->sendEventUpdate($event, 6);
|
|
// } else if($new_event_data['event_status'] == 'AVAILABLE' && $event->event_status == 'SOON') {
|
|
// $this->workshop_event->sendEventUpdate($event, 3);
|
|
}
|
|
|
|
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();
|
|
}
|
|
}
|
|
|
|
private function recalculate_combined_seats($event_id, $input_seats, $new_event_data){
|
|
$this->load->model('event_schedule_model');
|
|
$seats_info = $this->event_schedule_model->get_event_sched_combined_seats_info($event_id);
|
|
|
|
$add_to_total_combined_seat = $input_seats - $seats_info["rem_com_seats"];
|
|
$new_event_data['total_combined_seat'] = $seats_info["avl_com_seats"] + (($add_to_total_combined_seat<=0)?0:$add_to_total_combined_seat);
|
|
$new_event_data['remaining_combined_seat'] = $input_seats;
|
|
return $new_event_data;
|
|
}
|
|
|
|
//delete event information
|
|
public function delete_event($event_id=0){
|
|
if($this->input->post() && $event_id) {
|
|
$delete_event = $this->event_model->delete_event($event_id);
|
|
if($delete_event) {
|
|
$act_log = $this->user_activity_log_model->add_activity_log(array(
|
|
"description" => $this->lang->line("event_deleted")." - ".$event_id,
|
|
"user_id" => $this->data["logged_in"]["user_id"],
|
|
"action" => "DELETE",
|
|
"table_origin" => "event",
|
|
"reference_id" => $event_id
|
|
));
|
|
|
|
if ($act_log) {
|
|
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();
|
|
}
|
|
}
|
|
|
|
private function check_boxes_is_checked($new_event_data){
|
|
/***
|
|
Need to check if these fields are checked or not
|
|
****/
|
|
$new_event['title'] = !empty($new_event_data['title'])? $new_event_data['title']: NULL;
|
|
$new_event['city_location'] = !empty($new_event_data['city_location'])? $new_event_data['city_location']: NULL;
|
|
$new_event['address'] = !empty($new_event_data['address'])? $new_event_data['address']: NULL;
|
|
$new_event['event_type_id'] = !empty($new_event_data['event_type_id'])? $new_event_data['event_type_id']: NULL;
|
|
$new_event['event_category'] = !empty($new_event_data['event_category'])? $new_event_data['event_category']: NULL;
|
|
$new_event['rate'] = !empty($new_event_data['rate'])? $new_event_data['rate']: 0;
|
|
$new_event['number_of_sessions'] = !empty($new_event_data['number_of_sessions'])? $new_event_data['number_of_sessions']: 0;
|
|
$new_event['hours_per_session'] = !empty($new_event_data['hours_per_session'])? $new_event_data['hours_per_session']: 0;
|
|
$new_event['total_available_seat'] = !empty($new_event_data['total_available_seat'])? $new_event_data['total_available_seat']: 0;
|
|
$new_event['remaining_combined_seat'] = !empty($new_event_data['total_available_seat'])? $new_event_data['total_available_seat']: 0;
|
|
if($new_event_data['workshop_session'] == 'ENLIGNE') {
|
|
$new_event['start_date_time'] = date("Y-m-d H:i:s");
|
|
$new_event['end_date_time'] = date("Y-m-d H:i:s", strtotime('+5 years'));
|
|
$new_event['reservation_start_date'] = date("Y-m-d H:i:s");
|
|
$new_event['reservation_end_date'] = date("Y-m-d H:i:s");
|
|
} else {
|
|
$new_event['start_date_time'] = !empty($new_event_data['start_date_time']) ? $new_event_data['start_date_time'] : NULL;
|
|
$new_event['end_date_time'] = !empty($new_event_data['end_date_time']) ? $new_event_data['end_date_time'] : NULL;
|
|
$new_event['reservation_start_date'] = !empty($new_event_data['reservation_start_date']) ? $new_event_data['reservation_start_date'] : NULL;
|
|
$new_event['reservation_end_date'] = !empty($new_event_data['reservation_end_date']) ? $new_event_data['reservation_end_date'] : NULL;
|
|
}
|
|
$new_event['tag'] = $new_event_data['tag'];
|
|
$new_event['night_class_prices'] = !empty($new_event_data['night_class_prices']) ? $new_event_data['night_class_prices']: NULL;
|
|
$new_event['event_status'] = !empty($new_event_data['event_status']) ? $new_event_data['event_status'] : NULL;
|
|
$new_event['back_office_status'] = !empty($new_event_data['back_office_status']) ? $new_event_data['back_office_status'] : 0;
|
|
$new_event['location'] = $new_event_data['location'];
|
|
|
|
$new_event['description'] = (isset($new_event_data['description']) && !empty($new_event_data['description']))? html_purify($new_event_data['description'], false): "";
|
|
$new_event['workshop_author'] = (isset($new_event_data['workshop_author']) && !empty($new_event_data['workshop_author']))?$new_event_data['workshop_author']:NULL;
|
|
$new_event['author_label'] = (isset($new_event_data['author_label']) && !empty($new_event_data['author_label']))?$new_event_data['author_label']:NULL;
|
|
$new_event['workshop_event_type'] = (isset($new_event_data['workshop_event_type']) && !empty($new_event_data['workshop_event_type']))?$new_event_data['workshop_event_type']:NULL;
|
|
$new_event['workshop_author_description'] = (isset($new_event_data['workshop_author_description']) && !empty($new_event_data['workshop_author_description']))? html_purify($new_event_data['workshop_author_description'], false): "";
|
|
$new_event['is_favorite'] = (isset($new_event_data['is_favorite']) && !empty($new_event_data['is_favorite']))?1:0;
|
|
$new_event['workshop_banner'] = (isset($new_event_data['workshop_banner']) && !empty($new_event_data['workshop_banner']))?$new_event_data['workshop_banner']:NULL;
|
|
$new_event['is_multiple_reservation'] = (isset($new_event_data['is_multiple_reservation']) && !empty($new_event_data['is_multiple_reservation']))?1:0;
|
|
$new_event['is_multiple_waitlist_reservation'] = (isset($new_event_data['is_multiple_waitlist_reservation']) && !empty($new_event_data['is_multiple_waitlist_reservation']))?1:0;
|
|
$new_event['use_different_address_per_date'] = (isset($new_event_data['use_different_address_per_date']) && !empty($new_event_data['use_different_address_per_date']))?1:0;
|
|
$new_event['workshop_author_awards'] = $new_event_data['workshop_author_awards'];
|
|
$new_event['workshop_session'] = $new_event_data['workshop_session'];
|
|
$new_event['learning_outcome'] = $new_event_data['learning_outcome'];
|
|
$new_event['trailer'] = $new_event_data['trailer'];
|
|
$new_event['similar_events'] = $new_event_data['similar_events'];
|
|
$new_event['discount_apply'] = !empty($new_event_data['discount_apply']) ? $new_event_data['discount_apply'] : 0;
|
|
$new_event['discounted_price'] = !empty($new_event_data['discounted_price']) ? $new_event_data['discounted_price'] : 0;
|
|
return $new_event;
|
|
}
|
|
|
|
private function add_workshop_event_schedule($event_id=0, $new_event_data){
|
|
|
|
$this->load->model("event_schedule_model");
|
|
$this->event_schedule_model->add_workshop_event_schedule($this->data["logged_in"]["user_id"], $event_id, $new_event_data);
|
|
|
|
}
|
|
|
|
//add event schedule
|
|
private function add_event_schedule_by_bulk($event_id=0, $new_event_data){
|
|
$this->load->model("event_schedule_model");
|
|
if($new_event_data['workshop_session'] == 'ENLIGNE') {
|
|
$event_schedule[] = array(
|
|
"start_date_time" => date('Y-m-d'),
|
|
"end_date_time" => date('Y-m-d')
|
|
);
|
|
$result = $this->event_schedule_model->add_event_schedule($this->data["logged_in"]["user_id"], $event_id, $event_schedule, $new_event_data);
|
|
} else {
|
|
if($new_event_data['session_dates']){
|
|
|
|
$event_schedule = $new_event_data['session_dates'];
|
|
|
|
if(countVal($event_schedule) > 0){
|
|
|
|
$result = $this->event_schedule_model->add_event_schedule($this->data["logged_in"]["user_id"], $event_id, $event_schedule, $new_event_data);
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private function update_event_schedule_by_bulk($event_id, $event_data) {
|
|
if(!isset($event_data['session_dates']) || !$event_id) return false;
|
|
|
|
$this->load->model("event_schedule_model");
|
|
|
|
// Delete existing sessions for the event
|
|
$this->event_schedule_model->delete_event_schedules_by_event_id($event_id);
|
|
|
|
// And add the new updated sessions
|
|
if(countVal($event_data['session_dates']) > 0){
|
|
$this->event_schedule_model->update_event_schedule($this->data["logged_in"]["user_id"], $event_id, $event_data['session_dates'], $event_data);
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
//add event speaker
|
|
private function add_event_speaker_by_bulk($event_id){
|
|
|
|
if($this->input->post("event_speaker")){
|
|
|
|
$event_speaker = json_decode($this->input->post("event_speaker"), true);
|
|
|
|
if(countVal($event_speaker) > 0){
|
|
$errors = [];
|
|
$this->load->model("event_speaker_model");
|
|
$this->load->model("event_speaker_assignee_model");
|
|
foreach ($event_speaker as $key=>$speaker) {
|
|
$speaker["added_by"] = $this->data["logged_in"]["user_id"];
|
|
$speaker["speaker_id"] = $this->event_speaker_model->add_event_speaker($speaker, $event_id);
|
|
$speaker["event_id"] = $event_id;
|
|
$check = $this->event_speaker_assignee_model->add_new_speaker_assignee($speaker);
|
|
if(!$check){
|
|
array_push($errors, $speaker);
|
|
}
|
|
} //end of for each
|
|
return count($errors);
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
//add event sponsors
|
|
private function add_event_sponsor_by_bulk($event_id=0){
|
|
if( $event_id && isset($this->data["logged_in"]["user_id"])) {
|
|
|
|
if(!empty($_FILES['event_sponsor_files']) && $this->input->post("event_sponsor")) {
|
|
//load models
|
|
$this->load->model("event_sponsor_model");
|
|
$this->load->model("event_sponsor_assignee_model");
|
|
|
|
//files with errors
|
|
$errors = array();
|
|
|
|
foreach ($this->input->post("event_sponsor") as $key=>$value) {
|
|
|
|
$data = json_decode($value, true);
|
|
$uploaded = upload_event_files($this, "sponsors", $_FILES['event_sponsor_files'], $key);
|
|
|
|
if( sizeof($uploaded) > 0 ) {
|
|
|
|
$sponsor_id = $this->event_sponsor_model->add_event_sponsor(array(
|
|
"file" => $uploaded["file_name"],
|
|
"sponsor_name" => $data["file_setup"]["file_name"],
|
|
"file_size" => $uploaded["file_size"],
|
|
"added_by" => $this->data["logged_in"]["user_id"]
|
|
));
|
|
|
|
if( !$sponsor_id ) {
|
|
array_push($errors, array(
|
|
"file" => $data["file_setup"]["file_name"]
|
|
));
|
|
} else {
|
|
//assign sponsor to event
|
|
$sponsor_assignee_id = $this->event_sponsor_assignee_model->add_event_sponsor_assignee(
|
|
array(
|
|
"sponsor_id" => $sponsor_id,
|
|
"event_id" => $event_id,
|
|
"added_by" => $this->data["logged_in"]["user_id"]
|
|
)
|
|
);
|
|
|
|
if(!$sponsor_assignee_id){
|
|
array_push($errors, array(
|
|
"file" => $data["file_setup"]["file_name"]
|
|
));
|
|
}
|
|
}
|
|
}
|
|
} //end of loop
|
|
|
|
if( sizeof($errors) <=0 ) {
|
|
return true;
|
|
}
|
|
return false; //when errors encountered
|
|
}
|
|
// return false;
|
|
|
|
} else {
|
|
show_404();
|
|
}
|
|
}
|
|
|
|
//add workshop banner
|
|
private function add_event_banner($image, $count, $dir){
|
|
list($type, $data) = explode(';', $image);
|
|
list(, $data) = explode(',', $data);
|
|
|
|
$data = base64_decode($data);
|
|
$imageName = $count.time().'.png';
|
|
$origin = origin_folders($dir);
|
|
if( (is_dir($origin) && is_writable($origin)) ){
|
|
file_put_contents($origin.$imageName, $data);
|
|
}
|
|
return $imageName;
|
|
}
|
|
private function uploadConfig(string $fileName) {
|
|
return array(
|
|
'upload_path'=> FCPATH . "resources/images/frontoffice/banner/",
|
|
'allowed_types' => 'jpeg|jpg|png',
|
|
'file_name' => strtotime("now").'_'.$fileName
|
|
);
|
|
}
|
|
|
|
private function add_author_works($event_id) {
|
|
$this->load->model("event_author_works_model");
|
|
if($this->input->post("author_works") && !empty($this->input->post("author_works"))) {
|
|
$works = json_decode($this->input->post("author_works"));
|
|
$count=1;
|
|
foreach($works as $row) {
|
|
if(!empty($row->image)) {
|
|
if(substr($row->image, 0, 10) === "data:image") {
|
|
$row->image = $this->add_event_banner($row->image, $count, 'banner');
|
|
$count++;
|
|
} else {
|
|
$row->image = '';
|
|
}
|
|
}
|
|
$this->event_author_works_model->save_work(array_merge((array)$row, ['event_id' => $event_id]));
|
|
}
|
|
}
|
|
}
|
|
|
|
private function add_event_videos($event_id) {
|
|
$this->load->model("event_video_model");
|
|
try {
|
|
if($this->input->post("event_videos") && !empty($this->input->post("event_videos"))) {
|
|
$videos = json_decode($this->input->post("event_videos"));
|
|
foreach($videos as $row) {
|
|
$this->event_video_model->save_video(array_merge((array)$row, ['event_id' => $event_id]));
|
|
}
|
|
}
|
|
return true;
|
|
} catch(Exception $e) {
|
|
return $e;
|
|
}
|
|
}
|
|
|
|
private function delete_old_videos($newVideos, $oldVideos) {
|
|
$this->load->model("event_video_model");
|
|
foreach((array)$oldVideos as $oldRow) {
|
|
$isExists = false;
|
|
foreach($newVideos as $newRow) {
|
|
if($newRow == $oldRow->id) {
|
|
$isExists = true;
|
|
break;
|
|
}
|
|
}
|
|
if(!$isExists) {
|
|
$this->event_video_model->delete_video($oldRow->id);
|
|
}
|
|
}
|
|
}
|
|
|
|
private function update_event_videos($event_id) {
|
|
$this->load->model("event_video_model");
|
|
if($this->input->post("event_videos") && !empty($this->input->post("event_videos"))) {
|
|
$videos = json_decode($this->input->post("event_videos"));
|
|
$updatedIds = array();
|
|
$oldVideos = $this->event_video_model->get_videos_by_event_id($event_id);
|
|
foreach($videos as $row) {
|
|
//update if id exists
|
|
if($row->id > 0) {
|
|
array_push($updatedIds, $row->id);
|
|
$this->event_video_model->update_video($row->id, (array)$row);
|
|
} else {
|
|
$this->event_video_model->save_video(array_merge((array)$row, ['event_id' => $event_id]));
|
|
}
|
|
}
|
|
|
|
$this->delete_old_videos($updatedIds, $oldVideos);
|
|
}
|
|
}
|
|
|
|
private function add_event_venue_photos($event_id) {
|
|
$this->load->model("event_venue_photos_model");
|
|
if($this->input->post("venue_photos") && !empty($this->input->post("venue_photos"))) {
|
|
$photos = json_decode($this->input->post("venue_photos"));
|
|
$count=1;
|
|
foreach($photos as $row) {
|
|
if(!empty($row->photo)) {
|
|
if(substr($row->photo, 0, 10) === "data:image") {
|
|
$row->photo = $this->add_event_banner($row->photo, $count, 'events');
|
|
$count++;
|
|
} else {
|
|
$row->photo = '';
|
|
}
|
|
}
|
|
$this->event_venue_photos_model->save_photo(array_merge((array)$row, ['event_id' => $event_id]));
|
|
}
|
|
}
|
|
}
|
|
|
|
private function delete_old_works($newWorks, $oldWorks) {
|
|
$this->load->model("event_author_works_model");
|
|
foreach((array)$oldWorks as $oldRow) {
|
|
$isExists = false;
|
|
foreach($newWorks as $newRow) {
|
|
if($newRow == $oldRow->id) {
|
|
$isExists = true;
|
|
break;
|
|
}
|
|
}
|
|
if(!$isExists) {
|
|
$this->event_author_works_model->delete_work($oldRow->id);
|
|
}
|
|
}
|
|
}
|
|
|
|
private function update_author_works($event_id) {
|
|
$this->load->model("event_author_works_model");
|
|
if($this->input->post("author_works") && !empty($this->input->post("author_works"))) {
|
|
$works = json_decode($this->input->post("author_works"));
|
|
$updatedIds = array();
|
|
$oldWorks = $this->event_author_works_model->get_works_by_event_id($event_id);
|
|
$count=1;
|
|
foreach($works as $row) {
|
|
if(!empty($row->image)) {
|
|
if(substr($row->image, 0, 10) === "data:image") {
|
|
$row->image = $this->add_event_banner($row->image, $count, 'banner');
|
|
$count++;
|
|
} else if(substr($row->image, 0, 4) === "http") {
|
|
$exploded = explode("/", $row->image);
|
|
$filename = array_pop($exploded);
|
|
$row->image = $filename;
|
|
} else {
|
|
$row->image = NULL;
|
|
}
|
|
}
|
|
//update if id exists
|
|
if($row->id > 0) {
|
|
array_push($updatedIds, $row->id);
|
|
$this->event_author_works_model->update_work($row->id, (array)$row);
|
|
} else {
|
|
$this->event_author_works_model->save_work(array_merge((array)$row, ['event_id' => $event_id]));
|
|
}
|
|
}
|
|
|
|
$this->delete_old_works($updatedIds, $oldWorks);
|
|
}
|
|
}
|
|
|
|
private function delete_old_venue_photos($newPhotos, $oldPhotos) {
|
|
$this->load->model("event_venue_photos_model");
|
|
foreach((array)$oldPhotos as $oldRow) {
|
|
$isExists = false;
|
|
foreach($newPhotos as $newRow) {
|
|
if($newRow == $oldRow->id) {
|
|
$isExists = true;
|
|
break;
|
|
}
|
|
}
|
|
if(!$isExists) {
|
|
$this->event_venue_photos_model->delete_venue_photo($oldRow->id);
|
|
}
|
|
}
|
|
}
|
|
|
|
private function delete_event_comments($newComments, $oldComments) {
|
|
$this->load->model("event_comment_model");
|
|
foreach((array)$oldComments as $oldRow) {
|
|
$isExists = false;
|
|
foreach($newComments as $newRow) {
|
|
if($newRow == $oldRow->id) {
|
|
$isExists = true;
|
|
break;
|
|
}
|
|
}
|
|
if(!$isExists) {
|
|
$this->event_comment_model->delete_comment($oldRow->id);
|
|
}
|
|
}
|
|
}
|
|
|
|
private function update_venue_photos($event_id) {
|
|
$this->load->model("event_venue_photos_model");
|
|
if($this->input->post("venue_photos") && !empty($this->input->post("venue_photos"))) {
|
|
$photos = json_decode($this->input->post("venue_photos"));
|
|
$updatedIds = array();
|
|
$oldPhotos = $this->event_venue_photos_model->get_venue_photos_by_event_id($event_id);
|
|
$count=1;
|
|
foreach($photos as $row) {
|
|
if(!empty($row->photo)) {
|
|
if(substr($row->photo, 0, 10) === "data:image") {
|
|
$row->photo = $this->add_event_banner($row->photo, $count, 'events');
|
|
$count++;
|
|
} else if(substr($row->photo, 0, 4) === "http") {
|
|
$exploded = explode("/", $row->photo);
|
|
$filename = array_pop($exploded);
|
|
$row->photo = $filename;
|
|
} else {
|
|
$row->photo = NULL;
|
|
}
|
|
}
|
|
//update if id exists
|
|
if($row->id > 0) {
|
|
array_push($updatedIds, $row->id);
|
|
$this->event_venue_photos_model->update_venue_photo($row->id, (array)$row);
|
|
} else {
|
|
$this->event_venue_photos_model->save_photo(array_merge((array)$row, ['event_id' => $event_id]));
|
|
}
|
|
}
|
|
|
|
$this->delete_old_venue_photos($updatedIds, $oldPhotos);
|
|
}
|
|
}
|
|
|
|
private function update_event_comments($event_id=0) {
|
|
if($this->input->post("comments") && !empty($this->input->post("comments"))) {
|
|
$this->load->model("event_comment_model");
|
|
$comments = json_decode($this->input->post("comments"));
|
|
$oldComments = $this->event_comment_model->get_comments_by_event_id($event_id);
|
|
$updatedIds = array();
|
|
foreach($comments as $row) {
|
|
//add comment if id is null
|
|
if($row->id == null) {
|
|
$this->event_comment_model->save_comment(array_merge((array)$row, ['event_id' => $event_id]));
|
|
} else {
|
|
//update comment
|
|
array_push($updatedIds, (int)$row->id);
|
|
$this->event_comment_model->update_comment($row->id, (array)$row);
|
|
}
|
|
}
|
|
$this->delete_event_comments($updatedIds, $oldComments);
|
|
|
|
}
|
|
}
|
|
//add event attachments
|
|
private function add_event_attachment_by_bulk($event_id=0){
|
|
if($event_id && isset($this->data["logged_in"]["user_id"])){
|
|
|
|
if(!empty($_FILES['event_attachment_files']) && $this->input->post("event_attachment")) {
|
|
//load models
|
|
$this->load->model("event_sponsor_model");
|
|
$this->load->model("event_sponsor_assignee_model");
|
|
$this->load->model("event_file_attachment_model");
|
|
|
|
//files with errors
|
|
$errors = array();
|
|
|
|
foreach ($this->input->post("event_attachment") as $key=>$value) {
|
|
|
|
$data = json_decode($value, true);
|
|
$uploaded = upload_event_files($this, "events",$_FILES['event_attachment_files'], $key);
|
|
|
|
if( sizeof($uploaded) > 0 ) {
|
|
|
|
$audio_video = array();
|
|
|
|
//check for autoplay settings : catch if there is one
|
|
if( isset($data["file_setup"]["autoplay_vaudio"]) ){
|
|
|
|
$audio_video = array(
|
|
"autoplay_vaudio" => $data["file_setup"]["autoplay_vaudio"],
|
|
"preview_default_image" => (isset($data["file_setup"]["preview_default_image"]))?$data["file_setup"]["preview_default_image"]:0
|
|
);
|
|
}
|
|
|
|
$add_status = $this->event_file_attachment_model->add_event_attachment(array(
|
|
"file_name" => $uploaded["file_name"],
|
|
"event_id" => $event_id,
|
|
"mime_type" => $data["file_setup"]["mime_type"],
|
|
"description" => $data["file_setup"]["file_name"],
|
|
"display" => $data["display"] == 'home'? 0:1,
|
|
"attachment_type" => $data["attachment_type"],
|
|
"file_size" => $uploaded["file_size"],
|
|
"added_by" => $this->data["logged_in"]["user_id"]
|
|
), $audio_video);
|
|
|
|
if( !$add_status ) {
|
|
array_push($errors, array(
|
|
"file" => $data["file_setup"]["file_name"]
|
|
));
|
|
}
|
|
}
|
|
} //end of loop
|
|
|
|
if( sizeof($errors) <=0 ) {
|
|
return true;
|
|
}
|
|
return false; //if errors found
|
|
}
|
|
return false;
|
|
} else {
|
|
show_404();
|
|
}
|
|
}
|
|
|
|
public function event_information($event_id){
|
|
if($this->input->post() && $event_id) {
|
|
$this->load->model("event_schedule_model");
|
|
$this->load->model("event_author_works_model");
|
|
$this->load->model("event_venue_photos_model");
|
|
$this->load->model("event_comment_model");
|
|
$this->load->model("event_video_model");
|
|
|
|
$result = $this->event_model->event_information($event_id);
|
|
$result->similar_events = json_decode($result->similar_events);
|
|
$schedule = $this->event_schedule_model->get_all_event_schedule($event_id);
|
|
$works = $this->event_author_works_model->get_works_by_event_id($event_id);
|
|
$venuePhotos = $this->event_venue_photos_model->get_venue_photos_by_event_id($event_id);
|
|
$videos = $this->event_video_model->get_videos_by_event_id($event_id);
|
|
$comments = $this->event_comment_model->get_comments_by_event_id($event_id);
|
|
|
|
if($result->workshop_session == 'DISTANCE-PRESENTIEL') {
|
|
$ncp = json_decode($result->night_class_prices);
|
|
$prices = [
|
|
"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" => $ncp->presentiel->total_available_seat - $this->event_model->count_total_reserved_seats($event_id, 'soir-presentiel'),
|
|
"d_rate" => $ncp->distance->rate,
|
|
"d_total_available_seat" => $ncp->distance->total_available_seat,
|
|
"d_discounted_price" => $ncp->distance->discounted_price,
|
|
"d_discount_apply" => $ncp->distance->discount_apply,
|
|
"d_remaining_combined_seat" => $ncp->distance->total_available_seat - $this->event_model->count_total_reserved_seats($event_id, 'soir-distance')
|
|
];
|
|
$result = array_merge((array)$result, $prices);
|
|
}
|
|
$result = array_merge((array)$result, ["schedules" => (array)$schedule], ["works" =>(array)$works], ["venue_photos" =>(array)$venuePhotos], ["comments"=>(array)$comments], ["event_videos" =>(array)$videos]);
|
|
output_to_json($this, array(
|
|
"mtype" => "success",
|
|
"message" => $this->lang->line("event_info_retvd"),
|
|
"mdata" => $result
|
|
));
|
|
} else {
|
|
show_404();
|
|
}
|
|
}
|
|
|
|
public function event_info($event_id){
|
|
if(is_numeric($event_id)) {
|
|
$result = $this->event_model->event_information($event_id);
|
|
output_to_json($this, array(
|
|
"mtype" => "success",
|
|
"message" => $this->lang->line("event_info_retvd"),
|
|
"mdata" => $result
|
|
));
|
|
} else {
|
|
show_404();
|
|
}
|
|
}
|
|
|
|
public function preview_event($event_id=0) {
|
|
|
|
$this->load->model("user_model");
|
|
$this->load->model("event_schedule_model");
|
|
$this->load->model("event_speaker_assignee_model");
|
|
$this->load->model("event_sponsor_assignee_model");
|
|
$this->load->model("event_author_works_model");
|
|
$this->load->model("event_schedule_model");
|
|
$this->load->model("event_video_model");
|
|
if($this->input->post() && $event_id) {
|
|
|
|
$result = $this->event_model->event_details($event_id);
|
|
//$sched = $this->event_schedule_model->preview_get_all_event_schedule($event_id);
|
|
$sched = $this->event_schedule_model->list_event_schedule($event_id, 1, FALSE);
|
|
$speakers = $this->event_speaker_assignee_model->event_details_preview($event_id);
|
|
$sponsor = $this->event_sponsor_assignee_model->event_details_preview($event_id);
|
|
$author_works = $this->event_author_works_model->get_works_by_event_id($event_id);
|
|
$videos = $this->event_video_model->get_videos_by_event_id($event_id);
|
|
//$result->remaining_combined_seat = (int)$result->total_available_seat - (int) $registration;
|
|
$result->workshop_author_awards = json_decode($result->workshop_author_awards);
|
|
output_to_json($this, array(
|
|
"mtype" => "success",
|
|
"message" => $this->lang->line("event_info_retvd"),
|
|
"mdata" => $result,
|
|
"sched" => $sched,
|
|
"speakers" => $speakers,
|
|
"sponsor" => $sponsor,
|
|
"author_works" => $author_works,
|
|
"event_videos" => $videos
|
|
));
|
|
} else {
|
|
show_404();
|
|
}
|
|
|
|
}
|
|
|
|
|
|
public function list_event($export=0){
|
|
if($this->input->post() && isset($this->data["logged_in"]["user_id"])){
|
|
$list = $this->event_model->get_datatables($this->input->post(), $export, 0);
|
|
$data = array();
|
|
$row = array();
|
|
$x = $this->input->post("start");
|
|
|
|
foreach ($list as $event) {
|
|
$row["event_order"] = ++$x;
|
|
$row["event_title"] = $event->event_title;
|
|
$row["event_type"] = $event->event_type;
|
|
$row["city"] = $event->city;
|
|
$row["author"] = $event->author;
|
|
$row["date_created"] = $event->date_created;
|
|
$row["bostatus"] = $event->bostatus;
|
|
$row["event_category"] = $event->event_category;
|
|
$row["use_different_address_per_date"] = $event->use_different_address_per_date;
|
|
$row["action"] = array(
|
|
"event_id" => $event->event_id,
|
|
"event_schedule" => json_decode("[".$event->event_schedule."]",true),
|
|
"workshop_session" =>$event->workshop_session
|
|
);
|
|
// $row["bo_status"] = $event->bo_status;
|
|
array_push($data, $row);
|
|
}
|
|
$output = array(
|
|
"draw" => $_POST['draw'],
|
|
"recordsTotal" => $this->event_model->count_all($this->input->post(), $export, 0),
|
|
"recordsFiltered" => $this->event_model->count_filtered($this->input->post(), $export,0),
|
|
"data" => $data,
|
|
);
|
|
//output to json format
|
|
output_to_json($this, $output);
|
|
} else {
|
|
show_404();
|
|
}
|
|
}
|
|
|
|
public function typeahead_event(){
|
|
if($this->input->post("search")) {
|
|
output_to_json($this, $this->event_model->list_events_for_typeahead($this->input->post("search")));
|
|
}
|
|
}
|
|
|
|
private function unique_code_collection($event_schedules) {
|
|
$this->load->model("event_schedule_model");
|
|
foreach ($event_schedules as $index => $event_sched) {
|
|
if (!isset($event_sched['item_code']) || empty($event_sched['item_code'])) {
|
|
output_to_json($this, array(
|
|
"mtype" => "error",
|
|
"message" => "Code collection is required for PAID EVENT."
|
|
));
|
|
break;
|
|
}
|
|
|
|
$result = $this->event_schedule_model->validate_code_collection($event_sched['item_code']);
|
|
|
|
if ($result) {
|
|
output_to_json($this, array(
|
|
"mtype" => "error",
|
|
"message" => "Code collection already used by another event"
|
|
));
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
public function workshop_register_email() {
|
|
Event_workshop_informer::register($this);
|
|
}
|
|
|
|
public function similar_events() {
|
|
$category = $this->input->get('category');
|
|
$event_id = $this->input->get('event_id');
|
|
$events = $this->event_model->similar_events(isset($category)?$category: 0, isset($event_id)?$event_id: null);
|
|
if($events) {
|
|
output_to_json($this, array(
|
|
"mtype" => "success",
|
|
"message" => "Similar events",
|
|
"mdata" => $events
|
|
));
|
|
}
|
|
output_to_json($this, array(
|
|
"mtype" => "error",
|
|
"message" => "Similar events not found"
|
|
));
|
|
}
|
|
|
|
public function past_events() {
|
|
$events = $this->event_model->get_past_events();
|
|
if($events) {
|
|
output_to_json($this, array(
|
|
"mtype" => "success",
|
|
"message" => "Past events",
|
|
"mdata" => $events
|
|
));
|
|
}
|
|
output_to_json($this, array(
|
|
"mtype" => "error",
|
|
"message" => "Past events not found"
|
|
));
|
|
}
|
|
|
|
public function selected_past_events() {
|
|
$events = $this->event_model->get_selected_past_events();
|
|
if($events) {
|
|
output_to_json($this, array(
|
|
"mtype" => "success",
|
|
"message" => "Past events",
|
|
"mdata" => $events
|
|
));
|
|
}
|
|
output_to_json($this, array(
|
|
"mtype" => "error",
|
|
"message" => "Past events not found"
|
|
));
|
|
}
|
|
|
|
public function add_selected_past_events() {
|
|
|
|
$events = $this->event_model->add_selected_past_events(['events' => $this->input->post('events')]);
|
|
if($events) {
|
|
output_to_json($this, array(
|
|
"mtype" => "success",
|
|
"message" => "Past events",
|
|
"mdata" => $events
|
|
));
|
|
}
|
|
output_to_json($this, array(
|
|
"mtype" => "error",
|
|
"message" => "Past events not found"
|
|
));
|
|
}
|
|
}
|
|
|