From b4250b2ce61bcc04294d15d939f0aa4c2073981c Mon Sep 17 00:00:00 2001 From: Du Peng Date: Mon, 17 Apr 2023 11:29:36 +0200 Subject: [PATCH 01/10] (bug) abus notification error --- CHANGELOG.md | 2 ++ app/models/project.rb | 2 ++ 2 files changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 652ceb0f4..5458cd199 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Changelog Fab-manager +- Fix a bug: notification is broken when delete a project + ## v6.0.3 2023 April 12 - Fix a bug: unable to install Fab-manager by setup.sh diff --git a/app/models/project.rb b/app/models/project.rb index 860e2f5ad..238353e96 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -40,6 +40,8 @@ class Project < ApplicationRecord has_many :project_steps, dependent: :destroy accepts_nested_attributes_for :project_steps, allow_destroy: true + has_many :abuses, as: :signaled, dependent: :destroy, class_name: 'Abuse' + # validations validates :author, :name, presence: true From acc081a41396cceed4c3778653a9848cb03c4189 Mon Sep 17 00:00:00 2001 From: Du Peng Date: Mon, 17 Apr 2023 12:20:36 +0200 Subject: [PATCH 02/10] (bug) logout error in payment_schedules page --- .../payment-schedule/payment-schedule-item-actions.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/frontend/src/javascript/components/payment-schedule/payment-schedule-item-actions.tsx b/app/frontend/src/javascript/components/payment-schedule/payment-schedule-item-actions.tsx index caf059353..7a7e8f307 100644 --- a/app/frontend/src/javascript/components/payment-schedule/payment-schedule-item-actions.tsx +++ b/app/frontend/src/javascript/components/payment-schedule/payment-schedule-item-actions.tsx @@ -54,7 +54,7 @@ export const PaymentScheduleItemActions: React.FC { - return (operator.role === 'admin' || operator.role === 'manager'); + return (operator?.role === 'admin' || operator?.role === 'manager'); }; /** From 4c126a63d521a48a3dabc63c3a9e93757bae8010 Mon Sep 17 00:00:00 2001 From: Du Peng Date: Mon, 17 Apr 2023 12:32:01 +0200 Subject: [PATCH 03/10] (bug) add a task for clean abuse notifications --- CHANGELOG.md | 1 + lib/tasks/fablab/maintenance.rake | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5458cd199..4b0ef55ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Changelog Fab-manager - Fix a bug: notification is broken when delete a project +- [TODO DEPLOY] `rails fablab:maintenance:clean_abuse_notifications` ## v6.0.3 2023 April 12 diff --git a/lib/tasks/fablab/maintenance.rake b/lib/tasks/fablab/maintenance.rake index 23a6dc4f7..3402555fa 100644 --- a/lib/tasks/fablab/maintenance.rake +++ b/lib/tasks/fablab/maintenance.rake @@ -155,5 +155,12 @@ namespace :fablab do end_date = args.end == 'today' ? Time.current.end_of_day : start_date.next_month [start_date, end_date] end + + desc 'Clean the abuse notifications if signaled object is null' + task clean_abuse_notifications: :environment do + Abuse.all.each do |abuse| + abuse.destroy if abuse.signaled.nil? + end + end end end From e39c5638b80bf9b3efb7ec5c8316ec07e698a822 Mon Sep 17 00:00:00 2001 From: Du Peng Date: Tue, 18 Apr 2023 10:07:30 +0200 Subject: [PATCH 04/10] (quality) payzen order status --- app/controllers/api/payzen_controller.rb | 5 +++-- .../src/javascript/components/payment/payzen/payzen-form.tsx | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/controllers/api/payzen_controller.rb b/app/controllers/api/payzen_controller.rb index 14eaf310b..3583ac12a 100644 --- a/app/controllers/api/payzen_controller.rb +++ b/app/controllers/api/payzen_controller.rb @@ -72,7 +72,7 @@ class API::PayzenController < API::PaymentsController cart = shopping_cart - if order['answer']['transactions'].any? { |transaction| transaction['status'] == 'PAID' } + if order['answer']['transactions'].all? { |transaction| transaction['status'] == 'PAID' } render on_payment_success(params[:order_id], cart) else render json: order['answer'], status: :unprocessable_entity @@ -86,10 +86,11 @@ class API::PayzenController < API::PaymentsController client = PayZen::Transaction.new transaction = client.get(params[:transaction_uuid]) + order = PayZen::Order.new.get(params[:order_id]) cart = shopping_cart - if transaction['answer']['status'] == 'PAID' + if transaction['answer']['status'] == 'PAID' && order['answer']['transactions'].all? { |t| t['status'] == 'PAID' } render on_payment_success(params[:order_id], cart) else render json: transaction['answer'], status: :unprocessable_entity diff --git a/app/frontend/src/javascript/components/payment/payzen/payzen-form.tsx b/app/frontend/src/javascript/components/payment/payzen/payzen-form.tsx index 541880808..7f7a6223b 100644 --- a/app/frontend/src/javascript/components/payment/payzen/payzen-form.tsx +++ b/app/frontend/src/javascript/components/payment/payzen/payzen-form.tsx @@ -75,7 +75,7 @@ export const PayzenForm: React.FC = ({ onSubmit, onSuccess, onE if (updateCard) return onSuccess(null); const transaction = event.clientAnswer.transactions[0]; - if (event.clientAnswer.orderStatus === 'PAID') { + if (event.clientAnswer.orderStatus === 'PAID' && transaction?.status === 'PAID') { confirmPayment(event, transaction).then((confirmation) => { PayZenKR.current.removeForms().then(() => { onSuccess(confirmation); From 112df59c96254d55116359ef43c034854b065978 Mon Sep 17 00:00:00 2001 From: Du Peng Date: Thu, 20 Apr 2023 18:57:37 +0200 Subject: [PATCH 05/10] (bug) date shift in event creation/update --- app/services/event_service.rb | 4 ++-- test/integration/events/timezone_test.rb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/services/event_service.rb b/app/services/event_service.rb index 639353313..7a6adcaf6 100644 --- a/app/services/event_service.rb +++ b/app/services/event_service.rb @@ -33,8 +33,8 @@ class EventService end def date_range(starting, ending, all_day) - start_date = Time.zone.parse(starting[:date]) - end_date = Time.zone.parse(ending[:date]) + start_date = Date.parse(starting[:date]) + end_date = Date.parse(ending[:date]) start_time = starting[:time] ? Time.zone.parse(starting[:time]) : nil end_time = ending[:time] ? Time.zone.parse(ending[:time]) : nil if all_day || start_time.nil? || end_time.nil? diff --git a/test/integration/events/timezone_test.rb b/test/integration/events/timezone_test.rb index 2c2489e41..4f8db9e4a 100644 --- a/test/integration/events/timezone_test.rb +++ b/test/integration/events/timezone_test.rb @@ -46,8 +46,8 @@ class Events::TimezoneTest < ActionDispatch::IntegrationTest e = Event.find_by(id: event[:id]) assert_not_nil e, 'Event was not created in database' - assert_equal '2023-06-15', e.availability.start_at.to_date.iso8601 - assert_equal '2023-06-15', e.availability.end_at.to_date.iso8601 + assert_equal '2023-06-14', e.availability.start_at.to_date.iso8601 + assert_equal '2023-06-14', e.availability.end_at.to_date.iso8601 assert_equal '09:48', e.availability.start_at.strftime('%R') assert_equal '11:48', e.availability.end_at.strftime('%R') end From 57683125a89693f4fc1ccb4689881c100a3424be Mon Sep 17 00:00:00 2001 From: Du Peng Date: Fri, 21 Apr 2023 19:28:33 +0200 Subject: [PATCH 06/10] (bug) window end time < window start time --- app/frontend/src/javascript/controllers/admin/settings.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/frontend/src/javascript/controllers/admin/settings.js b/app/frontend/src/javascript/controllers/admin/settings.js index 4e07dcc30..e43bca1dc 100644 --- a/app/frontend/src/javascript/controllers/admin/settings.js +++ b/app/frontend/src/javascript/controllers/admin/settings.js @@ -487,8 +487,12 @@ Application.Controllers.controller('SettingsController', ['$scope', '$rootScope' // we prevent the admin from setting the closing time before the opening time $scope.$watch('windowEnd.value', function (newValue, oldValue, scope) { - if ($scope.windowStart && moment($scope.windowStart.value).isAfter(newValue)) { - return $scope.windowEnd.value = oldValue; + if (scope.windowStart) { + const startTime = moment($scope.windowStart.value).format('HH:mm:ss'); + const endTime = moment(newValue).format('HH:mm:ss'); + if (startTime >= endTime) { + scope.windowEnd.value = oldValue; + } } }); From b588f1c78077a07b2de607cf33696f0bc5dc5b41 Mon Sep 17 00:00:00 2001 From: Du Peng Date: Mon, 24 Apr 2023 19:17:07 +0200 Subject: [PATCH 07/10] (bug) broken notifications email --- CHANGELOG.md | 1 + .../notify_admin_low_stock_threshold.html.erb | 4 ++-- .../notify_admin_training_auto_cancelled.html.erb | 2 +- .../notify_admin_when_user_is_created.html.erb | 2 +- .../notify_admin_when_user_is_imported.html.erb | 2 +- .../notify_member_training_authorization_expired.html.erb | 2 +- .../notify_member_training_auto_cancelled.html.erb | 2 +- .../notify_member_training_invalidated.html.erb | 2 +- 8 files changed, 9 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b0ef55ef..dd5626219 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Changelog Fab-manager - Fix a bug: notification is broken when delete a project +- Fix a bug: broken notifications email - [TODO DEPLOY] `rails fablab:maintenance:clean_abuse_notifications` ## v6.0.3 2023 April 12 diff --git a/app/views/notifications_mailer/notify_admin_low_stock_threshold.html.erb b/app/views/notifications_mailer/notify_admin_low_stock_threshold.html.erb index 0c1bae992..a5dff9aa3 100644 --- a/app/views/notifications_mailer/notify_admin_low_stock_threshold.html.erb +++ b/app/views/notifications_mailer/notify_admin_low_stock_threshold.html.erb @@ -1,10 +1,10 @@ <%= render 'notifications_mailer/shared/hello', recipient: @recipient %>

