codeforlife-portal 5.33.5__py2.py3-none-any.whl → 8.9.9__py2.py3-none-any.whl

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.
Files changed (391) hide show
  1. cfl_common/common/__init__.py +1 -0
  2. cfl_common/common/app_settings.py +66 -0
  3. cfl_common/common/apps.py +6 -0
  4. cfl_common/common/context_processors.py +9 -0
  5. cfl_common/common/csp_config.py +85 -0
  6. cfl_common/common/helpers/__init__.py +0 -0
  7. cfl_common/common/helpers/data_migration_loader.py +42 -0
  8. cfl_common/common/helpers/emails.py +393 -0
  9. cfl_common/common/helpers/generators.py +52 -0
  10. cfl_common/common/helpers/organisation.py +10 -0
  11. cfl_common/common/mail.py +201 -0
  12. cfl_common/common/migrations/0001_initial.py +240 -0
  13. cfl_common/common/migrations/0002_emailverification.py +55 -0
  14. cfl_common/common/migrations/0003_aimmocharacter.py +31 -0
  15. cfl_common/common/migrations/0004_add_aimmocharacters.py +17 -0
  16. cfl_common/common/migrations/0005_add_worksheets.py +8 -0
  17. cfl_common/common/migrations/0006_update_aimmo_character_image_path.py +17 -0
  18. cfl_common/common/migrations/0007_add_pdf_names_to_first_two_worksheets.py +8 -0
  19. cfl_common/common/migrations/0008_unlock_worksheet_3.py +11 -0
  20. cfl_common/common/migrations/0009_add_blocked_time_to_teacher_and_student.py +24 -0
  21. cfl_common/common/migrations/0010_remove_teacher_title.py +18 -0
  22. cfl_common/common/migrations/0011_student_login_id.py +18 -0
  23. cfl_common/common/migrations/0012_usersession.py +39 -0
  24. cfl_common/common/migrations/0013_class_school.py +42 -0
  25. cfl_common/common/migrations/0014_login_type.py +29 -0
  26. cfl_common/common/migrations/0015_dailyactivity.py +31 -0
  27. cfl_common/common/migrations/0016_joinreleasestudent.py +42 -0
  28. cfl_common/common/migrations/0017_copy_email_to_username.py +18 -0
  29. cfl_common/common/migrations/0018_update_aimmo_character_image_path.py +15 -0
  30. cfl_common/common/migrations/0019_aimmocharacter_alt.py +16 -0
  31. cfl_common/common/migrations/0020_class_is_active_and_null_access_code.py +23 -0
  32. cfl_common/common/migrations/0021_school_is_active.py +28 -0
  33. cfl_common/common/migrations/0022_school_cleanup.py +29 -0
  34. cfl_common/common/migrations/0023_userprofile_aimmo_badges.py +22 -0
  35. cfl_common/common/migrations/0024_teacher_invited_by.py +25 -0
  36. cfl_common/common/migrations/0025_schoolteacherinvitation.py +47 -0
  37. cfl_common/common/migrations/0026_teacher_remove_join_request.py +22 -0
  38. cfl_common/common/migrations/0027_class_created_by.py +25 -0
  39. cfl_common/common/migrations/0028_coding_club_downloads.py +23 -0
  40. cfl_common/common/migrations/0029_dynamicelement.py +22 -0
  41. cfl_common/common/migrations/0030_add_maintenance_banner.py +25 -0
  42. cfl_common/common/migrations/0031_improve_admin_panel.py +56 -0
  43. cfl_common/common/migrations/0032_dailyactivity_level_control_submits.py +18 -0
  44. cfl_common/common/migrations/0033_password_reset_tracking_fields.py +23 -0
  45. cfl_common/common/migrations/0034_dailyactivity_daily_school_student_lockout_reset.py +18 -0
  46. cfl_common/common/migrations/0035_rename_lockout_fields.py +27 -0
  47. cfl_common/common/migrations/0036_rename_awaiting_email_verification_userprofile_is_verified.py +17 -0
  48. cfl_common/common/migrations/0037_migrate_email_verification.py +21 -0
  49. cfl_common/common/migrations/0038_delete_emailverification.py +16 -0
  50. cfl_common/common/migrations/0039_copy_email_to_username.py +18 -0
  51. cfl_common/common/migrations/0040_school_county.py +18 -0
  52. cfl_common/common/migrations/0041_populate_gb_counties.py +27 -0
  53. cfl_common/common/migrations/0042_totalactivity.py +25 -0
  54. cfl_common/common/migrations/0043_add_total_activity.py +30 -0
  55. cfl_common/common/migrations/0044_update_activity_models.py +33 -0
  56. cfl_common/common/migrations/0045_otp.py +23 -0
  57. cfl_common/common/migrations/0046_alter_school_country.py +19 -0
  58. cfl_common/common/migrations/0047_delete_school_postcode.py +16 -0
  59. cfl_common/common/migrations/0048_unique_school_names.py +42 -0
  60. cfl_common/common/migrations/0049_anonymise_orphan_users.py +29 -0
  61. cfl_common/common/migrations/0050_anonymise_orphan_schools.py +30 -0
  62. cfl_common/common/migrations/0051_verify_returning_users.py +26 -0
  63. cfl_common/common/migrations/0052_add_cse_fields.py +68 -0
  64. cfl_common/common/migrations/0053_clean_class_data.py +24 -0
  65. cfl_common/common/migrations/0054_delete_aimmo_models.py +20 -0
  66. cfl_common/common/migrations/0055_alter_schoolteacherinvitation_token.py +18 -0
  67. cfl_common/common/migrations/0056_set_non_school_teachers_as_non_admins.py +25 -0
  68. cfl_common/common/migrations/0057_teacher_teacher__is_admin.py +19 -0
  69. cfl_common/common/migrations/0058_userprofile_google_refresh_token_and_more.py +24 -0
  70. cfl_common/common/migrations/__init__.py +0 -0
  71. cfl_common/common/models.py +557 -0
  72. cfl_common/common/permissions.py +84 -0
  73. cfl_common/common/tests/__init__.py +0 -0
  74. cfl_common/common/tests/test_migration_anonymise_orphan_schools.py +30 -0
  75. cfl_common/common/tests/test_migration_anonymise_orphan_users.py +30 -0
  76. cfl_common/common/tests/test_migration_blocked_time.py +15 -0
  77. cfl_common/common/tests/test_migration_remove_teacher_title.py +13 -0
  78. cfl_common/common/tests/test_migration_unique_school_names.py +33 -0
  79. cfl_common/common/tests/test_migration_verify_returning_users.py +59 -0
  80. cfl_common/common/tests/test_models.py +87 -0
  81. cfl_common/common/tests/utils/__init__.py +0 -0
  82. cfl_common/common/tests/utils/classes.py +38 -0
  83. cfl_common/common/tests/utils/email.py +67 -0
  84. cfl_common/common/tests/utils/organisation.py +41 -0
  85. cfl_common/common/tests/utils/student.py +123 -0
  86. cfl_common/common/tests/utils/teacher.py +73 -0
  87. cfl_common/common/tests/utils/user.py +27 -0
  88. cfl_common/common/utils.py +56 -0
  89. cfl_common/setup.py +61 -0
  90. codeforlife_portal-8.9.9.dist-info/METADATA +226 -0
  91. {codeforlife_portal-5.33.5.dist-info → codeforlife_portal-8.9.9.dist-info}/RECORD +339 -241
  92. {codeforlife_portal-5.33.5.dist-info → codeforlife_portal-8.9.9.dist-info}/WHEEL +1 -1
  93. codeforlife_portal-8.9.9.dist-info/licenses/LICENSE.md +3 -0
  94. {codeforlife_portal-5.33.5.dist-info → codeforlife_portal-8.9.9.dist-info}/top_level.txt +1 -0
  95. deploy/middleware/maintenance.py +25 -0
  96. deploy/middleware/screentime_warning.py +29 -0
  97. deploy/middleware/security.py +5 -6
  98. deploy/middleware/session_timeout.py +4 -2
  99. deploy/middleware/tmp_basic_auth.py +41 -0
  100. example_project/portal_test_settings.py +239 -0
  101. example_project/settings.py +156 -17
  102. example_project/urls.py +5 -6
  103. portal/__init__.py +1 -1
  104. portal/admin.py +142 -29
  105. portal/app_settings.py +8 -7
  106. portal/forms/dotmailer.py +6 -4
  107. portal/forms/invite_teacher.py +19 -10
  108. portal/forms/organisation.py +137 -68
  109. portal/forms/play.py +53 -98
  110. portal/forms/registration.py +70 -164
  111. portal/forms/teach.py +147 -121
  112. portal/handlers.py +1 -2
  113. portal/helpers/decorators.py +30 -10
  114. portal/helpers/password.py +86 -47
  115. portal/helpers/ratelimit.py +32 -15
  116. portal/helpers/regexes.py +5 -0
  117. portal/helpers/request_handlers.py +10 -0
  118. portal/migrations/0044_auto_20150430_0959.py +6 -2
  119. portal/mixins/__init__.py +1 -0
  120. portal/mixins/cron_mixin.py +12 -0
  121. portal/permissions/__init__.py +1 -0
  122. portal/permissions/is_cron_request_from_google.py +14 -0
  123. portal/static/portal/img/10_years_anniversary.png +0 -0
  124. portal/static/portal/img/RR_logo_grass_background.png +0 -0
  125. portal/static/portal/img/coding_club_hero.jpg +0 -0
  126. portal/static/portal/img/coding_club_python_pack.png +0 -0
  127. portal/static/portal/img/facebook.png +0 -0
  128. portal/static/portal/img/gitbook.png +0 -0
  129. portal/static/portal/img/howe_dell_1.png +0 -0
  130. portal/static/portal/img/howe_dell_2.png +0 -0
  131. portal/static/portal/img/howe_dell_3.png +0 -0
  132. portal/static/portal/img/logo_cfl.png +0 -0
  133. portal/static/portal/img/logo_cfl_powered.svg +35 -0
  134. portal/static/portal/img/logo_cfl_reminder_cards.jpg +0 -0
  135. portal/static/portal/img/logo_ocado_group.png +0 -0
  136. portal/static/portal/img/logo_python_den.svg +21 -0
  137. portal/static/portal/img/long_europe_map.png +0 -0
  138. portal/static/portal/img/python_den.png +0 -0
  139. portal/static/portal/img/python_den_banner.svg +26 -0
  140. portal/static/portal/img/rapid_router_landing_hero.png +0 -0
  141. portal/static/portal/img/rr_advanced.png +0 -0
  142. portal/static/portal/img/ten_year_map_pin.svg +1 -0
  143. portal/static/portal/img/thumbnail_educate_rapid_router.png +0 -0
  144. portal/static/portal/img/thumbnail_educate_resources.png +0 -0
  145. portal/static/portal/img/thumbnail_play_rapid_router.png +0 -0
  146. portal/static/portal/img/thumbnail_python_den.png +0 -0
  147. portal/static/portal/img/twitter.png +0 -0
  148. portal/static/portal/js/carouselCards.js +25 -0
  149. portal/static/portal/js/common.js +96 -1
  150. portal/static/portal/js/independentLogin.js +16 -0
  151. portal/static/portal/js/independentRegistration.js +86 -0
  152. portal/static/portal/js/levelControl.js +77 -0
  153. portal/static/portal/js/lib/jquery.min.js +2 -0
  154. portal/static/portal/js/organisation_manage.js +142 -14
  155. portal/static/portal/js/passwordStrength.js +154 -64
  156. portal/static/portal/js/resetPassword.js +23 -0
  157. portal/static/portal/js/riveted.min.js +238 -239
  158. portal/static/portal/js/school.js +13 -0
  159. portal/static/portal/js/studentLogin.js +16 -0
  160. portal/static/portal/js/teacherEditStudent.js +23 -0
  161. portal/static/portal/js/teacherLogin.js +16 -0
  162. portal/static/portal/js/tenYearMap.js +14 -0
  163. portal/static/portal/sass/colorbox.scss +0 -1
  164. portal/static/portal/sass/modules/_colours.scss +1 -0
  165. portal/static/portal/sass/modules/_levels.scss +1 -1
  166. portal/static/portal/sass/modules/_mixins.scss +21 -0
  167. portal/static/portal/sass/partials/_banners.scss +4 -177
  168. portal/static/portal/sass/partials/_buttons.scss +12 -15
  169. portal/static/portal/sass/partials/_carousel.scss +129 -0
  170. portal/static/portal/sass/partials/_footer.scss +21 -22
  171. portal/static/portal/sass/partials/_forms.scss +60 -5
  172. portal/static/portal/sass/partials/_grids.scss +34 -61
  173. portal/static/portal/sass/partials/_header.scss +28 -20
  174. portal/static/portal/sass/partials/_images.scss +292 -39
  175. portal/static/portal/sass/partials/_popup.scss +18 -15
  176. portal/static/portal/sass/partials/_tables.scss +12 -20
  177. portal/static/portal/sass/partials/_text.scss +6 -10
  178. portal/static/portal/sass/styles.scss +0 -1
  179. portal/static/portal/video/code for life .pdf +0 -0
  180. portal/strings/about.py +5 -0
  181. portal/strings/coding_club.py +9 -0
  182. portal/strings/play.py +6 -5
  183. portal/strings/teach.py +1 -1
  184. portal/strings/teacher_resources.py +2 -8
  185. portal/strings/ten_year_map.py +13 -0
  186. portal/templates/403.html +2 -2
  187. portal/templates/404.html +1 -1
  188. portal/templates/500.html +2 -2
  189. portal/templates/{captcha → django_recaptcha}/includes/js_v2_invisible.html +3 -3
  190. portal/templates/{captcha → django_recaptcha}/widget_v2_invisible.html +2 -2
  191. portal/templates/email.html +4 -2
  192. portal/templates/maintenance.html +34 -0
  193. portal/templates/portal/about.html +94 -62
  194. portal/templates/portal/base.html +176 -152
  195. portal/templates/portal/coding_club.html +100 -0
  196. portal/templates/portal/contribute.html +56 -52
  197. portal/templates/portal/email_invitation_sent.html +1 -1
  198. portal/templates/portal/email_style_template.html +374 -0
  199. portal/templates/portal/email_verification_failed.html +1 -1
  200. portal/templates/portal/email_verification_needed.html +9 -9
  201. portal/templates/portal/form_shapes.html +20 -8
  202. portal/templates/portal/getinvolved.html +6 -6
  203. portal/templates/portal/home.html +35 -10
  204. portal/templates/portal/home_learning.html +19 -19
  205. portal/templates/portal/locked_out.html +0 -1
  206. portal/templates/portal/locked_out_school_student.html +16 -0
  207. portal/templates/portal/login/independent_student.html +31 -15
  208. portal/templates/portal/login/student.html +10 -7
  209. portal/templates/portal/login/student_class_code.html +7 -4
  210. portal/templates/portal/login/teacher.html +34 -17
  211. portal/templates/portal/partials/banner.html +18 -4
  212. portal/templates/portal/partials/benefits.html +1 -1
  213. portal/templates/portal/partials/card_list.html +34 -24
  214. portal/templates/portal/partials/character_list.html +5 -5
  215. portal/templates/portal/partials/cookie_list.html +161 -0
  216. portal/templates/portal/partials/delete_popup.html +18 -0
  217. portal/templates/portal/partials/footer.html +57 -26
  218. portal/templates/portal/partials/header.html +118 -117
  219. portal/templates/portal/partials/hero_card.html +4 -3
  220. portal/templates/portal/partials/info_popup.html +3 -3
  221. portal/templates/portal/partials/invite_admin_teacher.html +23 -0
  222. portal/templates/portal/partials/popup.html +7 -2
  223. portal/templates/portal/partials/register_newsletter_tickbox.html +2 -5
  224. portal/templates/portal/partials/screentime_popup.html +14 -0
  225. portal/templates/portal/partials/service_unavailable_popup.html +17 -0
  226. portal/templates/portal/partials/session_popup.html +19 -0
  227. portal/templates/portal/play/student_dashboard.html +42 -29
  228. portal/templates/portal/play/student_edit_account.html +64 -9
  229. portal/templates/portal/play.html +61 -41
  230. portal/templates/portal/privacy_notice.html +697 -0
  231. portal/templates/portal/register.html +122 -92
  232. portal/templates/portal/reset_password.html +20 -40
  233. portal/templates/portal/reset_password_confirm.html +9 -4
  234. portal/templates/portal/reset_password_email_sent.html +15 -13
  235. portal/templates/portal/teach/base_registering.html +1 -1
  236. portal/templates/portal/teach/class.html +4 -6
  237. portal/templates/portal/teach/dashboard.html +212 -117
  238. portal/templates/portal/teach/invited.html +90 -0
  239. portal/templates/portal/teach/onboarding_classes.html +5 -3
  240. portal/templates/portal/teach/onboarding_print.html +1 -1
  241. portal/templates/portal/teach/onboarding_school.html +26 -139
  242. portal/templates/portal/teach/onboarding_students.html +1 -1
  243. portal/templates/portal/teach/teacher_dismiss_students.html +73 -55
  244. portal/templates/portal/teach/teacher_edit_class.html +168 -11
  245. portal/templates/portal/teach/teacher_edit_student.html +12 -5
  246. portal/templates/portal/teach/teacher_move_all_classes.html +25 -38
  247. portal/templates/portal/teach/teacher_move_students_to_class.html +1 -1
  248. portal/templates/portal/teach.html +61 -42
  249. portal/templates/portal/ten_year_map.html +147 -0
  250. portal/templates/portal/terms.html +191 -42
  251. portal/templates/two_factor/core/login.html +71 -59
  252. portal/templates/two_factor/core/setup.html +58 -49
  253. portal/templates/two_factor/profile/disable.html +1 -1
  254. portal/templates/two_factor/profile/profile.html +35 -17
  255. portal/templatetags/app_tags.py +59 -84
  256. portal/templatetags/card_list_tags.py +0 -4
  257. portal/tests/base_test.py +14 -3
  258. portal/tests/conftest.py +0 -15
  259. portal/tests/migrations/test_migration_make_portaladmin_teacher.py +2 -6
  260. portal/tests/migrations/test_migration_preview_users.py +3 -9
  261. portal/tests/migrations/test_migration_remove_guardian.py +1 -3
  262. portal/tests/migrations/test_migration_use_common_models.py +2 -6
  263. portal/tests/migrations/test_migration_verify_portaladmin.py +1 -3
  264. portal/tests/pageObjects/portal/admin/admin_base_page.py +0 -21
  265. portal/tests/pageObjects/portal/base_page.py +16 -26
  266. portal/tests/pageObjects/portal/email_verification_needed_page.py +3 -2
  267. portal/tests/pageObjects/portal/game_page.py +12 -19
  268. portal/tests/pageObjects/portal/home_page.py +13 -15
  269. portal/tests/pageObjects/portal/independent_login_page.py +13 -17
  270. portal/tests/pageObjects/portal/password_reset_form_page.py +20 -4
  271. portal/tests/pageObjects/portal/password_reset_page.py +25 -0
  272. portal/tests/pageObjects/portal/play/account_page.py +18 -27
  273. portal/tests/pageObjects/portal/play/dashboard_page.py +4 -4
  274. portal/tests/pageObjects/portal/play/join_school_or_club_page.py +8 -10
  275. portal/tests/pageObjects/portal/play/play_base_page.py +5 -3
  276. portal/tests/pageObjects/portal/signup_page.py +28 -59
  277. portal/tests/pageObjects/portal/student_login_class_code.py +6 -9
  278. portal/tests/pageObjects/portal/student_login_page.py +6 -8
  279. portal/tests/pageObjects/portal/teach/add_independent_student_to_class_page.py +3 -3
  280. portal/tests/pageObjects/portal/teach/added_independent_student_to_class_page.py +3 -1
  281. portal/tests/pageObjects/portal/teach/class_page.py +36 -13
  282. portal/tests/pageObjects/portal/teach/dashboard_page.py +43 -84
  283. portal/tests/pageObjects/portal/teach/dismiss_students_page.py +7 -5
  284. portal/tests/pageObjects/portal/teach/edit_student_page.py +10 -8
  285. portal/tests/pageObjects/portal/teach/move_class_page.py +5 -10
  286. portal/tests/pageObjects/portal/teach/move_classes_page.py +4 -2
  287. portal/tests/pageObjects/portal/teach/move_students_disambiguate_page.py +4 -2
  288. portal/tests/pageObjects/portal/teach/move_students_page.py +6 -13
  289. portal/tests/pageObjects/portal/teach/onboarding_classes_page.py +5 -3
  290. portal/tests/pageObjects/portal/teach/onboarding_organisation_page.py +11 -49
  291. portal/tests/pageObjects/portal/teach/onboarding_student_list_page.py +7 -12
  292. portal/tests/pageObjects/portal/teach/onboarding_students_page.py +4 -27
  293. portal/tests/pageObjects/portal/teach/teach_base_page.py +6 -4
  294. portal/tests/pageObjects/portal/teacher_login_page.py +10 -16
  295. portal/tests/selenium_test_case.py +3 -43
  296. portal/tests/snapshots/snap_test_partials.py +11 -165
  297. portal/tests/test_2FA.py +15 -33
  298. portal/tests/test_admin.py +15 -97
  299. portal/tests/test_api.py +212 -91
  300. portal/tests/test_captcha_forms.py +2 -2
  301. portal/tests/test_class.py +374 -24
  302. portal/tests/test_emails.py +83 -20
  303. portal/tests/{test_newsletter_footer.py → test_global_forms.py} +5 -5
  304. portal/tests/test_helper_methods.py +30 -0
  305. portal/tests/test_independent_student.py +255 -144
  306. portal/tests/test_invite_teacher.py +318 -10
  307. portal/tests/test_middleware.py +96 -9
  308. portal/tests/test_organisation.py +78 -262
  309. portal/tests/test_partials.py +0 -88
  310. portal/tests/test_ratelimit.py +218 -36
  311. portal/tests/test_school_student.py +35 -40
  312. portal/tests/test_security.py +12 -31
  313. portal/tests/test_teacher.py +425 -325
  314. portal/tests/test_teacher_student.py +103 -91
  315. portal/tests/test_views.py +900 -76
  316. portal/tests/utils/classes.py +2 -2
  317. portal/tests/utils/messages.py +13 -28
  318. portal/urls.py +235 -166
  319. portal/views/admin.py +0 -332
  320. portal/views/api.py +82 -48
  321. portal/views/cron/__init__.py +1 -0
  322. portal/views/cron/user.py +322 -0
  323. portal/views/dotmailer.py +9 -1
  324. portal/views/email.py +33 -77
  325. portal/views/google_analytics.py +28 -0
  326. portal/views/home.py +126 -97
  327. portal/views/legal.py +13 -0
  328. portal/views/login/independent_student.py +5 -5
  329. portal/views/login/student.py +51 -14
  330. portal/views/login/teacher.py +2 -6
  331. portal/views/organisation.py +20 -189
  332. portal/views/registration.py +97 -17
  333. portal/views/student/edit_account_details.py +99 -72
  334. portal/views/student/play.py +81 -62
  335. portal/views/teacher/dashboard.py +421 -149
  336. portal/views/teacher/teach.py +226 -177
  337. portal/views/two_factor/core.py +22 -19
  338. portal/views/two_factor/profile.py +2 -2
  339. codeforlife_portal-5.33.5.dist-info/LICENSE.md +0 -577
  340. codeforlife_portal-5.33.5.dist-info/METADATA +0 -38
  341. deploy/permissions.py +0 -2
  342. example_project/manage.py +0 -10
  343. portal/autoconfig.py +0 -141
  344. portal/csp_config.py +0 -60
  345. portal/forms/add_game.py +0 -33
  346. portal/helpers/location.py +0 -121
  347. portal/static/portal/img/kurono_hero.jpg +0 -0
  348. portal/static/portal/img/kurono_landing_hero.png +0 -0
  349. portal/static/portal/img/kurono_logo.svg +0 -1
  350. portal/static/portal/img/kurono_logo_grey_background.svg +0 -1
  351. portal/static/portal/img/kurono_logo_mark.svg +0 -1
  352. portal/static/portal/img/kurono_resources_hero.jpg +0 -0
  353. portal/static/portal/img/kurono_story.png +0 -0
  354. portal/static/portal/img/ocado-swirl.svg +0 -22
  355. portal/static/portal/img/thumbnail_educate_kurono.png +0 -0
  356. portal/static/portal/img/thumbnail_educate_resources_and_progress_tracking.png +0 -0
  357. portal/static/portal/img/thumbnail_kurono_resources.png +0 -0
  358. portal/static/portal/img/thumbnail_play_kurono.png +0 -0
  359. portal/static/portal/img/x_close_video.png +0 -0
  360. portal/static/portal/js/aimmoGame.js +0 -106
  361. portal/static/portal/js/deleteWorkspaces.js +0 -14
  362. portal/static/portal/js/fuzzySchoolLookup.js +0 -46
  363. portal/static/portal/js/lib/jquery-3.5.1.min.js +0 -2
  364. portal/static/portal/js/lib/jquery-ui-1.12.1.min.js +0 -13
  365. portal/static/portal/sass/partials/_videos.scss +0 -10
  366. portal/static/portal/video/aimmo_play_now_background_video.mp4 +0 -0
  367. portal/strings/student_aimmo_dashboard.py +0 -6
  368. portal/templates/portal/admin/aggregated_data.html +0 -35
  369. portal/templates/portal/admin/map.html +0 -70
  370. portal/templates/portal/mouseflow.html +0 -9
  371. portal/templates/portal/partials/aimmo_games_table.html +0 -83
  372. portal/templates/portal/partials/register_over_required_age_tickbox.html +0 -9
  373. portal/templates/portal/play/independent_student_dashboard.html +0 -64
  374. portal/templates/portal/play/student_aimmo_dashboard.html +0 -63
  375. portal/templates/portal/privacy_policy.html +0 -483
  376. portal/templates/portal/reset_password_email.html +0 -9
  377. portal/templates/portal/teach/invite.html +0 -25
  378. portal/templates/portal/teach/teacher_aimmo_dashboard.html +0 -95
  379. portal/templates/portal/teach/teacher_resources.html +0 -68
  380. portal/templatetags/character_list_tags.py +0 -16
  381. portal/tests/pageObjects/portal/kurono_teacher_dashboard_page.py +0 -49
  382. portal/tests/pageObjects/portal/student_password_reset_form_page.py +0 -23
  383. portal/tests/pageObjects/portal/teach/onboarding_revoke_request_page.py +0 -20
  384. portal/tests/pageObjects/portal/teacher_password_reset_form_page.py +0 -23
  385. portal/tests/test_aimmo_dashboards.py +0 -172
  386. portal/tests/test_location.py +0 -217
  387. portal/tests/utils/aimmo_games.py +0 -30
  388. portal/views/aimmo/dashboard.py +0 -119
  389. portal/views/privacy_policy.py +0 -9
  390. portal/views/teacher/teacher_resources.py +0 -42
  391. {portal/views/aimmo → cfl_common}/__init__.py +0 -0
