mumuki-laboratory 9.10.0 → 9.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_dropdown.scss +11 -0
  3. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_faqs.scss +1 -1
  4. data/app/controllers/application_controller.rb +1 -1
  5. data/app/controllers/users_controller.rb +33 -0
  6. data/app/helpers/application_helper.rb +2 -2
  7. data/app/helpers/icons_helper.rb +1 -1
  8. data/app/helpers/menu_bar_helper.rb +6 -2
  9. data/app/helpers/notifications_helper.rb +13 -0
  10. data/app/helpers/user_menu_helper.rb +4 -0
  11. data/app/mailers/user_mailer.rb +9 -1
  12. data/app/views/layouts/_user_menu.html.erb +1 -0
  13. data/app/views/layouts/exercise_inputs/read_only_editors/_code.html.erb +1 -1
  14. data/app/views/layouts/exercise_inputs/read_only_editors/_multiple_files.html.erb +4 -4
  15. data/app/views/layouts/mailer.html.erb +7 -1
  16. data/app/views/notifications/_custom.html.erb +1 -0
  17. data/app/views/notifications/_dropdown.html.erb +2 -2
  18. data/app/views/notifications/_exam_authorization_request_updated.html.erb +2 -0
  19. data/app/views/notifications/_exam_registration.html.erb +2 -1
  20. data/app/views/notifications/previews/_custom.html.erb +1 -0
  21. data/app/views/notifications/previews/_discussion.html.erb +2 -0
  22. data/app/views/notifications/previews/_exam_authorization_request_updated.html.erb +2 -0
  23. data/app/views/notifications/previews/_exam_registration.html.erb +2 -0
  24. data/app/views/notifications/previews/_message.html.erb +2 -0
  25. data/app/views/user_mailer/1st_reminder.html.erb +7 -349
  26. data/app/views/user_mailer/1st_reminder.text.erb +0 -4
  27. data/app/views/user_mailer/2nd_reminder.html.erb +7 -349
  28. data/app/views/user_mailer/2nd_reminder.text.erb +0 -4
  29. data/app/views/user_mailer/3rd_reminder.html.erb +7 -349
  30. data/app/views/user_mailer/3rd_reminder.text.erb +0 -4
  31. data/app/views/user_mailer/_mail_template.erb +336 -0
  32. data/app/views/user_mailer/certificate.html.erb +7 -335
  33. data/app/views/user_mailer/certificate.text.erb +0 -3
  34. data/app/views/user_mailer/no_submissions_reminder.html.erb +7 -349
  35. data/app/views/user_mailer/no_submissions_reminder.text.erb +0 -4
  36. data/app/views/user_mailer/notification.html.erb +1 -0
  37. data/app/views/user_mailer/notification.text.erb +6 -0
  38. data/app/views/user_mailer/notifications/_custom.html.erb +11 -0
  39. data/app/views/user_mailer/notifications/_exam_authorization_request_updated.html.erb +1 -0
  40. data/app/views/user_mailer/notifications/_exam_registration.html.erb +7 -0
  41. data/app/views/user_mailer/notifications/exam_authorization_request_updated/_approved.html.erb +7 -0
  42. data/app/views/user_mailer/notifications/exam_authorization_request_updated/_rejected.html.erb +7 -0
  43. data/app/views/users/manage_notifications.html.erb +26 -0
  44. data/app/views/users/notifications.html.erb +54 -0
  45. data/config/routes.rb +4 -0
  46. data/lib/mumuki/laboratory/controllers/notifications.rb +2 -2
  47. data/lib/mumuki/laboratory/locales/en.yml +34 -1
  48. data/lib/mumuki/laboratory/locales/es-CL.yml +34 -1
  49. data/lib/mumuki/laboratory/locales/es.yml +35 -2
  50. data/lib/mumuki/laboratory/locales/pt.yml +34 -1
  51. data/lib/mumuki/laboratory/version.rb +1 -1
  52. data/spec/controllers/users_controller_spec.rb +48 -0
  53. data/spec/dummy/db/schema.rb +7 -1
  54. data/spec/features/notifications_flow_spec.rb +2 -1
  55. data/spec/mailers/previews/user_mailer_preview.rb +45 -1
  56. metadata +24 -9
  57. data/app/views/notifications/_discussion.html.erb +0 -1
  58. data/app/views/notifications/_exam_authorization_request.html.erb +0 -1
  59. data/app/views/notifications/_message.html.erb +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fb8cf028976b13658a28a48a6bf235276d1732ce1256a463cd348b8d915fcba7
