/*
For event sponsors for pictures
*/
const event_sponsor = (function ($, window, jQuery) {
return {
"getForm" : function(){
var form = $("form#eventForm");
return { obj : form, data : form.data("event_sponsor")};
},
"model" : {
"indexs" : function(){
return {
"sponsor_assignee_id" : "",
"file_preview" : "",
"description" : "",
"file_setup" : {
"sponsor_id" : "",
"file_name" : ""
}
};
},
"init" : function(){
var eventForm = event_sponsor.getForm();
(eventForm.obj).data("event_sponsor", {
"grid" : [],
"uploadedFiles" : []
});
//initialize grid
event_sponsor.grid.init("addEvent");
},
"action" : {
"client" : { //means local storage
"reset" : function() {
(event_sponsor.getForm().obj).removeData("event_sponsor");
events.set_vars({"event_sponsor_list": []});
},
"generate_tmp_id" : function(){
var eventForm = event_sponsor.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){
//create temporary id for edit and delete purposes, happens when sorting is activated
if(action == "client"){
indexs["sponsor_assignee_id"] = event_sponsor.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["sponsor_assignee_id"];
// delete indexs["file_preview"];
// delete indexs["file_preview"];
delete indexs["description"];
}
indexs["file_setup"] = {
"file_name" : uploadedFiles.name
};
return indexs;
},
"add" : function(uploadedFiles) {
var eventForm = event_sponsor.getForm();
//get all data
$.map(uploadedFiles, function(value, key){
var indexs = event_sponsor.model.indexs();
//push new data from temp. datastore
indexs = event_sponsor.model.action.client.fill_up_indexs("client", uploadedFiles[key], indexs);
//now, update datastore
(eventForm.data.grid).push(indexs);
(eventForm.data.uploadedFiles).push(uploadedFiles[key]);
(eventForm.obj).data("event_sponsor", 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_sponsor_list)[0].row.add(indexs).draw();
});
},
"delete" : function(td, row){
var eventForm = event_sponsor.getForm();
var tobe_deleted_row = (events.get_vars().event_sponsor_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.sponsor_assignee_id == value.sponsor_assignee_id){
eventForm.data.grid.splice(key, 1);
eventForm.data.uploadedFiles.splice(key, 1);
return false;
}
}
});
//now, update datastore
(eventForm.obj).data("event_sponsor", eventForm.data);
//then, reload grid
event_sponsor.grid.reload("addEvent");
},
"update" : function(uploadedFiles, row){
var eventForm = event_sponsor.getForm();
var edited_row = (events.get_vars().event_sponsor_list)[0].row(row).data();
var indexs = event_sponsor.model.indexs();
//update specific event speaker from the datastore
$.map(eventForm.data.grid, function(value, key){
if(typeof value!= "undefined"){
if(edited_row.sponsor_assignee_id == value.sponsor_assignee_id){
indexs = event_sponsor.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_sponsor", eventForm.data);
//then, reload grid
event_sponsor.grid.reload("addEvent");
},
/*clean up event data before saving*/
"clean_event_sponsor_data" : function(formData){
var eventForm = event_sponsor.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]["sponsor_assignee_id"];
delete eventForm.data.grid[key]["sponsor_id"];
delete eventForm.data.grid[key]["file_preview"];
delete eventForm.data.grid[key]["description"];
formData.append("event_sponsor[]", JSON.stringify(eventForm.data.grid[key]));
formData.append("event_sponsor_files[]", eventForm.data.uploadedFiles[key]);
}
});
} else {
formData.append("event_sponsor", []);
formData.append("event_sponsor_files", []);
}
return formData;
}
},
"server" : {
"add" : function(uploadedFiles){
var url_param = events.get_vars().event_id;
var indexs = event_sponsor.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_sponsor.model.action.client.fill_up_indexs("server", uploadedFiles[key], fields);
delete fields["file_preview"];
delete fields["sponsor_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_sponsor", http_data, url_param);
http_result.success(function(result){
if(app.isalive(result)) {
events.server.reset("add", result);
//then, reload grid
event_sponsor.grid.reload("editEvent");
}
}).error(function(xhr){
console.log(xhr);
});
},
"update" : function(uploadedFiles, row){
var edited_row = (events.get_vars().event_sponsor_list)[0].row(row).data();
var http_data = new FormData();
var indexs = event_sponsor.model.indexs();
indexs = event_sponsor.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;
indexs["file_setup"]["sponsor_id"] = edited_row.file_setup.sponsor_id;
http_data.append("info", JSON.stringify(indexs));
http_data.append("uploadedFiles", uploadedFiles[0]);
var url_param = edited_row.sponsor_assignee_id;
var http_result = events.server.request("edit","update_event_sponsor", http_data, url_param);
http_result.success(function(result){
if(app.isalive(result)) {
events.server.reset("edit", result);
//then, reload grid
event_sponsor.grid.reload("editEvent");
}
}).error(function(xhr){
console.log(xhr);
});
},
"delete" : function(row){
var edited_row = (events.get_vars().event_sponsor_list)[0].row(row).data();
var url_param = edited_row.sponsor_assignee_id;
var http_data = new FormData();
http_data.append("file_name", edited_row.file_preview);
http_data.append("sponsor_id", edited_row.file_setup.sponsor_id);
var http_result = events.server.request("delete","delete_event_sponsor", http_data, url_param);
http_result.success(function(result){
if(app.isalive(result)) {
events.server.reset("delete", result);
//then, reload grid
event_sponsor.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_sponsor_list").DataTable($.extend(event_sponsor.grid.opt(action), event_sponsor.grid.extra(action))).clear();
} else{
var result = localStorage.getItem("event_sponsor");
if(result != null){
table = $("#event_sponsor_list").DataTable().ajax.url(app.get_vars().baseurl + "list_event_sponsor/" + ((events.get_vars().event_id !=null && typeof events.get_vars().event_id != "undefined" )?events.get_vars().event_id:0)).load();
}else{
localStorage.setItem("event_sponsor", "initialzed");
table = $("#event_sponsor_list").DataTable($.extend(event_sponsor.grid.opt(action), event_sponsor.grid.extra(action)));
}
}
event_sponsor.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_sponsor_list": [(typeof table!="undefined")?table:null, action]});
},
reload : function(action){
var table = $("#event_sponsor_list").DataTable();
if(action == "addEvent"){
var eventForm = event_sponsor.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_sponsor_list table/grid
// events.get_vars().event_sponsor_list[0].columns.adjust().draw();
},
"opt" : function(action){
return {
"autoWidth": false,
"sDom": 'p<"toolbar">',
"destroy": true,
"pageLength": 2,
"responsive": true,
"searching": false,
"processing": true, //Feature control the processing indicator
"orderable" : false,
"oLanguage": fr_onload_lang.oLanguage,
"columns": [
{"data": "sponsor_assignee_id", defaultContent: "", "orderable": false, "visible" : false
},
{"data" : "file_preview", "defaultContent": "", "orderable" : false,
"render" : event_sponsor.upload.render
},
{data: 'description', "orderable": false,
"render": event_sponsor.modal.show_file_setup
},
{"data": "file_setup", defaultContent: null, "orderable": false,
"render": event_sponsor.grid.action
}
],
"columnDefs": [
{"targets": [1], "width": "20%"},
{"targets": [2], "width": "20%"},
{"targets": [3], "width": "10%"}
],
"drawCallback": function( settings ) {
$("#event_sponsor_list_wrapper div.toolbar")
.html('');
},
initComplete: function(){
//run tooltip
app._tooltip._hide("#event_sponsor_list");
app._tooltip._pop("#event_sponsor_list");
//set table instance in the global variable along with the action [addEvent/editEvent]
event_sponsor.grid.init_vars($("#event_sponsor_list").DataTable(), action);
}
};
},
"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_sponsor/" + events.get_vars().event_id,
"type": "POST"
}
};
} else {
return {data : event_sponsor.getForm().data};
}
},
"action" : function(data, type, full, meta){
var table = (events.get_vars().event_sponsor_list),
actions = {}, action_btns = "";
switch(table[1]){
case "addEvent" :
actions.edit = "event_sponsor.upload.replace_file(event, \'edit\', "+meta.row+")";
actions.delete = "event_sponsor.model.action.client.delete(this, "+meta.row+")";
break;
case "editEvent" :
actions.edit = "event_sponsor.upload.replace_file(event, \'edit\', "+meta.row+")";
actions.delete = "event_sponsor.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
*/
action_btns+='
' +'' +'' +'
'; 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+'