Completed client side time adjustment handling

Corrected error display bug
Removed redundant auth and models in quiz client app
This commit is contained in:
2021-12-04 17:14:28 +00:00
parent c71e91326f
commit 9a2d738653
12 changed files with 64 additions and 54 deletions

View File

@ -41,18 +41,17 @@ class Test:
return jsonify({'error': f'Could not create exam. An error occurred.'}), 400
def add_time_adjustment(self, time_adjustment):
user_code = secrets.token_hex(3).upper()
adjustment = {
'_id': uuid4().hex,
'user_code': secrets.token_hex(3).upper(),
'time_adjustment': time_adjustment
user_code: time_adjustment
}
if db.tests.find_one_and_update({'_id': self._id}, {'$push': {'time_adjustments': adjustment}},upsert=False):
flash(f'Time adjustment for {adjustment["time_adjustment"]} minutes has been added. This can be enabled using the user code {adjustment["user_code"]}.')
if db.tests.find_one_and_update({'_id': self._id}, {'$set': {'time_adjustments': adjustment}},upsert=False):
flash(f'Time adjustment for {time_adjustment} minutes has been added. This can be enabled using the user code {user_code}.')
return jsonify({'success': adjustment})
return jsonify({'error': 'Failed to add the time adjustment. An error occurred.'}), 400
def remove_time_adjustment(self, _id):
if db.tests.find_one_and_update({'_id': self._id}, {'$pull': {'time_adjustments': {'_id': _id} }}):
def remove_time_adjustment(self, user_code):
if db.tests.find_one_and_update({'_id': self._id}, {'$unset': {f'time_adjustments.{user_code}': {}}}):
message = 'Time adjustment has been deleted.'
flash(message, 'success')
return jsonify({'success': message})

View File

@ -126,14 +126,16 @@ function error_response(response) {
</div>
`);
} else if (response.responseJSON.error instanceof Array) {
var output = ''
for (var i = 0; i < response.responseJSON.error.length; i ++) {
$alert.html(`
output += `
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<i class="bi bi-exclamation-triangle-fill" title="Danger"></i>
${response.responseJSON.error[i]}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
`);
`;
$alert.html(output);
}
}
@ -205,25 +207,22 @@ $('.result-action-buttons').click(function(event){
// Script for Deleting Time Adjustment
$('.adjustment-delete').click(function(event){
var _id = $(this).data('_id');
var user_code = $(this).data('user_code');
var location = window.location.href;
location.replace('#', '')
location = location.replace('#', '')
console.log(location)
console.log(_id)
$.ajax({
url: location + 'delete-adjustment/',
type: 'POST',
data: JSON.stringify({'_id': _id}),
contentType: 'application/json',
success: function(response) {
window.location.reload();
},
error: function(response){
error_response(response);
},
});
$.ajax({
url: location + 'delete-adjustment/',
type: 'POST',
data: JSON.stringify({'user_code': user_code}),
contentType: 'application/json',
success: function(response) {
window.location.reload();
},
error: function(response){
error_response(response);
},
});
event.preventDefault();
});

View File

@ -110,16 +110,16 @@
</tr>
</thead>
<tbody>
{% for entry in test.time_adjustments %}
{% for key, value in test.time_adjustments.items() %}
<tr>
<td>
{{ entry.user_code }}
{{ key }}
</td>
<td>
{{ entry.time_adjustment }}
{{ value }}
</td>
<td>
<a href="javascript::void(0);" class="btn btn-danger adjustment-delete" title="Delete Adjustment" data-_id="{{ entry._id }}" data-action="delete">
<a href="javascript::void(0);" class="btn btn-danger adjustment-delete" title="Delete Adjustment" data-user_code="{{ key }}">
<i class="bi bi-slash-circle-fill button-icon"></i>
</a>
</td>

View File

@ -417,7 +417,7 @@ def view_test(_id):
return render_template('/admin/test.html', test = test, form = form)
if request.method == 'POST':
if form.validate_on_submit():
time = request.form.get('time')
time = int(request.form.get('time'))
return Test(_id=_id).add_time_adjustment(time)
return jsonify({'error': form.time.errors }), 400
@ -425,8 +425,8 @@ def view_test(_id):
@admin_account_required
@login_required
def delete_adjustment(_id):
adjustment_id = request.get_json()['_id']
return Test(_id=_id).remove_time_adjustment(adjustment_id)
user_code = request.get_json()['user_code']
return Test(_id=_id).remove_time_adjustment(user_code)
@views.route('/results/')
@admin_account_required