mumuki-laboratory 9.8.1 → 9.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/mumuki_laboratory/application/messages.js +1 -30
  3. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_discussion.scss +32 -34
  4. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_dropdown.scss +11 -0
  5. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_editor.scss +3 -0
  6. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_faqs.scss +1 -1
  7. data/app/controllers/application_controller.rb +1 -1
  8. data/app/controllers/messages_controller.rb +2 -5
  9. data/app/controllers/users_controller.rb +38 -1
  10. data/app/helpers/application_helper.rb +6 -2
  11. data/app/helpers/discussions_helper.rb +11 -4
  12. data/app/helpers/exam_registration_helper.rb +0 -4
  13. data/app/helpers/icons_helper.rb +1 -1
  14. data/app/helpers/menu_bar_helper.rb +7 -3
  15. data/app/helpers/messages_helper.rb +4 -8
  16. data/app/helpers/notifications_helper.rb +13 -0
  17. data/app/helpers/profile_helper.rb +4 -0
  18. data/app/helpers/user_discussions_helper.rb +38 -0
  19. data/app/helpers/user_menu_helper.rb +4 -0
  20. data/app/mailers/user_mailer.rb +9 -1
  21. data/app/views/discussions/new.html.erb +1 -1
  22. data/app/views/layouts/_copyright.html.erb +1 -1
  23. data/app/views/layouts/_discussions.html.erb +1 -37
  24. data/app/views/layouts/_discussions_list.html.erb +38 -0
  25. data/app/views/layouts/_messages.html.erb +1 -7
  26. data/app/views/layouts/_user_menu.html.erb +1 -0
  27. data/app/views/layouts/application.html.erb +1 -1
  28. data/app/views/layouts/exercise_inputs/forms/_interactive_form.html.erb +1 -1
  29. data/app/views/layouts/exercise_inputs/forms/_problem_form.html.erb +1 -1
  30. data/app/views/layouts/exercise_inputs/read_only_editors/_code.html.erb +1 -1
  31. data/app/views/layouts/exercise_inputs/read_only_editors/_multiple_files.html.erb +4 -4
  32. data/app/views/layouts/mailer.html.erb +7 -1
  33. data/app/views/notifications/_custom.html.erb +1 -0
  34. data/app/views/notifications/_dropdown.html.erb +2 -2
  35. data/app/views/notifications/_exam_authorization_request_updated.html.erb +2 -0
  36. data/app/views/notifications/_exam_registration.html.erb +2 -1
  37. data/app/views/notifications/previews/_custom.html.erb +1 -0
  38. data/app/views/notifications/previews/_discussion.html.erb +2 -0
  39. data/app/views/notifications/previews/_exam_authorization_request_updated.html.erb +2 -0
  40. data/app/views/notifications/previews/_exam_registration.html.erb +2 -0
  41. data/app/views/notifications/previews/_message.html.erb +2 -0
  42. data/app/views/user_mailer/1st_reminder.html.erb +7 -349
  43. data/app/views/user_mailer/1st_reminder.text.erb +1 -5
  44. data/app/views/user_mailer/2nd_reminder.html.erb +7 -349
  45. data/app/views/user_mailer/2nd_reminder.text.erb +1 -5
  46. data/app/views/user_mailer/3rd_reminder.html.erb +7 -349
  47. data/app/views/user_mailer/3rd_reminder.text.erb +1 -5
  48. data/app/views/user_mailer/_mail_template.erb +336 -0
  49. data/app/views/user_mailer/certificate.html.erb +7 -335
  50. data/app/views/user_mailer/certificate.text.erb +1 -4
  51. data/app/views/user_mailer/no_submissions_reminder.html.erb +7 -349
  52. data/app/views/user_mailer/no_submissions_reminder.text.erb +1 -5
  53. data/app/views/user_mailer/notification.html.erb +1 -0
  54. data/app/views/user_mailer/notification.text.erb +6 -0
  55. data/app/views/user_mailer/notifications/_custom.html.erb +11 -0
  56. data/app/views/user_mailer/notifications/_exam_authorization_request_updated.html.erb +1 -0
  57. data/app/views/user_mailer/notifications/_exam_registration.html.erb +7 -0
  58. data/app/views/user_mailer/notifications/exam_authorization_request_updated/_approved.html.erb +7 -0
  59. data/app/views/user_mailer/notifications/exam_authorization_request_updated/_rejected.html.erb +7 -0
  60. data/app/views/users/_basic_profile_fields.html.erb +30 -0
  61. data/app/views/users/_profile_fields.html.erb +1 -20
  62. data/app/views/users/discussions.html.erb +19 -11
  63. data/app/views/users/manage_notifications.html.erb +26 -0
  64. data/app/views/users/messages.html.erb +1 -1
  65. data/app/views/users/notifications.html.erb +54 -0
  66. data/config/routes.rb +4 -1
  67. data/lib/mumuki/laboratory/controllers/notifications.rb +2 -2
  68. data/lib/mumuki/laboratory/locales/en.yml +46 -7
  69. data/lib/mumuki/laboratory/locales/es-CL.yml +47 -7
  70. data/lib/mumuki/laboratory/locales/es.yml +48 -9
  71. data/lib/mumuki/laboratory/locales/pt.yml +45 -6
  72. data/lib/mumuki/laboratory/version.rb +1 -1
  73. data/spec/controllers/organizations_api_controller_spec.rb +6 -1
  74. data/spec/controllers/students_api_controller_spec.rb +1 -1
  75. data/spec/controllers/users_controller_spec.rb +48 -0
  76. data/spec/dummy/db/schema.rb +9 -1
  77. data/spec/features/not_found_public_flow_spec.rb +1 -1
  78. data/spec/features/notifications_flow_spec.rb +2 -1
  79. data/spec/features/profile_flow_spec.rb +1 -1
  80. data/spec/mailers/previews/user_mailer_preview.rb +45 -1
  81. metadata +136 -119
  82. data/app/views/messages/errors.html.erb +0 -1
  83. data/app/views/notifications/_discussion.html.erb +0 -1
  84. data/app/views/notifications/_exam_authorization_request.html.erb +0 -1
  85. data/app/views/notifications/_message.html.erb +0 -1