@@ -9,51 +9,38 @@
9
9
  {% block content %}
10
10
  <div id="move_all_classes_page"></div>
11
11
 
12
- <section class="background container">
13
- <h4>Move all classes for teacher {{ original_teacher.new_user|make_into_username }}</h4><br>
14
-
15
- <h6>Move all classes assigned to teacher {{ original_teacher.new_user.first_name }}
16
- {{ original_teacher.new_user.last_name }} to other teachers in {{ original_teacher.school.name }}.</h6>
17
- </section>
18
-
19
- <div class="background background--primary secondary-table">
20
- <div class="container">
21
- <h4>Move all classes</h4>
22
-
23
- <p>Select teachers to take over the classes from the lists below.</p>
24
-
25
- <form method="post">
26
- {% csrf_token %}
27
- <table class="header-primary data-primary">
12
+ <div class="background container">
13
+ <section>
14
+ <h4>Move all classes for teacher {{ original_teacher.new_user|make_into_username }}</h4>
15
+ </section>
16
+ <p><a href="{% url 'dashboard' %}" class="button--menu button--menu--enabled">< Back to dashboard</a></p>
17
+ <p>Please specify which teacher you would like the classes below to be moved to.</p>
18
+
19
+ <form method="post">
20
+ {% csrf_token %}
21
+ <table class="header-primary data-primary">
22
+ <tr>
23
+ <th><p>Class name</p></th>
24
+ <th><p>New teacher</p></th>
25
+ </tr>
26
+ {% for class in classes %}
28
27
  <tr>
