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