mumuki-laboratory 9.8.2 → 9.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/mumuki_laboratory/application/bridge.js +15 -9
- data/app/assets/javascripts/mumuki_laboratory/application/confirmation.js +10 -8
- data/app/assets/javascripts/mumuki_laboratory/application/editors.js +5 -3
- data/app/assets/javascripts/mumuki_laboratory/application/messages.js +1 -30
- data/app/assets/javascripts/mumuki_laboratory/application/progress.js +4 -4
- data/app/assets/javascripts/mumuki_laboratory/application/results-renderer.js +12 -1
- data/app/assets/javascripts/mumuki_laboratory/application/submissions-store.js +8 -2
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_discussion.scss +32 -34
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_dropdown.scss +11 -0
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_editor.scss +3 -0
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_faqs.scss +1 -1
- data/app/controllers/application_controller.rb +1 -1
- data/app/controllers/messages_controller.rb +2 -5
- data/app/controllers/users_controller.rb +38 -1
- data/app/helpers/application_helper.rb +6 -2
- data/app/helpers/discussions_helper.rb +11 -4
- data/app/helpers/exam_registration_helper.rb +0 -4
- data/app/helpers/icons_helper.rb +1 -1
- data/app/helpers/menu_bar_helper.rb +7 -3
- data/app/helpers/messages_helper.rb +4 -8
- data/app/helpers/notifications_helper.rb +13 -0
- data/app/helpers/profile_helper.rb +4 -0
- data/app/helpers/time_zone_helper.rb +5 -0
- data/app/helpers/user_discussions_helper.rb +38 -0
- data/app/helpers/user_menu_helper.rb +4 -0
- data/app/mailers/user_mailer.rb +11 -1
- data/app/views/discussions/new.html.erb +1 -1
- data/app/views/layouts/_copyright.html.erb +1 -1
- data/app/views/layouts/_discussions.html.erb +1 -37
- data/app/views/layouts/_discussions_list.html.erb +38 -0
- data/app/views/layouts/_messages.html.erb +1 -7
- data/app/views/layouts/_user_menu.html.erb +1 -0
- data/app/views/layouts/exercise_inputs/forms/_interactive_form.html.erb +1 -1
- data/app/views/layouts/exercise_inputs/forms/_problem_form.html.erb +1 -1
- data/app/views/layouts/exercise_inputs/read_only_editors/_code.html.erb +1 -1
- data/app/views/layouts/exercise_inputs/read_only_editors/_multiple_files.html.erb +4 -4
- data/app/views/layouts/mailer.html.erb +7 -1
- data/app/views/notifications/_custom.html.erb +1 -0
- data/app/views/notifications/_dropdown.html.erb +2 -2
- data/app/views/notifications/_exam_authorization_request_updated.html.erb +2 -0
- data/app/views/notifications/_exam_registration.html.erb +2 -1
- data/app/views/notifications/previews/_custom.html.erb +1 -0
- data/app/views/notifications/previews/_discussion.html.erb +2 -0
- data/app/views/notifications/previews/_exam_authorization_request_updated.html.erb +2 -0
- data/app/views/notifications/previews/_exam_registration.html.erb +2 -0
- data/app/views/notifications/previews/_message.html.erb +2 -0
- data/app/views/user_mailer/1st_reminder.html.erb +7 -349
- data/app/views/user_mailer/1st_reminder.text.erb +1 -5
- data/app/views/user_mailer/2nd_reminder.html.erb +7 -349
- data/app/views/user_mailer/2nd_reminder.text.erb +1 -5
- data/app/views/user_mailer/3rd_reminder.html.erb +7 -349
- data/app/views/user_mailer/3rd_reminder.text.erb +1 -5
- data/app/views/user_mailer/_mail_template.erb +336 -0
- data/app/views/user_mailer/certificate.html.erb +7 -335
- data/app/views/user_mailer/certificate.text.erb +1 -4
- data/app/views/user_mailer/no_submissions_reminder.html.erb +7 -349
- data/app/views/user_mailer/no_submissions_reminder.text.erb +1 -5
- data/app/views/user_mailer/notification.html.erb +1 -0
- data/app/views/user_mailer/notification.text.erb +6 -0
- data/app/views/user_mailer/notifications/_custom.html.erb +11 -0
- data/app/views/user_mailer/notifications/_exam_authorization_request_updated.html.erb +1 -0
- data/app/views/user_mailer/notifications/_exam_registration.html.erb +7 -0
- data/app/views/user_mailer/notifications/exam_authorization_request_updated/_approved.html.erb +7 -0
- data/app/views/user_mailer/notifications/exam_authorization_request_updated/_rejected.html.erb +7 -0
- data/app/views/users/_basic_profile_fields.html.erb +30 -0
- data/app/views/users/_profile_fields.html.erb +1 -20
- data/app/views/users/discussions.html.erb +19 -11
- data/app/views/users/manage_notifications.html.erb +26 -0
- data/app/views/users/messages.html.erb +1 -1
- data/app/views/users/notifications.html.erb +54 -0
- data/config/routes.rb +4 -1
- data/lib/mumuki/laboratory.rb +1 -0
- data/lib/mumuki/laboratory/controllers/notifications.rb +2 -2
- data/lib/mumuki/laboratory/locales/en.yml +47 -7
- data/lib/mumuki/laboratory/locales/es-CL.yml +48 -7
- data/lib/mumuki/laboratory/locales/es.yml +49 -9
- data/lib/mumuki/laboratory/locales/pt.yml +46 -6
- data/lib/mumuki/laboratory/mailers/message_delivery.rb +15 -0
- data/lib/mumuki/laboratory/version.rb +1 -1
- data/spec/controllers/organizations_api_controller_spec.rb +6 -1
- data/spec/controllers/students_api_controller_spec.rb +1 -1
- data/spec/controllers/users_controller_spec.rb +48 -0
- data/spec/dummy/db/schema.rb +9 -1
- data/spec/features/not_found_public_flow_spec.rb +1 -1
- data/spec/features/notifications_flow_spec.rb +2 -1
- data/spec/features/profile_flow_spec.rb +1 -1
- data/spec/javascripts/editors-spec.js +21 -3
- data/spec/javascripts/submissions-store-spec.js +11 -0
- data/spec/mailers/previews/user_mailer_preview.rb +87 -1
- metadata +134 -115
- data/app/views/messages/errors.html.erb +0 -1
- data/app/views/notifications/_discussion.html.erb +0 -1
- data/app/views/notifications/_exam_authorization_request.html.erb +0 -1
- data/app/views/notifications/_message.html.erb +0 -1
@@ -4,10 +4,6 @@
|
|
4
4
|
<%= t :you_never_submitted_solutions %>
|
5
5
|
|
6
6
|
<%= t :dont_leave_us %>
|
7
|
-
<%= t :keep_learning %>
|
8
7
|
|
9
8
|
|
10
|
-
© Copyright 2015-<%=
|
11
|
-
|
12
|
-
<%= t :stop_emails? %>
|
13
|
-
<%= t :cancel_subscription %>
|
9
|
+
© Copyright 2015-<%= Time.current.year %> Mumuki.
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render partial: "user_mailer/notifications/#{@notification.subject}" %>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<% if @notification.custom_content_html.present? %>
|
2
|
+
<%= render inline: @notification.custom_content_html %>
|
3
|
+
<% else %>
|
4
|
+
<%= render partial: 'user_mailer/mail_template', locals: {
|
5
|
+
title: t("mailer.title.custom"),
|
6
|
+
subtitle: '',
|
7
|
+
text: @notification.custom_content_plain_text,
|
8
|
+
button: t("mailer.button.custom"),
|
9
|
+
url: @organization.url_for('/user/notifications')
|
10
|
+
} %>
|
11
|
+
<% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render partial: "user_mailer/notifications/exam_authorization_request_updated/#{@notification.target.status}" %>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<%= render partial: 'user_mailer/mail_template', locals: {
|
2
|
+
title: t("mailer.title.exam_registration"),
|
3
|
+
subtitle: t("mailer.subtitle.exam_registration"),
|
4
|
+
text: t("mailer.text.exam_registration", exam_registration_deadline: local_time(@notification.target.end_time, @organization.time_zone)),
|
5
|
+
button: t("mailer.button.exam_registration"),
|
6
|
+
url: exam_registration_url(@organization, @notification.target)
|
7
|
+
} %>
|
data/app/views/user_mailer/notifications/exam_authorization_request_updated/_approved.html.erb
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
<%= render partial: 'user_mailer/mail_template', locals: {
|
2
|
+
title: t(:congratulations),
|
3
|
+
subtitle: t('mailer.subtitle.exam_authorization_request_approved'),
|
4
|
+
text: t('mailer.text.exam_authorization_request_approved', exam_start_date: local_time(@notification.target.exam.start_time, @organization.time_zone)),
|
5
|
+
button: t('mailer.button.exam_authorization_request_approved'),
|
6
|
+
url: @organization.url
|
7
|
+
} %>
|
data/app/views/user_mailer/notifications/exam_authorization_request_updated/_rejected.html.erb
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
<%= render partial: 'user_mailer/mail_template', locals: {
|
2
|
+
title: t("mailer.title.exam_authorization_request_rejected"),
|
3
|
+
subtitle: t("mailer.subtitle.exam_authorization_request_rejected"),
|
4
|
+
text: t("mailer.text.exam_authorization_request_rejected"),
|
5
|
+
button: t("mailer.button.exam_authorization_request_rejected"),
|
6
|
+
url: @organization.url_for('/user/exam_authorizations')
|
7
|
+
} %>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<fieldset>
|
2
|
+
<div><%= form.label(t :first_name) %></div>
|
3
|
+
<div><%= form.text_field :first_name, required: true, class: 'form-control' %></div>
|
4
|
+
</fieldset>
|
5
|
+
<fieldset>
|
6
|
+
<div><%= form.label(t :last_name) %></div>
|
7
|
+
<div><%= form.text_field :last_name, required: true, class: 'form-control' %></div>
|
8
|
+
</fieldset>
|
9
|
+
<fieldset>
|
10
|
+
<div><%= form.label(t :gender) %></div>
|
11
|
+
<div><%= form.select :gender, options_for_select(User.genders.map { |gender, _| [t(gender), gender] }, @user.gender), {}, required: true, class: 'form-control form-select' %></div>
|
12
|
+
</fieldset>
|
13
|
+
<fieldset>
|
14
|
+
<div><%= form.label(t :birthdate) %></div>
|
15
|
+
<div><%= form.date_field :birthdate, min: Date.new(1900), max: 3.years.ago.end_of_year, required: true, class: 'form-control' %></div>
|
16
|
+
</fieldset>
|
17
|
+
<fieldset>
|
18
|
+
<div><%= form.label(t :email) %></div>
|
19
|
+
<div><%= form.text_field :email, readonly: true, class: 'form-control' %></div>
|
20
|
+
</fieldset>
|
21
|
+
|
22
|
+
<% if show_verified_full_name_notice?(@user, Organization.current) %>
|
23
|
+
<label><%= (t :verified_full_name) %></label>
|
24
|
+
<input class="form-control" readonly="readonly" value="<%= @user.verified_full_name %>">
|
25
|
+
<p class="fs-7">
|
26
|
+
<%= fa_icon("question-circle", text: (t :verified_full_name_notice,
|
27
|
+
organization: Organization.current.display_name,
|
28
|
+
contact: Organization.current.contact_email)) %>
|
29
|
+
</p>
|
30
|
+
<% end %>
|
@@ -1,20 +1 @@
|
|
1
|
-
|
2
|
-
<div><%= form.label(t :first_name) %></div>
|
3
|
-
<div><%= form.text_field :first_name, required: true, class: 'form-control' %></div>
|
4
|
-
</fieldset>
|
5
|
-
<fieldset>
|
6
|
-
<div><%= form.label(t :last_name) %></div>
|
7
|
-
<div><%= form.text_field :last_name, required: true, class: 'form-control' %></div>
|
8
|
-
</fieldset>
|
9
|
-
<fieldset>
|
10
|
-
<div><%= form.label(t :gender) %></div>
|
11
|
-
<div><%= form.select :gender, options_for_select(User.genders.map { |gender, _| [t(gender), gender] }, @user.gender), {}, required: true, class: 'form-control form-select' %></div>
|
12
|
-
</fieldset>
|
13
|
-
<fieldset>
|
14
|
-
<div><%= form.label(t :birthdate) %></div>
|
15
|
-
<div><%= form.date_field :birthdate, min: Date.new(1900), max: 3.years.ago.end_of_year, required: true, class: 'form-control' %></div>
|
16
|
-
</fieldset>
|
17
|
-
<fieldset>
|
18
|
-
<div><%= form.label(t :email) %></div>
|
19
|
-
<div><%= form.text_field :email, readonly: true, class: 'form-control' %></div>
|
20
|
-
</fieldset>
|
1
|
+
<%= render partial: 'users/basic_profile_fields', locals: {form: form} %>
|
@@ -14,17 +14,25 @@
|
|
14
14
|
<%= t :discussions_will_be_here %>
|
15
15
|
</div>
|
16
16
|
<% else %>
|
17
|
-
<
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
<%=
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
17
|
+
<div class="table-responsive mb-3">
|
18
|
+
<table class="table">
|
19
|
+
<% @watched_discussions.each do |discussion| %>
|
20
|
+
<% if discussion.read_by?(@user) != @last_read %>
|
21
|
+
<%= user_discussions_table_title(discussion, @user, @last_read) %>
|
22
|
+
<% @last_read = discussion.read_by?(@user) %>
|
23
|
+
|
24
|
+
<%= user_discussions_table_header %>
|
25
|
+
<% end %>
|
26
|
+
|
27
|
+
<%= user_discussions_table_item(discussion, @user) %>
|
28
|
+
<% end %>
|
29
|
+
</table>
|
30
|
+
</div>
|
31
|
+
|
32
|
+
<div class="discussion-pagination">
|
33
|
+
<%= paginate @watched_discussions, nav_class: 'pagination' %>
|
34
|
+
</div>
|
35
|
+
|
28
36
|
<% end %>
|
29
37
|
</div>
|
30
38
|
</div>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<%= content_for :breadcrumbs do %>
|
2
|
+
<%= breadcrumbs_for_my_account %>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<div class="row">
|
6
|
+
<%= form_for :notifications, html: {class: 'mu-form'} do |f| %>
|
7
|
+
<div class="mu-tab-body">
|
8
|
+
<div class="mu-user-header">
|
9
|
+
<h1><%= t(:manage_notifications) %></h1>
|
10
|
+
<div class="mu-profile-actions d-none d-md-block">
|
11
|
+
<a class="btn btn-secondary" href="<%= notifications_user_path %>">Cancelar</a>
|
12
|
+
<button type="submit" class="btn btn-complementary"><%= t :save %></button>
|
13
|
+
</div>
|
14
|
+
</div>
|
15
|
+
|
16
|
+
<p><%= t(:i_want_emails_of) %>:</p>
|
17
|
+
<% Notification.subjects.keys.each do |subject| %>
|
18
|
+
<div class="form-check">
|
19
|
+
<%= label_tag subject, t("notification_subject.#{subject}"), class: 'form-check-label' %>
|
20
|
+
<%= f.check_box subject, checked: !@user.ignored_notifications.include?(subject), class: 'form-check-input' %>
|
21
|
+
</div>
|
22
|
+
<% end %>
|
23
|
+
</div>
|
24
|
+
<% end %>
|
25
|
+
</div>
|
26
|
+
|
@@ -16,7 +16,7 @@
|
|
16
16
|
<% else %>
|
17
17
|
<table class="table table-striped">
|
18
18
|
<% @messages.each do |message| %>
|
19
|
-
<tr>
|
19
|
+
<tr class="<%= staleness_class(message) %>" >
|
20
20
|
<td><%= icon_for_read(message.read?) %></td>
|
21
21
|
<td><%= link_to message.exercise.name, exercise_path(message.exercise.id) %></td>
|
22
22
|
<td><%= mail_to message.sender %></td>
|
@@ -0,0 +1,54 @@
|
|
1
|
+
<%= content_for :breadcrumbs do %>
|
2
|
+
<%= breadcrumbs_for_my_account %>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<div class="row">
|
6
|
+
<%= render partial: 'layouts/user_menu' %>
|
7
|
+
|
8
|
+
<div class="col-md-9 mu-tab-body">
|
9
|
+
<div class="mu-user-header d-flex justify-content-between">
|
10
|
+
<span>
|
11
|
+
<h1><%= t(:notifications) %></h1>
|
12
|
+
</span>
|
13
|
+
<span>
|
14
|
+
<a href="notifications/manage" class="btn btn-complementary"><%= t(:manage_notifications) %></a>
|
15
|
+
</span>
|
16
|
+
</div>
|
17
|
+
<% if @notifications.empty? %>
|
18
|
+
<div class="mu-tab-body">
|
19
|
+
<%= t :notifications_will_be_here %>
|
20
|
+
</div>
|
21
|
+
<% else %>
|
22
|
+
|
23
|
+
|
24
|
+
<div class="table-responsive mb-3">
|
25
|
+
<table class="table">
|
26
|
+
<tr class="fw-bold">
|
27
|
+
<td></td>
|
28
|
+
<td><%= t(:content) %></td>
|
29
|
+
<td><%= t(:created_at) %></td>
|
30
|
+
</tr>
|
31
|
+
|
32
|
+
<% @notifications.each do |notification| %>
|
33
|
+
<tr class="<%= background_for_notification notification %>" >
|
34
|
+
<td class="col-md-1">
|
35
|
+
<%= link_to icon_for_read(notification.read?), "notifications/#{notification.id}/toggle_read", tooltip_options(:toggle_read).merge(method: :post, role: :button) %>
|
36
|
+
</td>
|
37
|
+
<td class="col-md-8 text-break">
|
38
|
+
<%= render partial: "notifications/#{notification.subject}", locals: { notification: notification } %>
|
39
|
+
</td>
|
40
|
+
<td class="col-md-3">
|
41
|
+
<%= t(:time_since, time: time_ago_in_words(notification.created_at)) %>
|
42
|
+
</td>
|
43
|
+
</tr>
|
44
|
+
<% end %>
|
45
|
+
</table>
|
46
|
+
</div>
|
47
|
+
|
48
|
+
<div class="notification-pagination">
|
49
|
+
<%= paginate @notifications, nav_class: 'pagination' %>
|
50
|
+
</div>
|
51
|
+
<% end %>
|
52
|
+
</div>
|
53
|
+
</div>
|
54
|
+
|
data/config/routes.rb
CHANGED
@@ -72,12 +72,15 @@ Rails.application.routes.draw do
|
|
72
72
|
get :certificates
|
73
73
|
get :exam_authorizations
|
74
74
|
|
75
|
+
get :notifications
|
76
|
+
post 'notifications/:id/toggle_read', action: :toggle_read
|
77
|
+
get 'notifications/manage', action: :show_manage_notifications
|
78
|
+
post 'notifications/manage', action: :manage_notifications
|
75
79
|
end
|
76
80
|
|
77
81
|
resources :faqs, only: [:index]
|
78
82
|
|
79
83
|
resources :messages, only: [:index, :create]
|
80
|
-
get '/messages/errors' => 'messages#errors'
|
81
84
|
|
82
85
|
get 'certificates/verify/:code', to: 'certificates#verify', as: :verify_certificate
|
83
86
|
get 'certificates/download/:code', to: 'certificates#download', as: :download_certificate
|
data/lib/mumuki/laboratory.rb
CHANGED
@@ -21,6 +21,7 @@ en:
|
|
21
21
|
ask_community: Ask community for help
|
22
22
|
ask_redirect: Do you want to go there?
|
23
23
|
ask_the_first_question: Be the first one to ask!
|
24
|
+
asked_time_since: asked %{time} ago
|
24
25
|
attempts_left:
|
25
26
|
zero: "You've run out of attempts"
|
26
27
|
one: "1 attempt remaining"
|
@@ -36,6 +37,8 @@ en:
|
|
36
37
|
cancel: Cancel
|
37
38
|
cancel_subscription: Cancel your subscription.
|
38
39
|
certificate: Certificate
|
40
|
+
certificate_available: Your certificate is available!
|
41
|
+
certificate_download: You can find it attached to this email or in your Mumuki profile
|
39
42
|
certificates: Certificates
|
40
43
|
certificates_will_be_here: Your certificates in the organization will appear here.
|
41
44
|
certificate_verified_legend: "<strong>%{full_name}</strong>'s account is verified. Mumuki certifies their successful completion of <strong>%{description}</strong>."
|
@@ -55,6 +58,7 @@ en:
|
|
55
58
|
confirm: Confirm
|
56
59
|
confirm_reset: You are about to restart your exercise. Do you want to proceed?
|
57
60
|
confirm_restart: You are about to delete your progress for this guide. Do you want to proceed?
|
61
|
+
congratulations: Congratulations!
|
58
62
|
console: Console
|
59
63
|
contact_administrator: 'If you think this is not supposed to happen, please contact %{link}'
|
60
64
|
content: Content
|
@@ -83,10 +87,13 @@ en:
|
|
83
87
|
destroy_message: delete the message
|
84
88
|
disabled_explanation: You are trying to visit a permamently disabled or deleted resource
|
85
89
|
disabled_organization_explanation: This path has already finished.
|
90
|
+
discussion_created_by: Created by
|
86
91
|
discussion_description_placeholder: You can add more information regarding your doubt.
|
87
|
-
new_discussion_message: New
|
92
|
+
new_discussion_message: New reply on %{title}
|
88
93
|
discussion_updated: Discussion updated
|
89
94
|
discussions: Discussions
|
95
|
+
discussions_read: Read
|
96
|
+
discussions_unread: Unread
|
90
97
|
discussions_will_be_here: Your posts in the forum will appear here.
|
91
98
|
dont_leave_us: Don't leave us! Learning is fun. You just have to keep at it.
|
92
99
|
download: Download your solution
|
@@ -133,7 +140,8 @@ en:
|
|
133
140
|
expected_state: Expected board
|
134
141
|
explain_redirect: You have registered in another organization
|
135
142
|
failed: Oops, something went wrong
|
136
|
-
faqs:
|
143
|
+
faqs: Frequently Asked Questions
|
144
|
+
faqs_abbreviated: FAQs
|
137
145
|
feedback: Feedback
|
138
146
|
female: Female
|
139
147
|
file_exceeds_max_size: "File size should not exceed %{size_kb}kb. Please select another file."
|
@@ -157,6 +165,7 @@ en:
|
|
157
165
|
hidden_done: 'Good!'
|
158
166
|
history: History
|
159
167
|
home: Home
|
168
|
+
i_want_emails_of: I want to receive emails of
|
160
169
|
important_info: Important information
|
161
170
|
initial_state: Initial board
|
162
171
|
insert_file_name: Insert a file name
|
@@ -168,6 +177,7 @@ en:
|
|
168
177
|
keep_learning: Keep learning!
|
169
178
|
kids_default_success: You did it great!
|
170
179
|
language: Language
|
180
|
+
last_message: Last message
|
171
181
|
last_name: Last Name
|
172
182
|
last_submission_date: Last submission
|
173
183
|
latest_exercises: Latest exercises
|
@@ -183,13 +193,33 @@ en:
|
|
183
193
|
loading: Loading
|
184
194
|
load_solution_into_console: Load your solution into the console
|
185
195
|
locked_content: 'This content will be unlocked when you finish previous chapters'
|
196
|
+
mailer:
|
197
|
+
title:
|
198
|
+
exam_authorization_request_updated: There are updates in your exam registration
|
199
|
+
exam_authorization_request_rejected: Exam registration rejected
|
200
|
+
exam_registration: Exam registrations open
|
201
|
+
custom: You have a new notification!
|
202
|
+
subtitle:
|
203
|
+
exam_authorization_request_approved: Your registration request to the exam has been approved.
|
204
|
+
exam_authorization_request_rejected: Your registration request to the exam has been rejected because the requirements weren't met.
|
205
|
+
exam_registration: ¡You can register for the exam!
|
206
|
+
text:
|
207
|
+
exam_authorization_request_approved: You can sit for the exam on %{exam_start_date} by going into the platform. ¡Good luck!
|
208
|
+
exam_authorization_request_rejected: ¡Don't be upset! You did a great job and we hope you'll keep learning programming.
|
209
|
+
exam_registration: You have until %{exam_registration_deadline} to sign up. In order to be approved, you must meet the requirements.
|
210
|
+
button:
|
211
|
+
exam_registration: Sign up for the exam
|
212
|
+
exam_authorization_request_approved: Go to the platform
|
213
|
+
exam_authorization_request_rejected: My exams
|
214
|
+
custom: My notifications
|
186
215
|
male: Male
|
216
|
+
manage_notification_subscriptions: Manage your notification subscriptions
|
217
|
+
manage_notifications: Manage notifications
|
187
218
|
manual_evaluation_pending: Thanks for submitting your solution! It will be revised by the course teachers soon
|
188
219
|
medal: Medal
|
189
220
|
message: Message
|
190
221
|
message_deleted: This message was deleted because it %{motive}, which violates the %{forum_terms}.
|
191
222
|
messages: Messages
|
192
|
-
messages_error: Previous messages are unavailable. Please try again later.
|
193
223
|
messages_pluralized:
|
194
224
|
one: Message
|
195
225
|
other: Messages
|
@@ -204,9 +234,9 @@ en:
|
|
204
234
|
you_are: You're taking care of it
|
205
235
|
you_will_confirmation: You'll take care of this discussion. If you change your mind, click the button again.
|
206
236
|
you_wont_confirmation: You won't take care of this discussion.
|
207
|
-
more_messages: More
|
208
237
|
my_account: My account
|
209
238
|
my_doubts: My doubts
|
239
|
+
my_notifications: My notifications
|
210
240
|
my_profile: My profile
|
211
241
|
my_submissions: My Submissions
|
212
242
|
name: Name
|
@@ -234,7 +264,12 @@ en:
|
|
234
264
|
no_useful_result: Didn't find what you were looking for?
|
235
265
|
not_found_explanation: 'You may have mistyped the address or the page may have moved.'
|
236
266
|
not_in_any_organizations: It seems you aren't in any organizations yet!
|
267
|
+
notification_subject:
|
268
|
+
custom: General announcements
|
269
|
+
exam_authorization_request_updated: Exam registrations updated
|
270
|
+
exam_registration: Exam registrations enabled
|
237
271
|
notifications: Notifications
|
272
|
+
notifications_will_be_here: Notifications will be here
|
238
273
|
notify_problem_with_exercise: Report a bug
|
239
274
|
office: Office
|
240
275
|
only_landscape_support: Please, rotate your tablet or cellphone to continue practicing
|
@@ -254,6 +289,7 @@ en:
|
|
254
289
|
permissions: Permissions
|
255
290
|
please_fill_profile_data: Please complete your profile data to continue!
|
256
291
|
please_validate: 'Please validate your data before continue:'
|
292
|
+
preferences_updated_successfully: Preferences updated successfully
|
257
293
|
preview: Preview
|
258
294
|
preview_error: The preview cannot be shown. Check your internet connection or try with a shorter message.
|
259
295
|
previous_exercise: Previous
|
@@ -261,8 +297,8 @@ en:
|
|
261
297
|
processing_your_solution: We are processing you solution
|
262
298
|
profile_of: Profile of %{username}
|
263
299
|
programming_since: Started programming
|
264
|
-
progress:
|
265
|
-
|
300
|
+
progress: Progress
|
301
|
+
publish_discussion: Publish discussion
|
266
302
|
refresh_or_wait: Please press F5 if results are not displayed after a few seconds
|
267
303
|
reply_count:
|
268
304
|
one: 1 reply
|
@@ -323,13 +359,14 @@ en:
|
|
323
359
|
terms_and_conditions_continue_disclaimer: By continuing you agree to %{terms_link}
|
324
360
|
terms_and_conditions_must_be_accepted: You must accept the terms and conditions
|
325
361
|
test_results: Test results
|
326
|
-
|
362
|
+
time_since: "%{time} ago"
|
327
363
|
time_left: You have
|
328
364
|
title: Title
|
329
365
|
to_closed: Close
|
330
366
|
to_opened: Reopen
|
331
367
|
to_pending_review: Mark as solved
|
332
368
|
to_solved: Mark as solved
|
369
|
+
toggle_read: "Toggle read/unread"
|
333
370
|
unauthorized_explanation: You have no permissions for this content. Maybe you logged in with another account.
|
334
371
|
total: Total
|
335
372
|
undo_upvote: Undo upvote
|
@@ -346,6 +383,8 @@ en:
|
|
346
383
|
user: User
|
347
384
|
user_data_updated: Your data was updated successfully
|
348
385
|
username: Username
|
386
|
+
verified_full_name: Verified name
|
387
|
+
verified_full_name_notice: Your verified name was provided by %{organization}. If there's a mistake, please send an email to %{contact}.
|
349
388
|
view_details: View details
|
350
389
|
want_permissions: The following user requires permissions for the organization
|
351
390
|
we_miss_you: We miss you!
|
@@ -355,6 +394,7 @@ en:
|
|
355
394
|
wrong_answer: The answer is wrong
|
356
395
|
years: years old
|
357
396
|
you_earned: You earned
|
397
|
+
you_have_a_new_notification: You have a new notification!
|
358
398
|
you_must_sign_in_before_submitting: You must sign in before submitting your solutions
|
359
399
|
you_never_submitted_solutions: It seems that you've never submitted solutions since you created your account.
|
360
400
|
your_new_organization: your new organization
|