Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion django_email_learning/personalised/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from django.core.files.storage import default_storage
import qrcode
import uuid
import json
import logging
import io

Expand Down Expand Up @@ -110,7 +111,7 @@ def get(self, request, *args, **kwargs) -> HttpResponse: # type: ignore[no-unty
]
return self.render_to_response(
context={
"quiz": quiz_data,
"quiz": json.dumps(quiz_data),
"token": token,
"csrf_token": request.META.get("CSRF_COOKIE", ""),
"api_endpoint": reverse(
Expand Down
16 changes: 11 additions & 5 deletions django_email_learning/templates/personalised/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,25 @@
<!doctype html>
<html lang="en">
<head>
<script>
const error_message = "{{ error_message }}";
const ref = "{{ ref }}";
</script>
{% vite_hmr_client %}
{% vite_react_refresh %}
{% get_current_language_bidi as IS_RTL %}
<script id="app-context" type="application/json">
{
"direction": "{% if IS_RTL %}rtl{% else %}ltr{% endif %}",
"ref": "{{ ref }}",
"errorMessage": "{{ error_message }}",{% block extra_context %}{% endblock %}
"localeMessages": {{% block extra_locale_messages %}{% endblock %}
}
}
</script>
{% block head_script %}{% endblock %}
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" type="image/png" href="{% static 'logo.png' %}" />
<title>{% block title %}{{ page_title }}{% endblock %}</title>
</head>
{% get_current_language_bidi as IS_RTL %}

<body {% if IS_RTL %}dir="rtl"{% endif %}>
<div id="root">
</div>
Expand Down
24 changes: 11 additions & 13 deletions django_email_learning/templates/personalised/certificate.html
Original file line number Diff line number Diff line change
@@ -1,22 +1,20 @@
{% extends "personalised/base.html" %}
{% load i18n %}
{% load django_vite %}
{% block head_script %}
<script>
const name = "{{ name }}";
const course_title = "{{ course_title }}";
const issue_date = "{{ issue_date }}";
const certificate_number = "{{ certificate_number }}";
const organization_name = "{{ organization_name }}";
const qrcode_url = "{{ qrcode_url }}";
const logo_url = "{{ logo_url }}";
const localeMessages = {
{% block extra_context %}
"name": "{{ name }}",
"issueDate": "{{ issue_date }}",
"certificateNumber": "{{ certificate_number }}",
"qrcodeUrl": "{{ qrcode_url }}",
"logoUrl": "{{ logo_url }}",
{% endblock %}
{% block extra_locale_messages %}
"title": "{% translate 'Certificate Of Completion' %}",
"description": "{% blocktranslate with name=name course_title=course_title %}This certifies that {{ name }} has successfully completed the {{ course_title }} course{% endblocktranslate %}",
"issue_date": "{% translate 'Issued on' %}",
"certificate_number": "{% translate 'Certificate Number' %}",
"organization_team": "{% blocktranslate with organization_name=organization_name %}{{ organization_name }} Team{% endblocktranslate %}",
}
</script>
"organization_team": "{% blocktranslate with organization_name=organization_name %}{{ organization_name }} Team{% endblocktranslate %}"
{% endblock %}
{% block head_script %}
{% vite_asset 'personalised/certificate/Certificate.jsx' %}
{% endblock %}
26 changes: 13 additions & 13 deletions django_email_learning/templates/personalised/certificate_form.html
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
{% extends "personalised/base.html" %}
{% load i18n %}
{% load django_vite %}
{% block extra_context %}
"token": "{{ token }}",
"csrfToken": "{{ csrf_token }}",
"apiEndpoint": "{{ api_endpoint }}",
{% endblock %}
{% block extra_locale_messages %}
"form_intro": "{% translate 'Congratulations on completing the course! To issue your certificate, please enter the name you would like displayed on it.' %}",
"full_name": "{% translate 'Full Name' %}",
"full_name_required": "{% translate 'Full Name is required' %}",
"error_sending_data": "{% translate 'An error occurred while sending data. Please try again later.' %}",
"form_submission_success": "{% translate 'Your certificate name has been submitted successfully! You can now close this window.' %}",
"submit": "{% translate 'Submit' %}"
{% endblock %}
{% block head_script %}
<script>
const token = "{{ token }}";
const csrfToken = "{{ csrf_token }}";
const apiEndpoint = "{{ api_endpoint }}";
const localeMessages = {
"form_intro": "{% translate 'Congratulations on completing the course! To issue your certificate, please enter the name you would like displayed on it.' %}",
"full_name": "{% translate 'Full Name' %}",
"full_name_required": "{% translate 'Full Name is required' %}",
"error_sending_data": "{% translate 'An error occurred while sending data. Please try again later.' %}",
"form_submission_success": "{% translate 'Your certificate name has been submitted successfully! You can now close this window.' %}",
"submit": "{% translate 'Submit' %}",
}
</script>
{% vite_asset 'personalised/certificate_form/CertificateForm.jsx' %}
{% endblock %}
16 changes: 8 additions & 8 deletions django_email_learning/templates/personalised/command_result.html
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
{% extends "personalised/base.html" %}
{% load i18n %}
{% load django_vite %}
{% block extra_context %}
"successMessage": "{{ success_message|escapejs }}",
"confirmationMessage": "{{ confirmation_message|escapejs }}",
"confirmUrl": "{{ confirm_url|escapejs }}",
{% endblock %}
{% block extra_locale_messages %}
"Confirm": "{% translate 'Confirm' %}"
{% endblock %}
{% block head_script %}
<script>
const success_message = "{{ success_message|escapejs }}";
const confirmation_message = "{{ confirmation_message|escapejs }}";
const confirm_url = "{{ confirm_url|escapejs }}";
const localeMessages = {
"Confirm": "{% translate 'Confirm' %}",
}
</script>
{% vite_asset 'personalised/command_result/CommandResult.jsx' %}
{% endblock %}
19 changes: 9 additions & 10 deletions django_email_learning/templates/personalised/quiz_public.html
Original file line number Diff line number Diff line change
@@ -1,22 +1,21 @@
{% extends "personalised/base.html" %}
{% load i18n %}
{% load django_vite %}
{% block head_script %}
<script>
const quiz = {{ quiz|default:"null"|safe }};
const token = "{{ token }}";
const csrfToken = "{{ csrf_token }}";
const apiEndpoint = "{{ api_endpoint }}";
const localeMessages = {
{% block extra_context %}
"quiz": {{ quiz|default:"null"|safe }},
"token": "{{ token }}",
"csrfToken": "{{ csrf_token }}",
"apiEndpoint": "{{ api_endpoint }}",{% endblock %}
{% block extra_locale_messages %}
"quiz_intro": "{% translate 'Please select all correct answers for each question. Note that some questions may have multiple correct answers. This quiz uses negative marking for incorrect choices; if you are unsure, it is better to leave the question unanswered.' %}",
"no_answer_warning": "{% translate 'You have not selected any answers for this question. Are you sure you want to proceed?' %}",
"your_score": "{% translate 'Your score' %}",
"error_loading_quiz": "{% translate 'Error loading quiz' %}",
"ready_to_submit": "{% translate 'Ready to submit?' %}",
"submit_quiz_note": "{% translate 'Please keep in mind that this quiz uses negative marking for incorrect answers. If you are unsure of an answer, it may be better to leave it blank.' %}",
"cancel": "{% translate 'Cancel' %}",
"submit": "{% translate 'Submit' %}",
}
</script>
"submit": "{% translate 'Submit' %}"
{% endblock %}
{% block head_script %}
{% vite_asset 'personalised/quiz_public/Quiz.jsx' %}
{% endblock %}
35 changes: 20 additions & 15 deletions django_email_learning/templates/platform/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,27 @@
{% vite_react_refresh %}
<script>
localStorage.setItem('activeOrganizationId', '{{ active_organization_id }}');
localStorage.setItem('apiBaseUrl', '{{ api_base_url }}');
localStorage.setItem('platformBaseUrl', '{{ platform_base_url }}');
localStorage.setItem('userRole', '{{ user_role }}');
localStorage.setItem('isPlatformAdmin', {{ is_platform_admin|yesno:"true,false" }});
localStorage.setItem('isOrganizationAdmin', {{ is_organization_admin|yesno:"true,false" }});
const direction = "{% if IS_RTL %}rtl{% else %}ltr{% endif %}";
let localeMessages = {
"organizations": "{% translate 'Organizations' %}",
"course_management": "{% translate 'Course Management' %}",
"learners": "{% translate 'Learners' %}",
"settings": "{% translate 'Settings' %}",
"api_keys": "{% translate 'API Keys' %}",
"content_delivery_job": "{% translate 'Content Delivery Job' %}",
"last_run": "{% translate 'Last Run:' %}",
"content_delivery_tooltip": "{% translate 'This job should run on a regular schedule to ensure timely content delivery. Configure a cron job or cloud scheduler to execute it at appropriate intervals, such as every five minutes.' %}"
</script>

<script id="app-context" type="application/json">
{
"apiBaseUrl": "{{ api_base_url }}",
"platformBaseUrl": "{{ platform_base_url }}",
"userRole": "{{ user_role }}",
"isPlatformAdmin": {{ is_platform_admin|yesno:"true,false" }},
"isOrganizationAdmin": {{ is_organization_admin|yesno:"true,false" }},
"direction": "{% if IS_RTL %}rtl{% else %}ltr{% endif %}",{% block extra_context %}{% endblock %}
"localeMessages": {
"organizations": "{% translate 'Organizations' %}",
"course_management": "{% translate 'Course Management' %}",
"learners": "{% translate 'Learners' %}",
"settings": "{% translate 'Settings' %}",
"api_keys": "{% translate 'API Keys' %}",
"content_delivery_job": "{% translate 'Content Delivery Job' %}",
"last_run": "{% translate 'Last Run:' %}",
"content_delivery_tooltip": "{% translate 'This job should run on a regular schedule to ensure timely content delivery. Configure a cron job or cloud scheduler to execute it at appropriate intervals, such as every five minutes.' %}",{% block extra_locale_messages %}{% endblock %}
}
}
</script>
{% block extra_head %}{% endblock %}
<meta charset="UTF-8" />
Expand Down
17 changes: 8 additions & 9 deletions django_email_learning/templates/platform/course.html
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
{% extends "platform/base.html" %}
{% load django_vite %}
{% block extra_head %}
{% load i18n %}
<script>
let course_title = "{{ course.title|escapejs }}";
const course_id = "{{ course.id }}";
localeMessages = {
...localeMessages,
{%block extra_context %}
"course_title": "{{ course.title|escapejs }}",
"course_id": "{{ course.id }}",
{% endblock %}
{% block extra_locale_messages %}
"actions": "{% translate 'Actions' %}",
"published": "{% translate 'Published' %}",
"type": "{% translate 'Type' %}",
Expand Down Expand Up @@ -65,8 +64,8 @@
"deactivated": "{% translate 'Deactivated' %}",
"completed": "{% translate 'Completed' %}",
"enrollments_distribution": "{% translate 'Enrollments Distribution' %}",
"weekly_enrollments": "{% translate 'Weekly Enrollments' %}",
}
</script>
"weekly_enrollments": "{% translate 'Weekly Enrollments' %}"
{% endblock %}
{% block extra_head %}
{% vite_asset 'platform/course/Course.jsx' %}
{% endblock %}
96 changes: 46 additions & 50 deletions django_email_learning/templates/platform/courses.html
Original file line number Diff line number Diff line change
@@ -1,56 +1,52 @@
{% extends "platform/base.html" %}
{% load django_vite %}
{% load i18n %}
{% block extra_locale_messages %}
"actions": "{% translate 'Actions' %}",
"all": "{% translate 'All' %}",
"enable_course": "{% translate 'Enable COURSE_NAME' %}",
"disable_course": "{% translate 'Disable COURSE_NAME' %}",
"delete_course": "{% translate 'Delete COURSE_NAME' %}",
"enabled": "{% translate 'Enabled' %}",
"disabled": "{% translate 'Disabled' %}",
"title": "{% translate 'Title' %}",
"slug": "{% translate 'Slug' %}",
"filter": "{% translate 'Filter' %}",
"add_course": "{% translate 'Add a Course' %}",
"course_status": "{% translate 'Course Status' %}",
"cancel": "{% translate 'Cancel' %}",
"delete": "{% translate 'Delete' %}",
"create": "{% translate 'Create' %}",
"continue": "{% translate 'Continue' %}",
"update": "{% translate 'Update' %}",
"course_title": "{% translate 'Course Title' %}",
"course_description": "{% translate 'Course Description' %}",
"course_slug": "{% translate 'Course Slug' %}",
"add_imap_connection": "{% translate 'Add IMAP Connection' %}",
"imap_connection_tooltip": "{% translate 'You don\'t need an IMAP connection to build your course, but you will need one if you want your users to interact via email. For example, they can sign up or check their progress just by sending a message. This is a great solution if your audience has limited platform access.' %}",
"new_imap_connection": "{% translate 'New IMAP Connection' %}",
"imap_connection": "{% translate 'IMAP Connection' %}",
"add": "{% translate 'Add' %}",
"email": "{% translate 'Email' %}",
"password": "{% translate 'Password' %}",
"server": "{% translate 'Server' %}",
"port": "{% translate 'Port' %}",
"course_enable_confirmation": "{% translate 'Are you sure you want to enable the course COURSE_NAME?' %}",
"course_disable_confirmation": "{% translate 'Are you sure you want to disable the course COURSE_NAME?' %}",
"course_delete_confirmation": "{% translate 'Are you sure you want to delete the course COURSE_NAME?' %}",
"title_required_helper_text": "{% translate 'The course title is required.' %}",
"description_required_helper_text": "{% translate 'The course description is required.' %}",
"slug_required_helper_text": "{% translate 'The course slug is required.' %}",
"email_required_helper_text": "{% translate 'The email is required.' %}",
"password_required_helper_text": "{% translate 'The password is required.' %}",
"server_required_helper_text": "{% translate 'The server is required.' %}",
"port_required_helper_text": "{% translate 'The port is required.' %}",
"invalid_port_helper_text": "{% translate 'The port must be a valid number.' %}",
"invalid_email_helper_text": "{% translate 'The email must be a valid email address.' %}",
"total_enrollments": "{% translate 'Total Enrollments' %}",
"upload_button_label": "{% translate 'Upload Image' %}",
"remove_image": "{% translate 'Remove Image' %}",
"uploaded_image_alt": "{% translate 'Course Image' %}"{% endblock %}
{% block extra_head %}
<script>
localeMessages = {
...localeMessages,
"actions": "{% translate 'Actions' %}",
"all": "{% translate 'All' %}",
"enable_course": "{% translate 'Enable COURSE_NAME' %}",
"disable_course": "{% translate 'Disable COURSE_NAME' %}",
"delete_course": "{% translate 'Delete COURSE_NAME' %}",
"enabled": "{% translate 'Enabled' %}",
"disabled": "{% translate 'Disabled' %}",
"title": "{% translate 'Title' %}",
"slug": "{% translate 'Slug' %}",
"filter": "{% translate 'Filter' %}",
"add_course": "{% translate 'Add a Course' %}",
"course_status": "{% translate 'Course Status' %}",
"cancel": "{% translate 'Cancel' %}",
"delete": "{% translate 'Delete' %}",
"create": "{% translate 'Create' %}",
"continue": "{% translate 'Continue' %}",
"update": "{% translate 'Update' %}",
"course_title": "{% translate 'Course Title' %}",
"course_description": "{% translate 'Course Description' %}",
"course_slug": "{% translate 'Course Slug' %}",
"add_imap_connection": "{% translate 'Add IMAP Connection' %}",
"imap_connection_tooltip": "{% translate 'You don\'t need an IMAP connection to build your course, but you will need one if you want your users to interact via email. For example, they can sign up or check their progress just by sending a message. This is a great solution if your audience has limited platform access.' %}",
"new_imap_connection": "{% translate 'New IMAP Connection' %}",
"imap_connection": "{% translate 'IMAP Connection' %}",
"add": "{% translate 'Add' %}",
"email": "{% translate 'Email' %}",
"password": "{% translate 'Password' %}",
"server": "{% translate 'Server' %}",
"port": "{% translate 'Port' %}",
"course_enable_confirmation": "{% translate 'Are you sure you want to enable the course COURSE_NAME?' %}",
"course_disable_confirmation": "{% translate 'Are you sure you want to disable the course COURSE_NAME?' %}",
"course_delete_confirmation": "{% translate 'Are you sure you want to delete the course COURSE_NAME?' %}",
"title_required_helper_text": "{% translate 'The course title is required.' %}",
"description_required_helper_text": "{% translate 'The course description is required.' %}",
"slug_required_helper_text": "{% translate 'The course slug is required.' %}",
"email_required_helper_text": "{% translate 'The email is required.' %}",
"password_required_helper_text": "{% translate 'The password is required.' %}",
"server_required_helper_text": "{% translate 'The server is required.' %}",
"port_required_helper_text": "{% translate 'The port is required.' %}",
"invalid_port_helper_text": "{% translate 'The port must be a valid number.' %}",
"invalid_email_helper_text": "{% translate 'The email must be a valid email address.' %}",
"total_enrollments": "{% translate 'Total Enrollments' %}",
"upload_button_label": "{% translate 'Upload Image' %}",
"remove_image": "{% translate 'Remove Image' %}",
"uploaded_image_alt": "{% translate 'Course Image' %}",
}
</script>
{% vite_asset 'platform/courses/Courses.jsx' %}
{% endblock %}
10 changes: 3 additions & 7 deletions django_email_learning/templates/platform/learners.html
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
{% extends "platform/base.html" %}
{% load django_vite %}
{% load i18n %}
{% block extra_head %}
<script>
localeMessages = {
...localeMessages,
{% block extra_locale_messages %}
"search_learners": "{% translate 'Search learners...' %}",
"learners_list": "{% translate 'Learners List' %}",
"nor_enrollments_found": "{% translate 'No enrollments found.' %}",
Expand All @@ -30,8 +27,7 @@
"deactivated": "{% translate 'Deactivated' %}",
"canceled": "{% translate 'Canceled' %}",
"blcoked": "{% translate 'Blocked' %}",
"inactive": "{% translate 'Inactive' %}",
};
</script>
"inactive": "{% translate 'Inactive' %}"{% endblock %}
{% block extra_head %}
{% vite_asset 'platform/learners/Learners.jsx' %}
{% endblock %}
Loading