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
@@ -1,483 +0,0 @@
1
- {% extends 'portal/base.html' %}
2
- {% load staticfiles %}
3
- {% load app_tags %}
4
-
5
- {% block subNav %}
6
- <section class="banner banner--teacher">
7
- <h1 class="banner__text--primary">Privacy policy</h1>
8
- </section>
9
- {% endblock subNav %}
10
-
11
- {% block content %}
12
- <div class="background container">
13
- <div id="privacy"></div>
14
- <p><strong>Last Updated: {{ last_updated }}</strong></p>
15
- <p>Please read this policy carefully. This policy contains important information on who manages the Code for Life
16
- portal, how and why we collect information about you (for example, your name and email address), how we use your
17
- information, and with which persons we share your information. We also explain what rights you have in relation
18
- to your personal information, for example, the right to say no to the use of your information in certain cases,
19
- and how to contact us if you want to find out more about your rights or if you have other questions about this
20
- policy.</p>
21
- <ol class="list--two-columns">
22
- <li><p><a href="#commitment">Our commitment</a></p></li>
23
- <li><p><a href="#who-we-are">Who we are</a></p></li>
24
- <li><p><a href="#types-of-information">Types of information we hold about you</a></p></li>
25
- <li><p><a href="#information-use">How we will use information about you</a></p></li>
26
- <li><p><a href="#change-of-purpose">Change of purpose</a></p></li>
27
- <li><p><a href="#cookies">Cookies</a></p></li>
28
- <li><p><a href="#third-parties">Sharing your personal information with other persons</a></p></li>
29
- <li><p><a href="#data-retention">How long will we keep your personal information?</a></p></li>
30
- <li><p><a href="#your-rights">Your rights</a></p></li>
31
- <li><p><a href="#security">Keeping your personal information secure</a></p></li>
32
- <li><p><a href="#how-to-complain">How to complain</a></p></li>
33
- <li><p><a href="#changes">Changes to this Privacy Policy</a></p></li>
34
- <li><p><a href="#contact-us">How to contact us</a></p></li>
35
- <li><p><a href="#extra-help">Do you need extra help?</a></p></li>
36
- </ol>
37
-
38
- <hr>
39
-
40
- <h5 id="commitment">1. Our commitment</h5>
41
- <p>We are deeply committed to creating a safe and secure online learning environment for all students, teachers,
42
- parents and guardians who use the Code for Life portal.</p>
43
- <ol>
44
- <li><p>We strive to give you control over the personal information that you give us, and we take the protection
45
- of your information very seriously.</p></li>
46
- <li><p>We take extra precautions for the safety and privacy of our younger learners. Where personal information
47
- could be entered, for example when a student names a level, the teacher is notified via email and the
48
- teacher has the ability to delete the level if its name is rude or compromising.</p></li>
49
- <li><p>Our portal only relates to Code for Life and we do not show advertisements on our website or within our
50
- lessons.</p></li>
51
- </ol>
52
-
53
- <hr>
54
-
55
- <h5 id="who-we-are">2. Who we are</h5>
56
- <p>We are a company called “Ocado Innovation Limited” or “Ocado Technology”, and we own the Code for Life learning
57
- portal. In this policy, we also use the name “Ocado” when we refer to us. Our office is at Buildings 1 & 2
58
- Trident Place, Hatfield Business Park, Mosquito Way, Hatfield, AL10 9UL.</p>
59
- <p>We are responsible for the personal information we collect about you on the Code for Life portal.</p>
60
-
61
- <hr>
62
-
63
- <h5 id="types-of-information">3. Types of information we hold about you</h5>
64
- <p>Your personal data, or personal information, is any information relating to you. It does not include anonymous
65
- information, which cannot be traced back to you or another person (anonymous data).</p>
66
- <p>When you use the Code for Life portal and our services we collect the following personal information:</p>
67
-
68
- <p>If you are a <strong>Student</strong>, we collect:</p>
69
- <ul>
70
- <li><p>Your name, password and class code: we collect this information when your teacher creates an account.</p></li>
71
- <li><p>Your school / club / teaching or education institution and your class code and class name, if you are a
72
- school Student: your Teacher provides this information to us.</p></li>
73
- <li><p>Performance information about your performance and progress (for example, what levels you have completed
74
- and what levels you create), and</p></li>
75
- <li><p>The coding you create (including any avatars you may create): we collect this information when you use
76
- the Code for Life portal.</p></li>
77
- <li><p>Your messages and queries you may send us: when you use the “Contact Us” form or email.</p></li>
78
- <li><p>When your account was created and when you last logged into your account: this information is generated
79
- at the time your account is created or you log in.</p></li>
80
- <li><p>Technical information, such as the IP address and other information about the device you use to access
81
- the Code for Life portal, and technical information about how you use these (for example, which pages on our
82
- portal you visit, for how long you stay on each page, etc.): when you navigate the portal and allow the use
83
- of non-essential cookies.</p></li>
84
- <li><p>Data from Code for Life surveys you may take part in.</p></li>
85
- </ul>
86
-
87
- <p>If you are a <strong>Independent Student</strong>, we collect:</p>
88
- <ul>
89
- <li><p>Your name, email address, username and password: we collect this information when you create an account.</p></li>
90
- <li><p>Performance information about your performance and progress (for example, what levels you have completed
91
- and what levels you create), and</p></li>
92
- <li><p>The coding you create (including any avatars you may create): we collect this information when you use
93
- the Code for Life portal.</p></li>
94
- <li><p>Your messages and queries you may send us: when you use the “Contact Us” form or email.</p></li>
95
- <li><p>When you created an account and when you last logged in to your account: this information is generated at
96
- the time you create your account or log in.</p></li>
97
- <li><p>Technical information, such as the IP address and other information about the device you use to access
98
- the Code for Life portal, and technical information about how you use these (for example, which pages on our
99
- portal you visit, for how long you stay on each page, etc.): when you navigate the portal and allow the use
100
- of non-essential cookies.</p></li>
101
- <li><p>Data from Code for Life surveys you may take part in.</p></li>
102
- <li><p>Your marketing preferences, if you select to sign up to our newsletter.</p></li>
103
- <li><p>If you are under 13 years old, we will collect the data of your parent or guardian as you will need to
104
- ask them to register on your behalf.</p></li>
105
- </ul>
106
-
107
- <p>If you are a <strong>Teacher</strong>, we collect:</p>
108
- <ul>
109
- <li><p>Your first and last names, email address and password: we collect this information when you create an
110
- account.</p></li>
111
- <li><p>Your school / club / teaching or educational institution, the classes you create, the students you
112
- register in each class, and the teachers you invite; also, any material you create: when you use the portal.</p></li>
113
- <li><p>Your messages and queries you may send us: when you use the “Contact Us” form or email.</p></li>
114
- <li><p>When you created an account and when you last logged in to your account: this information is generated at
115
- the time you create your account or log in.</p></li>
116
- <li><p>Technical information, such as the IP address and other information about the device you use to access
117
- the Code for Life portal, and technical information about how you use these (for example, which pages on our
118
- portal you visit, for how long you stay on each page, etc.): when you navigate the portal and allow the use
119
- of non-essential cookies.</p></li>
120
- <li><p>Data from Code for Life surveys you may take part in.</p></li>
121
- <li><p>Your marketing preferences, if you select to sign up to our newsletter.</p></li>
122
- </ul>
123
-
124
- <p>If you are a <strong>Website visitor</strong>, we collect:</p>
125
- <ul>
126
- <li><p>Technical information, such as the IP address and other information about the device you use to access
127
- the Code for Life portal, and technical information about how you use these (for example, which pages on our
128
- portal you visit, for how long you stay on each page, etc.): when you navigate the portal and allow the use
129
- of non-essential cookies.</p></li>
130
- <li><p>Your email address and marketing preferences, if you select to sign up to our newsletter.</p></li>
131
- </ul>
132
-
133
- <hr>
134
-
135
- <h5 id="information-use">4. How we will use information about you</h5>
136
- <p>We need all the categories of information that we describe above, so that we can:</p>
137
- <ul>
138
- <li><p>perform our agreement with you and provide you with our services. For example, to enable you to create an
139
- account and to access the portal and our learning materials. Having an account gives teachers access to
140
- course material, class and individual student management features, and also it gives students access to the
141
- portal in order to learn how to code within a supported environment (classroom), or independently (at home).</p></li>
142
- <li>fulfil our legitimate interests, such as our interests to:
143
- <ul>
144
- <li><p>improve our services.</p></li>
145
- <li><p>ensure that our portal is secure and is used in accordance with our Terms. For example, we may
146
- use account information to limit a user temporarily or permanently from the Code for Life portal if
147
- that user engages in inappropriate use of the site (e.g. giving other people access to their user
148
- account, malicious misuse of the portal, including spam).</p></li>
149
- <li><p>send you important information: for example, we use your email address to send you account
150
- verification emails, emails to notify you about changes to our Terms, or about any maintenance
151
- impacting your access to the portal. Sometimes, we may be required by law to send you this
152
- information.</p></li>
153
- <li><p>provide customer support and respond to your queries, for example, when you use the Contact Us
154
- form. We strongly advise you not to disclose personal information (other than name and email
155
- address) when contacting us – messages you exchange on the portal and any forms you submit to us
156
- will be recorded. The Contact Us form is strictly for the purpose of user support. User-initiated
157
- communication concerning topics other than those relating directly to the Code for Life portal,
158
- including resources or user experience, may not be answered. Please be aware that we will never ask
159
- for personal information other than what is required to identify your account and respond to your
160
- queries, and we will never ask for your password.</p></li>
161
- <li><p>protect our legal rights, for example, if we need to defend ourselves in court.</p></li>
162
- </ul>
163
- </li>
164
- <li><p>with your permission (or if you are under 13, the permission of the person who looks after you) to send
165
- you marketing communications (for example, our newsletter or communications about our portal features or
166
- upcoming events). You have the right to change your mind at any time (see the “Your Rights” section below
167
- for more information).</p></li>
168
- <li><p>with your permission (or if you are under 13, the permission of the person who looks after you), use
169
- cookies to collect information about how you use our portal, in order to analyse and improve user
170
- experience. This information is usually anonymised and used at an aggregate level. Please see section
171
- “Cookies” below for more information on what information we collect and how we use cookies.</p></li>
172
- </ul>
173
-
174
- <p>We summarise below the purposes for which we use your personal data and the lawful basis on which we rely.</p>
175
-
176
- <table class="table table-bordered">
177
- <tr>
178
- <th><strong>Purpose</strong></th>
179
- <th><strong>Legal basis</strong></th>
180
- </tr>
181
- <tr>
182
- <td><p>To allow you to create an account and provide our services to you through our portal, such as
183
- providing course material and resources</p></td>
184
- <td><p>Contractual necessity: the information is necessary to fulfil our contract with you.</p></td>
185
- </tr>
186
- <tr>
187
- <td><p>To manage our relationship with you, including to allow you to manage your account, provide customer
188
- support, to handle your requests and queries, to provide you with information about our services that
189
- you use, or information about changes in our Terms or this Policy</p></td>
190
- <td>
191
- <ul>
192
- <li><p>Contractual necessity: to the extent the information is necessary to fulfil our contract with
193
- you (e.g. to ensure that we provide to you the services that you have requested).
194
- </p></li>
195
- <li><p>Legitimate interests: to the extent the information is necessary to process queries and
196
- effectively manage our relationship with you as user of our services.</p></li>
197
- <li><p>Compliance with a legal obligation: to the extent we are required by law to contact you in
198
- order to provide certain information (for example, to notify you of changes to our Terms)
199
- </p></li>
200
- </ul>
201
- </td>
202
- </tr>
203
- <tr>
204
- <td><p>To send you our newsletters and other promotional material about Code for Life</p></td>
205
- <td>
206
- <ul>
207
- <li><p>Your consent, where this is required by law.</p></li>
208
- <li><p>Otherwise, when consent is not required, we will rely on our legitimate interest to keep you
209
- informed of our services, to the extent this is permitted by law.</p></li>
210
- </ul>
211
- </td>
212
- </tr>
213
- <tr>
214
- <td><p>To carry out analysis and compile statistics about the use of our portal, and the use of our
215
- services, in order to enable us to provide a better service, feature and functionality</p></td>
216
- <td>
217
- <ul>
218
- <li><p>Your consent: where we obtain this information by using cookies.</p></li>
219
- <li><p>Our legitimate interest to ensure the smooth and effective functioning of our portal and
220
- services, to make sound business decisions about our services and to design, inform and deploy
221
- our business strategies.</p></li>
222
- </ul>
223
- </td>
224
- </tr>
225
- <tr>
226
- <td><p>To authenticate your account and to ensure the security of our portal, information systems and
227
- assets, to monitor compliance with our Terms, to prevent illegal activities in relation to our services.</p></td>
228
- <td><p>Our legitimate interest to protect our business assets against illegal or inappropriate activities or
229
- security threats and your legitimate interest to protect the security of your account and information.</p></td>
230
- </tr>
231
- <tr>
232
- <td><p>To protect our legal rights and to establish, exercise or defend legal claims relating to our
233
- services.</p></td>
234
- <td><p>Our legitimate interest to protect our legal rights.</p></td>
235
- </tr>
236
- <tr>
237
- <td><p>For accounting, record keeping and audit purposes</p></td>
238
- <td><p>Our legitimate interest to effectively manage our business, audit our business processes and make
239
- informed business decisions.</p></td>
240
- </tr>
241
- </table>
242
-
243
- <p>When we rely on <strong>legitimate interests</strong> to process personal data, we consider and balance those
244
- interests against any potential impact on you (both positive and negative) and your rights and interests. If we
245
- consider that our interests are overridden by the impact on you, we will not use your personal data in this way
246
- (unless the law gives us another valid ground to do so). You can obtain further information about how we assess
247
- our legitimate interests against any potential impact on you in respect of specific activities by contacting us.</p>
248
-
249
- <hr>
250
-
251
- <h5 id="change-of-purpose">5. Change of purpose</h5>
252
- <p>We will only use your personal information for the purposes for which we collected it or for other compatible
253
- purposes. If we need to use your personal information for an unrelated purpose, we will notify you and we will
254
- explain the basis on which we do so. Please note that we do not always need to rely on your consent to collect
255
- and process your personal information, and we will not seek your consent unless this is required by law.</p>
256
-
257
- <hr>
258
-
259
- <h5 id="cookies">6. Cookies</h5>
260
- <h6>6.1 What are Cookies?</h6>
261
- <p>Cookies are tiny files that have information (data) in them. When you visit our portal, a cookie is placed on
262
- the device you use. Cookies allow us to remember when you visit our portal, or when you open an email. They help
263
- us understand how you are using the Code for Life portal, as well as which parts of our portal are popular and
264
- which ones we need to make better.</p>
265
- <p>We also use other forms of technology (such as web beacons or pixels) which are similar to cookies and which
266
- allow us to monitor and improve our website. When we talk about cookies in this policy, we also refer to these
267
- technologies.</p>
268
-
269
- <h6>6.2 Types of cookies used</h6>
270
- <p>We use the following types of cookies on our portal for the following purposes:</p>
271
-
272
- <table class="table table-bordered header-primary">
273
- <tr>
274
- <th><strong>Types of cookies</strong></th>
275
- <th><strong>Purpose</strong></th>
276
- <th><strong>For how many months does the cookie stay on your browser?</strong></th>
277
- </tr>
278
- <tr>
279
- <td><p><u>Strictly necessary cookies</u></p></td>
280
- <td><p>These cookies do what you have asked for: for example, they allow the website to load on your
281
- browser, they keep you logged in when you use our portal, and keep our portal safe. If you turn off
282
- these cookies via your browser settings certain parts of the website will not function for you.</p>
283
- </td>
284
- <td><p>12</p></td>
285
- </tr>
286
- <tr>
287
- <td><p><u>Functional cookies</u></p></td>
288
- <td><p>These cookies enable the website to provide enhanced functionality and personalisation. If you do not
289
- allow these cookies then some services may not function very smoothly. These kinds of cookies remember
290
- things like your sound settings.</p>
291
- </td>
292
- <td><p>Session</p></td>
293
- </tr>
294
- <tr>
295
- <td><p><u>Analytics/Performance cookies</u></p></td>
296
- <td><p>These cookies help us understand how you use our portal and improve or optimise the experience we
297
- provide. This can be anything like which pages you go to most often, and if you get error messages from
298
- web pages. They allow us to measure how visitors interact with the portal (for example which parts of
299
- the website are clicked on and the length of time between clicks).</p>
300
- <p>We use third-party web analytics software on our portal
301
- (<a href="https://developers.google.com/analytics/devguides/collection/analyticsjs/cookie-usage" target="_blank">Google Analytics</a>
302
- and <a href="https://mouseflow.com/gdpr/" target="_blank">Mouseflow</a>). We provide further
303
- information about these partners below.</p>
304
- </td>
305
- <td><p>24</p></td>
306
- </tr>
307
- </table>
308
-
309
- <h6 id="third-party-cookies">6.3 Third party cookies</h6>
310
- <p>We do not allow third party advertising, or affiliation on our portal.</p>
311
- <p>As we explain above, we work with other companies to use analytics cookies on our portal: these are Google, who
312
- provide Google Analytics cookies, and Mouseflow. We explain in more detail below what information they collect
313
- and how it is used.</p>
314
- <p><strong>Google Analytics</strong>. Our portal uses Google Analytics, which is provided by Google, Inc.
315
- ("Google"). Google Analytics uses cookies to help us analyse how users use our portal. The information generated
316
- by the cookie about your use of the website (including your IP address) will be transmitted to and stored by
317
- Google on servers in the United States. Google will use this information for the purpose of evaluating your use
318
- of the website, compiling reports on website activity for website operators and providing other services
319
- relating to website activity and internet usage. Google may also transfer this information to third parties
320
- where required to do so by law, or where such third parties process the information on Google's behalf. Google
321
- will not associate your IP address with any other data held by Google. By accepting analytics / performance
322
- cookies on our portal, you consent to the processing of data about you by Google in the manner and for the
323
- purposes set out above.</p>
324
- <p><strong>Mouseflow</strong>. We also use Mouseflow on our portal; this provider offers a website analytics tool
325
- that helps us understand how our portal is used, and which areas are mostly used (e.g. by using heatmaps or by
326
- replaying your journey on our portal). Mouseflow uses cookies to record information such as when you click on or
327
- move your mouse, when you scroll, or press a key, what pages you visit on our website, how much time you spend
328
- on each page, and also information about the device you use (operating system, device type
329
- (desktop/tablet/phone), screen resolution, location (city/country), language, and similar metadata). Mouseflow
330
- does not collect any information on pages where it is not installed, nor does it track or collect information
331
- outside your web browser.</p>
332
-
333
- <h6>6.4 Managing and disabling cookies</h6>
334
- <p>We make available a cookie management platform on our portal (provided by
335
- <a href="https://www.onetrust.com/" target="_blank">OneTrust</a>), through which you can turn off non-essential
336
- cookies at any time. Please note, strictly necessary cookies will always be set as they are essential for our
337
- website to operate.</p>
338
- <p>You can change your cookie preferences or withdraw consent by clicking on the following button:</p>
339
-
340
- <p>
341
- <!-- OneTrust Cookies Settings button start -->
342
- <button id="ot-sdk-btn" class="button button--primary optanon-toggle-display">Cookies Settings</button>
343
- <!-- OneTrust Cookies Settings button end -->
344
- </p>
345
-
346
- <hr>
347
-
348
- <h5 id="third-parties">7. Sharing your personal information with other persons</h5>
349
- <ul>
350
- <li><p>We share your personal information with our <strong>employees</strong>, to the extent this is necessary
351
- for them to perform their tasks, and with members of our group of companies, for the purposes set out in
352
- this Policy.</p></li>
353
- <li><p>We also share some limited information with third party <strong>service providers</strong> (as explained
354
- below) – these are companies that help us provide the portal to you, and they also help us to do all the
355
- actions that we describe in this Policy. When we trust our service providers with your information, we
356
- require them to respect the security of your personal data and to treat it in accordance with the law. We do
357
- not allow our third-party service providers to use your personal data for their own purposes and only permit
358
- them to process your personal information for specified purposes and in accordance with our instructions. We
359
- use the following types of service providers:</p></li>
360
- </ul>
361
-
362
- <h6>IT, email and web service providers</h6>
363
- <p>We share your personal information with our IT, email and web service providers, in order to enable them to
364
- provide us with their services. For example, we share your name and email address details with DotDigital, a
365
- service provider used for the purposes of sending emails to our users (such as newsletters, collecting
366
- feedback, or any important service related emails). This data sharing enables us to send you emails, view when
367
- they are opened and view which links are clicked.</p>
368
-
369
- <h6>Surveys, support and feedback providers</h6>
370
- <p><strong>Freshdesk</strong> is our third party customer support tool that enables customers to contact us through
371
- a ticketing system on the website.</p>
372
- <p>For more information on Freshdesk’s Privacy Notice, visit
373
- <a href="https://www.freshworks.com/privacy/" target="_blank">https://www.freshworks.com/privacy/</a>.</p>
374
- <p>For more information on Freshdesk and GDPR, visit
375
- <a href="https://freshdesk.com/gdpr" target="_blank">https://freshdesk.com/gdpr</a>.</p>
376
- <p>We will occasionally ask for feedback on our portal. We will usually do this via an email which will direct you
377
- to our survey provider, <strong>UsabilityHub</strong>. It will only record; time spent, country, device type,
378
- device platform, unless specifically asked within the questions themselves for example, the survey may ask your
379
- age. You can find out more about UsabilityHub
380
- <a href="https://usabilityhub.com/" target="_blank">here</a>.</p>
381
-
382
- <ul>
383
- <li><p>If our business or part of our business is sold to another company, typically customer information would
384
- be transferred to that company. However, that company would still need to comply with this Privacy Policy
385
- and treat personal information as described in this Privacy Policy.</p></li>
386
- <li><p>Where necessary, we share personal information with our <strong>business advisors</strong>, such as legal
387
- advisors, consultants, accountants or auditors, for the purposes outlined in this Policy.</p></li>
388
- <li><p>In the event of a legal dispute, a court order or a legitimate request from a <strong>law enforcement
389
- agency or other public authority</strong>, we will share your personal information with our legal advisors,
390
- courts or such public authority, as necessary.</p></li>
391
- </ul>
392
-
393
- <hr>
394
-
395
- <h5 id="data-retention">8. How long will we keep your personal information?</h5>
396
- <p>We will only retain your personal information for as long as you have an active account, unless we need to retain
397
- this information for longer, after your account is deactivated, in order to protect our legal interests and
398
- establish, exercise or defend a legal claim. If you deactivate your account, we may anonymise your information
399
- and use it for a period of time in an anonymous format for research and other business purposes, such as
400
- business analytics.</p>
401
- <p>For users that have registered but whose accounts are inactive, we will delete your personal information after 3
402
- years of inactivity.</p>
403
-
404
- <hr>
405
-
406
- <h5 id="your-rights">9. Your rights</h5>
407
- <p>Under data protection laws, you have certain rights in relation to your personal information, which you can
408
- exercise free of charge. In summary, those include the right to:</p>
409
- <ul>
410
- <li><p>request a copy of your personal information and to certain other extra information that this Privacy
411
- Policy is already designed to address;</p></li>
412
- <li><p>require us to correct any mistakes in your information which we hold;</p></li>
413
- <li><p>require the erasure of personal information concerning you in certain situations;</p></li>
414
- <li><p>receive the personal information concerning you which you have provided to us, in a structured, commonly
415
- used and machine-readable format (e.g. in pdf or .csv format) and have the right to transmit those data to a
416
- third party in certain situations;</p></li>
417
- <li><p>object (say no) at any time to processing of personal information concerning you for direct marketing;</p></li>
418
- <li><p>object (say no) in certain other situations to our continued processing of your personal information;</p></li>
419
- <li><p>otherwise require us to only store but not use your personal information in certain circumstances;</p></li>
420
- <li><p>where you have given your permission for us to use your information, to change your mind at any time.</p></li>
421
- </ul>
422
- <p>Please note these rights may be <strong>limited</strong>, for example if fulfilling your request would reveal
423
- personal data about another person or if you ask us to delete information which we are required by law to keep
424
- or have compelling legitimate interests in keeping. We will inform you of the relevant exemptions upon which we
425
- rely when responding to any request you make.</p>
426
- <p>If you would like to exercise any of those rights, please:</p>
427
- <ul>
428
- <li><p>email our Data Protection Officer at
429
- <a href="mailto:privacy@ocado.com">privacy@ocado.com</a>;</p></li>
430
- <li><p>let us have enough information to identify you (e.g. username, full name and email address); and</p></li>
431
- <li><p>let us know (if possible) the information to which your request relates.</p></li>
432
- </ul>
433
- <p>If you would like to unsubscribe from any email newsletter or other promotional emails, you can click on the
434
- unsubscribe link which you can find at the bottom of our emails, in order to be removed from our mailing list.
435
- It could take up to 72 hours to process the update through our systems.</p>
436
-
437
- <hr>
438
-
439
- <h5 id="security">10. Keeping your personal information secure</h5>
440
- <p>We have security measures in place to prevent personal information from being accidentally lost, or used or
441
- accessed in an unauthorised way. We limit access to your personal information to those persons who have a
442
- genuine business need to know it and we require them to keep it confidential.</p>
443
- <p>We enable Teachers to use two-factor authentication to further reinforce the security of their accounts and we
444
- encourage them to do that. You can find more details
445
- <a href="https://www.getsafeonline.org/protecting-your-computer/passwords/" target="_blank">here</a>.</p>
446
- <p>If you want detailed information from Get Safe Online on how to protect your information and your computers and
447
- devices against fraud, identity theft, viruses and many other online problems, please visit
448
- <a href="https://www.getsafeonline.org" target="_blank">www.getsafeonline.org</a>. Get Safe Online is supported
449
- by HM Government and leading businesses.</p>
450
-
451
- <hr>
452
-
453
- <h5 id="how-to-complain">11. How to complain</h5>
454
- <p>We hope that we or our Data Protection Officer can resolve any query or concern you raise about this Privacy
455
- Policy or how we use your information.</p>
456
- <p>Alternatively, you also have the right to lodge a complaint with a data protection authority, in particular in
457
- the UK and/or the and/or the European Union (or European Economic Area) country where you work, normally live
458
- or where any alleged infringement of data protection laws occurred. The data protection authority in the UK is
459
- the Information Commissioner who may be contacted at
460
- <a href="https://ico.org.uk/concerns/" target="_blank">https://ico.org.uk/concerns/</a> or telephone:
461
- +44 303 123 1113.</p>
462
-
463
- <hr>
464
-
465
- <h5 id="changes">12. Changes to this Privacy Policy</h5>
466
- <p>This Privacy Policy was last updated on {{ last_updated }}.</p>
467
- <p>We may change this Privacy Policy from time to time and you should check it regularly. If we make any material
468
- changes to this notice we will inform via appropriate means (e.g. email).</p>
469
-
470
- <hr>
471
-
472
- <h5 id="contact-us">13. How to contact us</h5>
473
- <p>Please contact our Data Protection Officer or us at
474
- <a href="mailto:privacy@ocado.com">privacy@ocado.com</a> if you have any questions about this Privacy Policy or
475
- the information we hold about you.</p>
476
-
477
- <hr>
478
-
479
- <h5 id="extra-help">14. Do you need extra help?</h5>
480
- <p>If you would like this Policy in another format (for example: audio, large print, braille) please contact us
481
- (see “How to contact us” above).</p>
482
- </div>
483
- {% endblock content %}
@@ -1,9 +0,0 @@
1
- {% autoescape off %}
2
- You are receiving this e-mail because you requested a password reset for your Code For Life user account.
3
-
4
- Please go to the following page and choose a new password:
5
- {% block reset_link %}
6
- {{ protocol }}://{{ domain }}{% url 'password_reset_check_and_confirm' uidb64=uid token=token %}
7
- {% endblock %}
8
-
9
- {% endautoescape %}
@@ -1,25 +0,0 @@
1
- {% extends 'portal/base.html' %}
2
- {% load staticfiles %}
3
- {% load app_tags %}
4
-
5
- {% block content %}
6
- <div class="form--register form--register--teacher is-flex">
7
- <div class="form col-xs-12 col-sm-8 col-md-6 col-lg-4 center-block">
8
- <h4>Invite a teacher</h4>
9
- <p>To invite another teacher from your school or club to join Code for Life, just put <b>their email address</b> in the field below.</p>
10
- <form action="{% url 'invite_teacher' %}" method="post">
11
- {{ invite_form.non_field_errors }}
12
- <div class="btn-toolbar" >
13
- {% csrf_token %}
14
- {{ invite_form.email }}
15
- {{ invite_form.email.errors }}
16
- <div class="background button-group">
17
- <a href="{% url 'dashboard' %}" class="button button--secondary button--secondary--light">Cancel</a>
18
- <button type="submit" name="submit" value="Submit" class="button button--primary">Submit</button>
19
- </div>
20
- </div>
21
- </form>
22
- </div>
23
- </div>
24
-
25
- {% endblock content %}
@@ -1,95 +0,0 @@
1
- {% extends 'portal/base.html' %}
2
- {% load static %}
3
- {% load app_tags %}
4
-
5
- {% block scripts %}
6
- {{block.super}}
7
- <script type="text/javascript" src="{% static 'portal/js/join_create_game_toggle.js' %}"></script>
8
- {% endblock scripts %}
9
-
10
- {% block subNav %}
11
- <section class="banner banner--aimmo">
12
- <img title="Kurono logo" alt="Kurono logo" src="{% static 'portal/img/kurono_logo.svg' %}">
13
- </section>
14
- <div class="sub-nav sub-nav--teacher">
15
- <div class="container">
16
- <div class="sub-nav__content">
17
- <p>Select a class from the dropdown menu to add a new game below</p>
18
- <div class="dropdown">
19
- <form autocomplete="off" id="create-game-form" method="post" class="hidden">
20
- {% csrf_token %}
21
- <input type="hidden" name="game_class" id="id_game_class">
22
- </form>
23
- <button class="button--dropdown" data-toggle="dropdown" aria-expanded="false" id="add_class_dropdown">
24
- Select class
25
- </button>
26
- <ul id="add-class-dropdown-menu" class="dropdown-menu">
27
- {% for game_class in form.game_class.field.queryset %}
28
- <li class="dropdown-menu__option">
29
- {% if game_class.active_game %}
30
- <a class="button button--regular disabled" data-class-id="{{ game_class.id }}">
31
- {% else %}
32
- <a class="button button--regular" id="class_{{ game_class.id }}"
33
- data-class-id="{{ game_class.id }}"
34
- onclick='send_event("Kurono", "Clicked", "Create game button");'>
35
- {% endif %}
36
- <p class="dropdown-menu__option__text">{{ game_class.name }}</p>
37
- </a>
38
- </li>
39
- {% endfor %}
40
- </ul>
41
- </div>
42
- </div>
43
- </div>
44
- </div>
45
- {% endblock subNav %}
46
-
47
- {% block content %}
48
- <div class="background container">
49
- <section><h4>My games</h4></section>
50
- {% games_table 'kurono/play' %}
51
- </div>
52
-
53
- <div id="kurono_teacher_dashboard_page"></div>
54
- <div class="background background--primary">
55
- <div class="container">
56
- <div class="row d-flex">
57
- <div class="col-sm-6 d-flex flex-column">
58
- <div class="flex-grow-1">
59
- <h5 class="mt-0">Kurono Resources</h5>
60
- <p>We have a set of individual and collaborative worksheets that keep the students engaged and having fun whilst
61
- embedding important Python skills, supported by lesson guides and resource sheets.</p>
62
- <p>Please visit our dedicated Code for Life Space to find everything you need from lesson plans to solutions.</p>
63
- <p>This space is only available to teachers.</p>
64
- </div>
65
- <div>
66
- <a href="https://code-for-life.gitbook.io/teaching-resources/v/kurono-teaching-resources/"
67
- class="button button--primary button--icon col-sm-6" target="_blank">
68
- Open Kurono resources<span class="iconify" data-icon="mdi:open-in-new"></span>
69
- </a>
70
- </div>
71
- </div>
72
- <div class="col-sm-6">
73
- <img alt="Kurono Resources" title="Kurono Resources" src="{% static 'portal/img/thumbnail_kurono_resources.png' %}">
74
- </div>
75
- </div>
76
- </div>
77
- </div>
78
- <div>
79
- <div class="background container">
80
- <h5>Tell us what you think of Kurono...</h5>
81
- <p>Your testing and feedback will help Code for Life deliver an enjoyable game, and will allow us to consult
82
- with you on resources that will be relevant to teaching computing classes in secondary schools
83
- (13 &mdash; 18 year olds).</p>
84
- <div class="row background">
85
- <div class="col-sm-6">
86
- <a href="https://docs.google.com/forms/d/e/1FAIpQLSdNGbf-oLanNhIqCQ-Yz7mbiTBBjX-8rpdXQUB8XIgBvwwuJg/viewform?usp=sf_link"
87
- class="button button--primary button--icon col-sm-6" target="_blank">
88
- Give feedback<span class="iconify" data-icon="mdi:open-in-new"></span>
89
- </a>
90
- </div>
91
- </div>
92
- </div>
93
- </div>
94
-
95
- {% endblock content %}