29
- <th><p>Class</p></th>
30
- <th><p>New Teacher</p></th>
31
- </tr>
32
- {% for class in classes %}
33
- <tr>
34
- <td><p><small>{{ class.name }} ({{ class.access_code }})</small></p></td>
28
+ <td><p><small>{{ class.name }}</small></p></td>
35
29
  <td>
36
30
  <select class="wide" name="{{ class.access_code }}">
37
31
  {% for teacher in teachers %}
38
- <option value="{{ teacher.id }}">{{ teacher.new_user.first_name }} {{ teacher.new_user.last_name }}</option>
32
+ <option value="{{ teacher.id }}">
33
+ {{ teacher.new_user.first_name }} {{ teacher.new_user.last_name }}</option>
39
34
  {% endfor %}
40
35
  </select>
41
36
  </td>
42
37
  </tr>
43
- {% endfor %}
44
- </table>
45
- <div class="background button-group">
46
- <a class="button button--secondary button--secondary--dark" href="{% url 'dashboard' %}">Cancel</a>
47
- <button type="submit" id="move_classes_button" class="button button--primary">{{ submit_button_text }}</button>
48
- </div>
49
- </form>
50
- </div>
38
+ {% endfor %}
39
+ </table>
40
+ <div class="button-group">
41
+ <a class="button button--secondary button--secondary--dark" href="{% url 'dashboard' %}">Cancel</a>
42
+ <button type="submit" id="move_classes_button" class="button button--primary">{{ submit_button_text }}</button>
43
+ </div>
44
+ </form>
51
45
  </div>