- <%= t('.body.low_stock', { PRODUCT: @attached_object.name }) %> + <%= t('.body.low_stock', **{ PRODUCT: @attached_object.name }) %>

- <%= t('.body.stocks_state_html', { INTERNAL: @attached_object.stock['internal'], EXTERNAL: @attached_object.stock['external'] }) %> +<%= t('.body.stocks_state_html', **{ INTERNAL: @attached_object.stock['internal'], EXTERNAL: @attached_object.stock['external'] }) %>

<%=link_to( t('.body.manage_stock'), "#{root_url}#!/admin/store/products/#{@attached_object.id}/edit", target: "_blank" )%> diff --git a/app/views/notifications_mailer/notify_admin_training_auto_cancelled.html.erb b/app/views/notifications_mailer/notify_admin_training_auto_cancelled.html.erb index 8a62126d3..41b94d0ce 100644 --- a/app/views/notifications_mailer/notify_admin_training_auto_cancelled.html.erb +++ b/app/views/notifications_mailer/notify_admin_training_auto_cancelled.html.erb @@ -1,7 +1,7 @@ <%= render 'notifications_mailer/shared/hello', recipient: @recipient %>

- <%= t('.body.cancelled_training', { + <%= t('.body.cancelled_training', **{ TRAINING: @attached_object.trainings.first.name, DATE: I18n.l(@attached_object.start_at.to_date), START: I18n.l(@attached_object.start_at, format: :hour_minute), diff --git a/app/views/notifications_mailer/notify_admin_when_user_is_created.html.erb b/app/views/notifications_mailer/notify_admin_when_user_is_created.html.erb index f994e2be5..6412854e5 100644 --- a/app/views/notifications_mailer/notify_admin_when_user_is_created.html.erb +++ b/app/views/notifications_mailer/notify_admin_when_user_is_created.html.erb @@ -6,7 +6,7 @@

- <%= t('.body.user_of_group_html', { GROUP: @attached_object&.group&.name }) %> + <%= t('.body.user_of_group_html', GROUP: @attached_object&.group&.name) %>

<% if @attached_object.invoicing_profile.organization %> diff --git a/app/views/notifications_mailer/notify_admin_when_user_is_imported.html.erb b/app/views/notifications_mailer/notify_admin_when_user_is_imported.html.erb index eac0434bb..8fe92d867 100644 --- a/app/views/notifications_mailer/notify_admin_when_user_is_imported.html.erb +++ b/app/views/notifications_mailer/notify_admin_when_user_is_imported.html.erb @@ -2,7 +2,7 @@ <%= render 'notifications_mailer/shared/hello', recipient: @recipient %>

<%= t('.body.new_account_imported', ID: @attached_object.id, PROVIDER: provider.name) %>
- <%= t('.body.provider_uid', UID:@attached_object.uid) %>

+ <%= t('.body.provider_uid', UID: @attached_object.uid) %>

<% if provider.sso_fields.size > 1 %>

<%= t('.body.known_information') %>

    diff --git a/app/views/notifications_mailer/notify_member_training_authorization_expired.html.erb b/app/views/notifications_mailer/notify_member_training_authorization_expired.html.erb index f4fc020ed..9522275a6 100644 --- a/app/views/notifications_mailer/notify_member_training_authorization_expired.html.erb +++ b/app/views/notifications_mailer/notify_member_training_authorization_expired.html.erb @@ -1,6 +1,6 @@ <%= render 'notifications_mailer/shared/hello', recipient: @recipient %> -<%= t('.body.training_expired_html', { +<%= t('.body.training_expired_html', **{ TRAINING: @attached_object.name, MACHINES: @attached_object.machines.map(&:name).join(', '), DATE: I18n.l((DateTime.current - @attached_object.authorization_period.months).to_date), diff --git a/app/views/notifications_mailer/notify_member_training_auto_cancelled.html.erb b/app/views/notifications_mailer/notify_member_training_auto_cancelled.html.erb index ca8144c00..e50d0a0c3 100644 --- a/app/views/notifications_mailer/notify_member_training_auto_cancelled.html.erb +++ b/app/views/notifications_mailer/notify_member_training_auto_cancelled.html.erb @@ -1,7 +1,7 @@ <%= render 'notifications_mailer/shared/hello', recipient: @recipient %>

    - <%= t('.body.cancelled_training', { + <%= t('.body.cancelled_training', **{ TRAINING: @attached_object.reservation.reservable.name, DATE: I18n.l(@attached_object.start_at.to_date), START: I18n.l(@attached_object.start_at, format: :hour_minute), diff --git a/app/views/notifications_mailer/notify_member_training_invalidated.html.erb b/app/views/notifications_mailer/notify_member_training_invalidated.html.erb index fd6ae0e5f..0390c504a 100644 --- a/app/views/notifications_mailer/notify_member_training_invalidated.html.erb +++ b/app/views/notifications_mailer/notify_member_training_invalidated.html.erb @@ -1,6 +1,6 @@ <%= render 'notifications_mailer/shared/hello', recipient: @recipient %> -<%= t('.body.training_invalidated_html', { +<%= t('.body.training_invalidated_html', **{ TRAINING: @attached_object.name, MACHINES: @attached_object.machines.map(&:name).join(', '), DATE: I18n.l((DateTime.current - @attached_object.authorization_period.months).to_date), From 5bc34971d124b8de953bc4cf0ba56bc5e647876a Mon Sep 17 00:00:00 2001 From: Du Peng Date: Tue, 25 Apr 2023 15:11:46 +0200 Subject: [PATCH 08/10] (bug) unable to show calendar --- CHANGELOG.md | 1 + app/frontend/src/javascript/controllers/admin/calendar.js | 4 ++-- app/frontend/src/javascript/controllers/admin/settings.js | 4 ++-- app/frontend/src/javascript/controllers/calendar.js | 4 ++-- app/frontend/src/javascript/controllers/machines.js.erb | 4 ++-- app/frontend/src/javascript/controllers/spaces.js.erb | 4 ++-- app/frontend/src/javascript/controllers/trainings.js.erb | 4 ++-- 7 files changed, 13 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dd5626219..c0075074b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ - Fix a bug: notification is broken when delete a project - Fix a bug: broken notifications email +- Fix a bug: unable to show calendar - [TODO DEPLOY] `rails fablab:maintenance:clean_abuse_notifications` ## v6.0.3 2023 April 12 diff --git a/app/frontend/src/javascript/controllers/admin/calendar.js b/app/frontend/src/javascript/controllers/admin/calendar.js index cb290a790..bf3363d68 100644 --- a/app/frontend/src/javascript/controllers/admin/calendar.js +++ b/app/frontend/src/javascript/controllers/admin/calendar.js @@ -69,8 +69,8 @@ Application.Controllers.controller('AdminCalendarController', ['$scope', '$state snapDuration: BOOKING_SNAP, selectable: true, selectHelper: true, - minTime: moment.duration(moment(bookingWindowStart.setting.value).format('HH:mm:ss')), - maxTime: moment.duration(moment(bookingWindowEnd.setting.value).format('HH:mm:ss')), + minTime: moment.duration(moment.utc(bookingWindowStart.setting.value).format('HH:mm:ss')), + maxTime: moment.duration(moment.utc(bookingWindowEnd.setting.value).format('HH:mm:ss')), select (start, end, jsEvent, view) { return calendarSelectCb(start, end, jsEvent, view); }, diff --git a/app/frontend/src/javascript/controllers/admin/settings.js b/app/frontend/src/javascript/controllers/admin/settings.js index e43bca1dc..91ffa6818 100644 --- a/app/frontend/src/javascript/controllers/admin/settings.js +++ b/app/frontend/src/javascript/controllers/admin/settings.js @@ -71,8 +71,8 @@ Application.Controllers.controller('SettingsController', ['$scope', '$rootScope' $scope.subscriptionExplicationsAlert = { name: 'subscription_explications_alert', value: settingsPromise.subscription_explications_alert }; $scope.eventExplicationsAlert = { name: 'event_explications_alert', value: settingsPromise.event_explications_alert }; $scope.spaceExplicationsAlert = { name: 'space_explications_alert', value: settingsPromise.space_explications_alert }; - $scope.windowStart = { name: 'booking_window_start', value: settingsPromise.booking_window_start }; - $scope.windowEnd = { name: 'booking_window_end', value: settingsPromise.booking_window_end }; + $scope.windowStart = { name: 'booking_window_start', value: moment.utc(settingsPromise.booking_window_start).format('YYYY-MM-DD HH:mm:ss') }; + $scope.windowEnd = { name: 'booking_window_end', value: moment.utc(settingsPromise.booking_window_end).format('YYYY-MM-DD HH:mm:ss') }; $scope.mainColorSetting = { name: 'main_color', value: settingsPromise.main_color }; $scope.secondColorSetting = { name: 'secondary_color', value: settingsPromise.secondary_color }; $scope.nameGenre = { name: 'name_genre', value: settingsPromise.name_genre }; diff --git a/app/frontend/src/javascript/controllers/calendar.js b/app/frontend/src/javascript/controllers/calendar.js index a4f4ac162..e862a670d 100644 --- a/app/frontend/src/javascript/controllers/calendar.js +++ b/app/frontend/src/javascript/controllers/calendar.js @@ -204,8 +204,8 @@ Application.Controllers.controller('CalendarController', ['$scope', '$state', '$ center: 'title', right: '' }, - minTime: moment.duration(moment(bookingWindowStart.setting.value).format('HH:mm:ss')), - maxTime: moment.duration(moment(bookingWindowEnd.setting.value).format('HH:mm:ss')), + minTime: moment.duration(moment.utc(bookingWindowStart.setting.value).format('HH:mm:ss')), + maxTime: moment.duration(moment.utc(bookingWindowEnd.setting.value).format('HH:mm:ss')), defaultView: window.innerWidth <= 480 ? 'agendaDay' : 'agendaWeek', eventClick (event, jsEvent, view) { return calendarEventClickCb(event, jsEvent, view); diff --git a/app/frontend/src/javascript/controllers/machines.js.erb b/app/frontend/src/javascript/controllers/machines.js.erb index c6fa655c9..b62e273f3 100644 --- a/app/frontend/src/javascript/controllers/machines.js.erb +++ b/app/frontend/src/javascript/controllers/machines.js.erb @@ -447,8 +447,8 @@ Application.Controllers.controller('ReserveMachineController', ['$scope', '$tran // fullCalendar (v2) configuration $scope.calendarConfig = CalendarConfig({ - minTime: moment.duration(moment(settingsPromise.booking_window_start).format('HH:mm:ss')), - maxTime: moment.duration(moment(settingsPromise.booking_window_end).format('HH:mm:ss')), + minTime: moment.duration(moment.utc(settingsPromise.booking_window_start).format('HH:mm:ss')), + maxTime: moment.duration(moment.utc(settingsPromise.booking_window_end).format('HH:mm:ss')), eventClick (event, jsEvent, view) { return calendarEventClickCb(event, jsEvent, view); }, diff --git a/app/frontend/src/javascript/controllers/spaces.js.erb b/app/frontend/src/javascript/controllers/spaces.js.erb index 13899c7c2..fc9586d69 100644 --- a/app/frontend/src/javascript/controllers/spaces.js.erb +++ b/app/frontend/src/javascript/controllers/spaces.js.erb @@ -385,8 +385,8 @@ Application.Controllers.controller('ReserveSpaceController', ['$scope', '$transi // fullCalendar (v2) configuration $scope.calendarConfig = CalendarConfig({ - minTime: moment.duration(moment(settingsPromise.booking_window_start).format('HH:mm:ss')), - maxTime: moment.duration(moment(settingsPromise.booking_window_end).format('HH:mm:ss')), + minTime: moment.duration(moment.utc(settingsPromise.booking_window_start).format('HH:mm:ss')), + maxTime: moment.duration(moment.utc(settingsPromise.booking_window_end).format('HH:mm:ss')), eventClick (event, jsEvent, view) { return calendarEventClickCb(event, jsEvent, view); }, diff --git a/app/frontend/src/javascript/controllers/trainings.js.erb b/app/frontend/src/javascript/controllers/trainings.js.erb index 929e56148..f051845f5 100644 --- a/app/frontend/src/javascript/controllers/trainings.js.erb +++ b/app/frontend/src/javascript/controllers/trainings.js.erb @@ -155,8 +155,8 @@ Application.Controllers.controller('ReserveTrainingController', ['$scope', '$tra // fullCalendar (v2) configuration $scope.calendarConfig = CalendarConfig({ - minTime: moment.duration(moment(settingsPromise.booking_window_start).format('HH:mm:ss')), - maxTime: moment.duration(moment(settingsPromise.booking_window_end).format('HH:mm:ss')), + minTime: moment.duration(moment.utc(settingsPromise.booking_window_start).format('HH:mm:ss')), + maxTime: moment.duration(moment.utc(settingsPromise.booking_window_end).format('HH:mm:ss')), eventClick (event, jsEvent, view) { return calendarEventClickCb(event, jsEvent, view); }, From b5f4d7a541d2f1b0914666f407511e294b2e5ac4 Mon Sep 17 00:00:00 2001 From: Du Peng Date: Tue, 25 Apr 2023 15:29:22 +0200 Subject: [PATCH 09/10] (i18n) update locales --- CHANGELOG.md | 1 + config/locales/app.admin.it.yml | 14 +++++++------- config/locales/app.public.it.yml | 8 ++++---- config/locales/app.shared.it.yml | 2 +- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c0075074b..eb44da00b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ - Fix a bug: notification is broken when delete a project - Fix a bug: broken notifications email - Fix a bug: unable to show calendar +- Update translations from Crowdin - [TODO DEPLOY] `rails fablab:maintenance:clean_abuse_notifications` ## v6.0.3 2023 April 12 diff --git a/config/locales/app.admin.it.yml b/config/locales/app.admin.it.yml index 6398a72a2..4a62c96b2 100644 --- a/config/locales/app.admin.it.yml +++ b/config/locales/app.admin.it.yml @@ -112,7 +112,7 @@ it: create_success: "Lo spazio è stato creato correttamente" update_success: "Lo spazio è stato aggiornato correttamente" event_form: - ACTION_title: "{ACTION, select, create{Nuovo} other{Aggiorna l'}} evento" + ACTION_title: "{ACTION, select, create{Nuovo} other{Aggiorna}} evento" title: "Titolo" matching_visual: "Corrispondenza illustazione" description: "Descrizione" @@ -152,7 +152,7 @@ it: every_month: "Ogni mese" every_year: "Ogni anno" plan_form: - ACTION_title: "{ACTION, select, create{Nuovo} other{Aggiorna l'}}evento" + ACTION_title: "{ACTION, select, create{Nuovo} other{Aggiorna}}evento" tab_settings: "Impostazioni" tab_usage_limits: "Limiti di utilizzo" description: "Descrizione" @@ -285,7 +285,7 @@ it: #manage the trainings & machines slots calendar: calendar_management: "Gestione calendario" - trainings: "Certificazioni" + trainings: "Abilitazioni" machines: "Macchine" spaces: "Spazi" events: "Eventi" @@ -416,7 +416,7 @@ it: themes: "Temi" add_a_new_theme: "Aggiungi un nuovo tema" licences: "Licenze" - statuses: "Statuto" + statuses: "Status" description: "Descrizione" add_a_new_licence: "Aggiungere una nuova licenza" manage_abuses: "Gestisci i report" @@ -1783,7 +1783,7 @@ it: title: "Titolo" fablab_title: "Titolo del FabLab" title_concordance: "Corrispondenza del titolo" - male: "Machio." + male: "Maschio." female: "Femmina." neutral: "Neutrale." eg: "es:" @@ -1804,7 +1804,7 @@ it: public_registrations_allowed: "Registrazioni pubbliche consentite" help: "Aiuto" feature_tour: "Tour delle funzionalità" - feature_tour_info_html: "

    Quando un amministratore o un manager è connesso, un tour di funzionalità verrà attivato la prima volta che visita ogni sezione dell'applicazione. È possibile modificare questo comportamento in uno dei seguenti valori:

    • « Una volta » per mantenere il comportamento predefinito.
    • « Per sessione » per visualizzare i tour ogni volta che riapri l'applicazione.
    • « trigger manuale» per impedire la visualizzazione automatica dei tour. Sarà comunque possibile attivarli premendo il tasto F1 o cliccando su « Aiuto » nel menu dell'utente.
    " + feature_tour_info_html: "

    Quando un amministratore o un manager è connesso, un tour di funzionalità verrà attivato la prima volta che visita ogni sezione dell'applicazione. È possibile modificare questo comportamento in uno dei seguenti valori:

    • « Una volta » per mantenere il comportamento predefinito.
    • « Per sessione » per visualizzare i tour ogni volta che riapri l'applicazione.
    • « Trigger manuale» per impedire la visualizzazione automatica dei tour. Sarà comunque possibile attivarli premendo il tasto F1 o cliccando su « Aiuto » nel menu dell'utente.
    " feature_tour_display_mode: "Modalità visualizzazione tour funzionalità" display_mode: once: "Una volta" @@ -2373,7 +2373,7 @@ it: filter_clear: "Cancella tutto" filter_apply: "Applica" filter_ref: "Per riferimento" - filter_status: "Per stato" + filter_status: "Per status" filter_client: "Per cliente" filter_period: "Per periodo" filter_period_from: "Da" diff --git a/config/locales/app.public.it.yml b/config/locales/app.public.it.yml index 5c6a0c76f..963c6a577 100644 --- a/config/locales/app.public.it.yml +++ b/config/locales/app.public.it.yml @@ -185,12 +185,12 @@ it: rough_draft: "Bozza preliminare" status_filter: all_statuses: "Tutti gli stati" - select_status: "Seleziona uno stato" + select_status: "Seleziona uno status" #details of a projet projects_show: rough_draft: "Bozza" project_description: "Descrizione del progetto" - by_name: "Per {NAME}" + by_name: "di {NAME}" step_N: "Fase {INDEX}" share_on_facebook: "Condividi su Facebook" share_on_twitter: "Condividi su Twitter" @@ -237,7 +237,7 @@ it: all_machines: "Tutte le macchine" machine_card: book: "Prenota" - consult: "Guarda" + consult: "Vedi" #details of a machine machines_show: book_this_machine: "Modifica questa macchina" @@ -549,7 +549,7 @@ it: content: "Le macchine sono gli utensili a disposizione degli utenti da prenotare." view: title: "Visualizza" - content: "Per modificare o eliminare una macchina, prima clicca qui. Non sarai in grado di eliminare una macchina che è già stata associata a uno slot, ma potrai disattivarla." + content: "Per modificare o eliminare una macchina, clicca qui. Non sarai in grado di eliminare una macchina che è già stata associata a uno slot di disponibilità, ma potrai disattivarla." reserve: title: "Prenota" content: "Clicca qui per accedere a un calendario che mostra slot liberi. Questo ti permetterà di prenotare questa macchina per un utente e di gestire le prenotazioni esistenti." diff --git a/config/locales/app.shared.it.yml b/config/locales/app.shared.it.yml index 9adae1b81..f136a1376 100644 --- a/config/locales/app.shared.it.yml +++ b/config/locales/app.shared.it.yml @@ -4,7 +4,7 @@ it: #translations of common buttons buttons: confirm_changes: "Conferma le modifiche" - consult: "Guarda" + consult: "Vedi" edit: "Modifica" change: "Modifica" delete: "Elimina" From fe7394d9a84119e705f94638e81586ab59f7e0af Mon Sep 17 00:00:00 2001 From: Du Peng Date: Tue, 25 Apr 2023 16:00:18 +0200 Subject: [PATCH 10/10] Version 6.0.4 --- CHANGELOG.md | 2 ++ package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb44da00b..cccb06abf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Changelog Fab-manager +## v6.0.4 2023 April 25 + - Fix a bug: notification is broken when delete a project - Fix a bug: broken notifications email - Fix a bug: unable to show calendar diff --git a/package.json b/package.json index 3b042d3a8..82bfc73d6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fab-manager", - "version": "6.0.3", + "version": "6.0.4", "description": "Fab-manager is the FabLab management solution. It provides a comprehensive, web-based, open-source tool to simplify your administrative tasks and your marker's projects.", "keywords": [ "fablab",