@@ -14,15 +14,16 @@ es:
14
14
  and: y
15
15
  appendix: Apéndice
16
16
  appendix_teaser: ¿Querés saber más? <a href="%{link}">Consultá el apéndice de este capítulo</a>
17
- approved_message: Validado por mentor
18
- are_you_sure: '¿Estás seguro que querés %{action}?'
19
- ask_a_question: ¡Hacé una pregunta!
17
+ approved_message: Validado por mentorías
20
18
  approved_messages:
21
19
  one: validado
22
20
  other: validados
21
+ are_you_sure: '¿Confirmás que querés %{action}?'
22
+ ask_a_question: ¡Hacé una pregunta!
23
23
  ask_community: Preguntá a la comunidad
24
24
  ask_redirect: ¿Querés que te llevemos ahí?
25
25
  ask_the_first_question: ¡Hacé la primera pregunta!
26
+ asked_time_since: "consultó hace %{time}"
26
27
  attempts_left:
27
28
  zero: 'Te quedaste sin intentos'
28
29
  one: '1 intento restante'
@@ -38,9 +39,11 @@ es:
38
39
  cancel: Cancelar
39
40
  cancel_subscription: Cancelá tu subscripción.
40
41
  certificate: Certificado
42
+ certificate_available: Ya está disponible tu certificado
43
+ certificate_download: Descargalo desde el adjunto de este mail o visualizalo en tu perfil de Mumuki
44
+ certificate_verified_legend: "La cuenta de <strong>%{full_name}</strong> está verificada. Mumuki certifica que completó el curso de <strong>%{description}.</strong>"
41
45
  certificates: Certificados
42
46
  certificates_will_be_here: Tus certificados en esta organización aparecerán acá
43
- certificate_verified_legend: "La cuenta de <strong>%{full_name}</strong> está verificada. Mumuki certifica que completó el curso de <strong>%{description}.</strong>"
44
47
  chapter: Capítulo
45
48
  chapters: Capítulos
46
49
  chapter_finished_html: ¡Terminaste %{chapter}! ¡Felicitaciones!
@@ -57,6 +60,7 @@ es:
57
60
  confirm: Confirmar
58
61
  confirm_reset: Estás por reiniciar tu ejercicio. ¿Querés continuar?
