mumuki-laboratory 7.12.0 → 8.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/mumuki_laboratory/application/characters.js +3 -1
  3. data/app/assets/javascripts/mumuki_laboratory/application/gamification.js +89 -11
  4. data/app/assets/javascripts/mumuki_laboratory/application/kids.js +171 -333
  5. data/app/assets/javascripts/mumuki_laboratory/application/kindergarten.js +144 -130
  6. data/app/assets/javascripts/mumuki_laboratory/application/mu-modal-carrousel.js +63 -0
  7. data/app/assets/javascripts/mumuki_laboratory/application/number-counter.js +18 -0
  8. data/app/assets/javascripts/mumuki_laboratory/application/primary.js +258 -0
  9. data/app/assets/javascripts/mumuki_laboratory/application/submission.js +1 -1
  10. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_kids_results.scss +117 -0
  11. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_kindergarten.scss +47 -113
  12. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_terms.scss +9 -12
  13. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_user_profile.scss +31 -3
  14. data/app/controllers/api/courses_controller.rb +1 -2
  15. data/app/controllers/api/organizations_controller.rb +2 -3
  16. data/app/controllers/api/users_controller.rb +2 -4
  17. data/app/controllers/application_controller.rb +41 -8
  18. data/app/controllers/assets_controller.rb +1 -0
  19. data/app/controllers/book_discussions_controller.rb +1 -1
  20. data/app/controllers/chapters_controller.rb +1 -0
  21. data/app/controllers/discussions_controller.rb +4 -0
  22. data/app/controllers/exercises_controller.rb +1 -0
  23. data/app/controllers/guides_controller.rb +2 -0
  24. data/app/controllers/invitations_controller.rb +2 -2
  25. data/app/controllers/lessons_controller.rb +1 -0
  26. data/app/controllers/login_controller.rb +1 -0
  27. data/app/controllers/users_controller.rb +9 -1
  28. data/app/helpers/assistance_box_helper.rb +7 -5
  29. data/app/helpers/contextualization_result_helper.rb +9 -1
  30. data/app/helpers/gamification_helper.rb +5 -0
  31. data/app/helpers/links_helper.rb +1 -1
  32. data/app/views/exercise_solutions/_assistant_rules_box.html.erb +13 -0
  33. data/app/views/exercise_solutions/_contextualization_results_container.html.erb +9 -0
  34. data/app/views/exercise_solutions/_kids_level_up.html.erb +11 -0
  35. data/app/views/exercise_solutions/_kids_results.html.erb +1 -1
  36. data/app/views/exercise_solutions/_results.html.erb +19 -19
  37. data/app/views/exercise_solutions/_results_title.html.erb +5 -0
  38. data/app/views/exercises/show.html.erb +4 -1
  39. data/app/views/layouts/_kindergarten.html.erb +4 -4
  40. data/app/views/layouts/_organizations_listing.html.erb +8 -12
  41. data/app/views/layouts/application.html.erb +8 -2
  42. data/app/views/layouts/modals/_guide_corollary.html.erb +1 -1
  43. data/app/views/layouts/modals/_kids_context.html.erb +1 -1
  44. data/app/views/layouts/modals/_kids_results.html.erb +16 -6
  45. data/app/views/layouts/modals/_kindergarten_context.html.erb +15 -15
  46. data/app/views/layouts/modals/_kindergarten_results.html.erb +20 -7
  47. data/app/views/layouts/modals/_kindergarten_results_aborted.html.erb +10 -7
  48. data/app/views/layouts/modals/_level_up.html.erb +27 -0
  49. data/app/views/users/_edit_user_form.html.erb +1 -1
  50. data/app/views/users/_user_form.html.erb +12 -2
  51. data/app/views/users/terms.html.erb +12 -0
  52. data/config/routes.rb +8 -8
  53. data/lib/mumuki/laboratory.rb +18 -5
  54. data/lib/mumuki/laboratory/controllers.rb +2 -0
  55. data/lib/mumuki/laboratory/controllers/action_redirector.rb +21 -0
  56. data/lib/mumuki/laboratory/controllers/immersive_navigation.rb +7 -0
  57. data/lib/mumuki/laboratory/controllers/results_rendering.rb +1 -0
  58. data/lib/mumuki/laboratory/events/events.rb +0 -33
  59. data/lib/mumuki/laboratory/locales/en.yml +11 -0
  60. data/lib/mumuki/laboratory/locales/es-CL.yml +5 -0
  61. data/lib/mumuki/laboratory/locales/es.yml +12 -1
  62. data/lib/mumuki/laboratory/locales/pt.yml +11 -0
  63. data/lib/mumuki/laboratory/version.rb +1 -1
  64. data/spec/capybara_helper.rb +5 -1
  65. data/spec/controllers/exercise_solutions_controller_spec.rb +1 -1
  66. data/spec/features/immersive_redirection_spec.rb +181 -0
  67. data/spec/features/profile_flow_spec.rb +35 -3
  68. data/spec/features/terms_flow_spec.rb +155 -0
  69. metadata +108 -98
  70. data/app/helpers/organization_list_helper.rb +0 -5
  71. data/spec/features/choose_organization_spec.rb +0 -74
