diff --git a/tools/events.tool b/tools/events.tool index 871f163366891939535e027455b6e185ca2288a4..1a566e61cce1ff1c3ce55dcc71ca2ebb34a746e5 100644 --- a/tools/events.tool +++ b/tools/events.tool @@ -18,7 +18,8 @@ <!-- modal for creating new events, easier to do it this way than js--> -<div class="modal fade" id="event-modal" role="dialog" data-etag=""> +<div class="modal fade" id="event-modal" role="dialog" data-etag="" data-backdrop="static" + data-keyboard="false" > <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> @@ -165,6 +166,28 @@ <textarea type="text" class="form-control" rows="3" id="additional_fields"></textarea> </div> + <div class="form-group"> + <label for="img_infoscreen">Infoscreen Image</label> + <input type="file" id="img_infoscreen" name="myFile"/> + <img src="" id="actual_img_infoscreen"> + </div> + <div class="form-group"> + <label for="img_banner">Banner Image</label> + <input type="file" id="img_banner"/> + <img src="" id="actual_img_banner"> + </div> + <div class="form-group"> + <label for="img_poster">Poster Image</label> + <input type="file" id="img_poster"/> + <img src="" id="actual_img_poster"> + </div> + <div class="form-group"> + <label for="img_thumbnail">Thumbnail</label> + <input type="file" id="img_thumbnail"/> + <img src="" id="actual_img_thumbnail"> + </div> + + <button type="button" class "btn" data-toggle="collapse" data-target="#english-collapse">show english fields</button> <div id="english-collapse" class="collapse"> @@ -181,6 +204,9 @@ <input type="text" class="form-control" id="catchphrase_en"></input> </div> </div> + + <div id="additional_info"> + </div> <!-- <input type="submit"> --> </form> </div> @@ -220,6 +246,7 @@ <script type="text/javascript"> var events = { + API_url: 'http://192.168.1.100', somethingChanged: false, showInTable: ['title_de', 'time_start', 'show_website', 'spots', 'signup_count'], curEventData: null, @@ -317,8 +344,9 @@ }, createEvent: function() { + $("#event-modal-title").text("Create Event"); - $('#event-modal-footer').html('<button type="button" class="btn btn-default" data-dismiss="modal">Close</button><button type="button" class="btn btn-primary" onclick="events.submitNewEvent()">Submit</button>'); + $('#event-modal-footer').html('<button type="button" class="btn btn-default" data-dismiss="modal">Close</button><button type="button" class="btn btn-primary" onclick="events.submitEvent(true)">Submit</button>'); $('#event-modal').modal('show'); }, @@ -334,90 +362,60 @@ console.log(curEventData); etag = ret['_etag']; $("#event-modal-title").text("Edit Event"); - $('#event-modal-footer').html('<button type="button" class="btn btn-default" data-dismiss="modal">Close</button><button type="button" class="btn btn-primary" onclick="events.inspectEvent()">update</button><button type="button" class="btn btn-danger" onclick="events.deleteEvent(' +"'" + etag + "'" + ')">Delete</button>'); + $('#event-modal-footer').html('<button type="button" class="btn btn-default" data-dismiss="modal">Close</button><button type="button" class="btn btn-primary" onclick="events.submitEvent(false)">update</button><button type="button" class="btn btn-danger" onclick="events.deleteEvent()">Delete</button>'); - $('#event-modal').attr('data-etag', etag); + imageData = ['img_infoscreen', 'img_thumbnail', 'img_poster', 'img_banner']; + + for (i = 0; i < imageData.length; i++){ + if (ret[imageData[i]]){ + console.log(events.API_url + ret[imageData[i]]['file']); + $('#actual_' + imageData[i]).attr('src', events.API_url + ret[imageData[i]]['file']); + } + } //fill fields of the form with content that has the same ID $('#event-modal-form').find('input, textarea').val(function (index, value) { - return ret[this.id]; + if (this.type != 'file') + return ret[this.id]; }); //array of elements that are represented by checkboxes - var booleanEventData = ['signup-required', 'no-signup-limit', 'allow_email_signup', 'show_website', 'show_infoscreen', 'show_announce']; + var booleanEventData = ['no-signup-limit', 'allow_email_signup', 'show_website', 'show_infoscreen', 'show_announce']; - for (i = 0; i < booleanEventData.length; i++){ - $("#" + booleanEventData[i]).prop('checked', ret[booleanEventData[i]]); - } + var dateEventData = ['time_start', 'time_end', 'time_register_start', 'time_register_end', 'time_advertising_start', 'time_advertising_end']; //set the datepickers - $('#event-modal').modal('show'); - - var dateEventData = ['time_start', 'time_end', 'time_register_start', 'time_register_end', 'time_advertising_start', 'time_advertising_end']; for (i = 0; i < dateEventData.length; i++){ if (ret[dateEventData[i]] != null){ $('#' + dateEventData[i]).data("DateTimePicker").date(new Date(ret[dateEventData[i]])); } } + + for (i = 0; i < booleanEventData.length; i++){ + $("#" + booleanEventData[i]).prop('checked', ret[booleanEventData[i]]); + } + + //edge cases (signup required is inverted) + // if (spots == null){ + $('#signup-required').prop('checked', !ret['signup-required']); + // } + + + $('#event-modal').modal('show'); + - // var tmp = '<table class="table table-hover events-edit-table" data-etag="' + ret['_etag'] + '"><tbody>'; - // for (var cur in ret) { - // if (cur.charAt(0) != '_' && cur != 'signups') - // tmp += '<tr><td>' + cur + '</td><td contenteditable>' + ret[cur] + '</td></tr>' - // } - // tmp += '</tbody></table>'; - // - // tools.modal({ - // head: ret.title_de, - // body: tmp, - // button: { - // 'Delete': { - // type: 'danger', - // close: false, - // callback: function() { - // if (confirm("Delete " + ret.title_de + "?") == true) { - // amivcore.events.DELETE({ - // id: curEventData.id, - // header: { - // 'If-Match': $('.events-edit-table').attr('data-etag') - // } - // }, function(response) { - // console.log(response); - // }); - // events.get(); - // tools.log('Event deleted', 'w'); - // tools.modalClose(); - // } else { - // tools.log('Event not Deleted', 'i'); - // } - // } - // }, - // 'Signups': { - // type: 'info', - // close: false, - // callback: function() { - // events.showSignups(curEventData); - // } - // }, - // 'Update': { - // type: 'success', - // close: false, - // callback: events.inspectEvent - // } - // } - // }); }); }, - deleteEvent: function(etag) { - console.log('delete triggered' + etag); + deleteEvent: function() { + console.log(curEventData._etag); if (confirm("Delete " + curEventData.title_de + "?")) { amivcore.events.DELETE({ - id: curEventData.id, + id: curEventData._id, header: { // 'If-Match': $('#event-modal').attr('data-etag') - 'If-Match': etag + 'If-Match': curEventData._etag } }, function(response) { console.log(response); @@ -429,18 +427,7 @@ tools.log('Event not Deleted', 'i'); } }, - /*showDetails: function() { - amivcore.events.GET({ - id: $(this).attr('data-id') - }, function(ret) { - curEventData = ret; - console.log(curEventData); - for (var attr in curEventData) { - $('#' + attr).val(curEventData[attr]); - } - $('#event-modal').modal('show'); - }); - },*/ + showSignups: function(curEventData) { var tmp = '<table class="table table-hover events-edit-table" data-etag="' + curEventData['_etag'] + '"><tbody>'; @@ -461,50 +448,7 @@ }); }, - inspectEvent: function() { - var newEventData = {}; - $('.events-edit-table tr').each(function() { - newEventData[$(this).children('td:nth-child(1)').html()] = $(this).children('td:nth-child(2)').html(); - }); - var changed = false, - curEventDataChanged = {}; - for (var i in newEventData) { - if (newEventData[i] != String(curEventData[i])) { - changed = true; - curEventDataChanged[i] = newEventData[i]; - } - } - console.log(curEventDataChanged); - if (changed) { - //workaround to get booleans and ints working - for (var i in curEventDataChanged) { - if (!isNaN(curEventDataChanged[i])) curEventDataChanged[i] = parseInt(curEventDataChanged[i]); - if (curEventDataChanged[i] === 'null' || curEventDataChanged[i] === '') curEventDataChanged[i] = null; - if (curEventDataChanged[i] === 'true') curEventDataChanged[i] = true; - if (curEventDataChanged[i] === 'false') curEventDataChanged[i] = false; - - } - console.log(curEventDataChanged); - amivcore.events.PATCH({ - id: curEventData.id, - header: { - 'If-Match': $('.events-edit-table').attr('data-etag') - }, - data: curEventDataChanged - }, function(ret) { - if (!ret.hasOwnProperty('_status') || ret['_status'] != 'OK') - tools.log(JSON.stringify(ret.responseJSON['_issues']), 'e'); - else { - // console.log(ret); - tools.log('Event Updated', 's'); - events.get(); - tools.modalClose(); - } - }); - } - }, - - submitNewEvent: function() { + submitEvent: function(isNew) { console.log("submitting new event"); var newEvent = { data: {} @@ -514,20 +458,22 @@ newEvent["data"]["catchphrase_de"] = setNullIfEmpty($("#catchphrase_de").val()); if (!($("#time_start").data("DateTimePicker").date() == null)) { - newEvent["data"]["time_start"] = $("#time_start").data("DateTimePicker").date(); + newEvent["data"]["time_start"] = $("#time_start").data("DateTimePicker").date().toISOString().split('.')[0]+"Z"; } if (!($("#time_end").data("DateTimePicker").date() == null)) { - newEvent["data"]["time_end"] = $("#time_end").data("DateTimePicker").date(); + newEvent["data"]["time_end"] = $("#time_end").data("DateTimePicker").date().toISOString().split('.')[0]+"Z"; } if (!($("#time_advertising_start").data("DateTimePicker").date() == null)) { - newEvent["data"]["time_advertising_start"] = $("#time_advertising_start").data("DateTimePicker").date(); + newEvent["data"]["time_advertising_start"] = $("#time_advertising_start").data("DateTimePicker").date().toISOString().split('.')[0]+"Z"; } - if (!($("#time_end").data("DateTimePicker").date() == null)) { - newEvent["data"]["time_advertising_end"] = $("#time_advertising_end").data("DateTimePicker").date(); + if (!($("#time_advertising_end").data("DateTimePicker").date() == null)) { + newEvent["data"]["time_advertising_end"] = $("#time_advertising_end").data("DateTimePicker").date().toISOString().split('.')[0]+"Z"; } + + if (!$("#signup-required").is(":checked")) { if ($("#no-signup-limit").is(":checked")) { newEvent["data"]["spots"] = 0; @@ -551,11 +497,12 @@ tools.log('field "End of Registration" required', 'e'); return; } + newEvent["data"]["allow_email_signup"] = $("#allow_email_signup").is(':checked'); } else { newEvent["data"]["spots"] = null; } - newEvent["data"]["allow_email_signup"] = $("#allow_email_signup").is(':checked'); + newEvent["data"]["location"] = setNullIfEmpty($("#location").val()); @@ -574,18 +521,65 @@ newEvent["data"]["catchphrase_en"] = setNullIfEmpty($("#catchphrase_en").val()); console.log(newEvent); + + form = new FormData(); + // for (data in newEvent.data){ + // form.append(data, newEvent['data'][data]); + // } + var imageData = ['img_infoscreen', 'img_thumbnail', 'img_poster', 'img_banner']; + for (i = 0; i < imageData.length; i++){ + if ($('#' + imageData[i])[0].files[0] != undefined) + form.append(imageData[i], $('#' + imageData[i])[0].files[0]); + } + console.log(JSON.stringify(newEvent)); - var response = amivcore.events.POST(newEvent, function(ret) { - if (!ret.hasOwnProperty('_status') || ret['_status'] != 'OK') - tools.log(JSON.stringify(ret.responseJSON['_issues']), 'e'); - else { - tools.log('Event Added', 's'); - $('#event-modal').modal('hide'); - $("#event-modal-form").trigger('reset'); - events.get(); - } - }); + if(isNew) { + var response = amivcore.events.POST(form, function(ret) { + if (!ret.hasOwnProperty('_status') || ret['_status'] != 'OK') + tools.log(JSON.stringify(ret.responseJSON['_issues']), 'e'); + else { + events.uploadCallback(); + } + }); + } + else { + newEvent['header'] = {}; + newEvent['header']['If-Match'] = curEventData._etag; + newEvent['id'] = curEventData._id; + console.log(newEvent); + var response = amivcore.events.PATCH(newEvent, function(ret) { + if (!ret.hasOwnProperty('_status') || ret['_status'] != 'OK') + tools.log(JSON.stringify(ret.responseJSON['_issues']), 'e'); + else { + events.uploadCallback(form); + } + }); + } console.log(response); + }, + + //images need to be uploaded seperately after POSTing using PATCH + uploadCallback: function(form){ + amivcore.getEtag('events', curEventData._id, function(ret){ + $.ajax({ + url: events.API_url + '/events/' + curEventData._id, + headers: {'Authorization':'root', 'If-Match': ret}, + data: form, + type: 'PATCH', + // THIS MUST BE DONE FOR FILE UPLOADING + contentType: false, + processData: false, + // ... Other options like success and etc + success: function(data){ + console.log(data); + tools.log('Event Added', 's'); + $('#event-modal').modal('hide'); + $("#event-modal-form").trigger('reset'); + events.get(); + } + }); + }); + } } @@ -654,6 +648,12 @@ $('#spots').attr('disabled', this.checked); }); + $('#event-modal').on('hidden.bs.modal', function () { + // do something… + $('#event-modal img').attr('src', ''); + $("#event-modal-form").trigger('reset'); + }) + // tools in the top bar tools.ui.menu({ '<span class="glyphicon glyphicon-plus" data-toggle="tooltip" aria-hidden="true" title="Create new Event" data-placement="bottom"></span>': { diff --git a/tools/groups.tool b/tools/groups.tool index e3e375794a9b7fdefd17f6dc644b744a229908c6..1be122ea2cabc048ea09fca2f73c4fa12072c2c4 100644 --- a/tools/groups.tool +++ b/tools/groups.tool @@ -191,7 +191,7 @@ } if (changed) { amivcore.groups.PATCH({ - id: curUserData.id, + id: curUserData._ id, header: { 'If-Match': $('.groups-edit-cont').attr('data-etag') }, diff --git a/tools/users.tool b/tools/users.tool index b4bf41bd032aac8989ef77d215d7a5e7656901ff..12d5113b6dcd58dd9dfc647a1024764470c23ecc 100644 --- a/tools/users.tool +++ b/tools/users.tool @@ -111,7 +111,7 @@ id: $(this).attr('data-id') }, function(ret) { curUserData = ret; - var tmp = '<table class="table table-hover users-user-edit-table" data-etag="' + ret['_etag'] + '" data-id="' + ret.id + '"><tbody>'; + var tmp = '<table class="table table-hover users-user-edit-table" data-etag="' + ret['_etag'] + '" data-id="' + ret._id + '"><tbody>'; for (var cur in ret) if (cur.charAt(0) != '_') tmp += '<tr><td>' + cur + '</td><td contenteditable>' + ret[cur] + '</td></tr>' @@ -168,7 +168,7 @@ } if (changed) { amivcore.users.PATCH({ - id: curUserData.id, + id: curUserData._id, header: { 'If-Match': $('.users-user-edit-table').attr('data-etag') },