4
- data.tar.gz: 990a6400b5f4fa76f7f17cd5dc97575c9cb475bc7588a15d4ae8102d434583b7
3
+ metadata.gz: b34448fea9940dfe1784874284974ae37cce2df2b56277e2eb1afdff93cab092
4
+ data.tar.gz: 14cafb4c1d57a5ecf4569c3de18a8ab35f2b0d7030dcd3f0c925945d3f9f2200
5
5
  SHA512:
6
- metadata.gz: 371681f22a60126bad63d241eee30f52f5a8c674077648a2bad413f15375fb704276af6149fc04046f0fc6d72d1562f76ccfcb1ec4d013a7bdcd4480dd817766
7
- data.tar.gz: 40875a8558cb07951d09ca67bfe2c10405b9fb75d225ff1afd9f4ede4803ba87b9a1460a8aae18268027c3e4380b9a00d20eb9d03d8c2d5561d4ee023453d4a6
6
+ metadata.gz: f8796a932c0f10ffd127de92b75d21cae746aae645e57a1a8c40e714c139ef9cd5b833cacd7e1c2259ca298ea8a076d1248c7891aacb49f69066a85bd37cbfce
7
+ data.tar.gz: 77ebd8d9a64a7eb2767e35a67befe8cf9f96346e4df97a92b23ad805c71c275252d1965744193d8c9b16d7f7b555323fd7d38b6176bacf32511944dd3296b3a0
@@ -1,3 +1,14 @@
1
1
  .fixed-icon {
2
2
  margin-right: 5px;
3
3
  }
4
+
5
+ .mu-notification-preview {
6
+ max-width: 350px;
7
+ @extend .d-inline-block;
8
+ @extend .text-truncate;
9
+ }
10
+
11
+ .mu-stealth-link {
12
+ text-decoration: none;
13
+ color: unset;
14
+ }
@@ -21,7 +21,7 @@
21
21
 
