Skip to content

Commit

Permalink
feat: added banner message for survey report (openedx#33633)
Browse files Browse the repository at this point in the history
* feat: added banner message for survey report

* refactor: addressed PR feedback and changes
* fix: fixed styles on admin templates
* refactor: changed script location to survey report block
* chore: removed whitespaces and renamed the context processor files
* feat: added banner message for survey report
* refactor: separated survey report template from admin and deleted base template
* refactor: changed months variable into a configurable setting


---------

Co-authored-by: Maria Fernanda Magallanes Zubillaga <[email protected]>
Co-authored-by: María Fernanda Magallanes <[email protected]>
  • Loading branch information
3 people authored Dec 18, 2023
1 parent 82f3cec commit e9d84d0
Show file tree
Hide file tree
Showing 8 changed files with 125 additions and 2 deletions.
7 changes: 6 additions & 1 deletion lms/envs/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -1342,7 +1342,12 @@ def _make_mako_template_dirs(settings):
'openedx.core.djangoapps.site_configuration.context_processors.configuration_context',

# Mobile App processor (Detects if request is from the mobile app)
'lms.djangoapps.mobile_api.context_processor.is_from_mobile_app'
'lms.djangoapps.mobile_api.context_processor.is_from_mobile_app',

# Context processor necesarry for the survey report message appear on the admin site
'openedx.features.survey_report.context_processors.admin_extra_context'


]

# Django templating
Expand Down
2 changes: 2 additions & 0 deletions lms/envs/production.py
Original file line number Diff line number Diff line change
Expand Up @@ -1131,6 +1131,8 @@ def get_env_setting(setting):
'https://hooks.zapier.com/hooks/catch/11595998/3ouwv7m/')
ANONYMOUS_SURVEY_REPORT = False

SURVEY_REPORT_CHECK_THRESHOLD = ENV_TOKENS.get('SURVEY_REPORT_CHECK_THRESHOLD', 6)

AVAILABLE_DISCUSSION_TOURS = ENV_TOKENS.get('AVAILABLE_DISCUSSION_TOURS', [])

############## NOTIFICATIONS EXPIRY ##############
Expand Down
1 change: 1 addition & 0 deletions lms/envs/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -663,6 +663,7 @@
############## Settings for survey report ##############
SURVEY_REPORT_EXTRA_DATA = {}
SURVEY_REPORT_ENDPOINT = "https://example.com/survey_report"
SURVEY_REPORT_CHECK_THRESHOLD = 6
ANONYMOUS_SURVEY_REPORT = False