@@ -1,4 +1,5 @@
1
1
  <%= content_for :navbar do %>
2
+ <%= hidden_field_tag("mu-current-exp", UserStats.exp_for(@current_user)) if in_gamified_context? %>
2
3
  <div class="<%= exercise_container_type %>">
3
4
  <nav class="mu-navbar">
4
5
  <div class="mu-navbar-breadcrumb hidden-xs">
@@ -18,16 +19,20 @@
18
19
  </div>
19
20
  <div class="mu-navbar-avatar">
20
21
  <% if current_logged_user? %>
22
+ <% if in_gamified_context? %>
23
+ <i class="fa fa-star fa-fw fa-2x navbar-icon mu-level-tooltip" data-toggle="tooltip" data-placement="bottom" title="<%= t(:level) %>"></i>
24
+ <span class="mu-level-number"></span>
25
+ <% end %>
21
26
  <div class="dropdown">
22
27
  <span>
23
28
  <a class="notifications-box <%= has_notifications? ? '' : 'notifications-box-empty' %>" href=<%= "#{user_notifications_path}" %>>
24
- <i class="fa fa-bell fa-fw fa-lg"></i>
29
+ <i class="fa fa-bell fa-fw fa-2x navbar-icon"></i>
25
30
  <span class="badge badge-notifications"><%= notifications_count %></span>
26
31
  </a>
27
32
  </span>
28
33
  </div>
29
34
  <div class="dropdown">
30
- <div id="profileDropdown" class="profile-dropdown" data-toggle="dropdown" aria-label="<%= t(:user) %>" role="menu" tabindex="0">
35
+ <div id="profileDropdown" class="profile-dropdown navbar-icon" data-toggle="dropdown" aria-label="<%= t(:user) %>" role="menu" tabindex="0">
31
36
  <%= profile_picture_for current_user %>
32
37
  <span class="caret"></span>
33
38
  </div>
@@ -76,3 +81,4 @@
76
81
  <% end %>
77
82
 
78
83
  <%= render partial: 'layouts/main' %>
84
+
@@ -1,4 +1,4 @@
1
- <div class="modal fade guide-corollary" id="guide-done" tabindex="-1" role="dialog" aria-hidden="true">
1
+ <div class="modal fade guide-corollary mu-kids-modal-border" id="guide-done" tabindex="-1" role="dialog" aria-hidden="true">
2
2
  <div class="modal-dialog">
3
3
  <div class="modal-content">
4
4
  <div class="modal-header">
@@ -1,4 +1,4 @@
1
- <div class="modal fade mu-kids-context" id="mu-kids-context" tabindex="-1" role="dialog" aria-hidden="true">
1
+ <div class="modal fade mu-kids-context mu-kids-modal-border" id="mu-kids-context" tabindex="-1" role="dialog" aria-hidden="true">
2
2
  <div class="modal-dialog">
3
3
  <div class="modal-content">
4
4
  <div class="modal-header">