52
-
53
- <script type="text/javascript">
54
- $(document).ready(function(){
55
- toggleStickySubnav($('.banner').outerHeight() + $('.menu').outerHeight());
56
- });
57
- </script>
58
-
59
46
  {% endblock %}
@@ -13,7 +13,7 @@
13
13
 
14
14
  <div class="background">
15
15
  <div class="container">
16
- <p><a href="{% url 'view_class' old_class.access_code %}" class="button--menu button--menu--enabled">&lt; Bakc to Edit class</a></p>
16
+ <p><a href="{% url 'view_class' old_class.access_code %}" class="button--menu button--menu--enabled">&lt; Back to Edit class</a></p>
17
17
  <p>Choose a class from the drop down menu below to move the student</p>
18
18
  <h5>Students currently in destination class</h5>
19
19
 
@@ -23,33 +23,39 @@
23
23
  <div class="carousel-inner" role="listbox">
24
24
  <div class="item active">
25
25
  <div class="col-sm-6 carousel-image-wrapper">
26
- <img src="{% static 'portal/img/icon_step_by_step.png' %}">
26
+ <img src="{% static 'portal/img/icon_step_by_step.png' %}"
27
+ alt="Illustration of person climbing steps with flag">
27
28
  </div>
28
29
  <div class="col-sm-6 carousel-text">