######################## Subscriptions API SETTINGS ########################
Expand Down
4 changes: 4 additions & 0 deletions lms/templates/admin/base_site.html
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,7 @@ <h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('D


{% endblock %}

{% block header %}{{ block.super }}
{% include "survey_report/admin_banner.html" %}
{% endblock %}
1 change: 1 addition & 0 deletions openedx/features/survey_report/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ def generate_report() -> None:
data = get_report_data()
data["state"] = SURVEY_REPORT_GENERATED
update_report(survey_report.id, data)
send_report_to_external_api(survey_report.id)
except (Exception, ) as update_report_error:
update_report(survey_report.id, {"state": SURVEY_REPORT_ERROR})
raise Exception(update_report_error) from update_report_error
Expand Down
34 changes: 34 additions & 0 deletions openedx/features/survey_report/context_processors.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
"""
This is the survey report contex_processor modules
This is meant to determine the visibility of the survey report banner
across all admin pages in case a survey report has not been generated
"""

from datetime import datetime
from dateutil.relativedelta import relativedelta # for months test
from .models import SurveyReport
from django.urls import reverse
from django.conf import settings


def admin_extra_context(request):
"""
This function sends extra context to every admin site
The current treshhold to show the banner is one month but this can be redefined in the future
"""
months = settings.SURVEY_REPORT_CHECK_THRESHOLD
if not request.path.startswith(reverse('admin:index')):
return {'show_survey_report_banner': False, }

try:
latest_report = SurveyReport.objects.latest('created_at')
months_treshhold = datetime.today().date() - relativedelta(months=months) # Calculate date one month ago
show_survey_report_banner = latest_report.created_at.date() <= months_treshhold
except SurveyReport.DoesNotExist:
show_survey_report_banner = True

return {'show_survey_report_banner': show_survey_report_banner, }
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@ class GenerateReportTest(TestCase):
Test for generate_report command.
"""

@mock.patch('openedx.features.survey_report.api.send_report_to_external_api')
@mock.patch('openedx.features.survey_report.api.get_report_data')
def test_generate_report(self, mock_get_report_data):
def test_generate_report(self, mock_get_report_data, mock_send_report):
"""
Test that generate_report command creates a survey report.
"""
Expand All @@ -30,6 +31,7 @@ def test_generate_report(self, mock_get_report_data):
'extra_data': {'extra': 'data'},
}
mock_get_report_data.return_value = report_test_data
mock_send_report.return_value = None
out = StringIO()
call_command('generate_report', no_send=True, stdout=out)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
{% block survey_report_banner %}
{% if show_survey_report_banner %}
<div id="originalContent" style="border: 3px solid #06405d; margin-bottom: 50px; rgb(0 0 0 / 18%) 0px 3px 5px;">
<div style="background-color: #06405d;padding: 17px 37px;">
<h1 style="margin: 0; color: #FFFF; font-weight: 600;">Join the Open edX Data Sharing Initiative and shape the future of learning</h1>
</div>
<div style="padding: 17px 37px;">
<p>The Open edX Project relies on the collective strength of its community to be a thriving platform for online education.</p>
<p>Open edX is a dynamic ecosystem and it is used in diverse learning environments. By sharing anonymized reports of aggregated data, you can contribute to the collective knowledge of the community. This data can help us all understand the reach of our project, make better decisions and ultimately support innovation in lifelong learning and advance next generation learning experience platforms.</p>
<p>We invite you to join the Open edX Data Sharing Initiative by sharing an anonymized reports of aggregated data from your institution's usage of the platform. The report data will be sent to Axim Collaborative, the non-profit behind the Open edX project.</p>
<p>If you agree and want to send a report you can click the button below. You can always send reports and see the status of reports you have sent in the past at <a href="/admin/survey_report/surveyreport/">admin/survey_report/surveyreport/</a> .</p>
</div>
<div style="display: flex; justify-content: flex-end; padding: 0 37px 17px;">
<button id="dismissButton" type="button" style="background-color:var(--close-button-bg); color: var(--button-fg); border: none; border-radius: 4px; padding: 10px 20px; margin-right: 10px; cursor: pointer;">Dismiss</button>
<form id='survey_report_form' method="POST" action="/survey_report/generate_report" style="margin: 0; padding: 0;">
{% csrf_token %}
<button type="submit" style="background-color: #377D4D; color: var(--button-fg); border: none; border-radius: 4px; padding: 10px 20px; cursor: pointer;">Send Report</button>
</form>
</div>
</div>
<div id="thankYouMessage" style="display: none; background-color: var(--darkened-bg); padding: 20px 40px; margin-bottom: 30px;box-shadow: rgb(0 0 0 / 18%) 0px 3px 5px;">
<div style="display: flex; align-items: center;">
<svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 24 24">
<g fill="#377D4D"><path d="M22 12c0 5.523-4.477 10-10 10S2 17.523 2 12S6.477 2 12 2s10 4.477 10 10Z"></path>
<path d="M16.03 8.97a.75.75 0 0 1 0 1.06l-5 5a.75.75 0 0 1-1.06 0l-2-2a.75.75 0 1 1 1.06-1.06l1.47 1.47l2.235-2.236L14.97 8.97a.75.75 0 0 1 1.06 0Z" fill="#FFF"></path>
</g>
</svg>
<span style="font-size: 16px; margin-left: 15px;">Thank you for your collaboration and support! Your contribution is greatly appreciated and will help us continue to improve.</span>
</div>
</div>
{% endif %}

<!-- The original content of the block -->
<script>
$(document).ready(function(){
$('#dismissButton').click(function() {
$('#originalContent').slideUp('slow', function() {
// If you want to do something after the slide-up, do it here.
// For example, you can hide the entire div:
// $(this).hide();
});
});
// When the form is submitted
$("#survey_report_form").submit(function(event){
event.preventDefault(); // Prevent the form from submitting traditionally

// Make the AJAX request
$.ajax({
url: $(this).attr("action"),
type: $(this).attr("method"),
data: $(this).serialize(),
success: function(response){
// Hide the original content block
$("#originalContent").slideUp(400, function() {
//$(this).css('display', 'none');
// Show the thank-you message block with slide down effect
$("#thankYouMessage").slideDown(400, function() {
// Wait for 3 seconds (3000 milliseconds) and then slide up the thank-you message
setTimeout(function() {
$("#thankYouMessage").slideUp(400);
}, 3000);
});
});
},
error: function(error){
// Handle any errors
console.error("Error sending report:", error);
}
});
});
});
</script>

{% endblock %}

0 comments on commit e9d84d0

Please sign in to comment.