motor-admin 0.3.17 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/channels/motor/application_cable/channel.rb +14 -0
- data/app/channels/motor/application_cable/connection.rb +27 -0
- data/app/channels/motor/notes_channel.rb +9 -0
- data/app/channels/motor/notifications_channel.rb +9 -0
- data/app/controllers/concerns/motor/current_user_method.rb +2 -0
- data/app/controllers/motor/note_tags_controller.rb +13 -0
- data/app/controllers/motor/notes_controller.rb +58 -0
- data/app/controllers/motor/notifications_controller.rb +33 -0
- data/app/controllers/motor/reminders_controller.rb +38 -0
- data/app/controllers/motor/run_queries_controller.rb +1 -1
- data/app/controllers/motor/send_alerts_controller.rb +2 -2
- data/app/controllers/motor/slack_conversations_controller.rb +11 -0
- data/app/controllers/motor/tags_controller.rb +1 -1
- data/app/controllers/motor/ui_controller.rb +9 -1
- data/app/controllers/motor/users_for_autocomplete_controller.rb +23 -0
- data/app/jobs/motor/alert_sending_job.rb +1 -1
- data/app/jobs/motor/notify_note_mentions_job.rb +9 -0
- data/app/jobs/motor/notify_reminder_job.rb +9 -0
- data/app/mailers/motor/alerts_mailer.rb +6 -29
- data/app/mailers/motor/application_mailer.rb +27 -1
- data/app/mailers/motor/notifications_mailer.rb +33 -0
- data/app/models/motor/note.rb +18 -0
- data/app/models/motor/note_tag.rb +7 -0
- data/app/models/motor/note_tag_tag.rb +8 -0
- data/app/models/motor/notification.rb +14 -0
- data/app/models/motor/reminder.rb +13 -0
- data/app/views/layouts/motor/application.html.erb +4 -1
- data/app/views/layouts/motor/mailer.html.erb +72 -0
- data/app/views/motor/alerts_mailer/alert_email.html.erb +52 -124
- data/app/views/motor/notifications_mailer/notify_mention_email.html.erb +28 -0
- data/app/views/motor/notifications_mailer/notify_reminder_email.html.erb +28 -0
- data/config/locales/el.yml +25 -0
- data/config/locales/en.yml +33 -2
- data/config/locales/es.yml +33 -2
- data/config/locales/pt.yml +33 -2
- data/config/routes.rb +9 -0
- data/lib/generators/motor/install_notes_generator.rb +22 -0
- data/lib/generators/motor/templates/install.rb +77 -0
- data/lib/generators/motor/templates/install_notes.rb +83 -0
- data/lib/generators/motor/upgrade_generator.rb +13 -6
- data/lib/motor/admin.rb +13 -1
- data/lib/motor/alerts/slack_sender.rb +74 -0
- data/lib/motor/alerts.rb +42 -0
- data/lib/motor/api_query/apply_scope.rb +1 -0
- data/lib/motor/build_schema/apply_permissions.rb +8 -0
- data/lib/motor/build_schema/defaults.rb +15 -1
- data/lib/motor/build_schema/load_from_rails.rb +4 -1
- data/lib/motor/build_schema.rb +7 -0
- data/lib/motor/configs/build_ui_app_tag.rb +73 -8
- data/lib/motor/configs.rb +3 -4
- data/lib/motor/notes/notify_mentions.rb +73 -0
- data/lib/motor/notes/notify_reminder.rb +49 -0
- data/lib/motor/notes/persist.rb +36 -0
- data/lib/motor/notes/reminders_scheduler.rb +39 -0
- data/lib/motor/notes/tags.rb +34 -0
- data/lib/motor/notes.rb +12 -0
- data/lib/motor/queries/run_query.rb +66 -3
- data/lib/motor/resources/fetch_configured_model.rb +19 -3
- data/lib/motor/resources.rb +1 -1
- data/lib/motor/slack/client.rb +62 -0
- data/lib/motor/slack.rb +16 -0
- data/lib/motor/version.rb +1 -1
- data/lib/motor.rb +19 -0
- data/ui/dist/{main-726aa7f6805676af4d21.css.gz → main-94c4b9cbc80e23602ab9.css.gz} +0 -0
- data/ui/dist/main-94c4b9cbc80e23602ab9.js.gz +0 -0
- data/ui/dist/manifest.json +5 -5
- metadata +36 -4
- data/ui/dist/main-726aa7f6805676af4d21.js.gz +0 -0
@@ -1,126 +1,54 @@
|
|
1
|
-
|
2
|
-
<
|
3
|
-
|
4
|
-
<
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
padding: 0 !important;
|
30
|
-
width: 100% !important;
|
31
|
-
}
|
32
|
-
table[class=body] .main {
|
33
|
-
border-left-width: 0 !important;
|
34
|
-
border-radius: 0 !important;
|
35
|
-
border-right-width: 0 !important;
|
36
|
-
}
|
37
|
-
}
|
38
|
-
|
39
|
-
@media all {
|
40
|
-
.ExternalClass {
|
41
|
-
width: 100%;
|
42
|
-
}
|
43
|
-
.ExternalClass,
|
44
|
-
.ExternalClass p,
|
45
|
-
.ExternalClass span,
|
46
|
-
.ExternalClass font,
|
47
|
-
.ExternalClass td,
|
48
|
-
.ExternalClass div {
|
49
|
-
line-height: 100%;
|
50
|
-
}
|
51
|
-
.apple-link a {
|
52
|
-
color: inherit !important;
|
53
|
-
font-family: inherit !important;
|
54
|
-
font-size: inherit !important;
|
55
|
-
font-weight: inherit !important;
|
56
|
-
line-height: inherit !important;
|
57
|
-
text-decoration: none !important;
|
58
|
-
}
|
59
|
-
#MessageViewBody a {
|
60
|
-
color: inherit;
|
61
|
-
text-decoration: none;
|
62
|
-
font-size: inherit;
|
63
|
-
font-family: inherit;
|
64
|
-
font-weight: inherit;
|
65
|
-
line-height: inherit;
|
66
|
-
}
|
67
|
-
}
|
68
|
-
</style>
|
69
|
-
</head>
|
70
|
-
<body class="" style="background-color: #f9fbfc; font-family: sans-serif; -webkit-font-smoothing: antialiased; font-size: 14px; line-height: 1.4; margin: 0; padding: 0; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;">
|
71
|
-
<table border="0" cellpadding="0" cellspacing="0" class="body" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background-color: #f9fbfc;">
|
72
|
-
<tr>
|
73
|
-
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;"> </td>
|
74
|
-
<td class="container" style="font-family: sans-serif; font-size: 14px; vertical-align: top; display: block; Margin: 0 auto; padding: 10px;">
|
75
|
-
<div class="content" style="box-sizing: border-box; display: block; Margin: 0 auto;padding: 10px;">
|
76
|
-
<h1 style="margin: 0"><%= @alert.name.presence || @alert.query.name %></h1>
|
77
|
-
<% if @query_result.data.length > 1 %>
|
78
|
-
<p style="margin: 7px 0; float: left">Showing <%= @query_result.data.first(40).size %> of <%= @query_result.data.size %> rows</p>
|
79
|
-
<% end %>
|
80
|
-
<a href="<%= Motor::Admin.routes.url_helpers.motor_ui_query_url(@alert.query, { host: 'localhost:3000' }.merge(Rails.application.config.action_mailer.default_url_options || {})) %>" target="blank" style="margin: 7px 0; float: right">Open query </a>
|
81
|
-
<table class="main" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background: #ffffff; border-radius: 3px;">
|
82
|
-
<tr>
|
83
|
-
<td class="wrapper" style="font-family: sans-serif; font-size: 14px; vertical-align: top; box-sizing: border-box; padding: 20px; max-width: 0px; overflow: scroll">
|
84
|
-
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: auto;">
|
85
|
-
<tbody>
|
86
|
-
<tr>
|
87
|
-
<td style="font-family: sans-serif; font-size: 14px; overflow: scroll;">
|
88
|
-
<div style="oveflow: scroll">
|
89
|
-
<table border="0" cellpadding="0" cellspacing="15" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; white-space: nowrap;">
|
90
|
-
<tr>
|
91
|
-
<% @query_result.columns.each do |column| %>
|
92
|
-
<th><%= column[:name] %></th>
|
93
|
-
<% end %>
|
94
|
-
</tr>
|
95
|
-
<% @query_result.data.first(40).each do |row| %>
|
96
|
-
<tr>
|
97
|
-
<% row.each do |col| %>
|
98
|
-
<td><%= col.respond_to?(:strftime) ? l(col, format: :long) : col.to_s.truncate(100) %></th>
|
99
|
-
<% end %>
|
100
|
-
</tr>
|
1
|
+
<table border="0" cellpadding="0" cellspacing="0" class="body" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background-color: #f9fbfc;">
|
2
|
+
<tr>
|
3
|
+
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;"> </td>
|
4
|
+
<td class="container" style="font-family: sans-serif; font-size: 14px; vertical-align: top; display: block; Margin: 0 auto; padding: 10px;">
|
5
|
+
<div class="content" style="box-sizing: border-box; display: block; Margin: 0 auto;padding: 10px;">
|
6
|
+
<h1 style="margin: 0"><%= @alert.name.presence || @alert.query.name %></h1>
|
7
|
+
<% if @query_result.data.length > 1 %>
|
8
|
+
<p style="margin: 7px 0; float: left">Showing <%= @query_result.data.first(40).size %> of <%= @query_result.data.size %> rows</p>
|
9
|
+
<% end %>
|
10
|
+
<a href="<%= Motor::Admin.routes.url_helpers.motor_ui_query_url(@alert.query, { host: 'localhost:3000' }.merge(Rails.application.config.action_mailer.default_url_options || {})) %>" target="blank" style="margin: 7px 0; float: right">Open query </a>
|
11
|
+
<table class="main" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background: #ffffff; border-radius: 3px;">
|
12
|
+
<tr>
|
13
|
+
<td class="wrapper" style="font-family: sans-serif; font-size: 14px; vertical-align: top; box-sizing: border-box; padding: 20px; max-width: 0px; overflow: scroll">
|
14
|
+
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: auto;">
|
15
|
+
<tbody>
|
16
|
+
<tr>
|
17
|
+
<td style="font-family: sans-serif; font-size: 14px; overflow: scroll;">
|
18
|
+
<div style="oveflow: scroll">
|
19
|
+
<table border="0" cellpadding="0" cellspacing="15" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; white-space: nowrap;">
|
20
|
+
<tr>
|
21
|
+
<% @query_result.columns.each do |column| %>
|
22
|
+
<th><%= column[:name] %></th>
|
23
|
+
<% end %>
|
24
|
+
</tr>
|
25
|
+
<% @query_result.data.first(40).each do |row| %>
|
26
|
+
<tr>
|
27
|
+
<% row.each do |col| %>
|
28
|
+
<td><%= col.respond_to?(:strftime) ? l(col, format: :long) : col.to_s.truncate(100) %></th>
|
101
29
|
<% end %>
|
102
|
-
</
|
103
|
-
|
104
|
-
</
|
105
|
-
</
|
106
|
-
</
|
107
|
-
</
|
108
|
-
</
|
109
|
-
</tr>
|
110
|
-
</table>
|
111
|
-
<div class="footer" style="clear: both; Margin-top: 10px; text-align: center; width: 100%;">
|
112
|
-
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;">
|
113
|
-
<tr>
|
114
|
-
<td class="content-block powered-by" style="font-family: sans-serif; vertical-align: top; padding-bottom: 10px; padding-top: 10px; font-size: 12px; color: #999999; text-align: center;">
|
115
|
-
Sent from MotorAdmin
|
116
|
-
</td>
|
117
|
-
</tr>
|
30
|
+
</tr>
|
31
|
+
<% end %>
|
32
|
+
</table>
|
33
|
+
</div>
|
34
|
+
</td>
|
35
|
+
</tr>
|
36
|
+
</tbody>
|
118
37
|
</table>
|
119
|
-
</
|
120
|
-
</
|
121
|
-
</
|
122
|
-
<
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
38
|
+
</td>
|
39
|
+
</tr>
|
40
|
+
</table>
|
41
|
+
<div class="footer" style="clear: both; Margin-top: 10px; text-align: center; width: 100%;">
|
42
|
+
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;">
|
43
|
+
<tr>
|
44
|
+
<td class="content-block powered-by" style="font-family: sans-serif; vertical-align: top; padding-bottom: 10px; padding-top: 10px; font-size: 12px; color: #999999; text-align: center;">
|
45
|
+
Sent from <%= Motor.company_name %>
|
46
|
+
</td>
|
47
|
+
</tr>
|
48
|
+
</table>
|
49
|
+
</div>
|
50
|
+
</div>
|
51
|
+
</td>
|
52
|
+
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;"> </td>
|
53
|
+
</tr>
|
54
|
+
</table>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<table border="0" cellpadding="0" cellspacing="0" class="body" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background-color: #f9fbfc;">
|
2
|
+
<tr>
|
3
|
+
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;"> </td>
|
4
|
+
<td class="container" style="font-family: sans-serif; font-size: 14px; vertical-align: top; display: block; Margin: 0 auto; padding: 10px;">
|
5
|
+
<div class="content" style="box-sizing: border-box; display: block; Margin: 0 auto;padding: 10px;">
|
6
|
+
<h1 style="margin: 0">Mention Notification</h1>
|
7
|
+
<a href="<%= Motor::Admin.routes.url_helpers.motor_ui_data_url([Motor::BuildSchema::Utils.slugify(@note.record.class), @note.record[@note.class.primary_key]], { tab: 'notes', host: 'localhost:3000' }.merge(Rails.application.config.action_mailer.default_url_options || {})) %>" target="blank" style="margin: 7px 0; float: right">Go to Mention</a>
|
8
|
+
<table class="main" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background: #ffffff; border-radius: 3px;">
|
9
|
+
<tr>
|
10
|
+
<td class="wrapper" style="font-family: sans-serif; font-size: 14px; vertical-align: top; box-sizing: border-box; padding: 20px; max-width: 0px; overflow: scroll">
|
11
|
+
<%= simple_format(@note.body.gsub(URI.regexp, '<a href="\0">\0</a>')) %>
|
12
|
+
</td>
|
13
|
+
</tr>
|
14
|
+
</table>
|
15
|
+
<div class="footer" style="clear: both; Margin-top: 10px; text-align: center; width: 100%;">
|
16
|
+
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;">
|
17
|
+
<tr>
|
18
|
+
<td class="content-block powered-by" style="font-family: sans-serif; vertical-align: top; padding-bottom: 10px; padding-top: 10px; font-size: 12px; color: #999999; text-align: center;">
|
19
|
+
Sent from <%= Motor.company_name %>
|
20
|
+
</td>
|
21
|
+
</tr>
|
22
|
+
</table>
|
23
|
+
</div>
|
24
|
+
</div>
|
25
|
+
</td>
|
26
|
+
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;"> </td>
|
27
|
+
</tr>
|
28
|
+
</table>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<table border="0" cellpadding="0" cellspacing="0" class="body" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background-color: #f9fbfc;">
|
2
|
+
<tr>
|
3
|
+
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;"> </td>
|
4
|
+
<td class="container" style="font-family: sans-serif; font-size: 14px; vertical-align: top; display: block; Margin: 0 auto; padding: 10px;">
|
5
|
+
<div class="content" style="box-sizing: border-box; display: block; Margin: 0 auto;padding: 10px;">
|
6
|
+
<h1 style="margin: 0">Reminder Notification</h1>
|
7
|
+
<a href="<%= Motor::Admin.routes.url_helpers.motor_ui_data_url([Motor::BuildSchema::Utils.slugify(@note.record.class), @note.record[@note.class.primary_key]], { tab: 'notes', host: 'localhost:3000' }.merge(Rails.application.config.action_mailer.default_url_options || {})) %>" target="blank" style="margin: 7px 0; float: right">Go to Reminder</a>
|
8
|
+
<table class="main" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background: #ffffff; border-radius: 3px;">
|
9
|
+
<tr>
|
10
|
+
<td class="wrapper" style="font-family: sans-serif; font-size: 14px; vertical-align: top; box-sizing: border-box; padding: 20px; max-width: 0px; overflow: scroll">
|
11
|
+
<%= simple_format(@note.body.gsub(URI.regexp, '<a href="\0">\0</a>')) %>
|
12
|
+
</td>
|
13
|
+
</tr>
|
14
|
+
</table>
|
15
|
+
<div class="footer" style="clear: both; Margin-top: 10px; text-align: center; width: 100%;">
|
16
|
+
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;">
|
17
|
+
<tr>
|
18
|
+
<td class="content-block powered-by" style="font-family: sans-serif; vertical-align: top; padding-bottom: 10px; padding-top: 10px; font-size: 12px; color: #999999; text-align: center;">
|
19
|
+
Sent from <%= Motor.company_name %>
|
20
|
+
</td>
|
21
|
+
</tr>
|
22
|
+
</table>
|
23
|
+
</div>
|
24
|
+
</div>
|
25
|
+
</td>
|
26
|
+
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;"> </td>
|
27
|
+
</tr>
|
28
|
+
</table>
|
data/config/locales/el.yml
CHANGED
@@ -311,6 +311,31 @@ el:
|
|
311
311
|
radar_chart: Radar chart
|
312
312
|
show_on_table: Show on table
|
313
313
|
map: Map
|
314
|
+
audits: Έλεγχοι
|
315
|
+
nothing_to_show_here_yet: Δεν υπάρχει τίποτα ακόμα εδώ 🤷♂️
|
316
|
+
internal: Internal/Anonymous
|
317
|
+
updated: ενημερωμένο
|
318
|
+
created: δημιουργήθηκε
|
319
|
+
deleted: διαγράφηκε
|
320
|
+
sign_out: Αποσυνδεθείτε
|
321
|
+
user_dropdown: Χρήστης dropdown
|
322
|
+
add_condition: Προσθήκη συνθήκης
|
323
|
+
remove_condition: Αφαίρεση συνθήκης
|
324
|
+
unable_to_send_alert: Αδυναμία αποστολής ειδοποίησης
|
325
|
+
send_via: Αποστολή μέσω
|
326
|
+
variable_name: Όνομα μεταβλητής
|
327
|
+
add_variable: Προσθήκη μεταβλητής
|
328
|
+
notes: Σημειώσεις
|
329
|
+
new_mention_for: "νέα αναφορά για %{resource}"
|
330
|
+
user_mentioned_you_with_note: "%{user} σας ανέφερε με:\n%{note}"
|
331
|
+
edit_note: Επεξεργασία σημείωσης
|
332
|
+
create_reminder: Δημιουργία υπενθύμισης
|
333
|
+
new_reminder_for: "Νέα υπενθύμιση για %{resource}"
|
334
|
+
reminder_has_been_removed: Η υπενθύμιση έχει αφαιρεθεί
|
335
|
+
note_has_been_removed: Η σημείωση έχει αφαιρεθεί
|
336
|
+
schedule_at: Χρονοδιάγραμμα στο
|
337
|
+
kanban_columns: Kanban columns
|
338
|
+
kanban_card_columns: Kanban card columns
|
314
339
|
i:
|
315
340
|
locale: el
|
316
341
|
select:
|
data/config/locales/en.yml
CHANGED
@@ -284,8 +284,6 @@ en:
|
|
284
284
|
hyphen: Hyphen
|
285
285
|
comma: Comma
|
286
286
|
slash: Slash
|
287
|
-
sql: SQL
|
288
|
-
api: API
|
289
287
|
searchable_columns: Searchable columns
|
290
288
|
validate: Validate
|
291
289
|
error_message: Error message
|
@@ -316,3 +314,36 @@ en:
|
|
316
314
|
radar_chart: Radar chart
|
317
315
|
show_on_table: Show on table
|
318
316
|
map: Map
|
317
|
+
audits: Audits
|
318
|
+
nothing_to_show_here_yet: Nothing to show here yet 🤷
|
319
|
+
internal: Internal/Anonymous
|
320
|
+
updated: updated
|
321
|
+
created: created
|
322
|
+
deleted: deleted
|
323
|
+
sign_out: Sign out
|
324
|
+
header: Header
|
325
|
+
user_dropdown: User dropdown
|
326
|
+
add_condition: Add Condition
|
327
|
+
remove_condition: Remove Condition
|
328
|
+
unable_to_send_alert: Unable to send alert
|
329
|
+
send_via: Send via
|
330
|
+
download: Download
|
331
|
+
alert: Alert
|
332
|
+
downloading: Downloading
|
333
|
+
display_id: Display ID
|
334
|
+
display_settings: Display settings
|
335
|
+
sql: SQL
|
336
|
+
api: API
|
337
|
+
variable_name: Variable name
|
338
|
+
add_variable: Add variable
|
339
|
+
notes: Notes
|
340
|
+
new_mention_for: "New Mention for %{resource}"
|
341
|
+
user_mentioned_you_with_note: "%{user} mentioned you with:\n%{note}"
|
342
|
+
edit_note: Edit Note
|
343
|
+
create_reminder: Create Reminder
|
344
|
+
new_reminder_for: "New Reminder for %{resource}"
|
345
|
+
reminder_has_been_removed: Reminder has been removed
|
346
|
+
note_has_been_removed: Note has been removed
|
347
|
+
schedule_at: Schedule at
|
348
|
+
kanban_columns: Kanban columns
|
349
|
+
kanban_card_columns: Kanban card columns
|
data/config/locales/es.yml
CHANGED
@@ -284,8 +284,6 @@ es:
|
|
284
284
|
hyphen: Guión
|
285
285
|
comma: Coma
|
286
286
|
slash: Slash
|
287
|
-
sql: SQL
|
288
|
-
api: API
|
289
287
|
searchable_columns: Columnas de búsqueda
|
290
288
|
validate: Validar
|
291
289
|
error_message: Mensaje de error
|
@@ -311,6 +309,39 @@ es:
|
|
311
309
|
radar_chart: Radar chart
|
312
310
|
show_on_table: Show on table
|
313
311
|
map: Map
|
312
|
+
audits: Audits
|
313
|
+
nothing_to_show_here_yet: Nothing to show here yet 🤷
|
314
|
+
internal: Internal/Anonymous
|
315
|
+
updated: updated
|
316
|
+
created: created
|
317
|
+
deleted: deleted
|
318
|
+
sign_out: Sign out
|
319
|
+
header: Header
|
320
|
+
user_dropdown: User dropdown
|
321
|
+
add_condition: Add Condition
|
322
|
+
remove_condition: Remove Condition
|
323
|
+
unable_to_send_alert: Unable to send alert
|
324
|
+
send_via: Send via
|
325
|
+
download: Descargar
|
326
|
+
alert: Alerta
|
327
|
+
downloading: Descargando
|
328
|
+
display_id: Visualizar ID
|
329
|
+
display_settings: Configuración de la pantalla
|
330
|
+
sql: SQL
|
331
|
+
api: API
|
332
|
+
variable_name: Nombre de la variable
|
333
|
+
add_variable: Añadir variable
|
334
|
+
notes: Notes
|
335
|
+
new_mention_for: "New Mention for %{resource}"
|
336
|
+
user_mentioned_you_with_note: "%{user} mentioned you with:\n%{note}"
|
337
|
+
edit_note: Edit Note
|
338
|
+
create_reminder: Create Reminder
|
339
|
+
new_reminder_for: "New Reminder for %{resource}"
|
340
|
+
reminder_has_been_removed: Reminder has been removed
|
341
|
+
note_has_been_removed: Note has been removed
|
342
|
+
schedule_at: Schedule at
|
343
|
+
kanban_columns: Kanban columns
|
344
|
+
kanban_card_columns: Kanban card columns
|
314
345
|
i:
|
315
346
|
locale: es
|
316
347
|
select:
|
data/config/locales/pt.yml
CHANGED
@@ -280,8 +280,6 @@ pt:
|
|
280
280
|
hyphen: Hífen
|
281
281
|
comma: Vírgula
|
282
282
|
slash: Slash
|
283
|
-
sql: SQL
|
284
|
-
api: API
|
285
283
|
searchable_columns: Colunas pesquisáveis
|
286
284
|
validate: Validar
|
287
285
|
error_message: Mensagem de erro
|
@@ -307,6 +305,39 @@ pt:
|
|
307
305
|
radar_chart: Radar chart
|
308
306
|
show_on_table: Show on table
|
309
307
|
map: Map
|
308
|
+
audits: Audits
|
309
|
+
nothing_to_show_here_yet: Nothing to show here yet 🤷
|
310
|
+
internal: Internal/Anonymous
|
311
|
+
updated: updated
|
312
|
+
created: created
|
313
|
+
deleted: deleted
|
314
|
+
sign_out: Sign out
|
315
|
+
header: Header
|
316
|
+
user_dropdown: User dropdown
|
317
|
+
add_condition: Add Condition
|
318
|
+
remove_condition: Remove Condition
|
319
|
+
unable_to_send_alert: Unable to send alert
|
320
|
+
send_via: Send via
|
321
|
+
download: Descarregar
|
322
|
+
alert: Alerta
|
323
|
+
downloading: Descarregamento
|
324
|
+
display_id: Mostrar ID
|
325
|
+
display_settings: Definições de visualização
|
326
|
+
sql: SQL
|
327
|
+
api: API
|
328
|
+
variable_name: Nome da variável
|
329
|
+
add_variable: Adicionar variável
|
330
|
+
notes: Notes
|
331
|
+
new_mention_for: "New Mention for %{resource}"
|
332
|
+
user_mentioned_you_with_note: "%{user} mentioned you with:\n%{note}"
|
333
|
+
edit_note: Edit Note
|
334
|
+
create_reminder: Create Reminder
|
335
|
+
new_reminder_for: "New Reminder for %{resource}"
|
336
|
+
reminder_has_been_removed: Reminder has been removed
|
337
|
+
note_has_been_removed: Note has been removed
|
338
|
+
schedule_at: Schedule at
|
339
|
+
kanban_columns: Kanban columns
|
340
|
+
kanban_card_columns: Kanban card columns
|
310
341
|
i:
|
311
342
|
locale: pt
|
312
343
|
select:
|
data/config/routes.rb
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
Motor::Admin.routes.draw do
|
4
4
|
namespace :motor, path: '' do
|
5
|
+
mount ActionCable.server => '/cable', as: :cabel if defined?(ActionCable)
|
6
|
+
|
5
7
|
scope 'api', as: :api do
|
6
8
|
resources :run_queries, only: %i[show create]
|
7
9
|
resources :send_alerts, only: %i[create]
|
@@ -18,11 +20,17 @@ Motor::Admin.routes.draw do
|
|
18
20
|
resource :run_graphql_request, only: %i[create]
|
19
21
|
resources :api_configs, only: %i[index create destroy]
|
20
22
|
resources :forms, only: %i[index show create update destroy]
|
23
|
+
resources :notes, only: %i[index show create update destroy]
|
24
|
+
resources :note_tags, only: %i[index]
|
25
|
+
resources :users_for_autocomplete, only: %i[index]
|
26
|
+
resources :notifications, only: %i[index update]
|
27
|
+
resources :reminders, only: %i[create destroy]
|
21
28
|
resources :alerts, only: %i[index show create update destroy]
|
22
29
|
resources :icons, only: %i[index]
|
23
30
|
resources :active_storage_attachments, only: %i[create], path: 'data/active_storage__attachments'
|
24
31
|
resources :audits, only: %i[index]
|
25
32
|
resource :session, only: %i[show destroy]
|
33
|
+
resources :slack_conversations, only: %i[index]
|
26
34
|
resources :resources, path: '/data/:resource',
|
27
35
|
only: %i[index show update create destroy],
|
28
36
|
controller: 'data',
|
@@ -45,6 +53,7 @@ Motor::Admin.routes.draw do
|
|
45
53
|
get '/data(/*path)', to: 'ui#index', as: :data
|
46
54
|
|
47
55
|
with_options controller: 'ui' do
|
56
|
+
resources :notifications, only: %i[index]
|
48
57
|
resources :reports, only: %i[index show]
|
49
58
|
resources :queries, only: %i[index show new]
|
50
59
|
resources :dashboards, only: %i[index show new]
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators'
|
4
|
+
require 'rails/generators/migration'
|
5
|
+
require 'active_record'
|
6
|
+
require 'rails/generators/active_record'
|
7
|
+
require 'generators/motor/migration'
|
8
|
+
|
9
|
+
module Motor
|
10
|
+
module Generators
|
11
|
+
class InstallProNotesGenerator < Rails::Generators::Base
|
12
|
+
include Rails::Generators::Migration
|
13
|
+
extend Motor::Generators::Migration
|
14
|
+
|
15
|
+
source_root File.expand_path('templates', __dir__)
|
16
|
+
|
17
|
+
def copy_migration
|
18
|
+
migration_template 'install_pro_notes.rb', 'db/migrate/install_motor_admin_pro_notes.rb'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -155,6 +155,78 @@ class <%= migration_class_name %> < ActiveRecord::Migration[<%= ActiveRecord::Mi
|
|
155
155
|
where: 'deleted_at IS NULL'
|
156
156
|
end
|
157
157
|
|
158
|
+
create_table :motor_notes do |t|
|
159
|
+
t.column :body, :text
|
160
|
+
t.column :author_id, :bigint
|
161
|
+
t.column :author_type, :string
|
162
|
+
t.column :record_id, :string, null: false
|
163
|
+
t.column :record_type, :string, null: false
|
164
|
+
t.column :deleted_at, :datetime
|
165
|
+
|
166
|
+
t.timestamps
|
167
|
+
|
168
|
+
t.index %i[author_id author_type],
|
169
|
+
name: 'motor_notes_author_id_author_type_index'
|
170
|
+
end
|
171
|
+
|
172
|
+
create_table :motor_note_tags do |t|
|
173
|
+
t.column :name, :string, null: false
|
174
|
+
|
175
|
+
t.timestamps
|
176
|
+
|
177
|
+
t.index 'name',
|
178
|
+
name: 'motor_note_tags_name_unique_index',
|
179
|
+
unique: true
|
180
|
+
end
|
181
|
+
|
182
|
+
create_table :motor_note_tag_tags do |t|
|
183
|
+
t.references :tag, null: false, foreign_key: { to_table: :motor_note_tags }, index: true
|
184
|
+
t.references :note, null: false, foreign_key: { to_table: :motor_notes }, index: false
|
185
|
+
|
186
|
+
t.index %i[note_id tag_id],
|
187
|
+
name: 'motor_note_tags_note_id_tag_id_index',
|
188
|
+
unique: true
|
189
|
+
end
|
190
|
+
|
191
|
+
create_table :motor_reminders do |t|
|
192
|
+
t.column :author_id, :bigint, null: false
|
193
|
+
t.column :author_type, :string, null: false
|
194
|
+
t.column :recipient_id, :bigint, null: false
|
195
|
+
t.column :recipient_type, :string, null: false
|
196
|
+
t.column :record_id, :string
|
197
|
+
t.column :record_type, :string
|
198
|
+
t.column :scheduled_at, :datetime, null: false, index: true
|
199
|
+
|
200
|
+
t.timestamps
|
201
|
+
|
202
|
+
t.index %i[author_id author_type],
|
203
|
+
name: 'motor_reminders_author_id_author_type_index'
|
204
|
+
|
205
|
+
t.index %i[recipient_id recipient_type],
|
206
|
+
name: 'motor_reminders_recipient_id_recipient_type_index'
|
207
|
+
|
208
|
+
t.index %i[record_id record_type],
|
209
|
+
name: 'motor_reminders_record_id_record_type_index'
|
210
|
+
end
|
211
|
+
|
212
|
+
create_table :motor_notifications do |t|
|
213
|
+
t.column :title, :string, null: false
|
214
|
+
t.column :description, :text
|
215
|
+
t.column :recipient_id, :bigint, null: false
|
216
|
+
t.column :recipient_type, :string, null: false
|
217
|
+
t.column :record_id, :string
|
218
|
+
t.column :record_type, :string
|
219
|
+
t.column :status, :string, null: false
|
220
|
+
|
221
|
+
t.timestamps
|
222
|
+
|
223
|
+
t.index %i[recipient_id recipient_type],
|
224
|
+
name: 'motor_notifications_recipient_id_recipient_type_index'
|
225
|
+
|
226
|
+
t.index %i[record_id record_type],
|
227
|
+
name: 'motor_notifications_record_id_record_type_index'
|
228
|
+
end
|
229
|
+
|
158
230
|
add_index :motor_audits, %i[auditable_type auditable_id version], name: 'motor_auditable_index'
|
159
231
|
add_index :motor_audits, %i[associated_type associated_id], name: 'motor_auditable_associated_index'
|
160
232
|
add_index :motor_audits, %i[user_id user_type], name: 'motor_auditable_user_index'
|
@@ -187,5 +259,10 @@ class <%= migration_class_name %> < ActiveRecord::Migration[<%= ActiveRecord::Mi
|
|
187
259
|
drop_table :motor_queries
|
188
260
|
drop_table :motor_dashboards
|
189
261
|
drop_table :motor_api_configs
|
262
|
+
drop_table :motor_note_tag_tags
|
263
|
+
drop_table :motor_note_tags
|
264
|
+
drop_table :motor_notes
|
265
|
+
drop_table :motor_notifications
|
266
|
+
drop_table :motor_reminders
|
190
267
|
end
|
191
268
|
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
class <%= migration_class_name %> < ActiveRecord::Migration[<%= ActiveRecord::Migration.current_version %>]
|
2
|
+
def self.up
|
3
|
+
create_table :motor_notes do |t|
|
4
|
+
t.column :body, :text
|
5
|
+
t.column :author_id, :bigint
|
6
|
+
t.column :author_type, :string
|
7
|
+
t.column :record_id, :string, null: false
|
8
|
+
t.column :record_type, :string, null: false
|
9
|
+
t.column :deleted_at, :datetime
|
10
|
+
|
11
|
+
t.timestamps
|
12
|
+
|
13
|
+
t.index %i[author_id author_type],
|
14
|
+
name: 'motor_notes_author_id_author_type_index'
|
15
|
+
end
|
16
|
+
|
17
|
+
create_table :motor_note_tags do |t|
|
18
|
+
t.column :name, :string, null: false
|
19
|
+
|
20
|
+
t.timestamps
|
21
|
+
|
22
|
+
t.index 'name',
|
23
|
+
name: 'motor_note_tags_name_unique_index',
|
24
|
+
unique: true
|
25
|
+
end
|
26
|
+
|
27
|
+
create_table :motor_note_tag_tags do |t|
|
28
|
+
t.references :tag, null: false, foreign_key: { to_table: :motor_note_tags }, index: true
|
29
|
+
t.references :note, null: false, foreign_key: { to_table: :motor_notes }, index: false
|
30
|
+
|
31
|
+
t.index %i[note_id tag_id],
|
32
|
+
name: 'motor_note_tags_note_id_tag_id_index',
|
33
|
+
unique: true
|
34
|
+
end
|
35
|
+
|
36
|
+
create_table :motor_reminders do |t|
|
37
|
+
t.column :author_id, :bigint, null: false
|
38
|
+
t.column :author_type, :string, null: false
|
39
|
+
t.column :recipient_id, :bigint, null: false
|
40
|
+
t.column :recipient_type, :string, null: false
|
41
|
+
t.column :record_id, :string
|
42
|
+
t.column :record_type, :string
|
43
|
+
t.column :scheduled_at, :datetime, null: false, index: true
|
44
|
+
|
45
|
+
t.timestamps
|
46
|
+
|
47
|
+
t.index %i[author_id author_type],
|
48
|
+
name: 'motor_reminders_author_id_author_type_index'
|
49
|
+
|
50
|
+
t.index %i[recipient_id recipient_type],
|
51
|
+
name: 'motor_reminders_recipient_id_recipient_type_index'
|
52
|
+
|
53
|
+
t.index %i[record_id record_type],
|
54
|
+
name: 'motor_reminders_record_id_record_type_index'
|
55
|
+
end
|
56
|
+
|
57
|
+
create_table :motor_notifications do |t|
|
58
|
+
t.column :title, :string, null: false
|
59
|
+
t.column :description, :text
|
60
|
+
t.column :recipient_id, :bigint, null: false
|
61
|
+
t.column :recipient_type, :string, null: false
|
62
|
+
t.column :record_id, :string
|
63
|
+
t.column :record_type, :string
|
64
|
+
t.column :status, :string, null: false
|
65
|
+
|
66
|
+
t.timestamps
|
67
|
+
|
68
|
+
t.index %i[recipient_id recipient_type],
|
69
|
+
name: 'motor_notifications_recipient_id_recipient_type_index'
|
70
|
+
|
71
|
+
t.index %i[record_id record_type],
|
72
|
+
name: 'motor_notifications_record_id_record_type_index'
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.down
|
77
|
+
drop_table :motor_note_tag_tags
|
78
|
+
drop_table :motor_note_tags
|
79
|
+
drop_table :motor_notes
|
80
|
+
drop_table :motor_notifications
|
81
|
+
drop_table :motor_reminders
|
82
|
+
end
|
83
|
+
end
|