From 55d2c88134538710e1ed82692df19bf2bba7735b Mon Sep 17 00:00:00 2001 From: Sylvain Date: Mon, 2 Dec 2019 12:19:30 +0100 Subject: [PATCH] delete & sync ical sources --- .../controllers/admin/calendar.js.erb | 31 +++++++++++++++++-- app/assets/javascripts/services/icalendar.js | 5 +++ .../templates/admin/calendar/icalendar.html | 3 +- app/controllers/api/i_calendar_controller.rb | 5 +++ config/locales/app.admin.fr.yml | 3 ++ config/routes.rb | 1 + 6 files changed, 45 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/controllers/admin/calendar.js.erb b/app/assets/javascripts/controllers/admin/calendar.js.erb index 85d95c1db..71fbd47b3 100644 --- a/app/assets/javascripts/controllers/admin/calendar.js.erb +++ b/app/assets/javascripts/controllers/admin/calendar.js.erb @@ -813,8 +813,35 @@ Application.Controllers.controller('AdminICalendarController', ['$scope', 'iCale * @param calendar */ $scope.delete = function (calendar) { - const idx = $scope.calendars.indexOf(calendar); - $scope.calendars.splice(idx, 1); + ICalendar.delete( + { id: calendar.id }, + function () { + // success + const idx = $scope.calendars.indexOf(calendar); + $scope.calendars.splice(idx, 1); + }, function (error) { + // failed + growl.error(_t('icalendar.delete_failed')); + console.error(error); + }); + } + + /** + * Asynchronously re-fetches the events from the given calendar + * @param calendar + */ + $scope.sync = function (calendar) { + ICalendar.sync( + { id: calendar.id }, + function () { + // success + growl.info(_t('icalendar.refresh')); + }, function (error) { + // failed + growl.error(_t('icalendar.sync_failed')); + console.error(error); + } + ) } } ]); diff --git a/app/assets/javascripts/services/icalendar.js b/app/assets/javascripts/services/icalendar.js index 21d30843e..1e01bd5e3 100644 --- a/app/assets/javascripts/services/icalendar.js +++ b/app/assets/javascripts/services/icalendar.js @@ -6,6 +6,11 @@ Application.Services.factory('ICalendar', ['$resource', function ($resource) { events: { method: 'GET', url: '/api/i_calendar/events' + }, + sync: { + method: 'POST', + url: '/api/i_calendar/:id/sync', + params: { id: '@id' } } } ); diff --git a/app/assets/templates/admin/calendar/icalendar.html b/app/assets/templates/admin/calendar/icalendar.html index fec55b748..6c9411d48 100644 --- a/app/assets/templates/admin/calendar/icalendar.html +++ b/app/assets/templates/admin/calendar/icalendar.html @@ -33,7 +33,7 @@ {{ 'icalendar.name' }} {{ 'icalendar.url' }} {{ 'icalendar.display' }} - + @@ -42,6 +42,7 @@ {{calendar.url}} {{ calendar.textHidden ? '' : 'icalendar.example' }} + diff --git a/app/controllers/api/i_calendar_controller.rb b/app/controllers/api/i_calendar_controller.rb index 6b798921f..c506507fe 100644 --- a/app/controllers/api/i_calendar_controller.rb +++ b/app/controllers/api/i_calendar_controller.rb @@ -43,6 +43,11 @@ class API::ICalendarController < API::ApiController end end + def sync + puts '[TODO] run worker' + render json: { processing: true }, status: :created + end + private def set_i_cal diff --git a/config/locales/app.admin.fr.yml b/config/locales/app.admin.fr.yml index ada28f728..e5218afc6 100644 --- a/config/locales/app.admin.fr.yml +++ b/config/locales/app.admin.fr.yml @@ -103,6 +103,9 @@ fr: hidden: "Caché" shown: "Affiché" create_error: "Impossible de créer l'import iCalendar. Veuillez réessayer ultérieurement" + delete_failed: "Impossible de supprimer l'import iCalendar. Veuillez réessayer ultérieurement" + refresh: "Mise à jour en cours..." + sync_failed: "Impossible de synchroniser l'URL. Veuillez réessayer ultérieurement" project_elements: # gestion des éléments constituant les projets diff --git a/config/routes.rb b/config/routes.rb index bcb92b44c..a8f97dcbc 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -114,6 +114,7 @@ Rails.application.routes.draw do resources :i_calendar, only: %i[index create destroy] do get 'events', on: :collection + post 'sync', on: :member end # for admin