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.
488 lines
25 KiB
488 lines
25 KiB
/*
|
|
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+' <br/>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('<label id="browse_file_sponsor" class="btn btn-block btn-primary btn-sm" style="width: 160px;">'+
|
|
'Parcourir les fichiers… <input accept="image/*" onchange="event_sponsor.upload.init(\'sponsorfiles\', \'add\', -1);" value="" id="sponsorfiles" type="file" name="sponsorfiles[]" multiple="multiple" class="filechooser ignore" style="display: none;">'+
|
|
'</label>');
|
|
},
|
|
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+='<p class="custom-popover-tooltip col-sm-1 col-xs-1" data-placement="top" data-toggle="tooltip" data-title="Modifier" title="Modifier">'
|
|
+'<input accept="image/*" data-row="'+meta.row+'" onchange="event_sponsor.upload.init(\'editsponsorfiles_'+meta.row+'\', \'edit\', '+meta.row+');" id="editsponsorfiles_'+meta.row+'" type="file" value="" name="editsponsorfiles_'+meta.row+'" class="ignore filechooser" style="display: none;">'
|
|
+'<span onclick="'+actions.edit+'" class="btn btn-success btn-xs">'
|
|
+'<span class="glyphicon glyphicon-pencil"></span></span></p>';
|
|
|
|
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+'<br/><br/><label><input type="checkbox" name="autoplay_vaudio_'+meta.row+'" value="1"/> Autoplay on HP </label>';
|
|
// }
|
|
return full.description;
|
|
},
|
|
|
|
"delete_confirm" : function(action, row){
|
|
app.modal.confirm_box({
|
|
"message" : app.get_vars().events.cma_msg.delete_event_speaker+" <b>[#"+(row+1)+"]</b> ?<br/><br><span class='label label-danger' style='font-size: 12px;'>"+app.get_vars()._app.cma_msg.note+"</span>",
|
|
"_continue" : function() {
|
|
(action=="server")
|
|
? event_sponsor.model.action.server.delete(row)
|
|
: event_sponsor.model.action.client.delete(row)
|
|
}
|
|
});
|
|
},
|
|
|
|
"action" : function(action, uploadedFiles, row){
|
|
/* this condition tells if the action to be made falls under :
|
|
- adding new event and adding new data in it
|
|
- or editing event data
|
|
*/
|
|
var table = events.get_vars().event_sponsor_list;
|
|
var action_ = (action=="edit")?table[1]+"_edit":table[1]+"_add";
|
|
|
|
switch(action_){
|
|
/*
|
|
This is when user is adding new event.
|
|
Event data are stored in temporary repository
|
|
*/
|
|
case "addEvent_edit" : event_sponsor.model.action.client.update(uploadedFiles, row);
|
|
break;
|
|
|
|
case "addEvent_add" : event_sponsor.model.action.client.add(uploadedFiles);
|
|
break;
|
|
/*
|
|
This is when user is editing an event.
|
|
Event data are stored directly on the server
|
|
*/
|
|
case "editEvent_edit" : event_sponsor.model.action.server.update(uploadedFiles, row);
|
|
break;
|
|
|
|
case "editEvent_add" : event_sponsor.model.action.server.add(uploadedFiles);
|
|
break;
|
|
|
|
default : return false;
|
|
break;
|
|
}; //end of main switch
|
|
}
|
|
},
|
|
|
|
"upload" : {
|
|
|
|
"init" : function(filechooser, action, row){
|
|
|
|
var sponsorfiles = document.getElementById(filechooser),
|
|
countFiles = (sponsorfiles.files).length,
|
|
i=0, eventForm = event_sponsor.getForm(),
|
|
uploadedFiles = [],
|
|
filechooser = $('#'+filechooser);
|
|
|
|
//if files do not exceed the allowed number of files per sponsor type
|
|
if(!event_sponsor.upload.validate.with_conflict(sponsorfiles.files, countFiles)) {
|
|
for (i = 0; i<countFiles; i++) {
|
|
var filee = sponsorfiles.files[i];
|
|
ufile_type = filee.name.split('.').pop();
|
|
switch (ufile_type) {
|
|
case 'png':
|
|
case 'jpg':
|
|
case 'jpeg':
|
|
case 'gif':
|
|
case 'mp4':
|
|
case 'mp3':
|
|
break;
|
|
default:
|
|
app._notify("warning", "The file you are uploading is not allowed");
|
|
return false;
|
|
}
|
|
uploadedFiles.push(filee);
|
|
} //end of for loop
|
|
//when files passed all those validations above, lets continue listing the files on datatable
|
|
if(uploadedFiles.length > 0) {
|
|
event_sponsor.modal.action(action, uploadedFiles, row);
|
|
}
|
|
}
|
|
uploadedFiles=[];
|
|
filechooser.val('');
|
|
$(".filechooser").val("");
|
|
return false;
|
|
},
|
|
|
|
"replace_file" : function(e, action, row) {
|
|
$("#editsponsorfiles_"+row).focus().trigger('click');
|
|
},
|
|
|
|
"render" : function(data, type, full, meta) {
|
|
var file = (typeof data == "object")?URL.createObjectURL(data):app.get_vars().events.attachment.sponsors+full.file_preview;
|
|
|
|
return '<img class="text-center img-thumbnail" style="height: 120 !important; width: 130 !important;" src="'+file+'"/>';
|
|
},
|
|
|
|
/* RULES
|
|
- Only image with size not exceeding 30MB is allowed.
|
|
*/
|
|
"validate" : {
|
|
|
|
"with_conflict" : function(uploadedFiles, countFiles){
|
|
for (i = 0; i<countFiles; i++) {
|
|
var file_size = (Math.round(parseInt(uploadedFiles[i].size) / (1024*1024)));
|
|
//check file size
|
|
if((uploadedFiles[i].type.match(/image/g)||[]).length <=0) {
|
|
app._notify("warning", "Upload failed. The file you are uploading is not an image!");
|
|
return true;
|
|
} else if(file_size > 30){
|
|
app._notify("warning", "Upload failed. The file you are uploading exceeds 30MB!");
|
|
return true;
|
|
}
|
|
} //end of loop
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
};// end of return
|
|
|
|
})(jQuery, this);
|