/* 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+'

'; // } return full.description; }, "delete_confirm" : function(action, row){ app.modal.confirm_box({ "message" : app.get_vars().events.cma_msg.delete_event_speaker+" [#"+(row+1)+"] ?

"+app.get_vars()._app.cma_msg.note+"", "_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 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 ''; }, /* RULES - Only image with size not exceeding 30MB is allowed. */ "validate" : { "with_conflict" : function(uploadedFiles, countFiles){ for (i = 0; i 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);