mirror of
https://github.com/mastodon/mastodon.git
synced 2024-10-04 15:12:07 +00:00
Compare commits
12 Commits
cb20394695
...
38bf54875f
Author | SHA1 | Date | |
---|---|---|---|
|
38bf54875f | ||
|
4c0e44ebbe | ||
|
8e39cbf54f | ||
|
2ed5984bb8 | ||
|
46536de358 | ||
|
0c0acc245a | ||
|
ccd65dc0e2 | ||
|
b1b937aaba | ||
|
c89ee2f5b4 | ||
|
7dd97dead4 | ||
|
5d7e12b72d | ||
|
0854edefb7 |
|
@ -19,10 +19,6 @@ code {
|
|||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
form.button_to {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.fade-out-top {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
|
|
|
@ -16,7 +16,7 @@ class AdminMailer < ApplicationMailer
|
|||
def new_report(report)
|
||||
@report = report
|
||||
|
||||
locale_for_account(@me) do
|
||||
with_user_settings(@user) do
|
||||
mail subject: default_i18n_subject(instance: @instance, id: @report.id)
|
||||
end
|
||||
end
|
||||
|
@ -24,7 +24,7 @@ class AdminMailer < ApplicationMailer
|
|||
def new_appeal(appeal)
|
||||
@appeal = appeal
|
||||
|
||||
locale_for_account(@me) do
|
||||
with_user_settings(@user) do
|
||||
mail subject: default_i18n_subject(instance: @instance, username: @appeal.account.username)
|
||||
end
|
||||
end
|
||||
|
@ -32,7 +32,7 @@ class AdminMailer < ApplicationMailer
|
|||
def new_pending_account(user)
|
||||
@account = user.account
|
||||
|
||||
locale_for_account(@me) do
|
||||
with_user_settings(@user) do
|
||||
mail subject: default_i18n_subject(instance: @instance, username: @account.username)
|
||||
end
|
||||
end
|
||||
|
@ -42,7 +42,7 @@ class AdminMailer < ApplicationMailer
|
|||
@tags = tags
|
||||
@statuses = statuses
|
||||
|
||||
locale_for_account(@me) do
|
||||
with_user_settings(@user) do
|
||||
mail subject: default_i18n_subject(instance: @instance)
|
||||
end
|
||||
end
|
||||
|
@ -50,7 +50,7 @@ class AdminMailer < ApplicationMailer
|
|||
def new_software_updates
|
||||
@software_updates = SoftwareUpdate.all.to_a.sort_by(&:gem_version)
|
||||
|
||||
locale_for_account(@me) do
|
||||
with_user_settings(@user) do
|
||||
mail subject: default_i18n_subject(instance: @instance)
|
||||
end
|
||||
end
|
||||
|
@ -58,13 +58,13 @@ class AdminMailer < ApplicationMailer
|
|||
def new_critical_software_updates
|
||||
@software_updates = SoftwareUpdate.where(urgent: true).to_a.sort_by(&:gem_version)
|
||||
|
||||
locale_for_account(@me) do
|
||||
with_user_settings(@user) do
|
||||
mail subject: default_i18n_subject(instance: @instance)
|
||||
end
|
||||
end
|
||||
|
||||
def auto_close_registrations
|
||||
locale_for_account(@me) do
|
||||
with_user_settings(@user) do
|
||||
mail subject: default_i18n_subject(instance: @instance)
|
||||
end
|
||||
end
|
||||
|
@ -73,6 +73,7 @@ class AdminMailer < ApplicationMailer
|
|||
|
||||
def process_params
|
||||
@me = params[:recipient]
|
||||
@user = @me.user
|
||||
end
|
||||
|
||||
def set_instance
|
||||
|
|
|
@ -11,8 +11,10 @@ class ApplicationMailer < ActionMailer::Base
|
|||
|
||||
protected
|
||||
|
||||
def locale_for_account(account, &block)
|
||||
I18n.with_locale(account.user_locale || I18n.default_locale, &block)
|
||||
def with_user_settings(user, &block)
|
||||
I18n.with_locale(user.locale || I18n.default_locale) do
|
||||
Time.use_zone(user.time_zone || Rails.configuration.x.default_time_zone, &block)
|
||||
end
|
||||
end
|
||||
|
||||
def set_autoreply_headers!
|
||||
|
|
|
@ -22,13 +22,13 @@ class NotificationMailer < ApplicationMailer
|
|||
def mention
|
||||
return if @status.blank?
|
||||
|
||||
locale_for_account(@me) do
|
||||
with_user_settings(@user) do
|
||||
mail subject: default_i18n_subject(name: @status.account.acct)
|
||||
end
|
||||
end
|
||||
|
||||
def follow
|
||||
locale_for_account(@me) do
|
||||
with_user_settings(@user) do
|
||||
mail subject: default_i18n_subject(name: @account.acct)
|
||||
end
|
||||
end
|
||||
|
@ -36,7 +36,7 @@ class NotificationMailer < ApplicationMailer
|
|||
def favourite
|
||||
return if @status.blank?
|
||||
|
||||
locale_for_account(@me) do
|
||||
with_user_settings(@user) do
|
||||
mail subject: default_i18n_subject(name: @account.acct)
|
||||
end
|
||||
end
|
||||
|
@ -44,13 +44,13 @@ class NotificationMailer < ApplicationMailer
|
|||
def reblog
|
||||
return if @status.blank?
|
||||
|
||||
locale_for_account(@me) do
|
||||
with_user_settings(@user) do
|
||||
mail subject: default_i18n_subject(name: @account.acct)
|
||||
end
|
||||
end
|
||||
|
||||
def follow_request
|
||||
locale_for_account(@me) do
|
||||
with_user_settings(@user) do
|
||||
mail subject: default_i18n_subject(name: @account.acct)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -20,7 +20,7 @@ class UserMailer < Devise::Mailer
|
|||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(locale) do
|
||||
with_user_settings(@resource) do
|
||||
mail to: @resource.unconfirmed_email.presence || @resource.email,
|
||||
subject: I18n.t(@resource.pending_reconfirmation? ? 'devise.mailer.reconfirmation_instructions.subject' : 'devise.mailer.confirmation_instructions.subject', instance: @instance),
|
||||
template_name: @resource.pending_reconfirmation? ? 'reconfirmation_instructions' : 'confirmation_instructions'
|
||||
|
@ -33,7 +33,7 @@ class UserMailer < Devise::Mailer
|
|||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(locale(use_current_locale: true)) do
|
||||
with_user_settings(@resource, use_current_locale: true) do
|
||||
mail subject: default_devise_subject
|
||||
end
|
||||
end
|
||||
|
@ -43,7 +43,7 @@ class UserMailer < Devise::Mailer
|
|||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(locale(use_current_locale: true)) do
|
||||
with_user_settings(@resource, use_current_locale: true) do
|
||||
mail subject: default_devise_subject
|
||||
end
|
||||
end
|
||||
|
@ -53,7 +53,7 @@ class UserMailer < Devise::Mailer
|
|||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(locale(use_current_locale: true)) do
|
||||
with_user_settings(@resource, use_current_locale: true) do
|
||||
mail subject: default_devise_subject
|
||||
end
|
||||
end
|
||||
|
@ -63,7 +63,7 @@ class UserMailer < Devise::Mailer
|
|||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(locale(use_current_locale: true)) do
|
||||
with_user_settings(@resource, use_current_locale: true) do
|
||||
mail subject: default_devise_subject
|
||||
end
|
||||
end
|
||||
|
@ -73,7 +73,7 @@ class UserMailer < Devise::Mailer
|
|||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(locale(use_current_locale: true)) do
|
||||
with_user_settings(@resource, use_current_locale: true) do
|
||||
mail subject: default_devise_subject
|
||||
end
|
||||
end
|
||||
|
@ -83,7 +83,7 @@ class UserMailer < Devise::Mailer
|
|||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(locale(use_current_locale: true)) do
|
||||
with_user_settings(@resource, use_current_locale: true) do
|
||||
mail subject: default_devise_subject
|
||||
end
|
||||
end
|
||||
|
@ -93,7 +93,7 @@ class UserMailer < Devise::Mailer
|
|||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(locale(use_current_locale: true)) do
|
||||
with_user_settings(@resource, use_current_locale: true) do
|
||||
mail subject: default_devise_subject
|
||||
end
|
||||
end
|
||||
|
@ -103,7 +103,7 @@ class UserMailer < Devise::Mailer
|
|||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(locale(use_current_locale: true)) do
|
||||
with_user_settings(@resource, use_current_locale: true) do
|
||||
mail subject: default_devise_subject
|
||||
end
|
||||
end
|
||||
|
@ -114,7 +114,7 @@ class UserMailer < Devise::Mailer
|
|||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(locale(use_current_locale: true)) do
|
||||
with_user_settings(@resource, use_current_locale: true) do
|
||||
mail subject: I18n.t('devise.mailer.webauthn_credential.added.subject')
|
||||
end
|
||||
end
|
||||
|
@ -125,7 +125,7 @@ class UserMailer < Devise::Mailer
|
|||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(locale(use_current_locale: true)) do
|
||||
with_user_settings(@resource, use_current_locale: true) do
|
||||
mail subject: I18n.t('devise.mailer.webauthn_credential.deleted.subject')
|
||||
end
|
||||
end
|
||||
|
@ -141,7 +141,7 @@ class UserMailer < Devise::Mailer
|
|||
@has_active_relationships = @resource.account.active_relationships.exists?
|
||||
@has_statuses = @resource.account.statuses.exists?
|
||||
|
||||
I18n.with_locale(locale) do
|
||||
with_user_settings(@resource) do
|
||||
mail subject: default_i18n_subject
|
||||
end
|
||||
end
|
||||
|
@ -152,7 +152,7 @@ class UserMailer < Devise::Mailer
|
|||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(locale) do
|
||||
with_user_settings(@resource) do
|
||||
mail subject: default_i18n_subject
|
||||
end
|
||||
end
|
||||
|
@ -162,7 +162,7 @@ class UserMailer < Devise::Mailer
|
|||
@warning = warning
|
||||
@statuses = @warning.statuses.includes(:account, :preloadable_poll, :media_attachments, active_mentions: [:account])
|
||||
|
||||
I18n.with_locale(locale) do
|
||||
with_user_settings(@resource) do
|
||||
mail subject: I18n.t("user_mailer.warning.subject.#{@warning.action}", acct: "@#{user.account.local_username_and_domain}")
|
||||
end
|
||||
end
|
||||
|
@ -171,7 +171,7 @@ class UserMailer < Devise::Mailer
|
|||
@resource = user
|
||||
@appeal = appeal
|
||||
|
||||
I18n.with_locale(locale) do
|
||||
with_user_settings(@resource) do
|
||||
mail subject: default_i18n_subject(date: l(@appeal.created_at))
|
||||
end
|
||||
end
|
||||
|
@ -180,7 +180,7 @@ class UserMailer < Devise::Mailer
|
|||
@resource = user
|
||||
@appeal = appeal
|
||||
|
||||
I18n.with_locale(locale) do
|
||||
with_user_settings(@resource) do
|
||||
mail subject: default_i18n_subject(date: l(@appeal.created_at))
|
||||
end
|
||||
end
|
||||
|
@ -190,9 +190,10 @@ class UserMailer < Devise::Mailer
|
|||
@remote_ip = remote_ip
|
||||
@user_agent = user_agent
|
||||
@detection = Browser.new(user_agent)
|
||||
@timestamp = timestamp.to_time.utc
|
||||
|
||||
I18n.with_locale(locale) do
|
||||
with_user_settings(@resource) do
|
||||
@timestamp = timestamp.in_time_zone
|
||||
|
||||
mail subject: default_i18n_subject
|
||||
end
|
||||
end
|
||||
|
@ -202,9 +203,10 @@ class UserMailer < Devise::Mailer
|
|||
@remote_ip = remote_ip
|
||||
@user_agent = user_agent
|
||||
@detection = Browser.new(user_agent)
|
||||
@timestamp = timestamp.to_time.utc
|
||||
|
||||
I18n.with_locale(locale) do
|
||||
with_user_settings(@resource) do
|
||||
@timestamp = timestamp.in_time_zone
|
||||
|
||||
mail subject: default_i18n_subject
|
||||
end
|
||||
end
|
||||
|
@ -219,7 +221,9 @@ class UserMailer < Devise::Mailer
|
|||
@instance = Rails.configuration.x.local_domain
|
||||
end
|
||||
|
||||
def locale(use_current_locale: false)
|
||||
@resource.locale.presence || (use_current_locale && I18n.locale) || I18n.default_locale
|
||||
def with_user_settings(user, use_current_locale: false, &block)
|
||||
I18n.with_locale(user.locale || (use_current_locale && I18n.locale) || I18n.default_locale) do
|
||||
Time.use_zone(user.time_zone || Rails.configuration.x.default_time_zone, &block)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
%p.muted-hint= deletion_request.present? ? t('admin.accounts.remote_suspension_reversible_hint_html', date: content_tag(:strong, l(deletion_request.due_at.to_date))) : t('admin.accounts.remote_suspension_irreversible')
|
||||
- else
|
||||
%p.muted-hint= deletion_request.present? ? t('admin.accounts.suspension_reversible_hint_html', date: content_tag(:strong, l(deletion_request.due_at.to_date))) : t('admin.accounts.suspension_irreversible')
|
||||
= button_to t('admin.accounts.undo_suspension'), unsuspend_admin_account_path(account.id), class: :button if can?(:unsuspend, account)
|
||||
= button_to t('admin.accounts.redownload'), redownload_admin_account_path(account.id), class: :button if can?(:redownload, account) && account.suspension_origin_remote?
|
||||
= link_to t('admin.accounts.undo_suspension'), unsuspend_admin_account_path(account.id), method: :post, class: 'button' if can?(:unsuspend, account)
|
||||
= link_to t('admin.accounts.redownload'), redownload_admin_account_path(account.id), method: :post, class: 'button' if can?(:redownload, account) && account.suspension_origin_remote?
|
||||
- if deletion_request.present? && can?(:destroy, account)
|
||||
= link_to t('admin.accounts.delete'), admin_account_path(account.id), method: :delete, class: 'button button--destructive', data: { confirm: t('admin.accounts.are_you_sure') }
|
||||
- else
|
||||
|
@ -14,28 +14,28 @@
|
|||
- if account.local? && account.user_approved?
|
||||
= link_to t('admin.accounts.warn'), new_admin_account_action_path(account.id, type: 'none'), class: 'button' if can?(:warn, account)
|
||||
- if account.user_disabled?
|
||||
= button_to t('admin.accounts.enable'), enable_admin_account_path(account.id), class: :button if can?(:enable, account.user)
|
||||
= link_to t('admin.accounts.enable'), enable_admin_account_path(account.id), method: :post, class: 'button' if can?(:enable, account.user)
|
||||
- elsif can?(:disable, account.user)
|
||||
= link_to t('admin.accounts.disable'), new_admin_account_action_path(account.id, type: 'disable'), class: 'button'
|
||||
- if account.sensitized?
|
||||
= button_to t('admin.accounts.undo_sensitized'), unsensitive_admin_account_path(account.id), class: :button if can?(:unsensitive, account)
|
||||
= link_to t('admin.accounts.undo_sensitized'), unsensitive_admin_account_path(account.id), method: :post, class: 'button' if can?(:unsensitive, account)
|
||||
- elsif !account.local? || account.user_approved?
|
||||
= link_to t('admin.accounts.sensitive'), new_admin_account_action_path(account.id, type: 'sensitive'), class: 'button' if can?(:sensitive, account)
|
||||
- if account.silenced?
|
||||
= button_to t('admin.accounts.undo_silenced'), unsilence_admin_account_path(account.id), class: :button if can?(:unsilence, account)
|
||||
= link_to t('admin.accounts.undo_silenced'), unsilence_admin_account_path(account.id), method: :post, class: 'button' if can?(:unsilence, account)
|
||||
- elsif !account.local? || account.user_approved?
|
||||
= link_to t('admin.accounts.silence'), new_admin_account_action_path(account.id, type: 'silence'), class: 'button' if can?(:silence, account)
|
||||
- if account.local?
|
||||
- if account.user_pending?
|
||||
= button_to t('admin.accounts.approve'), approve_admin_account_path(account.id), data: { confirm: t('admin.accounts.are_you_sure') }, class: :button if can?(:approve, account.user)
|
||||
= button_to t('admin.accounts.reject'), reject_admin_account_path(account.id), data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' if can?(:reject, account.user)
|
||||
= link_to t('admin.accounts.approve'), approve_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button' if can?(:approve, account.user)
|
||||
= link_to t('admin.accounts.reject'), reject_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' if can?(:reject, account.user)
|
||||
- if !account.user_confirmed? && can?(:confirm, account.user)
|
||||
= button_to t('admin.accounts.confirm'), admin_account_confirmation_path(account.id), class: :button
|
||||
= link_to t('admin.accounts.confirm'), admin_account_confirmation_path(account.id), method: :post, class: 'button'
|
||||
- if (!account.local? || account.user_approved?) && can?(:suspend, account)
|
||||
= link_to t('admin.accounts.perform_full_suspension'), new_admin_account_action_path(account.id, type: 'suspend'), class: 'button'
|
||||
%div
|
||||
- if account.local?
|
||||
- if !account.memorial? && account.user_approved? && can?(:memorialize, account)
|
||||
= button_to t('admin.accounts.memorialize'), memorialize_admin_account_path(account.id), data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive'
|
||||
= link_to t('admin.accounts.memorialize'), memorialize_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive'
|
||||
- elsif can?(:redownload, account)
|
||||
= button_to t('admin.accounts.redownload'), redownload_admin_account_path(account.id), class: :button
|
||||
= link_to t('admin.accounts.redownload'), redownload_admin_account_path(account.id), method: :post, class: 'button'
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
= render 'admin/accounts/counters', account: @account
|
||||
|
||||
- if @account.local? && @account.user.nil?
|
||||
= button_to t('admin.accounts.unblock_email'), unblock_email_admin_account_path(@account.id), class: :button if can?(:unblock_email, @account) && CanonicalEmailBlock.exists?(reference_account_id: @account.id)
|
||||
= link_to t('admin.accounts.unblock_email'), unblock_email_admin_account_path(@account.id), method: :post, class: 'button' if can?(:unblock_email, @account) && CanonicalEmailBlock.exists?(reference_account_id: @account.id)
|
||||
- else
|
||||
.table-wrapper
|
||||
%table.table.inline-table
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
- if @instance.domain_allow
|
||||
= link_to t('admin.domain_allows.undo'), admin_domain_allow_path(@instance.domain_allow), class: 'button button--destructive', data: { confirm: t('admin.accounts.are_you_sure'), method: :delete }
|
||||
- else
|
||||
= button_to t('admin.domain_allows.add_new'), admin_domain_allows_path(domain_allow: { domain: @instance.domain }), class: :button
|
||||
= link_to t('admin.domain_allows.add_new'), admin_domain_allows_path(domain_allow: { domain: @instance.domain }), class: 'button', method: :post
|
||||
- else
|
||||
%p= t('admin.instances.content_policies.description_html')
|
||||
|
||||
|
@ -40,7 +40,7 @@
|
|||
%td= @instance.domain_block.policies.map { |policy| t(policy, scope: 'admin.instances.content_policies.policies') }.join(' · ')
|
||||
|
||||
= link_to t('admin.domain_blocks.edit'), edit_admin_domain_block_path(@instance.domain_block), class: 'button'
|
||||
= button_to t('admin.domain_blocks.undo'), admin_domain_block_path(@instance.domain_block), class: :button, data: { confirm: t('admin.accounts.are_you_sure'), method: :delete }
|
||||
= link_to t('admin.domain_blocks.undo'), admin_domain_block_path(@instance.domain_block), class: 'button', data: { confirm: t('admin.accounts.are_you_sure'), method: :delete }
|
||||
- else
|
||||
= link_to t('admin.domain_blocks.add_new'), new_admin_domain_block_path(_domain: @instance.domain), class: 'button'
|
||||
|
||||
|
@ -70,16 +70,16 @@
|
|||
- if @instance.unavailable?
|
||||
%span.negative-hint
|
||||
= t('admin.instances.availability.failure_threshold_reached', date: l(@instance.unavailable_domain.created_at.to_date))
|
||||
= button_to t('admin.instances.delivery.restart'), restart_delivery_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure') }
|
||||
= link_to t('admin.instances.delivery.restart'), restart_delivery_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure'), method: :post }
|
||||
- elsif @instance.exhausted_deliveries_days.empty?
|
||||
%span.positive-hint
|
||||
= t('admin.instances.availability.no_failures_recorded')
|
||||
= button_to t('admin.instances.delivery.stop'), stop_delivery_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure') }
|
||||
= link_to t('admin.instances.delivery.stop'), stop_delivery_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure'), method: :post }
|
||||
- else
|
||||
%span.negative-hint
|
||||
= t('admin.instances.availability.failures_recorded', count: @instance.delivery_failure_tracker.days)
|
||||
%span= button_to t('admin.instances.delivery.clear'), clear_delivery_errors_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure') } unless @instance.exhausted_deliveries_days.empty?
|
||||
%span= button_to t('admin.instances.delivery.stop'), stop_delivery_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure') }
|
||||
%span= link_to t('admin.instances.delivery.clear'), clear_delivery_errors_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure'), method: :post } unless @instance.exhausted_deliveries_days.empty?
|
||||
%span= link_to t('admin.instances.delivery.stop'), stop_delivery_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure'), method: :post }
|
||||
|
||||
- if @instance.purgeable?
|
||||
%p= t('admin.instances.purge_description_html')
|
||||
|
|
|
@ -34,4 +34,4 @@
|
|||
= paginate @invites
|
||||
|
||||
- if policy(:invite).deactivate_all?
|
||||
= button_to t('admin.invites.deactivate_all'), deactivate_all_admin_invites_path, data: { confirm: t('admin.accounts.are_you_sure') }, class: :button
|
||||
= link_to t('admin.invites.deactivate_all'), deactivate_all_admin_invites_path, method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button'
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
.report-actions
|
||||
.report-actions__item
|
||||
.report-actions__item__button
|
||||
= button_to t('admin.reports.mark_as_resolved'), resolve_admin_report_path(report), class: :button
|
||||
= link_to t('admin.reports.mark_as_resolved'), resolve_admin_report_path(report), method: :post, class: 'button'
|
||||
.report-actions__item__description
|
||||
= t('admin.reports.actions.resolve_description_html')
|
||||
- if statuses.any? { |status| (status.with_media? || status.with_preview_card?) && !status.discarded? }
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
|
||||
- content_for :heading_actions do
|
||||
- if @report.unresolved?
|
||||
= button_to t('admin.reports.mark_as_resolved'), resolve_admin_report_path(@report), class: :button
|
||||
= link_to t('admin.reports.mark_as_resolved'), resolve_admin_report_path(@report), method: :post, class: 'button'
|
||||
- else
|
||||
= button_to t('admin.reports.mark_as_unresolved'), reopen_admin_report_path(@report), class: :button
|
||||
= link_to t('admin.reports.mark_as_unresolved'), reopen_admin_report_path(@report), method: :post, class: 'button'
|
||||
|
||||
- unless @report.account.local? || @report.target_account.local?
|
||||
.flash-message= t('admin.reports.forwarded_replies_explanation')
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
|
||||
- content_for :heading_actions do
|
||||
- if @appeal.persisted?
|
||||
= button_to t('disputes.strikes.approve_appeal'), approve_admin_disputes_appeal_path(@appeal), class: :button if can?(:approve, @appeal)
|
||||
= button_to t('disputes.strikes.reject_appeal'), reject_admin_disputes_appeal_path(@appeal), class: 'button button--destructive' if can?(:reject, @appeal)
|
||||
= link_to t('disputes.strikes.approve_appeal'), approve_admin_disputes_appeal_path(@appeal), method: :post, class: 'button' if can?(:approve, @appeal)
|
||||
= link_to t('disputes.strikes.reject_appeal'), reject_admin_disputes_appeal_path(@appeal), method: :post, class: 'button button--destructive' if can?(:reject, @appeal)
|
||||
|
||||
- if @strike.overruled?
|
||||
%p.hint
|
||||
|
|
|
@ -28,4 +28,4 @@
|
|||
= link_to a.remote_url, a.remote_url
|
||||
|
||||
%p.email-status-footer
|
||||
= link_to l(status.created_at.in_time_zone(time_zone.presence), format: :with_time_zone), web_url("@#{status.account.pretty_acct}/#{status.id}")
|
||||
= link_to l(status.created_at, format: :with_time_zone), web_url("@#{status.account.pretty_acct}/#{status.id}")
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
%p.muted-hint= t('exports.archive_takeout.hint_html')
|
||||
|
||||
- if policy(:backup).create?
|
||||
%p= button_to t('exports.archive_takeout.request'), settings_export_path, class: :button
|
||||
%p= link_to t('exports.archive_takeout.request'), settings_export_path, class: 'button', method: :post
|
||||
|
||||
- unless @backups.empty?
|
||||
%hr.spacer/
|
||||
|
|
|
@ -6,4 +6,4 @@
|
|||
|
||||
%hr.spacer/
|
||||
|
||||
= button_to t('otp_authentication.setup'), settings_otp_authentication_path, class: 'block-button'
|
||||
= link_to t('otp_authentication.setup'), settings_otp_authentication_path, data: { method: :post }, class: 'block-button'
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
= t('settings.two_factor_authentication')
|
||||
|
||||
- content_for :heading_actions do
|
||||
= button_to t('two_factor_authentication.disable'), disable_settings_two_factor_authentication_methods_path, class: 'button button--destructive'
|
||||
= link_to t('two_factor_authentication.disable'), disable_settings_two_factor_authentication_methods_path, class: 'button button--destructive', method: :post
|
||||
|
||||
%p.hint
|
||||
%span.positive-hint
|
||||
|
@ -38,4 +38,4 @@
|
|||
%hr.spacer/
|
||||
|
||||
.simple_form
|
||||
= button_to t('two_factor_authentication.generate_recovery_codes'), settings_two_factor_authentication_recovery_codes_path, class: 'block-button'
|
||||
= link_to t('two_factor_authentication.generate_recovery_codes'), settings_two_factor_authentication_recovery_codes_path, data: { method: :post }, class: 'block-button'
|
||||
|
|
|
@ -7,6 +7,6 @@
|
|||
%tr
|
||||
%td.email-inner-card-td.email-prose
|
||||
%p= t 'user_mailer.appeal_approved.explanation',
|
||||
appeal_date: l(@appeal.created_at.in_time_zone(@resource.time_zone.presence), format: :with_time_zone),
|
||||
strike_date: l(@appeal.strike.created_at.in_time_zone(@resource.time_zone.presence), format: :with_time_zone)
|
||||
appeal_date: l(@appeal.created_at, format: :with_time_zone),
|
||||
strike_date: l(@appeal.strike.created_at, format: :with_time_zone)
|
||||
= render 'application/mailer/button', text: t('user_mailer.appeal_approved.action'), url: root_url
|
||||
|
|
|
@ -2,6 +2,6 @@
|
|||
|
||||
===
|
||||
|
||||
<%= t 'user_mailer.appeal_approved.explanation', appeal_date: l(@appeal.created_at.in_time_zone(@resource.time_zone.presence), format: :with_time_zone), strike_date: l(@appeal.strike.created_at.in_time_zone(@resource.time_zone.presence), format: :with_time_zone) %>
|
||||
<%= t 'user_mailer.appeal_approved.explanation', appeal_date: l(@appeal.created_at, format: :with_time_zone), strike_date: l(@appeal.strike.created_at, format: :with_time_zone) %>
|
||||
|
||||
=> <%= root_url %>
|
||||
|
|
|
@ -7,6 +7,6 @@
|
|||
%tr
|
||||
%td.email-inner-card-td.email-prose
|
||||
%p= t 'user_mailer.appeal_rejected.explanation',
|
||||
appeal_date: l(@appeal.created_at.in_time_zone(@resource.time_zone.presence), format: :with_time_zone),
|
||||
strike_date: l(@appeal.strike.created_at.in_time_zone(@resource.time_zone.presence), format: :with_time_zone)
|
||||
appeal_date: l(@appeal.created_at, format: :with_time_zone),
|
||||
strike_date: l(@appeal.strike.created_at, format: :with_time_zone)
|
||||
= render 'application/mailer/button', text: t('user_mailer.appeal_approved.action'), url: root_url
|
||||
|
|
|
@ -2,6 +2,6 @@
|
|||
|
||||
===
|
||||
|
||||
<%= t 'user_mailer.appeal_rejected.explanation', appeal_date: l(@appeal.created_at.in_time_zone(@resource.time_zone.presence), format: :with_time_zone), strike_date: l(@appeal.strike.created_at.in_time_zone(@resource.time_zone.presence), format: :with_time_zone) %>
|
||||
<%= t 'user_mailer.appeal_rejected.explanation', appeal_date: l(@appeal.created_at, format: :with_time_zone), strike_date: l(@appeal.strike.created_at, format: :with_time_zone) %>
|
||||
|
||||
=> <%= root_url %>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
platform: t("sessions.platforms.#{@detection.platform.id}", default: @detection.platform.id.to_s)
|
||||
%br/
|
||||
%strong #{t('sessions.date')}:
|
||||
= l(@timestamp.in_time_zone(@resource.time_zone.presence), format: :with_time_zone)
|
||||
= l(@timestamp, format: :with_time_zone)
|
||||
= render 'application/mailer/button', text: t('settings.account_settings'), url: edit_user_registration_url
|
||||
%p= t 'user_mailer.failed_2fa.further_actions_html',
|
||||
action: link_to(t('user_mailer.suspicious_sign_in.change_password'), edit_user_registration_url)
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
<%= t('sessions.ip') %>: <%= @remote_ip %>
|
||||
<%= t('sessions.browser') %>: <%= t('sessions.description', browser: t("sessions.browsers.#{@detection.id}", default: "#{@detection.id}"), platform: t("sessions.platforms.#{@detection.platform.id}", default: "#{@detection.platform.id}")) %>
|
||||
<%= l(@timestamp.in_time_zone(@resource.time_zone.presence), format: :with_time_zone) %>
|
||||
<%= l(@timestamp, format: :with_time_zone) %>
|
||||
|
||||
<%= t 'user_mailer.failed_2fa.further_actions_html', action: t('user_mailer.suspicious_sign_in.change_password') %>
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
platform: t("sessions.platforms.#{@detection.platform.id}", default: @detection.platform.id.to_s)
|
||||
%br/
|
||||
%strong #{t('sessions.date')}:
|
||||
= l(@timestamp.in_time_zone(@resource.time_zone.presence), format: :with_time_zone)
|
||||
= l(@timestamp, format: :with_time_zone)
|
||||
= render 'application/mailer/button', text: t('settings.account_settings'), url: edit_user_registration_url
|
||||
%p= t 'user_mailer.suspicious_sign_in.further_actions_html',
|
||||
action: link_to(t('user_mailer.suspicious_sign_in.change_password'), edit_user_registration_url)
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
<%= t('sessions.ip') %>: <%= @remote_ip %>
|
||||
<%= t('sessions.browser') %>: <%= t('sessions.description', browser: t("sessions.browsers.#{@detection.id}", default: "#{@detection.id}"), platform: t("sessions.platforms.#{@detection.platform.id}", default: "#{@detection.platform.id}")) %>
|
||||
<%= l(@timestamp.in_time_zone(@resource.time_zone.presence), format: :with_time_zone) %>
|
||||
<%= l(@timestamp, format: :with_time_zone) %>
|
||||
|
||||
<%= t 'user_mailer.suspicious_sign_in.further_actions_html', action: t('user_mailer.suspicious_sign_in.change_password') %>
|
||||
|
||||
|
|
6
config/initializers/time_zone.rb
Normal file
6
config/initializers/time_zone.rb
Normal file
|
@ -0,0 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Raise if invalid zone is specified
|
||||
Rails.application.configure do
|
||||
config.x.default_time_zone = Time.find_zone!(ENV.fetch('DEFAULT_TIME_ZONE', 'UTC')).name
|
||||
end
|
|
@ -16,8 +16,8 @@ RSpec.describe NotificationMailer do
|
|||
|
||||
let(:receiver) { Fabricate(:user, account_attributes: { username: 'alice' }) }
|
||||
let(:sender) { Fabricate(:account, username: 'bob') }
|
||||
let(:foreign_status) { Fabricate(:status, account: sender, text: 'The body of the foreign status') }
|
||||
let(:own_status) { Fabricate(:status, account: receiver.account, text: 'The body of the own status') }
|
||||
let(:foreign_status) { Fabricate(:status, account: sender, text: 'The body of the foreign status', created_at: '2021-01-01 01:01Z') }
|
||||
let(:own_status) { Fabricate(:status, account: receiver.account, text: 'The body of the own status', created_at: '2022-02-02 02:02Z') }
|
||||
|
||||
describe 'mention' do
|
||||
let(:mention) { Mention.create!(account: receiver.account, status: foreign_status) }
|
||||
|
@ -25,6 +25,7 @@ RSpec.describe NotificationMailer do
|
|||
let(:mail) { prepared_mailer_for(receiver.account).mention }
|
||||
|
||||
include_examples 'localized subject', 'notification_mailer.mention.subject', name: 'bob'
|
||||
include_examples 'timestamp in time zone', '2021-01-01 01:01Z'.to_datetime
|
||||
|
||||
it 'renders the email' do
|
||||
expect(mail)
|
||||
|
@ -63,6 +64,7 @@ RSpec.describe NotificationMailer do
|
|||
let(:mail) { prepared_mailer_for(own_status.account).favourite }
|
||||
|
||||
include_examples 'localized subject', 'notification_mailer.favourite.subject', name: 'bob'
|
||||
include_examples 'timestamp in time zone', '2022-02-02 02:02Z'.to_datetime
|
||||
|
||||
it 'renders the email' do
|
||||
expect(mail)
|
||||
|
@ -83,6 +85,7 @@ RSpec.describe NotificationMailer do
|
|||
let(:mail) { prepared_mailer_for(own_status.account).reblog }
|
||||
|
||||
include_examples 'localized subject', 'notification_mailer.reblog.subject', name: 'bob'
|
||||
include_examples 'timestamp in time zone', '2022-02-02 02:02Z'.to_datetime
|
||||
|
||||
it 'renders the email' do
|
||||
expect(mail)
|
||||
|
|
|
@ -5,36 +5,36 @@
|
|||
class AdminMailerPreview < ActionMailer::Preview
|
||||
# Preview this email at http://localhost:3000/rails/mailers/admin_mailer/new_report
|
||||
def new_report
|
||||
AdminMailer.with(recipient: Account.first).new_report(Report.first)
|
||||
AdminMailer.with(recipient: User.first.account).new_report(Report.first)
|
||||
end
|
||||
|
||||
# Preview this email at http://localhost:3000/rails/mailers/admin_mailer/new_appeal
|
||||
def new_appeal
|
||||
AdminMailer.with(recipient: Account.first).new_appeal(Appeal.first)
|
||||
AdminMailer.with(recipient: User.first.account).new_appeal(Appeal.first)
|
||||
end
|
||||
|
||||
# Preview this email at http://localhost:3000/rails/mailers/admin_mailer/new_pending_account
|
||||
def new_pending_account
|
||||
AdminMailer.with(recipient: Account.first).new_pending_account(User.pending.first)
|
||||
AdminMailer.with(recipient: User.first.account).new_pending_account(User.pending.first)
|
||||
end
|
||||
|
||||
# Preview this email at http://localhost:3000/rails/mailers/admin_mailer/new_trends
|
||||
def new_trends
|
||||
AdminMailer.with(recipient: Account.first).new_trends(PreviewCard.joins(:trend).limit(3), Tag.limit(3), Status.joins(:trend).where(reblog_of_id: nil).limit(3))
|
||||
AdminMailer.with(recipient: User.first.account).new_trends(PreviewCard.joins(:trend).limit(3), Tag.limit(3), Status.joins(:trend).where(reblog_of_id: nil).limit(3))
|
||||
end
|
||||
|
||||
# Preview this email at http://localhost:3000/rails/mailers/admin_mailer/new_software_updates
|
||||
def new_software_updates
|
||||
AdminMailer.with(recipient: Account.first).new_software_updates
|
||||
AdminMailer.with(recipient: User.first.account).new_software_updates
|
||||
end
|
||||
|
||||
# Preview this email at http://localhost:3000/rails/mailers/admin_mailer/new_critical_software_updates
|
||||
def new_critical_software_updates
|
||||
AdminMailer.with(recipient: Account.first).new_critical_software_updates
|
||||
AdminMailer.with(recipient: User.first.account).new_critical_software_updates
|
||||
end
|
||||
|
||||
# Preview this email at http://localhost:3000/rails/mailers/admin_mailer/auto_close_registrations
|
||||
def auto_close_registrations
|
||||
AdminMailer.with(recipient: Account.first).auto_close_registrations
|
||||
AdminMailer.with(recipient: User.first.account).auto_close_registrations
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,14 +3,14 @@
|
|||
require 'rails_helper'
|
||||
|
||||
RSpec.describe UserMailer do
|
||||
let(:receiver) { Fabricate(:user) }
|
||||
timestamp = Time.now.utc - 5.minutes
|
||||
|
||||
let(:receiver) { Fabricate(:user, locale: nil) }
|
||||
|
||||
describe '#confirmation_instructions' do
|
||||
let(:mail) { described_class.confirmation_instructions(receiver, 'spec') }
|
||||
|
||||
it 'renders confirmation instructions' do
|
||||
receiver.update!(locale: nil)
|
||||
|
||||
expect(mail)
|
||||
.to be_present
|
||||
.and(have_body_text(I18n.t('devise.mailer.confirmation_instructions.title')))
|
||||
|
@ -45,8 +45,6 @@ RSpec.describe UserMailer do
|
|||
let(:mail) { described_class.reset_password_instructions(receiver, 'spec') }
|
||||
|
||||
it 'renders reset password instructions' do
|
||||
receiver.update!(locale: nil)
|
||||
|
||||
expect(mail)
|
||||
.to be_present
|
||||
.and(have_body_text(I18n.t('devise.mailer.reset_password_instructions.title')))
|
||||
|
@ -61,8 +59,6 @@ RSpec.describe UserMailer do
|
|||
let(:mail) { described_class.password_change(receiver) }
|
||||
|
||||
it 'renders password change notification' do
|
||||
receiver.update!(locale: nil)
|
||||
|
||||
expect(mail)
|
||||
.to be_present
|
||||
.and(have_body_text(I18n.t('devise.mailer.password_change.title')))
|
||||
|
@ -76,8 +72,6 @@ RSpec.describe UserMailer do
|
|||
let(:mail) { described_class.email_changed(receiver) }
|
||||
|
||||
it 'renders email change notification' do
|
||||
receiver.update!(locale: nil)
|
||||
|
||||
expect(mail)
|
||||
.to be_present
|
||||
.and(have_body_text(I18n.t('devise.mailer.email_changed.title')))
|
||||
|
@ -92,8 +86,6 @@ RSpec.describe UserMailer do
|
|||
let(:mail) { described_class.warning(receiver, strike) }
|
||||
|
||||
it 'renders warning notification' do
|
||||
receiver.update!(locale: nil)
|
||||
|
||||
expect(mail)
|
||||
.to be_present
|
||||
.and(have_body_text(I18n.t('user_mailer.warning.title.suspend', acct: receiver.account.acct)))
|
||||
|
@ -106,8 +98,6 @@ RSpec.describe UserMailer do
|
|||
let(:mail) { described_class.webauthn_credential_deleted(receiver, credential) }
|
||||
|
||||
it 'renders webauthn credential deleted notification' do
|
||||
receiver.update!(locale: nil)
|
||||
|
||||
expect(mail)
|
||||
.to be_present
|
||||
.and(have_body_text(I18n.t('devise.mailer.webauthn_credential.deleted.title')))
|
||||
|
@ -120,12 +110,9 @@ RSpec.describe UserMailer do
|
|||
describe '#suspicious_sign_in' do
|
||||
let(:ip) { '192.168.0.1' }
|
||||
let(:agent) { 'NCSA_Mosaic/2.0 (Windows 3.1)' }
|
||||
let(:timestamp) { Time.now.utc }
|
||||
let(:mail) { described_class.suspicious_sign_in(receiver, ip, agent, timestamp) }
|
||||
|
||||
it 'renders suspicious sign in notification' do
|
||||
receiver.update!(locale: nil)
|
||||
|
||||
expect(mail)
|
||||
.to be_present
|
||||
.and(have_body_text(I18n.t('user_mailer.suspicious_sign_in.explanation')))
|
||||
|
@ -133,17 +120,15 @@ RSpec.describe UserMailer do
|
|||
|
||||
include_examples 'localized subject',
|
||||
'user_mailer.suspicious_sign_in.subject'
|
||||
include_examples 'timestamp in time zone', timestamp
|
||||
end
|
||||
|
||||
describe '#failed_2fa' do
|
||||
let(:ip) { '192.168.0.1' }
|
||||
let(:agent) { 'NCSA_Mosaic/2.0 (Windows 3.1)' }
|
||||
let(:timestamp) { Time.now.utc }
|
||||
let(:mail) { described_class.failed_2fa(receiver, ip, agent, timestamp) }
|
||||
|
||||
it 'renders failed 2FA notification' do
|
||||
receiver.update!(locale: nil)
|
||||
|
||||
expect(mail)
|
||||
.to be_present
|
||||
.and(have_body_text(I18n.t('user_mailer.failed_2fa.explanation')))
|
||||
|
@ -151,10 +136,11 @@ RSpec.describe UserMailer do
|
|||
|
||||
include_examples 'localized subject',
|
||||
'user_mailer.failed_2fa.subject'
|
||||
include_examples 'timestamp in time zone', timestamp
|
||||
end
|
||||
|
||||
describe '#appeal_approved' do
|
||||
let(:appeal) { Fabricate(:appeal, account: receiver.account, approved_at: Time.now.utc) }
|
||||
let(:appeal) { Fabricate(:appeal, account: receiver.account, created_at: timestamp, approved_at: Time.now.utc) }
|
||||
let(:mail) { described_class.appeal_approved(receiver, appeal) }
|
||||
|
||||
it 'renders appeal_approved notification' do
|
||||
|
@ -163,10 +149,12 @@ RSpec.describe UserMailer do
|
|||
.and(have_subject(I18n.t('user_mailer.appeal_approved.subject', date: I18n.l(appeal.created_at))))
|
||||
.and(have_body_text(I18n.t('user_mailer.appeal_approved.title')))
|
||||
end
|
||||
|
||||
include_examples 'timestamp in time zone', timestamp
|
||||
end
|
||||
|
||||
describe '#appeal_rejected' do
|
||||
let(:appeal) { Fabricate(:appeal, account: receiver.account, rejected_at: Time.now.utc) }
|
||||
let(:appeal) { Fabricate(:appeal, account: receiver.account, created_at: timestamp, rejected_at: Time.now.utc) }
|
||||
let(:mail) { described_class.appeal_rejected(receiver, appeal) }
|
||||
|
||||
it 'renders appeal_rejected notification' do
|
||||
|
@ -175,6 +163,8 @@ RSpec.describe UserMailer do
|
|||
.and(have_subject(I18n.t('user_mailer.appeal_rejected.subject', date: I18n.l(appeal.created_at))))
|
||||
.and(have_body_text(I18n.t('user_mailer.appeal_rejected.title')))
|
||||
end
|
||||
|
||||
include_examples 'timestamp in time zone', timestamp
|
||||
end
|
||||
|
||||
describe '#two_factor_enabled' do
|
||||
|
|
|
@ -13,6 +13,22 @@ RSpec.shared_examples 'localized subject' do |*args, **kwrest|
|
|||
end
|
||||
end
|
||||
|
||||
RSpec.shared_examples 'timestamp in time zone' do |at|
|
||||
it 'displays timestamp in time zone of the receiver' do
|
||||
time_zone = 'Europe/Berlin'
|
||||
receiver.update!(time_zone: time_zone)
|
||||
expect(mail)
|
||||
.to have_body_text(at.in_time_zone(time_zone).strftime(I18n.t('time.formats.with_time_zone')))
|
||||
end
|
||||
|
||||
it 'displays timestamp in default time zone if the time zone of the receiver is unavailable' do
|
||||
allow(Rails.configuration.x).to receive(:default_time_zone).and_return('Europe/Athens')
|
||||
receiver.update!(time_zone: nil)
|
||||
|
||||
expect(mail).to have_body_text(at.in_time_zone('Europe/Athens').strftime(I18n.t('time.formats.with_time_zone')))
|
||||
end
|
||||
end
|
||||
|
||||
RSpec::Matchers.define :have_thread_headers do
|
||||
match(notify_expectation_failures: true) do |mail|
|
||||
expect(mail)
|
||||
|
|
Loading…
Reference in New Issue
Block a user