Skip to content

Commit

Permalink
Merge branch '278_task_with_pres'
Browse files Browse the repository at this point in the history
  • Loading branch information
HadronCollider committed Oct 27, 2021
2 parents e0da2d4 + f746d65 commit f5e9d59
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 9 deletions.
1 change: 1 addition & 0 deletions app/mongo_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ class Tasks(MongoModel):
attempt_count = fields.IntegerField()
required_points = fields.FloatField()
criteria_pack_id = fields.CharField()
presentation_id = fields.ObjectIdField(blank=True)


class TaskAttempts(MongoModel):
Expand Down
12 changes: 8 additions & 4 deletions app/mongo_odm.py
Original file line number Diff line number Diff line change
Expand Up @@ -379,16 +379,18 @@ def get_task(self, task_id):
logger.warning('task_id = {}, {}: {}.'.format(task_id, e.__class__, e))
return None

def add_task(self, task_id, task_description, attempt_count, required_points, criteria_pack_id):
return Tasks(
def add_task(self, task_id, task_description, attempt_count, required_points, criteria_pack_id, presentation_id=None):
task = Tasks(
task_id=task_id,
task_description=task_description,
attempt_count=attempt_count,
required_points=required_points,
criteria_pack_id=criteria_pack_id,
).save()
)
if presentation_id: task.presentation_id = presentation_id
return task.save()

def add_task_if_absent(self, task_id, task_description, attempt_count, required_points, criteria_pack_id):
def add_task_if_absent(self, task_id, task_description, attempt_count, required_points, criteria_pack_id, presentation_id=None):
task_db = self.get_task(task_id)
if task_db is None:
return self.add_task(task_id, task_description, attempt_count, required_points, criteria_pack_id)
Expand All @@ -400,6 +402,8 @@ def add_task_if_absent(self, task_id, task_description, attempt_count, required_
task_db.required_points = required_points
if task_db.criteria_pack_id != criteria_pack_id:
task_db.criteria_pack_id = criteria_pack_id
if task_db.presentation_id != presentation_id:
task_db.presentation_id = presentation_id
return task_db.save()


Expand Down
13 changes: 10 additions & 3 deletions app/routes/lti.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import logging
from bson.objectid import ObjectId

from flask import Blueprint, request, session, redirect, url_for

from app.lti_session_passback.lti_module import utils
from app.lti_session_passback.lti_module.check_request import check_request
from app.mongo_odm import ConsumersDBManager, SessionsDBManager, TasksDBManager
from app.utils import ALLOWED_EXTENSIONS, DEFAULT_EXTENSION
from app.mongo_odm import ConsumersDBManager, PresentationFilesDBManager, SessionsDBManager, TasksDBManager
from app.utils import ALLOWED_EXTENSIONS, DEFAULT_EXTENSION, check_argument_is_convertible_to_object_id

routes_lti = Blueprint('routes_lti', __name__)
logger = logging.getLogger('root_logger')
Expand Down Expand Up @@ -38,6 +39,7 @@ def lti():
attempt_count = int(custom_params.get('attempt_count', 1))
required_points = float(custom_params.get('required_points', 0))
criteria_pack_id = custom_params.get('criteria_pack_id', 'SimplePack')
presentation_id = custom_params.get('presentation_id')
feedback_evaluator_id = int(custom_params.get('feedback_evaluator_id', 1))
role = utils.get_role(params)
params_for_passback = utils.extract_passback_params(params)
Expand All @@ -52,6 +54,11 @@ def lti():
session['feedback_evaluator_id'] = feedback_evaluator_id
session['formats'] = pres_formats

TasksDBManager().add_task_if_absent(task_id, task_description, attempt_count, required_points, criteria_pack_id)
if presentation_id and not check_argument_is_convertible_to_object_id(presentation_id):
presentation_id = ObjectId(presentation_id)
if not PresentationFilesDBManager().get_presentation_file(presentation_id):
presentation_id = None

TasksDBManager().add_task_if_absent(task_id, task_description, attempt_count, required_points, criteria_pack_id, presentation_id)

return redirect(url_for('routes_trainings.view_training_greeting'))
7 changes: 6 additions & 1 deletion app/routes/trainings.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from flask import Blueprint, render_template, request, session
from app.localisation import *

from app.api.trainings import get_training_statistics
from app.api.trainings import add_training, get_training_statistics
from app.check_access import check_access
from app.criteria_pack import CriteriaPackFactory
from app.feedback_evaluator import FeedbackEvaluatorFactory
Expand Down Expand Up @@ -169,6 +169,9 @@ def view_training_greeting():
criteria_pack_description = criteria_pack.get_criteria_pack_weights_description(
FeedbackEvaluatorFactory().get_feedback_evaluator(session.get('feedback_evaluator_id')).weights,
)
# immediately create training if task has presentation
presentation_id, training_id = (str(task_db.presentation_id), add_training(str(task_db.presentation_id))[0].get('training_id')) if task_db.presentation_id else (None, None)

return render_template(
'training_greeting.html',
task_id=task_id,
Expand All @@ -181,4 +184,6 @@ def view_training_greeting():
attempt_count=attempt_count,
criteria_pack_id=criteria_pack_id,
criteria_pack_description=criteria_pack_description.replace('\n', '\\n').replace('\'', ''),
training_id=training_id,
presentation_id=presentation_id
)
22 changes: 21 additions & 1 deletion app/templates/training_greeting.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,27 @@ <h3>{{ t("Номер тренировки") }}: {{ training_number }} / {{ attem
<h3>{{ t("Сумма баллов за предыдущие тренировки") }}: {{ current_points_sum }}</h3>
<h3>{{ t("Набор критериев") }}: {{ criteria_pack_id }}</h3>
<div id="criteria-pack-description">{{ criteria_pack_description }}</div>
<button id="start-training-button" type="button" onclick="location.href={{ url_for('routes_presentations.view_presentation_upload') }}">{{ t("Начать") }}</button>
<button id="start-training-button" type="button"
onclick="location.href=
{% if not training_id %}
'{{ url_for('routes_presentations.view_presentation_upload')}}'
{% else %}
'{{ url_for('routes_trainings.view_training', training_id=training_id) }}'
{% endif %}
"
>{{ t("Начать") }}</button>
{% if training_id %}
<br>
<div>
<i>
Для тренировки используется презентация:
</i>
</div>
<img src="{{ url_for('api_files.get_presentation_preview', presentation_file_id=presentation_id)}}"
style="max-width: 200px; max-height: 200px"
>
{% endif %}

</div>
<script src="{{ url_for('static', filename='js/training_greeting.js') }}"></script>
<script type="text/javascript">
Expand Down

0 comments on commit f5e9d59

Please sign in to comment.