59
62
  confirm_restart: Estás por borrar tu progreso en esta guía. ¿Querés continuar?
63
+ congratulations: ¡Felicitaciones!
60
64
  console: Consola
61
65
  contact_administrator: 'Si pensás que es un error, comunicate con %{link}'
62
66
  content: Contenido
@@ -91,10 +95,13 @@ es:
91
95
  details: Detalles
92
96
  disabled_explanation: Estás intentando acceder a un recurso que fue deshabilitado o eliminado de forma permamente
93
97
  disabled_organization_explanation: Este recorrido ha finalizado
98
+ discussion_created_by: Creada por
94
99
  discussion_description_placeholder: Podés agregar información para detallar más tu consulta
95
100
  discussion_updated: Consulta actualizada
96
- new_discussion_message: Mensaje nuevo en %{title}
101
+ new_discussion_message: Respuesta nueva en %{title}
97
102
  discussions: Consultas
103
+ discussions_read: Leídas
104
+ discussions_unread: No leídas
98
105
  discussions_will_be_here: Las preguntas que realices en el espacio de consultas aparecerán aquí.
99
106
  dont_leave_us: ¡No nos abandones! Aprender a programar es divertido. Sólo tenés que seguir practicando.
100
107
  download: "Descargá lo que hiciste"
@@ -140,7 +147,8 @@ es:
140
147
  expected_state: Tablero esperado
141
148
  explain_redirect: Notamos que te registraste en otra organización.
142
149
  failed: Tu solución no pasó las pruebas
143
- faqs: Preguntas Frecuentes
150
+ faqs: Información importante
151
+ faqs_abbreviated: Información
144
152
  feedback: Problemas que encontramos
145
153
  female: Mujer
146
154
  file_exceeds_max_size: "El tamaño de archivo no debe exceder %{size_kb}kb. Por favor seleccioná otro archivo."
@@ -167,6 +175,7 @@ es:
167
175
  home: Inicio
168
176
  hour: hora
169
177
  hours: horas
178
+ i_want_emails_of: Quiero recibir emails de
170
179
  important_info: Información importante
171
180
  initial_state: Tablero inicial
172
181
  insert_file_name: Ingresa un nombre de archivo
@@ -179,6 +188,7 @@ es:
179
188
  kids_default_success: ¡Lo hiciste muy bien!
180
189
  language: Lenguaje
181
190
  languages: Lenguajes
191
+ last_message: Último mensaje
182
192
  last_name: Apellido
183
193
  last_submission_date: Última solución
184
194
  latest_exercises: Últimos ejercicios
@@ -194,13 +204,33 @@ es:
194
204
  loading: Cargando
195
205
  load_solution_into_console: Cargar la solución en la consola
196
206
  locked_content: 'Este contenido se desbloqueará cuando termines los capítulos anteriores'
207
+ mailer:
208
+ title:
209
+ exam_authorization_request_updated: Tenés cambios en tu inscripción al examen
210
+ exam_authorization_request_rejected: Inscripción rechazada
211
+ exam_registration: Apertura de inscripciones
212
+ custom: ¡Tenés una nueva notificación!
213
+ subtitle:
214
+ exam_authorization_request_approved: Tu solicitud de inscripción al examen fue aprobada.
215
+ exam_authorization_request_rejected: Tu solicitud de inscripción al examen fue rechazada ya que no se cumplieron los requisitos.
216
+ exam_registration: ¡Ya podés inscribirte al examen!
217
+ text:
218
+ exam_authorization_request_approved: Podrás rendir el examen el día %{exam_start_date} ingresando a la plataforma. ¡Éxitos!
219
+ exam_authorization_request_rejected: ¡No te desanimes! Hiciste un gran esfuerzo y esperamos que continúes aprendiendo programación.
220
+ exam_registration: Tenés tiempo de inscribirte hasta el %{exam_registration_deadline}. Para que tu inscripción sea aceptada debés cumplir con los requisitos.
221
+ button:
222
+ exam_registration: Inscribirme al Examen
223
+ exam_authorization_request_approved: Ir a la plataforma
224
+ exam_authorization_request_rejected: Mis exámenes
225
+ custom: Mis notificaciones
197
226
  male: Hombre
