Skip to content

Commit f5e9d59

Browse files
Merge branch '278_task_with_pres'
2 parents e0da2d4 + f746d65 commit f5e9d59

File tree

5 files changed

+46
-9
lines changed

5 files changed

+46
-9
lines changed

app/mongo_models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ class Tasks(MongoModel):
7070
attempt_count = fields.IntegerField()
7171
required_points = fields.FloatField()
7272
criteria_pack_id = fields.CharField()
73+
presentation_id = fields.ObjectIdField(blank=True)
7374

7475

7576
class TaskAttempts(MongoModel):

app/mongo_odm.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -379,16 +379,18 @@ def get_task(self, task_id):
379379
logger.warning('task_id = {}, {}: {}.'.format(task_id, e.__class__, e))
380380
return None
381381

382-
def add_task(self, task_id, task_description, attempt_count, required_points, criteria_pack_id):
383-
return Tasks(
382+
def add_task(self, task_id, task_description, attempt_count, required_points, criteria_pack_id, presentation_id=None):
383+
task = Tasks(
384384
task_id=task_id,
385385
task_description=task_description,
386386
attempt_count=attempt_count,
387387
required_points=required_points,
388388
criteria_pack_id=criteria_pack_id,
389-
).save()
389+
)
390+
if presentation_id: task.presentation_id = presentation_id
391+
return task.save()
390392

391-
def add_task_if_absent(self, task_id, task_description, attempt_count, required_points, criteria_pack_id):
393+
def add_task_if_absent(self, task_id, task_description, attempt_count, required_points, criteria_pack_id, presentation_id=None):
392394
task_db = self.get_task(task_id)
393395
if task_db is None:
394396
return self.add_task(task_id, task_description, attempt_count, required_points, criteria_pack_id)
@@ -400,6 +402,8 @@ def add_task_if_absent(self, task_id, task_description, attempt_count, required_
400402
task_db.required_points = required_points
401403
if task_db.criteria_pack_id != criteria_pack_id:
402404
task_db.criteria_pack_id = criteria_pack_id
405+
if task_db.presentation_id != presentation_id:
406+
task_db.presentation_id = presentation_id
403407
return task_db.save()
404408

405409

app/routes/lti.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import logging
2+
from bson.objectid import ObjectId
23

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

56
from app.lti_session_passback.lti_module import utils
67
from app.lti_session_passback.lti_module.check_request import check_request
7-
from app.mongo_odm import ConsumersDBManager, SessionsDBManager, TasksDBManager
8-
from app.utils import ALLOWED_EXTENSIONS, DEFAULT_EXTENSION
8+
from app.mongo_odm import ConsumersDBManager, PresentationFilesDBManager, SessionsDBManager, TasksDBManager
9+
from app.utils import ALLOWED_EXTENSIONS, DEFAULT_EXTENSION, check_argument_is_convertible_to_object_id
910

1011
routes_lti = Blueprint('routes_lti', __name__)
1112
logger = logging.getLogger('root_logger')
@@ -38,6 +39,7 @@ def lti():
3839
attempt_count = int(custom_params.get('attempt_count', 1))
3940
required_points = float(custom_params.get('required_points', 0))
4041
criteria_pack_id = custom_params.get('criteria_pack_id', 'SimplePack')
42+
presentation_id = custom_params.get('presentation_id')
4143
feedback_evaluator_id = int(custom_params.get('feedback_evaluator_id', 1))
4244
role = utils.get_role(params)
4345
params_for_passback = utils.extract_passback_params(params)
@@ -52,6 +54,11 @@ def lti():
5254
session['feedback_evaluator_id'] = feedback_evaluator_id
5355
session['formats'] = pres_formats
5456

55-
TasksDBManager().add_task_if_absent(task_id, task_description, attempt_count, required_points, criteria_pack_id)
57+
if presentation_id and not check_argument_is_convertible_to_object_id(presentation_id):
58+
presentation_id = ObjectId(presentation_id)
59+
if not PresentationFilesDBManager().get_presentation_file(presentation_id):
60+
presentation_id = None
61+
62+
TasksDBManager().add_task_if_absent(task_id, task_description, attempt_count, required_points, criteria_pack_id, presentation_id)
5663

5764
return redirect(url_for('routes_trainings.view_training_greeting'))

app/routes/trainings.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from flask import Blueprint, render_template, request, session
66
from app.localisation import *
77

8-
from app.api.trainings import get_training_statistics
8+
from app.api.trainings import add_training, get_training_statistics
99
from app.check_access import check_access
1010
from app.criteria_pack import CriteriaPackFactory
1111
from app.feedback_evaluator import FeedbackEvaluatorFactory
@@ -169,6 +169,9 @@ def view_training_greeting():
169169
criteria_pack_description = criteria_pack.get_criteria_pack_weights_description(
170170
FeedbackEvaluatorFactory().get_feedback_evaluator(session.get('feedback_evaluator_id')).weights,
171171
)
172+
# immediately create training if task has presentation
173+
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)
174+
172175
return render_template(
173176
'training_greeting.html',
174177
task_id=task_id,
@@ -181,4 +184,6 @@ def view_training_greeting():
181184
attempt_count=attempt_count,
182185
criteria_pack_id=criteria_pack_id,
183186
criteria_pack_description=criteria_pack_description.replace('\n', '\\n').replace('\'', ''),
187+
training_id=training_id,
188+
presentation_id=presentation_id
184189
)

app/templates/training_greeting.html

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,27 @@ <h3>{{ t("Номер тренировки") }}: {{ training_number }} / {{ attem
88
<h3>{{ t("Сумма баллов за предыдущие тренировки") }}: {{ current_points_sum }}</h3>
99
<h3>{{ t("Набор критериев") }}: {{ criteria_pack_id }}</h3>
1010
<div id="criteria-pack-description">{{ criteria_pack_description }}</div>
11-
<button id="start-training-button" type="button" onclick="location.href={{ url_for('routes_presentations.view_presentation_upload') }}">{{ t("Начать") }}</button>
11+
<button id="start-training-button" type="button"
12+
onclick="location.href=
13+
{% if not training_id %}
14+
'{{ url_for('routes_presentations.view_presentation_upload')}}'
15+
{% else %}
16+
'{{ url_for('routes_trainings.view_training', training_id=training_id) }}'
17+
{% endif %}
18+
"
19+
>{{ t("Начать") }}</button>
20+
{% if training_id %}
21+
<br>
22+
<div>
23+
<i>
24+
Для тренировки используется презентация:
25+
</i>
26+
</div>
27+
<img src="{{ url_for('api_files.get_presentation_preview', presentation_file_id=presentation_id)}}"
28+
style="max-width: 200px; max-height: 200px"
29+
>
30+
{% endif %}
31+
1232
</div>
1333
<script src="{{ url_for('static', filename='js/training_greeting.js') }}"></script>
1434
<script type="text/javascript">

0 commit comments

Comments
 (0)