codeforlife-portal 5.32.2__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.
- cfl_common/common/__init__.py +1 -0
- cfl_common/common/app_settings.py +66 -0
- cfl_common/common/apps.py +6 -0
- cfl_common/common/context_processors.py +9 -0
- cfl_common/common/csp_config.py +85 -0
- cfl_common/common/helpers/__init__.py +0 -0
- cfl_common/common/helpers/data_migration_loader.py +42 -0
- cfl_common/common/helpers/emails.py +393 -0
- cfl_common/common/helpers/generators.py +52 -0
- cfl_common/common/helpers/organisation.py +10 -0
- cfl_common/common/mail.py +201 -0
- cfl_common/common/migrations/0001_initial.py +240 -0
- cfl_common/common/migrations/0002_emailverification.py +55 -0
- cfl_common/common/migrations/0003_aimmocharacter.py +31 -0
- cfl_common/common/migrations/0004_add_aimmocharacters.py +17 -0
- cfl_common/common/migrations/0005_add_worksheets.py +8 -0
- cfl_common/common/migrations/0006_update_aimmo_character_image_path.py +17 -0
- cfl_common/common/migrations/0007_add_pdf_names_to_first_two_worksheets.py +8 -0
- cfl_common/common/migrations/0008_unlock_worksheet_3.py +11 -0
- cfl_common/common/migrations/0009_add_blocked_time_to_teacher_and_student.py +24 -0
- cfl_common/common/migrations/0010_remove_teacher_title.py +18 -0
- cfl_common/common/migrations/0011_student_login_id.py +18 -0
- cfl_common/common/migrations/0012_usersession.py +39 -0
- cfl_common/common/migrations/0013_class_school.py +42 -0
- cfl_common/common/migrations/0014_login_type.py +29 -0
- cfl_common/common/migrations/0015_dailyactivity.py +31 -0
- cfl_common/common/migrations/0016_joinreleasestudent.py +42 -0
- cfl_common/common/migrations/0017_copy_email_to_username.py +18 -0
- cfl_common/common/migrations/0018_update_aimmo_character_image_path.py +15 -0
- cfl_common/common/migrations/0019_aimmocharacter_alt.py +16 -0
- cfl_common/common/migrations/0020_class_is_active_and_null_access_code.py +23 -0
- cfl_common/common/migrations/0021_school_is_active.py +28 -0
- cfl_common/common/migrations/0022_school_cleanup.py +29 -0
- cfl_common/common/migrations/0023_userprofile_aimmo_badges.py +22 -0
- cfl_common/common/migrations/0024_teacher_invited_by.py +25 -0
- cfl_common/common/migrations/0025_schoolteacherinvitation.py +47 -0
- cfl_common/common/migrations/0026_teacher_remove_join_request.py +22 -0
- cfl_common/common/migrations/0027_class_created_by.py +25 -0
- cfl_common/common/migrations/0028_coding_club_downloads.py +23 -0
- cfl_common/common/migrations/0029_dynamicelement.py +22 -0
- cfl_common/common/migrations/0030_add_maintenance_banner.py +25 -0
- cfl_common/common/migrations/0031_improve_admin_panel.py +56 -0
- cfl_common/common/migrations/0032_dailyactivity_level_control_submits.py +18 -0
- cfl_common/common/migrations/0033_password_reset_tracking_fields.py +23 -0
- cfl_common/common/migrations/0034_dailyactivity_daily_school_student_lockout_reset.py +18 -0
- cfl_common/common/migrations/0035_rename_lockout_fields.py +27 -0
- cfl_common/common/migrations/0036_rename_awaiting_email_verification_userprofile_is_verified.py +17 -0
- cfl_common/common/migrations/0037_migrate_email_verification.py +21 -0
- cfl_common/common/migrations/0038_delete_emailverification.py +16 -0
- cfl_common/common/migrations/0039_copy_email_to_username.py +18 -0
- cfl_common/common/migrations/0040_school_county.py +18 -0
- cfl_common/common/migrations/0041_populate_gb_counties.py +27 -0
- cfl_common/common/migrations/0042_totalactivity.py +25 -0
- cfl_common/common/migrations/0043_add_total_activity.py +30 -0
- cfl_common/common/migrations/0044_update_activity_models.py +33 -0
- cfl_common/common/migrations/0045_otp.py +23 -0
- cfl_common/common/migrations/0046_alter_school_country.py +19 -0
- cfl_common/common/migrations/0047_delete_school_postcode.py +16 -0
- cfl_common/common/migrations/0048_unique_school_names.py +42 -0
- cfl_common/common/migrations/0049_anonymise_orphan_users.py +29 -0
- cfl_common/common/migrations/0050_anonymise_orphan_schools.py +30 -0
- cfl_common/common/migrations/0051_verify_returning_users.py +26 -0
- cfl_common/common/migrations/0052_add_cse_fields.py +68 -0
- cfl_common/common/migrations/0053_clean_class_data.py +24 -0
- cfl_common/common/migrations/0054_delete_aimmo_models.py +20 -0
- cfl_common/common/migrations/0055_alter_schoolteacherinvitation_token.py +18 -0
- cfl_common/common/migrations/0056_set_non_school_teachers_as_non_admins.py +25 -0
- cfl_common/common/migrations/0057_teacher_teacher__is_admin.py +19 -0
- cfl_common/common/migrations/0058_userprofile_google_refresh_token_and_more.py +24 -0
- cfl_common/common/migrations/__init__.py +0 -0
- cfl_common/common/models.py +557 -0
- cfl_common/common/permissions.py +84 -0
- cfl_common/common/tests/__init__.py +0 -0
- cfl_common/common/tests/test_migration_anonymise_orphan_schools.py +30 -0
- cfl_common/common/tests/test_migration_anonymise_orphan_users.py +30 -0
- cfl_common/common/tests/test_migration_blocked_time.py +15 -0
- cfl_common/common/tests/test_migration_remove_teacher_title.py +13 -0
- cfl_common/common/tests/test_migration_unique_school_names.py +33 -0
- cfl_common/common/tests/test_migration_verify_returning_users.py +59 -0
- cfl_common/common/tests/test_models.py +87 -0
- cfl_common/common/tests/utils/__init__.py +0 -0
- cfl_common/common/tests/utils/classes.py +38 -0
- cfl_common/common/tests/utils/email.py +67 -0
- cfl_common/common/tests/utils/organisation.py +41 -0
- cfl_common/common/tests/utils/student.py +123 -0
- cfl_common/common/tests/utils/teacher.py +73 -0
- cfl_common/common/tests/utils/user.py +27 -0
- cfl_common/common/utils.py +56 -0
- cfl_common/setup.py +61 -0
- codeforlife_portal-8.9.9.dist-info/METADATA +226 -0
- {codeforlife_portal-5.32.2.dist-info → codeforlife_portal-8.9.9.dist-info}/RECORD +341 -238
- {codeforlife_portal-5.32.2.dist-info → codeforlife_portal-8.9.9.dist-info}/WHEEL +1 -1
- codeforlife_portal-8.9.9.dist-info/licenses/LICENSE.md +3 -0
- {codeforlife_portal-5.32.2.dist-info → codeforlife_portal-8.9.9.dist-info}/top_level.txt +1 -0
- deploy/middleware/maintenance.py +25 -0
- deploy/middleware/screentime_warning.py +29 -0
- deploy/middleware/security.py +5 -6
- deploy/middleware/session_timeout.py +31 -0
- deploy/middleware/tmp_basic_auth.py +41 -0
- example_project/portal_test_settings.py +239 -0
- example_project/settings.py +156 -17
- example_project/urls.py +5 -6
- portal/__init__.py +1 -1
- portal/admin.py +142 -29
- portal/app_settings.py +10 -7
- portal/forms/dotmailer.py +6 -4
- portal/forms/invite_teacher.py +19 -10
- portal/forms/organisation.py +137 -68
- portal/forms/play.py +53 -98
- portal/forms/registration.py +70 -164
- portal/forms/teach.py +147 -121
- portal/handlers.py +1 -2
- portal/helpers/decorators.py +30 -10
- portal/helpers/password.py +86 -47
- portal/helpers/ratelimit.py +32 -15
- portal/helpers/regexes.py +5 -0
- portal/helpers/request_handlers.py +10 -0
- portal/migrations/0044_auto_20150430_0959.py +6 -2
- portal/mixins/__init__.py +1 -0
- portal/mixins/cron_mixin.py +12 -0
- portal/permissions/__init__.py +1 -0
- portal/permissions/is_cron_request_from_google.py +14 -0
- portal/static/portal/img/10_years_anniversary.png +0 -0
- portal/static/portal/img/RR_logo_grass_background.png +0 -0
- portal/static/portal/img/coding_club_hero.jpg +0 -0
- portal/static/portal/img/coding_club_python_pack.png +0 -0
- portal/static/portal/img/facebook.png +0 -0
- portal/static/portal/img/gitbook.png +0 -0
- portal/static/portal/img/howe_dell_1.png +0 -0
- portal/static/portal/img/howe_dell_2.png +0 -0
- portal/static/portal/img/howe_dell_3.png +0 -0
- portal/static/portal/img/logo_cfl.png +0 -0
- portal/static/portal/img/logo_cfl_powered.svg +35 -0
- portal/static/portal/img/logo_cfl_reminder_cards.jpg +0 -0
- portal/static/portal/img/logo_ocado_group.png +0 -0
- portal/static/portal/img/logo_python_den.svg +21 -0
- portal/static/portal/img/long_europe_map.png +0 -0
- portal/static/portal/img/python_den.png +0 -0
- portal/static/portal/img/python_den_banner.svg +26 -0
- portal/static/portal/img/rapid_router_landing_hero.png +0 -0
- portal/static/portal/img/rr_advanced.png +0 -0
- portal/static/portal/img/ten_year_map_pin.svg +1 -0
- portal/static/portal/img/thumbnail_educate_rapid_router.png +0 -0
- portal/static/portal/img/thumbnail_educate_resources.png +0 -0
- portal/static/portal/img/thumbnail_play_rapid_router.png +0 -0
- portal/static/portal/img/thumbnail_python_den.png +0 -0
- portal/static/portal/img/twitter.png +0 -0
- portal/static/portal/js/carouselCards.js +25 -0
- portal/static/portal/js/common.js +96 -1
- portal/static/portal/js/independentLogin.js +16 -0
- portal/static/portal/js/independentRegistration.js +86 -0
- portal/static/portal/js/levelControl.js +77 -0
- portal/static/portal/js/lib/jquery.min.js +2 -0
- portal/static/portal/js/organisation_manage.js +142 -14
- portal/static/portal/js/passwordStrength.js +154 -64
- portal/static/portal/js/resetPassword.js +23 -0
- portal/static/portal/js/riveted.min.js +238 -239
- portal/static/portal/js/school.js +13 -0
- portal/static/portal/js/studentLogin.js +16 -0
- portal/static/portal/js/teacherEditStudent.js +23 -0
- portal/static/portal/js/teacherLogin.js +16 -0
- portal/static/portal/js/tenYearMap.js +14 -0
- portal/static/portal/sass/colorbox.scss +0 -1
- portal/static/portal/sass/modules/_colours.scss +1 -0
- portal/static/portal/sass/modules/_levels.scss +1 -1
- portal/static/portal/sass/modules/_mixins.scss +21 -0
- portal/static/portal/sass/partials/_banners.scss +4 -177
- portal/static/portal/sass/partials/_buttons.scss +12 -15
- portal/static/portal/sass/partials/_carousel.scss +129 -0
- portal/static/portal/sass/partials/_footer.scss +21 -22
- portal/static/portal/sass/partials/_forms.scss +60 -5
- portal/static/portal/sass/partials/_grids.scss +34 -61
- portal/static/portal/sass/partials/_header.scss +28 -20
- portal/static/portal/sass/partials/_images.scss +292 -39
- portal/static/portal/sass/partials/_popup.scss +18 -15
- portal/static/portal/sass/partials/_tables.scss +12 -20
- portal/static/portal/sass/partials/_text.scss +6 -10
- portal/static/portal/sass/styles.scss +0 -1
- portal/static/portal/video/code for life .pdf +0 -0
- portal/strings/about.py +5 -0
- portal/strings/coding_club.py +9 -0
- portal/strings/play.py +6 -5
- portal/strings/teach.py +1 -1
- portal/strings/teacher_resources.py +2 -8
- portal/strings/ten_year_map.py +13 -0
- portal/templates/403.html +2 -2
- portal/templates/404.html +1 -1
- portal/templates/500.html +2 -2
- portal/templates/{captcha → django_recaptcha}/includes/js_v2_invisible.html +3 -3
- portal/templates/{captcha → django_recaptcha}/widget_v2_invisible.html +2 -2
- portal/templates/email.html +4 -2
- portal/templates/maintenance.html +34 -0
- portal/templates/portal/about.html +94 -62
- portal/templates/portal/base.html +176 -152
- portal/templates/portal/coding_club.html +100 -0
- portal/templates/portal/contribute.html +56 -52
- portal/templates/portal/email_invitation_sent.html +1 -1
- portal/templates/portal/email_style_template.html +374 -0
- portal/templates/portal/email_verification_failed.html +1 -1
- portal/templates/portal/email_verification_needed.html +9 -9
- portal/templates/portal/form_shapes.html +20 -8
- portal/templates/portal/getinvolved.html +6 -6
- portal/templates/portal/home.html +35 -10
- portal/templates/portal/home_learning.html +19 -19
- portal/templates/portal/locked_out.html +0 -1
- portal/templates/portal/locked_out_school_student.html +16 -0
- portal/templates/portal/login/independent_student.html +31 -15
- portal/templates/portal/login/student.html +10 -7
- portal/templates/portal/login/student_class_code.html +7 -4
- portal/templates/portal/login/teacher.html +34 -17
- portal/templates/portal/partials/banner.html +18 -4
- portal/templates/portal/partials/benefits.html +1 -1
- portal/templates/portal/partials/card_list.html +34 -24
- portal/templates/portal/partials/character_list.html +5 -5
- portal/templates/portal/partials/cookie_list.html +161 -0
- portal/templates/portal/partials/delete_popup.html +18 -0
- portal/templates/portal/partials/footer.html +57 -26
- portal/templates/portal/partials/header.html +118 -117
- portal/templates/portal/partials/hero_card.html +4 -3
- portal/templates/portal/partials/info_popup.html +3 -3
- portal/templates/portal/partials/invite_admin_teacher.html +23 -0
- portal/templates/portal/partials/popup.html +7 -2
- portal/templates/portal/partials/register_newsletter_tickbox.html +2 -5
- portal/templates/portal/partials/screentime_popup.html +14 -0
- portal/templates/portal/partials/service_unavailable_popup.html +17 -0
- portal/templates/portal/partials/session_popup.html +19 -0
- portal/templates/portal/play/student_dashboard.html +42 -29
- portal/templates/portal/play/student_edit_account.html +64 -9
- portal/templates/portal/play.html +61 -41
- portal/templates/portal/privacy_notice.html +697 -0
- portal/templates/portal/register.html +122 -92
- portal/templates/portal/reset_password.html +20 -40
- portal/templates/portal/reset_password_confirm.html +9 -4
- portal/templates/portal/reset_password_email_sent.html +15 -13
- portal/templates/portal/teach/base_registering.html +1 -1
- portal/templates/portal/teach/class.html +4 -6
- portal/templates/portal/teach/dashboard.html +212 -117
- portal/templates/portal/teach/invited.html +90 -0
- portal/templates/portal/teach/onboarding_classes.html +5 -3
- portal/templates/portal/teach/onboarding_print.html +1 -1
- portal/templates/portal/teach/onboarding_school.html +26 -139
- portal/templates/portal/teach/onboarding_students.html +1 -1
- portal/templates/portal/teach/teacher_dismiss_students.html +73 -55
- portal/templates/portal/teach/teacher_edit_class.html +168 -11
- portal/templates/portal/teach/teacher_edit_student.html +12 -5
- portal/templates/portal/teach/teacher_move_all_classes.html +25 -38
- portal/templates/portal/teach/teacher_move_students_to_class.html +1 -1
- portal/templates/portal/teach.html +61 -42
- portal/templates/portal/ten_year_map.html +147 -0
- portal/templates/portal/terms.html +191 -42
- portal/templates/two_factor/core/login.html +71 -59
- portal/templates/two_factor/core/setup.html +58 -49
- portal/templates/two_factor/profile/disable.html +1 -1
- portal/templates/two_factor/profile/profile.html +35 -17
- portal/templatetags/app_tags.py +59 -84
- portal/templatetags/card_list_tags.py +0 -4
- portal/tests/base_test.py +14 -3
- portal/tests/conftest.py +0 -15
- portal/tests/migrations/test_migration_make_portaladmin_teacher.py +2 -6
- portal/tests/migrations/test_migration_preview_users.py +3 -9
- portal/tests/migrations/test_migration_remove_guardian.py +1 -3
- portal/tests/migrations/test_migration_use_common_models.py +2 -6
- portal/tests/migrations/test_migration_verify_portaladmin.py +1 -3
- portal/tests/pageObjects/portal/admin/admin_base_page.py +0 -21
- portal/tests/pageObjects/portal/base_page.py +16 -26
- portal/tests/pageObjects/portal/email_verification_needed_page.py +3 -2
- portal/tests/pageObjects/portal/game_page.py +12 -19
- portal/tests/pageObjects/portal/home_page.py +13 -15
- portal/tests/pageObjects/portal/independent_login_page.py +13 -17
- portal/tests/pageObjects/portal/password_reset_form_page.py +20 -4
- portal/tests/pageObjects/portal/password_reset_page.py +25 -0
- portal/tests/pageObjects/portal/play/account_page.py +18 -27
- portal/tests/pageObjects/portal/play/dashboard_page.py +4 -4
- portal/tests/pageObjects/portal/play/join_school_or_club_page.py +8 -10
- portal/tests/pageObjects/portal/play/play_base_page.py +5 -3
- portal/tests/pageObjects/portal/signup_page.py +28 -59
- portal/tests/pageObjects/portal/student_login_class_code.py +6 -9
- portal/tests/pageObjects/portal/student_login_page.py +6 -8
- portal/tests/pageObjects/portal/teach/add_independent_student_to_class_page.py +3 -3
- portal/tests/pageObjects/portal/teach/added_independent_student_to_class_page.py +3 -1
- portal/tests/pageObjects/portal/teach/class_page.py +36 -13
- portal/tests/pageObjects/portal/teach/dashboard_page.py +43 -84
- portal/tests/pageObjects/portal/teach/dismiss_students_page.py +7 -5
- portal/tests/pageObjects/portal/teach/edit_student_page.py +10 -8
- portal/tests/pageObjects/portal/teach/move_class_page.py +5 -10
- portal/tests/pageObjects/portal/teach/move_classes_page.py +4 -2
- portal/tests/pageObjects/portal/teach/move_students_disambiguate_page.py +4 -2
- portal/tests/pageObjects/portal/teach/move_students_page.py +6 -13
- portal/tests/pageObjects/portal/teach/onboarding_classes_page.py +5 -3
- portal/tests/pageObjects/portal/teach/onboarding_organisation_page.py +11 -49
- portal/tests/pageObjects/portal/teach/onboarding_student_list_page.py +7 -12
- portal/tests/pageObjects/portal/teach/onboarding_students_page.py +4 -27
- portal/tests/pageObjects/portal/teach/teach_base_page.py +6 -4
- portal/tests/pageObjects/portal/teacher_login_page.py +10 -16
- portal/tests/selenium_test_case.py +3 -43
- portal/tests/snapshots/snap_test_partials.py +11 -165
- portal/tests/test_2FA.py +15 -33
- portal/tests/test_admin.py +15 -97
- portal/tests/test_api.py +212 -73
- portal/tests/test_captcha_forms.py +2 -2
- portal/tests/test_class.py +374 -24
- portal/tests/test_emails.py +83 -20
- portal/tests/{test_newsletter_footer.py → test_global_forms.py} +5 -5
- portal/tests/test_helper_methods.py +30 -0
- portal/tests/test_independent_student.py +255 -144
- portal/tests/test_invite_teacher.py +318 -10
- portal/tests/test_middleware.py +138 -15
- portal/tests/test_organisation.py +78 -262
- portal/tests/test_partials.py +0 -88
- portal/tests/test_ratelimit.py +218 -36
- portal/tests/test_school_student.py +35 -40
- portal/tests/test_security.py +12 -31
- portal/tests/test_teacher.py +425 -325
- portal/tests/test_teacher_student.py +103 -91
- portal/tests/test_views.py +900 -76
- portal/tests/utils/classes.py +2 -2
- portal/tests/utils/messages.py +13 -28
- portal/urls.py +237 -164
- portal/views/admin.py +0 -332
- portal/views/api.py +82 -68
- portal/views/cron/__init__.py +1 -0
- portal/views/cron/user.py +322 -0
- portal/views/dotmailer.py +9 -1
- portal/views/email.py +33 -77
- portal/views/google_analytics.py +28 -0
- portal/views/home.py +126 -97
- portal/views/legal.py +13 -0
- portal/views/login/independent_student.py +5 -5
- portal/views/login/student.py +51 -14
- portal/views/login/teacher.py +2 -6
- portal/views/organisation.py +20 -189
- portal/views/registration.py +97 -17
- portal/views/student/edit_account_details.py +99 -72
- portal/views/student/play.py +81 -62
- portal/views/teacher/dashboard.py +421 -149
- portal/views/teacher/teach.py +226 -177
- portal/views/two_factor/__init__.py +0 -0
- portal/views/two_factor/core.py +28 -0
- portal/views/two_factor/form.py +7 -0
- portal/views/two_factor/profile.py +11 -0
- codeforlife_portal-5.32.2.dist-info/LICENSE.md +0 -577
- codeforlife_portal-5.32.2.dist-info/METADATA +0 -38
- deploy/permissions.py +0 -2
- example_project/manage.py +0 -10
- portal/autoconfig.py +0 -140
- portal/csp_config.py +0 -60
- portal/forms/add_game.py +0 -33
- portal/helpers/location.py +0 -121
- portal/static/portal/img/kurono_hero.jpg +0 -0
- portal/static/portal/img/kurono_landing_hero.png +0 -0
- portal/static/portal/img/kurono_logo.svg +0 -1
- portal/static/portal/img/kurono_logo_grey_background.svg +0 -1
- portal/static/portal/img/kurono_logo_mark.svg +0 -1
- portal/static/portal/img/kurono_resources_hero.jpg +0 -0
- portal/static/portal/img/kurono_story.png +0 -0
- portal/static/portal/img/ocado-swirl.svg +0 -22
- portal/static/portal/img/thumbnail_educate_kurono.png +0 -0
- portal/static/portal/img/thumbnail_educate_resources_and_progress_tracking.png +0 -0
- portal/static/portal/img/thumbnail_kurono_resources.png +0 -0
- portal/static/portal/img/thumbnail_play_kurono.png +0 -0
- portal/static/portal/img/x_close_video.png +0 -0
- portal/static/portal/js/aimmoGame.js +0 -106
- portal/static/portal/js/deleteWorkspaces.js +0 -14
- portal/static/portal/js/fuzzySchoolLookup.js +0 -46
- portal/static/portal/js/lib/jquery-3.5.1.min.js +0 -2
- portal/static/portal/js/lib/jquery-ui-1.12.1.min.js +0 -13
- portal/static/portal/sass/partials/_videos.scss +0 -10
- portal/static/portal/video/aimmo_play_now_background_video.mp4 +0 -0
- portal/strings/student_aimmo_dashboard.py +0 -6
- portal/templates/portal/admin/aggregated_data.html +0 -35
- portal/templates/portal/admin/map.html +0 -70
- portal/templates/portal/mouseflow.html +0 -9
- portal/templates/portal/partials/aimmo_games_table.html +0 -83
- portal/templates/portal/partials/register_over_required_age_tickbox.html +0 -9
- portal/templates/portal/play/independent_student_dashboard.html +0 -64
- portal/templates/portal/play/student_aimmo_dashboard.html +0 -63
- portal/templates/portal/privacy_policy.html +0 -483
- portal/templates/portal/reset_password_email.html +0 -9
- portal/templates/portal/teach/invite.html +0 -25
- portal/templates/portal/teach/teacher_aimmo_dashboard.html +0 -95
- portal/templates/portal/teach/teacher_resources.html +0 -68
- portal/templatetags/character_list_tags.py +0 -16
- portal/tests/pageObjects/portal/kurono_teacher_dashboard_page.py +0 -49
- portal/tests/pageObjects/portal/student_password_reset_form_page.py +0 -23
- portal/tests/pageObjects/portal/teach/onboarding_revoke_request_page.py +0 -20
- portal/tests/pageObjects/portal/teacher_password_reset_form_page.py +0 -23
- portal/tests/test_aimmo_dashboards.py +0 -172
- portal/tests/test_location.py +0 -217
- portal/tests/utils/aimmo_games.py +0 -30
- portal/views/aimmo/dashboard.py +0 -119
- portal/views/privacy_policy.py +0 -9
- portal/views/teacher/teacher_resources.py +0 -42
- {portal/views/aimmo → cfl_common}/__init__.py +0 -0
|
@@ -14,19 +14,18 @@
|
|
|
14
14
|
</section>
|
|
15
15
|
<div class="row">
|
|
16
16
|
<div class="col-sm-6">
|
|
17
|
-
<p>Rapid Router is our shopping delivery game that
|
|
18
|
-
|
|
19
|
-
<p>The game and lessons support the English National Curriculum Computing strand, and
|
|
20
|
-
|
|
17
|
+
<p>Rapid Router is our shopping delivery game that teaches children aged 5–14 to learn how to code using
|
|
18
|
+
Blockly. The pupils can then progress to Python Den to continue to build up their skills.</p>
|
|
19
|
+
<p>The game and lessons support the English National Curriculum Computing strand, and teachers across the
|
|
20
|
+
world love them.</p>
|
|
21
|
+
<p>Now, we’ve made lessons available for parents and caregivers to teach at home, so we can #KeepKidsCoding.
|
|
22
|
+
They're free and easy, but most of all, they’re fun!</p>
|
|
21
23
|
</div>
|
|
22
24
|
<div class="col-sm-6">
|
|
23
|
-
<p>
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
<p>To begin, you can read our learning guide and start at Level 1.
|
|
28
|
-
We encourage you to first register as an independent student to ensure the level progress is saved.
|
|
29
|
-
</p>
|
|
25
|
+
<p>Read our learning guide and start at Level 1, unless your child has played before. To start playing, you
|
|
26
|
+
need to first register as an independent student. This will ensure that the level progress is saved.</p>
|
|
27
|
+
<p>If you would like to keep updated on our products and receive emails about Code for Life, please
|
|
28
|
+
<a href="#newsletter_form">sign up to our updates</a>.</p>
|
|
30
29
|
</div>
|
|
31
30
|
</div>
|
|
32
31
|
<div class="background text-right">
|
|
@@ -56,9 +55,9 @@
|
|
|
56
55
|
algorithms, and learn how to create and debug simple programs. Designed for children aged 5–7,
|
|
57
56
|
but start here if you’ve never played Rapid Router.
|
|
58
57
|
</div>
|
|
59
|
-
<a class="button" href="https://code-for-life.gitbook.io/independent-student-resources/beginner
|
|
58
|
+
<a class="button" href="https://code-for-life.gitbook.io/independent-student-resources/rapid-router-resources/beginner" target="_blank">
|
|
60
59
|
<button class="button--primary button--icon">
|
|
61
|
-
Go to lessons<span class="iconify" data-icon="mdi:open-in-new">
|
|
60
|
+
Go to lessons<span class="iconify" data-icon="mdi:open-in-new"></span>
|
|
62
61
|
</button>
|
|
63
62
|
</a>
|
|
64
63
|
</div>
|
|
@@ -122,9 +121,9 @@
|
|
|
122
121
|
programming constructs. Designed for children aged 8–11, but anyone can progress here if
|
|
123
122
|
ready.
|
|
124
123
|
</div>
|
|
125
|
-
<a class="button" href="https://code-for-life.gitbook.io/independent-student-resources/intermediate
|
|
124
|
+
<a class="button" href="https://code-for-life.gitbook.io/independent-student-resources/rapid-router-resources/intermediate" target="_blank">
|
|
126
125
|
<button class="button--primary button--icon">
|
|
127
|
-
Go to lessons<span class="iconify" data-icon="mdi:open-in-new">
|
|
126
|
+
Go to lessons<span class="iconify" data-icon="mdi:open-in-new"></span>
|
|
128
127
|
</button>
|
|
129
128
|
</a>
|
|
130
129
|
</div>
|
|
@@ -151,9 +150,9 @@
|
|
|
151
150
|
<div>Let’s get advanced! Learn about repeat loops and selection, variables, and how to create
|
|
152
151
|
efficient code. Designed for children aged 12–14, but open to all.
|
|
153
152
|
</div>
|
|
154
|
-
<a class="button" href="https://code-for-life.gitbook.io/independent-student-resources/advanced
|
|
153
|
+
<a class="button" href="https://code-for-life.gitbook.io/independent-student-resources/rapid-router-resources/advanced" target="_blank">
|
|
155
154
|
<button class="button--primary button--icon">
|
|
156
|
-
Go to lessons<span class="iconify" data-icon="mdi:open-in-new">
|
|
155
|
+
Go to lessons<span class="iconify" data-icon="mdi:open-in-new"></span>
|
|
157
156
|
</button>
|
|
158
157
|
</a>
|
|
159
158
|
</div>
|
|
@@ -172,10 +171,11 @@
|
|
|
172
171
|
<h6>Session 3 & 4</h6>
|
|
173
172
|
<p>Extra tasks for children who want a challenge! Watch the if...do video to learn about selection
|
|
174
173
|
statements. Ask your child to explain how their finished program works!</p>
|
|
174
|
+
<h6>Session 5</h6>
|
|
175
|
+
<p>Learn more about if...else through traffic lights. In the Traffic Lights levels in Rapid Router, traffic light is a variable that either contains red or green.</p>
|
|
175
176
|
<h6>Extended</h6>
|
|
176
177
|
<p>Build on everything learned so far with traffic lights, limited blocks, procedures and brain teasers.
|
|
177
|
-
Older children might even like to start learning to program using the Python language using
|
|
178
|
-
80 onwards.</p>
|
|
178
|
+
Older children might even like to start learning to program using the Python language using <a href="{% url 'python_levels' %}">Python Den</a>.</p>
|
|
179
179
|
</div>
|
|
180
180
|
</div>
|
|
181
181
|
</div>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{% extends 'portal/base.html' %}
|
|
2
|
+
{% load static %}
|
|
3
|
+
|
|
4
|
+
{% block content %}
|
|
5
|
+
<div class="error-page background container">
|
|
6
|
+
<div class="row mx-0 d-flex justify-content-between">
|
|
7
|
+
<div class="flex-grow-1">
|
|
8
|
+
<h2>Temporary lock out!</h2>
|
|
9
|
+
<h5>Your account has been temporarily blocked as there were too many unsuccessful requests.</h5>
|
|
10
|
+
<p>If you wish to proceed, please ask your teacher to reset your password.
|
|
11
|
+
Alternatively, you will need to wait 24 hours for your account to be unlocked again.</p>
|
|
12
|
+
</div>
|
|
13
|
+
<img title="Phil" alt="Phil" src="{% static 'portal/img/phil.png' %}"/>
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
16
|
+
{% endblock content %}
|
|
@@ -1,32 +1,48 @@
|
|
|
1
1
|
{% extends 'portal/form_shapes.html' %}
|
|
2
|
-
{% load
|
|
2
|
+
{% load static %}
|
|
3
3
|
{% load app_tags %}
|
|
4
4
|
|
|
5
5
|
{% block form_content %}
|
|
6
6
|
<div id="independent_login_page"></div>
|
|
7
|
-
<h4 class="center-block">
|
|
7
|
+
<h4 class="center-block">Welcome</h4>
|
|
8
|
+
<h5>Please enter your login details.</h5>
|
|
8
9
|
<form id="independent_student_login_form" method="post" autocomplete="off">
|
|
9
10
|
|
|
10
11
|
{% csrf_token %}
|
|
11
12
|
|
|
12
13
|
{{ form.non_field_errors }}
|
|
13
14
|
|
|
14
|
-
<
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
<div class="form__input">
|
|
16
|
+
{{ form.username }}
|
|
17
|
+
<small>{{ form.username.help_text }}</small>
|
|
18
|
+
{{ form.username.errors }}
|
|
19
|
+
</div>
|
|
17
20
|
|
|
18
|
-
<
|
|
19
|
-
|
|
20
|
-
|
|
21
|
+
<div class="form--row">
|
|
22
|
+
<div class="input--icon">
|
|
23
|
+
{{ form.password }} <span id="password-field-icon" class="iconify" data-icon="material-symbols:visibility-off"></span>
|
|
24
|
+
</div>
|
|
25
|
+
<small>{{ form.password.help_text }}</small>
|
|
26
|
+
{{ form.password.errors }}
|
|
27
|
+
</div>
|
|
21
28
|
|
|
22
29
|
{{ form.captcha }}
|
|
23
30
|
|
|
24
|
-
<
|
|
31
|
+
<div class="background">
|
|
32
|
+
<p class="text-left"><strong>Forgotten your password?</strong></p>
|
|
33
|
+
<p class="text-left">Don't worry, you can
|
|
34
|
+
<a id="student_forgotten_password_button" href="{% url 'student_password_reset' %}">reset your password</a>.
|
|
35
|
+
</p>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
<p class="text-left"><strong>Part of a school or club?</strong>
|
|
39
|
+
<a href="{% url 'student_login_access_code' %}">Log in here</a>.
|
|
40
|
+
</p>
|
|
41
|
+
|
|
42
|
+
<div class="d-flex justify-content-end row">
|
|
43
|
+
<button type="submit" name="independent_student_login"
|
|
44
|
+
class="button button--home button--login button-right-arrow">Log in</button>
|
|
45
|
+
</div>
|
|
25
46
|
</form>
|
|
26
|
-
|
|
27
|
-
<p><strong>Forgotten your password?</strong></p>
|
|
28
|
-
<p>Don't worry, you can
|
|
29
|
-
<a id="student_forgotten_password_button" href="{% url 'student_password_reset' %}">reset your password</a>.
|
|
30
|
-
</p>
|
|
31
|
-
<p>Part of a school or club? <a href="{% url 'student_login_access_code' %}">Log in here</a>.</p>
|
|
47
|
+
<script type="text/javascript" src="{% static 'portal/js/independentLogin.js' %}"></script>
|
|
32
48
|
{% endblock form_content %}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{% extends 'portal/form_shapes.html' %}
|
|
2
|
-
{% load
|
|
2
|
+
{% load static %}
|
|
3
3
|
{% load app_tags %}
|
|
4
4
|
|
|
5
5
|
{% block form_content %}
|
|
@@ -18,15 +18,18 @@
|
|
|
18
18
|
{{ form.username.errors }}
|
|
19
19
|
</div>
|
|
20
20
|
|
|
21
|
-
<div class="
|
|
22
|
-
|
|
21
|
+
<div class="form--row">
|
|
22
|
+
<div class="input--icon">
|
|
23
|
+
{{ form.password }} <span id="password-field-icon" class="iconify" data-icon="material-symbols:visibility-off"></span>
|
|
24
|
+
</div>
|
|
23
25
|
<small>{{ form.password.help_text }}</small>
|
|
24
26
|
{{ form.password.errors }}
|
|
25
27
|
</div>
|
|
26
28
|
|
|
27
|
-
<
|
|
28
|
-
|
|
29
|
+
<div class="d-flex justify-content-end row">
|
|
30
|
+
<button type="submit" name="school_login" class="button button--primary button--login button-right-arrow">
|
|
31
|
+
Log in</button>
|
|
32
|
+
</div>
|
|
29
33
|
</form>
|
|
30
|
-
|
|
31
|
-
<p>Forgotten your login details? Please check with your teacher.</p>
|
|
34
|
+
<script type="text/javascript" src="{% static 'portal/js/studentLogin.js' %}"></script>
|
|
32
35
|
{% endblock form_content %}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{% extends 'portal/form_shapes.html' %}
|
|
2
|
-
{% load
|
|
2
|
+
{% load static %}
|
|
3
3
|
{% load app_tags %}
|
|
4
4
|
|
|
5
5
|
{% block form_content %}
|
|
@@ -18,8 +18,11 @@
|
|
|
18
18
|
{{ form.access_code.errors }}
|
|
19
19
|
</div>
|
|
20
20
|
|
|
21
|
-
<
|
|
22
|
-
</form>
|
|
21
|
+
<p class="background text-left"><strong>Forgotten your login details? Please check with your teacher.</strong></p>
|
|
23
22
|
|
|
24
|
-
|
|
23
|
+
<div class="d-flex justify-content-end row">
|
|
24
|
+
<button type="submit" name="school_login_class_code"
|
|
25
|
+
class="button button--primary button--login button-right-arrow">Log in</button>
|
|
26
|
+
</div>
|
|
27
|
+
</form>
|
|
25
28
|
{% endblock form_content %}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{% extends 'portal/base.html' %}
|
|
2
|
-
{% load
|
|
2
|
+
{% load static %}
|
|
3
3
|
{% load app_tags %}
|
|
4
4
|
|
|
5
5
|
{% block css %}
|
|
@@ -20,11 +20,16 @@
|
|
|
20
20
|
|
|
21
21
|
{% if wizard.steps.current == 'auth' %}
|
|
22
22
|
<section class="row mx-0">
|
|
23
|
-
<span class="
|
|
24
|
-
|
|
23
|
+
<span class="login-shape-left">
|
|
24
|
+
<img src="{% static 'portal/img/oval_blue.svg' %}" alt="Blue oval">
|
|
25
|
+
</span>
|
|
26
|
+
<span class="login-shape-right">
|
|
27
|
+
<img src="{% static 'portal/img/polygon_yellow.svg' %}" alt="Yellow polygon">
|
|
28
|
+
</span>
|
|
25
29
|
<div class="form--login is-flex form--register--teacher">
|
|
26
30
|
<div class="form col-xs-12 col-sm-8 col-md-8 col-lg-9 center-block">
|
|
27
|
-
<h4 class="center-block">
|
|
31
|
+
<h4 class="center-block">Welcome</h4>
|
|
32
|
+
<h5>Please enter your login details.</h5>
|
|
28
33
|
<form id="form-login-teacher" method="post" autocomplete="off">
|
|
29
34
|
|
|
30
35
|
{% csrf_token %}
|
|
@@ -32,24 +37,34 @@
|
|
|
32
37
|
|
|
33
38
|
{{ form.non_field_errors }}
|
|
34
39
|
|
|
35
|
-
<
|
|
36
|
-
|
|
37
|
-
|
|
40
|
+
<div class="form__input">
|
|
41
|
+
{{ form.username }}
|
|
42
|
+
<small>{{ form.username.help_text }}</small>
|
|
43
|
+
{{ form.username.errors }}
|
|
44
|
+
</div>
|
|
38
45
|
|
|
39
|
-
<
|
|
40
|
-
|
|
41
|
-
|
|
46
|
+
<div class="form--row">
|
|
47
|
+
<div class="input--icon">
|
|
48
|
+
{{ form.password }} <span id="password-field-icon" class="iconify" data-icon="material-symbols:visibility-off"></span>
|
|
49
|
+
</div>
|
|
50
|
+
<small>{{ form.password.help_text }}</small>
|
|
51
|
+
{{ form.password.errors }}
|
|
52
|
+
</div>
|
|
42
53
|
|
|
43
54
|
{{ form.captcha }}
|
|
44
55
|
|
|
45
|
-
<
|
|
46
|
-
|
|
47
|
-
|
|
56
|
+
<div class="background">
|
|
57
|
+
<p class="text-left"><strong>Forgotten your password?</strong></p>
|
|
58
|
+
<p class="text-left">Don't worry, you can
|
|
59
|
+
<a id="teacher_forgotten_password_button" href="{% url 'teacher_password_reset' %}">reset your password</a>.
|
|
60
|
+
</p>
|
|
61
|
+
</div>
|
|
48
62
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
63
|
+
<div class="d-flex justify-content-end row">
|
|
64
|
+
<button type="submit" name="login_view"
|
|
65
|
+
class="button button--primary button--login button-right-arrow">Log in</button>
|
|
66
|
+
</div>
|
|
67
|
+
</form>
|
|
53
68
|
</div>
|
|
54
69
|
</div>
|
|
55
70
|
</section>
|
|
@@ -57,4 +72,6 @@
|
|
|
57
72
|
{% include "two_factor/core/login.html" %}
|
|
58
73
|
{% endif %}
|
|
59
74
|
|
|
75
|
+
<script type="text/javascript" src="{% static 'portal/js/teacherLogin.js' %}"></script>
|
|
76
|
+
|
|
60
77
|
{% endblock content %}
|
|
@@ -10,15 +10,29 @@
|
|
|
10
10
|
{% if text %}
|
|
11
11
|
<p>{{ text }}</p>
|
|
12
12
|
{% endif %}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
<div class="button-group">
|
|
14
|
+
{% if button %}
|
|
15
|
+
{% if button.external %}
|
|
16
|
+
<a href="{{ button.link }}" target="_blank" class="button button--primary button-right-arrow">{{ button.text }}</a>
|
|
17
|
+
{% else %}
|
|
18
|
+
<a href="{% url button.link %}" class="button button--primary button-right-arrow">{{ button.text}}</a>
|
|
19
|
+
{% endif %}
|
|
20
|
+
{% endif %}
|
|
21
|
+
{% if button2 %}
|
|
22
|
+
{% if button.external %}
|
|
23
|
+
<a href="{{ button2.link }}" target="_blank" class="button button--primary button-right-arrow">{{ button2.text }}</a>
|
|
24
|
+
{% else %}
|
|
25
|
+
<a href="{% url button2.link %}" class="button button--primary button-right-arrow">{{ button2.text}}</a>
|
|
26
|
+
{% endif %}
|
|
27
|
+
{% endif %}
|
|
28
|
+
</div>
|
|
16
29
|
</div>
|
|
17
30
|
<div>
|
|
18
31
|
<div class="banner--picture">
|
|
19
32
|
<div class="banner--picture__inside1">
|
|
20
33
|
<div class="banner--picture__inside2 {{ image_class }}"
|
|
21
|
-
{% if image_description %}title="{{ image_description }}"{% endif %}
|
|
34
|
+
{% if image_description %}title="{{ image_description }}"{% endif %}
|
|
35
|
+
{% if alt %} alt="{{ alt }}" {% endif %}>
|
|
22
36
|
</div>
|
|
23
37
|
</div>
|
|
24
38
|
</div>
|
|
@@ -1,29 +1,39 @@
|
|
|
1
|
-
{% load
|
|
1
|
+
{% load static %}
|
|
2
2
|
{% load app_tags %}
|
|
3
3
|
|
|
4
|
-
<
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
{% elif card.button_text %}
|
|
20
|
-
<div class="button-group button-group__icon">
|
|
21
|
-
<a target="_blank" href="{{ card.button_link }}" class="button button--primary button-right-arrow">
|
|
22
|
-
{{ card.button_text }}
|
|
23
|
-
</a>
|
|
4
|
+
<script type="text/javascript" src="{% static 'portal/js/carouselCards.js' %}"></script>
|
|
5
|
+
|
|
6
|
+
<div id="carouselCards" class="carousel carousel-cards slide" data-ride="carousel" data-interval="false">
|
|
7
|
+
<div class="carousel-inner" role="listbox">
|
|
8
|
+
{% for card in cards %}
|
|
9
|
+
<div class="item col-xs-4 {% if forloop.first %}active{% endif %}">
|
|
10
|
+
<div class="card">
|
|
11
|
+
<div class="card__images">
|
|
12
|
+
<img class="card__image" src="{{ card.image | cloud_storage }}">
|
|
13
|
+
</div>
|
|
14
|
+
<div class="card__text">
|
|
15
|
+
<h5 class="card__title">{{ card.title }}</h5>
|
|
16
|
+
{% if card.description %}
|
|
17
|
+
<p>{{ card.description }}</p>
|
|
18
|
+
{% endif %}
|
|
24
19
|
</div>
|
|
25
|
-
|
|
20
|
+
</div>
|
|
26
21
|
</div>
|
|
27
|
-
|
|
28
|
-
|
|
22
|
+
{% endfor %}
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
<div class="carousel-nav text-center">
|
|
26
|
+
<a class="button prev disabled" data-target="#carouselCards" data-slide="prev">
|
|
27
|
+
<span class="iconify" data-icon="mdi:chevron-left" aria-hidden="true"></span>
|
|
28
|
+
<span class="sr-only">Previous</span>
|
|
29
|
+
</a>
|
|
30
|
+
<a class="button next" data-target="#carouselCards" data-slide="next">
|
|
31
|
+
<span class="iconify" data-icon="mdi:chevron-right" aria-hidden="true"></span>
|
|
32
|
+
<span class="sr-only">Next</span>
|
|
33
|
+
</a>
|
|
34
|
+
</div>
|
|
29
35
|
</div>
|
|
36
|
+
|
|
37
|
+
<script>
|
|
38
|
+
setUpCarouselCards({{ cards | length }})
|
|
39
|
+
</script>
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
{% load
|
|
1
|
+
{% load static %}
|
|
2
2
|
{% load app_tags %}
|
|
3
3
|
|
|
4
4
|
<div class="grid grid-characters grid__fit">
|
|
5
5
|
{% for character in characters %}
|
|
6
|
-
<div
|
|
7
|
-
<
|
|
8
|
-
<
|
|
9
|
-
<p
|
|
6
|
+
<div>
|
|
7
|
+
<img class="grid-character-image" src="{{ character.image_path | cloud_storage }}" alt="{{ character.alt }}">
|
|
8
|
+
<h5 class="grid-character-title">{{ character.name }}</h5>
|
|
9
|
+
<p>{{ character.description }}</p>
|
|
10
10
|
</div>
|
|
11
11
|
{% endfor %}
|
|
12
12
|
</div>
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
<h6>Strictly Necessary Cookies</h6>
|
|
2
|
+
|
|
3
|
+
<table class="table table-bordered header-primary">
|
|
4
|
+
<colgroup>
|
|
5
|
+
<col span="1" style="width: 23%;">
|
|
6
|
+
<col span="1" style="width: 20%;">
|
|
7
|
+
<col span="1" style="width: 47%;">
|
|
8
|
+
<col span="1" style="width: 10%;">
|
|
9
|
+
</colgroup>
|
|
10
|
+
<tr>
|
|
11
|
+
<th><strong>Cookie name</strong></th>
|
|
12
|
+
<th><strong>Host</strong></th>
|
|
13
|
+
<th><strong>Description</strong></th>
|
|
14
|
+
<th><strong>Expiry</strong></th>
|
|
15
|
+
</tr>
|
|
16
|
+
<tr>
|
|
17
|
+
<td><p>OptanonAlertBoxClosed</p></td>
|
|
18
|
+
<td><p>codeforlife.education</p></td>
|
|
19
|
+
<td><p>This cookie is set by the cookie compliance solution from OneTrust. It is set after visitors have
|
|
20
|
+
seen a cookie information notice and in some cases only when they actively close the notice down. It
|
|
21
|
+
enables the website not to show the message more than once to a user. It contains no personal
|
|
22
|
+
information.</p>
|
|
23
|
+
</td>
|
|
24
|
+
<td><p>1 year</p></td>
|
|
25
|
+
</tr>
|
|
26
|
+
<tr>
|
|
27
|
+
<td><p>OptanonConsent</p></td>
|
|
28
|
+
<td><p>codeforlife.education</p></td>
|
|
29
|
+
<td><p>This cookie is set by the cookie compliance solution from OneTrust. It stores information about
|
|
30
|
+
the categories of cookies the site uses and whether visitors have given or withdrawn consent for the
|
|
31
|
+
use of each category. This enables site owners to prevent cookies in each category from being set in
|
|
32
|
+
the users browser, when consent is not given. It contains no information that can identify the site
|
|
33
|
+
visitor.</p>
|
|
34
|
+
</td>
|
|
35
|
+
<td><p>1 year</p></td>
|
|
36
|
+
</tr>
|
|
37
|
+
<tr>
|
|
38
|
+
<td><p>csrftoken</p></td>
|
|
39
|
+
<td><p>codeforlife.education</p></td>
|
|
40
|
+
<td><p>This cookie is associated with the Django web development platform for Python. It is designed to
|
|
41
|
+
help protect a site against a particular type of software attack on web forms.</p>
|
|
42
|
+
</td>
|
|
43
|
+
<td><p>1 year</p></td>
|
|
44
|
+
</tr>
|
|
45
|
+
<tr>
|
|
46
|
+
<td><p>sessionid</p></td>
|
|
47
|
+
<td><p>codeforlife.education</p></td>
|
|
48
|
+
<td><p>This cookie is associated with the Django web development platform for Python. It contains a
|
|
49
|
+
special session id to identify each browser and its associated session with the site.</p>
|
|
50
|
+
</td>
|
|
51
|
+
<td><p>Session</p></td>
|
|
52
|
+
</tr>
|
|
53
|
+
<tr>
|
|
54
|
+
<td><p>_GRECAPTCHA</p></td>
|
|
55
|
+
<td><p>www.google.com</p></td>
|
|
56
|
+
<td><p>Cookie used by Google Recaptcha. It is used for risk analysis in spam protection and may store
|
|
57
|
+
browsing device information.</p>
|
|
58
|
+
</td>
|
|
59
|
+
<td><p>5 months</p></td>
|
|
60
|
+
</tr>
|
|
61
|
+
</table>
|
|
62
|
+
|
|
63
|
+
<h6>Analytics / Performance Cookies</h6>
|
|
64
|
+
|
|
65
|
+
<table class="table table-bordered header-primary">
|
|
66
|
+
<colgroup>
|
|
67
|
+
<col span="1" style="width: 23%;">
|
|
68
|
+
<col span="1" style="width: 20%;">
|
|
69
|
+
<col span="1" style="width: 47%;">
|
|
70
|
+
<col span="1" style="width: 10%;">
|
|
71
|
+
</colgroup>
|
|
72
|
+
<tr>
|
|
73
|
+
<th><strong>Cookie name</strong></th>
|
|
74
|
+
<th><strong>Host</strong></th>
|
|
75
|
+
<th><strong>Description</strong></th>
|
|
76
|
+
<th><strong>Expiry</strong></th>
|
|
77
|
+
</tr>
|
|
78
|
+
<tr>
|
|
79
|
+
<td><p>_ga</p></td>
|
|
80
|
+
<td><p>codeforlife.education</p></td>
|
|
81
|
+
<td><p>This cookie is associated with Google Universal Analytics - which is a significant update to
|
|
82
|
+
Google's more commonly used analytics service. This cookie is used to distinguish unique users by
|
|
83
|
+
assigning a randomly generated number as a client identifier. It is included in each page request in
|
|
84
|
+
a site and used to calculate visitor, session and campaign data for the sites analytics reports.</p>
|
|
85
|
+
</td>
|
|
86
|
+
<td><p>1 year</p></td>
|
|
87
|
+
</tr>
|
|
88
|
+
<tr>
|
|
89
|
+
<td><p>_gid</p></td>
|
|
90
|
+
<td><p>codeforlife.education</p></td>
|
|
91
|
+
<td><p>This cookie is associated with Google Universal Analytics. It is used to store and count page
|
|
92
|
+
views.</p>
|
|
93
|
+
</td>
|
|
94
|
+
<td><p>A few seconds</p></td>
|
|
95
|
+
</tr>
|
|
96
|
+
<tr>
|
|
97
|
+
<td><p>_ga_xxxxxxxxxx</p></td>
|
|
98
|
+
<td><p>codeforlife.education</p></td>
|
|
99
|
+
<td><p>This cookie is associated with Google Universal Analytics. Used to distinguish unique users by
|
|
100
|
+
assigning a randomly generated number as a client identifier. Its primary purpose is to help website
|
|
101
|
+
owners measure visitor interactions, track site usage, and provide personalised experiences to
|
|
102
|
+
enhance user engagement.</p>
|
|
103
|
+
</td>
|
|
104
|
+
<td><p>1 year</p></td>
|
|
105
|
+
</tr>
|
|
106
|
+
<tr>
|
|
107
|
+
<td><p>_gat_UA-xxxxxxxx-x</p></td>
|
|
108
|
+
<td><p>codeforlife.education</p></td>
|
|
109
|
+
<td><p>This cookie is associated with Google Tag Manager. It is used to store to provide technical
|
|
110
|
+
monitoring and limit the amount of data recorded by Google on high-traffic sites.</p>
|
|
111
|
+
</td>
|
|
112
|
+
<td><p>1 minute</p></td>
|
|
113
|
+
</tr>
|
|
114
|
+
<tr>
|
|
115
|
+
<td><p>_gat_gtag_UA_xxxxxxxx_x</p></td>
|
|
116
|
+
<td><p>codeforlife.education</p></td>
|
|
117
|
+
<td><p>This cookie is associated with Google Tag Manager. It is used to store a unique user ID.</p>
|
|
118
|
+
</td>
|
|
119
|
+
<td><p>1 minute</p></td>
|
|
120
|
+
</tr>
|
|
121
|
+
</table>
|
|
122
|
+
|
|
123
|
+
<h6>Functional Cookies</h6>
|
|
124
|
+
|
|
125
|
+
<table class="table table-bordered header-primary">
|
|
126
|
+
<colgroup>
|
|
127
|
+
<col span="1" style="width: 23%;">
|
|
128
|
+
<col span="1" style="width: 20%;">
|
|
129
|
+
<col span="1" style="width: 47%;">
|
|
130
|
+
<col span="1" style="width: 10%;">
|
|
131
|
+
</colgroup>
|
|
132
|
+
<tr>
|
|
133
|
+
<th><strong>Cookie name</strong></th>
|
|
134
|
+
<th><strong>Host</strong></th>
|
|
135
|
+
<th><strong>Description</strong></th>
|
|
136
|
+
<th><strong>Expiry</strong></th>
|
|
137
|
+
</tr>
|
|
138
|
+
<tr>
|
|
139
|
+
<td><p>preferredLanguage</p></td>
|
|
140
|
+
<td><p>codeforlife.education</p></td>
|
|
141
|
+
<td><p>This cookie is used to remember your selected language preference in Rapid Router and Python Den,
|
|
142
|
+
so you don't have to keep selecting it every time you load a new level.</p>
|
|
143
|
+
</td>
|
|
144
|
+
<td><p>Session</p></td>
|
|
145
|
+
</tr>
|
|
146
|
+
<tr>
|
|
147
|
+
<td><p>muted</p></td>
|
|
148
|
+
<td><p>codeforlife.education</p></td>
|
|
149
|
+
<td><p>This cookie is used to remember your muted setting in Rapid Router and Python Den, so you don't
|
|
150
|
+
have to keep setting it every time you load a new level.</p>
|
|
151
|
+
</td>
|
|
152
|
+
<td><p>Session</p></td>
|
|
153
|
+
</tr>
|
|
154
|
+
<tr>
|
|
155
|
+
<td><p>__cf_bm</p></td>
|
|
156
|
+
<td><p>pwnedpasswords.com</p></td>
|
|
157
|
+
<td><p>This cookie is used by CloudFlare to read and filter requests from bots.</p>
|
|
158
|
+
</td>
|
|
159
|
+
<td><p>30 minutes</p></td>
|
|
160
|
+
</tr>
|
|
161
|
+
</table>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{# A popup for delete account with Review classes button. #}
|
|
2
|
+
<section id="popup-delete-review" class="popup-wrapper">
|
|
3
|
+
<div class="popup-box">
|
|
4
|
+
<div>
|
|
5
|
+
<button class="close popup-box__close" type="button" id="close_popup_button" onclick="hideDeleteAccountPopup()" aria-label="Close">
|
|
6
|
+
<span class="iconify" data-icon="mdi:close"></span>
|
|
7
|
+
</button>
|
|
8
|
+
</div>
|
|
9
|
+
<div class="popup-box__title"></div>
|
|
10
|
+
<div class="popup-box__msg"></div>
|
|
11
|
+
<div class="popup-box__buttons justify-content-center">
|
|
12
|
+
<a id="review_button" class="button button--primary" href="{% url 'dashboard' %}#classes" onclick="$('#tab-classes').click(); hideDeleteAccountPopup();" aria-labelledby="review_button">Review classes</a>
|
|
13
|
+
<a id="cancel_popup_button" class="button button--secondary button--secondary--dark" onclick="hideDeleteAccountPopup()" aria-labelledby="cancel_popup_button">Cancel</a>
|
|
14
|
+
<a id="delete_button" class='button button--primary button--primary--danger button--icon' data-delete-path="{% url 'delete_account' %}" onclick="" aria-labelledby="delete_button">
|
|
15
|
+
Delete <span class="iconify" data-icon="mdi:delete-outline"></span></a>
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
</section>
|