@@ -1,17 +1,27 @@
1
- <div class="modal fade mu-kids-results" id="kids-results" tabindex="-1" role="dialog" aria-hidden="true">
1
+ <div class="modal fade mu-kids-results mu-kids-modal-border" id="kids-results" tabindex="-1" role="dialog" aria-hidden="true">
2
2
  <div class="modal-dialog">
3
- <div class="modal-content">
4
- <div class="modal-header">
3
+ <div class="modal-content success">
4
+ <button type="button" class="mu-kids-modal-button mu-previous hidden" onclick="mumuki.kids.resultsCarrousel.prevSlide()" aria-label="Previous">
5
+ <span aria-hidden="true">
6
+ <i class="fa fa-fw fa-arrow-left fa-3x"></i>
7
+ </span>
8
+ </button>
9
+ <button type="button" class="mu-kids-modal-button mu-next" onclick="mumuki.kids.resultsCarrousel.nextSlide()" aria-label="Next">
10
+ <span aria-hidden="true">
11
+ <i class="fa fa-fw fa-arrow-right fa-3x"></i>
12
+ </span>
13
+ </button>
14
+ <div class="modal-header text-center">
5
15
  </div>
6
16
  <div class="modal-body">
7
17
  <div class="container-fluid">
8
18
  <div class="row">
9
19
  <div class="col-md-12">
10
- <div class="row">
11
- <div class="col-md-12 submission-results">
20
+ <div class="mu-kids-results-carrousel">
21
+ <div class="active submission-results">
12
22
  <% if current_user? && @assignment.solved? %>
13
23
  <%= render partial: 'exercise_solutions/kids_results',
14
- locals: {assignment: @assignment, guide_finished_by_solution: false} %>
24
+ locals: {assignment: @assignment, guide_finished_by_solution: false} %>
15
25
  <% end %>
16
26
  </div>
17
27
  </div>
@@ -1,22 +1,22 @@
1
- <div class="modal fade mu-kindergarten-context" id="mu-kids-context" tabindex="-1" role="dialog" aria-hidden="true">
1
+ <div class="modal fade mu-kids-modal-border" id="mu-kids-context" tabindex="-1" role="dialog" aria-hidden="true">
2
2
  <div class="modal-dialog">
3
- <div class="modal-content">
4
- <button type="button" class="mu-kindergarten-modal-button mu-close" data-waiting="<%= t :loading %>" data-dismiss="modal" aria-label="Close">
5
- <span aria-hidden="true">
6
- <i class="fa fa-fw fa-times fa-3x"></i>
7
- </span>
3
+ <div class="modal-content kindergarten">
4
+ <button type="button" class="mu-kids-modal-button mu-close" data-waiting="" data-dismiss="modal" aria-label="Close">
5
+ <span aria-hidden="true">
6
+ <i class="fa fa-fw fa-times fa-3x"></i>
7
+ </span>
8
8
  </button>
9
- <button type="button" class="mu-kindergarten-modal-button mu-previous hidden" onclick="mumuki.kindergarten.context.prevSlide()" aria-label="Previous">
10
- <span aria-hidden="true">
11
- <i class="fa fa-fw fa-arrow-left fa-3x"></i>
12
- </span>
9
+ <button type="button" class="mu-kids-modal-button mu-previous hidden" onclick="mumuki.kids.context.prevSlide()" aria-label="Previous">
10
+ <span aria-hidden="true">
11
+ <i class="fa fa-fw fa-arrow-left fa-3x"></i>
12
+ </span>
13
13
  </button>
14
- <button type="button" class="mu-kindergarten-modal-button mu-next" onclick="mumuki.kindergarten.context.nextSlide()" aria-label="Next">
15
- <span aria-hidden="true">
16
- <i class="fa fa-fw fa-arrow-right fa-3x"></i>
17
- </span>
14
+ <button type="button" class="mu-kids-modal-button mu-next" onclick="mumuki.kids.context.nextSlide()" aria-label="Next">
15
+ <span aria-hidden="true">
16
+ <i class="fa fa-fw fa-arrow-right fa-3x"></i>
17
+ </span>
18
18
  </button>
