def app_logged_in(subj_name): if get_current_user() is None: return redirect(url_for("index")) subject_list = list(Subject.find({"hidden": False})) if subj_name not in [sub["name"] for sub in subject_list]: abort(404) subject = Subject.find_one({"name": subj_name}) tasks_list = [] raw_tasks = TaskType.find({"subject": subject.id}) for t in raw_tasks: tasks_list.append({ "number": int(t.number), "compete_percentage": 0, "points": t.points, "status": get_status_on_task(t), }) return render( "tasks.html", title="Задания", header_label="Все задания первой части", current_subj=subj_name, current_mode="tasks", subject_list=subject_list, tasks_list=tasks_list, task_list_length=len(tasks_list), )
def app_logged_in(subj_name): user = get_current_user() if user is None: return redirect(url_for("index")) subject_list = list(Subject.find({"hidden": False})) if subj_name not in [sub["name"] for sub in subject_list]: abort(404) exclude = request.args.get("exclude", "").split() subject = Subject.find_one({"name": subj_name}) task_types = TaskType.find({"subject": subject.id}) tasks = [] for tt in task_types: if tt.number in exclude: continue rel_tasks = Task.find({"task_type": tt.id}) task = choice(list(rel_tasks)) session["task" + str(tt.number)] = str(task.id) text = None if task.text.pk is not None: text = task.text.fetch().body tasks.append({ "number": tt.number, "description": eval('"' + task.description + '"'), "text": text, "options": task.options, }) return render( "practice.html", title="Тест", header_label="Тест в формате ЕГЭ", current_subj=subj_name, current_mode="practice", subject_list=subject_list, tasks=tasks, )
def admin_main(): user = get_current_user() if user is None: return render("access-denied.html") if not user.is_admin: return render("access-denied.html") subjects = Subject.find({"hidden": False}) texts_list = [{"id": "5e4066a91c9d440000785ec1", "low": "Нет текста"}] texts = Text.find() for text in texts: if str(text.id) == "5e4066a91c9d440000785ec1": continue low = text.body if len(low) > 30: low = low[:30] texts_list.append({"id": str(text.id), "low": low}) if request.method == "GET": return render("add-task.html", subjects=subjects, texts_list=texts_list) subject = Subject.find_one({"label": request.form["subject"]}) task_type = TaskType.find_one( {"number": request.form["task_type"], "subject": subject.id} ) task_type.count_of_tasks += 1 task_type.commit() description = request.form["description"] var1 = request.form["var1"] var2 = request.form["var2"] var3 = request.form["var3"] var4 = request.form["var4"] var5 = request.form["var5"] options = [] if var1: options.append(var1) if var2: options.append(var2) if var3: options.append(var3) if var4: options.append(var4) if var5: options.append(var5) answers = request.form["answers"].replace(" ", "").split(",") explanation = request.form["explanation"] text = request.form["text"] task = Task( task_type=task_type, description=description, options=options, answers=answers, explanation=explanation, text=ObjectId(str(text)), ) task.commit() return render("add-task.html", subjects=subjects, ok=True, texts_list=texts_list)
def get_percentage(): user = get_current_user() if user is None: return "No user context" subj_name = request.form["subj_name"] number = request.form["number"] subject = Subject.find_one({"name": subj_name}) tasktype = TaskType.find_one({ "subject": subject.id, "number": str(number) }) return str(count_percentage_on_task(tasktype))
def task_theory(subj_name, task_id): user = get_current_user() if user is None: return redirect(url_for("index")) if subj_name != "russian": abort(404) subject_list = list(Subject.find({"hidden": False})) subject = Subject.find_one({"name": subj_name}) task_type = TaskType.find_one({ "subject": subject.id, "number": str(task_id) }) return render( "task-theory.html", title="Задание", header_label="Теория по заданию", current_subj=subj_name, subject_list=subject_list, task_id=task_id, cods=list(task_type.cods), task_description=task_type.description, )
def task_practice(subj_name, task_id): if get_current_user() is None: return redirect(url_for("index")) if subj_name != "russian": abort(404) user = get_current_user() subject = Subject.find_one({"name": subj_name}) subject_list = list(Subject.find({"hidden": False})) task_type = TaskType.find_one({ "subject": subject.id, "number": str(task_id) }) tasks = [] raw_tasks = Task.find({"task_type": task_type.id}) for task in raw_tasks: tl = TaskLink.find_one({"task": task.id, "user": user.id}) text = None if task.text.pk is not None: text = task.text.fetch().body tasks.append({ "id": str(task.id), "number": task_type.number, "description": eval('"' + task.description + '"'), "text": str(text), "options": task.options, "done": tl.done if tl else False, "answers": task.answers, "explanation": task.explanation, }) return render( "task-practice.html", title="Задания", header_label="Практика задания", current_subj=subj_name, subject_list=subject_list, tasks=tasks, )
def change_status(): user = get_current_user() if user is None: return "No user context" subject_name = request.form["subject_name"] task_number = str(request.form["task_number"]) new_status = int(request.form["new_status"]) subject = Subject.find_one({"name": subject_name}) tasktype = TaskType.find_one({ "subject": subject.id, "number": task_number }) tasktypelink = TaskTypeLink.find_one({ "user": user.id, "task_type": tasktype.id }) if not tasktypelink: tasktypelink = TaskTypeLink(user=user.id, task_type=tasktype.id, status=new_status) else: tasktypelink.status = new_status tasktypelink.commit() return "Query ok"