Skip to content

Commit f695514

Browse files
authored
Merge pull request #1878 from codidact/0valt/1875/audit-logs
2 parents bd803f9 + aa5b54c commit f695514

11 files changed

Lines changed: 146 additions & 17 deletions

File tree

app/assets/stylesheets/audit_logs.scss

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
@import 'variables';
22

33
.audit-log-filters {
4-
.form-group-horizontal .actions, .select2-container {
4+
5+
.form-group-horizontal .actions,
6+
.select2-container {
57
height: 37px;
68
margin: 4px 0px;
79
}
@@ -30,3 +32,22 @@
3032
}
3133
}
3234
}
35+
36+
.audit-log-summary {
37+
display: flex;
38+
align-items: center;
39+
gap: 1em;
40+
word-break: break-word;
41+
42+
&[open] {
43+
margin: 0;
44+
}
45+
46+
&::before {
47+
top: unset;
48+
}
49+
50+
.details {
51+
flex: 1;
52+
}
53+
}

app/controllers/admin_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ def send_all_email
100100
redirect_to admin_path
101101
end
102102

103-
def audit_log
103+
def audit_logs
104104
@page = helpers.safe_page(params)
105105
@per_page = helpers.safe_per_page(params)
106106

app/helpers/admin_helper.rb

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,20 @@
1-
# Provides helper methods for use by views under <tt>AdminController</tt>.
21
module AdminHelper
2+
# Renders related model for a given log
3+
# @param log [AuditLog] log to render related model for
4+
# @return [String] rendered related model
5+
def rendered_related(log)
6+
return '' unless log.related.present?
7+
8+
if log.related.is_a?(User)
9+
return user_link(log.related)
10+
end
11+
12+
base = "#{log.related_type} ##{log.related_id}"
13+
14+
if log.related.respond_to?(:name)
15+
"#{base} (#{log.related.name})"
16+
else
17+
base
18+
end
19+
end
320
end
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<%#
2+
"Renders an audit log item
3+
4+
Variables:
5+
log : AuditLog to render
6+
"%>
7+
8+
<details class="audit-log">
9+
<summary class="audit-log-summary">
10+
<span class="details">
11+
<strong><%= log.event_type.humanize %></strong>
12+
<br/>
13+
<span class="has-font-size-caption has-color-tertiary-600">
14+
by <%= user_link(log.user) %><% if log.related.present? %>
15+
for <%= rendered_related(log) %>
16+
<% end %>
17+
</span>
18+
</span>
19+
<span class="has-padding-right-2 has-float-right has-color-tertiary-600"
20+
title="<%= log.created_at.iso8601 %>">
21+
<%= time_ago_in_words(log.created_at.iso8601) %> ago
22+
</span>
23+
</summary>
24+
25+
<p>
26+
<strong><%= t('g.type').capitalize %>:</strong>
27+
<%= log.log_type.humanize %><br/>
28+
29+
<strong><%= t('g.user').capitalize %>:</strong>
30+
<%= user_link(log.user) %><br/>
31+
32+
<% if log.related.present? %>
33+
<strong><%= t('g.related').capitalize %>:</strong>
34+
<%= rendered_related(log) %><br/>
35+
<% end %>
36+
</p>
37+
38+
<% if log.comment.present? %>
39+
<pre><%= log.comment %></pre>
40+
<% end %>
41+
</details>
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
<h1><%= t 'admin.tools.audit_log' %></h1>
1+
<h1><%= t 'admin.tools.audit_logs' %></h1>
22

33
<div>
44
<h3>Filters</h3>
5-
<%= form_tag audit_log_path, method: :get, class: 'form-inline audit-log-filters' do %>
5+
<%= form_tag audit_logs_path, method: :get, class: 'form-inline audit-log-filters' do %>
66
<div class="form-group-horizontal">
77
<div class="form-group">
88
<%= label_tag :log_type, 'Log category', class: 'form-element' %>
@@ -48,7 +48,9 @@
4848
</div>
4949
</div>
5050

51-
<%= render 'log_table' %>
51+
<% @logs.each do |log| %>
52+
<%= render 'admin/audit_log', log: log %>
53+
<% end %>
5254