19
- <div class="modal-body">
19
+ <div class="modal-body mu-kids-context-body">
20
20
  <div class="container-fluid">
21
21
  <div class="row">
22
22
  <div class="col-md-12">
@@ -1,17 +1,30 @@
1
- <div class="modal fade mu-kids-results mu-kindergarten-context" id="kids-results" tabindex="-1" role="dialog" aria-hidden="true">
1
+ <div class="modal fade mu-kids-results mu-kids-modal-border" id="kids-results" tabindex="-1" role="dialog" aria-hidden="true">
2
2
  <div class="modal-dialog">
3
- <div class="modal-content">
4
- <button type="button" class="mu-kindergarten-modal-button mu-close" data-dismiss="modal" aria-label="Close">
5
- <span aria-hidden="true">
6
- <i class="fa fa-fw fa-times fa-3x"></i>
7
- </span>
3
+ <div class="modal-content kindergarten">
4
+ <button type="button" class="mu-kids-modal-button mu-close" data-waiting="" data-dismiss="modal" aria-label="Close">
5
+ <span aria-hidden="true">
6
+ <i class="fa fa-fw fa-times fa-3x"></i>
7
+ </span>
8
+ </button>
9
+ <button type="button" class="mu-kids-modal-button mu-previous hidden" onclick="mumuki.kids.resultsCarrousel.prevSlide()" aria-label="Previous">
10
+ <span aria-hidden="true">
11
+ <i class="fa fa-fw fa-arrow-left fa-3x"></i>
12
+ </span>
13
+ </button>
14
+ <button type="button" class="mu-kids-modal-button mu-next" onclick="mumuki.kids.resultsCarrousel.nextSlide()" aria-label="Next">
15
+ <span aria-hidden="true">
16
+ <i class="fa fa-fw fa-arrow-right fa-3x"></i>
17
+ </span>
8
18
  </button>
9
19
  <div class="modal-header">
10
20
  </div>
11
21
  <div class="modal-body">
12
22
  <div class="container-fluid">
13
23
  <div class="row">
14
- <div class="col-md-12 submission-results">
24
+ <div class="col-md-12">
25
+ <div class="mu-kids-results-carrousel">
26
+ <div class="active submission-results kindergarten"></div>
27
+ </div>
15
28
  </div>
16
29
  </div>
17
30
  </div>
@@ -1,19 +1,22 @@
1
- <div class="modal fade mu-kids-results-aborted mu-kindergarten-context" id="kids-results-aborted" tabindex="-1" role="dialog" aria-hidden="true">
1
+ <div class="modal fade mu-kids-results-aborted mu-kids-modal-border" id="kids-results-aborted" tabindex="-1" role="dialog" aria-hidden="true">
2
2
  <div class="modal-dialog">
3
- <div class="modal-content danger">
4
- <button type="button" class="mu-kindergarten-modal-button mu-close" data-dismiss="modal" aria-label="Close">
3
+ <div class="modal-content broken kindergarten">
4
+ <button type="button" class="mu-kids-modal-button mu-close" data-dismiss="modal" aria-label="Close" data-waiting="">
5
5
  <span aria-hidden="true">
6
6
  <i class="fa fa-fw fa-times fa-3x"></i>
7
7
  </span>
8
8
  </button>
9
- <h4 class="modal-header">
10
- </h4>
9
+ <div class="modal-header">
10
+ <h4 class="modal-title text-broken">
11
+ <strong><%= t :kindergarten_aborted %></strong>
12
+ </h4>
13
+ </div>
11
14
  <div class="modal-body">
12
15
  <div class="container-fluid">
13
16
  <div class="row">
14
17
  <div class="col-md-12">
15
- <div class="mu-kids-character">
16
- <img/>
18
+ <div class="mu-kids-character kindergarten">
19
+ <img class="mu-kids-character-result-aborted"/>
17
20
  </div>
18
21
  </div>
19
22
  </div>
