From 99f71497cc331781b11bec74226445687bd29eec Mon Sep 17 00:00:00 2001 From: Ana Date: Fri, 22 Jul 2016 17:57:26 +0200 Subject: [PATCH] Introduce a "Save" button for the admin schedule The changes were saved after you drop an event, and now it only saves the schedule when you're done with the changes and click the "Save" button. --- app/assets/javascripts/osem-schedule.js | 81 +++++++++++-------- .../admin/event_schedule_controller.rb | 6 +- app/views/admin/schedule/show.html.haml | 2 + 3 files changed, 52 insertions(+), 37 deletions(-) diff --git a/app/assets/javascripts/osem-schedule.js b/app/assets/javascripts/osem-schedule.js index 532bcdd3..1c9df710 100644 --- a/app/assets/javascripts/osem-schedule.js +++ b/app/assets/javascripts/osem-schedule.js @@ -1,6 +1,9 @@ var conference; // Should be initialize in Schedule.initialize var schedule_id; // Should be initialize in Schedule.initialize +var events_to_save = {}; +var events_to_remove = {}; + var Schedule = { initialize: function(conference_param, schedule_id_param) { conference = conference_param; @@ -9,56 +12,62 @@ var Schedule = { remove: function(element) { var e = $("#" + element); var event_schedule_id = e.attr("event_schedule_id"); + var event_id = e.attr("guid"); if(event_schedule_id != null){ - var url = '/admin/conference/' + conference + '/event_schedule/' + event_schedule_id; - var params = { - event: e.attr("guid"), - schedule: schedule_id - }; - var callback = function(data) { - console.log(data); - e.attr("event_schedule_id", null); - } - $.ajax({ - url: url, - type: 'DELETE', - data: params, - success: callback, - dataType : 'json' - }); + events_to_remove[event_id] = { event_schedule_id: event_schedule_id }; } + delete events_to_save[event_id]; var unscheduled = $(".unscheduled-events"); e.appendTo(unscheduled); e.find(".schedule-event-delete-button").hide(); }, add: function (event_id, room_id, date, time, event_schedule_id) { - var url = '/admin/conference/' + conference + '/event_schedule'; - var type = 'POST' - if(event_schedule_id != null){ - type = 'PUT'; - url += ('/' + event_schedule_id); - } var params = { event: event_id, schedule: schedule_id, room: room_id, date: date, time: time, - schedule: schedule_id + event_schedule_id: event_schedule_id }; - var callback = function(data) { + events_to_save[event_id] = params; + delete events_to_remove[event_id]; + $("#event-" + event_id).find(".schedule-event-delete-button").show(); + }, + saveEvents: function () { + var callback_save = function(data) { console.log(data); - var e = $("#event-" + event_id); - e.attr("event_schedule_id", data.event_schedule_id); - e.find(".schedule-event-delete-button").show(); + $("#event-" + data.event).attr("event_schedule_id", data.event_schedule_id); } - $.ajax({ - url: url, - type: type, - data: params, - success: callback, - dataType : 'json' - }); + var callback_remove = function(data) { + console.log(data); + $("#event-" + data.event).attr("event_schedule_id", null); + } + for (var key in events_to_save){ + var type = 'POST'; + var url = '/admin/conference/' + conference + '/event_schedule'; + var event_schedule_id = events_to_save[key].event_schedule_id; + if(event_schedule_id != null){ + type = 'PUT'; + url += ('/' + event_schedule_id); + } + $.ajax({ + url: url, + type: type, + data: events_to_save[key], + success: callback_save, + dataType : 'json' + }); + } + for (var key in events_to_remove){ + $.ajax({ + url: '/admin/conference/' + conference + '/event_schedule/' + events_to_remove[key].event_schedule_id, + type: 'DELETE', + success: callback_remove, + dataType : 'json' + }); + } + alert('Schedule correctly saved'); } }; @@ -106,4 +115,8 @@ $(document).ready( function() { $(this).css("background-color", "#ffffff"); } }); + + $('.schedule-save').on('click', function(e) { + Schedule.saveEvents(); + }); }); diff --git a/app/controllers/admin/event_schedule_controller.rb b/app/controllers/admin/event_schedule_controller.rb index 503c1050..86156515 100644 --- a/app/controllers/admin/event_schedule_controller.rb +++ b/app/controllers/admin/event_schedule_controller.rb @@ -4,17 +4,17 @@ module Admin def create event_schedule = EventSchedule.create(get_event_schedule_params(params)) - render json: { 'status' => 'ok', event_schedule_id: event_schedule.id } + render json: { 'status' => 'ok', event: event_schedule.event.guid, event_schedule_id: event_schedule.id } end def update @event_schedule.update(get_event_schedule_params(params)) - render json: { 'status' => 'ok', event_schedule_id: @event_schedule.id } + render json: { 'status' => 'ok', event: @event_schedule.event.guid, event_schedule_id: @event_schedule.id } end def destroy @event_schedule.destroy if @event_schedule - render json: { 'status' => 'ok' } + render json: { 'status' => 'ok', event: @event_schedule.event.guid } end private diff --git a/app/views/admin/schedule/show.html.haml b/app/views/admin/schedule/show.html.haml index 9efe7e94..f3b8717e 100644 --- a/app/views/admin/schedule/show.html.haml +++ b/app/views/admin/schedule/show.html.haml @@ -21,6 +21,8 @@ off_color: 'warning', on_text: 'Yes', off_text: 'No' } + %button.btn.btn-success.schedule-save + Save .h4 Unscheduled events .unscheduled-events