Skip to content

Commit b8d2906

Browse files
committed
recheck buttons
1 parent 5ab767f commit b8d2906

File tree

5 files changed

+73
-26
lines changed

5 files changed

+73
-26
lines changed

app/api/sessions.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,26 @@
33
from flask import Blueprint, request, session
44

55
from app.config import Config
6-
from app.lti_session_passback.auth_checkers import check_auth
6+
from app.lti_session_passback.auth_checkers import check_auth, is_admin
77
from app.utils import DEFAULT_EXTENSION
88
from packaging import version as version_util
99
from ua_parser.user_agent_parser import Parse as user_agent_parse
1010

1111
api_sessions = Blueprint('api_sessions', __name__)
1212
logger = get_root_logger()
1313

14+
@api_sessions.route('/api/sessions/admin/', methods=['GET'])
15+
def get_session_admin():
16+
"""
17+
Endpoint to return session is admin.
18+
19+
:return: Dictionary with admin status (is corrent user admin or not), and 'OK' message, or
20+
or an empty dictionary with 404 HTTP code if access was denied.
21+
"""
1422

23+
if not check_auth():
24+
return {}, 404
25+
return {'admin': is_admin(), 'message': 'OK'}, 200
1526

1627
@api_sessions.route('/api/sessions/info/', methods=['GET'])
1728
def get_session_info():

app/static/js/show_all_trainings.js

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ function get_time_string(timestamp){
88
}
99
}
1010