29
30
  <h5>
30
- The step-by-step nature of Rapid Router makes it simple for you and your students to
31
+ The step-by-step nature of Rapid Router
32
+ makes it simple for you and your students to
31
33
  gain experience quickly.
32
34
  </h5>
33
35
  </div>
34
36
  </div>
35
37
  <div class="item">
36
38
  <div class="col-sm-6 carousel-image-wrapper">
37
- <img src="{% static 'portal/img/icon_uk_flag.png' %}">
39
+ <img src="{% static 'portal/img/icon_uk_flag.png' %}"
40
+ alt="Illustration of The Union Jack flag">
38
41
  </div>
39
42
  <div class="col-sm-6 carousel-text">
40
43
  <h5>
41
- Our resources are aligned to the UK National computing curriculum, so you can gain
42
- the knowledge and confidence you need.
44
+ Our resources are aligned to the UK National
45
+ computing curriculum, so you can gain the
46
+ knowledge and confidence you need.
43
47
  </h5>
44
48
  </div>
45
49
  </div>
46
50
  <div class="item">
47
51
  <div class="col-sm-6 carousel-image-wrapper">
48
- <img src="{% static 'portal/img/icon_tracking.png' %}">
52
+ <img src="{% static 'portal/img/icon_tracking.png' %}"
53
+ alt="Illustration of a progress chart">
49
54
  </div>
