-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Icf cpheapm61 customizable mgmt dashboard #1112
base: main
Are you sure you want to change the base?
Conversation
ZindahFarhaICF
commented
Sep 26, 2024
- Create CRUDL to customize things at the assessment level. CRUDL TaskType. CRUDL TaskStatus. CRUDL TaskTrigger.
- Add the ability to copy all task setup at the assessment level
- Add the ability to progress to the next task status
- Re-enable current APIs and data exports, add to hawc_client, write tests
…to ICF-cpheapm60-migrate-schema
{% if assessment.enable_risk_of_bias %} | ||
<div class="dropdown-divider"></div> | ||
<span class="dropdown-header">Study tasks</span> | ||
<a class="dropdown-item" href="{% url 'mgmt:task-list' assessment.pk %}?owner={{user.id}}&status=990">View study status</a> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The study page links to a user's existing task assignments page on the mgmt dashboard, where once a status is marked terminal a user's next task will start. I also implemented a similar page that only displays a user's earliest non-terminal task/status per study, and can add that back in if that was the goal.
@receiver(post_save, sender=models.TaskType) | ||
def default_configuration(sender, instance, created, **kwargs): | ||
""" | ||
Update study management tasks when a new task type is added |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This signal is not linked to task progress - just triggers new task creation for now when a task type is created.
# Conflicts: # hawc/apps/mgmt/forms.py # tests/client/test_client.py # tests/hawc/apps/mgmt/test_views.py
const url = `/mgmt/assessment/${$('#id_assessment').val()}/task-setup`, | ||
name = $('#id_assessment option:selected').text(), | ||
text = `<p>View approach for <a target="_blank" href="${url}">${name}<a/>.</p>`; | ||
$('#approach').html(text); |
Check warning
Code scanning / CodeQL
DOM text reinterpreted as HTML Medium
DOM text
DOM text
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix AI 4 days ago
To fix the problem, we need to ensure that any user input used to construct HTML is properly sanitized or escaped to prevent XSS attacks. In this case, we can use a library like DOMPurify to sanitize the HTML string before inserting it into the DOM. This will ensure that any potentially malicious content is neutralized.
- Include the DOMPurify library in the project.
- Use DOMPurify to sanitize the HTML string before inserting it into the DOM.
-
Copy modified line R17
@@ -16,18 +16,2 @@ | ||
{% block extrajs %} | ||
<script type="text/javascript"> | ||
$(document).ready(function(){ | ||
// move extra-content to appropriate location then make visible | ||
$('#extra_content').appendTo($('#extra_content_insertion')).removeClass('hidden'); | ||
|
||
const updateLink = function(){ | ||
const url = `/mgmt/assessment/${$('#id_assessment').val()}/task-setup`, | ||
name = $('#id_assessment option:selected').text(), | ||
text = `<p>View approach for <a target="_blank" href="${url}">${name}<a/>.</p>`; | ||
$('#approach').html(text); | ||
}; | ||
|
||
// load approach on assessment change | ||
$('#id_assessment').on('change', updateLink).trigger('change'); | ||
}); | ||
</script> | ||
{% endblock extrajs %} | ||
<script src="https://cdnjs.cloudflare.com/ajax/libs/dompurify/2.3.4/purify.min.js" integrity="sha384-pXw8gk5Y5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J |