22
22
  @include media-breakpoint-down(md) {
23
23
  &:not(.active) {
24
- h3, p {
24
+ h3, p, ul {
25
25
  display: none
26
26
  }
27
27
  h2 {
@@ -37,7 +37,7 @@ class ApplicationController < ActionController::Base
37
37
  :login_button,
38
38
  :notifications_count,
39
39
  :has_notifications?,
40
- :notifications,
40
+ :user_notifications,
41
41
  :subject,
42
42
  :should_choose_organization?,
43
43
  :current_immersive_organizations,
@@ -3,6 +3,8 @@ class UsersController < ApplicationController
3
3
 
4
4
  before_action :authenticate!, except: :terms
5
5
  before_action :set_user!
6
+ before_action :set_notification!, only: :toggle_read
7
+ before_action :verify_owns_notification!, only: :toggle_read
6
8
  skip_before_action :validate_accepted_role_terms!
7
9
 
8
10
  def update
@@ -53,8 +55,39 @@ class UsersController < ApplicationController
53
55
  super << [:avatar_id, :avatar_type]
54
56
  end
55
57
 
58
+ def notifications
59
+ @notifications = @user.notifications.order(created_at: :desc).page(params[:page])
60
+ end
61
+
62
+ def toggle_read
63
+ @notification.toggle! :read
64
+ redirect_to notifications_user_path
65
+ end
66
+
67
+ def show_manage_notifications
68
+ render 'manage_notifications'
69
+ end
70
+
71
+ def manage_notifications
72
+ @user.update! ignored_notifications: manage_notifications_params.reject { |_, allowed| allowed.to_boolean }.keys
73
+
74
+ redirect_to notifications_user_path, notice: I18n.t(:preferences_updated_successfully)
75
+ end
76
+
56
77
  private
57
78
 
79
+ def manage_notifications_params
80
+ params.require(:notifications)
81
+ end
82
+
83
+ def set_notification!
84
+ @notification = Notification.find(params[:id])
85
+ end
86
+
87
+ def verify_owns_notification!
88
+ raise Mumuki::Domain::NotFoundError unless @notification.user == @user
89
+ end
90
+
58
91
  def validate_user_profile!
59
92
  end
60
93
 
@@ -45,8 +45,8 @@ module ApplicationHelper
45
45
  }.html_safe
46
46
  end
47
47
 
48
- def notification_preview_for(target)
49
- render "notifications/#{target.class.name.underscore}", { target: target }
48
+ def notification_preview_for(notification)
49
+ render "notifications/previews/#{notification.subject}", { notification: notification }
50
50
  end
51
51
 
52
52
  def current_time_zone_html
@@ -50,6 +50,6 @@ module IconsHelper
50
50
  end
51
51
 
52
52
  def icon_for_read(read)
53
- tag('i', class: "fa#{read ? 'r' : 's'} fa-envelope#{read ? '-open' : ''}")
53
+ tag.i(class: "fa#{read ? 'r' : 's'} fa-envelope#{read ? '-open' : ''}")
54
54
  end
55
55
  end
@@ -39,8 +39,12 @@ module MenuBarHelper
39
39
  li_tag menu_item('sign-out-alt', :sign_out, logout_path(origin: url_for))
40
40
  end
41
41
 
42
- def menu_item(icon, name, url, translation_params = {})
43
- link_to fixed_fa_icon(icon, text: t(name, translation_params)), url, role: 'menuitem', tabindex: '-1', class: 'dropdown-item'
42
+ def menu_item(icon, name, url, css_class = nil, **translation_params)
43
+ menu_text_item(icon, t(name, translation_params), url, css_class)
44
+ end
45
+
46
+ def menu_text_item(icon, text, url, css_class = nil)
47
+ link_to fixed_fa_icon(icon, text: text), url, role: 'menuitem', tabindex: '-1', class: "dropdown-item #{css_class}"
44
48
  end
45
49
 
46
50
  def any_menu_bar_links?
@@ -0,0 +1,13 @@
1
+ module NotificationsHelper
2
+ def background_for_notification(notification)
3
+ notification.read? ? '' : 'bg-light'
4
+ end
5
+
6
+ def notification_preview_item(icon, name, url, **translation_params)
7
+ menu_item icon, name, url, 'mu-notification-preview', **translation_params
8
+ end
9
+
10
+ def notification_text_preview_item(icon, text, url)
11
+ menu_text_item(icon, text, url, 'mu-notification-preview')
12
+ end
13
+ end
@@ -31,6 +31,10 @@ module UserMenuHelper
31
31
  user_menu_item t(:exams), exam_authorizations_user_path, 'exam_authorizations'
32
32
  end
33
33
 
34
+ def notifications_user_menu_link
35
+ user_menu_item t(:notifications), notifications_user_path, 'notifications'
36
+ end
37
+
34
38
  private
35
39
 
36
40
  def user_menu_item(label, path, active_on)
@@ -23,7 +23,15 @@ class UserMailer < ApplicationMailer
23
23
  def certificate(certificate)
24
24
  with_locale certificate.user, certificate.organization do
25
25
  attachments[certificate.filename] = pdf_for(certificate)
26
- mail to: certificate.user.email, subject: certificate.description
26
+ mail to: certificate.user.email, subject: t(:certificate_available)
27
+ end
28
+ end
29
+
30
+ def notification(notification)
31
+ @notification = notification
32
+
33
+ with_locale(notification.user, notification.organization) do
34
+ build_email notification.custom_title || t("mailer.title.#{notification.subject}"), 'notification'
27
35
  end
28
36
  end
29
37
 
@@ -4,6 +4,7 @@
4
4
  <%= user_menu_header %>
5
5
  <div class="mu-user-menu-items mu-hidden-sm-screen">
6
6
  <%= profile_user_menu_link %>
7
+ <%= notifications_user_menu_link %>
7
8
  <%= user_menu_divider %>
8
9
  <%= messages_user_menu_link %>
9
10
  <%= discussions_user_menu_link %>
@@ -1,3 +1,3 @@
1
1
  <div>
2
- <%= read_only_editor content, exercise.language.name %>
2
+ <%= read_only_editor content, exercise.language.highlight_mode %>
3
3
  </div>
@@ -4,10 +4,10 @@
4
4
 
5
5
  <div class="editor-files">
6
6
  <span class="files-tabs">
7
- <ul class="nav nav-tabs">
7
+ <ul class="nav nav-tabs" role="tablist">
8
8
  <% files.each_with_index do |file, index| %>
9
- <li role="presentation" class="file-tab <%= 'active' if index == 0 %>" data-bs-target="#editor-file-<%= index %>" tabindex='0' data-bs-toggle='tab'>
10
- <a class="file-name" href="#"><%= file.name %></a>
9
+ <li role="presentation" class="nav-item file-tab">
10
+ <a class="file-name nav-link <%= 'active' if index == 0 %>" href="#" data-bs-target="#editor-file-<%= index %>" tabindex="0" data-bs-toggle="tab"><%= file.name %></a>
11
11
  </li>
12
12
  <% end %>
13
13
  </ul>
@@ -17,7 +17,7 @@
17
17
 
18
18
  <div class="tab-content">
19
19
  <% files.each_with_index do |file, index| %>
20
- <div role="tabpanel" class="file-editor tab-pane mu-input-panel <%= 'fade in active' if index == 0 %>" id="editor-file-<%= index %>">
20
+ <div role="tabpanel" class="file-editor tab-pane mu-input-panel fade <%= 'show active' if index == 0 %>" id="editor-file-<%= index %>">
21
21
  <div class=<%="content[#{file.name}]"%>>
22
22
  <%= read_only_editor file.content, file.highlight_mode %>
23
23
  </div>
@@ -244,7 +244,7 @@
244
244
  @section Body Text
245
245
  */
246
246
  .bodyContainer .muMailTextContent,.bodyContainer .muMailTextContent p{
247
- /*@editable*/color:#808080;
247
+ /*@editable*/color:#616060;
248
248
  /*@editable*/font-family:Helvetica;
249
249
  /*@editable*/font-size:16px;
250
250
  /*@editable*/line-height:150%;
@@ -309,6 +309,12 @@
309
309
  /*@editable*/font-weight:normal;
310
310
  /*@editable*/text-decoration:underline;
311
311
  }
312
+
313
+ .mu-stealth-link {
314
+ text-decoration: none !important;
315
+ color: unset !important;
316
+ }
317
+
312
318
  @media only screen and (min-width:768px){
313
319
  .templateContainer{
314
320
  width:600px !important;
@@ -0,0 +1 @@
1
+ <%= notification.custom_content_plain_text %>
@@ -4,9 +4,9 @@
4
4
  <span class="badge badge-notifications"><%= notifications_count %></span>
5
5
  </div>
6
6
  <ul id="notificationsPanel" class="dropdown-menu dropdown-menu-end" aria-labelledby="notificationsDropdown">
7
- <% notifications.each do |it| %>
7
+ <% user_notifications.each do |it| %>
8
8
  <li>
9
- <%= notification_preview_for it.target %>
9
+ <%= notification_preview_for it %>
10
10
  </li>
11
11
  <% end %>
12
12
  </ul>
@@ -0,0 +1,2 @@
1
+ <% target = notification.target %>
2
+ <%= link_to t(:exam_authorization_request_updated, description: target.exam_registration.description), notification.organization.url_for('/user/exam_authorizations'), class: 'mu-stealth-link' %>
@@ -1 +1,2 @@
1
- <%= menu_item :book_open, :exam_registration_open, url_for(target), { description: target.description } %>
1
+ <% target = notification.target %>
2
+ <%= link_to t(:exam_registration_open, description: target.description), exam_registration_url(notification.organization, target), class: 'mu-stealth-link' %>
@@ -0,0 +1 @@
1
+ <%= notification_text_preview_item :envelope, notification.custom_title, notification.organization.url_for('/user/notifications') %>
@@ -0,0 +1,2 @@
1
+ <% target = notification.target %>
2
+ <%= notification_preview_item :comments, :new_discussion_message, url_for([target.item, target]), { title: target.item.name.truncate_words(3) } %>
@@ -0,0 +1,2 @@
1
+ <% target = notification.target %>
2
+ <%= notification_preview_item :book_open, :exam_authorization_request_updated, exam_authorizations_user_path, { description: target.exam_registration.description } %>
@@ -0,0 +1,2 @@
1
+ <% target = notification.target %>
2
+ <%= notification_preview_item :book_open, :exam_registration_open, url_for(target), { description: target.description } %>
@@ -0,0 +1,2 @@
1
+ <% target = notification.target %>
2
+ <%= notification_preview_item :envelope, :new_message_received, url_for(target.exercise), { sender: target.sender } %>
@@ -1,349 +1,7 @@
1
- <span class="muMailPreviewText" style="display:none; font-size:0px; line-height:0px; max-height:0px; max-width:0px; opacity:0; overflow:hidden; visibility:hidden; mso-hide:all;"><%= t :dont_leave_us %></span><!--<![endif]-->
2
- <center>
3
- <table align="center" border="0" cellpadding="0" cellspacing="0" height="100%" width="100%" id="bodyTable">
4
- <tbody><tr>
5
- <td align="center" valign="top" id="bodyCell">
6
- <!-- BEGIN TEMPLATE // -->
7
- <table border="0" cellpadding="0" cellspacing="0" width="100%">
8
- <tbody><tr>
9
- <td align="center" valign="top" id="templateHeader" data-template-container="">
10
- <!--[if (gte mso 9)|(IE)]>
11
- <table align="center" border="0" cellspacing="0" cellpadding="0" width="600" style="width:600px;">
12
- <tr>
13
- <td align="center" valign="top" width="600" style="width:600px;">
14
- <![endif]-->
15
- <table align="center" border="0" cellpadding="0" cellspacing="0" width="100%" class="templateContainer">
16
- <tbody><tr>
17
- <td valign="top" class="headerContainer"><table border="0" cellpadding="0" cellspacing="0" width="100%" class="muMailTextBlock" style="min-width:100%;">
18
- <tbody class="muMailTextBlockOuter">
19
- <tr>
20
- <td valign="top" class="muMailTextBlockInner" style="padding-top:9px;">
21
- <!--[if mso]>
22
- <table align="left" border="0" cellspacing="0" cellpadding="0" width="100%" style="width:100%;">
23
- <tr>
24
- <![endif]-->
25
-
26
- <!--[if mso]>
27
- <td valign="top" width="600" style="width:600px;">
28
- <![endif]-->
29
- <table align="left" border="0" cellpadding="0" cellspacing="0" style="max-width:100%; min-width:100%;" width="100%" class="muMailTextContentContainer">
30
- <tbody><tr>
31
-
32
- <td valign="top" class="muMailTextContent" style="padding-top:0; padding-right:18px; padding-bottom:9px; padding-left:18px;">
33
-
34
- <h1><span style="color:#FFFFFF"><%= t :we_miss_you %></span></h1>
35
-
36
- </td>
37
- </tr>
38
- </tbody></table>
39
- <!--[if mso]>
40
- </td>
41
- <![endif]-->
42
-
43
- <!--[if mso]>
44
- </tr>
45
- </table>
46
- <![endif]-->
47
- </td>
48
- </tr>
49
- </tbody>
50
- </table></td>
51
- </tr>
52
- </tbody></table>
53
- <!--[if (gte mso 9)|(IE)]>
54
- </td>
55
- </tr>
56
- </table>
57
- <![endif]-->
58
- </td>
59
- </tr>
60
- <tr>
61
- <td align="center" valign="top" id="templateBody" data-template-container="">
62
- <!--[if (gte mso 9)|(IE)]>
63
- <table align="center" border="0" cellspacing="0" cellpadding="0" width="600" style="width:600px;">
64
- <tr>
65
- <td align="center" valign="top" width="600" style="width:600px;">
66
- <![endif]-->
67
- <table align="center" border="0" cellpadding="0" cellspacing="0" width="100%" class="templateContainer">
68
- <tbody><tr>
69
- <td valign="top" class="bodyContainer"><table border="0" cellpadding="0" cellspacing="0" width="100%" class="muMailCaptionBlock">
70
- <tbody class="muMailCaptionBlockOuter">
71
- <tr>
72
- <td class="muMailCaptionBlockInner" valign="top" style="padding:9px;">
73
-
74
-
75
-
76
-
77
- <table border="0" cellpadding="0" cellspacing="0" class="muMailCaptionRightContentOuter" width="100%">
78
- <tbody><tr>
79
- <td valign="top" class="muMailCaptionRightContentInner" style="padding:0 9px ;">
80
- <table align="left" border="0" cellpadding="0" cellspacing="0" class="muMailCaptionRightImageContentContainer" width="264">
81
- <tbody><tr>
82
- <td class="muMailCaptionRightImageContent" align="center" valign="top">
83
-
84
-
85
-
86
- <img alt="" src="https://gallery.mailchimp.com/046b6c670d9f80ebd6c5d075b/images/225fe60f-780a-451e-90aa-afb01f88a1b4.png" width="159" style="max-width:159px;" class="muMailImage">
87
-
88
-
89
-
90
- </td>
91
- </tr>
92
- </tbody></table>
93
- <table class="muMailCaptionRightTextContentContainer" align="right" border="0" cellpadding="0" cellspacing="0" width="264">
94
- <tbody><tr>
95
- <td valign="top" class="muMailTextContent">
96
- <h3 class="null" style="text-align: center;"><br>
97
- <span style="font-size:24px"><%= t :its_been_a_while %></span></h3>
98
-
99
- <div style="text-align: center;"><br>
100
- <span style="font-size:16px"><%= t :dont_leave_us %></span></div>
101
-
102
- </td>
103
- </tr>
104
- </tbody></table>
105
- </td>
106
- </tr>
107
- </tbody></table>
108
-
109
-
110
-
111
-
112
- </td>
113
- </tr>
114
- </tbody>
115
- </table><table border="0" cellpadding="0" cellspacing="0" width="100%" class="muMailButtonBlock" style="min-width:100%;">
116
- <tbody class="muMailButtonBlockOuter">
117
- <tr>
118
- <td style="padding-top:0; padding-right:18px; padding-bottom:18px; padding-left:18px;" valign="top" align="center" class="muMailButtonBlockInner">
119
- <table border="0" cellpadding="0" cellspacing="0" class="muMailButtonContentContainer" style="border-collapse: separate !important;border-radius: 3px;background-color: #FF5B81;">
120
- <tbody>
121
- <tr>
122
- <td align="center" valign="middle" class="muMailButtonContent" style="font-family: Helvetica; font-size: 18px; padding: 18px;">
123
- <a class="muMailButton " title=<%= t :keep_learning %> href=<%= Mumukit::Platform.laboratory.organic_url @user.last_organization %> target="_self" style="font-weight: bold;letter-spacing: -0.5px;line-height: 100%;text-align: center;text-decoration: none;color: #FFFFFF;"><%= t :keep_learning %></a>
124
- </td>
125
- </tr>
126
- </tbody>
127
- </table>
128
- </td>
129
- </tr>
130
- </tbody>
131
- </table></td>
132
- </tr>
133
- </tbody></table>
134
- <!--[if (gte mso 9)|(IE)]>
135
- </td>
136
- </tr>
137
- </table>
138
- <![endif]-->
139
- </td>
140
- </tr>
141
- <tr>
142
- <td align="center" valign="top" id="templateFooter" data-template-container="">
143
- <!--[if (gte mso 9)|(IE)]>
144
- <table align="center" border="0" cellspacing="0" cellpadding="0" width="600" style="width:600px;">
145
- <tr>
146
- <td align="center" valign="top" width="600" style="width:600px;">
147
- <![endif]-->
148
- <table align="center" border="0" cellpadding="0" cellspacing="0" width="100%" class="templateContainer">
149
- <tbody><tr>
150
- <td valign="top" class="footerContainer"><table border="0" cellpadding="0" cellspacing="0" width="100%" class="muMailFollowBlock" style="min-width:100%;">
151
- <tbody class="muMailFollowBlockOuter">
152
- <tr>
153
- <td align="center" valign="top" style="padding:9px" class="muMailFollowBlockInner">
154
- <table border="0" cellpadding="0" cellspacing="0" width="100%" class="muMailFollowContentContainer" style="min-width:100%;">
155
- <tbody><tr>
156
- <td align="center" style="padding-left:9px;padding-right:9px;">
157
- <table border="0" cellpadding="0" cellspacing="0" width="100%" style="min-width:100%;" class="muMailFollowContent">
158
- <tbody><tr>
159
- <td align="center" valign="top" style="padding-top:9px; padding-right:9px; padding-left:9px;">
160
- <table align="center" border="0" cellpadding="0" cellspacing="0">
161
- <tbody><tr>
162
- <td align="center" valign="top">
163
- <!--[if mso]>
164
- <table align="center" border="0" cellspacing="0" cellpadding="0">
165
- <tr>
166
- <![endif]-->
167
-
168
- <!--[if mso]>
169
- <td align="center" valign="top">
170
- <![endif]-->
171
-
172
-
173
- <table align="left" border="0" cellpadding="0" cellspacing="0" style="display:inline;">
174
- <tbody><tr>
175
- <td valign="top" style="padding-right:10px; padding-bottom:9px;" class="muMailFollowContentItemContainer">
176
- <table border="0" cellpadding="0" cellspacing="0" width="100%" class="muMailFollowContentItem">
177
- <tbody><tr>
178
- <td align="left" valign="middle" style="padding-top:5px; padding-right:10px; padding-bottom:5px; padding-left:9px;">
179
- <table align="left" border="0" cellpadding="0" cellspacing="0" width="">
180
- <tbody><tr>
181
-
182
- <td align="center" valign="middle" width="24" class="muMailFollowIconContent">
183
- <a href="http://www.facebook.com/MumukiOrg" target="_blank"><img src="https://cdn-images.mailchimp.com/icons/social-block-v2/outline-light-facebook-48.png" style="display:block;" height="24" width="24" class=""></a>
184
- </td>
185
-
186
-
187
- </tr>
188
- </tbody></table>
189
- </td>
190
- </tr>
191
- </tbody></table>
192
- </td>
193
- </tr>
194
- </tbody></table>
195
-
196
- <!--[if mso]>
197
- </td>
198
- <![endif]-->
199
-
200
- <!--[if mso]>
201
- <td align="center" valign="top">
202
- <![endif]-->
203
-
204
-
205
- <table align="left" border="0" cellpadding="0" cellspacing="0" style="display:inline;">
206
- <tbody><tr>
207
- <td valign="top" style="padding-right:10px; padding-bottom:9px;" class="muMailFollowContentItemContainer">
208
- <table border="0" cellpadding="0" cellspacing="0" width="100%" class="muMailFollowContentItem">
209
- <tbody><tr>
210
- <td align="left" valign="middle" style="padding-top:5px; padding-right:10px; padding-bottom:5px; padding-left:9px;">
211
- <table align="left" border="0" cellpadding="0" cellspacing="0" width="">
212
- <tbody><tr>
213
-
214
- <td align="center" valign="middle" width="24" class="muMailFollowIconContent">
215
- <a href="http://www.twitter.com/MumukiOrg" target="_blank"><img src="https://cdn-images.mailchimp.com/icons/social-block-v2/outline-light-twitter-48.png" style="display:block;" height="24" width="24" class=""></a>
216
- </td>
217
-
218
-
219
- </tr>
220
- </tbody></table>
221
- </td>
222
- </tr>
223
- </tbody></table>
224
- </td>
225
- </tr>
226
- </tbody></table>
227
-
228
- <!--[if mso]>
229
- </td>
230
- <![endif]-->
231
-
232
- <!--[if mso]>
233
- <td align="center" valign="top">
234
- <![endif]-->
235
-
236
-
237
- <table align="left" border="0" cellpadding="0" cellspacing="0" style="display:inline;">
238
- <tbody><tr>
239
- <td valign="top" style="padding-right:0; padding-bottom:9px;" class="muMailFollowContentItemContainer">
240
- <table border="0" cellpadding="0" cellspacing="0" width="100%" class="muMailFollowContentItem">
241
- <tbody><tr>
242
- <td align="left" valign="middle" style="padding-top:5px; padding-right:10px; padding-bottom:5px; padding-left:9px;">
243
- <table align="left" border="0" cellpadding="0" cellspacing="0" width="">
244
- <tbody><tr>
245
-
246
- <td align="center" valign="middle" width="24" class="muMailFollowIconContent">
247
- <a href="https://www.youtube.com/channel/UCQmkknsaTT2TDLT_-MDSGvQ" target="_blank"><img src="https://cdn-images.mailchimp.com/icons/social-block-v2/outline-light-youtube-48.png" style="display:block;" height="24" width="24" class=""></a>
248
- </td>
249
-
250
-
251
- </tr>
252
- </tbody></table>
253
- </td>
254
- </tr>
255
- </tbody></table>
256
- </td>
257
- </tr>
258
- </tbody></table>
259
-
260
- <!--[if mso]>
261
- </td>
262
- <![endif]-->
263
-
264
- <!--[if mso]>
265
- </tr>
266
- </table>
267
- <![endif]-->
268
- </td>
269
- </tr>
270
- </tbody></table>
271
- </td>
272
- </tr>
273
- </tbody></table>
274
- </td>
275
- </tr>
276
- </tbody></table>
277
-
278
- </td>
279
- </tr>
280
- </tbody>
281
- </table><table border="0" cellpadding="0" cellspacing="0" width="100%" class="muMailDividerBlock" style="min-width:100%;">
282
- <tbody class="muMailDividerBlockOuter">
283
- <tr>
284
- <td class="muMailDividerBlockInner" style="min-width:100%; padding:18px;">
285
- <table class="muMailDividerContent" border="0" cellpadding="0" cellspacing="0" width="100%" style="min-width: 100%;border-top: 2px solid #505050;">
286
- <tbody><tr>
287
- <td>
288
- <span></span>
289
- </td>
290
- </tr>
291
- </tbody></table>
292
- <!--
293
- <td class="muMailDividerBlockInner" style="padding: 18px;">
294
- <hr class="muMailDividerContent" style="border-bottom-color:none; border-left-color:none; border-right-color:none; border-bottom-width:0; border-left-width:0; border-right-width:0; margin-top:0; margin-right:0; margin-bottom:0; margin-left:0;" />
295
- -->
296
- </td>
297
- </tr>
298
- </tbody>
299
- </table><table border="0" cellpadding="0" cellspacing="0" width="100%" class="muMailTextBlock" style="min-width:100%;">
300
- <tbody class="muMailTextBlockOuter">
301
- <tr>
302
- <td valign="top" class="muMailTextBlockInner" style="padding-top:9px;">
303
- <!--[if mso]>
304
- <table align="left" border="0" cellspacing="0" cellpadding="0" width="100%" style="width:100%;">
305
- <tr>
306
- <![endif]-->
307
-
308
- <!--[if mso]>
309
- <td valign="top" width="600" style="width:600px;">
310
- <![endif]-->
311
- <table align="left" border="0" cellpadding="0" cellspacing="0" style="max-width:100%; min-width:100%;" width="100%" class="muMailTextContentContainer">
312
- <tbody><tr>
313
-
314
- <td valign="top" class="muMailTextContent" style="padding-top:0; padding-right:18px; padding-bottom:9px; padding-left:18px;">
315
-
316
- © Copyright 2015-<%= Time.current.year %>&nbsp;<a href="https://mumuki.org/home/">Mumuki</a><em>.</em><br>
317
- <br>
318
- <%= t :stop_emails? %><br>
319
- <%= link_to t(:cancel_subscription), @organization.url_for("/user/unsubscribe?id=#{@unsubscribe_code}"), target: :_blank %>
320
- </td>
321
- </tr>
322
- </tbody></table>
323
- <!--[if mso]>
324
- </td>
325
- <![endif]-->
326
-
327
- <!--[if mso]>
328
- </tr>
329
- </table>
330
- <![endif]-->
331
- </td>
332
- </tr>
333
- </tbody>
334
- </table></td>
335
- </tr>
336
- </tbody></table>
337
- <!--[if (gte mso 9)|(IE)]>
338
- </td>
339
- </tr>
340
- </table>
341
- <![endif]-->
342
- </td>
343
- </tr>
344
- </tbody></table>
345
- <!-- // END TEMPLATE -->
346
- </td>
347
- </tr>
348
- </tbody></table>
349
- </center>
1
+ <%= render partial: 'user_mailer/mail_template', locals: {
2
+ title: t(:we_miss_you),
3
+ subtitle: t(:its_been_a_while),
4
+ text: t(:dont_leave_us),
5
+ button: t(:keep_learning),
6
+ url: Mumukit::Platform.laboratory.organic_url(@user.last_organization)
7
+ } %>