diff --git a/app/views/admin/accounts/_buttons.html.haml b/app/views/admin/accounts/_buttons.html.haml new file mode 100644 index 000000000..6eb141abc --- /dev/null +++ b/app/views/admin/accounts/_buttons.html.haml @@ -0,0 +1,41 @@ +- if account.suspended? + %hr.spacer/ + - if account.suspension_origin_remote? + %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') + = 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? + = 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') } if can?(:destroy, account) +- else + .action-buttons + %div + - 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? + = link_to t('admin.accounts.enable'), enable_admin_account_path(account.id), method: :post, class: 'button' if can?(:enable, account.user) + - else + = link_to t('admin.accounts.disable'), new_admin_account_action_path(account.id, type: 'disable'), class: 'button' if can?(:disable, account.user) + - if account.sensitized? + = 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? + = 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? + = 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) + - unless account.user_confirmed? + = link_to t('admin.accounts.confirm'), admin_account_confirmation_path(account.id), method: :post, class: 'button' if can?(:confirm, account.user) + - if !account.local? || account.user_approved? + = link_to t('admin.accounts.perform_full_suspension'), new_admin_account_action_path(account.id, type: 'suspend'), class: 'button' if can?(:suspend, account) + %div + - if account.local? + - if !account.memorial? && account.user_approved? + = 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' if can?(:memorialize, account) + - else + = link_to t('admin.accounts.redownload'), redownload_admin_account_path(account.id), method: :post, class: 'button' if can?(:redownload, account) diff --git a/app/views/admin/accounts/_counters.html.haml b/app/views/admin/accounts/_counters.html.haml new file mode 100644 index 000000000..00ab98d09 --- /dev/null +++ b/app/views/admin/accounts/_counters.html.haml @@ -0,0 +1,43 @@ +.dashboard__counters.admin-account-counters + %div + = link_to admin_account_statuses_path(account.id) do + .dashboard__counters__num= number_with_delimiter account.statuses_count + .dashboard__counters__label= t 'admin.accounts.statuses' + %div + = link_to admin_account_statuses_path(account.id, { media: true }) do + .dashboard__counters__num= number_to_human_size account.media_attachments.sum('file_file_size') + .dashboard__counters__label= t 'admin.accounts.media_attachments' + %div + = link_to admin_account_relationships_path(account.id, location: account.local? ? nil : 'local', relationship: 'followed_by') do + .dashboard__counters__num= number_with_delimiter account.local_followers_count + .dashboard__counters__label= t 'admin.accounts.followers' + %div + = link_to admin_reports_path(account_id: account.id) do + .dashboard__counters__num= number_with_delimiter account.reports.count + .dashboard__counters__label= t 'admin.accounts.show.created_reports' + %div + = link_to admin_reports_path(target_account_id: account.id) do + .dashboard__counters__num= number_with_delimiter account.targeted_reports.count + .dashboard__counters__label= t 'admin.accounts.show.targeted_reports' + %div + = link_to admin_action_logs_path(target_account_id: account.id) do + .dashboard__counters__text + - if account.local? && account.user.nil? + = t('admin.accounts.deleted') + - elsif account.memorial? + = t('admin.accounts.memorialized') + - elsif account.suspended? + = t('admin.accounts.suspended') + - elsif account.silenced? + = t('admin.accounts.silenced') + - elsif account.local? && account.user&.disabled? + = t('admin.accounts.disabled') + - elsif account.local? && !account.user&.confirmed? + = t('admin.accounts.confirming') + - elsif account.local? && !account.user_approved? + = t('admin.accounts.pending') + - elsif account.sensitized? + = t('admin.accounts.sensitive') + - else + = t('admin.accounts.no_limits_imposed') + .dashboard__counters__label= t 'admin.accounts.login_status' diff --git a/app/views/admin/accounts/_local_account.html.haml b/app/views/admin/accounts/_local_account.html.haml new file mode 100644 index 000000000..4b361fc8d --- /dev/null +++ b/app/views/admin/accounts/_local_account.html.haml @@ -0,0 +1,82 @@ +- if account.avatar? + %tr + %th= t('admin.accounts.avatar') + %td= table_link_to 'trash', t('admin.accounts.remove_avatar'), remove_avatar_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:remove_avatar, account) + %td +- if account.header? + %tr + %th= t('admin.accounts.header') + %td= table_link_to 'trash', t('admin.accounts.remove_header'), remove_header_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:remove_header, account) + %td +%tr + %th= t('admin.accounts.role') + %td + - if account.user_role&.everyone? + = t('admin.accounts.no_role_assigned') + - else + = account.user_role&.name + %td + = table_link_to 'vcard', t('admin.accounts.change_role.label'), admin_user_role_path(account.user) if can?(:change_role, account.user) +%tr + %th{ rowspan: can?(:create, :email_domain_block) ? 3 : 2 }= t('admin.accounts.email') + %td{ rowspan: can?(:create, :email_domain_block) ? 3 : 2 }= account.user_email + %td= table_link_to 'edit', t('admin.accounts.change_email.label'), admin_account_change_email_path(account.id) if can?(:change_email, account.user) +%tr + %td= table_link_to 'search', t('admin.accounts.search_same_email_domain'), admin_accounts_path(email: "%@#{account.user_email.split('@').last}") +- if can?(:create, :email_domain_block) + %tr + %td= table_link_to 'ban', t('admin.accounts.add_email_domain_block'), new_admin_email_domain_block_path(_domain: account.user_email.split('@').last) +- if account.user_unconfirmed_email.present? + %tr + %th= t('admin.accounts.unconfirmed_email') + %td= account.user_unconfirmed_email + %td +%tr + %th= t('admin.accounts.email_status') + %td + - if account.user&.confirmed? + = t('admin.accounts.confirmed') + - else + = t('admin.accounts.confirming') + %td= table_link_to 'refresh', t('admin.accounts.resend_confirmation.send'), resend_admin_account_confirmation_path(account.id), method: :post if can?(:confirm, account.user) +%tr + %th{ rowspan: can?(:reset_password, account.user) ? 2 : 1 }= t('admin.accounts.security') + %td{ rowspan: can?(:reset_password, account.user) ? 2 : 1 } + - if account.user&.two_factor_enabled? + = t 'admin.accounts.security_measures.password_and_2fa' + - else + = t 'admin.accounts.security_measures.only_password' + %td + - if account.user&.two_factor_enabled? + = table_link_to 'unlock', t('admin.accounts.disable_two_factor_authentication'), admin_user_two_factor_authentication_path(account.user.id), method: :delete if can?(:disable_2fa, account.user) +- if can?(:reset_password, account.user) + %tr + %td + = table_link_to 'key', t('admin.accounts.reset_password'), admin_account_reset_path(account.id), method: :create, data: { confirm: t('admin.accounts.are_you_sure') } +%tr + %th= t('simple_form.labels.defaults.locale') + %td= standard_locale_name(account.user_locale) + %td +%tr + %th= t('admin.accounts.joined') + %td + %time.formatted{ datetime: account.created_at.iso8601, title: l(account.created_at) }= l account.created_at + %td +- recent_ips = account.user.ips.order(used_at: :desc).to_a +- recent_ips.each_with_index do |recent_ip, i| + %tr + - if i.zero? + %th{ rowspan: recent_ips.size }= t('admin.accounts.most_recent_ip') + %td= recent_ip.ip + %td= table_link_to 'search', t('admin.accounts.search_same_ip'), admin_accounts_path(ip: recent_ip.ip) +%tr + %th= t('admin.accounts.most_recent_activity') + %td + - if account.user_current_sign_in_at + %time.formatted{ datetime: account.user_current_sign_in_at.iso8601, title: l(account.user_current_sign_in_at) }= l account.user_current_sign_in_at + %td +- if account.user&.invited? + %tr + %th= t('admin.accounts.invited_by') + %td= admin_account_link_to account.user.invite.user.account + %td diff --git a/app/views/admin/accounts/_remote_account.html.haml b/app/views/admin/accounts/_remote_account.html.haml new file mode 100644 index 000000000..99996e1d4 --- /dev/null +++ b/app/views/admin/accounts/_remote_account.html.haml @@ -0,0 +1,15 @@ +%tr + %th= t('admin.accounts.inbox_url') + %td + = account.inbox_url + = fa_icon DeliveryFailureTracker.available?(account.inbox_url) ? 'check' : 'times' + %td + = table_link_to 'search', domain_block.present? ? t('admin.domain_blocks.view') : t('admin.accounts.view_domain'), admin_instance_path(account.domain) +%tr + %th= t('admin.accounts.shared_inbox_url') + %td + = account.shared_inbox_url + = fa_icon DeliveryFailureTracker.available?(account.shared_inbox_url) ? 'check' : 'times' + %td + - if domain_block.nil? + = table_link_to 'ban', t('admin.domain_blocks.add_new'), new_admin_domain_block_path(_domain: account.domain) diff --git a/app/views/admin/accounts/show.html.haml b/app/views/admin/accounts/show.html.haml index 7801ef191..80b8fc92c 100644 --- a/app/views/admin/accounts/show.html.haml +++ b/app/views/admin/accounts/show.html.haml @@ -27,49 +27,7 @@ %div .account__header__content.emojify= prerender_custom_emojis(account_bio_format(account), account.emojis) -.dashboard__counters.admin-account-counters - %div - = link_to admin_account_statuses_path(@account.id) do - .dashboard__counters__num= number_with_delimiter @account.statuses_count - .dashboard__counters__label= t 'admin.accounts.statuses' - %div - = link_to admin_account_statuses_path(@account.id, { media: true }) do - .dashboard__counters__num= number_to_human_size @account.media_attachments.sum('file_file_size') - .dashboard__counters__label= t 'admin.accounts.media_attachments' - %div - = link_to admin_account_relationships_path(@account.id, location: @account.local? ? nil : 'local', relationship: 'followed_by') do - .dashboard__counters__num= number_with_delimiter @account.local_followers_count - .dashboard__counters__label= t 'admin.accounts.followers' - %div - = link_to admin_reports_path(account_id: @account.id) do - .dashboard__counters__num= number_with_delimiter @account.reports.count - .dashboard__counters__label= t '.created_reports' - %div - = link_to admin_reports_path(target_account_id: @account.id) do - .dashboard__counters__num= number_with_delimiter @account.targeted_reports.count - .dashboard__counters__label= t '.targeted_reports' - %div - = link_to admin_action_logs_path(target_account_id: @account.id) do - .dashboard__counters__text - - if @account.local? && @account.user.nil? - = t('admin.accounts.deleted') - - elsif @account.memorial? - = t('admin.accounts.memorialized') - - elsif @account.suspended? - = t('admin.accounts.suspended') - - elsif @account.silenced? - = t('admin.accounts.silenced') - - elsif @account.local? && @account.user&.disabled? - = t('admin.accounts.disabled') - - elsif @account.local? && !@account.user&.confirmed? - = t('admin.accounts.confirming') - - elsif @account.local? && !@account.user_approved? - = t('admin.accounts.pending') - - elsif @account.sensitized? - = t('admin.accounts.sensitive') - - else - = t('admin.accounts.no_limits_imposed') - .dashboard__counters__label= t 'admin.accounts.login_status' += render 'admin/accounts/counters', account: @account - if @account.local? && @account.user.nil? = 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) @@ -78,171 +36,11 @@ %table.table.inline-table %tbody - if @account.local? - - if @account.avatar? - %tr - %th= t('admin.accounts.avatar') - %td= table_link_to 'trash', t('admin.accounts.remove_avatar'), remove_avatar_admin_account_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:remove_avatar, @account) - %td - - - if @account.header? - %tr - %th= t('admin.accounts.header') - %td= table_link_to 'trash', t('admin.accounts.remove_header'), remove_header_admin_account_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:remove_header, @account) - %td - - %tr - %th= t('admin.accounts.role') - %td - - if @account.user_role&.everyone? - = t('admin.accounts.no_role_assigned') - - else - = @account.user_role&.name - %td - = table_link_to 'vcard', t('admin.accounts.change_role.label'), admin_user_role_path(@account.user) if can?(:change_role, @account.user) - - %tr - %th{ rowspan: can?(:create, :email_domain_block) ? 3 : 2 }= t('admin.accounts.email') - %td{ rowspan: can?(:create, :email_domain_block) ? 3 : 2 }= @account.user_email - %td= table_link_to 'edit', t('admin.accounts.change_email.label'), admin_account_change_email_path(@account.id) if can?(:change_email, @account.user) - - %tr - %td= table_link_to 'search', t('admin.accounts.search_same_email_domain'), admin_accounts_path(email: "%@#{@account.user_email.split('@').last}") - - - if can?(:create, :email_domain_block) - %tr - %td= table_link_to 'ban', t('admin.accounts.add_email_domain_block'), new_admin_email_domain_block_path(_domain: @account.user_email.split('@').last) - - - if @account.user_unconfirmed_email.present? - %tr - %th= t('admin.accounts.unconfirmed_email') - %td= @account.user_unconfirmed_email - %td - - %tr - %th= t('admin.accounts.email_status') - %td - - if @account.user&.confirmed? - = t('admin.accounts.confirmed') - - else - = t('admin.accounts.confirming') - %td= table_link_to 'refresh', t('admin.accounts.resend_confirmation.send'), resend_admin_account_confirmation_path(@account.id), method: :post if can?(:confirm, @account.user) - %tr - %th{ rowspan: can?(:reset_password, @account.user) ? 2 : 1 }= t('admin.accounts.security') - %td{ rowspan: can?(:reset_password, @account.user) ? 2 : 1 } - - if @account.user&.two_factor_enabled? - = t 'admin.accounts.security_measures.password_and_2fa' - - else - = t 'admin.accounts.security_measures.only_password' - %td - - if @account.user&.two_factor_enabled? - = table_link_to 'unlock', t('admin.accounts.disable_two_factor_authentication'), admin_user_two_factor_authentication_path(@account.user.id), method: :delete if can?(:disable_2fa, @account.user) - - - if can?(:reset_password, @account.user) - %tr - %td - = table_link_to 'key', t('admin.accounts.reset_password'), admin_account_reset_path(@account.id), method: :create, data: { confirm: t('admin.accounts.are_you_sure') } - - %tr - %th= t('simple_form.labels.defaults.locale') - %td= standard_locale_name(@account.user_locale) - %td - - %tr - %th= t('admin.accounts.joined') - %td - %time.formatted{ datetime: @account.created_at.iso8601, title: l(@account.created_at) }= l @account.created_at - %td - - - recent_ips = @account.user.ips.order(used_at: :desc).to_a - - - recent_ips.each_with_index do |recent_ip, i| - %tr - - if i.zero? - %th{ rowspan: recent_ips.size }= t('admin.accounts.most_recent_ip') - %td= recent_ip.ip - %td= table_link_to 'search', t('admin.accounts.search_same_ip'), admin_accounts_path(ip: recent_ip.ip) - - %tr - %th= t('admin.accounts.most_recent_activity') - %td - - if @account.user_current_sign_in_at - %time.formatted{ datetime: @account.user_current_sign_in_at.iso8601, title: l(@account.user_current_sign_in_at) }= l @account.user_current_sign_in_at - %td - - - if @account.user&.invited? - %tr - %th= t('admin.accounts.invited_by') - %td= admin_account_link_to @account.user.invite.user.account - %td - + = render 'admin/accounts/local_account', account: @account - else - %tr - %th= t('admin.accounts.inbox_url') - %td - = @account.inbox_url - = fa_icon DeliveryFailureTracker.available?(@account.inbox_url) ? 'check' : 'times' - %td - = table_link_to 'search', @domain_block.present? ? t('admin.domain_blocks.view') : t('admin.accounts.view_domain'), admin_instance_path(@account.domain) - %tr - %th= t('admin.accounts.shared_inbox_url') - %td - = @account.shared_inbox_url - = fa_icon DeliveryFailureTracker.available?(@account.shared_inbox_url) ? 'check' : 'times' - %td - - if @domain_block.nil? - = table_link_to 'ban', t('admin.domain_blocks.add_new'), new_admin_domain_block_path(_domain: @account.domain) + = render 'admin/accounts/remote_account', account: @account, domain_block: @domain_block - - if @account.suspended? - %hr.spacer/ - - - if @account.suspension_origin_remote? - %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') - - = 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? - = 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') } if can?(:destroy, @account) - - else - .action-buttons - %div - - 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? - = link_to t('admin.accounts.enable'), enable_admin_account_path(@account.id), method: :post, class: 'button' if can?(:enable, @account.user) - - else - = link_to t('admin.accounts.disable'), new_admin_account_action_path(@account.id, type: 'disable'), class: 'button' if can?(:disable, @account.user) - - - if @account.sensitized? - = 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? - = 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? - = 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) - - - unless @account.user_confirmed? - = link_to t('admin.accounts.confirm'), admin_account_confirmation_path(@account.id), method: :post, class: 'button' if can?(:confirm, @account.user) - - - if !@account.local? || @account.user_approved? - = link_to t('admin.accounts.perform_full_suspension'), new_admin_account_action_path(@account.id, type: 'suspend'), class: 'button' if can?(:suspend, @account) - - %div - - if @account.local? - - if !@account.memorial? && @account.user_approved? - = 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' if can?(:memorialize, @account) - - else - = link_to t('admin.accounts.redownload'), redownload_admin_account_path(@account.id), method: :post, class: 'button' if can?(:redownload, @account) + = render 'admin/accounts/buttons', account: @account, deletion_request: @deletion_request %hr.spacer/