50
55
  <div class="col-sm-6 carousel-text">
51
56
  <h5>
52
- Easy to use teacher dashboard includes scores to track student progress as well as
57
+ Easy to use teacher dashboard includes
58
+ scores to track student progress as well as
53
59
  comprehensive teaching resources.
54
60
  </h5>
55
61
  </div>
@@ -68,27 +74,30 @@
68
74
  <div class="flex-grow-1">
69
75
  <h4 class="mt-0">Resources and progress tracking</h4>
70
76
  <p>
71
- Once you've registered your personal details and logged in, you'll be able to create your school or
72
- club, or join other teachers at your institution.
77
+ Once you've registered your personal details and logged
78
+ in, you'll be able to create your school or club, or
79
+ join other teachers at your institution.
73
80
  </p>
74
81
  <p>
75
- You can sign up your class, download free teaching packs, including sessions plans, pupil resources and
76
- assessment tools and track pupils' progress. There are even videos to help you and your class understand
77
- what you'll be learning next.
82
+ You can sign up your class, download free teaching
83
+ packs, including sessions plans, pupil resources and
84
+ assessment tools and track pupils' progress. There are
85
+ even videos to help you and your class understand what
86
+ you'll be learning next.
78
87
  </p>
79
88
  </div>
80
89
  <div>
81
- <a href="{% url 'register' %}" class="button button--primary button-right-arrow">
90
+ <a href="{% url 'register' %}"
91
+ class="button button--primary button-right-arrow">
82
92
  Register now
83
93
  </a>
84
94
  </div>
85
95
  </div>
86
96
  <div class="col-sm-6">
87
- <img src="{% static 'portal/img/thumbnail_educate_resources_and_progress_tracking.png' %}">
88
- <!-- TODO: to add the video, replace the link below and uncomment
89
- <a href="https://www.youtube-nocookie.com/embed/xP-U-MJLk-g?rel=0&amp;autoplay=1" class="youtube">
90
- <img title="Watch Video" alt="Watch Video" src="{% static 'portal/img/thumbnail_intro_c4l.jpg' %}">
91
- </a> -->
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
+ <img src="{% static 'portal/img/thumbnail_educate_resources.png' %}"
99
+ alt="Image of Code for Life Resources on Gitbook with play button in bottom right corner">
100
+ </a>
92
101
  </div>
