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.
- 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.33.5.dist-info → codeforlife_portal-8.9.9.dist-info}/RECORD +339 -241
- {codeforlife_portal-5.33.5.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.33.5.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 +4 -2
- 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 +8 -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 -91
- 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 +96 -9
- 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 +235 -166
- portal/views/admin.py +0 -332
- portal/views/api.py +82 -48
- 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/core.py +22 -19
- portal/views/two_factor/profile.py +2 -2
- codeforlife_portal-5.33.5.dist-info/LICENSE.md +0 -577
- codeforlife_portal-5.33.5.dist-info/METADATA +0 -38
- deploy/permissions.py +0 -2
- example_project/manage.py +0 -10
- portal/autoconfig.py +0 -141
- 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
|
@@ -3,9 +3,15 @@
|
|
|
3
3
|
{% load app_tags %}
|
|
4
4
|
|
|
5
5
|
{% block subNav %}
|
|
6
|
+
{% if user|is_independent_student %}
|
|
7
|
+
<section class="banner banner--independent-student row mx-0">
|
|
8
|
+
{% else %}
|
|
6
9
|
<section class="banner banner--student row mx-0">
|
|
10
|
+
{% endif %}
|
|
7
11
|
<div>
|
|
8
|
-
<h1 class="banner__text--primary">
|
|
12
|
+
<h1 class="banner__text--primary">
|
|
13
|
+
Welcome, {{ user|make_into_username }}
|
|
14
|
+
</h1>
|
|
9
15
|
<h4>This is where you can access your games</h4>
|
|
10
16
|
</div>
|
|
11
17
|
</section>
|
|
@@ -14,31 +20,39 @@
|
|
|
14
20
|
{% block content %}
|
|
15
21
|
<div id="play_dashboard_page">
|
|
16
22
|
<div class="background container">
|
|
17
|
-
<section><h4>Your
|
|
23
|
+
<section><h4>Your games</h4></section>
|
|
18
24
|
<div class="grid-games col-center col-sm-9">
|
|
19
25
|
<div class="card">
|
|
20
26
|
<div class="card__images">
|
|
21
|
-
<img title="Rapid Router" alt="Rapid Router"
|
|
27
|
+
<img title="Rapid Router" alt="Rapid Router"
|
|
28
|
+
class="card__image"
|
|
29
|
+
src="{% static 'portal/img/RR_logo_grass_background.png' %}">
|
|
22
30
|
</div>
|
|
23
31
|
<div class="card__text">
|
|
24
32
|
<h5 class="card__title">Rapid Router</h5>
|
|
25
|
-
<p>Rapid Router guides you, and makes learning to code easy
|
|
26
|
-
|
|
33
|
+
<p>Rapid Router guides you, and makes learning to code easy
|
|
34
|
+
and great fun. Using Blockly, you can advance through
|
|
35
|
+
the levels to become an Ocado delivery hero.</p>
|
|
27
36
|
<div class="button-group">
|
|
28
|
-
<a href="{% url 'levels'%}"
|
|
37
|
+
<a href="{% url 'levels'%}"
|
|
38
|
+
class="button button--primary">Play</a>
|
|
29
39
|
</div>
|
|
30
40
|
</div>
|
|
31
41
|
</div>
|
|
32
42
|
<div class="card">
|
|
33
43
|
<div class="card__images">
|
|
34
|
-
<img title="
|
|
44
|
+
<img title="Python Den" alt="Python Den"
|
|
45
|
+
class="card__image"
|
|
46
|
+
src="{% static 'portal/img/python_den.png' %}">
|
|
35
47
|
</div>
|
|
36
48
|
<div class="card__text">
|
|
37
|
-
<h5 class="card__title">
|
|
38
|
-
<p>
|
|
39
|
-
|
|
49
|
+
<h5 class="card__title">Python Den</h5>
|
|
50
|
+
<p>The Python Den takes you on a programming journey from
|
|
51
|
+
beginner to syntax superhero. Build a good solid
|
|
52
|
+
foundation of Python to start your coding career!</p>
|
|
40
53
|
<div class="button-group">
|
|
41
|
-
<a href="{% url '
|
|
54
|
+
<a href="{% url 'python_levels'%}"
|
|
55
|
+
class="button button--primary">Play</a>
|
|
42
56
|
</div>
|
|
43
57
|
</div>
|
|
44
58
|
</div>
|
|
@@ -48,31 +62,30 @@
|
|
|
48
62
|
<div class="container">
|
|
49
63
|
<div class="text-center">
|
|
50
64
|
<section><img title="Rapid Router logo" alt="Rapid Router logo" src="{% static 'portal/img/RR_logo_simple.png' %}"></section>
|
|
51
|
-
<h4>You have completed {{ num_completed }} Rapid Router level{{ num_completed|pluralize }}!</h4>
|
|
52
|
-
<h4>You have {{ num_top_scores }} top score{{ num_top_scores|pluralize }}!</h4>
|
|
53
|
-
<h4>You have a score of {{ total_score }}. There are {{ total_available_score }} available points.</h4>
|
|
54
|
-
{% if total_custom_available_score %}
|
|
55
|
-
<h4>You have a score of {{ total_custom_score }} out of {{ total_custom_available_score }} available points on custom levels.</h4>
|
|
65
|
+
<h4>You have completed {{ rapid_router.num_completed }} Rapid Router level{{ rapid_router.num_completed|pluralize }}!</h4>
|
|
66
|
+
<h4>You have {{ rapid_router.num_top_scores }} top score{{ rapid_router.num_top_scores|pluralize }}!</h4>
|
|
67
|
+
<h4>You have a score of {{ rapid_router.total_score }}. There are {{ rapid_router.total_available_score }} available points.</h4>
|
|
68
|
+
{% if rapid_router.total_custom_available_score %}
|
|
69
|
+
<h4>You have a score of {{ rapid_router.total_custom_score }} out of {{ rapid_router.total_custom_available_score }} available points on custom levels.</h4>
|
|
56
70
|
{% endif %}
|
|
57
71
|
<section>
|
|
58
|
-
<a href="{% url 'scoreboard' %}"
|
|
72
|
+
<a href="{% url 'scoreboard' %}"
|
|
73
|
+
class="button button--primary button-right-arrow">
|
|
74
|
+
Check scoreboard
|
|
75
|
+
</a>
|
|
59
76
|
</section>
|
|
60
77
|
</div>
|
|
61
78
|
</div>
|
|
62
79
|
</div>
|
|
63
|
-
<div class="background
|
|
64
|
-
<
|
|
65
|
-
<div class="
|
|
66
|
-
<img title="
|
|
67
|
-
|
|
80
|
+
<div class="background background--python-den">
|
|
81
|
+
<div class="container">
|
|
82
|
+
<div class="text-center">
|
|
83
|
+
<section><img title="Python Den logo" alt="Python Den logo" src="{% static 'portal/img/logo_python_den.svg' %}"></section>
|
|
84
|
+
<h4>You have completed {{ python_den.num_completed }} Python Den level{{ python_den.num_completed|pluralize }}!</h4>
|
|
85
|
+
<h4>You have {{ python_den.num_top_scores }} top score{{ python_den.num_top_scores|pluralize }}!</h4>
|
|
86
|
+
<h4>You have a score of {{ python_den.total_score }}. There are {{ python_den.total_available_score }} available points.</h4>
|
|
68
87
|
</div>
|
|
69
|
-
|
|
70
|
-
<h4>You are exploring Challenge {{ worksheet_id }} with your class!</h4>
|
|
71
|
-
<img class="col-center col-sm-9" title="Kurono active game" alt="Kurono active game" src="{{ worksheet_image | cloud_storage }}">
|
|
72
|
-
{% else %}
|
|
73
|
-
<h4>You do not have any Kurono games yet.</h4>
|
|
74
|
-
{% endif %}
|
|
75
|
-
</section>
|
|
88
|
+
</div>
|
|
76
89
|
</div>
|
|
77
90
|
</div>
|
|
78
91
|
{% endblock %}
|
|
@@ -14,7 +14,23 @@
|
|
|
14
14
|
</section>
|
|
15
15
|
{% endblock subNav %}
|
|
16
16
|
|
|
17
|
+
{% block scripts %}
|
|
18
|
+
{{ block.super }}
|
|
19
|
+
<script type="text/javascript" src="{% static 'portal/js/organisation_manage.js' %}"></script>
|
|
20
|
+
<script type="text/javascript" src="{% static 'portal/js/passwordStrength.js' %}"></script>
|
|
21
|
+
<script>
|
|
22
|
+
var INDEP_STUDENT_PASSWORD_FIELD_ID = '{{ form.password.auto_id }}';
|
|
23
|
+
</script>
|
|
24
|
+
<script>
|
|
25
|
+
{% if delete_account_confirm %}
|
|
26
|
+
showDeleteAccountConfirmation("{{ delete_account_form.delete_password.value }}", "{{ delete_account_form.unsubscribe_newsletter.value }}", false)
|
|
27
|
+
{% endif %}
|
|
28
|
+
</script>
|
|
29
|
+
{% endblock scripts %}
|
|
30
|
+
|
|
17
31
|
{% block content %}
|
|
32
|
+
{% include "portal/partials/delete_popup.html" %}
|
|
33
|
+
|
|
18
34
|
<div id="play_account_page"></div>
|
|
19
35
|
<div class="background container">
|
|
20
36
|
<section><h4>
|
|
@@ -26,7 +42,7 @@
|
|
|
26
42
|
</h4></section>
|
|
27
43
|
|
|
28
44
|
{% if user.new_student.class_field %}
|
|
29
|
-
<p>You may edit your password below. It must be long enough and hard enough to stop your friends guessing it and
|
|
45
|
+
<p>You may edit your password below. It must be long enough and hard enough to stop your friends guessing it and
|
|
30
46
|
stealing all of your hard work. Choose something memorable though.</p>
|
|
31
47
|
<p>If you have any problems, ask a teacher to help you.</p>
|
|
32
48
|
{% else %}
|
|
@@ -35,7 +51,7 @@
|
|
|
35
51
|
Please ensure your password is strong enough to be secure.</p>
|
|
36
52
|
{% endif %}
|
|
37
53
|
|
|
38
|
-
<form id="student_account_form" method="post">
|
|
54
|
+
<form autocomplete="off" id="student_account_form" method="post">
|
|
39
55
|
{% csrf_token %}
|
|
40
56
|
{{ form.non_field_errors }}
|
|
41
57
|
|
|
@@ -64,20 +80,23 @@
|
|
|
64
80
|
<div class="form--row__input col-md-4">
|
|
65
81
|
<div class="input--icon">
|
|
66
82
|
{{ form.password }}
|
|
67
|
-
<span class="iconify" data-icon="
|
|
83
|
+
<span id="password-field-icon" class="iconify" data-icon="material-symbols:visibility-off"></span>
|
|
68
84
|
</div>
|
|
69
85
|
<small>{{ form.password.help_text }}</small>
|
|
70
86
|
{{ form.password.errors }}
|
|
71
87
|
</div>
|
|
72
88
|
<div class="form--row__input col-md-4">
|
|
73
|
-
|
|
89
|
+
<div class="input--icon">
|
|
90
|
+
{{ form.confirm_password }}
|
|
91
|
+
<span id="confirm-password-field-icon" class="iconify" data-icon="material-symbols:visibility-off"></span>
|
|
92
|
+
</div>
|
|
74
93
|
<small>{{ form.confirm_password.help_text }}</small>
|
|
75
94
|
{{ form.confirm_password.errors }}
|
|
76
95
|
</div>
|
|
77
96
|
<div class="form--row__input col-md-4">
|
|
78
97
|
<div class="input--icon">
|
|
79
98
|
{{ form.current_password }}
|
|
80
|
-
<span class="iconify" data-icon="
|
|
99
|
+
<span id="current-password-field-icon" class="iconify" data-icon="material-symbols:visibility-off"></span>
|
|
81
100
|
</div>
|
|
82
101
|
<small>{{ form.current_password.help_text }}</small>
|
|
83
102
|
{{ form.current_password.errors }}
|
|
@@ -113,11 +132,47 @@
|
|
|
113
132
|
<a class="button button--primary" href="{% url 'student_join_organisation' %}">Join</a>
|
|
114
133
|
</div>
|
|
115
134
|
</div>
|
|
135
|
+
<div id="delete-indy-account" class="background">
|
|
136
|
+
<div class="container">
|
|
137
|
+
<h5>Delete account</h5>
|
|
138
|
+
<p>If you no longer wish to have a Code for Life account, you can delete it by confirming below.
|
|
139
|
+
You will receive an email to confirm this decision.
|
|
140
|
+
</p>
|
|
141
|
+
<p><b>This can't be reversed.</b>
|
|
142
|
+
</p>
|
|
143
|
+
|
|
144
|
+
<form autocomplete="off" method="post" id="form-delete-indy-account">
|
|
145
|
+
|
|
146
|
+
{% csrf_token %}
|
|
147
|
+
|
|
148
|
+
{{ delete_account_form.non_field_errors }}
|
|
149
|
+
|
|
150
|
+
<div class="row form--row">
|
|
151
|
+
<div class="form--row__input col-sm-6 col-md-4">
|
|
152
|
+
<div class="input--icon">
|
|
153
|
+
{{ delete_account_form.delete_password }}
|
|
154
|
+
<span id="delete-password-field-icon" class="iconify" data-icon="material-symbols:visibility-off"></span>
|
|
155
|
+
</div>
|
|
156
|
+
<small>{{ delete_account_form.delete_password.help_text }}</small>
|
|
157
|
+
{{ delete_account_form.delete_password.errors }}
|
|
158
|
+
</div>
|
|
159
|
+
<div class="form--row__input col-sm-6 col-md-8">
|
|
160
|
+
<div class="form__checkbox">
|
|
161
|
+
<div class="form__checkbox-input">
|
|
162
|
+
{{ delete_account_form.unsubscribe_newsletter }}
|
|
163
|
+
</div>
|
|
164
|
+
<label for="id_{{ delete_account_form.unsubscribe_newsletter.html_name }}">{{ delete_account_form.unsubscribe_newsletter.label }}</label>
|
|
165
|
+
</div>
|
|
166
|
+
{{ delete_account_form.unsubscribe_newsletter.errors }}
|
|
167
|
+
</div>
|
|
168
|
+
</div>
|
|
169
|
+
<button id="delete_account_button" class="button button--primary button--primary--danger button--icon" name="delete_account">
|
|
170
|
+
Delete account <span class="iconify" data-icon="mdi:delete-outline"></span>
|
|
171
|
+
</button>
|
|
172
|
+
</form>
|
|
173
|
+
</div>
|
|
174
|
+
</div>
|
|
116
175
|
{% endif %}
|
|
117
176
|
|
|
118
|
-
<script type="text/javascript" src="{% static 'portal/js/passwordStrength.js' %}"></script>
|
|
119
|
-
<script>
|
|
120
|
-
var INDEP_STUDENT_PASSWORD_FIELD_ID = '{{ form.password.auto_id }}';
|
|
121
|
-
</script>
|
|
122
177
|
|
|
123
178
|
{% endblock %}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{% extends 'portal/base.html' %}
|
|
2
2
|
{% load static %}
|
|
3
|
-
{% load
|
|
4
|
-
{% load app_tags banner_tags headline_tags character_list_tags %}
|
|
3
|
+
{% load app_tags banner_tags headline_tags %}
|
|
5
4
|
|
|
6
5
|
{% block subNav %}
|
|
7
6
|
{% banner banner_name="BANNER" %}
|
|
@@ -15,35 +14,41 @@
|
|
|
15
14
|
|
|
16
15
|
<div class="background container">
|
|
17
16
|
<section class="banner--rapid-router">
|
|
18
|
-
<img title="Rapid Router logo"
|
|
17
|
+
<img title="Rapid Router logo"
|
|
18
|
+
alt="Banner image of Rapid Router logo and game"
|
|
19
|
+
src="{% static 'common/img/RR_logo.svg' %}">
|
|
19
20
|
</section>
|
|
20
21
|
<div class="background row d-flex">
|
|
21
22
|
<div class="col-sm-6 d-flex flex-column">
|
|
22
23
|
<div class="flex-grow-1">
|
|
23
24
|
<h5 class="mt-0">Starting with Blockly</h5>
|
|
24
|
-
<p>Starting with Blockly, you can learn to become a coding
|
|
25
|
-
|
|
25
|
+
<p>Starting with Blockly, you can learn to become a coding
|
|
26
|
+
superhero, amaze your friends with your high scores. Create
|
|
27
|
+
levels for your friends and compete for the most coins.</p>
|
|
26
28
|
<p>If you are not part of a school, you can <a href="{% url 'register' %}">register here</a>.</p>
|
|
27
29
|
</div>
|
|
28
30
|
<div class="row my-4">
|
|
29
31
|
<div class="col-sm-12">
|
|
30
|
-
<a href="https://
|
|
32
|
+
<a href="https://code-for-life.gitbook.io/rapid-router/blockly-guide"
|
|
33
|
+
class="button button--primary button--icon col-sm-8"
|
|
34
|
+
target="_blank">
|
|
31
35
|
Learn more about Blockly<span class="iconify" data-icon="mdi:open-in-new"></span></a>
|
|
32
36
|
</div>
|
|
33
37
|
</div>
|
|
34
38
|
<div class="row">
|
|
35
39
|
<div class="col-sm-12">
|
|
36
|
-
<a href="{% url 'levels' %}"
|
|
37
|
-
|
|
40
|
+
<a href="{% url 'levels' %}"
|
|
41
|
+
class="button button--primary button--icon col-sm-8">
|
|
42
|
+
Try Rapid Router <span class="iconify" data-icon="mdi:chevron-right"></span></a>
|
|
38
43
|
</div>
|
|
39
44
|
</div>
|
|
40
45
|
</div>
|
|
41
46
|
<div class="col-sm-6">
|
|
42
|
-
<
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
</a>
|
|
47
|
+
<a href="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdCZE3FuBgH5fHsGocKGv%2Fuploads%2FSEr3nRjqHATuyL3c4Zdt%2FCode%20for%20Life%20-%20Rapid%20Router%20for%20students.mp4?alt=media"
|
|
48
|
+
class="youtube">
|
|
49
|
+
<img src="{% static 'portal/img/thumbnail_play_rapid_router.png' %}"
|
|
50
|
+
alt="Image of Rapid Router game with try button in bottom right corner">
|
|
51
|
+
</a>
|
|
47
52
|
</div>
|
|
48
53
|
</div>
|
|
49
54
|
</div>
|
|
@@ -52,59 +57,74 @@
|
|
|
52
57
|
<h4>Meet the characters</h4>
|
|
53
58
|
<div class="container image-row text-left">
|
|
54
59
|
<div>
|
|
55
|
-
<img title="Wes" alt="
|
|
60
|
+
<img title="Wes" alt="Illustration of Wes"
|
|
61
|
+
src="{% static 'portal/img/wes.png' %}">
|
|
56
62
|
<h5>Wes</h5>
|
|
57
|
-
<p>Wes is as cunning as a fox, which is weird, because he's actually
|
|
63
|
+
<p>Wes is as cunning as a fox, which is weird, because he's actually
|
|
64
|
+
a wolf.</p>
|
|
58
65
|
</div>
|
|
59
66
|
<div>
|
|
60
|
-
<img title="Kirsty" alt="
|
|
67
|
+
<img title="Kirsty" alt="Illustration of Kirsty"
|
|
68
|
+
src="{% static 'portal/img/kirsty.png' %}">
|
|
61
69
|
<h5>Kirsty</h5>
|
|
62
|
-
<p>Kirsty is a girl with big ambitions. Her biggest ambition is to
|
|
70
|
+
<p>Kirsty is a girl with big ambitions. Her biggest ambition is to
|
|
71
|
+
take the crown, and rule the world!</p>
|
|
63
72
|
</div>
|
|
64
73
|
<div>
|
|
65
|
-
<img title="Dee" alt="
|
|
74
|
+
<img title="Dee" alt="Illustration of Dee"
|
|
75
|
+
src="{% static 'portal/img/dee.png' %}">
|
|
66
76
|
<h5>Dee</h5>
|
|
67
|
-
<p>Dee is a Mark II DeliviBot. She's super friendly and her wire
|
|
77
|
+
<p>Dee is a Mark II DeliviBot. She's super friendly and her wire
|
|
78
|
+
hair sparks when she laughs.</p>
|
|
68
79
|
</div>
|
|
69
80
|
<div>
|
|
70
|
-
<img title="Nigel" alt="
|
|
81
|
+
<img title="Nigel" alt="Illustration of Nigel"
|
|
82
|
+
src="{% static 'portal/img/nigel.png' %}">
|
|
71
83
|
<h5>Nigel</h5>
|
|
72
|
-
<p>Nigel is the tallest kid in his class, and he's growing taller by
|
|
84
|
+
<p>Nigel is the tallest kid in his class, and he's growing taller by
|
|
85
|
+
the day.</p>
|
|
73
86
|
</div>
|
|
74
87
|
<div>
|
|
75
|
-
<img title="Phil" alt="
|
|
88
|
+
<img title="Phil" alt="Illustration of Phil"
|
|
89
|
+
src="{% static 'portal/img/phil.png' %}">
|
|
76
90
|
<h5>Phil</h5>
|
|
77
|
-
<p>Phil is a Boarsnark, however, he is different to most Boarsnarks
|
|
91
|
+
<p>Phil is a Boarsnark, however, he is different to most Boarsnarks
|
|
92
|
+
because he's very kind, and very gentle.</p>
|
|
78
93
|
</div>
|
|
79
94
|
</div>
|
|
80
95
|
</section>
|
|
81
96
|
|
|
82
97
|
<div class="background container">
|
|
83
|
-
<section
|
|
84
|
-
<img title="
|
|
98
|
+
<section>
|
|
99
|
+
<img title="Python Den logo"
|
|
100
|
+
alt="Banner image of Python Den logo and game"
|
|
101
|
+
src="{% static 'portal/img/python_den_banner.svg' %}">
|
|
85
102
|
</section>
|
|
86
103
|
<div class="background row d-flex">
|
|
104
|
+
<div class="col-sm-6">
|
|
105
|
+
<img src="{% static 'portal/img/python_den.png' %}"
|
|
106
|
+
alt="Python Den logo and characters">
|
|
107
|
+
</div>
|
|
87
108
|
<div class="col-sm-6 d-flex flex-column">
|
|
88
109
|
<div class="flex-grow-1">
|
|
89
|
-
<h5 class="mt-0">
|
|
90
|
-
<p>
|
|
91
|
-
|
|
92
|
-
|
|
110
|
+
<h5 class="mt-0">Python programming</h5>
|
|
111
|
+
<p>The Python Den is an exploration of Python programming
|
|
112
|
+
through a comprehensive course with free lesson plans,
|
|
113
|
+
videos and worksheets to support you in your learning.</p>
|
|
114
|
+
<p>From foundational syntax to advanced concepts like loops
|
|
115
|
+
and data manipulation, each session is a new challenge.</p>
|
|
116
|
+
<p>We aim to provide a tried-and-tested, structured set of
|
|
117
|
+
lessons that you can use at home or in class, no matter
|
|
118
|
+
your own level of experience.</p>
|
|
93
119
|
</div>
|
|
94
|
-
<div>
|
|
95
|
-
<
|
|
120
|
+
<div class="row my-4">
|
|
121
|
+
<div class="col-sm-12">
|
|
122
|
+
<a href="{% url 'python_levels' %}"
|
|
123
|
+
class="button button--primary button--icon col-sm-8">
|
|
124
|
+
Try Python Den <span class="iconify" data-icon="mdi:chevron-right"></span></a>
|
|
125
|
+
</div>
|
|
96
126
|
</div>
|
|
97
127
|
</div>
|
|
98
|
-
<div class="col-sm-6">
|
|
99
|
-
<img src="{% static 'portal/img/thumbnail_play_kurono.png' %}">
|
|
100
|
-
</div>
|
|
101
|
-
</div>
|
|
102
|
-
</div>
|
|
103
|
-
|
|
104
|
-
<div class="background background--primary">
|
|
105
|
-
<div class="container">
|
|
106
|
-
<h4 class="text-center">Meet the characters</h4>
|
|
107
|
-
{% character_list %}
|
|
108
128
|
</div>
|
|
109
129
|
</div>
|
|
110
130
|
|