@@ -0,0 +1,27 @@
1
+ <div class="modal fade mu-level-up" id="mu-level-up" tabindex="-1" role="dialog" aria-hidden="true">
2
+ <div class="modal-dialog">
3
+ <div class="modal-content">
4
+ <div class="modal-header">
5
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close">
6
+ <span aria-hidden="true">&times;</span></button>
7
+ <div class="guide-corollary-title">
8
+ <h3 class="text-left" id="gridSystemModalLabel"><%= t :level_up %></h3>
9
+ </div>
10
+ </div>
11
+ <div class="modal-body">
12
+ <div class="container-fluid">
13
+ <div class="row">
14
+ <div class="col-md-12">
15
+ <div class="text-center mu-level">
16
+ <i class="fa fa-star fa-fw fa-4x"></i>
17
+ <span class="mu-level-number"></span>
18
+ <p></p>
19
+ <p id="mu-solve-more-exercises"> <%= (t :solve_more_exercises_to_level_up).html_safe %></p>
20
+ </div>
21
+ </div>
22
+ </div>
23
+ </div>
24
+ </div>
25
+ </div>
26
+ </div>
27
+ </div>
@@ -1,4 +1,4 @@
1
- <%= form_for :user, url: update_user_path, :html => { id: 'mu-user-form' }, method: :put do |f| %>
1
+ <%= form_for :user, url: user_path, :html => { id: 'mu-user-form' }, method: :put do |f| %>
2
2
  <div class="mu-user-header">
3
3
  <h1><%= t(:edit_profile) %></h1>
4
4
  <div class="mu-profile-actions hidden-xs">
@@ -5,10 +5,20 @@
5
5
  </div>
6
6
  </div>
7
7
  <div class="row mu-tab-body">
8
- <div class="col-md-4 text-center">
8
+ <div class="col-md-4 mu-profile-info-left">
9
9
  <%= profile_picture_for(@user, id: 'mu-user-avatar', class: 'mu-user-avatar') %>
10
+ <% if in_gamified_context? %>
11
+ <svg class="mu-level-progress" width="300" height="300" viewBox="0 0 100 100">
12
+ <path id="mu-level-progress" stroke-linecap="round" stroke="#24b8aa" stroke-width="4" stroke-dasharray="0, 999" fill="none" d="M50 10 a 40 40 0 0 1 0 80 a 40 40 0 0 1 0 -80"></path>
13
+ </svg>
14
+ <div class="mu-level">
15
+ <i class="fa fa-star fa-fw fa-4x"></i>
16
+ <span class="mu-level-number"></span>
17
+ <p><%= t :level %></p>
18
+ </div>
19
+ <% end %>
10
20
  </div>
11
- <div class="col-md-8 mu-profile-info">
21
+ <div class="col-md-8 mu-profile-info-right">
12
22
  <% if @user.age.present? %>
13
23
  <div>
14
24
  <span> <strong><%= t :age %>:</strong> <%= "#{@user.age} #{t :years}" %> </span>
@@ -16,3 +16,15 @@
16
16
  <% end %>
17
17
  </div>
18
18
 
19
+ <% if @user&.has_role_terms_to_accept? %>
20
+ <div class="terms-acceptance">
21
+ <%= form_for :user, url: terms_user_path, method: :post do |f| %>
22
+ <span class="terms-acceptance-checkbox">
23
+ <%= f.check_box :terms_of_service, required: true, onInvalid: "this.setCustomValidity('#{t(:terms_and_conditions_must_be_accepted)}')", onChange: "this.setCustomValidity(validity.valueMissing ? '#{t(:terms_and_conditions_must_be_accepted)}' : '')" %>
24
+ <%= t(:accept_terms) %>
25
+ </span>
26
+ <%= f.submit t(:accept), class: 'btn btn-success terms-acceptance-btn' %>
27
+ <% end %>
28
+ </div>
29
+ <% end %>
30
+
@@ -52,11 +52,15 @@ Rails.application.routes.draw do
52
52
  resources :complements, only: :show
53
53
  resources :exams, only: :show
54
54
 
55
- # All users
56
- resource :user, only: [:show, :edit]
57
- get '/user/terms' => 'users#terms'
58
-
59
55
  # Current user