93
102
  </div>
94
103
  </div>
@@ -98,26 +107,33 @@
98
107
  <div class="container">
99
108
  <div class="row d-flex">
100
109
  <div class="col-sm-6">
101
- <img src="{% static 'portal/img/thumbnail_educate_rapid_router.png' %}">
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
+ class="youtube">
112
+ <img src="{% static 'portal/img/thumbnail_educate_rapid_router.png' %}"
113
+ alt="Image of Rapid Router logo and game with play button in bottom right corner">
114
+ </a>
102
115
  </div>
103
116
  <div class="col-sm-6 d-flex flex-column">
104
117
  <div class="flex-grow-1">
105
118
  <h4 class="mt-0">Rapid router</h4>
106
119
  <p>
107
- Rapid Router is a fun and engaging education resource that helps teach the first principles of
108
- computer programming covered in the UK Computing curriculum.
120
+ Rapid Router is a fun and engaging education resource
121
+ that helps teach the first principles of computer
122
+ programming covered in the UK Computing curriculum.
109
123
  </p>
110
124
  <p>
111
- Built on 'Blockly', an easy-to-use visual programming language, Rapid Router enables teachers to
112
- monitor and manage individual pupil progress and identify where more support is required.
125
+ Built on 'Blockly', an easy-to-use visual programming
126
+ language, Rapid Router enables teachers to monitor and
127
+ manage individual pupil progress and identify where more
128
+ support is required.
113
129
  </p>
114
130
  <p>
115
- See how the Rapid Router fits into
116
- <a href="https://code-for-life.gitbook.io/teaching-resources/rapid-router-resources/introduction-to-coding-england" target="_blank">
117
- English national curriculum &mdash; the computer science strand
131
+ See how Rapid Router fits into
132
+ <a href="https://docs.codeforlife.education/national-curriculum-alignment" target="_blank">
133
+ the English national curriculum &mdash; the computer science strand
118
134
  <span class="iconify" data-icon="mdi:open-in-new"></span></a>
119
135
  and
120
- <a href="https://code-for-life.gitbook.io/teaching-resources/rapid-router-resources/introduction-to-coding-scotland" target="_blank">
136
+ <a href="https://docs.codeforlife.education/national-curriculum-alignment-1" target="_blank">
121
137
  the Scottish curriculum.
122
138
  <span class="iconify" data-icon="mdi:open-in-new"></span>
123
139
  </a>
@@ -138,28 +154,31 @@
138
154
  <div class="row d-flex">
139
155
  <div class="col-sm-6 d-flex flex-column">
140
156
  <div class="flex-grow-1">
141
- <h4 class="mt-0">Kurono</h4>
142
- <p>
143
- Kurono is our multiplayer game that is also aligned to the National Curriculum. It is aimed at
144
- Key stages 3 and 4 and concentrates on text-based programming using Python. Students follow a
145
- set of challenges that enable them to embed their skills by completing the exercises alongside
146
- their classmates.
147
- </p>
148
- <p>
149
- <a href="https://code-for-life.gitbook.io/teaching-resources/v/kurono-teaching-resources/teacher-guides/kurono-and-the-national-curriculum-for-computing" target="_blank">
150
- See how Kurono relates to Key Stages 3 & 4 of the computer science strand here.
151
- <span class="iconify" data-icon="mdi:open-in-new"></span>
152
- </a>
157
+ <h4 class="mt-0">Python programming</h4>
158
+ <p>The Python Den is an exploration of Python
159
+ programming through a comprehensive course with free
160
+ lesson plans, videos and worksheets to support you in
161
+ teaching Python programming to your students. From
162
+ foundational syntax to advanced concepts like loops
163
+ and data manipulation, each session is tailored to
164
+ engage young learners.</p>
165
+ <p>We aim to provide a tried-and-tested, structured set
166
+ of lessons that you can use in your classroom, no
167
+ matter your own level of experience.
153
168
  </p>
154
169
  </div>
155
170
  <div>
156
- <a href="{% url 'register' %}" class="button button--primary button-right-arrow">
157
- Register now
171
+ <a href="{% url 'python_levels' %}"
172
+ class="button button--primary button-right-arrow">
173
+ Try out Python Den
158
174
  </a>
159
175
  </div>
160
176
  </div>
161
177
  <div class="col-sm-6">
162
- <img src="{% static 'portal/img/thumbnail_educate_kurono.png' %}">
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
+ <img src="{% static 'portal/img/thumbnail_python_den.png' %}"
180
+ alt="Python Den logo">
181
+ </a>
163
182
  </div>
164
183
  </div>
165
184
  </div>
