codeforlife-portal 7.0.0__tar.gz → 7.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of codeforlife-portal might be problematic. Click here for more details.
- {codeforlife-portal-7.0.0/codeforlife_portal.egg-info → codeforlife-portal-7.1.0}/PKG-INFO +1 -1
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0/codeforlife_portal.egg-info}/PKG-INFO +1 -1
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/codeforlife_portal.egg-info/requires.txt +1 -1
- codeforlife-portal-7.1.0/portal/__init__.py +1 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/test_views.py +101 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/urls.py +15 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/cron/user.py +158 -15
- codeforlife-portal-7.0.0/portal/__init__.py +0 -1
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/LICENSE.md +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/MANIFEST.in +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/README.md +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/codeforlife_portal.egg-info/SOURCES.txt +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/codeforlife_portal.egg-info/dependency_links.txt +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/codeforlife_portal.egg-info/not-zip-safe +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/codeforlife_portal.egg-info/top_level.txt +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/deploy/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/deploy/captcha.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/deploy/middleware/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/deploy/middleware/admin_access.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/deploy/middleware/basicauth.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/deploy/middleware/exceptionlogging.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/deploy/middleware/screentime_warning.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/deploy/middleware/security.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/deploy/middleware/session_timeout.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/deploy/static/apple-touch-icon-120x120.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/deploy/static/apple-touch-icon-152x152.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/deploy/static/apple-touch-icon-180x180.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/deploy/static/apple-touch-icon-76x76.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/deploy/static/apple-touch-icon.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/deploy/static/robots.txt +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/deploy/templates/deploy/csrf_failure.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/deploy/views.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/admin.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/app_settings.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/backends.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/beta.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/context_processors.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/forms/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/forms/admin.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/forms/dotmailer.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/forms/error_messages.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/forms/invite_teacher.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/forms/organisation.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/forms/play.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/forms/registration.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/forms/teach.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/handlers.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/helpers/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/helpers/captcha.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/helpers/decorators.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/helpers/password.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/helpers/ratelimit.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/helpers/regexes.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/helpers/request_handlers.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0001_squashed_0041_new_news.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0042_school_country.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0043_auto_20150430_0952.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0044_auto_20150430_0959.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0045_auto_20150430_1446.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0046_auto_20150723_1101.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0047_remove_userprofile_avatar.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0048_plural_management_frontnews.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0049_refactor_emailverifications.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0050_refactor_emailverifications_2.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0051_add_missing_ev_records.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0052_refactor_emailverifications_3.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0053_refactor_teacher_student_1.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0054_pending_join_request_can_be_blank.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0055_add_preview_user.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0056_remove_preview_user.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0057_delete_frontpagenews.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0058_move_to_common_models.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0059_move_email_verifications_to_common.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0060_delete_guardian.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0061_make_portaladmin_teacher.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0062_verify_portaladmin.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/mixins/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/mixins/cron_mixin.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/models.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/permissions/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/permissions/is_cron_request_from_google.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/pipeline_compilers/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/pipeline_compilers/libsass_compiler.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/fonts/bootstrap/glyphicons-halflings-regular.eot +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/fonts/bootstrap/glyphicons-halflings-regular.svg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/fonts/bootstrap/glyphicons-halflings-regular.ttf +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/fonts/bootstrap/glyphicons-halflings-regular.woff +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/fonts/bootstrap/glyphicons-halflings-regular.woff2 +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/10_years_anniversary.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/10x_logo.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/RR_logo_grass_background.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/RR_logo_green.svg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/RR_logo_simple.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/about_us_cfl.jpg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/about_us_hero.jpg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/about_us_ocado.jpg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/barefoot_logo.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/bcs_logo.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/clubs.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/coding_club_hero.jpg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/coding_club_python_pack.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/colorboxImages/border.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/colorboxImages/controls.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/colorboxImages/loading.gif +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/colorboxImages/loading_background.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/colorboxImages/overlay.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/confirmation_tick.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/cross.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/dee.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/facebook.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/favicon.ico +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/get_involved_hero.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/gitbook.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/gitbook_space.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/github.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/github_hero.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/gla_logo.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/hamburger.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/help_and_support_hero.jpg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/home_educate.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/home_educate_hero.jpg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/home_learning_hero.jpg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/home_play.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/home_play_hero.jpg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/hope_logo.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/howe_dell_1.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/howe_dell_2.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/howe_dell_3.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/icl_logo.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/icon_controller.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/icon_free.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/icon_globe.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/icon_piechart.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/icon_step_by_step.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/icon_tracking.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/icon_uk_flag.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/kirsty.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/logo_cfl.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/logo_cfl_powered.svg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/logo_cfl_reminder_cards.jpg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/logo_cfl_white_landscape.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/logo_ocado.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/logo_ocado_group.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/logo_ocado_group.svg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/logo_ocado_group_white.svg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/long_europe_map.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/mc_saatchi_logo.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/nigel.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/ocado-swirl.svg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/oval_blue.svg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/oval_pink.svg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/oval_yellow.svg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/paper_plane.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/phil.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/polygon_blue.svg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/polygon_pink.svg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/polygon_yellow.svg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/pressure_cooker_logo.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/rapid_router.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/rapid_router_landing_hero.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/rapidrouter.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/resources_hero.jpg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/resources_montage.jpg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/reuben.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/rob.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/rr_advanced.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/rr_beginner.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/rr_intermediate.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/sadface.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/sharon_harrison.jpg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/sian.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/teaching_resources_hero.jpg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/ten_year_map_pin.svg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/thumbnail_educate_rapid_router.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/thumbnail_educate_resources.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/thumbnail_intro_c4l.jpg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/thumbnail_play_rapid_router.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/twitter.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/universities.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/wes.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/x_close_video.png +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/bootstrap.min.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/carouselCards.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/common.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/independentLogin.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/independentRegistration.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/join_create_game_toggle.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/jquery.placeholder.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/levelControl.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/lib/jquery-video-lightning.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/lib/jquery.colorbox.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/lib/jquery.easy-ticker.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/lib/jquery.min.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/lib/modernizr-build.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/lib/papaparse.min.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/organisation_manage.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/passwordStrength.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/play.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/resetPassword.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/riveted.min.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/school.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/sticky_subnav.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/studentLogin.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/teach_browser.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/teach_class.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/teacherEditStudent.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/teacherLogin.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/js/tenYearMap.js +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_alerts.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_badges.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_breadcrumbs.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_button-groups.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_buttons.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_carousel.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_close.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_code.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_component-animations.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_dropdowns.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_forms.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_glyphicons.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_grid.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_input-groups.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_jumbotron.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_labels.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_list-group.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_media.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_mixins.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_modals.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_navbar.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_navs.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_normalize.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_pager.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_pagination.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_panels.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_popovers.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_print.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_progress-bars.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_responsive-embed.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_responsive-utilities.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_scaffolding.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_tables.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_theme.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_thumbnails.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_tooltip.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_type.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_utilities.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_variables.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/_wells.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_alerts.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_background-variant.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_border-radius.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_breakpoints.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_buttons.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_center-block.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_clearfix.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_forms.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_gradients.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_grid-framework.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_grid.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_hide-text.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_image.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_labels.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_list-group.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_nav-divider.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_nav-vertical-align.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_opacity.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_pagination.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_panels.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_progress-bar.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_reset-filter.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_reset-text.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_resize.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_responsive-visibility.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_size.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_tab-focus.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_table-row.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_text-emphasis.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_text-overflow.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_text-truncate.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap/mixins/_vendor-prefixes.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap_mixins/_all.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap_mixins/_border-radius.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap_mixins/_box-shadow.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap_mixins/_hover.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap_mixins/_nav-divider.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap_partials/_dropdown.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap_partials/_glyphicons.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap_partials/_grid.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap_partials/_variables.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap_utilities/_align.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap_utilities/_background.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap_utilities/_borders.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap_utilities/_clearfix.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap_utilities/_cursor.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap_utilities/_display.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap_utilities/_flex.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap_utilities/_float.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap_utilities/_position.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap_utilities/_screenreaders.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap_utilities/_sizing.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap_utilities/_spacing.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap_utilities/_text.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/bootstrap_utilities/_visibility.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/colorbox.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/modules/_all.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/modules/_animation.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/modules/_breakpoints.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/modules/_card_constants.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/modules/_colours.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/modules/_homepage_constants.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/modules/_levels.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/modules/_mixins.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/modules/_spacing.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/partials/_banners.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/partials/_base.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/partials/_buttons.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/partials/_carousel.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/partials/_footer.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/partials/_forms.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/partials/_grids.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/partials/_header.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/partials/_images.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/partials/_popup.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/partials/_progress-bars.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/partials/_subnavs.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/partials/_tables.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/partials/_text.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/partials/_ui-dialog.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/partials/_utils.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/sass/styles.scss +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/video/code for life .pdf +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/strings/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/strings/about.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/strings/coding_club.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/strings/help_and_support.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/strings/home_learning.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/strings/materials.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/strings/play.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/strings/teach.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/strings/teacher_resources.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/strings/ten_year_map.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/403.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/404.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/500.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/captcha/includes/js_v2_invisible.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/captcha/widget_v2_invisible.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/email.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/email.txt +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/about.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/base.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/base_no_userprofile.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/coding_club.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/contribute.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/dotmailer_consent_form.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/email_invitation_sent.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/email_style_template.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/email_verification_failed.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/email_verification_needed.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/form_shapes.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/getinvolved.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/home.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/home_learning.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/locked_out.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/locked_out_school_student.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/login/independent_student.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/login/student.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/login/student_class_code.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/login/teacher.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/mouseflow.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/partials/banner.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/partials/benefits.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/partials/card_list.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/partials/character_list.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/partials/delete_popup.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/partials/footer.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/partials/header.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/partials/headline.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/partials/hero_card.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/partials/info_popup.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/partials/invite_admin_teacher.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/partials/popup.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/partials/register_newsletter_tickbox.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/partials/screentime_popup.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/partials/service_unavailable_popup.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/partials/session_popup.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/partials/teacher_non_dashboard_subnav.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/partials/teacher_non_dashboard_subnav_account.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/play/independent_student_dashboard.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/play/student_dashboard.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/play/student_edit_account.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/play/student_join_organisation.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/play.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/privacy_notice.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/register.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/reset_password.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/reset_password_confirm.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/reset_password_done.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/reset_password_email_sent.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/tag_manager/tag_manager_body.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/tag_manager/tag_manager_head.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/teach/base_registering.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/teach/class.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/teach/dashboard.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/teach/invited.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/teach/onboarding_classes.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/teach/onboarding_print.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/teach/onboarding_school.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/teach/onboarding_students.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/teach/teacher_add_external_student.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/teach/teacher_added_external_student.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/teach/teacher_dismiss_students.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/teach/teacher_edit_class.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/teach/teacher_edit_student.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/teach/teacher_move_all_classes.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/teach/teacher_move_students.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/teach/teacher_move_students_to_class.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/teach.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/ten_year_map.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/portal/terms.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/two_factor/_base.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/two_factor/_wizard_actions.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/two_factor/_wizard_actions_enable_2fa.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/two_factor/_wizard_actions_submit.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/two_factor/_wizard_forms.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/two_factor/_wizard_forms_token.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/two_factor/backup_token.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/two_factor/core/backup_tokens.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/two_factor/core/login.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/two_factor/core/setup.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/two_factor/core/setup_complete.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/two_factor/profile/disable.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/two_factor/profile/profile.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templates/two_factor/setup_wizard_token.html +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templatetags/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templatetags/app_tags.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templatetags/banner_tags.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templatetags/benefits_tags.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templatetags/card_list_tags.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templatetags/future.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templatetags/headline_tags.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templatetags/hero_card_tags.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/templatetags/table_tags.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/base_test.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/conftest.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/migrations/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/migrations/test_migration_make_portaladmin_teacher.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/migrations/test_migration_preview_user_remove.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/migrations/test_migration_preview_users.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/migrations/test_migration_remove_front_page_news.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/migrations/test_migration_remove_guardian.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/migrations/test_migration_use_common_models.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/migrations/test_migration_verify_portaladmin.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/admin/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/admin/admin_base_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/admin/admin_data_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/admin/admin_map_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/base_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/email_verification_needed_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/forbidden_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/game_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/home_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/independent_login_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/password_reset_form_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/password_reset_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/play/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/play/account_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/play/dashboard_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/play/join_school_or_club_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/play/play_base_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/play_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/resources_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/signup_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/student_login_class_code.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/student_login_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/teach/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/teach/add_independent_student_to_class_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/teach/added_independent_student_to_class_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/teach/class_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/teach/dashboard_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/teach/dismiss_students_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/teach/edit_student_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/teach/move_class_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/teach/move_classes_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/teach/move_students_disambiguate_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/teach/move_students_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/teach/onboarding_classes_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/teach/onboarding_organisation_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/teach/onboarding_student_list_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/teach/onboarding_students_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/teach/teach_base_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/pageObjects/portal/teacher_login_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/selenium_test_case.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/snapshots/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/snapshots/snap_test_partials.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/test_2FA.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/test_admin.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/test_api.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/test_captcha_forms.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/test_class.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/test_daily_activities.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/test_emails.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/test_helper_methods.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/test_independent_student.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/test_invite_teacher.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/test_middleware.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/test_newsletter_footer.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/test_organisation.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/test_partials.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/test_ratelimit.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/test_school_student.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/test_security.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/test_teacher.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/test_teacher_student.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/utils/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/utils/classes.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/tests/utils/messages.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/about.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/admin.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/api.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/cron/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/dotmailer.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/email.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/home.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/legal.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/login/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/login/independent_student.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/login/student.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/login/teacher.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/organisation.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/play_landing_page.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/registration.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/student/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/student/edit_account_details.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/student/play.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/teach.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/teacher/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/teacher/dashboard.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/teacher/teach.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/two_factor/__init__.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/two_factor/core.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/two_factor/form.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/views/two_factor/profile.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/wsgi.py +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/pyproject.toml +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/setup.cfg +0 -0
- {codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/setup.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "7.1.0"
|
|
@@ -16,6 +16,7 @@ from common.models import (
|
|
|
16
16
|
UserProfile,
|
|
17
17
|
UserSession,
|
|
18
18
|
)
|
|
19
|
+
from common.mail import campaign_ids
|
|
19
20
|
from common.tests.utils.classes import create_class_directly
|
|
20
21
|
from common.tests.utils.organisation import (
|
|
21
22
|
create_organisation_directly,
|
|
@@ -1197,3 +1198,103 @@ class TestUser(CronTestCase):
|
|
|
1197
1198
|
is_verified=False,
|
|
1198
1199
|
assert_active=False,
|
|
1199
1200
|
)
|
|
1201
|
+
|
|
1202
|
+
@patch("portal.views.cron.user.send_dotdigital_email")
|
|
1203
|
+
def send_inactivity_reminder(
|
|
1204
|
+
self,
|
|
1205
|
+
days: int,
|
|
1206
|
+
view_name: str,
|
|
1207
|
+
assert_called: bool,
|
|
1208
|
+
campaign_name: str,
|
|
1209
|
+
mock_send_dotdigital_email: Mock,
|
|
1210
|
+
):
|
|
1211
|
+
self.teacher_user.date_joined = timezone.now() - timedelta(
|
|
1212
|
+
days=days, hours=12
|
|
1213
|
+
)
|
|
1214
|
+
self.teacher_user.save()
|
|
1215
|
+
self.student_user.date_joined = timezone.now() - timedelta(
|
|
1216
|
+
days=days, hours=12
|
|
1217
|
+
)
|
|
1218
|
+
self.student_user.save()
|
|
1219
|
+
self.indy_user.last_login = timezone.now() - timedelta(
|
|
1220
|
+
days=days, hours=12
|
|
1221
|
+
)
|
|
1222
|
+
self.indy_user.save()
|
|
1223
|
+
|
|
1224
|
+
self.client.get(reverse(view_name))
|
|
1225
|
+
|
|
1226
|
+
if assert_called:
|
|
1227
|
+
mock_send_dotdigital_email.assert_any_call(
|
|
1228
|
+
campaign_ids[campaign_name], [self.teacher_user.email]
|
|
1229
|
+
)
|
|
1230
|
+
|
|
1231
|
+
mock_send_dotdigital_email.assert_any_call(
|
|
1232
|
+
campaign_ids[campaign_name], [self.indy_user.email]
|
|
1233
|
+
)
|
|
1234
|
+
|
|
1235
|
+
# Check only two emails are sent - the student should never be included.
|
|
1236
|
+
assert mock_send_dotdigital_email.call_count == 2
|
|
1237
|
+
else:
|
|
1238
|
+
mock_send_dotdigital_email.assert_not_called()
|
|
1239
|
+
|
|
1240
|
+
mock_send_dotdigital_email.reset_mock()
|
|
1241
|
+
|
|
1242
|
+
def test_first_inactivity_reminder_view(self):
|
|
1243
|
+
self.send_inactivity_reminder(
|
|
1244
|
+
729,
|
|
1245
|
+
"first-inactivity-reminder",
|
|
1246
|
+
False,
|
|
1247
|
+
"inactive_users_on_website_first_reminder",
|
|
1248
|
+
)
|
|
1249
|
+
self.send_inactivity_reminder(
|
|
1250
|
+
730,
|
|
1251
|
+
"first-inactivity-reminder",
|
|
1252
|
+
True,
|
|
1253
|
+
"inactive_users_on_website_first_reminder",
|
|
1254
|
+
)
|
|
1255
|
+
self.send_inactivity_reminder(
|
|
1256
|
+
731,
|
|
1257
|
+
"first-inactivity-reminder",
|
|
1258
|
+
False,
|
|
1259
|
+
"inactive_users_on_website_first_reminder",
|
|
1260
|
+
)
|
|
1261
|
+
|
|
1262
|
+
def test_second_inactivity_reminder_view(self):
|
|
1263
|
+
self.send_inactivity_reminder(
|
|
1264
|
+
972,
|
|
1265
|
+
"second-inactivity-reminder",
|
|
1266
|
+
False,
|
|
1267
|
+
"inactive_users_on_website_second_reminder",
|
|
1268
|
+
)
|
|
1269
|
+
self.send_inactivity_reminder(
|
|
1270
|
+
973,
|
|
1271
|
+
"second-inactivity-reminder",
|
|
1272
|
+
True,
|
|
1273
|
+
"inactive_users_on_website_second_reminder",
|
|
1274
|
+
)
|
|
1275
|
+
self.send_inactivity_reminder(
|
|
1276
|
+
974,
|
|
1277
|
+
"second-inactivity-reminder",
|
|
1278
|
+
False,
|
|
1279
|
+
"inactive_users_on_website_second_reminder",
|
|
1280
|
+
)
|
|
1281
|
+
|
|
1282
|
+
def test_final_inactivity_reminder_view(self):
|
|
1283
|
+
self.send_inactivity_reminder(
|
|
1284
|
+
1064,
|
|
1285
|
+
"final-inactivity-reminder",
|
|
1286
|
+
False,
|
|
1287
|
+
"inactive_users_on_website_final_reminder",
|
|
1288
|
+
)
|
|
1289
|
+
self.send_inactivity_reminder(
|
|
1290
|
+
1065,
|
|
1291
|
+
"final-inactivity-reminder",
|
|
1292
|
+
True,
|
|
1293
|
+
"inactive_users_on_website_final_reminder",
|
|
1294
|
+
)
|
|
1295
|
+
self.send_inactivity_reminder(
|
|
1296
|
+
1066,
|
|
1297
|
+
"final-inactivity-reminder",
|
|
1298
|
+
False,
|
|
1299
|
+
"inactive_users_on_website_final_reminder",
|
|
1300
|
+
)
|
|
@@ -164,6 +164,21 @@ urlpatterns = [
|
|
|
164
164
|
cron.user.AnonymiseUnverifiedAccounts.as_view(),
|
|
165
165
|
name="anonymise-unverified-accounts",
|
|
166
166
|
),
|
|
167
|
+
path(
|
|
168
|
+
"inactive/send-first-reminder/",
|
|
169
|
+
cron.user.FirstInactivityReminderView.as_view(),
|
|
170
|
+
name="first-inactivity-reminder",
|
|
171
|
+
),
|
|
172
|
+
path(
|
|
173
|
+
"inactive/send-second-reminder/",
|
|
174
|
+
cron.user.SecondInactivityReminderView.as_view(),
|
|
175
|
+
name="second-inactivity-reminder",
|
|
176
|
+
),
|
|
177
|
+
path(
|
|
178
|
+
"inactive/send-final-reminder/",
|
|
179
|
+
cron.user.FinalInactivityReminderView.as_view(),
|
|
180
|
+
name="final-inactivity-reminder",
|
|
181
|
+
),
|
|
167
182
|
]
|
|
168
183
|
),
|
|
169
184
|
),
|
|
@@ -5,24 +5,28 @@ from common.helpers.emails import generate_token_for_email
|
|
|
5
5
|
from common.mail import campaign_ids, send_dotdigital_email
|
|
6
6
|
from common.models import DailyActivity, TotalActivity
|
|
7
7
|
from django.contrib.auth.models import User
|
|
8
|
-
from django.db.models import F
|
|
8
|
+
from django.db.models import F, Q
|
|
9
9
|
from django.db.models.query import QuerySet
|
|
10
10
|
from django.urls import reverse
|
|
11
11
|
from django.utils import timezone
|
|
12
12
|
from rest_framework.response import Response
|
|
13
13
|
from rest_framework.views import APIView
|
|
14
14
|
|
|
15
|
-
from portal.views.api import anonymise
|
|
16
|
-
|
|
17
15
|
from ...mixins import CronMixin
|
|
16
|
+
from ...views.api import anonymise
|
|
18
17
|
|
|
19
|
-
# TODO: move email templates to DotDigital.
|
|
20
18
|
USER_1ST_VERIFY_EMAIL_REMINDER_DAYS = 7
|
|
21
19
|
USER_2ND_VERIFY_EMAIL_REMINDER_DAYS = 14
|
|
22
20
|
USER_DELETE_UNVERIFIED_ACCOUNT_DAYS = 19
|
|
23
21
|
|
|
22
|
+
USER_1ST_INACTIVE_REMINDER_DAYS = 730 # 2 years
|
|
23
|
+
USER_2ND_INACTIVE_REMINDER_DAYS = 973 # roughly 2 years and 8 months
|
|
24
|
+
USER_FINAL_INACTIVE_REMINDER_DAYS = 1065 # 2 years and 11 months
|
|
25
|
+
|
|
24
26
|
|
|
25
|
-
def get_unverified_users(
|
|
27
|
+
def get_unverified_users(
|
|
28
|
+
days: int, same_day: bool
|
|
29
|
+
) -> (QuerySet[User], QuerySet[User]):
|
|
26
30
|
now = timezone.now()
|
|
27
31
|
|
|
28
32
|
# All expired unverified users.
|
|
@@ -31,7 +35,9 @@ def get_unverified_users(days: int, same_day: bool) -> (QuerySet[User], QuerySet
|
|
|
31
35
|
userprofile__is_verified=False,
|
|
32
36
|
)
|
|
33
37
|
if same_day:
|
|
34
|
-
user_queryset = user_queryset.filter(
|
|
38
|
+
user_queryset = user_queryset.filter(
|
|
39
|
+
date_joined__gt=now - timedelta(days=days + 1)
|
|
40
|
+
)
|
|
35
41
|
|
|
36
42
|
teacher_queryset = user_queryset.filter(
|
|
37
43
|
new_teacher__isnull=False,
|
|
@@ -45,10 +51,31 @@ def get_unverified_users(days: int, same_day: bool) -> (QuerySet[User], QuerySet
|
|
|
45
51
|
return teacher_queryset, independent_student_queryset
|
|
46
52
|
|
|
47
53
|
|
|
54
|
+
def get_inactive_users(days: int) -> QuerySet[User]:
|
|
55
|
+
now = timezone.now()
|
|
56
|
+
|
|
57
|
+
# All users who haven't logged in in X days OR who've never logged in and
|
|
58
|
+
# registered over X days ago.
|
|
59
|
+
user_queryset = User.objects.filter(
|
|
60
|
+
Q(
|
|
61
|
+
last_login__isnull=False,
|
|
62
|
+
last_login__lte=now - timedelta(days=days),
|
|
63
|
+
last_login__gt=now - timedelta(days=days + 1),
|
|
64
|
+
)
|
|
65
|
+
| Q(
|
|
66
|
+
last_login__isnull=True,
|
|
67
|
+
date_joined__lte=now - timedelta(days=days),
|
|
68
|
+
date_joined__gt=now - timedelta(days=days + 1),
|
|
69
|
+
)
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
return user_queryset.exclude(email__isnull=True).exclude(email="")
|
|
73
|
+
|
|
74
|
+
|
|
48
75
|
def build_absolute_google_uri(request, location: str) -> str:
|
|
49
76
|
"""
|
|
50
|
-
This is needed specifically for emails sent by cron jobs as the protocol for
|
|
51
|
-
and the service name is wrongly parsed.
|
|
77
|
+
This is needed specifically for emails sent by cron jobs as the protocol for
|
|
78
|
+
cron jobs is HTTP and the service name is wrongly parsed.
|
|
52
79
|
"""
|
|
53
80
|
url = request.build_absolute_uri(location)
|
|
54
81
|
url = url.replace("http", "https")
|
|
@@ -70,7 +97,9 @@ class FirstVerifyEmailReminderView(CronMixin, APIView):
|
|
|
70
97
|
|
|
71
98
|
if user_count > 0:
|
|
72
99
|
sent_email_count = 0
|
|
73
|
-
for email in user_queryset.values_list("email", flat=True).iterator(
|
|
100
|
+
for email in user_queryset.values_list("email", flat=True).iterator(
|
|
101
|
+
chunk_size=500
|
|
102
|
+
):
|
|
74
103
|
email_verification_url = build_absolute_google_uri(
|
|
75
104
|
request,
|
|
76
105
|
reverse(
|
|
@@ -83,7 +112,9 @@ class FirstVerifyEmailReminderView(CronMixin, APIView):
|
|
|
83
112
|
send_dotdigital_email(
|
|
84
113
|
campaign_ids["verify_new_user_first_reminder"],
|
|
85
114
|
[email],
|
|
86
|
-
personalization_values={
|
|
115
|
+
personalization_values={
|
|
116
|
+
"VERIFICATION_LINK": email_verification_url
|
|
117
|
+
},
|
|
87
118
|
)
|
|
88
119
|
|
|
89
120
|
sent_email_count += 1
|
|
@@ -109,7 +140,9 @@ class SecondVerifyEmailReminderView(CronMixin, APIView):
|
|
|
109
140
|
if user_count > 0:
|
|
110
141
|
|
|
111
142
|
sent_email_count = 0
|
|
112
|
-
for email in user_queryset.values_list("email", flat=True).iterator(
|
|
143
|
+
for email in user_queryset.values_list("email", flat=True).iterator(
|
|
144
|
+
chunk_size=500
|
|
145
|
+
):
|
|
113
146
|
email_verification_url = build_absolute_google_uri(
|
|
114
147
|
request,
|
|
115
148
|
reverse(
|
|
@@ -122,7 +155,9 @@ class SecondVerifyEmailReminderView(CronMixin, APIView):
|
|
|
122
155
|
send_dotdigital_email(
|
|
123
156
|
campaign_ids["verify_new_user_second_reminder"],
|
|
124
157
|
[email],
|
|
125
|
-
personalization_values={
|
|
158
|
+
personalization_values={
|
|
159
|
+
"VERIFICATION_LINK": email_verification_url
|
|
160
|
+
},
|
|
126
161
|
)
|
|
127
162
|
|
|
128
163
|
sent_email_count += 1
|
|
@@ -157,14 +192,122 @@ class AnonymiseUnverifiedAccounts(CronMixin, APIView):
|
|
|
157
192
|
user_count -= User.objects.filter(is_active=True).count()
|
|
158
193
|
logging.info(f"{user_count} unverified users anonymised.")
|
|
159
194
|
|
|
160
|
-
activity_today = DailyActivity.objects.get_or_create(
|
|
195
|
+
activity_today = DailyActivity.objects.get_or_create(
|
|
196
|
+
date=datetime.now().date()
|
|
197
|
+
)[0]
|
|
161
198
|
activity_today.anonymised_unverified_teachers = teacher_count
|
|
162
199
|
activity_today.anonymised_unverified_independents = indy_count
|
|
163
200
|
activity_today.save()
|
|
164
201
|
|
|
165
202
|
TotalActivity.objects.update(
|
|
166
|
-
anonymised_unverified_teachers=F("anonymised_unverified_teachers")
|
|
167
|
-
|
|
203
|
+
anonymised_unverified_teachers=F("anonymised_unverified_teachers")
|
|
204
|
+
+ teacher_count,
|
|
205
|
+
anonymised_unverified_independents=F(
|
|
206
|
+
"anonymised_unverified_independents"
|
|
207
|
+
)
|
|
208
|
+
+ indy_count,
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
return Response()
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
class FirstInactivityReminderView(CronMixin, APIView):
|
|
215
|
+
def get(self, request):
|
|
216
|
+
user_queryset = get_inactive_users(USER_1ST_INACTIVE_REMINDER_DAYS)
|
|
217
|
+
user_count = user_queryset.count()
|
|
218
|
+
|
|
219
|
+
logging.info(
|
|
220
|
+
f"{user_count} inactive users after "
|
|
221
|
+
f"{USER_1ST_INACTIVE_REMINDER_DAYS} days."
|
|
222
|
+
)
|
|
223
|
+
|
|
224
|
+
if user_count > 0:
|
|
225
|
+
sent_email_count = 0
|
|
226
|
+
for email in user_queryset.values_list("email", flat=True).iterator(
|
|
227
|
+
chunk_size=500
|
|
228
|
+
):
|
|
229
|
+
try:
|
|
230
|
+
send_dotdigital_email(
|
|
231
|
+
campaign_ids[
|
|
232
|
+
"inactive_users_on_website_first_reminder"
|
|
233
|
+
],
|
|
234
|
+
[email],
|
|
235
|
+
)
|
|
236
|
+
|
|
237
|
+
sent_email_count += 1
|
|
238
|
+
except Exception as ex:
|
|
239
|
+
logging.exception(ex)
|
|
240
|
+
|
|
241
|
+
logging.info(
|
|
242
|
+
f"Reminded {sent_email_count}/{user_count} inactive users."
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
return Response()
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
class SecondInactivityReminderView(CronMixin, APIView):
|
|
249
|
+
def get(self, request):
|
|
250
|
+
user_queryset = get_inactive_users(USER_2ND_INACTIVE_REMINDER_DAYS)
|
|
251
|
+
user_count = user_queryset.count()
|
|
252
|
+
|
|
253
|
+
logging.info(
|
|
254
|
+
f"{user_count} inactive users after "
|
|
255
|
+
f"{USER_2ND_INACTIVE_REMINDER_DAYS} days."
|
|
256
|
+
)
|
|
257
|
+
|
|
258
|
+
if user_count > 0:
|
|
259
|
+
sent_email_count = 0
|
|
260
|
+
for email in user_queryset.values_list("email", flat=True).iterator(
|
|
261
|
+
chunk_size=500
|
|
262
|
+
):
|
|
263
|
+
try:
|
|
264
|
+
send_dotdigital_email(
|
|
265
|
+
campaign_ids[
|
|
266
|
+
"inactive_users_on_website_second_reminder"
|
|
267
|
+
],
|
|
268
|
+
[email],
|
|
269
|
+
)
|
|
270
|
+
|
|
271
|
+
sent_email_count += 1
|
|
272
|
+
except Exception as ex:
|
|
273
|
+
logging.exception(ex)
|
|
274
|
+
|
|
275
|
+
logging.info(
|
|
276
|
+
f"Reminded {sent_email_count}/{user_count} inactive users."
|
|
277
|
+
)
|
|
278
|
+
|
|
279
|
+
return Response()
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
class FinalInactivityReminderView(CronMixin, APIView):
|
|
283
|
+
def get(self, request):
|
|
284
|
+
user_queryset = get_inactive_users(USER_FINAL_INACTIVE_REMINDER_DAYS)
|
|
285
|
+
user_count = user_queryset.count()
|
|
286
|
+
|
|
287
|
+
logging.info(
|
|
288
|
+
f"{user_count} inactive users after "
|
|
289
|
+
f"{USER_FINAL_INACTIVE_REMINDER_DAYS} days."
|
|
168
290
|
)
|
|
169
291
|
|
|
292
|
+
if user_count > 0:
|
|
293
|
+
sent_email_count = 0
|
|
294
|
+
for email in user_queryset.values_list("email", flat=True).iterator(
|
|
295
|
+
chunk_size=500
|
|
296
|
+
):
|
|
297
|
+
try:
|
|
298
|
+
send_dotdigital_email(
|
|
299
|
+
campaign_ids[
|
|
300
|
+
"inactive_users_on_website_final_reminder"
|
|
301
|
+
],
|
|
302
|
+
[email],
|
|
303
|
+
)
|
|
304
|
+
|
|
305
|
+
sent_email_count += 1
|
|
306
|
+
except Exception as ex:
|
|
307
|
+
logging.exception(ex)
|
|
308
|
+
|
|
309
|
+
logging.info(
|
|
310
|
+
f"Reminded {sent_email_count}/{user_count} inactive users."
|
|
311
|
+
)
|
|
312
|
+
|
|
170
313
|
return Response()
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "7.0.0"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/codeforlife_portal.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/codeforlife_portal.egg-info/not-zip-safe
RENAMED
|
File without changes
|
{codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/codeforlife_portal.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/deploy/middleware/screentime_warning.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/deploy/static/apple-touch-icon-120x120.png
RENAMED
|
File without changes
|
{codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/deploy/static/apple-touch-icon-152x152.png
RENAMED
|
File without changes
|
{codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/deploy/static/apple-touch-icon-180x180.png
RENAMED
|
File without changes
|
{codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/deploy/static/apple-touch-icon-76x76.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/deploy/templates/deploy/csrf_failure.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0042_school_country.py
RENAMED
|
File without changes
|
{codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0043_auto_20150430_0952.py
RENAMED
|
File without changes
|
{codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0044_auto_20150430_0959.py
RENAMED
|
File without changes
|
{codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0045_auto_20150430_1446.py
RENAMED
|
File without changes
|
{codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0046_auto_20150723_1101.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0055_add_preview_user.py
RENAMED
|
File without changes
|
{codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0056_remove_preview_user.py
RENAMED
|
File without changes
|
{codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0057_delete_frontpagenews.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0060_delete_guardian.py
RENAMED
|
File without changes
|
|
File without changes
|
{codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/migrations/0062_verify_portaladmin.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/pipeline_compilers/libsass_compiler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/RR_logo_green.svg
RENAMED
|
File without changes
|
{codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/RR_logo_simple.png
RENAMED
|
File without changes
|
{codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/about_us_cfl.jpg
RENAMED
|
File without changes
|
{codeforlife-portal-7.0.0 → codeforlife-portal-7.1.0}/portal/static/portal/img/about_us_hero.jpg
RENAMED
|
File without changes
|