227
+ manage_notification_subscriptions: Administrá tus notificaciones
228
+ manage_notifications: Administrar notificaciones
198
229
  manual_evaluation_pending: ¡Gracias por enviar tu solución! Tus docentes la corregirán pronto
199
230
  medal: Medalla
200
231
  message: Mensaje
201
232
  message_deleted: Este mensaje fue eliminado porque %{motive}, lo cual infringe las %{forum_terms}.
202
233
  messages: Mensajes
203
- messages_error: Los mensajes anteriores no están disponibles en este momento. ¡Volvé a intentar mas tarde!
204
234
  messages_pluralized:
205
235
  one: Mensaje
206
236
  other: Mensajes
@@ -217,9 +247,9 @@ es:
217
247
  you_are: Te estás ocupando
218
248
  you_will_confirmation: Te vas a ocupar de esta consulta. Si cambiás de parecer, tocá nuevamente el botón.
219
249
  you_wont_confirmation: No te vas a ocupar de esta consulta.
220
- more_messages: Ver mensajes anteriores
221
250
  my_account: Mi cuenta
222
251
  my_doubts: Mis consultas
252
+ my_notifications: Mis notificaciones
223
253
  my_profile: Mi perfil
224
254
  name: Nombre
225
255
  navigation_continue: 'Siguiente %{kind}: %{sibling}'
@@ -249,7 +279,12 @@ es:
249
279
  not_found: ¡La página que buscaste no existe!
250
280
  not_found_explanation: Fijate si escribiste bien la dirección.
251
281
  not_in_any_organizations: ¡Parece que no estás en ninguna organización todavía!
282
+ notification_subject:
283
+ custom: Anuncios generales
284
+ exam_authorization_request_updated: Cambios sobre inscripciones a exámenes
285
+ exam_registration: Inscripciones a exámenes habilitadas
252
286
  notifications: Notificaciones
287
+ notifications_will_be_here: Tus notificaciones aparecerán aquí
253
288
  notify_problem_with_exercise: Reportá un bug
254
289
  office: Secretaría
255
290
  only_landscape_support: Por favor, rotá tu tablet o celular para realizar ejercicios
@@ -272,6 +307,7 @@ es:
272
307
  permissions: Permisos
273
308
  please_fill_profile_data: ¡Completá tus datos personales para continuar!
274
309
  please_validate: 'Estás a punto de ingresar al curso. Para poder ofrecerte una mejor experiencia, por favor validá que tus datos a continuación sean reales y correctos.'
310
+ preferences_updated_successfully: Tus preferencias se actualizaron correctamente
275
311
  preview: Vista previa
276
312
  preview_error: No se puede mostrar la vista previa. Revisá tu conexión a internet o probá con un mensaje más corto.
277
313
  previous_exercise: Anterior
@@ -280,7 +316,7 @@ es:
280
316
  profile_of: Perfil de %{username}
281
317
  programming_since: Programando desde
282
318
  progress: Progreso
283
- read: Leido
319
+ publish_discussion: Publicar consulta
284
320
  read_messages: Ver mensajes
285
321
  refresh_or_wait: Si no se muestra automáticamente en unos segundos, presioná F5
286
322
  reply_count:
@@ -373,6 +409,8 @@ es:
373
409
  user_data_updated: Tus datos se actualizaron correctamente
374
410
  user: Usuario
375
411
  username: Nombre de usuario
412
+ verified_full_name: Nombre verificado
413
+ verified_full_name_notice: Tu nombre verificado fue provisto por %{organization}. Si hay algún error, por favor escribí a %{contact}.
376
414
  view_details: Ver detalles
377
415
  want_permissions: El siguiente usuario requiere permisos para la organización
378
416
  we_miss_you: ¡Te extrañamos!
@@ -386,6 +424,7 @@ es:
386
424
  wrong_answer: La respuesta no es correcta
387
425
  years: años
388
426
  you_earned: Ganaste
427
+ you_have_a_new_notification: ¡Tenés una nueva notificación!
389
428
  you_must_sign_in_before_submitting: Tenés que iniciar sesión antes de empezar a enviar tus soluciones
390
429
  you_never_submitted_solutions: Parece que nunca enviaste soluciones desde que creaste tu cuenta.