@@ -0,0 +1,147 @@
1
+ {% extends 'portal/base.html' %}
2
+ {% load static %}
3
+ {% load app_tags banner_tags headline_tags %}
4
+
5
+ {% block subNav %}
6
+ {% banner banner_name="BANNER" %}
7
+ {% endblock subNav %}
8
+
9
+ {% block scripts %}
10
+ {{ block.super }}
11
+ <script defer type="text/javascript" src="{% static 'portal/js/tenYearMap.js' %}"></script>
12
+ {% endblock scripts %}
13
+
14
+ {% block content %}
15
+
16
+ <div class="background">
17
+ {% headline headline_name="HEADLINE" %}
18
+ </div>
19
+
20
+ <div class="background container" id="map-container">
21
+ <section class="background background--primary">
22
+ <img title="world map" alt="World map" src="{% static 'portal/img/long_europe_map.png' %}" width="95%"/>
23
+ <button class="map-pin" id="hatfield" onclick="setActivePin('hatfield')" data-target="#carousel-ten-year-map" data-slide-to="0">
24
+ <map-pin id="hatfield-pin" />
25
+ </button>
26
+ <button class="map-pin" id="barcelona" onclick="setActivePin('barcelona')" data-target="#carousel-ten-year-map" data-slide-to="1">
27
+ <map-pin id="barcelona-pin" />
28
+ </button>
29
+ <button class="map-pin" id="krakow" onclick="setActivePin('krakow')" data-target="#carousel-ten-year-map" data-slide-to="2">
30
+ <map-pin id="krakow-pin" />
31
+ </button>
32
+ <button class="map-pin" id="sofia" onclick="setActivePin('sofia')" data-target="#carousel-ten-year-map" data-slide-to="3">
33
+ <map-pin id="sofia-pin" />
34
+ </button>
35
+ </section>
36
+ </div>
37
+
38
+ <div class="background">
39
+ <div class="container">
40
+ <div class="row">
41
+ <div class="col-sm-12">
42
+ <div id="carousel-ten-year-map" class="carousel slide">
43
+ <ol class="carousel-indicators">
44
+ <li data-target="#carousel-ten-year-map" data-slide-to="0" class="active" onclick="setActivePin('hatfield')"></li>
45
+ <li data-target="#carousel-ten-year-map" data-slide-to="1" onclick="setActivePin('barcelona')"></li>
46
+ <li data-target="#carousel-ten-year-map" data-slide-to="2" onclick="setActivePin('krakow')"></li>
47
+ <li data-target="#carousel-ten-year-map" data-slide-to="3" onclick="setActivePin('sofia')"></li>
48
+ </ol>
49
+
50
+ <div class="carousel-inner" role="listbox">
51
+ <div class="item active" id="hatfield-carousel">
52
+ <div>
53
+ <div class="col-sm-6 carousel-column--images">
54
+ <div class="row carousel-image-wrapper">
55
+ <img src="{% static 'portal/img/howe_dell_1.png' %}" class="carousel-image carousel-image--column" alt="Code for Life volunteers outside Howe Dell Primary School">
56
+ </div>
57
+ <div class="row carousel-image-wrapper">
58
+ <img src="{% static 'portal/img/howe_dell_2.png' %}" class="carousel-image carousel-image--column" alt="CfL volunteers outside Howe Dell Primary School showing off their Code for Life T-shirts">
59
+ </div>
60
+ </div>
61
+ <div class="col-sm-6 carousel-text">
62
+ <h4 class="carousel-header">
63
+ <b>Howe Dell Primary School, Hatfield, UK</b>
64
+ </h4>
65
+ <h5>
66
+ July 2024
67
+ </h5>
68
+ <p>
69
+ We completed the UK leg of our world tour with an enthusiastic reception from Year 4 students at Howe Dell Primary School
70
+ in Hatfield. The pupils were captivated by our presentation on different types of robots and Ocado Group's automation
71
+ technology used in sorting and packing deliveries. They were then tasked with designing robots to solve problems, producing
72
+ creative concepts like robot childminders and homework helpers. Midway through, we introduced them to coding with Rapid Router,
73
+ explaining algorithms and letting them experiment with the levels. The students were thrilled about the competition for the
74
+ best robot design, which included a prize of a golden 3D printed medal. Teachers praised the engaging and educational workshop,
75
+ while Ocado volunteers found the experience rewarding and beneficial for developing their communication and teaching skills.
76
+ The children's designs were exceptional, making the judging process challenging, but ultimately a few standout innovations were
77
+ selected.
78
+ </p>
79
+ <div class="carousel-button">
80
+ <a href="https://www.linkedin.com/company/code-for-life-uk/posts/?feedView=all" target="_blank" class="button button--primary button-right-arrow">Learn more</a>
81
+ </div>
82
+ </div>
83
+ </div>
84
+ <div>
85
+ <img src="{% static 'portal/img/howe_dell_3.png' %}" class="carousel-image"" alt="The three winners of Howe Dell Primary School's robot design challenge">
86
+ </div>
87
+ </div>
88
+ <div class="item" id="barcelona-carousel">
89
+ <div class="col-sm-6 carousel-image-wrapper">
90
+ <img src="{% static 'portal/img/logo_cfl.png' %}" alt="CFL logo">
91
+ </div>
92
+ <div class="col-sm-6 carousel-text">
93
+ <h5>
94
+ Barcelona
95
+ </h5>
96
+ <p>
97
+ Coming soon!
98
+ </p>
99
+ </div>
100
+ </div>
101
+ <div class="item" id="krakow-carousel">
102
+ <div class="col-sm-6 carousel-image-wrapper">
103
+ <img src="{% static 'portal/img/logo_cfl.png' %}" alt="CFL logo">
104
+ </div>
105
+ <div class="col-sm-6 carousel-text">
106
+ <h5>
107
+ Kraków
108
+ </h5>
109
+ <p>
110
+ Coming soon!
111
+ </p>
112
+ </div>
113
+ </div>
114
+ <div class="item" id="sofia-carousel">
115
+ <div class="col-sm-6 carousel-image-wrapper">
116
+ <img src="{% static 'portal/img/logo_cfl.png' %}" alt="CFL logo">
117
+ </div>
118
+ <div class="col-sm-6 carousel-text">
119
+ <h5>
120
+ Sofia
121
+ </h5>
122
+ <p>
123
+ Coming soon!
124
+ </p>
125
+ </div>
126
+ </div>
127
+ </div>
128
+ </div>
129
+ </div>
130
+ </div>
131
+ </div>
132
+ </div>
133
+
134
+ <script>
135
+ customElements.define("map-pin", class extends HTMLElement {
136
+ connectedCallback() {
137
+ setTimeout(() => {
138
+ this.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" height="40px" viewBox="0 0 24 24" width="40px" fill="#FFC709">
139
+ <path d="M0 0h24v24H0z" fill="none"/>
140
+ <path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"/>
141
+ </svg>`
142
+ })
143
+ }
144
+ })
145
+ </script>
146
+
147
+ {% endblock content %}