5355
<div class="has-padding-top-4">
5456
<%= will_paginate @logs, renderer: BootstrapPagination::Rails %>

app/views/admin/index.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@
115115
<div class="widget">
116116
<div class="widget--body">
117117
<i class="fas fa-user-secret"></i>
118-
<%= link_to t('admin.tools.audit_log'), audit_log_path, 'data-ckb-item-link' => '' %>
118+
<%= link_to t('admin.tools.audit_logs'), audit_logs_path, 'data-ckb-item-link' => '' %>
119119
</div>
120120
</div>
121121
</div>

config/locales/strings/en.admin.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ en:
3333
privileges: 'Privileges'
3434
close_reasons: 'Close Reasons'
3535
licenses: 'Licenses'
36-
audit_log: 'Audit Log'
36+
audit_logs: 'Audit Log'
3737
post_types: 'Post Types'
3838
email_query: 'User Lookup by Email'
3939
user_fed_stat: 'User fed to STAT.'

config/locales/strings/es.admin.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,6 @@ es:
3030
privileges: 'Privilegios'
3131
close_reasons: 'Razones para Cerrar'
3232
licenses: 'Licencias'
33-
audit_log: 'Registro de Auditoría'
33+
audit_logs: 'Registro de Auditoría'
3434
post_types: 'Tipos de Publicación'
3535
user_fed_stat: 'STAT alimentado con usuario/a.'

config/routes.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
get 'email-all', to: 'admin#all_email', as: :email_all
4646
post 'email-all', to: 'admin#send_all_email', as: :send_all_email
4747

48-
get 'audits', to: 'admin#audit_log', as: :audit_log
48+
get 'audits', to: 'admin#audit_logs', as: :audit_logs
4949

5050
get 'new-site', to: 'admin#new_site', as: :new_site
5151
post 'new-site', to: 'admin#create_site', as: :create_site

test/controllers/admin_controller_test.rb

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
class AdminControllerTest < ActionController::TestCase
44
include Devise::Test::ControllerHelpers
55

6-
PARAM_LESS_ACTIONS = [:index, :error_reports, :privileges, :audit_log, :email_query, :admin_email, :all_email].freeze
6+
PARAM_LESS_ACTIONS = [:index, :error_reports, :privileges, :audit_logs, :email_query, :admin_email, :all_email].freeze
77

88
test 'should get index' do
99
sign_in users(:admin)
@@ -127,7 +127,7 @@ class AdminControllerTest < ActionController::TestCase
127127

128128
test 'should get audit log' do
129129
sign_in users(:admin)
130-
get :audit_log
130+
get :audit_logs
131131
assert_response(:success)
132132
assert_not_nil assigns(:logs)
133133
end
@@ -174,10 +174,26 @@ class AdminControllerTest < ActionController::TestCase
174174

175175
test 'audit log should work with filter params' do
176176
sign_in users(:admin)
177-
get :audit_log, params: { log_type: 'admin_audit', event_type: 'setting_update', from: '2025-04-13',
178-
to: '2025-04-13' }
179-
assert_response(:success)
180-
assert_not_nil assigns(:logs)
177+
178+
log_types = audit_logs.map(&:log_type)
179+
180+
log_types.each do |type|
181+
try_audit_logs(log_type: type)
182+
@logs = assigns(:logs)
183+
assert_response(:success)
184+
assert_not_nil @logs
185+
assert(@logs.all? { |l| l.log_type == type })
186+
end
187+
188+
event_types = audit_logs.map(&:event_type)
189+
190+
event_types.each do |type|
191+
try_audit_logs(event_type: type)
192+
@logs = assigns(:logs)
193+
assert_response(:success)
194+
assert_not_nil @logs
195+
assert(@logs.all? { |l| l.event_type == type })
196+
end
181197
end
182198

183199
test 'hellban should correctly block the user' do
@@ -203,6 +219,10 @@ class AdminControllerTest < ActionController::TestCase
203219

204220
private
205221

222+
def try_audit_logs(**params)
223+
get :audit_logs, params: params
224+
end
225+
206226
def try_hellban_user(user)
207227
post :hellban, params: { id: user.id }
208228
end

0 commit comments

Comments
 (0)