391
430
  your_new_organization: tu nueva organización
@@ -14,14 +14,15 @@ pt:
14
14
  appendix: Apêndice
15
15
  appendix_teaser: Você quer saber mais? <a href="%{link}"> Consulte o apêndice deste capítulo </a>
16
16
  approved_message: Validado pelo mentor
17
- are_you_sure: 'Tem certeza de que deseja %{action}?'
18
17
  approved_messages:
19
18
  one: validado
20
19
  other: validados
20
+ are_you_sure: 'Tem certeza de que deseja %{action}?'
21
21
  ask_a_question: Faça uma pergunta!
22
22
  ask_community: Pergunte à comunidade
23
23
  ask_redirect: Você quer que nós o levemos para lá?
24
24
  ask_the_first_question: Faça a primeira pergunta!
25
+ asked_time_since: "consultou há %{time}"
25
26
  attempts_left:
26
27
  zero: 'Você ficou sem tentativas'
27
28
  one: '1 tentativa restante'
@@ -36,6 +37,8 @@ pt:
36
37
  blocked_forum_explanation: Você está no meio de um exame agora?
37
38
  cancel: Cancelar
38
39
  certificate: Certificado
40
+ certificate_available: Seu certificado já está disponível
41
+ certificate_download: Baixe-o do anexo deste e-mail ou visualize-o em seu perfil Mumuki.
39
42
  certificates: Certificados
40
43
  certificates_will_be_here: Seus certificados nesta organização aparecerão aqui
41
44
  certificate_verified_legend: "A conta de <strong>% {full_name} </strong> foi verificada. Mumuki certifica a conclusão com sucesso de <strong>% {description} </strong>."
@@ -53,6 +56,7 @@ pt:
53
56
  confirm: Confirme
54
57
  confirm_reset: Você está prestes a reiniciar seu exercício. Você quer continuar?
55
58
  confirm_restart: Você está prestes a apagar o seu progresso neste guia. Você quer continuar?
59
+ congratulations: Parabéns!
56
60
  console: Consola
57
61
  contact_administrator: Se você acha que é um erro, entre em contato com %{link}
58
62
  content: Conteúdo
@@ -88,9 +92,12 @@ pt:
88
92
  disabled_explanation: Você está tentando acessar um recurso que foi desativado ou removido permanentemente
89
93
  disabled_organization_explanation: Este curso terminou
90
94
  discussion_description_placeholder: Você pode adicionar mais informações sobre sua dúvida
91
- new_discussion_message: Nova mensagem em %{title}
95
+ new_discussion_message: Nova resposta em %{title}
96
+ discussion_created_by: Criada por
92
97
  discussion_updated: Consulta actualizada
93
98
  discussions: Consultas
99
+ discussions_read: Não lidas
100
+ discussions_unread: Não lidos
94
101
  discussions_will_be_here: As perguntas que você fizer no espaço de consulta aparecerão aqui.
95
102
  download: Faça o download do que você fez
96
103
  edit: Editar
@@ -135,7 +142,8 @@ pt:
135
142
  expected_state: Tabuleiro esperado
136
143
  explain_redirect: Percebemos que você se registrou em outra organização.
137
144
  failed: Sua solução não passou as provas
138
- faqs: Perguntas frequentes
145
+ faqs: Informação importante
146
+ faqs_abbreviated: Informação
139
147
  feedback: Problemas que encontramos
140
148
  female: Feminino
141
149
  file_exceeds_max_size: "O tamanho do arquivo não deve exceder %{size_kb}kb. Selecione outro arquivo."
@@ -162,6 +170,7 @@ pt:
162
170
  home: Home
163
171
  hour: hora
164
172
  hours: horas
173
+ i_want_emails_of: Quero receber e-mails de
165
174
  important_info: Informação importante
166
175
  initial_state: Tabuleiro inicial
167
176
  insert_file_name: Insira um nome de arquivo
@@ -172,6 +181,7 @@ pt:
172
181
  kids_default_success: Você fez muito bem!
173
182
  language: Linguagem
174
183
  languages: Linguagens
184
+ last_message: Última mensagem
175
185
  last_name: Sobrenome
176
186
  last_submission_date: Última solução
