codeforlife-portal 8.4.1__tar.gz → 8.4.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of codeforlife-portal might be problematic. Click here for more details.

Files changed (556) hide show
  1. {codeforlife_portal-8.4.1/codeforlife_portal.egg-info → codeforlife_portal-8.4.3}/PKG-INFO +1 -1
  2. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3/codeforlife_portal.egg-info}/PKG-INFO +1 -1
  3. codeforlife_portal-8.4.3/portal/__init__.py +1 -0
  4. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/forms/teach.py +1 -1
  5. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/play.html +1 -1
  6. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/privacy_notice.html +0 -10
  7. codeforlife_portal-8.4.3/portal/templates/portal/teach/teacher_edit_class.html +261 -0
  8. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/teach.html +3 -3
  9. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/test_class.py +23 -28
  10. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/legal.py +1 -1
  11. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/teacher/teach.py +4 -4
  12. codeforlife_portal-8.4.1/portal/__init__.py +0 -1
  13. codeforlife_portal-8.4.1/portal/templates/portal/teach/teacher_edit_class.html +0 -255
  14. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/LICENSE.md +0 -0
  15. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/MANIFEST.in +0 -0
  16. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/README.md +0 -0
  17. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/codeforlife_portal.egg-info/SOURCES.txt +0 -0
  18. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/codeforlife_portal.egg-info/dependency_links.txt +0 -0
  19. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/codeforlife_portal.egg-info/not-zip-safe +0 -0
  20. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/codeforlife_portal.egg-info/requires.txt +0 -0
  21. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/codeforlife_portal.egg-info/top_level.txt +0 -0
  22. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/deploy/__init__.py +0 -0
  23. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/deploy/captcha.py +0 -0
  24. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/deploy/middleware/__init__.py +0 -0
  25. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/deploy/middleware/admin_access.py +0 -0
  26. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/deploy/middleware/basicauth.py +0 -0
  27. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/deploy/middleware/exceptionlogging.py +0 -0
  28. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/deploy/middleware/maintenance.py +0 -0
  29. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/deploy/middleware/screentime_warning.py +0 -0
  30. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/deploy/middleware/security.py +0 -0
  31. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/deploy/middleware/session_timeout.py +0 -0
  32. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/deploy/static/apple-touch-icon-120x120.png +0 -0
  33. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/deploy/static/apple-touch-icon-152x152.png +0 -0
  34. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/deploy/static/apple-touch-icon-180x180.png +0 -0
  35. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/deploy/static/apple-touch-icon-76x76.png +0 -0
  36. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/deploy/static/apple-touch-icon.png +0 -0
  37. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/deploy/static/robots.txt +0 -0
  38. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/deploy/templates/deploy/csrf_failure.html +0 -0
  39. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/deploy/views.py +0 -0
  40. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/admin.py +0 -0
  41. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/app_settings.py +0 -0
  42. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/backends.py +0 -0
  43. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/beta.py +0 -0
  44. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/context_processors.py +0 -0
  45. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/forms/__init__.py +0 -0
  46. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/forms/admin.py +0 -0
  47. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/forms/dotmailer.py +0 -0
  48. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/forms/error_messages.py +0 -0
  49. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/forms/invite_teacher.py +0 -0
  50. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/forms/organisation.py +0 -0
  51. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/forms/play.py +0 -0
  52. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/forms/registration.py +0 -0
  53. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/handlers.py +0 -0
  54. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/helpers/__init__.py +0 -0
  55. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/helpers/captcha.py +0 -0
  56. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/helpers/decorators.py +0 -0
  57. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/helpers/password.py +0 -0
  58. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/helpers/ratelimit.py +0 -0
  59. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/helpers/regexes.py +0 -0
  60. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/helpers/request_handlers.py +0 -0
  61. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/migrations/0001_squashed_0041_new_news.py +0 -0
  62. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/migrations/0042_school_country.py +0 -0
  63. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/migrations/0043_auto_20150430_0952.py +0 -0
  64. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/migrations/0044_auto_20150430_0959.py +0 -0
  65. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/migrations/0045_auto_20150430_1446.py +0 -0
  66. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/migrations/0046_auto_20150723_1101.py +0 -0
  67. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/migrations/0047_remove_userprofile_avatar.py +0 -0
  68. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/migrations/0048_plural_management_frontnews.py +0 -0
  69. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/migrations/0049_refactor_emailverifications.py +0 -0
  70. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/migrations/0050_refactor_emailverifications_2.py +0 -0
  71. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/migrations/0051_add_missing_ev_records.py +0 -0
  72. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/migrations/0052_refactor_emailverifications_3.py +0 -0
  73. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/migrations/0053_refactor_teacher_student_1.py +0 -0
  74. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/migrations/0054_pending_join_request_can_be_blank.py +0 -0
  75. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/migrations/0055_add_preview_user.py +0 -0
  76. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/migrations/0056_remove_preview_user.py +0 -0
  77. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/migrations/0057_delete_frontpagenews.py +0 -0
  78. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/migrations/0058_move_to_common_models.py +0 -0
  79. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/migrations/0059_move_email_verifications_to_common.py +0 -0
  80. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/migrations/0060_delete_guardian.py +0 -0
  81. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/migrations/0061_make_portaladmin_teacher.py +0 -0
  82. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/migrations/0062_verify_portaladmin.py +0 -0
  83. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/migrations/__init__.py +0 -0
  84. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/mixins/__init__.py +0 -0
  85. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/mixins/cron_mixin.py +0 -0
  86. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/models.py +0 -0
  87. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/permissions/__init__.py +0 -0
  88. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/permissions/is_cron_request_from_google.py +0 -0
  89. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/pipeline_compilers/__init__.py +0 -0
  90. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/pipeline_compilers/libsass_compiler.py +0 -0
  91. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/fonts/bootstrap/glyphicons-halflings-regular.eot +0 -0
  92. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/fonts/bootstrap/glyphicons-halflings-regular.svg +0 -0
  93. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/fonts/bootstrap/glyphicons-halflings-regular.ttf +0 -0
  94. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/fonts/bootstrap/glyphicons-halflings-regular.woff +0 -0
  95. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/fonts/bootstrap/glyphicons-halflings-regular.woff2 +0 -0
  96. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/10_years_anniversary.png +0 -0
  97. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/10x_logo.png +0 -0
  98. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/RR_logo_grass_background.png +0 -0
  99. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/RR_logo_green.svg +0 -0
  100. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/RR_logo_simple.png +0 -0
  101. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/about_us_cfl.jpg +0 -0
  102. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/about_us_hero.jpg +0 -0
  103. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/about_us_ocado.jpg +0 -0
  104. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/barefoot_logo.png +0 -0
  105. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/bcs_logo.png +0 -0
  106. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/clubs.png +0 -0
  107. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/coding_club_hero.jpg +0 -0
  108. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/coding_club_python_pack.png +0 -0
  109. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/colorboxImages/border.png +0 -0
  110. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/colorboxImages/controls.png +0 -0
  111. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/colorboxImages/loading.gif +0 -0
  112. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/colorboxImages/loading_background.png +0 -0
  113. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/colorboxImages/overlay.png +0 -0
  114. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/confirmation_tick.png +0 -0
  115. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/cross.png +0 -0
  116. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/dee.png +0 -0
  117. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/facebook.png +0 -0
  118. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/favicon.ico +0 -0
  119. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/get_involved_hero.png +0 -0
  120. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/gitbook.png +0 -0
  121. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/gitbook_space.png +0 -0
  122. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/github.png +0 -0
  123. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/github_hero.png +0 -0
  124. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/gla_logo.png +0 -0
  125. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/hamburger.png +0 -0
  126. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/help_and_support_hero.jpg +0 -0
  127. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/home_educate.png +0 -0
  128. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/home_educate_hero.jpg +0 -0
  129. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/home_learning_hero.jpg +0 -0
  130. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/home_play.png +0 -0
  131. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/home_play_hero.jpg +0 -0
  132. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/hope_logo.png +0 -0
  133. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/howe_dell_1.png +0 -0
  134. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/howe_dell_2.png +0 -0
  135. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/howe_dell_3.png +0 -0
  136. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/icl_logo.png +0 -0
  137. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/icon_controller.png +0 -0
  138. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/icon_free.png +0 -0
  139. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/icon_globe.png +0 -0
  140. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/icon_piechart.png +0 -0
  141. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/icon_step_by_step.png +0 -0
  142. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/icon_tracking.png +0 -0
  143. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/icon_uk_flag.png +0 -0
  144. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/kirsty.png +0 -0
  145. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/logo_cfl.png +0 -0
  146. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/logo_cfl_powered.svg +0 -0
  147. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/logo_cfl_reminder_cards.jpg +0 -0
  148. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/logo_cfl_white_landscape.png +0 -0
  149. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/logo_ocado.png +0 -0
  150. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/logo_ocado_group.png +0 -0
  151. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/logo_ocado_group.svg +0 -0
  152. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/logo_ocado_group_white.svg +0 -0
  153. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/logo_python_den.svg +0 -0
  154. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/long_europe_map.png +0 -0
  155. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/mc_saatchi_logo.png +0 -0
  156. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/nigel.png +0 -0
  157. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/ocado-swirl.svg +0 -0
  158. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/oval_blue.svg +0 -0
  159. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/oval_pink.svg +0 -0
  160. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/oval_yellow.svg +0 -0
  161. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/paper_plane.png +0 -0
  162. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/phil.png +0 -0
  163. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/polygon_blue.svg +0 -0
  164. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/polygon_pink.svg +0 -0
  165. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/polygon_yellow.svg +0 -0
  166. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/pressure_cooker_logo.png +0 -0
  167. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/python_den.png +0 -0
  168. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/python_den_banner.svg +0 -0
  169. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/rapid_router.png +0 -0
  170. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/rapid_router_landing_hero.png +0 -0
  171. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/rapidrouter.png +0 -0
  172. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/resources_hero.jpg +0 -0
  173. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/resources_montage.jpg +0 -0
  174. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/reuben.png +0 -0
  175. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/rob.png +0 -0
  176. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/rr_advanced.png +0 -0
  177. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/rr_beginner.png +0 -0
  178. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/rr_intermediate.png +0 -0
  179. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/sadface.png +0 -0
  180. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/sharon_harrison.jpg +0 -0
  181. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/sian.png +0 -0
  182. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/teaching_resources_hero.jpg +0 -0
  183. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/ten_year_map_pin.svg +0 -0
  184. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/thumbnail_educate_rapid_router.png +0 -0
  185. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/thumbnail_educate_resources.png +0 -0
  186. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/thumbnail_intro_c4l.jpg +0 -0
  187. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/thumbnail_play_rapid_router.png +0 -0
  188. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/thumbnail_python_den.png +0 -0
  189. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/twitter.png +0 -0
  190. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/universities.png +0 -0
  191. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/img/wes.png +0 -0
  192. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/bootstrap.min.js +0 -0
  193. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/carouselCards.js +0 -0
  194. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/common.js +0 -0
  195. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/independentLogin.js +0 -0
  196. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/independentRegistration.js +0 -0
  197. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/join_create_game_toggle.js +0 -0
  198. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/jquery.placeholder.js +0 -0
  199. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/levelControl.js +0 -0
  200. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/lib/jquery-video-lightning.js +0 -0
  201. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/lib/jquery.colorbox.js +0 -0
  202. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/lib/jquery.easy-ticker.js +0 -0
  203. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/lib/jquery.min.js +0 -0
  204. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/lib/modernizr-build.js +0 -0
  205. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/lib/papaparse.min.js +0 -0
  206. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/organisation_manage.js +0 -0
  207. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/passwordStrength.js +0 -0
  208. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/play.js +0 -0
  209. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/resetPassword.js +0 -0
  210. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/riveted.min.js +0 -0
  211. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/school.js +0 -0
  212. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/sticky_subnav.js +0 -0
  213. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/studentLogin.js +0 -0
  214. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/teach_browser.js +0 -0
  215. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/teach_class.js +0 -0
  216. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/teacherEditStudent.js +0 -0
  217. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/teacherLogin.js +0 -0
  218. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/js/tenYearMap.js +0 -0
  219. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_alerts.scss +0 -0
  220. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_badges.scss +0 -0
  221. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_breadcrumbs.scss +0 -0
  222. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_button-groups.scss +0 -0
  223. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_buttons.scss +0 -0
  224. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_carousel.scss +0 -0
  225. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_close.scss +0 -0
  226. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_code.scss +0 -0
  227. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_component-animations.scss +0 -0
  228. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_dropdowns.scss +0 -0
  229. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_forms.scss +0 -0
  230. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_glyphicons.scss +0 -0
  231. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_grid.scss +0 -0
  232. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_input-groups.scss +0 -0
  233. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_jumbotron.scss +0 -0
  234. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_labels.scss +0 -0
  235. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_list-group.scss +0 -0
  236. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_media.scss +0 -0
  237. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_mixins.scss +0 -0
  238. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_modals.scss +0 -0
  239. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_navbar.scss +0 -0
  240. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_navs.scss +0 -0
  241. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_normalize.scss +0 -0
  242. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_pager.scss +0 -0
  243. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_pagination.scss +0 -0
  244. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_panels.scss +0 -0
  245. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_popovers.scss +0 -0
  246. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_print.scss +0 -0
  247. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_progress-bars.scss +0 -0
  248. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_responsive-embed.scss +0 -0
  249. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_responsive-utilities.scss +0 -0
  250. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_scaffolding.scss +0 -0
  251. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_tables.scss +0 -0
  252. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_theme.scss +0 -0
  253. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_thumbnails.scss +0 -0
  254. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_tooltip.scss +0 -0
  255. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_type.scss +0 -0
  256. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_utilities.scss +0 -0
  257. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_variables.scss +0 -0
  258. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/_wells.scss +0 -0
  259. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_alerts.scss +0 -0
  260. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_background-variant.scss +0 -0
  261. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_border-radius.scss +0 -0
  262. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_breakpoints.scss +0 -0
  263. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_buttons.scss +0 -0
  264. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_center-block.scss +0 -0
  265. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_clearfix.scss +0 -0
  266. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_forms.scss +0 -0
  267. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_gradients.scss +0 -0
  268. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_grid-framework.scss +0 -0
  269. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_grid.scss +0 -0
  270. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_hide-text.scss +0 -0
  271. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_image.scss +0 -0
  272. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_labels.scss +0 -0
  273. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_list-group.scss +0 -0
  274. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_nav-divider.scss +0 -0
  275. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_nav-vertical-align.scss +0 -0
  276. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_opacity.scss +0 -0
  277. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_pagination.scss +0 -0
  278. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_panels.scss +0 -0
  279. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_progress-bar.scss +0 -0
  280. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_reset-filter.scss +0 -0
  281. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_reset-text.scss +0 -0
  282. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_resize.scss +0 -0
  283. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_responsive-visibility.scss +0 -0
  284. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_size.scss +0 -0
  285. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_tab-focus.scss +0 -0
  286. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_table-row.scss +0 -0
  287. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_text-emphasis.scss +0 -0
  288. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_text-overflow.scss +0 -0
  289. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_text-truncate.scss +0 -0
  290. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap/mixins/_vendor-prefixes.scss +0 -0
  291. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap.scss +0 -0
  292. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap_mixins/_all.scss +0 -0
  293. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap_mixins/_border-radius.scss +0 -0
  294. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap_mixins/_box-shadow.scss +0 -0
  295. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap_mixins/_hover.scss +0 -0
  296. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap_mixins/_nav-divider.scss +0 -0
  297. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap_partials/_dropdown.scss +0 -0
  298. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap_partials/_glyphicons.scss +0 -0
  299. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap_partials/_grid.scss +0 -0
  300. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap_partials/_variables.scss +0 -0
  301. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap_utilities/_align.scss +0 -0
  302. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap_utilities/_background.scss +0 -0
  303. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap_utilities/_borders.scss +0 -0
  304. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap_utilities/_clearfix.scss +0 -0
  305. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap_utilities/_cursor.scss +0 -0
  306. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap_utilities/_display.scss +0 -0
  307. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap_utilities/_flex.scss +0 -0
  308. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap_utilities/_float.scss +0 -0
  309. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap_utilities/_position.scss +0 -0
  310. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap_utilities/_screenreaders.scss +0 -0
  311. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap_utilities/_sizing.scss +0 -0
  312. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap_utilities/_spacing.scss +0 -0
  313. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap_utilities/_text.scss +0 -0
  314. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/bootstrap_utilities/_visibility.scss +0 -0
  315. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/colorbox.scss +0 -0
  316. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/modules/_all.scss +0 -0
  317. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/modules/_animation.scss +0 -0
  318. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/modules/_breakpoints.scss +0 -0
  319. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/modules/_card_constants.scss +0 -0
  320. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/modules/_colours.scss +0 -0
  321. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/modules/_homepage_constants.scss +0 -0
  322. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/modules/_levels.scss +0 -0
  323. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/modules/_mixins.scss +0 -0
  324. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/modules/_spacing.scss +0 -0
  325. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/partials/_banners.scss +0 -0
  326. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/partials/_base.scss +0 -0
  327. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/partials/_buttons.scss +0 -0
  328. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/partials/_carousel.scss +0 -0
  329. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/partials/_footer.scss +0 -0
  330. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/partials/_forms.scss +0 -0
  331. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/partials/_grids.scss +0 -0
  332. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/partials/_header.scss +0 -0
  333. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/partials/_images.scss +0 -0
  334. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/partials/_popup.scss +0 -0
  335. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/partials/_progress-bars.scss +0 -0
  336. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/partials/_subnavs.scss +0 -0
  337. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/partials/_tables.scss +0 -0
  338. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/partials/_text.scss +0 -0
  339. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/partials/_ui-dialog.scss +0 -0
  340. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/partials/_utils.scss +0 -0
  341. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/sass/styles.scss +0 -0
  342. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/static/portal/video/code for life .pdf +0 -0
  343. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/strings/__init__.py +0 -0
  344. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/strings/about.py +0 -0
  345. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/strings/coding_club.py +0 -0
  346. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/strings/help_and_support.py +0 -0
  347. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/strings/home_learning.py +0 -0
  348. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/strings/materials.py +0 -0
  349. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/strings/play.py +0 -0
  350. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/strings/teach.py +0 -0
  351. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/strings/teacher_resources.py +0 -0
  352. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/strings/ten_year_map.py +0 -0
  353. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/403.html +0 -0
  354. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/404.html +0 -0
  355. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/500.html +0 -0
  356. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/django_recaptcha/includes/js_v2_invisible.html +0 -0
  357. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/django_recaptcha/widget_v2_invisible.html +0 -0
  358. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/email.html +0 -0
  359. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/email.txt +0 -0
  360. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/maintenance.html +0 -0
  361. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/about.html +0 -0
  362. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/base.html +0 -0
  363. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/base_no_userprofile.html +0 -0
  364. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/coding_club.html +0 -0
  365. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/contribute.html +0 -0
  366. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/dotmailer_consent_form.html +0 -0
  367. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/email_invitation_sent.html +0 -0
  368. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/email_style_template.html +0 -0
  369. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/email_verification_failed.html +0 -0
  370. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/email_verification_needed.html +0 -0
  371. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/form_shapes.html +0 -0
  372. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/getinvolved.html +0 -0
  373. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/home.html +0 -0
  374. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/home_learning.html +0 -0
  375. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/locked_out.html +0 -0
  376. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/locked_out_school_student.html +0 -0
  377. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/login/independent_student.html +0 -0
  378. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/login/student.html +0 -0
  379. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/login/student_class_code.html +0 -0
  380. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/login/teacher.html +0 -0
  381. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/partials/banner.html +0 -0
  382. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/partials/benefits.html +0 -0
  383. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/partials/card_list.html +0 -0
  384. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/partials/character_list.html +0 -0
  385. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/partials/delete_popup.html +0 -0
  386. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/partials/footer.html +0 -0
  387. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/partials/header.html +0 -0
  388. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/partials/headline.html +0 -0
  389. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/partials/hero_card.html +0 -0
  390. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/partials/info_popup.html +0 -0
  391. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/partials/invite_admin_teacher.html +0 -0
  392. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/partials/popup.html +0 -0
  393. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/partials/register_newsletter_tickbox.html +0 -0
  394. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/partials/screentime_popup.html +0 -0
  395. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/partials/service_unavailable_popup.html +0 -0
  396. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/partials/session_popup.html +0 -0
  397. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/partials/teacher_non_dashboard_subnav.html +0 -0
  398. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/partials/teacher_non_dashboard_subnav_account.html +0 -0
  399. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/play/student_dashboard.html +0 -0
  400. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/play/student_edit_account.html +0 -0
  401. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/play/student_join_organisation.html +0 -0
  402. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/register.html +0 -0
  403. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/reset_password.html +0 -0
  404. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/reset_password_confirm.html +0 -0
  405. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/reset_password_done.html +0 -0
  406. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/reset_password_email_sent.html +0 -0
  407. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/tag_manager/tag_manager_body.html +0 -0
  408. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/tag_manager/tag_manager_head.html +0 -0
  409. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/teach/base_registering.html +0 -0
  410. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/teach/class.html +0 -0
  411. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/teach/dashboard.html +0 -0
  412. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/teach/invited.html +0 -0
  413. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/teach/onboarding_classes.html +0 -0
  414. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/teach/onboarding_print.html +0 -0
  415. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/teach/onboarding_school.html +0 -0
  416. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/teach/onboarding_students.html +0 -0
  417. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/teach/teacher_add_external_student.html +0 -0
  418. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/teach/teacher_added_external_student.html +0 -0
  419. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/teach/teacher_dismiss_students.html +0 -0
  420. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/teach/teacher_edit_student.html +0 -0
  421. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/teach/teacher_move_all_classes.html +0 -0
  422. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/teach/teacher_move_students.html +0 -0
  423. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/teach/teacher_move_students_to_class.html +0 -0
  424. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/ten_year_map.html +0 -0
  425. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/portal/terms.html +0 -0
  426. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/two_factor/_base.html +0 -0
  427. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/two_factor/_wizard_actions.html +0 -0
  428. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/two_factor/_wizard_actions_enable_2fa.html +0 -0
  429. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/two_factor/_wizard_actions_submit.html +0 -0
  430. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/two_factor/_wizard_forms.html +0 -0
  431. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/two_factor/_wizard_forms_token.html +0 -0
  432. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/two_factor/backup_token.html +0 -0
  433. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/two_factor/core/backup_tokens.html +0 -0
  434. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/two_factor/core/login.html +0 -0
  435. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/two_factor/core/setup.html +0 -0
  436. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/two_factor/core/setup_complete.html +0 -0
  437. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/two_factor/profile/disable.html +0 -0
  438. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/two_factor/profile/profile.html +0 -0
  439. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templates/two_factor/setup_wizard_token.html +0 -0
  440. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templatetags/__init__.py +0 -0
  441. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templatetags/app_tags.py +0 -0
  442. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templatetags/banner_tags.py +0 -0
  443. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templatetags/benefits_tags.py +0 -0
  444. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templatetags/card_list_tags.py +0 -0
  445. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templatetags/future.py +0 -0
  446. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templatetags/headline_tags.py +0 -0
  447. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templatetags/hero_card_tags.py +0 -0
  448. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/templatetags/table_tags.py +0 -0
  449. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/__init__.py +0 -0
  450. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/base_test.py +0 -0
  451. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/conftest.py +0 -0
  452. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/migrations/__init__.py +0 -0
  453. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/migrations/test_migration_make_portaladmin_teacher.py +0 -0
  454. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/migrations/test_migration_preview_user_remove.py +0 -0
  455. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/migrations/test_migration_preview_users.py +0 -0
  456. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/migrations/test_migration_remove_front_page_news.py +0 -0
  457. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/migrations/test_migration_remove_guardian.py +0 -0
  458. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/migrations/test_migration_use_common_models.py +0 -0
  459. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/migrations/test_migration_verify_portaladmin.py +0 -0
  460. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/__init__.py +0 -0
  461. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/__init__.py +0 -0
  462. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/admin/__init__.py +0 -0
  463. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/admin/admin_base_page.py +0 -0
  464. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/admin/admin_data_page.py +0 -0
  465. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/admin/admin_map_page.py +0 -0
  466. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/base_page.py +0 -0
  467. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/email_verification_needed_page.py +0 -0
  468. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/forbidden_page.py +0 -0
  469. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/game_page.py +0 -0
  470. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/home_page.py +0 -0
  471. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/independent_login_page.py +0 -0
  472. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/password_reset_form_page.py +0 -0
  473. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/password_reset_page.py +0 -0
  474. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/play/__init__.py +0 -0
  475. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/play/account_page.py +0 -0
  476. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/play/dashboard_page.py +0 -0
  477. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/play/join_school_or_club_page.py +0 -0
  478. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/play/play_base_page.py +0 -0
  479. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/play_page.py +0 -0
  480. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/resources_page.py +0 -0
  481. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/signup_page.py +0 -0
  482. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/student_login_class_code.py +0 -0
  483. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/student_login_page.py +0 -0
  484. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/teach/__init__.py +0 -0
  485. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/teach/add_independent_student_to_class_page.py +0 -0
  486. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/teach/added_independent_student_to_class_page.py +0 -0
  487. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/teach/class_page.py +0 -0
  488. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/teach/dashboard_page.py +0 -0
  489. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/teach/dismiss_students_page.py +0 -0
  490. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/teach/edit_student_page.py +0 -0
  491. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/teach/move_class_page.py +0 -0
  492. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/teach/move_classes_page.py +0 -0
  493. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/teach/move_students_disambiguate_page.py +0 -0
  494. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/teach/move_students_page.py +0 -0
  495. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/teach/onboarding_classes_page.py +0 -0
  496. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/teach/onboarding_organisation_page.py +0 -0
  497. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/teach/onboarding_student_list_page.py +0 -0
  498. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/teach/onboarding_students_page.py +0 -0
  499. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/teach/teach_base_page.py +0 -0
  500. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/pageObjects/portal/teacher_login_page.py +0 -0
  501. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/selenium_test_case.py +0 -0
  502. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/snapshots/__init__.py +0 -0
  503. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/snapshots/snap_test_partials.py +0 -0
  504. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/test_2FA.py +0 -0
  505. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/test_admin.py +0 -0
  506. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/test_api.py +0 -0
  507. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/test_captcha_forms.py +0 -0
  508. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/test_emails.py +0 -0
  509. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/test_global_forms.py +0 -0
  510. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/test_helper_methods.py +0 -0
  511. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/test_independent_student.py +0 -0
  512. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/test_invite_teacher.py +0 -0
  513. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/test_middleware.py +0 -0
  514. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/test_organisation.py +0 -0
  515. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/test_partials.py +0 -0
  516. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/test_ratelimit.py +0 -0
  517. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/test_school_student.py +0 -0
  518. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/test_security.py +0 -0
  519. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/test_teacher.py +0 -0
  520. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/test_teacher_student.py +0 -0
  521. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/test_views.py +0 -0
  522. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/utils/__init__.py +0 -0
  523. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/utils/classes.py +0 -0
  524. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/tests/utils/messages.py +0 -0
  525. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/urls.py +0 -0
  526. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/__init__.py +0 -0
  527. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/about.py +0 -0
  528. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/admin.py +0 -0
  529. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/api.py +0 -0
  530. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/cron/__init__.py +0 -0
  531. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/cron/user.py +0 -0
  532. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/dotmailer.py +0 -0
  533. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/email.py +0 -0
  534. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/google_analytics.py +0 -0
  535. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/home.py +0 -0
  536. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/login/__init__.py +0 -0
  537. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/login/independent_student.py +0 -0
  538. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/login/student.py +0 -0
  539. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/login/teacher.py +0 -0
  540. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/organisation.py +0 -0
  541. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/play_landing_page.py +0 -0
  542. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/registration.py +0 -0
  543. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/student/__init__.py +0 -0
  544. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/student/edit_account_details.py +0 -0
  545. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/student/play.py +0 -0
  546. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/teach.py +0 -0
  547. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/teacher/__init__.py +0 -0
  548. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/teacher/dashboard.py +0 -0
  549. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/two_factor/__init__.py +0 -0
  550. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/two_factor/core.py +0 -0
  551. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/two_factor/form.py +0 -0
  552. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/views/two_factor/profile.py +0 -0
  553. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/portal/wsgi.py +0 -0
  554. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/pyproject.toml +0 -0
  555. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/setup.cfg +0 -0
  556. {codeforlife_portal-8.4.1 → codeforlife_portal-8.4.3}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: codeforlife-portal
