Example #1
0
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),
    )
Example #2
0
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,
    )
Example #3
0
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)
Example #4
0
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))
Example #5
0
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,
    )
Example #6
0
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,
    )
Example #7
0
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"