177
187
  latest_exercises: Últimos exercícios
@@ -187,13 +197,33 @@ pt:
187
197
  loading: Carregando
188
198
  load_solution_into_console: Carregue a solução no console
189
199
  locked_content: 'Este conteúdo será desbloqueado quando você terminar os capítulos anteriores'
200
+ mailer:
201
+ title:
202
+ exam_authorization_request_updated: Você tem alterações no registro do seu exame
203
+ exam_authorization_request_rejected: Inscrição rejeitada
204
+ exam_registration: Abertura de inscrições
205
+ custom: Você tem uma nova notificação!
206
+ subtitle:
207
+ exam_authorization_request_approved: Seu pedido de inscrição para o exame foi aprovado.
208
+ exam_authorization_request_rejected: Sua inscrição para o exame foi rejeitada porque os requisitos não foram atendidos.
209
+ exam_registration: Agora você pode se inscrever para o exame!
210
+ text:
211
+ exam_authorization_request_approved: Você poderá fazer o exame em %{exam_start_date} ao entrar na plataforma. Êxitos!
212
+ exam_authorization_request_rejected: Não te desanimes! Você fez um grande esforço e esperamos que continue aprendendo programação.
213
+ exam_registration: Você tem tempo para se registrar até o exam_registration_deadline. Para que seu registro seja aceito, você deve atender aos requisitos.
214
+ button:
215
+ exam_registration: Assinar o exame
216
+ exam_authorization_request_approved: Vá para a plataforma
217
+ exam_authorization_request_rejected: Meus exames
218
+ custom: Minhas notificações
190
219
  male: Masculino
220
+ manage_notification_subscriptions: Gerenciar suas notificações
221
+ manage_notifications: Gerenciar notificações
191
222
  manual_evaluation_pending: Obrigado por enviar sua solução! Seus professores irão corrigi-lo em breve
192
223
  medal: Medalha
193
224
  message: Mensagem
194
225
  message_deleted: Esta mensagem foi excluída porque %{motive}, o que viola as %{forum_terms}.
195
226
  messages: Mensagens
196
- messages_error: As mensagens acima não estão disponíveis no momento. Eu tentei novamente mais tarde!
197
227
  mais tarde!
198
228
  messages_pluralized:
199
229
  one: Mensagem
@@ -211,9 +241,9 @@ pt:
211
241
  you_are: Você está cuidando
212
242
  you_will_confirmation: Você vai cuidar dessa consulta. Se mudar de ideia, clique no botão novamente.
213
243
  you_wont_confirmation: Você não vai cuidar dessa consulta.
214
- more_messages: Ver as mensagens anteriores
215
244
  my_account: Minha conta
216
245
  my_doubts: Minhas duvidas
246
+ my_notifications: Minhas notificações
217
247
  my_profile: Meu perfil
218
248
  name: Nome
219
249
  navigation_continue: "Próximo %{kind}: %{sibling}"
@@ -242,7 +272,12 @@ pt:
242
272
  not_found: A página que você pesquisou não existe!
243
273
  not_found_explanation: Olhe se você escreveu o endereço corretamente.
244
274
  not_in_any_organizations: Parece que você ainda não está em nenhuma organização!
275
+ notification_subject:
276
+ custom: Anúncios gerais
277
+ exam_authorization_request_updated: Mudanças no registro do exame
278
+ exam_registration: Inscrição para exames qualificados
245
279
  notifications: Notificações
280
+ notifications_will_be_here: Suas notificações aparecerão aqui
246
281
  notify_problem_with_exercise: Relatar um erro
247
282
  office: Secretariado
248
283
  only_landscape_support: Por favor, gire seu tablet ou celular para realizar exercícios
@@ -263,6 +298,7 @@ pt:
263
298
  permissions: Permissões
264
299
  please_fill_profile_data: Preencha suas informações pessoais para continuar!
265
300
  please_validate: Você está prestes a entrar no curso. Para oferecer uma experiência melhor, valide que seus dados abaixo sejam reais e corretos.
301
+ preferences_updated_successfully: Suas preferências foram atualizadas com sucesso
266
302
  preview: Vista prévia
267
303
  preview_error: A visualizaçao não pode ser mostrada. Verifique sua conexão com a internet ou tente com uma mensagem mais curta.