11-
function buildCurrentTrainingRow(trainingId, trainingJson, is_Admin=false) {
11+
function buildCurrentTrainingRow(trainingId, trainingJson, isAdmin=false) {
1212

1313
const currentTrainingRowElement = document.createElement("tr");
1414

@@ -102,7 +102,7 @@ function buildCurrentTrainingRow(trainingId, trainingJson, is_Admin=false) {
102102
}
103103
currentTrainingRowElement.appendChild(recordingElement);
104104

105-
if (is_Admin) {
105+
if (isAdmin) {
106106
const recheckingElement = document.createElement("td");
107107
const button = document.createElement("input")
108108
button.type = "button"
@@ -112,22 +112,11 @@ function buildCurrentTrainingRow(trainingId, trainingJson, is_Admin=false) {
112112
recheckingElement.appendChild(button);
113113
currentTrainingRowElement.appendChild(recheckingElement);
114114
}
115-
return currentTrainingRowElement;
116-
}
117115

118-
function recheck(trainingId){
119-
console.log(`Start recheck for ${trainingId}`)
120-
fetch(`/api/trainings/${trainingId}/`, {method: "POST"})
121-
.then(response => response.json())
122-
.then(innerResponseJson => {
123-
if (innerResponseJson["message"] === "OK") {
124-
window.open(`/trainings/statistics/${trainingId}/`);
125-
//location.href = `/trainings/statistics/${trainingId}/`;
126-
}
127-
});
116+
return currentTrainingRowElement;
128117
}
129118

130-
function buildAllTrainingsTable(trainingsJson, is_Admin=false) {
119+
function buildAllTrainingsTable(trainingsJson) {
131120
if (trainingsJson["message"] !== "OK") return;
132121

133122
const allTrainingsTable = document.getElementById("all-trainings-table");
@@ -148,16 +137,31 @@ function buildAllTrainingsTable(trainingsJson, is_Admin=false) {
148137
"Презентация",
149138
"Аудиозапись"
150139
]
151-
if (is_Admin) {titles.push('Запустить перепроверку')}
152-
const titleRow = buildTitleRow(titles);
153-
allTrainingsTable.appendChild(titleRow);
154140

155-
const arrayTrainings = trainingsJson.trainings; // Array of train from FETCH
141+
fetch('/api/sessions/admin')
142+
.then(response => response.json())
143+
.then(responseJson => {
144+
const isAdmin = responseJson.admin;
145+
const arrayTrainings = trainingsJson.trainings; // Array of train from FETCH
146+
147+
if (isAdmin) {
148+
titles.push('Запустить перепроверку');
149+
}
156150

157-
Object.keys(arrayTrainings).forEach(trainingId => {
158-
const currentTrainingRowElement = buildCurrentTrainingRow(trainingId, arrayTrainings[trainingId], is_Admin);
159-
allTrainingsTable.appendChild(currentTrainingRowElement);
160-
});
151+
const titleRow = buildTitleRow(titles);
152+
allTrainingsTable.appendChild(titleRow);
153+
154+
Object.keys(arrayTrainings).forEach(trainingId => {
155+
const currentTrainingRowElement = buildCurrentTrainingRow(
156+
trainingId,
157+
arrayTrainings[trainingId],
158+
isAdmin
159+
);
160+
161+
allTrainingsTable.appendChild(currentTrainingRowElement);
162+
});
163+
})
164+
.catch(err => console.log(err));
161165
}
162166

163167
const REF_PAGE_COUNT = document.getElementById('ref-page-count');
@@ -262,7 +266,7 @@ async function updateCountPage() {
262266
REF_BUTTON_TO_END.innerText = pageTotal;
263267
}
264268

265-
function call_get_all_trainings({filters, admin=false, page = 0, count}) {
269+
function call_get_all_trainings({filters, page = 0, count}) {
266270
const query = new URLSearchParams({
267271
filters,
268272
count
@@ -272,5 +276,5 @@ function call_get_all_trainings({filters, admin=false, page = 0, count}) {
272276

273277
return fetch(`/api/trainings?${query.toString()}`)
274278
.then(response => response.json())
275-
.then(responseJson => buildAllTrainingsTable(responseJson, admin));
279+
.then(responseJson => buildAllTrainingsTable(responseJson));
276280
}

app/static/js/training_statistics.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,34 @@ function buildCurrentAttemptStatistics() {
33
fetch(`/api/task-attempts/?training_id=${trainingId}`)
44
.then(response => response.json())
55
.then(response => {
6+
fetch('/api/sessions/admin')
7+
.then(response_admin => response_admin.json())
8+
.then(responseJSON => {
9+
const isAdmin = responseJSON.admin;
10+
11+
if (isAdmin) {
12+
const recheckBtn = $("#recheck-btn")[0];
13+
14+
recheckBtn.addEventListener("click", () => {
15+
recheck(trainingId);
16+
})
17+
18+
recheckBtn.style.visibility = 'visible';
19+
}
20+
})
21+
622
let trainingNumber = response["training_number"];
723
let attemptCount = response["attempt_count"];
24+
825
if (jQuery.isEmptyObject(response) || trainingNumber === attemptCount) {
926
return;
1027
}
28+
1129
document.getElementById("training-number").textContent
1230
= "Номер тренировки: " + response["training_number"] + " / " + response["attempt_count"];
1331
document.getElementById("current-points").textContent
1432
= "Сумма баллов за предыдущие тренировки: " + response["current_points_sum"].toFixed(2);
33+
1534
let next_training = document.getElementById("next-training");
1635
next_training.style.visibility = "visible";
1736
next_training.style.fontSize = "14pt";

app/static/js/utils.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,18 @@ function buildTitleRow(columns) {
88
return titleRowElement;
99
}
1010

11+
function recheck(trainingId){
12+
console.log(`Start recheck for ${trainingId}`)
13+
fetch(`/api/trainings/${trainingId}/`, {method: "POST"})
14+
.then(response => response.json())
15+
.then(innerResponseJson => {
16+
if (innerResponseJson["message"] === "OK") {
17+
window.open(`/trainings/statistics/${trainingId}/`);
18+
//location.href = `/trainings/statistics/${trainingId}/`;
19+
}
20+
});
21+
}
22+
1123
function strtobool(val, onError= false) {
1224
try {
1325
val = val.toLowerCase();

app/templates/training/statistics.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
<div class="base-container">
1010
<h3>{{ title }}</h3>
1111
<h3 id="feedback">{{ feedback }}</h3>
12+
<button id="recheck-btn" style="visibility: hidden;">Запустить перепроверку</button>
1213
<div id="criteria-results" style="margin-left: auto"></div>
1314
<div id="verdict"></div>
1415
<h3>{{ remaining_processing_time_estimation }}</h3>

0 commit comments

Comments
 (0)