codeforlife-portal 1.0.0.post.dev367__tar.gz → 1.0.0.post.dev373__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.
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/PKG-INFO +1 -1
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/codeforlife_portal.egg-info/PKG-INFO +1 -1
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/codeforlife_portal.egg-info/SOURCES.txt +2 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/_version.py +2 -2
- codeforlife-portal-1.0.0.post.dev373/portal/forms/play_new.py +137 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/forms/teach.py +7 -7
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/forms/teach_new.py +11 -12
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/passwordStrength_new.js +35 -32
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/sass/styles.scss +5 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/materials/home.html +3 -3
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach.html +6 -6
- codeforlife-portal-1.0.0.post.dev373/portal/templates/redesign/register.html +116 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/home_page_new.py +5 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/signup_page.py +30 -8
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/dashboard_page_new.py +0 -2
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach_page.py +2 -2
- codeforlife-portal-1.0.0.post.dev373/portal/tests/test_independent_student_new.py +57 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_organisation_new.py +0 -2
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/utils/student_new.py +34 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/email_new.py +1 -1
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/home.py +1 -1
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/home_new.py +38 -13
- codeforlife-portal-1.0.0.post.dev367/portal/templates/redesign/register.html +0 -94
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/MANIFEST.in +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/README.md +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/codeforlife_portal.egg-info/dependency_links.txt +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/codeforlife_portal.egg-info/not-zip-safe +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/codeforlife_portal.egg-info/requires.txt +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/codeforlife_portal.egg-info/top_level.txt +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/__init__.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/captcha.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/mail.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/middleware/__init__.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/middleware/basicauth.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/middleware/exceptionlogging.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/permissions.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/static/apple-touch-icon-120x120.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/static/apple-touch-icon-152x152.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/static/apple-touch-icon-180x180.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/static/apple-touch-icon-76x76.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/static/apple-touch-icon.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/static/robots.txt +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/templates/deploy/csrf_failure.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/views.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/example_project/__init__.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/example_project/example_project/__init__.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/example_project/example_project/settings.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/example_project/example_project/wsgi.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/example_project/manage.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/__init__.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/admin.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/app_settings.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/autoconfig.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/beta.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/emailMessages.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/emailMessages_new.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/forms/__init__.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/forms/admin_login.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/forms/auth_forms.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/forms/home.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/forms/organisation.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/forms/play.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/forms/registration.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/handlers.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/helpers/__init__.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/helpers/emails.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/helpers/emails_new.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/helpers/generators.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/helpers/location.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/helpers/password.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/middleware/__init__.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/middleware/ratelimit_login_attempts.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0001_squashed_0041_new_news.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0042_school_country.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0043_auto_20150430_0952.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0044_auto_20150430_0959.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0045_auto_20150430_1446.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0046_auto_20150723_1101.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0047_remove_userprofile_avatar.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0048_plural_management_frontnews.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0049_refactor_emailverifications.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0050_refactor_emailverifications_2.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0051_add_missing_ev_records.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0052_refactor_emailverifications_3.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0053_refactor_teacher_student_1.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/__init__.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/models.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/permissions.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/email_media/logo_c4l_hexa.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/colorbox.css +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/common.css +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/KS-level-sprite.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/Menu-arrow-down.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/animated-overlay.gif +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-bg_flat_10_000000_40x100.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-icons_222222_256x240.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-icons_228ef1_256x240.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-icons_ef8c08_256x240.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-icons_ffd27a_256x240.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-icons_ffffff_256x240.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/jquery-ui.css +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/jquery-ui.structure.css +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/jquery-ui.theme.css +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/list.css +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/materials.css +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/noJS.css +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/reset.css +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/solution_selection.css +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/styles.css +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/tables.css +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/fonts/glyphicons-halflings-regular.eot +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/fonts/glyphicons-halflings-regular.svg +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/fonts/glyphicons-halflings-regular.ttf +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/fonts/glyphicons-halflings-regular.woff +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/fonts/glyphicons-halflings-regular.woff2 +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/2fa_authenticator_link.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/RR_logo_blank.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/RRlogo_on_green.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/RRlogo_on_green_small.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/RRlogo_on_less_green.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/RRlogo_on_less_green_small.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/colorboxImages/border.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/colorboxImages/controls.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/colorboxImages/loading.gif +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/colorboxImages/loading_background.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/colorboxImages/overlay.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/dee_hi_res.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/dee_large.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/dee_red_box.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/favicon.ico +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/kirsty.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/kirsty_hi_res.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/kirsty_large.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_001.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_002.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_003.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_004.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_005.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_006.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_007.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_008.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_009.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_010.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_011.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_012.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_013.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_014.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_015.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_016.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_017.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_018.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_019.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_020.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_021.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_022.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_023.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_024.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_025.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_026.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_027.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_028.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_029.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_030.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_031.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_032.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_033.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_034.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_035.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_036.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_037.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_038.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_039.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_040.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_041.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_042.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_043.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_044.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_045.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_046.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_047.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_048.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_049.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_050.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_051.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_052.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_053.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_054.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_055.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_056.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_057.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_058.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_059.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_060.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_061.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_062.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_063.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_064.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_065.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_066.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_067.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_068.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_069.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_070.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_071.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_072.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_073.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_074.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_075.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_076.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_077.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_078.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_079.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_080.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_081.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_082.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_083.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_084.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_085.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_086.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_087.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_088.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_089.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_090.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_091.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_092.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_093.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_094.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_095.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_096.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_097.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_098.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_099.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_100.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_101.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_102.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_103.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_104.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_105.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_106.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_107.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_108.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_109.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/logged_in_blob.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/logged_out_blob.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/logo_c4l_horizontal.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/movie_file.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/nigel.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/nigel_hi_res.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/nigel_large.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/padlock.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/pdfsmall.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/phil.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/phil_hi_res.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/phil_large.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/qr_code_scan.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/rrBG.jpg +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/rrBGIE.jpg +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/rrBGsmall.jpg +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solutionPY_080.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solutionPY_081.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solutionPY_082.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solutionPY_083.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solutionPY_084.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solutionPY_085.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solutionPY_086.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solutionPY_087.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solutionPY_088.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solutionPY_089.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solutionPY_090.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solutionPY_091.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_001.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_002.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_003.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_004.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_005.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_006.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_007.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_008.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_009.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_010.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_011.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_012.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_013.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_014.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_015.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_016.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_017.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_018.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_019.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_020.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_021.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_022.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_023.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_024.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_025.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_026.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_027.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_028.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_029.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_030.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_031.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_032.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_033.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_034.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_035.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_036.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_037.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_038.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_039.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_040.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_041.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_042.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_043.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_044.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_045.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_046.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_047.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_048.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_049.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_050.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_051.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_052.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_053.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_054.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_055.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_056.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_057.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_058.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_059.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_060.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_061.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_062.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_063.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_064.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_065.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_066.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_067.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_068.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_069.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_070.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_071.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_072.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_073.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_074.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_075.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_076.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_077.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_078.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_079.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_080.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_081.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_082.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_083.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_084.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_085.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_086.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_087.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_088.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_089.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_090.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_091.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_092.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_093.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_094.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_095.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_096.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_097.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_098.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_099.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_100.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_101.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_102.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_103.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_104.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_105.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_106.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_107.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_108.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_109.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/video_still.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/wes.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/wes_hi_res.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/wes_large.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/zip.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/10x_logo.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/a_fun_game_for_students.jpg +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/about_blockly.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/about_us_hero.jpg +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/background_blue.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/background_orange.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/barefoot_logo.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/bcs_logo.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/cross.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/dee.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/facebook.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/footer_arrow.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/form_chooser_arrow.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/gla_logo.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/google+.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/hamburger.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/help_and_support_hero.jpg +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/home_educate_hero.jpg +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/home_play_hero.jpg +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/hope_logo.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/icl_logo.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/icon_13.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/icon_free.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/icon_game.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/icon_globe.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/icon_graph.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/icon_laptop.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/icon_steps.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/kirsty.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/logo_c4l_hexa.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/logo_c4l_horizontal.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/logo_ocado.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/logout_icon.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/mc_saatchi_logo.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/nigel.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/paper_plane.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/phil.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/play_button.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/pressure_cooker_logo.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/rapid_router.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/rapid_router_background.jpg +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/rapid_router_landing_hero.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/resources_image.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/sadface.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/sharon_harrison.jpg +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/stage_icon_ks1.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/stage_icon_lks2.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/stage_icon_uks2.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/step_done.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/step_in_progress.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/step_undone.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/teacher1.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/teacher2.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/teacher3.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/teacher_dashboard.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/teaching_resources.jpg +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/teaching_tools.jpg +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/thumbnail_intro_c4l.jpg +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/thumbnail_intro_rr.jpg +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/twitter.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/warning.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/wes.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/zip.png +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/bootstrap.js +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/common.js +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/deleteWorkspaces.js +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/fuzzySchoolLookup.js +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/jquery.placeholder.js +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/lib/jquery-ui.js +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/lib/jquery-video-lightning.js +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/lib/jquery.colorbox.js +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/lib/jquery.easy-ticker.js +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/lib/jquery.js +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/lib/magnific.js +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/lib/modernizr.custom.79639.js +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/organisation_manage.js +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/passwordStrength.js +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/play.js +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/riveted.min.js +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/solutionSelection.js +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/teach_browser.js +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/teach_class.js +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/sass/bootstrap.scss +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/sass/colorbox.scss +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/403.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/404.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/500.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/email.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/email.txt +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/2FA_redirect.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/about.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/admin/aggregated_data.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/admin/map.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/base.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/base_no_userprofile.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/contact.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/email_verification_failed.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/email_verification_needed.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/help-and-support.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/home.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/locked_out.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/mouseflow.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/play/base.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/play/student_details.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/play/student_edit_account.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/play/student_join_organisation.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/play.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/base.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/materials/base.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/materials/viewer.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/organisation_create.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/organisation_manage.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_add_external_student.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_added_external_student.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_class.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_classes.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_dismiss_students.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_edit_account.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_edit_class.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_edit_student.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_home.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_lesson_plans.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_lesson_plans_python.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_level_solutions.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_move_all_classes.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_move_class.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_move_students.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_move_students_to_class.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_new_students.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_solution.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_solutionPY.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_student_reset.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_students_reset.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/terms.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/about_new.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/base_new.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/email_verification_failed_new.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/email_verification_needed_new.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/help-and-support_new.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/home_new.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/login.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/play_new.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/base_class_edit.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/base_logged_in.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/base_registering.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/class_new.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/dashboard.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/materials_new.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/onboarding_classes.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/onboarding_complete.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/onboarding_join_pending.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/onboarding_print.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/onboarding_school.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/onboarding_students.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/viewer_new.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/terms_new.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/registration/login.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/registration/password_reset_complete.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/registration/password_reset_confirm.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/registration/password_reset_done.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/registration/password_reset_email.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/registration/student_password_reset_form.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/registration/teacher_password_reset_form.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/two_factor/_base.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/two_factor/core/setup_complete.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/two_factor/profile/profile.html +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templatetags/__init__.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templatetags/app_tags.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templatetags/table_tags.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/__init__.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/base_test.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/base_test_migration.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/base_test_new.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/custom_handler.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/__init__.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/__init__.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/about_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/admin/__init__.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/admin/admin_base_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/admin/admin_data_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/admin/admin_login_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/admin/admin_map_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/base_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/contact_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/email_verification_needed_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/email_verification_needed_page_new.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/forbidden_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/game_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/help_and_support_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/home_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/login_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/pdf_viewer_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/play/__init__.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/play/account_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/play/dashboard_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/play/join_school_or_club_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/play/play_base_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/play_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/resources_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/__init__.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/account_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/add_independent_student_to_class_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/added_independent_student_to_class_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/class_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/class_settings_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/classes_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/dashboard_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/dismiss_students_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/move_class_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/move_students_disambiguate_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/move_students_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/new_students_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/onboarding_classes_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/onboarding_organisation_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/onboarding_revoke_request_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/onboarding_student_list_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/onboarding_students_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/organisation_create_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/organisation_manage_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/organisation_revoke_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/teach_base_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/teach_base_page_new.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/thanks_for_reset_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/terms_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/registration/__init__.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/registration/independent_student_login_form_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/registration/password_reset_form_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/registration/student_password_reset_form_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/registration/teacher_password_reset_form_page.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_admin.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_class.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_class_new.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_emails.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_independent_student.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_independent_student_joins_a_class.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_location.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_navigation.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_organisation.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_school_student.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_school_student_new.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_security.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_teacher.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_teacher_new.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_teacher_student.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_teacher_student_new.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_views.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_views_new.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/utils/__init__.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/utils/classes.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/utils/classes_new.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/utils/email.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/utils/messages.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/utils/organisation.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/utils/organisation_new.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/utils/student.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/utils/teacher.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/utils/teacher_new.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/urls.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/utils.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/__init__.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/admin.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/email.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/organisation.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/organisation_new.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/play.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/registration.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/teacher/__init__.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/teacher/dashboard.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/teacher/home.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/teacher/pdfs.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/teacher/solutions_level_selector.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/teacher/teach.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/teacher/teach_new.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/wsgi.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/ratelimit/__init__.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/ratelimit/backends/__init__.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/ratelimit/backends/cache.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/ratelimit/decorators.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/reports/__init__.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/reports/admin.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/reports/migrations/0001_initial.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/reports/migrations/0002_hitsperlevelperday.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/reports/migrations/__init__.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/reports/models.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/reports/tests.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/reports/urls.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/reports/views.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/setup.cfg +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/setup.py +0 -0
- {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/versioneer.py +0 -0
|
@@ -49,6 +49,7 @@ portal/forms/auth_forms.py
|
|
|
49
49
|
portal/forms/home.py
|
|
50
50
|
portal/forms/organisation.py
|
|
51
51
|
portal/forms/play.py
|
|
52
|
+
portal/forms/play_new.py
|
|
52
53
|
portal/forms/registration.py
|
|
53
54
|
portal/forms/teach.py
|
|
54
55
|
portal/forms/teach_new.py
|
|
@@ -564,6 +565,7 @@ portal/tests/test_class_new.py
|
|
|
564
565
|
portal/tests/test_emails.py
|
|
565
566
|
portal/tests/test_independent_student.py
|
|
566
567
|
portal/tests/test_independent_student_joins_a_class.py
|
|
568
|
+
portal/tests/test_independent_student_new.py
|
|
567
569
|
portal/tests/test_location.py
|
|
568
570
|
portal/tests/test_navigation.py
|
|
569
571
|
portal/tests/test_organisation.py
|
{codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/_version.py
RENAMED
|
@@ -11,8 +11,8 @@ version_json = '''
|
|
|
11
11
|
{
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "1.0.0.post.
|
|
14
|
+
"full-revisionid": "5e1af72fbe38cce9f86d4d65bf05688ebcecc2d2",
|
|
15
|
+
"version": "1.0.0.post.dev373"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Code for Life
|
|
3
|
+
#
|
|
4
|
+
# Copyright (C) 2016, Ocado Innovation Limited
|
|
5
|
+
#
|
|
6
|
+
# This program is free software: you can redistribute it and/or modify
|
|
7
|
+
# it under the terms of the GNU Affero General Public License as
|
|
8
|
+
# published by the Free Software Foundation, either version 3 of the
|
|
9
|
+
# License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This program is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
# GNU Affero General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Affero General Public License
|
|
17
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
18
|
+
#
|
|
19
|
+
# ADDITIONAL TERMS – Section 7 GNU General Public Licence
|
|
20
|
+
#
|
|
21
|
+
# This licence does not grant any right, title or interest in any “Ocado” logos,
|
|
22
|
+
# trade names or the trademark “Ocado” or any other trademarks or domain names
|
|
23
|
+
# owned by Ocado Innovation Limited or the Ocado group of companies or any other
|
|
24
|
+
# distinctive brand features of “Ocado” as may be secured from time to time. You
|
|
25
|
+
# must not distribute any modification of this program using the trademark
|
|
26
|
+
# “Ocado” or claim any affiliation or association with Ocado or its employees.
|
|
27
|
+
#
|
|
28
|
+
# You are not authorised to use the name Ocado (or any of its trade names) or
|
|
29
|
+
# the names of any author or contributor in advertising or for publicity purposes
|
|
30
|
+
# pertaining to the distribution of this program, without the prior written
|
|
31
|
+
# authorisation of Ocado.
|
|
32
|
+
#
|
|
33
|
+
# Any propagation, distribution or conveyance of this program must include this
|
|
34
|
+
# copyright notice and these terms. You must not misrepresent the origins of this
|
|
35
|
+
# program; modified versions of the program must be marked as such and not
|
|
36
|
+
# identified as the original program.
|
|
37
|
+
from datetime import timedelta
|
|
38
|
+
|
|
39
|
+
from django import forms
|
|
40
|
+
from django.contrib.auth import authenticate
|
|
41
|
+
from django.contrib.auth.models import User
|
|
42
|
+
from django.utils import timezone
|
|
43
|
+
|
|
44
|
+
from portal.models import Student, Class, stripStudentName
|
|
45
|
+
from portal.helpers.password import password_strength_test
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class StudentLoginForm(forms.Form):
|
|
49
|
+
name = forms.CharField(
|
|
50
|
+
label='Name',
|
|
51
|
+
widget=forms.TextInput(attrs={'placeholder': "Jane"}))
|
|
52
|
+
access_code = forms.CharField(
|
|
53
|
+
label='Class Access Code',
|
|
54
|
+
widget=forms.TextInput(attrs={'placeholder': "AB123"}))
|
|
55
|
+
password = forms.CharField(
|
|
56
|
+
label='Password',
|
|
57
|
+
widget=forms.PasswordInput)
|
|
58
|
+
|
|
59
|
+
def clean(self):
|
|
60
|
+
if self.has_error('recaptcha'):
|
|
61
|
+
raise forms.ValidationError("Invalid name, class access code, password or captcha")
|
|
62
|
+
|
|
63
|
+
name = self.cleaned_data.get('name', None)
|
|
64
|
+
access_code = self.cleaned_data.get('access_code', None)
|
|
65
|
+
password = self.cleaned_data.get('password', None)
|
|
66
|
+
|
|
67
|
+
if name and access_code and password:
|
|
68
|
+
|
|
69
|
+
student, user = self.check_for_errors(name, access_code, password)
|
|
70
|
+
|
|
71
|
+
self.student = student
|
|
72
|
+
self.user = user
|
|
73
|
+
|
|
74
|
+
return self.cleaned_data
|
|
75
|
+
|
|
76
|
+
def check_for_errors(self, name, access_code, password):
|
|
77
|
+
classes = Class.objects.filter(access_code__iexact=access_code)
|
|
78
|
+
if len(classes) != 1:
|
|
79
|
+
raise forms.ValidationError("Invalid name, class access code or password")
|
|
80
|
+
|
|
81
|
+
name = stripStudentName(name)
|
|
82
|
+
|
|
83
|
+
students = Student.objects.filter(new_user__first_name__iexact=name, class_field=classes[0])
|
|
84
|
+
if len(students) != 1:
|
|
85
|
+
raise forms.ValidationError("Invalid name, class access code or password")
|
|
86
|
+
|
|
87
|
+
student = students[0]
|
|
88
|
+
user = authenticate(username=student.new_user.username, password=password)
|
|
89
|
+
|
|
90
|
+
if user is None:
|
|
91
|
+
raise forms.ValidationError("Invalid name, class access code or password")
|
|
92
|
+
if not user.is_active:
|
|
93
|
+
raise forms.ValidationError("This user account has been deactivated")
|
|
94
|
+
|
|
95
|
+
return student, user
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
class StudentSignupForm(forms.Form):
|
|
99
|
+
name = forms.CharField(
|
|
100
|
+
label='Name', max_length=100,
|
|
101
|
+
widget=forms.TextInput(attrs={'placeholder': "Rosalind Franklin"}))
|
|
102
|
+
username = forms.CharField(
|
|
103
|
+
label='Username', max_length=100,
|
|
104
|
+
widget=forms.TextInput(attrs={'placeholder': "rosie_f"}))
|
|
105
|
+
email = forms.EmailField(
|
|
106
|
+
label='Email address',
|
|
107
|
+
widget=forms.EmailInput(attrs={'placeholder': "rosalind.franklin@cambridge.ac.uk"}))
|
|
108
|
+
password = forms.CharField(
|
|
109
|
+
label='Password',
|
|
110
|
+
widget=forms.PasswordInput)
|
|
111
|
+
confirm_password = forms.CharField(
|
|
112
|
+
label='Confirm Password',
|
|
113
|
+
widget=forms.PasswordInput)
|
|
114
|
+
|
|
115
|
+
def clean_username(self):
|
|
116
|
+
username = self.cleaned_data.get('username', None)
|
|
117
|
+
if User.objects.filter(username=username).exists():
|
|
118
|
+
raise forms.ValidationError("That username is already in use")
|
|
119
|
+
|
|
120
|
+
return username
|
|
121
|
+
|
|
122
|
+
def clean_password(self):
|
|
123
|
+
password = self.cleaned_data.get('password', None)
|
|
124
|
+
|
|
125
|
+
if password and not password_strength_test(password, length=6, upper=False, lower=False, numbers=False):
|
|
126
|
+
raise forms.ValidationError("Password not strong enough, consider using at least 6 characters")
|
|
127
|
+
|
|
128
|
+
return password
|
|
129
|
+
|
|
130
|
+
def clean(self):
|
|
131
|
+
password = self.cleaned_data.get('password', None)
|
|
132
|
+
confirm_password = self.cleaned_data.get('confirm_password', None)
|
|
133
|
+
|
|
134
|
+
if password and confirm_password and password != confirm_password:
|
|
135
|
+
raise forms.ValidationError("Your passwords do not match")
|
|
136
|
+
|
|
137
|
+
return self.cleaned_data
|
{codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/forms/teach.py
RENAMED
|
@@ -191,10 +191,10 @@ class TeacherEditAccountForm(forms.Form):
|
|
|
191
191
|
|
|
192
192
|
|
|
193
193
|
class TeacherLoginForm(forms.Form):
|
|
194
|
-
|
|
194
|
+
teacher_email = forms.EmailField(
|
|
195
195
|
label='Email address',
|
|
196
196
|
widget=forms.EmailInput(attrs={'placeholder': "my.email@address.com"}))
|
|
197
|
-
|
|
197
|
+
teacher_password = forms.CharField(
|
|
198
198
|
label='Password',
|
|
199
199
|
widget=forms.PasswordInput)
|
|
200
200
|
|
|
@@ -202,11 +202,11 @@ class TeacherLoginForm(forms.Form):
|
|
|
202
202
|
if self.has_error('recaptcha'):
|
|
203
203
|
raise forms.ValidationError('Incorrect email address, password or captcha')
|
|
204
204
|
|
|
205
|
-
|
|
206
|
-
|
|
205
|
+
teacher_email = self.cleaned_data.get('teacher_email', None)
|
|
206
|
+
teacher_password = self.cleaned_data.get('teacher_password', None)
|
|
207
207
|
|
|
208
|
-
if
|
|
209
|
-
users = User.objects.filter(email=
|
|
208
|
+
if teacher_email and teacher_password:
|
|
209
|
+
users = User.objects.filter(email=teacher_email)
|
|
210
210
|
|
|
211
211
|
# Check it's a teacher and not a student using the same email address
|
|
212
212
|
user = None
|
|
@@ -218,7 +218,7 @@ class TeacherLoginForm(forms.Form):
|
|
|
218
218
|
if user is None:
|
|
219
219
|
raise forms.ValidationError('Incorrect email address or password')
|
|
220
220
|
|
|
221
|
-
user = authenticate(username=user.username, password=
|
|
221
|
+
user = authenticate(username=user.username, password=teacher_password)
|
|
222
222
|
|
|
223
223
|
if user is None:
|
|
224
224
|
raise forms.ValidationError('Incorrect email address or password')
|
|
@@ -50,7 +50,7 @@ choices = [('Miss', 'Miss'), ('Mrs', 'Mrs'), ('Ms', 'Ms'), ('Mr', 'Mr'),
|
|
|
50
50
|
|
|
51
51
|
class TeacherSignupForm(forms.Form):
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
teacher_title = forms.ChoiceField(
|
|
54
54
|
label='Title',
|
|
55
55
|
choices=choices,
|
|
56
56
|
widget=forms.Select(
|
|
@@ -59,7 +59,7 @@ class TeacherSignupForm(forms.Form):
|
|
|
59
59
|
}
|
|
60
60
|
)
|
|
61
61
|
)
|
|
62
|
-
|
|
62
|
+
teacher_first_name = forms.CharField(
|
|
63
63
|
label='First name',
|
|
64
64
|
max_length=100,
|
|
65
65
|
widget=forms.TextInput(
|
|
@@ -68,7 +68,7 @@ class TeacherSignupForm(forms.Form):
|
|
|
68
68
|
}
|
|
69
69
|
)
|
|
70
70
|
)
|
|
71
|
-
|
|
71
|
+
teacher_last_name = forms.CharField(
|
|
72
72
|
label='Last name',
|
|
73
73
|
max_length=100,
|
|
74
74
|
widget=forms.TextInput(
|
|
@@ -77,7 +77,7 @@ class TeacherSignupForm(forms.Form):
|
|
|
77
77
|
}
|
|
78
78
|
)
|
|
79
79
|
)
|
|
80
|
-
|
|
80
|
+
teacher_email = forms.EmailField(
|
|
81
81
|
label='Email address',
|
|
82
82
|
widget=forms.EmailInput(
|
|
83
83
|
attrs={
|
|
@@ -85,17 +85,17 @@ class TeacherSignupForm(forms.Form):
|
|
|
85
85
|
}
|
|
86
86
|
)
|
|
87
87
|
)
|
|
88
|
-
|
|
88
|
+
teacher_password = forms.CharField(
|
|
89
89
|
label='Password',
|
|
90
90
|
widget=forms.PasswordInput()
|
|
91
91
|
)
|
|
92
|
-
|
|
92
|
+
teacher_confirm_password = forms.CharField(
|
|
93
93
|
label='Confirm Password',
|
|
94
94
|
widget=forms.PasswordInput()
|
|
95
95
|
)
|
|
96
96
|
|
|
97
97
|
def clean_email(self):
|
|
98
|
-
email = self.cleaned_data.get('
|
|
98
|
+
email = self.cleaned_data.get('teacher_email', None)
|
|
99
99
|
|
|
100
100
|
if email and Teacher.objects.filter(new_user__email=email).exists():
|
|
101
101
|
raise forms.ValidationError("That email address is already in use")
|
|
@@ -103,7 +103,7 @@ class TeacherSignupForm(forms.Form):
|
|
|
103
103
|
return email
|
|
104
104
|
|
|
105
105
|
def clean_password(self):
|
|
106
|
-
password = self.cleaned_data.get('
|
|
106
|
+
password = self.cleaned_data.get('teacher_password', None)
|
|
107
107
|
|
|
108
108
|
if password and not password_strength_test(password):
|
|
109
109
|
raise forms.ValidationError(
|
|
@@ -115,8 +115,8 @@ class TeacherSignupForm(forms.Form):
|
|
|
115
115
|
if any(self.errors):
|
|
116
116
|
return
|
|
117
117
|
|
|
118
|
-
password = self.cleaned_data.get('
|
|
119
|
-
confirm_password = self.cleaned_data.get('
|
|
118
|
+
password = self.cleaned_data.get('teacher_password', None)
|
|
119
|
+
confirm_password = self.cleaned_data.get('teacher_confirm_password', None)
|
|
120
120
|
|
|
121
121
|
if password and confirm_password and password != confirm_password:
|
|
122
122
|
raise forms.ValidationError('Your passwords do not match')
|
|
@@ -156,8 +156,7 @@ class TeacherEditAccountForm(forms.Form):
|
|
|
156
156
|
email = self.cleaned_data.get('email', None)
|
|
157
157
|
if email:
|
|
158
158
|
teachers = Teacher.objects.filter(new_user__email=email)
|
|
159
|
-
if (
|
|
160
|
-
len(teachers) > 1):
|
|
159
|
+
if (len(teachers) == 1 and teachers[0].new_user != self.user) or len(teachers) > 1:
|
|
161
160
|
raise forms.ValidationError("That email address is already in use")
|
|
162
161
|
|
|
163
162
|
return email
|
|
@@ -35,64 +35,67 @@ copyright notice and these terms. You must not misrepresent the origins of this
|
|
|
35
35
|
program; modified versions of the program must be marked as such and not
|
|
36
36
|
identified as the original program.
|
|
37
37
|
*/
|
|
38
|
-
var
|
|
39
|
-
var
|
|
40
|
-
var
|
|
38
|
+
var TEACHER_PASSWORD_FIELD_ID = '';
|
|
39
|
+
var INDEP_STUDENT_PASSWORD_FIELD_ID = '';
|
|
40
|
+
var teacher_password_field = '';
|
|
41
|
+
var indep_student_password_field = '';
|
|
42
|
+
|
|
43
|
+
var password_strengths = [
|
|
44
|
+
{ name: 'No password!', colour: '#FF0000' },
|
|
45
|
+
{ name: 'Password too weak', colour: '#DBA901' },
|
|
46
|
+
{ name: 'Strong password', colour: '#088A08' }
|
|
47
|
+
];
|
|
41
48
|
|
|
42
49
|
$(function() {
|
|
43
|
-
var updateFunction = (PASSWORD_TYPE == 'INDEPENDENT_STUDENT') ? updateIndependentStudentPasswordStrength : updateTeacherPasswordStrength;
|
|
44
50
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
51
|
+
teacher_password_field = $('#' + TEACHER_PASSWORD_FIELD_ID);
|
|
52
|
+
indep_student_password_field = $('#' + INDEP_STUDENT_PASSWORD_FIELD_ID);
|
|
53
|
+
|
|
54
|
+
setUpDynamicUpdates(teacher_password_field, updateTeacherPasswordStrength);
|
|
55
|
+
setUpDynamicUpdates(indep_student_password_field, updateIndependentStudentPasswordStrength);
|
|
56
|
+
|
|
57
|
+
updateTeacherPasswordStrength();
|
|
58
|
+
updateIndependentStudentPasswordStrength();
|
|
50
59
|
});
|
|
51
60
|
|
|
61
|
+
function setUpDynamicUpdates(password_field, update_function) {
|
|
62
|
+
password_field.on('keyup', update_function);
|
|
63
|
+
password_field.on('paste', update_function);
|
|
64
|
+
password_field.on('cut', update_function);
|
|
65
|
+
}
|
|
66
|
+
|
|
52
67
|
function updateTeacherPasswordStrength() {
|
|
53
68
|
// The reason for the timeout is that if we just got $('#...').val() we'd get the
|
|
54
69
|
// old value before the keypress / change. Apparently even jQuery itself implements
|
|
55
70
|
// things this way, so maybe there is no better workaround.
|
|
56
71
|
|
|
57
72
|
setTimeout(function() {
|
|
58
|
-
var teacher_password_strengths = [
|
|
59
|
-
{ name: 'No password!', colour: '#FF0000' },
|
|
60
|
-
{ name: 'Password too weak', colour: '#DBA901' },
|
|
61
|
-
{ name: 'Strong password', colour: '#088A08' }
|
|
62
|
-
];
|
|
63
73
|
|
|
64
|
-
var password = $('#' +
|
|
74
|
+
var password = $('#' + TEACHER_PASSWORD_FIELD_ID).val();
|
|
65
75
|
|
|
66
76
|
var strength = 0;
|
|
67
77
|
if (password.length > 0) { strength++; }
|
|
68
78
|
if (password.length > 8 && !(password.search(/[A-Z]/) === -1 || password.search(/[a-z]/) === -1 || password.search(/[0-9]/) === -1)) { strength++; }
|
|
69
79
|
|
|
70
|
-
|
|
71
|
-
$('.password-strength-text').html(teacher_password_strengths[strength].name);
|
|
80
|
+
updatePasswordCSS('#teacher-password-sign', '#teacher-password-text', strength);
|
|
72
81
|
});
|
|
73
82
|
}
|
|
74
83
|
|
|
75
84
|
function updateIndependentStudentPasswordStrength() {
|
|
76
85
|
|
|
77
86
|
setTimeout(function() {
|
|
78
|
-
var independent_student_password_strengths = [
|
|
79
|
-
{ name: 'Password quality', colour: '' },
|
|
80
|
-
{ name: 'Not long enough', colour: '#DBA901' },
|
|
81
|
-
{ name: 'Good password', colour: '#088A08' }
|
|
82
|
-
];
|
|
83
87
|
|
|
84
|
-
var password = $('#' +
|
|
88
|
+
var password = $('#' + INDEP_STUDENT_PASSWORD_FIELD_ID).val();
|
|
85
89
|
|
|
86
90
|
var strength = 0;
|
|
87
|
-
if (password
|
|
88
|
-
|
|
89
|
-
else if (password.length >= 6) { strength = 2; }
|
|
90
|
-
|
|
91
|
-
if (password == '') { $('.password-strength-bar-container').hide(); $('.password-strength-text').hide(); }
|
|
92
|
-
else { $('.password-strength-bar-container').show(); $('.password-strength-text').show(); }
|
|
91
|
+
if (password.length > 0) { strength++; }
|
|
92
|
+
if (password.length > 5) { strength++; }
|
|
93
93
|
|
|
94
|
-
|
|
95
|
-
$('.password-strength-bar').css('background-color', independent_student_password_strengths[strength].colour);
|
|
96
|
-
$('.password-strength-text').html(independent_student_password_strengths[strength].name);
|
|
94
|
+
updatePasswordCSS('#student-password-sign', '#student-password-text', strength);
|
|
97
95
|
});
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function updatePasswordCSS(passwordStrengthSign, passwordStrengthText, strength) {
|
|
99
|
+
$(passwordStrengthSign).css('background-color', password_strengths[strength].colour);
|
|
100
|
+
$(passwordStrengthText).html(password_strengths[strength].name);
|
|
98
101
|
}
|
|
@@ -48,6 +48,7 @@ $color-background-secondary: #fff;
|
|
|
48
48
|
$color-background-tertiary: $color-text-grey;
|
|
49
49
|
$color-background-teach: $color-teacher-blue;
|
|
50
50
|
$color-background-play: $color-student-orange;
|
|
51
|
+
$color-background-play-indep: #ff637d;
|
|
51
52
|
$color-background-warning: #fab300;
|
|
52
53
|
$color-background-positive: #7ed321;
|
|
53
54
|
$color-background-danger: #f00;
|
|
@@ -771,6 +772,10 @@ form {
|
|
|
771
772
|
background-color: $color-background-play;
|
|
772
773
|
}
|
|
773
774
|
|
|
775
|
+
.form--register--indep-student {
|
|
776
|
+
background-color: $color-background-play-indep;
|
|
777
|
+
}
|
|
778
|
+
|
|
774
779
|
.form__choice {
|
|
775
780
|
@include _margin(40px, 0px, 0px, 37px);
|
|
776
781
|
background-color: $color-background-secondary;
|
|
@@ -138,8 +138,8 @@
|
|
|
138
138
|
</tr>
|
|
139
139
|
<tr>
|
|
140
140
|
<th>Session 6</th>
|
|
141
|
-
<td><a href="{% url 'materials_viewer' pdf_name='
|
|
142
|
-
<td><a href="{% url 'materials_viewer' pdf_name='
|
|
141
|
+
<td><a href="{% url 'materials_viewer' pdf_name='KS1_S6_1' %}">KS1-S6-1</a></td>
|
|
142
|
+
<td><a href="{% url 'materials_viewer' pdf_name='KS1_S6_2' %}">KS1-S6-2</a></td>
|
|
143
143
|
</tr>
|
|
144
144
|
<tr>
|
|
145
145
|
<th>Session 7</th>
|
|
@@ -269,7 +269,7 @@
|
|
|
269
269
|
<td><a href="{% url 'materials_viewer' pdf_name='LKS2_S4_2' %}">LKS2-S4-2</a></td>
|
|
270
270
|
<td><a href="{% url 'materials_viewer' pdf_name='LKS2_S4_3' %}">LKS2-S4-3</a></td>
|
|
271
271
|
<td><a href="{% url 'materials_viewer' pdf_name='LKS2_S4_4' %}">LKS2-S4-4</a></td>
|
|
272
|
-
</tr
|
|
272
|
+
</tr>
|
|
273
273
|
<tr>
|
|
274
274
|
<th>Session 5</th>
|
|
275
275
|
<td><a href="{% url 'materials_viewer' pdf_name='LKS2_S5_1' %}">LKS2-S5-1</a></td>
|
|
@@ -57,13 +57,13 @@
|
|
|
57
57
|
|
|
58
58
|
{{ login_form.non_field_errors }}
|
|
59
59
|
|
|
60
|
-
{{ login_form.
|
|
61
|
-
<label for="id_{{ login_form.
|
|
62
|
-
{{ login_form.
|
|
60
|
+
{{ login_form.teacher_email.errors }}
|
|
61
|
+
<label for="id_{{ login_form.teacher_email.html_name }}">{{ login_form.teacher_email.label }}</label>
|
|
62
|
+
{{ login_form.teacher_email }}
|
|
63
63
|
|
|
64
|
-
{{ login_form.
|
|
65
|
-
<label for="id_{{ login_form.
|
|
66
|
-
{{ login_form.
|
|
64
|
+
{{ login_form.teacher_password.errors }}
|
|
65
|
+
<label for="id_{{ login_form.teacher_password.html_name }}">{{ login_form.teacher_password.label }}</label>
|
|
66
|
+
{{ login_form.teacher_password }}
|
|
67
67
|
|
|
68
68
|
{% if login_form.recaptcha %}
|
|
69
69
|
{{ login_form.recaptcha.errors }}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
{% extends 'redesign/base_new.html' %}
|
|
2
|
+
{% load staticfiles %}
|
|
3
|
+
{% load app_tags %}
|
|
4
|
+
|
|
5
|
+
{% block css %}
|
|
6
|
+
{{ block.super }}
|
|
7
|
+
{% endblock css %}
|
|
8
|
+
|
|
9
|
+
{% block scripts %}
|
|
10
|
+
{{ block.super }}
|
|
11
|
+
{% endblock scripts %}
|
|
12
|
+
|
|
13
|
+
{% block pageID %}id='homeWrapper'{% endblock %}
|
|
14
|
+
|
|
15
|
+
{% block content %}
|
|
16
|
+
{{ block.super }}
|
|
17
|
+
|
|
18
|
+
<div id="signup_page"></div>
|
|
19
|
+
|
|
20
|
+
<div class="row popup is-flex">
|
|
21
|
+
<div class="form--register form--register--teacher col-sm-6">
|
|
22
|
+
<div class="form col-sm-8 col-sm-offset-2">
|
|
23
|
+
<h1>Register as a teacher</h1>
|
|
24
|
+
<p class="body-text">Once you’ve registered your personal details and logged in, you’ll be able to create your school or club, or join other teachers at your institution.<br/></p>
|
|
25
|
+
<form method='post' id="form-reg-teacher">
|
|
26
|
+
|
|
27
|
+
{% csrf_token %}
|
|
28
|
+
|
|
29
|
+
{{ teacher_signup_form.non_field_errors }}
|
|
30
|
+
|
|
31
|
+
<label for="id_teacher_signup-teacher_title">{{ teacher_signup_form.teacher_title.label }}</label>
|
|
32
|
+
{{ teacher_signup_form.teacher_title }}
|
|
33
|
+
{{ teacher_signup_form.teacher_title.errors }}
|
|
34
|
+
|
|
35
|
+
<label for="id_teacher_signup-teacher_first_name">{{ teacher_signup_form.teacher_first_name.label }}</label>
|
|
36
|
+
{{ teacher_signup_form.teacher_first_name }}
|
|
37
|
+
{{ teacher_signup_form.teacher_first_name.errors }}
|
|
38
|
+
|
|
39
|
+
<label for="id_teacher_signup-teacher_last_name">{{ teacher_signup_form.teacher_last_name.label }}</label>
|
|
40
|
+
{{ teacher_signup_form.teacher_last_name }}
|
|
41
|
+
{{ teacher_signup_form.teacher_last_name.errors }}
|
|
42
|
+
|
|
43
|
+
<label for="id_teacher_signup-teacher_email">{{ teacher_signup_form.teacher_email.label }}</label>
|
|
44
|
+
{{ teacher_signup_form.teacher_email }}
|
|
45
|
+
{{ teacher_signup_form.teacher_email.errors }}
|
|
46
|
+
|
|
47
|
+
<label for="id_teacher_signup-teacher_password">{{ teacher_signup_form.teacher_password.label }}</label>
|
|
48
|
+
{{ teacher_signup_form.teacher_password }}
|
|
49
|
+
{{ teacher_signup_form.teacher_password.errors }}
|
|
50
|
+
|
|
51
|
+
<label for="id_teacher_signup-teacher_confirm_password">{{ teacher_signup_form.teacher_confirm_password.label }}</label>
|
|
52
|
+
{{ teacher_signup_form.teacher_confirm_password }}
|
|
53
|
+
{{ teacher_signup_form.teacher_confirm_password.errors }}
|
|
54
|
+
|
|
55
|
+
<div class="row--under">
|
|
56
|
+
<div class="password-strength-container">
|
|
57
|
+
<div id="teacher-password-sign" class='password-strength-sign'></div>
|
|
58
|
+
<div id="teacher-password-text" class='password-strength-text'></div>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
<button class="button--big button--primary--general-educate" type="submit" name="teacher_signup">Register</button>
|
|
63
|
+
</form>
|
|
64
|
+
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
<div class="form--register form--register--indep-student col-sm-6">
|
|
68
|
+
<div class="form col-sm-8 col-sm-offset-2">
|
|
69
|
+
<h1>Register as an independent student</h1>
|
|
70
|
+
<p class="body-text">Are you part of a school or club? If so, please <a href="{% url 'login_new' %}">log-in</a> or speak to your teacher. If you want to register as an <strong>independent student</strong>, please register below:</p>
|
|
71
|
+
<form id="form-signup-independent-student" method='post'>
|
|
72
|
+
|
|
73
|
+
{% csrf_token %}
|
|
74
|
+
|
|
75
|
+
{{ student_signup_form.non_field_errors }}
|
|
76
|
+
|
|
77
|
+
<label for="id_{{ student_signup_form.name.html_name }}">{{ student_signup_form.name.label }}</label>
|
|
78
|
+
{{ student_signup_form.name }}
|
|
79
|
+
{{ student_signup_form.name.errors }}
|
|
80
|
+
|
|
81
|
+
<label for="id_{{ student_signup_form.username.html_name }}">{{ student_signup_form.username.label }}</label>
|
|
82
|
+
{{ student_signup_form.username }}
|
|
83
|
+
{{ student_signup_form.username.errors }}
|
|
84
|
+
|
|
85
|
+
<label for="id_{{ student_signup_form.email.html_name }}">{{ student_signup_form.email.label }}</label>
|
|
86
|
+
{{ student_signup_form.email }}
|
|
87
|
+
{{ student_signup_form.email.errors }}
|
|
88
|
+
|
|
89
|
+
<label for="id_{{ student_signup_form.password.html_name }}">{{ student_signup_form.password.label }}</label>
|
|
90
|
+
{{ student_signup_form.password }}
|
|
91
|
+
{{ student_signup_form.password.errors }}
|
|
92
|
+
|
|
93
|
+
<label for="id_{{ student_signup_form.confirm_password.html_name }}">{{ student_signup_form.confirm_password.label }}</label>
|
|
94
|
+
{{ student_signup_form.confirm_password }}
|
|
95
|
+
{{ student_signup_form.confirm_password.errors }}
|
|
96
|
+
|
|
97
|
+
<div class="row--under">
|
|
98
|
+
<div class="password-strength-container">
|
|
99
|
+
<div id="student-password-sign" class='password-strength-sign'></div>
|
|
100
|
+
<div id="student-password-text" class='password-strength-text'></div>
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
|
|
104
|
+
<button type='submit' name='student_signup' class="button--big button--primary--general-play" value='Register'>Register</button>
|
|
105
|
+
</form>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
109
|
+
|
|
110
|
+
<script type="text/javascript" src="{% static 'portal/js/passwordStrength_new.js' %}"></script>
|
|
111
|
+
<script>
|
|
112
|
+
var TEACHER_PASSWORD_FIELD_ID = '{{ teacher_signup_form.teacher_password.auto_id }}';
|
|
113
|
+
var INDEP_STUDENT_PASSWORD_FIELD_ID = '{{ student_signup_form.password.auto_id }}';
|
|
114
|
+
</script>
|
|
115
|
+
|
|
116
|
+
{% endblock content %}
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
# program; modified versions of the program must be marked as such and not
|
|
36
36
|
# identified as the original program.
|
|
37
37
|
import login_page
|
|
38
|
+
import signup_page
|
|
38
39
|
from base_page import BasePage
|
|
39
40
|
|
|
40
41
|
|
|
@@ -46,3 +47,7 @@ class HomePage(BasePage):
|
|
|
46
47
|
def go_to_login_page(self):
|
|
47
48
|
self.browser.find_element_by_id('login_button').click()
|
|
48
49
|
return login_page.LoginPage(self.browser)
|
|
50
|
+
|
|
51
|
+
def go_to_signup_page(self):
|
|
52
|
+
self.browser.find_element_by_id('signup_button').click()
|
|
53
|
+
return signup_page.SignupPage(self.browser)
|
|
@@ -49,12 +49,34 @@ class SignupPage(BasePage):
|
|
|
49
49
|
assert self.on_correct_page('signup_page')
|
|
50
50
|
|
|
51
51
|
def signup(self, title, first_name, last_name, email, password, confirm_password):
|
|
52
|
-
Select(self.browser.find_element_by_id('
|
|
53
|
-
self.browser.find_element_by_id('
|
|
54
|
-
self.browser.find_element_by_id('
|
|
55
|
-
self.browser.find_element_by_id('
|
|
56
|
-
self.browser.find_element_by_id('
|
|
57
|
-
self.browser.find_element_by_id('
|
|
58
|
-
|
|
59
|
-
self.browser.find_element_by_name('
|
|
52
|
+
Select(self.browser.find_element_by_id('id_teacher_signup-teacher_title')).select_by_value(title)
|
|
53
|
+
self.browser.find_element_by_id('id_teacher_signup-teacher_first_name').send_keys(first_name)
|
|
54
|
+
self.browser.find_element_by_id('id_teacher_signup-teacher_last_name').send_keys(last_name)
|
|
55
|
+
self.browser.find_element_by_id('id_teacher_signup-teacher_email').send_keys(email)
|
|
56
|
+
self.browser.find_element_by_id('id_teacher_signup-teacher_password').send_keys(password)
|
|
57
|
+
self.browser.find_element_by_id('id_teacher_signup-teacher_confirm_password').send_keys(confirm_password)
|
|
58
|
+
|
|
59
|
+
self.browser.find_element_by_name('teacher_signup').click()
|
|
60
60
|
return email_verification_needed_page_new.EmailVerificationNeededPage(self.browser)
|
|
61
|
+
|
|
62
|
+
def independent_student_signup(self, name, username, email_address, password, confirm_password, success=True):
|
|
63
|
+
self.browser.find_element_by_id('id_student_signup-name').send_keys(name)
|
|
64
|
+
self.browser.find_element_by_id('id_student_signup-username').send_keys(username)
|
|
65
|
+
self.browser.find_element_by_id('id_student_signup-email').send_keys(email_address)
|
|
66
|
+
self.browser.find_element_by_id('id_student_signup-password').send_keys(password)
|
|
67
|
+
self.browser.find_element_by_id('id_student_signup-confirm_password').send_keys(confirm_password)
|
|
68
|
+
|
|
69
|
+
self.browser.find_element_by_name('student_signup').click()
|
|
70
|
+
if success:
|
|
71
|
+
from email_verification_needed_page_new import EmailVerificationNeededPage
|
|
72
|
+
return EmailVerificationNeededPage(self.browser)
|
|
73
|
+
else:
|
|
74
|
+
return self
|
|
75
|
+
|
|
76
|
+
def has_independent_student_signup_failed(self):
|
|
77
|
+
if not self.element_exists_by_css('.errorlist'):
|
|
78
|
+
return False
|
|
79
|
+
|
|
80
|
+
errors = self.browser.find_element_by_id('form-signup-independent-student').find_element_by_class_name('errorlist').text
|
|
81
|
+
error = 'Password not strong enough, consider using at least 6 characters'
|
|
82
|
+
return error in errors
|