268
304
  previous_exercise: Anterior
@@ -271,7 +307,7 @@ pt:
271
307
  profile_of: Perfil de %{username}
272
308
  programming_since: Sou programador
273
309
  progress: Progresso
274
- read: Ler
310
+ publish_discussion: Postar consulta
275
311
  read_messages: Ver mensagens
276
312
  refresh_or_wait: Se não mostrar automaticamente em alguns segundos, pressione F5
277
313
  reply_count:
@@ -355,6 +391,8 @@ pt:
355
391
  user: Usuário
356
392
  user_data_updated: Os seus dados foram atualizados corretamente
357
393
  username: Nome de usuário
394
+ verified_full_name: Nome verificado
395
+ verified_full_name_notice: Seu nome verificado foi fornecido por %{organization}. Se houver algum erro, escreva um e-mail para %{contact}.
358
396
  view_details: Ver detalhes
359
397
  want_permissions: O próximo usuário requer permissões para a organização
360
398
  week_of: Semana de %{date}
@@ -363,5 +401,6 @@ pt:
363
401
  wrong_answer: A resposta não é correta
364
402
  years: anos
365
403
  you_earned: Você ganhou
404
+ you_have_a_new_notification: Você tem uma nova notificação!
366
405
  you_must_sign_in_before_submitting: Você deve fazer o login antes de começar a enviar suas soluções
367
406
  your_new_organization: sua nova organização
@@ -1,5 +1,5 @@
1
1
  module Mumuki
2
2
  module Laboratory
3
- VERSION = '9.8.1'
3
+ VERSION = '9.11.0'
4
4
  end
5
5
  end
@@ -107,7 +107,9 @@ describe Api::OrganizationsController, type: :controller, organization_workspace
107
107
  name: 'a-name',
108
108
  public: false,
109
109
  book: book.slug,
110
- locale: 'es'}
110
+ locale: 'es',
111
+ time_zone: 'Buenos Aires'
112
+ }
111
113
  end
112
114
 
113
115
  context 'with the admin permissions' do
@@ -138,6 +140,7 @@ describe Api::OrganizationsController, type: :controller, organization_workspace
138
140
  description: 'A description',
139
141
  book: book.slug,
140
142
  locale: 'es',
143
+ time_zone: 'Montevideo',
141
144
  public: false,
142
145
  login_methods: %w(facebook github),
143
146
  logo_url: 'http://a-logo-url.com',
@@ -155,6 +158,7 @@ describe Api::OrganizationsController, type: :controller, organization_workspace
155
158
  it { expect(organization.extension_javascript).to eq "window.a = function() { }" }
156
159
  it { expect(organization.terms_of_service).to eq 'A TOS' }
157
160
  it { expect(organization.faqs).to eq 'some faqs' }
161
+ it { expect(organization.time_zone).to eq 'Montevideo' }
158
162
  end
159
163
 
160
164
  context 'with missing values' do
@@ -166,6 +170,7 @@ describe Api::OrganizationsController, type: :controller, organization_workspace
166
170
  {
167
171
  errors: {
168
172
  name: ["can't be blank"],
173
+ time_zone: ["can't be blank"],
169
174
  locale: ['is not included in the list']
170
175
  }
171
176
  }
@@ -31,7 +31,7 @@ require 'spec_helper'
31
31
  it { expect(User.last.uid).to eq 'agus@mumuki.org' }
32
32
  it { expect(User.last.email).to eq 'agus@mumuki.org' }
33
33
  it { expect(User.last.gender).to eq 'male' }
34
- it { expect(User.last.birthdate).to eq '2010-08-25'.to_datetime }
34
+ it { expect(User.last.birthdate).to eq '2010-08-25'.in_time_zone }
35
35
  it { expect(User.last.permissions.has_permission? role, 'anorganization/acode').to be true }
36
36
 
37
37
  end
@@ -19,4 +19,52 @@ describe UsersController, type: :controller, organization_workspace: :test do
19
19
  it { expect(User.last.verified_first_name).to be_nil }
20
20
  end
21
21
 
