'asc'); // default order public function __construct() { parent::__construct(); } public function disableOlderFileAttachment ($event_id, $mime_type, $attachment_type) { $max_num_event_file_attachments = 2; // Eg. image $file_type = explode('/', $mime_type)[0]; $existing_file_attachments = $this->db->where([ "event_id" => $event_id, "attachment_type" => $attachment_type, "status" => '1', ]) ->like('mime_type', $file_type) ->order_by('date_added', 'DESC') ->get('event_file_attachment'); $last_active_file_attachment = $existing_file_attachments->num_rows() > 0 ? $existing_file_attachments->row() : null; // Exit the function if existing_file_attachments has not reached the max if ($existing_file_attachments->num_rows() < $max_num_event_file_attachments) return $last_active_file_attachment; // Get the oldest active file attachment with same event_id, attachment_type, and mime_type $oldest_active_file_attachment = $this->db->where([ "event_id" => $event_id, "attachment_type" => $attachment_type, "status" => '1', ]) ->like('mime_type', $file_type) ->order_by('date_added', 'ASC') ->get('event_file_attachment')->row(); // Disable status $this->db->set('status', '0') ->where(['attachment_id' => $oldest_active_file_attachment->id]) ->update('event_file_attachment'); return $last_active_file_attachment; } /*private function _get_datatables_query($data_source, $event_id){ $this->db->select(" attachment_id, event_id, description, file_name, file_size, mime_type, attachment_type") ->select("(CASE WHEN added_by IS NULL THEN 'Unknown' ELSE (SELECT CONCAT(first_name,' ',last_name) as added_by FROM user WHERE user_id = added_by) END) AS added_by", FALSE) // ->select("(SELECT CONCAT(efas.setup_id,',',efas.autoplay_vaudio,',', efas.preview_default_image) as file_setup // FROM event_file_attachment_setup efas // WHERE efas.attachment_id = attachment_id // ) AS file_setup", FALSE) // ->select("(SELECT // GROUP_CONCAT(CONCAT('{\"setup_id\":\"',efas.setup_id, // '\", \"autoplay_vaudio\":\"',efas.autoplay_vaudio, // '\", \"preview_default_image\":\"',efas.preview_default_image,'\"}' // ) ORDER BY efas.attachment_id SEPARATOR ',') as file_setup // FROM event_file_attachment_setup efas // WHERE efas.attachment_id = attachment_id // ) AS file_setup", FALSE) ->select("DATE_FORMAT(date_added, '%d/%m/%Y %Hh%i') AS date_added", FALSE) ->from("event_file_attachment") ->where("event_id", $event_id) // ->where("status IN(1,2)"); ->where("status", 1); $i = 0; foreach ($this->column_search as $item) {// loop column if ($data_source['search']['value']) { // if datatable send POST for search if ($i === 0) { // first loop $this->db->like($item, $data_source['search']['value']); } else { $this->db->or_like($item, $data_source['search']['value']); } } $i++; } if(isset($data_source['order'])) { // here order processing if(isset($data_source['order']['0']['dir']) && !empty($data_source['order']['0']['dir'])) { $this->db->order_by($this->column_order[$data_source['order']['0']['column']], $data_source['order']['0']['dir']); } } else if(isset($this->order)) { $order = $this->order; $this->db->order_by(key($order), $order[key($order)]); } } public function get_datatables($data_source, $event_id){ $this->_get_datatables_query($data_source, $event_id); if($data_source['length'] != -1) $this->db->limit($data_source['length'], $data_source['start']); $query = $this->db->get(); return $query->result(); } public function count_filtered($data_source, $event_id){ $this->_get_datatables_query($data_source, $event_id); $query = $this->db->get(); return $query->num_rows(); } public function count_all($data_source, $event_id){ $this->_get_datatables_query($data_source, $event_id); return $this->db->count_all_results(); } public function delete_event_attachment($attachment_id=0){ if($attachment_id){ $this->db->where("attachment_id", $attachment_id); $this->db->update("event_file_attachment", array("status" => 3)); return $this->db->affected_rows(); } else { return false; } } */ public function _reset_attachment($event_id){ $this->db->where("status" , 2); $this->db->where("event_id", $event_id); $this->db->update("event_file_attachment", array("status" => 0)); //set deleted image( status = 3) to 0 status $this->update_event_attachment_status("event_id",$event_id,"event_file_attachment",["status" => 0], "status", 3); } public function attachment_type_action($event_id){ //update new attachments $this->event_file_attachment_model->update_attachment_status_by_type($event_id); //set deleted image( status = 3) to 0 status $this->update_event_attachment_status("event_id",$event_id,"event_file_attachment",["status" => 0], "status", 3); } public function _exclude_from_update($event_id,$attachment_type,$mime_type){ $result = $this->db->query(" SELECT attachment_id FROM event_file_attachment WHERE event_id = ? AND attachment_type = ? AND INSTR(`mime_type`, ?) > 0 ORDER BY attachment_id DESC LIMIT 1 ", array($event_id, $attachment_type, $mime_type)); if ($result->num_rows() > 0) { $ret = $result->row(); return $ret->attachment_id; } } public function update_attachment_status_by_type($event_id){ //update attachment 1 if( $this->event_file_attachment_model->get_attachment_status_by_type($event_id, 1,'image') ){ $this->db->where("attachment_type",1); $this->db->where("INSTR(`mime_type`, 'image') > 0"); $this->db->where("status" , 2); $this->db->where("event_id", $event_id); $this->db->update("event_file_attachment", array("status" => 1)); $this->db->where("attachment_id !=",$this->_exclude_from_update($event_id,1,'image')); $this->db->where("attachment_type",1); $this->db->where("INSTR(`mime_type`, 'image') > 0"); $this->db->where("status" , 1); $this->db->where("event_id", $event_id); $this->db->update("event_file_attachment", array("status" => 3)); } //update attachment 2 = image if( $this->event_file_attachment_model->get_attachment_status_by_type($event_id, 2,'image') ){ $this->db->where("attachment_type",2); $this->db->where("INSTR(`mime_type`, 'image') > 0"); $this->db->where("status" , 2); $this->db->where("event_id", $event_id); $this->db->update("event_file_attachment", array("status" => 1)); $this->db->where("attachment_id !=",$this->_exclude_from_update($event_id,2,'image')); $this->db->where("attachment_type",2); $this->db->where("INSTR(`mime_type`, 'image') > 0"); $this->db->where("status" , 1); $this->db->where("event_id", $event_id); $this->db->update("event_file_attachment", array("status" => 3)); } //update attachment 2 = audio if( $this->event_file_attachment_model->get_attachment_status_by_type($event_id, 2, 'audio') ){ $this->db->where("attachment_type",2); $this->db->where("INSTR(`mime_type`, 'audio') > 0"); $this->db->where("status" , 2); $this->db->where("event_id", $event_id); $this->db->update("event_file_attachment", array("status" => 1)); $this->db->where("attachment_id !=",$this->_exclude_from_update($event_id,2,'audio')); $this->db->where("attachment_type",2); $this->db->where("INSTR(`mime_type`, 'audio') > 0"); $this->db->where("status" , 1); $this->db->where("event_id", $event_id); $this->db->update("event_file_attachment", array("status" => 3)); } //update attachment 2 = video if( $this->event_file_attachment_model->get_attachment_status_by_type($event_id, 2, 'video') ){ $this->db->where("attachment_type",2); $this->db->where("INSTR(`mime_type`, 'video') > 0"); $this->db->where("status" , 2); $this->db->where("event_id", $event_id); $this->db->update("event_file_attachment", array("status" => 1)); $this->db->where("attachment_id !=",$this->_exclude_from_update($event_id,2,'video')); $this->db->where("attachment_type",2); $this->db->where("INSTR(`mime_type`, 'video') > 0"); $this->db->where("status" , 1); $this->db->where("event_id", $event_id); $this->db->update("event_file_attachment", array("status" => 3)); } } public function get_attachment_status_by_type($event_id,$attachment_type,$mime_type){ $and = ""; if($mime_type != false) $and ="AND INSTR(`mime_type`, '".$mime_type."') > 0 "; $result = $this->db->query(" SELECT attachment_id,status FROM event_file_attachment WHERE event_id = ? AND status = 1 AND attachment_type = ? $and ", array($event_id, $attachment_type)); if ($result->num_rows() > 0) return true; else return false; } public function get_status_type($event_id, $event_file_attachment,$status,$attachment_type,$mime_type){ $and = ""; if($mime_type != false) $and ="AND INSTR(`mime_type`, '".$mime_type."') > 0 "; $result = $this->db->query(" SELECT status FROM $event_file_attachment WHERE event_id = ? AND status = ? AND attachment_type = ? $and ", array($event_id, $status, $attachment_type)); return ( ($result->num_rows() > 0) ? 2 : 1 ); } private function _get_datatables_query($data_source,$event_id){ $fields = "attachment_id, event_id, description, display, file_name, file_size, mime_type, attachment_type, status, (CASE WHEN added_by IS NULL THEN 'Unknown' ELSE (SELECT CONCAT(first_name,' ',last_name) as added_by FROM user WHERE user_id = added_by) END) AS added_by, DATE_FORMAT(date_added, '%d/%m/%Y %Hh%i') AS date_added"; $_query = ""; $_search = ""; $_ordey_by = ""; $data = array(); $select = ""; $_query = " SELECT ".$fields." FROM event_file_attachment WHERE event_id = ".$this->db->escape($event_id)." AND attachment_type = 1 AND status =". $this->db->escape($this->get_status_type($event_id, "event_file_attachment" , 2,1,false))." UNION SELECT ".$fields." FROM event_file_attachment WHERE event_id = ".$this->db->escape($event_id)." AND attachment_type = 2 AND INSTR(`mime_type`, 'image') > 0 AND status =". $this->db->escape($this->get_status_type($event_id, "event_file_attachment" , 2,2,'image'))." UNION SELECT ".$fields." FROM event_file_attachment WHERE event_id = ".$this->db->escape($event_id)." AND attachment_type = 2 AND INSTR(`mime_type`, 'audio') > 0 AND status =". $this->db->escape($this->get_status_type($event_id, "event_file_attachment" , 2,2,'audio'))." UNION SELECT ".$fields." FROM event_file_attachment WHERE event_id = ".$this->db->escape($event_id)." AND attachment_type = 2 AND INSTR(`mime_type`, 'video') > 0 AND status =". $this->db->escape($this->get_status_type($event_id, "event_file_attachment" , 2,2,'video'))." "; $_ordey_by .= " ORDER BY ".key($this->order)." ".$this->order[key($this->order)]; return array("query"=>$_query.$_search.$_ordey_by, "data" =>$data); } public function get_datatables($data_source,$event_id){ $_query = $this->_get_datatables_query($data_source,$event_id); if($data_source['length'] != -1){ $_query["query"] .= " LIMIT ".$data_source['start'].", ".$data_source['length']; } return $this->db->query($_query["query"], $_query["data"])->result(); } public function count_filtered($data_source,$event_id){ $_query = $this->_get_datatables_query($data_source,$event_id); return $this->db->query($_query["query"], $_query["data"])->num_rows(); } public function count_all($data_source,$event_id){ $_query = $this->_get_datatables_query($data_source,$event_id); return $this->db->query($_query["query"], $_query["data"])->num_rows(); } public function update_event_attachment_status($field_id,$id,$table,$data,$field_status,$status_where){ $this->db->where($field_id, $id); $this->db->where($field_status, $status_where); $this->db->update($table, $data); return $this->db->affected_rows(); } public function disable_other_attachments($event_id, $new_file_mime, $attachment_type, $action = 'add'){ if ($action == 'add') { if (preg_match("[audio]", $new_file_mime)) { $this->db->not_like('mime_type ', "image"); } elseif (preg_match("[image]", $new_file_mime)) { $this->db->not_like('mime_type ', "audio"); } } else { if (preg_match("[audio]", $new_file_mime)) { $this->db->not_like('mime_type ', "image"); } elseif (preg_match("[image]", $new_file_mime)) { $this->db->not_like('mime_type ', "audio"); } } $this->db->where('event_id', $event_id); $this->db->where('attachment_type', $attachment_type); $this->db->update( 'event_file_attachment', array( 'status' => 0 ) ); return $this->db->affected_rows(); } public function get_events_list_export($data_source,$event_id){ $this->_get_datatables_query($data_source, $event_id); $query = $this->db->get(); $res = $query->result(); return $res; } public function add_event_attachment($data, $audio_video=array()){ $this->db->insert("event_file_attachment", $data); $attachment_id = $this->db->insert_id(); if( $attachment_id ){ //if there is audio or video setup, add an entry to table: event_file_attachment_setup if(sizeof($audio_video) > 0){ $audio_video["attachment_id"] = $attachment_id; $this->db->insert("event_file_attachment_setup", $audio_video); return $this->db->insert_id(); } return $attachment_id; } return false; } public function update_event_attachment($attachment_id=0, $data=array(), $audio_video=array()){ if($attachment_id && sizeof($data) > 0){ $this->db->where("attachment_id", $attachment_id); $this->db->update("event_file_attachment", $data); $updated = $this->db->affected_rows(); //we need to update the file attachment setup $this->update_file_attachment_setup($attachment_id, $audio_video); return $updated; } else { return false; } } private function update_file_attachment_setup($attachment_id, $audio_video =array()){ $this->db->select("*"); $this->db->where("attachment_id", $attachment_id); $result = $this->db->get("event_file_attachment_setup"); if($result->num_rows() > 0) { if( sizeof($audio_video) >0 ) { $this->db->where("attachment_id", $attachment_id); $this->db->update("event_file_attachment_setup", $audio_video); } else { //delete file attachment setup entry $this->db->where("attachment_id", $attachment_id); $this->db->delete("event_file_attachment_setup"); } } else if( sizeof($audio_video) > 0 ) { $audio_video["attachment_id"] = $attachment_id; $this->db->insert("event_file_attachment_setup", $audio_video); } } public function delete_event_attachment($event_id,$attachment_type,$mime_type,$attachment_id){ if($event_id && $attachment_type && $mime_type){ $this->db->where("attachment_id", $attachment_id); /*$this->db->where("event_id", $event_id); $this->db->where("attachment_type", $attachment_type); $this->db->where("INSTR(`mime_type`, '".$mime_type."') > 0");*/ $this->db->update("event_file_attachment", array("status" => 0)); return $this->db->affected_rows(); } else { return false; } } public function list_event_attachment($event_id=0, $attachment_type){ if($event_id){ return ($this->db->query("SELECT efa.attachment_id, efa.file_name, efa.mime_type, efa.description, efa.attachment_type FROM event_file_attachment efa -- LEFT JOIN event_file_attachment_setup efas ON efas.attachment_id = efa.attachment_id WHERE efa.event_id = ? AND efa.attachment_type = ? -- AND efa.status NOT IN(0) AND efa.status NOT IN(0,2) ORDER BY efa.mime_type ASC", array($event_id, $attachment_type)))->result(); } return array(); } }