From 5273599d6c187f04f1a5848a48b7f6a03814abfc Mon Sep 17 00:00:00 2001 From: Lukas Gygi <lukas.gygi@gmail.com> Date: Mon, 25 Apr 2016 16:06:57 +0200 Subject: [PATCH] added update and delete to events --- admin/tools/events.tool | 429 +++++++++++++++++++++++----------------- 1 file changed, 251 insertions(+), 178 deletions(-) diff --git a/admin/tools/events.tool b/admin/tools/events.tool index 0658b87..e75ead3 100644 --- a/admin/tools/events.tool +++ b/admin/tools/events.tool @@ -58,47 +58,47 @@ <input type="text" class="form-control" id="title_de"></input> </div> - <div class="form-group"> - <label for="description_de">Description</label> - <textarea type="text" class="form-control" rows="3" id="description_de"></textarea> - </div> - <div class="form-group"> - <label for="catchphrase_de">Catchphrase</label> - <input type="text" class="form-control" id="catchphrase_de"></input> - </div> + <div class="form-group"> + <label for="description_de">Description</label> + <textarea type="text" class="form-control" rows="3" id="description_de"></textarea> + </div> + <div class="form-group"> + <label for="catchphrase_de">Catchphrase</label> + <input type="text" class="form-control" id="catchphrase_de"></input> + </div> <!-- <div class="container"> --> - <!-- <div class="col-md-3"> --> - <div class="form-group"> - <label for="time_start">Start Time</label> - <div class="input-group date" id="time_start"> - <input type="text" class="form-control" /> - <span class="input-group-addon"> + <!-- <div class="col-md-3"> --> + <div class="form-group"> + <label for="time_start">Start Time</label> + <div class="input-group date" id="time_start"> + <input type="text" class="form-control" /> + <span class="input-group-addon"> <span class="glyphicon-calendar glyphicon"></span> - </span> - </div> - </div> - <!-- </div> --> - <!-- <div class="col-md-3"> --> - <div class="form-group"> - <label for="time_end">End Time</label> - <div class="input-group date" id="time_end"> - <input type="text" class="form-control" /> - <span class="input-group-addon"> + </span> + </div> + </div> + <!-- </div> --> + <!-- <div class="col-md-3"> --> + <div class="form-group"> + <label for="time_end">End Time</label> + <div class="input-group date" id="time_end"> + <input type="text" class="form-control" /> + <span class="input-group-addon"> <span class="glyphicon-calendar glyphicon"></span> - </span> - </div> - </div> - <!-- </div> --> + </span> + </div> + </div> + <!-- </div> --> <!-- </div> --> - <label class="checkbox-inline"> - <input type="checkbox" id="signup-required" value="">No Signup - </label> + <label class="checkbox-inline"> + <input type="checkbox" id="signup-required" value="">No Signup + </label> - <label class="checkbox-inline"> - <input type="checkbox" id="no-signup-limit" value="">No Signup Limit - </label> + <label class="checkbox-inline"> + <input type="checkbox" id="no-signup-limit" value="">No Signup Limit + </label> <div class="form-group"> <label for="spots">Spots</label> @@ -106,28 +106,28 @@ </div> <!-- <div class="container"> --> - <!-- <div class="col-md-3"> --> - <div class="form-group"> - <label for="time_register_start">Start of Registration</label> - <div class="input-group date" id="time_register_start"> - <input type="text" class="form-control" /> - <span class="input-group-addon"> + <!-- <div class="col-md-3"> --> + <div class="form-group"> + <label for="time_register_start">Start of Registration</label> + <div class="input-group date" id="time_register_start"> + <input type="text" class="form-control" /> + <span class="input-group-addon"> <span class="glyphicon-calendar glyphicon"></span> - </span> - </div> - </div> - <!-- </div> --> - <!-- <div class="col-md-3"> --> - <div class="form-group"> - <label for="time_register_end">End of Registration</label> - <div class="input-group date" id="time_register_end"> - <input type="text" class="form-control" /> - <span class="input-group-addon"> + </span> + </div> + </div> + <!-- </div> --> + <!-- <div class="col-md-3"> --> + <div class="form-group"> + <label for="time_register_end">End of Registration</label> + <div class="input-group date" id="time_register_end"> + <input type="text" class="form-control" /> + <span class="input-group-addon"> <span class="glyphicon-calendar glyphicon"></span> - </span> - </div> - </div> - <!-- </div> --> + </span> + </div> + </div> + <!-- </div> --> <!-- </div> --> <label class="checkbox-inline"> @@ -160,7 +160,7 @@ </label> </div> - <button type="button" class"btn" data-toggle="collapse" data-target="#english-collapse">show english fields</button> + <button type="button" class "btn" data-toggle="collapse" data-target="#english-collapse">show english fields</button> <div id="english-collapse" class="collapse"> <div class="form-group"> @@ -188,25 +188,30 @@ </div> <style> -.events-table-wrapper { - position: relative; -} -.events-table-wrapper>div { - overflow: auto; -} + .events-table-wrapper { + position: relative; + } + + .events-table-wrapper>div { + overflow: auto; + } -#new-event-modal { - overflow: auto; -} + #new-event-modal { + overflow: auto; + } -#new-event-modal .checkbox-inline{ - margin-bottom: 10px; -} + #new-event-modal .checkbox-inline { + margin-bottom: 10px; + } -.users-sidebar { - background: #fff; -} + .users-sidebar { + background: #fff; + } + .tooltip-inner { + white-space: nowrap; + max-width: none; + } </style> <script type="text/javascript"> @@ -214,78 +219,141 @@ showInTable: ['title_de', 'time_start', 'show_website', 'spots'], curEventData: null, - get: function(ret) { - console.log(ret); - if (!ret || ret['_items'].length == 0) { - tools.log('No Data', 'w'); - return; - } - - for (var n in ret['_items']) { - var tmp = ''; - events.showInTable.forEach(function(i) { - tmp += '<td>' + ret['_items'][n][i] + '</td>'; - }); - $('#events-table tbody').append('<tr name="' + ret['_items'][n]['id'] + '"">' + tmp + '</tr>'); - } + get: function() { + console.log("refreshing..."); + amivcore.events.GET({ + data: { + 'max_results': '50' + } + }, + function(ret) { + console.log(ret); + if (!ret || ret['_items'].length == 0) { + tools.log('No Data', 'w'); + return; + } + $('#events-table tbody').html(''); + for (var n in ret['_items']) { + var tmp = ''; + events.showInTable.forEach(function(i) { + tmp += '<td>' + ret['_items'][n][i] + '</td>'; + }); + $('#events-table tbody').append('<tr name="' + ret['_items'][n]['id'] + '"">' + tmp + '</tr>'); + } - //show modal on click of the table - $('#events-table tbody tr').click(events.showDetails); - // var id = $(this).attr('name') - // var clickedEvent = $.grep(ret['_items'], function(e) { - // return e.id == id; - // })[0]; - // console.log(clickedEvent); - // $('#detail-modal .modal-title').text(clickedEvent['title_de']); - // $('#detail-modal').modal('show'); - // - // for (var field in clickedEvent) { - // var temp = '<td>' + field + '</td><td contenteditable>' + clickedEvent[field] + '</td>'; - // $('#event-details-table tbody').append('<tr>' + temp + '</tr>'); - // } + //show modal on click of the table + $('#events-table tbody tr').click(events.showDetails); + // var id = $(this).attr('name') + // var clickedEvent = $.grep(ret['_items'], function(e) { + // return e.id == id; + // })[0]; + // console.log(clickedEvent); + // $('#detail-modal .modal-title').text(clickedEvent['title_de']); + // $('#detail-modal').modal('show'); + // + // for (var field in clickedEvent) { + // var temp = '<td>' + field + '</td><td contenteditable>' + clickedEvent[field] + '</td>'; + // $('#event-details-table tbody').append('<tr>' + temp + '</tr>'); + // } + }); }, - showDetails: function(){ + showDetails: function() { amivcore.events.GET({ id: $(this).attr('name') }, function(ret) { curEventData = ret; - var tmp = '<table class="table table-hover" data-etag="' + ret['_etag'] + '"><tbody>'; + var tmp = '<table class="table table-hover events-edit-table" data-etag="' + ret['_etag'] + '"><tbody>'; for (var cur in ret) - if (cur.charAt(0) != '_') - tmp += '<tr><td>' + cur + '</td><td contenteditable>' + ret[cur] + '</td></tr>' + if (cur.charAt(0) != '_') + 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: events.deleteEvent + }, 'Update': { type: 'success', close: true, - //callback: users.inspectUser, + callback: events.inspectEvent } } }); }); }, - submitNewEvent: function(){ + deleteEvent: function() { + tools.modal({ + head: 'Delete' + curEventData.title_de, + body: 'Are you really sure you want to permanently delete this event:\n' + curEventData.title_de, + button: { + 'YES': { + type: 'warning', + close: true, + callback: function() { + //TODO: delete Event + } + } + }, + cancel: function() { + console.log("event not deleted"); + tools.log('Event not Deleted', 'i'); + } + }) + }, + + 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]; + } + } + if (changed) { + amivcore.events.PATCH({ + id: curEventData.id, + header: { + 'If-Match': $('.events-edit-table').attr('data-etag') + }, + data: curEventDataChanged + }, function(ret) { + console.log(ret); + tools.log('Event Updated', 's'); + events.get(); + }); + } + }, + + submitNewEvent: function() { console.log("submitting new event"); - var newEvent = { data: {}}; + var newEvent = { + data: {} + }; newEvent["data"]["title_de"] = setNullIfEmpty($("#title_de").val()); newEvent["data"]["description_de"] = setNullIfEmpty($("#description_de").val()); newEvent["data"]["catchphrase_de"] = setNullIfEmpty($("#catchphrase_de").val()); - if (!($("#time_start").data("DateTimePicker").date() == null)){ + if (!($("#time_start").data("DateTimePicker").date() == null)) { //for now, because the api rejects .toISOString format newEvent["data"]["time_start"] = $("#time_start").data("DateTimePicker").date().format("YYYY-MM-DDThh:mm:ss") + "Z"; } - if (!($("#time_end").data("DateTimePicker").date() == null)){ + if (!($("#time_end").data("DateTimePicker").date() == null)) { //for now, because the api rejects .toISOString format newEvent["data"]["time_end"] = $("#time_end").data("DateTimePicker").date().format("YYYY-MM-DDThh:mm:ss") + "Z"; } @@ -293,33 +361,29 @@ if (!$("#signup-required").is(":checked")) { if ($("#no-signup-limit").is(":checked")) { newEvent["data"]["spots"] = 0; - } - else { - if ($("#spots").val() === ""){ + } else { + if ($("#spots").val() === "") { tools.log("Please specify a number of Spots", "e"); return; } newEvent["data"]["spots"] = parseInt($("#spots").val()); } - if (!($("#time_register_start").data("DateTimePicker").date() == null)){ + if (!($("#time_register_start").data("DateTimePicker").date() == null)) { //for now, because the api rejects .toISOString format newEvent["data"]["time_register_start"] = $("#time_register_start").data("DateTimePicker").date().format("YYYY-MM-DDThh:mm:ss") + "Z"; - } - else { + } else { tools.log('field "Start of Registration" required', 'e'); return; } - if (!($("#time_register_end").data("DateTimePicker").date() == null)){ + if (!($("#time_register_end").data("DateTimePicker").date() == null)) { //for now, because the api rejects .toISOString format newEvent["data"]["time_register_end"] = $("#time_register_end").data("DateTimePicker").date().format("YYYY-MM-DDThh:mm:ss") + "Z"; - } - else { + } else { tools.log('field "End of Registration" required', 'e'); return; } - } - else { + } else { newEvent["data"]["spots"] = -1; } @@ -342,80 +406,89 @@ console.log(newEvent); console.log(JSON.stringify(newEvent)); - var response = amivcore.events.POST(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'); + events.get(); + } + }); console.log(response); } } -//var showInTable = ['title_de', 'time_start', 'show_website', 'spots']; + //var showInTable = ['title_de', 'time_start', 'show_website', 'spots']; -amivcore.events.GET({data: {'max_results': '50'}}, events.get); - -//setting up the date time picker -$(function () { - $('#time_start').datetimepicker({ - locale: "de" - }); - $('#time_end').datetimepicker({ - locale: "de", - useCurrent: false //Important! See issue #1075 - }); - $('#time_register_start').datetimepicker({ - locale: "de" - }); - $('#time_register_end').datetimepicker({ - locale: "de", - useCurrent: false //Important! See issue #1075 - }); - $("#time_register_start").on("dp.change", function (e) { - $('#time_register_end').data("DateTimePicker").minDate(e.date); - }); - $("#time_register_end").on("dp.change", function (e) { - $('#time_register_start').data("DateTimePicker").maxDate(e.date); - }); - $("#time_start").on("dp.change", function (e) { - $('#time_end').data("DateTimePicker").minDate(e.date); - }); - $("#time_end").on("dp.change", function (e) { - $('#time_start').data("DateTimePicker").maxDate(e.date); + amivcore.events.GET({ + data: { + 'max_results': '50' + } + }, events.get); + + //setting up the date time picker + $(function() { + $('#time_start').datetimepicker({ + locale: "de" + }); + $('#time_end').datetimepicker({ + locale: "de", + useCurrent: false //Important! See issue #1075 + }); + $('#time_register_start').datetimepicker({ + locale: "de" + }); + $('#time_register_end').datetimepicker({ + locale: "de", + useCurrent: false //Important! See issue #1075 + }); + $("#time_register_start").on("dp.change", function(e) { + $('#time_register_end').data("DateTimePicker").minDate(e.date); + }); + $("#time_register_end").on("dp.change", function(e) { + $('#time_register_start').data("DateTimePicker").maxDate(e.date); + }); + $("#time_start").on("dp.change", function(e) { + $('#time_end').data("DateTimePicker").minDate(e.date); + }); + $("#time_end").on("dp.change", function(e) { + $('#time_start').data("DateTimePicker").maxDate(e.date); + }); }); -}); - -$('#signup-required').click(function(){ - $('#no-signup-limit').attr('disabled',this.checked); - $('#spots').attr('disabled',this.checked); - $('#time_register_end>input').attr('disabled',this.checked); - $('#time_register_start>input').attr('disabled',this.checked); -}); - -$('#no-signup-limit').click(function(){ - $('#spots').attr('disabled',this.checked); -}); - + $('#signup-required').click(function() { + $('#no-signup-limit').attr('disabled', this.checked); + $('#spots').attr('disabled', this.checked); + $('#time_register_end>input').attr('disabled', this.checked); + $('#time_register_start>input').attr('disabled', this.checked); + }); + $('#no-signup-limit').click(function() { + $('#spots').attr('disabled', this.checked); + }); -$('#detail-modal').on("hidden.bs.modal", function(e) { - $(e.target).removeData("bs.modal").find(".modal-content tbody").empty(); -}); -tools.ui.menu({ - 'New Event':{ - callback: function (){ - $('#new-event-modal').modal('show'); + tools.ui.menu({ + '<span class="glyphicon glyphicon-plus" data-toggle="tooltip" aria-hidden="true" title="Create new Event" data-placement="bottom"></span>': { + callback: function() { + $('#new-event-modal').modal('show'); + } + }, + '<span class="glyphicon glyphicon-refresh" data-toggle="tooltip" aria-hidden="true" title="Refresh" data-placement="bottom"></span>': { + callback: events.get } - } -}); - + }); + $(document).ready(function() { + $('[data-toggle="tooltip"]').tooltip(); + }); -function setNullIfEmpty(formData){ - if (formData === ""){ - return null; + function setNullIfEmpty(formData) { + if (formData === "") { + return null; + } + return formData; } - return formData; -} - </script> -- GitLab