22
+ context 'notifications' do
23
+ context 'get' do
24
+ context 'when logged in' do
25
+ before { set_current_user! user }
26
+ before { get :notifications }
27
+
28
+ it { expect(response.status).to eq 200 }
29
+ end
30
+
31
+ context 'when not logged in' do
32
+ before { get :notifications }
33
+
34
+ it { expect(response.status).to eq 302 }
35
+ end
36
+ end
37
+
38
+ context 'toggle_read' do
39
+ before { set_current_user! user }
40
+ before { post :toggle_read, params: { id: notification.id } }
41
+
42
+ context 'on toggling own notification read' do
43
+ let(:notification) { create :notification, user: user }
44
+
45
+ it { expect(response.status).to eq 302 }
46
+ it { expect(notification.reload.read?).to be true }
47
+ end
48
+
49
+ context 'on toggling someone else\'s notification read' do
50
+ let(:notification) { create :notification, user: create(:user) }
51
+
52
+ it { expect(response.status).to eq 404 }
53
+ it { expect(notification.reload.read?).to be false }
54
+ end
55
+ end
56
+
57
+ context 'notifications/manage' do
58
+ context 'post' do
59
+ let(:user) { create :user, ignored_notifications: [] }
60
+
61
+ before { set_current_user! user }
62
+ before { post :manage_notifications, params: { notifications: {'custom' => 1, 'exam_registrations' => 0 } } }
63
+
64
+ it { expect(response.status).to eq 302 }
65
+ it { expect(flash.notice).to eq 'Preferences updated successfully' }
66
+ it { expect(user.reload.ignored_notifications).to eq ['exam_registrations'] }
67
+ end
68
+ end
69
+ end
22
70
  end
@@ -10,7 +10,7 @@
10
10
  #
11
11
  # It's strongly recommended that you check this file into your version control system.
12
12
 
13
- ActiveRecord::Schema.define(version: 20210518100153) do
13
+ ActiveRecord::Schema.define(version: 20210803175124) do
14
14
 
15
15
  # These are extensions that must be enabled in order to support this database
16
16
  enable_extension "plpgsql"
@@ -193,6 +193,7 @@ ActiveRecord::Schema.define(version: 20210518100153) do
193
193
  t.bigint "organization_id"
194
194
  t.datetime "created_at", null: false
195
195
  t.datetime "updated_at", null: false
196
+ t.boolean "processed", default: false
196
197
  t.index ["organization_id"], name: "index_exam_registrations_on_organization_id"
197
198
  end
198
199
 
@@ -384,7 +385,9 @@ ActiveRecord::Schema.define(version: 20210518100153) do
384
385
  t.integer "deletion_motive"
385
386
  t.datetime "deleted_at"
386
387
  t.bigint "deleted_by_id"
388
+ t.bigint "assignment_id"
387
389
  t.index ["approved_by_id"], name: "index_messages_on_approved_by_id"
390
+ t.index ["assignment_id"], name: "index_messages_on_assignment_id"
388
391
  t.index ["deleted_by_id"], name: "index_messages_on_deleted_by_id"
389
392
  end
390
393
 
@@ -397,6 +400,10 @@ ActiveRecord::Schema.define(version: 20210518100153) do
397
400
  t.bigint "organization_id"
398
401
  t.datetime "created_at", null: false
399
402
  t.datetime "updated_at", null: false
403
+ t.integer "subject"
404
+ t.text "custom_title"
405
+ t.text "custom_content_plain_text"
406
+ t.text "custom_content_html"
400
407
  t.index ["organization_id"], name: "index_notifications_on_organization_id"
401
408
  t.index ["target_type", "target_id"], name: "index_notifications_on_target_type_and_target_id"
402
409
  t.index ["user_id"], name: "index_notifications_on_user_id"
@@ -527,6 +534,7 @@ ActiveRecord::Schema.define(version: 20210518100153) do
527
534
  t.boolean "uppercase_mode"
528
535
  t.string "delete_account_token"
529
536
  t.datetime "delete_account_token_expiration_date"
537
+ t.text "ignored_notifications"
530
538
  t.index ["avatar_type", "avatar_id"], name: "index_users_on_avatar_type_and_avatar_id"
531
539
  t.index ["disabled_at"], name: "index_users_on_disabled_at"
532
540
  t.index ["last_organization_id"], name: "index_users_on_last_organization_id"