/*
For event attachments for pictures and .mp3 audio and video
*/
var event_file_attachment_dropdown = $("#event-file-attachment");
var event_attachment = (function ($, window, jQuery) {
return {
"getForm" : function(){
var form = $("form#eventForm");
return { obj : form, data : form.data("event_attachment")};
},
"model" : {
"indexs" : function(){
return {
"display": "",
"attachment_id" : null,
"attachment_type" :"",
"file_preview" : null,
"description" : "",
"file_setup" : {
"setup_id" : null,
"mime_type" : "",
"file_name" : ""
// ,"autoplay_vaudio" : 0, //autoplay audio or video in HP
// "preview_default_image" : 1 //use default image in HP or use custom image
}
};
},
"init" : function(){
var eventForm = event_attachment.getForm();
(eventForm.obj).data("event_attachment", {
"grid" : [],
"uploadedFiles" : []
});
//initialize grid
event_attachment.grid.init("addEvent");
},
"action" : {
"client" : { //means local storage
"reset" : function() {
(event_attachment.getForm().obj).removeData("event_attachment");
events.set_vars({"event_file_attachment_list": []});
},
"generate_tmp_id" : function(){
var eventForm = event_attachment.getForm(),
len = (eventForm.data.grid).length,
min = ((len-2) <=0)?0:(len-2),
max = len+1;
return Math.random() * (max - min) + min;
},
fill_up_indexs : function(action, uploadedFiles, indexs, display){
//create temporary id for edit and delete purposes, happens when sorting is activated
if(action == "client"){
indexs["display"] = display
indexs["attachment_id"] = event_attachment.model.action.client.generate_tmp_id();
indexs["file_preview"] = uploadedFiles;
indexs["description"] = 'File name : '+uploadedFiles.name+'
File size : '
+(uploadedFiles.size / (1024*1024)).toFixed(2)+'MB';
} else {
delete indexs["attachment_id"];
delete indexs["display"];
delete indexs["description"];
}
indexs["attachment_type"] = uploadedFiles.atype;
var opt = {
"mime_type" : uploadedFiles.type,
"file_name" : uploadedFiles.name
};
if(uploadedFiles.type.indexOf("audio") != -1){
opt["autoplay_vaudio"] = 0; //disable autoplay
opt["preview_default_image"] = 1;
} else if(uploadedFiles.type.indexOf("video") != -1){
opt["autoplay_vaudio"] = 0; //disable autoplay
}
indexs["file_setup"] = opt;
return indexs;
},
"add" : function(uploadedFiles) {
var eventForm = event_attachment.getForm();
//get all data
$.map(uploadedFiles, function(value, key){
var indexs = event_attachment.model.indexs();
let display = 'home'
if(eventForm.data.grid.length > 0) {
if(eventForm.data.grid[0].display == 'home')
display = 'details'
}
//push new data from temp. datastore
indexs = event_attachment.model.action.client.fill_up_indexs("client", uploadedFiles[key], indexs, display);
//now, update datastore
(eventForm.data.grid).push(indexs);
(eventForm.data.uploadedFiles).push(uploadedFiles[key]);
(eventForm.obj).data("event_attachment", eventForm.data);
//automatically add new entry to datatable.
//we do not reload the entire datable when adding or editing, just the row being edited
(events.get_vars().event_file_attachment_list)[0].row.add(indexs).draw();
});
},
"delete" : function(td, row){
var eventForm = event_attachment.getForm();
var tobe_deleted_row = (events.get_vars().event_file_attachment_list)[0].row(row).data();
// delete a row or an element from the datastore
$.map(eventForm.data.grid, function(value, key){
if(typeof value!= "undefined"){
// console.log(value);
if(tobe_deleted_row.attachment_id == value.attachment_id){
eventForm.data.grid.splice(key, 1);
eventForm.data.uploadedFiles.splice(key, 1);
return false;
}
}
});
//now, update datastore
(eventForm.obj).data("event_attachment", eventForm.data);
//then, reload grid
event_attachment.grid.reload("addEvent");
},
"update" : function(uploadedFiles, row){
var eventForm = event_attachment.getForm();
var edited_row = (events.get_vars().event_file_attachment_list)[0].row(row).data();
var indexs = event_attachment.model.indexs();
//update specific event speaker from the datastore
$.map(eventForm.data.grid, function(value, key){
if(typeof value!= "undefined"){
if(edited_row.attachment_id == value.attachment_id){
indexs = event_attachment.model.action.client.fill_up_indexs("client", uploadedFiles[0], indexs);
eventForm.data.grid[key] = indexs;
eventForm.data.uploadedFiles[key] = uploadedFiles[0];
return false;
}
}
});
//now, update datastore
(eventForm.obj).data("event_attachment", eventForm.data);
//then, reload grid
event_attachment.grid.reload("addEvent");
},
/*clean up event data before saving*/
"clean_event_attachment_data" : function(formData){
var eventForm = event_attachment.getForm();
//clean datastore before submitting to server
if(eventForm.data.grid.length > 0){
$.map(eventForm.data.grid, function(value, key){
if(typeof value!= "undefined"){
//delete eventForm.data.grid[key]["display"];
delete eventForm.data.grid[key]["attachment_id"];
delete eventForm.data.grid[key]["file_preview"];
delete eventForm.data.grid[key]["description"];
formData.append("event_attachment[]", JSON.stringify(eventForm.data.grid[key]));
formData.append("event_attachment_files[]", eventForm.data.uploadedFiles[key]);
}
});
} else {
formData.append("event_attachment", []);
formData.append("event_attachment_files", []);
}
return formData;
}
},
"server" : {
"add" : function(uploadedFiles){
var url_param = events.get_vars().event_id;
var indexs = event_attachment.model.indexs();
var form_data ={"grid" : [], "uploadedFiles": []};
var http_data = new FormData();
//push new data to server
$.map(uploadedFiles, function(value, key){
if(typeof value!= "undefined"){
var fields = indexs;
fields = event_attachment.model.action.client.fill_up_indexs("server", uploadedFiles[key], fields);
delete fields["display"];
delete fields["file_preview"];
delete fields["attachment_id"];
delete fields["description"];
http_data.append("info[]", JSON.stringify(fields));
http_data.append("uploadedFiles[]", uploadedFiles[key]);
}
});
var http_result = events.server.request("add", "add_event_attachment", http_data, url_param);
http_result.success(function(result){
if(app.isalive(result)) {
events.server.reset("add", result);
//then, reload grid
event_attachment.grid.reload("editEvent");
}
}).error(function(xhr){
console.log(xhr);
});
},
"update" : function(uploadedFiles, row){
var edited_row = (events.get_vars().event_file_attachment_list)[0].row(row).data();
var http_data = new FormData();
var indexs = event_attachment.model.indexs();
indexs = event_attachment.model.action.client.fill_up_indexs("server", uploadedFiles[0], indexs);
//get the original file for unlinking process on server side
indexs["file_preview"] = edited_row.file_preview;
http_data.append("info", JSON.stringify(indexs));
http_data.append("uploadedFiles", uploadedFiles[0]);
var url_param = events.get_vars().event_id+"_"+edited_row.attachment_id+"_"+edited_row.status;//edited_row.attachment_id;
var http_result = events.server.request("edit", "update_event_attachment", http_data, url_param);
http_result.success(function(result){
if(app.isalive(result)) {
events.server.reset("edit", result);
//then, reload grid
event_attachment.grid.reload("editEvent");
}
}).error(function(xhr){
console.log(xhr);
});
},
"delete" : function(row){
var edited_row = (events.get_vars().event_file_attachment_list)[0].row(row).data();
var mime_type = edited_row.mime.replace("/", ".");
var url_param = events.get_vars().event_id+"_"+edited_row.attachment_type+"_"+edited_row.attachment_id+"_"+mime_type;//edited_row.attachment_id;
var http_data = new FormData();
http_data.append("file_name", edited_row.file_preview);
var http_result = events.server.request("delete", "delete_event_attachment", http_data, url_param);
http_result.success(function(result){
if(app.isalive(result)) {
events.server.reset("delete", result);
//then, reload grid
event_attachment.grid.reload("editEvent");
}
}).error(function(xhr){
console.log(xhr);
});
}
}
}
},
"grid" : {
init : function(action){
try{
//check datatable is initialzed
var table;
if (action == "addEvent") {
table = $("#event_file_attachment_list").DataTable($.extend(event_attachment.grid.opt(action), event_attachment.grid.extra(action))).clear();
} else{
var result = localStorage.getItem("event_attachment");
if(result != null){
table = $("#event_file_attachment_list").DataTable().ajax.url(app.get_vars().baseurl + "list_event_attachment/" + ((events.get_vars().event_id !=null && typeof events.get_vars().event_id != "undefined" )?events.get_vars().event_id:0)).load();
}else{
localStorage.setItem("event_attachment", "initialzed");
table = $("#event_file_attachment_list").DataTable($.extend(event_attachment.grid.opt(action), event_attachment.grid.extra(action)));
}
}
event_attachment.grid.init_vars(table, action);
}catch(e){
console.log(e);
}
},
"init_vars" : function(table, action){
//set table instance in the global variable along with the action [addEvent/editEvent]
events.set_vars({"event_file_attachment_list": [(typeof table!="undefined")?table:null, action]});
},
reload : function(action){
var table = $("#event_file_attachment_list").DataTable();
if(action == "addEvent"){
var eventForm = event_attachment.getForm();
if((eventForm.data.grid).length != 0) {
table.clear().draw();
$.map(eventForm.data.grid, function (value) {
table.row.add(value).columns.adjust().draw();
});
} else {
table.clear().columns.adjust().draw();
}
} else {
table.ajax.reload(null, false);
}
//displayHack : recalculate the dimensions of event_file_attachment_list table/grid
// events.get_vars().event_file_attachment_list[0].columns.adjust().draw();
},
"opt" : function(action){
return {
"autoWidth": false,
"sDom": '<"toolbar">',
"destroy": true,
"responsive": true,
"searching": false,
"processing": true, //Feature control the processing indicator
"order" : [1, "asc"],
"oLanguage": fr_onload_lang.oLanguage,
"columns": [
{"data": "attachment_id", defaultContent: null, "orderable": false, "visible" : false,
"render" : function(data, type, full, meta){
return data;
}
},
{"data": "display", defaultContent: "", "orderable": false,
"render" : function(data, type, full, meta){
return data;
}
},
{"data": "attachment_type", defaultContent: "", "orderable": false,
"render" : function(data, type, full, meta){
if(data == 1) return "Joindre photo Event";
else return "Joindre photo Event detail";
}
},
{"data" : "file_preview", "defaultContent": null, "orderable" : false,
"render" : event_attachment.upload.render
},
{data: 'description', "orderable": false,
"render": event_attachment.modal.show_file_setup
},
{"data": "file_setup", defaultContent: null, "orderable": false,
"render": event_attachment.grid.action
}
],
"columnDefs": [
{ "targets" : [1], "width" : "25%"},
{"targets": [2], "width": "18%"},
{"targets": [3], "width": "40%"},
{"targets": [4], "width": "10%"}
],
"fnRowCallback": function(nRow, aData, iDisplayIndex, iDisplayIndexFull) {
// if(typeof aData.file_preview == "object"){
// $(nRow).addClass("row_selected");
// }
},
"drawCallback": function( settings ) {
var attachment_type = 1//parseInt(event_file_attachment_dropdown.val());
if(attachment_type ==1){
event_attachment.upload.validate.disable_browse_file(attachment_type);
} else {
event_attachment.upload.validate.disable_browse_file(attachment_type);
}
},
initComplete: function(){
//set table instance in the global variable along with the action [addEvent/editEvent]
event_attachment.grid.init_vars($("#event_file_attachment_list").DataTable(), action);
$("#event_file_attachment_list_wrapper div.toolbar")
.html('');
//disable upload button on init
event_attachment.upload.validate.disable_browse_file(1);
}
};
},
"extra" : function(action){
if(action == "editEvent"){
return {
"serverSide": true, //Feature control DataTables' server-side processing mode.
"ajax": { // Load data for the table's content from an Ajax source
"url": app.get_vars().baseurl + "list_event_attachment/" + events.get_vars().event_id,
"type": "post"
}
};
} else {
return {data : event_attachment.getForm().data};
}
},
"action" : function(data, type, full, meta){
var table = (events.get_vars().event_file_attachment_list),
actions = {}, action_btns = "";
switch(table[1]){
case "addEvent" :
actions.edit = "event_attachment.upload.replace_file(event, \'edit\', "+meta.row+")";
actions.delete = "event_attachment.model.action.client.delete(this, "+meta.row+")";
break;
case "editEvent" :
actions.edit = "event_attachment.upload.replace_file(event, \'edit\', "+meta.row+")";
actions.delete = "event_attachment.modal.delete_confirm(\'server\', "+meta.row+")";
break;
default : ""
break;
};
/*
lets identify the mime_type and set the exact accepted files for the input file.
This will lessen the validation
*/
if (full.attachment_type == 1) {
var mime_type = "image/*";
} else {
console.log(data);
console.log(full.file_setup.mime_type);
if (full.mime) {
if ((full.mime).indexOf('image') >=0) {
var mime_type = "image/*";
} else if ((full.mime).indexOf('audio') >=0) {
var mime_type = "audio/*";
} else if ((full.mime).indexOf('video') >=0) {
var mime_type = "video/*";
}
} else {
if ((full.file_setup.mime_type).indexOf('image') >=0) {
var mime_type = "image/*";
} else if ((full.file_setup.mime_type).indexOf('audio') >=0) {
var mime_type = "audio/*";
} else if ((full.file_setup.mime_type).indexOf('video') >=0) {
var mime_type = "video/*";
}
}
}
action_btns+='
' +'' +'' +'
'; // action_btns += (full.attachment_type == 1 && table[1] == "editEvent") ? "" : app.grid.create_action_btn(app.get_vars()._app.action._delete, "trash", "danger", actions.delete); action_btns += app.grid.create_action_btn(app.get_vars()._app.action._delete, "trash", "danger", actions.delete); return action_btns; } }, "modal" : { "show_file_setup" : function(data, type, full, meta){ // if(((full.file_setup.mime_type).match(/video/g)||[]).length > 0 || ((full.file_setup.mime_type).match(/audio/g)||[]).length > 0){ // return full.description+'