3
- Version: 8.4.1
3
+ Version: 8.4.3
4
4
  Classifier: Programming Language :: Python
5
5
  Classifier: Programming Language :: Python :: 3.12
6
6
  Classifier: Framework :: Django
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: codeforlife-portal
3
- Version: 8.4.1
3
+ Version: 8.4.3
4
4
  Classifier: Programming Language :: Python
5
5
  Classifier: Programming Language :: Python :: 3.12
6
6
  Classifier: Framework :: Django
@@ -0,0 +1 @@
1
+ __version__ = "8.4.3"
@@ -327,7 +327,7 @@ class ClassLevelControlForm(forms.Form):
327
327
  for worksheet in episode.worksheets.filter(before_level__isnull=True):
328
328
  choices.append((f"worksheet:{worksheet.id}", episode.name))
329
329
 
330
- self.fields[episode.name] = forms.MultipleChoiceField(
330
+ self.fields[f"episode{episode.id}"] = forms.MultipleChoiceField(
331
331
  choices=itertools.chain(choices),
332
332
  widget=forms.CheckboxSelectMultiple(),
333
333
  required=False,
@@ -44,7 +44,7 @@
44
44
  </div>
45
45
  </div>
46
46
  <div class="col-sm-6">
47
- <a href="https://www.youtube-nocookie.com/embed/w0Pw_XikQSs?rel=0&amp;autoplay=1"
47
+ <a href="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdCZE3FuBgH5fHsGocKGv%2Fuploads%2FSEr3nRjqHATuyL3c4Zdt%2FCode%20for%20Life%20-%20Rapid%20Router%20for%20students.mp4?alt=media"
48
48
  class="youtube">
49
49
  <img src="{% static 'portal/img/thumbnail_play_rapid_router.png' %}"
50
50
  alt="Image of Rapid Router game with try button in bottom right corner">
@@ -327,11 +327,6 @@
327
327
  target="_blank">here</a>.
328
328
  By accepting analytics / performance cookies on our portal, you consent to the processing of data about you
329
329
  by Google in the manner and for the purposes set out above.</p>
330
- <p><strong>YouTube</strong>. While embedded YouTube videos on our website do not use cookies, your browser's
331
- Local Storage may be used by the video platform provider to enhance your viewing experience and collect
332
- analytics data. This data enables the platform to track your interaction with the video content and may
333
- gather information about your device and browsing behavior. The use of Local Storage by embedded video
334
- providers is subject to their respective policies.</p>
335
330
 
336
331
  <h6>6.4 Managing and disabling cookies</h6>
337
332
  <p>We make available a cookie management platform on our portal (provided by
@@ -655,11 +650,6 @@
655
650
  organisations who help them to interpret this information. They may also pass the information to other
656
651
  organisations if the law says they have to do so. If you choose to allow analytics / performance cookies on
657
652
  our site, you are consenting to Google using your data for the reasons above.</p>
658
- <p><strong>YouTube</strong>. While embedded YouTube videos on our website do not use cookies, your browser's
659
- Local Storage may be used by the video platform provider to enhance your viewing experience and collect
660
- analytics data. This data enables the platform to track your interaction with the video content and may
661
- gather information about your device and browsing behavior. The use of Local Storage by embedded video
662
- providers is subject to their respective policies.</p>
663
653
 
664
654
  <h6>Managing and disabling cookies</h6>
665
655
 
@@ -0,0 +1,261 @@
1
+ {% extends 'portal/base.html' %}
2
+ {% load static %}
3
+ {% load app_tags %}
4
+
5
+ {% block subNav %}
6
+ {% include "portal/partials/teacher_non_dashboard_subnav.html" %}
7
+ {% endblock subNav %}
8
+
9
+ {% block scripts %}
10
+ {{ block.super }}
11
+ <script type="text/javascript" src="{% static 'portal/js/levelControl.js' %}"></script>
12
+ <script>
13
+ // Uncheck the checkboxes that correspond to the already-locked levels
14
+ $(document).ready(function(){
15
+ const lockedLevelsIds = {{ locked_levels }};
16
+ const lockedWorksheetIds = {{ locked_worksheet_ids }};
17
+
18
+ lockedLevelsIds.forEach(function(lockedLevelId) {
19
+ const selector = `[value="level:${lockedLevelId}"]`;
20
+ $(selector).click();
21
+ })
22
+ lockedWorksheetIds.forEach(function(lockedWorksheetId) {
23
+ const selector = `[value="worksheet:${lockedWorksheetId}"]`;
24
+ $(selector).click();
25
+ })
26
+ })
27
+ </script>
28
+ {% endblock scripts %}
29
+
30
+ {% block content %}
31
+ <div id="teach_edit_class_page"></div>
32
+
33
+ <div class="background container">
34
+ <section>
35
+ <h4>Additional settings for class {{ class.name }} ({{ class.access_code }})</h4>
36
+ </section>
37
+ <p>
38
+ <a id="return_to_class_button" href="{% url 'view_class' class.access_code %}" class="button--menu button--menu--enabled">&lt; Back to Edit Class</a>
39
+ </p>
40
+ <p>You may change the name of the class, or change permissions to allow external requests from independent
41
+ students to join this class. You may also transfer the class to another teacher, or change permissions to
42
+ allow pupils to see their classmates' progress.</p>
43
+ </div>
44
+ <div class="background background--primary">
45
+ <div class="container">
46
+ <form method="post" class="pb-3">
47
+ {% csrf_token %}
48
+
49
+ {{ form.non_field_errors }}
50
+
51
+ <h5>Class details</h5>
52
+
53
+ <div class="row form--row">
54
+ <div class="form--row__input col-sm-6 col-md-6">
55
+ <div class="input--icon">
56
+ {{ form.name }}
57
+ <span class="iconify" data-icon="mdi:account-multiple"></span>
58
+ </div>
59
+ <small>{{ form.name.help_text }}</small>
60
+ {{ form.name.errors }}
61
+ </div>
62
+ <div class="form--row__input col-sm-12 col-md-6">
63
+ <div class="form__checkbox">
64
+ <div class="form__checkbox-input">
65
+ {{ form.classmate_progress }}
66
+ </div>
67
+ <label for="id_{{ form.classmate_progress.html_name }}" class="font-weight-normal">{{ form.classmate_progress.label }}</label>
68
+ </div>
69
+ {{ form.classmate_progress.errors }}
70
+ </div>
71
+ </div>
72
+
73
+ <div class="background">
74
+ <h5>External requests setting</h5>
75
+ <p>You can set up permissions for this class allowing students to send requests asking to join your class
76
+ from outside of your school or club.</p>
77
+ <p class="background"><strong>{{ external_requests_message }}</strong></p>
78
+ <div class="row form--row">
79
+ <div class="form--row__input col-md-6">
80
+ <label for="id_{{ form.external_requests.html_name }}" class="font-weight-normal">{{ form.external_requests.label }}</label>
81
+ {{ form.external_requests }}
82
+ <small>{{ form.external_requests.help_text }}</small>
83
+ {{ form.external_requests.errors }}
84
+ </div>
85
+ </div>
86
+ </div>
87
+
88
+ <div class="button-group">
89
+ <a id="cancel_button" class="button button--secondary button--secondary--dark" href="{% url 'view_class' class.access_code %}">Cancel</a>
90
+ <button id="update_button" type="submit" class="button button--primary" name="class_edit_submit">Update</button>
91
+ </div>
92
+ </form>
93
+ </div>
94
+ </div>
95
+
96
+ <div class="background container">
97
+ <h5>Levels access settings</h5>
98
+ <p>You may control access to levels here by selecting what you wish to display to the students.</p>
99
+
100
+ <form method="post">
101
+ {% csrf_token %}
102
+
103
+ {{ level_control_form.non_field_errors }}
104
+
105
+ <div id="episodes">
106
+ <div class="panel-intro d-flex align-items-center justify-content-between">
107
+ <h6>Rapid Router levels</h6>
108
+ <label class="pr-5 mb-0 mr-5">
109
+ <input type="checkbox" id="select-all-blockly-levels">
110
+ </label>
111
+ </div>
112
+ {% for episode in blockly_episodes %}
113
+ {% with episode.id|stringformat:"s" as episode_id %}
114
+ {% with "episode"|add:episode_id as episode_index %}
115
+ <div class="panel">
116
+ <div class="panel-header bg--{{ episode.difficulty }}" id="episode-{{episode.id}}">
117
+ <div class="d-flex align-items-center justify-content-end" data-toggle="collapse"
118
+ data-target="#collapse-{{episode.id}}" aria-expanded="false"
119
+ aria-controls="collapse-{{episode.id}}" data-parent="#episodes">
120
+ <p class="episode-title flex-grow-1">{{episode.name}}</p>
121
+ <span>Levels {{episode.first_level}}-{{episode.last_level}}</span>
122
+ <div class="episode_range_text collapsed d-flex align-items-center justify-content-end"
123
+ data-toggle="collapse" data-target="#collapse-{{episode.id}}"
124
+ aria-expanded="false" aria-controls="collapse-{{episode.id}}" data-parent="#episodes">
125
+ <label class="mb-0" for="select-all-episode-levels">
126
+ <input type="checkbox" value="{{ episode_index }}" id="select-all-blockly-levels-{{ episode.id }}">
127
+ </label>
128
+ </div>
129
+ </div>
130
+ </div>
131
+ <div id="collapse-{{episode.id}}" aria-labelledby="episode-{{episode.id}}" class="collapse">
132
+ <div class="panel-body d-flex justify-content-between">
133
+ <div class="d-flex flex-grow-1 flex-column justify-content-between">
134
+ {% for level in episode.levels %}
135
+ <p>{{level.name}}: {{level.title.strip | safe}}</p>
136
+ {% endfor %}
137
+ </div>
138
+ <div class="form__checkbox flex-column justify-content-between p-0">
139
+ {% for input in level_control_form|get_dict_item:episode_index %}
140
+ <div class="form__checkbox-input p-0">
141
+ {{ input }}
142
+ </div>
143
+ {% endfor %}
144
+ </div>
145
+ </div>
146
+ </div>
147
+ </div>
148
+ {% endwith %}
149
+ {% endwith %}
150
+ {% endfor %}
151
+ <div class="panel-intro d-flex align-items-center justify-content-between">
152
+ <h6>Python Den levels</h6>
153
+ <label class="pr-5 mb-0 mr-5">
154
+ <input type="checkbox" id="select-all-python-levels">
155
+ </label>
156
+ </div>
157
+ {% for episode in python_episodes %}
158
+ {% with episode.id|stringformat:"s" as episode_id %}
159
+ {% with "episode"|add:episode_id as episode_index %}
160
+ <div class="panel">
161
+ <div class="panel-header bg--{{ episode.difficulty }}" id="episode-{{episode.id}}">
162
+ <div class="d-flex align-items-center justify-content-end" data-toggle="collapse"
163
+ data-target="#collapse-{{episode.id}}" aria-expanded="false"
164
+ aria-controls="collapse-{{episode.id}}" data-parent="#episodes">
165
+ <p class="episode-title flex-grow-1">{{episode.name}}</p>
166
+ {% if episode.levels %}
167
+ {% if episode.first_level > 1009 %}
168
+ <span>Levels {{episode.first_level|stringformat:"i"|slice:"2:4"}}-{{episode.last_level|stringformat:"i"|slice:"2:4"}}</span>
169
+ {% else %}
170
+ {% if episode.last_level > 1009 %}
171
+ <span>Levels {{episode.first_level|stringformat:"i"|slice:"3:4"}}-{{episode.last_level|stringformat:"i"|slice:"2:4"}}</span>
172
+ {% else %}
173
+ <span>Levels {{episode.first_level|stringformat:"i"|slice:"3:4"}}-{{episode.last_level|stringformat:"i"|slice:"3:4"}}</span>
174
+ {% endif %}
175
+ {% endif %}
176
+ {% endif %}
177
+ <div class="episode_range_text collapsed d-flex align-items-center justify-content-end"
178
+ data-toggle="collapse" data-target="#collapse-{{episode.id}}"
179
+ aria-expanded="false" aria-controls="collapse-{{episode.id}}" data-parent="#episodes">
180
+ <label class="mb-0" for="select-all-episode-levels">
181
+ <input type="checkbox" value="{{ episode_index }}" id="select-all-python-levels-{{ episode.id }}">
182
+ </label>
183
+ </div>
184
+ </div>
185
+ </div>
186
+ <div id="collapse-{{episode.id}}" aria-labelledby="episode-{{episode.id}}" class="collapse">
187
+ <div class="panel-body d-flex justify-content-between">
188
+ <div class="d-flex flex-grow-1 flex-column justify-content-between">
189
+ {% for level in episode.levels %}
190
+ {% for worksheet in episode.worksheets %}
191
+ {% if worksheet.before_level == level.id %}
192
+ <p>{{episode.name}}{% if episode.worksheets|length > 1 %} pt. {{ worksheet.index }}{% endif %}</p>
193
+ {% endif %}
194
+ {% endfor %}
195
+ {% if level.name < 1010 %}
196
+ <p>{{level.name|stringformat:"i"|slice:"3:4"}}: {{level.title.strip | safe}}</p>
197
+ {% else %}
198
+ <p>{{level.name|stringformat:"i"|slice:"2:4"}}: {{level.title.strip | safe}}</p>
199
+ {% endif %}
200
+ {% endfor %}
201
+ {% for worksheet in episode.worksheets %}
202
+ {% if not worksheet.before_level %}
203
+ <p>{{episode.name}}{% if episode.worksheets|length > 1 %} pt. {{ worksheet.index }}{% endif %}</p>
204
+ {% endif %}
205
+ {% endfor %}
206
+ </div>
207
+ <div class="form__checkbox flex-column justify-content-between p-0">
208
+ {% for input in level_control_form|get_dict_item:episode_index %}
209
+ <div class="form__checkbox-input p-0">
210
+ {{ input }}
211
+ </div>
212
+ {% endfor %}
213
+ </div>
214
+ </div>
215
+ </div>
216
+ </div>
217
+ {% endwith %}
218
+ {% endwith %}
219
+ {% endfor %}
220
+ </div>
221
+
222
+ <div class="button-group">
223
+ <button id="lock_levels_button" class="button button--primary" type="submit" name="level_control_submit">
224
+ Save level settings</button>
225
+ </div>
226
+ </form>
227
+ </div>
228
+
229
+ <div class="background background--primary">
230
+ <div class="container">
231
+ <h5>Transfer class to another teacher</h5>
232
+ <p>Select a new teacher from your school or club to take over the above class from the list below.</p>
233
+
234
+ <p class="text-danger">
235
+ <strong>
236
+ Warning: The class will move immediately to the new teacher. Should you wish to undo this action,
237
+ please contact that teacher.
238
+ </strong>
239
+ </p>
240
+
241
+ <form method="post" class="pb-0">
242
+ {% csrf_token %}
243
+
244
+ {{ class_move_form.non_field_errors }}
245
+
246
+ <div class="row form--row">
247
+ <div class="form--row__input col-md-6">
248
+ <label for="id_{{ class_move_form.new_teacher.html_name }}" class="font-weight-normal"><strong>{{ class_move_form.new_teacher.label }}</strong></label>
249
+ {{ class_move_form.new_teacher }}
250
+ <small>{{ class_move_form.new_teacher.help_text }}</small>
251
+ {{ class_move_form.new_teacher.errors }}
252
+ </div>
253
+ </div>
254
+
255
+ <div class="button-group">
256
+ <button id="move_button" class="button button--primary" type="submit" name="class_move_submit">Transfer class</button>
257
+ </div>
258
+ </form>
259
+ </div>
260
+ </div>
261
+ {% endblock %}
@@ -94,7 +94,7 @@
94
94
  </div>
95
95
  </div>
96
96
  <div class="col-sm-6">
97
- <a href="https://www.youtube-nocookie.com/embed/tM5nKPYlz74?rel=0&amp;autoplay=1" class="youtube">
97
+ <a href="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdCZE3FuBgH5fHsGocKGv%2Fuploads%2FpNFqak7cyoAenDK1PEOZ%2FCode%20for%20Life%20-%20Programming%20teaching%20resources.mp4?alt=media" class="youtube">
98
98
  <img src="{% static 'portal/img/thumbnail_educate_resources.png' %}"
99
99
  alt="Image of Code for Life Resources on Gitbook with play button in bottom right corner">
100
100
  </a>
@@ -107,7 +107,7 @@
107
107
  <div class="container">
108
108
  <div class="row d-flex">
109
109
  <div class="col-sm-6">
110
- <a href="https://www.youtube-nocookie.com/embed/hv0fM0twrOE?rel=0&amp;autoplay=1"
110
+ <a href="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdCZE3FuBgH5fHsGocKGv%2Fuploads%2FrCbonCJjzNYlDTmvrPOA%2FCode%20for%20Life%20-%20Rapid%20Router%20for%20teachers.mp4?alt=media"
111
111
  class="youtube">
112
112
  <img src="{% static 'portal/img/thumbnail_educate_rapid_router.png' %}"
113
113
  alt="Image of Rapid Router logo and game with play button in bottom right corner">
@@ -175,7 +175,7 @@
175
175
  </div>
176
176
  </div>
177
177
  <div class="col-sm-6">
178
- <a href="https://www.youtube-nocookie.com/embed/xMmcg-LOc3I?rel=0&amp;autoplay=1" class="youtube">
178
+ <a href="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdCZE3FuBgH5fHsGocKGv%2Fuploads%2FB1XFzZC63IEYvYBzLFfC%2FPython_Den_teachers.mp4?alt=media" class="youtube">
179
179
  <img src="{% static 'portal/img/thumbnail_python_den.png' %}"
180
180
  alt="Python Den logo">
181
181
  </a>
@@ -138,7 +138,7 @@ class TestClass(TestCase):
138
138
  url = reverse("teacher_edit_class", kwargs={"access_code": access_code1})
139
139
  # POST request data for locking only the first level
140
140
  data = {
141
- "Getting Started": [
141
+ "episode1": [
142
142
  "level:2",
143
143
  "level:3",
144
144
  "level:4",
@@ -151,7 +151,7 @@ class TestClass(TestCase):
151
151
  "level:11",
152
152
  "level:12",
153
153
  ],
154
- "Shortest Route": [
154
+ "episode2": [
155
155
  "level:13",
156
156
  "level:14",
157
157
  "level:15",
@@ -159,7 +159,7 @@ class TestClass(TestCase):
159
159
  "level:17",
160
160
  "level:18",
161
161
  ],
162
- "Loops and Repetitions": [
162
+ "episode3": [
163
163
  "level:19",
164
164
  "level:20",
165
165
  "level:21",
@@ -171,13 +171,13 @@ class TestClass(TestCase):
171
171
  "level:27",
172
172
  "level:28",
173
173
  ],
174
- "Loops with Conditions": [
174
+ "episode4": [
175
175
  "level:29",
176
176
  "level:30",
177
177
  "level:31",
178
178
  "level:32",
179
179
  ],
180
- "If... Only": [
180
+ "episode5": [
181
181
  "level:33",
182
182
  "level:34",
183
183
  "level:35",
@@ -190,7 +190,7 @@ class TestClass(TestCase):
190
190
  "level:42",
191
191
  "level:43",
192
192
  ],
193
- "Traffic Lights": [
193
+ "episode6": [
194
194
  "level:44",
195
195
  "level:45",
196
196
  "level:46",
@@ -199,7 +199,7 @@ class TestClass(TestCase):
199
199
  "level:49",
200
200
  "level:50",
201
201
  ],
202
- "Limited Blocks": [
202
+ "episode7": [
203
203
  "level:53",
204
204
  "level:78",
205
205
  "level:79",
@@ -211,7 +211,7 @@ class TestClass(TestCase):
211
211
  "level:54",
212
212
  "level:55",
213
213
  ],
214
- "Procedures": [
214
+ "episode8": [
215
215
  # "level:85",
216
216
  # "level:52",
217
217
  # "level:60",
@@ -220,7 +220,7 @@ class TestClass(TestCase):
220
220
  # "level:87",
221
221
  # "level:61",
222
222
  ],
223
- "Blockly Brain Teasers": [
223
+ "episode9": [
224
224
  "level:56",
225
225
  "level:57",
226
226
  "level:58",
@@ -234,7 +234,7 @@ class TestClass(TestCase):
234
234
  "level:112",
235
235
  "level:92",
236
236
  ],
237
- "Introduction to Python": [
237
+ "episode10": [
238
238
  "level:93",
239
239
  "level:63",
240
240
  "level:64",
@@ -248,7 +248,7 @@ class TestClass(TestCase):
248
248
  "level:96",
249
249
  "level:97",
250
250
  ],
251
- "Python": [
251
+ "episode11": [
252
252
  "level:98",
253
253
  "level:70",
254
254
  "level:71",
@@ -291,7 +291,7 @@ class TestClass(TestCase):
291
291
 
292
292
  # Resubmitting to unlock level 1
293
293
  data = {
294
- "Getting Started": [
294
+ "episode1": [
295
295
  "level:1",
296
296
  "level:2",
297
297
  "level:3",
@@ -305,7 +305,7 @@ class TestClass(TestCase):
305
305
  "level:11",
306
306
  "level:12",
307
307
  ],
308
- "Shortest Route": [
308
+ "episode2": [
309
309
  "level:13",
310
310
  "level:14",
311
311
  "level:15",
@@ -313,7 +313,7 @@ class TestClass(TestCase):
313
313
  "level:17",
314
314
  "level:18",
315
315
  ],
316
- "Loops and Repetitions": [
316
+ "episode3": [
317
317
  "level:19",
318
318
  "level:20",
319
319
  "level:21",
@@ -325,13 +325,13 @@ class TestClass(TestCase):
325
325
  "level:27",
326
326
  "level:28",
327
327
  ],
328
- "Loops with Conditions": [
328
+ "episode4": [
329
329
  "level:29",
330
330
  "level:30",
331
331
  "level:31",
332
332
  "level:32",
333
333
  ],
334
- "If... Only": [
334
+ "episode5": [
335
335
  "level:33",
336
336
  "level:34",
337
337
  "level:35",
@@ -344,7 +344,7 @@ class TestClass(TestCase):
344
344
  "level:42",
345
345
  "level:43",
346
346
  ],
347
- "Traffic Lights": [
347
+ "episode6": [
348
348
  "level:44",
349
349
  "level:45",
350
350
  "level:46",
@@ -353,7 +353,7 @@ class TestClass(TestCase):
353
353
  "level:49",
354
354
  "level:50",
355
355
  ],
356
- "Limited Blocks": [
356
+ "episode7": [
357
357
  "level:53",
358
358
  "level:78",
359
359
  "level:79",
@@ -365,7 +365,7 @@ class TestClass(TestCase):
365
365
  "level:54",
366
366
  "level:55",
367
367
  ],
368
- "Procedures": [
368
+ "episode8": [
369
369
  # "level:85",
370
370
  # "level:52",
371
371
  # "level:60",
@@ -374,7 +374,7 @@ class TestClass(TestCase):
374
374
  # "level:87",
375
375
  # "level:61",
376
376
  ],
377
- "Blockly Brain Teasers": [
377
+ "episode9": [
378
378
  "level:56",
379
379
  "level:57",
380
380
  "level:58",
@@ -388,7 +388,7 @@ class TestClass(TestCase):
388
388
  "level:112",
389
389
  "level:92",
390
390
  ],
391
- "Introduction to Python": [
391
+ "episode10": [
392
392
  "level:93",
393
393
  "level:63",
394
394
  "level:64",
@@ -402,7 +402,7 @@ class TestClass(TestCase):
402
402
  "level:96",
403
403
  "level:97",
404
404
  ],
405
- "Python": [
405
+ "episode11": [
406
406
  "level:98",
407
407
  "level:70",
408
408
  "level:71",
@@ -546,12 +546,7 @@ class TestClassFrontend(BaseTest):
546
546
  class_name = "Class!"
547
547
 
548
548
  self.selenium.get(self.live_server_url)
549
- page = (
550
- HomePage(self.selenium)
551
- .go_to_teacher_login_page()
552
- .login_no_class(email, password)
553
- .open_classes_tab()
554
- )
549
+ page = HomePage(self.selenium).go_to_teacher_login_page().login_no_class(email, password).open_classes_tab()
555
550
 
556
551
  page = page.create_class(class_name, False)
557
552
 
@@ -5,7 +5,7 @@ def privacy_notice(request):
5
5
  return render(
6
6
  request,
7
7
  "portal/privacy_notice.html",
8
- {"last_updated": "27th February 2025", "last_updated_children": "27th February 2025"},
8
+ {"last_updated": "28th February 2025", "last_updated_children": "28th February 2025"},
9
9
  )
10
10
 
11
11
 
@@ -431,18 +431,18 @@ def mark_levels_to_lock_in_episodes(request, episodes, levels_to_lock_ids, locke
431
431
  :param levels_to_lock_ids: A list of Level IDs marked to be locked.
432
432
  """
433
433
  for episode in episodes:
434
- episode_name = episode["name"]
435
434
  episode_levels = episode["levels"]
436
435
  episode_worksheets = episode["worksheets"]
437
- if episode_name in request.POST:
436
+ episode_index = f"episode{episode['id']}"
437
+ if episode_index in request.POST:
438
438
  [
439
439
  levels_to_lock_ids.append(episode_level["id"])
440
440
  for episode_level in episode_levels
441
- if f'level:{episode_level["id"]}' not in request.POST.getlist(episode_name)
441
+ if f'level:{episode_level["id"]}' not in request.POST.getlist(episode_index)
442
442
  ]
443
443
  for episode_worksheet in episode_worksheets:
444
444
  worksheet_id = episode_worksheet["id"]
445
- if f"worksheet:{worksheet_id}" not in request.POST.getlist(episode_name):
445
+ if f"worksheet:{worksheet_id}" not in request.POST.getlist(episode_index):
446
446
  locked_worksheet_ids.append(worksheet_id)
447
447
  else:
448
448
  [levels_to_lock_ids.append(episode_level["id"]) for episode_level in episode_levels]
@@ -1 +0,0 @@
1
- __version__ = "8.4.1"