56
+ resource :user, only: [:show, :edit, :update] do
57
+ get :terms
58
+ post :terms, to: 'users#accept_profile_terms'
59
+
60
+ # Notification subscriptions
61
+ get :unsubscribe
62
+ end
63
+
60
64
  resources :messages, only: [:index, :create]
61
65
  get '/messages/errors' => 'messages#errors'
62
66
 
@@ -69,10 +73,6 @@ Rails.application.routes.draw do
69
73
  get '/join/:code' => 'invitations#show', as: :invitation
70
74
  post '/join/:code' => 'invitations#join'
71
75
 
72
- # Notification subscriptions
73
- get '/user/unsubscribe' => 'users#unsubscribe'
74
- put '/user' => 'users#update', as: :update_user
75
-
76
76
  # Route for reading messages
77
77
  post '/messages/read_messages/:exercise_id' => 'messages#read_messages', as: :read_messages
78
78
 
@@ -31,12 +31,25 @@ end
31
31
 
32
32
  module Mumukit::Platform::OrganizationMapping::Path
33
33
  class << self
34
- patch :organization_name do |request, domain, hyper|
35
- name = hyper.(request, domain)
36
- if %w(auth login logout).include? name
37
- 'central'
34
+ alias_method :__organization_name__, :organization_name
35
+ def in_actual_organization?(request, domain = nil)
36
+ actual_organization_name(request, domain).present?
37
+ end
38
+
39
+ def actual_organization_name(request, domain)
40
+ name = __organization_name__(request, domain)
41
+ name unless %w(auth login logout).include? name
42
+ end
43
+
44
+ def organization_name(request, domain)
45
+ actual_organization_name(request, domain) || 'base'
46
+ end
47
+
48
+ patch :inorganic_path_for do |request, hyper|
49
+ if in_actual_organization?(request)
50
+ hyper.call(request)
38
51
  else
39
- name
52
+ path_for(request)
40
53
  end
41
54
  end
42
55
  end
@@ -2,12 +2,14 @@ module Mumuki::Laboratory::Controllers
2
2
  end
3
3
 
4
4
  require_relative './controllers/authorization'
5
+ require_relative './controllers/action_redirector'
5
6
  require_relative './controllers/disabling'
6
7
  require_relative './controllers/current_organization'
7
8
  require_relative './controllers/dynamic_errors'
8
9
  require_relative './controllers/notifications'
9
10
  require_relative './controllers/embedded_mode'
10
11
  require_relative './controllers/incognito_mode'
12
+ require_relative './controllers/immersive_navigation'
11
13
  require_relative './controllers/nested_in_exercise'
12
14
  require_relative './controllers/results_rendering'
13
15
  require_relative './controllers/exercise_seed'
@@ -0,0 +1,21 @@
1
+ module Mumuki::Laboratory::Controllers::ActionRedirector
2
+ def save_location_before!(action)
3
+ session[redirection_variable_for(action)] = origin
4
+ end
5
+
6
+ def redirect_after!(action, fallback_location: root_path)
7
+ redirection_variable = redirection_variable_for(action)
8
+ destination = session.delete(redirection_variable).presence
9
+ redirect_to(destination || fallback_location)
10
+ end
11
+
12
+ private
13
+
14
+ def redirection_variable_for(action)
15
+ "redirect_after_#{action}"
16
+ end
17
+
18
+ def origin
19
+ Addressable::URI.heuristic_parse(request.path).to_s
20
+ end
21
+ end
@@ -0,0 +1,7 @@
1
+ module Mumuki::Laboratory::Controllers::ImmersiveNavigation
2
+ extend ActiveSupport::Concern
3
+
4
+ def immersive_subject
5
+ subject.navigable_content_in(current_immersive_context)
6
+ end
7
+ end
@@ -29,6 +29,7 @@ module Mumuki::Laboratory::Controllers::ResultsRendering
29
29
  title_html: render_results_title(assignment),
30
30
  expectations: assignment.affable_expectation_results,
31
31
  tips: assignment.affable_tips,
32
+ level_up_html: render_results('exercise_solutions/kids_level_up', assignment),
32
33
  test_results: assignment.sanitized_affable_test_results) # these results could include escaped characters so they should be rendered as HTML to display properly
33
34
  end
34
35
 
@@ -1,39 +1,6 @@
1
1
  Mumukit::Nuntius::EventConsumer.handle do
2
-
3
- # Emitted by user registration and modification in classroom
4
- event 'UserChanged' do |payload|
5
- User.import_from_resource_h! payload.deep_symbolize_keys[:user]
6
- end
7
-
8
- # Emitted by course creation of courses in classroom
9
- event 'CourseChanged' do |payload|
10
- Course.import_from_resource_h! payload.deep_symbolize_keys[:course]
11
- end
12
-
13
- # Emitted by invitation creation in classroom
14
- event 'InvitationCreated' do |payload|
15
- Invitation.import_from_resource_h! payload.deep_symbolize_keys[:invitation]
16
- end
17
-
18
- # Emitted by exam creation and modification in classroom
19
- event 'UpsertExam' do |body|
20
- Exam.import_from_resource_h! body
21
- end
22
-
23
- event 'UpsertExamStudents' do |body|
24
- Exam.upsert_students! body
25
- end
26
-
27
2
  # Emitted by assigment manual evaluation in classroom
28
3
  event 'AssignmentManuallyEvaluated' do |payload|
29
4
  Assignment.evaluate_manually! payload.deep_symbolize_keys[:assignment]
30
5
  end
31
-
32
- [Book, Topic, Guide].each do |it|
33
- event "#{it.name}Changed" do |data|
34
- Mumukit::Sync::Syncer.new(
35
- Mumukit::Sync::Store::Bibliotheca.new(
36
- Mumukit::Platform.bibliotheca_bridge)).locate_and_import! it, data[:slug]
37
- end
38
- end
39
6
  end
@@ -95,6 +95,7 @@ en:
95
95
  exercise_number: Exercise %{number}
96
96
  exercise_success_rate: Exercises success rate
97
97
  exit: Exit
98
+ exp_points: experience points.
98
99
  expectations: Expectations
99
100
  expected_state: Expected board
100
101
  explain_redirect: You have registered in another organization
@@ -129,6 +130,12 @@ en:
129
130
  joining_html: '¡Welcome to course <strong>%{course}</strong>!'
130
131
  keep_learning: Keep learning!
131
132
  kids_default_success: You did it great!
133
+ kindergarten_passed: "Your program worked great!"
134
+ kindergarten_passed_with_warnings: "Your program worked great!"
135
+ kindergarten_pending: "There's an error in your program. Try again!"
136
+ kindergarten_failed: "There's an error in your program. Try again!"
137
+ kindergarten_errored: "There's an error in your program. Try again!"
138
+ kindergarten_aborted: "Ups! Something went wrong"
132
139
  language: Language
133
140
  last_name: Last Name
134
141
  last_seen: "Seen by %{name}"
@@ -139,6 +146,8 @@ en:
139
146
  lessons: Lessons
140
147
  lesson_number: Lesson %{number}
141
148
  let_us_know: please let us know!
149
+ level: Level
150
+ level_up: Level up!
142
151
  loading: Loading
143
152
  load_solution_into_console: Load your solution into the console
144
153
  locked_content: 'This content will be unlocked when you finish previous chapters'
@@ -227,6 +236,7 @@ en:
227
236
  solved: Solved
228
237
  solved_count: '%{count} solved'
229
238
  solve_doubts: Solve other's doubts
239
+ solve_more_exercises_to_level_up: Solve <span>number</span> more exercises to advance to the next level.
230
240
  solve_your_doubts: Solve your doubts
231
241
  solve_your_doubts_teaser: Do you have any doubts?
232
242
  something_went_wrong: Something went wrong!
@@ -283,6 +293,7 @@ en:
283
293
  working: "Working"
284
294
  wrong_answer: The answer is wrong
285
295
  years: years old
296
+ you_earned: You earned
286
297
  you_must_sign_in_before_submitting: You must sign in before submitting your solutions
287
298
  you_never_submitted_solutions: It seems that you've never submitted solutions since you created your account.
288
299
  your_new_organization: your new organization