Esempio n. 1
0
def delete_lesson(lesson_id):
    lesson = Lessons.query.get_or_404(lesson_id)
    course = Courses.query.get_or_404(lesson.course_id)
    term = Term.query.get_or_404(course.term_id)
    project = Projects.query.get_or_404(term.project_id)

    ##### РОЛЬ ДОСТУПА #####
    # Смотрим роли пользователей по проекту
    project_roles = get_roles(item_id=project.id, item_type=2)
    # определяем роль пользователя
    curr_user_role = user_role(project_roles, current_user.id)
    # завершаем обработку если у пользователя не хватает прав
    if not ((curr_user_role in ['admin'])
                or (current_user.username == 'Administrator')
                or (current_user.id == project.author_id)):
        abort(403)

    # Удаляем прикрепленные файлы
    if lesson.attach:
        for attachment in json.loads(lesson.attach):
            filename = attachment
            curr_folder_path = os.path.join('static', 'project_attachments',
                                                    'project_'+str(project.id),
                                                    'term_'+str(term.id),
                                                    'course_'+str(course.id))
            directory = os.path.join(current_app.root_path, curr_folder_path, 'lesson_'+str(lesson_id))
            shutil.rmtree(directory, ignore_errors=True)
        # Удаляем пустые папки
            curr_folder = os.path.join(current_app.root_path, 'static', 'project_attachments',
                                                    'project_'+str(project.id),
                                                    'term_'+str(term.id),
                                                    'course_'+str(course.id))
            if len(os.listdir(curr_folder)) == 0:
                shutil.rmtree(curr_folder, ignore_errors=True)
                curr_folder = os.path.join(current_app.root_path, 'static', 'project_attachments',
                                                        'project_'+str(project.id),
                                                        'term_'+str(term.id))
                if len(os.listdir(curr_folder)) == 0:
                    shutil.rmtree(curr_folder, ignore_errors=True)
                    curr_folder = os.path.join(current_app.root_path, 'static', 'project_attachments',
                                                            'project_'+str(project.id))
                    if len(os.listdir(curr_folder)) == 0:
                        shutil.rmtree(curr_folder, ignore_errors=True)
    # Удалние проекта, после того как разобрались с констреинтами
    db.session.delete(lesson)
    db.session.commit()
    flash('Занятие удалено', 'success')
    return redirect(url_for('courses.course_view', course_id=course.id))
Esempio n. 2
0
def lesson_view(lesson_id):
    lesson = Lessons.query.get_or_404(lesson_id)
    course = Courses.query.get_or_404(lesson.course_id)
    term = Term.query.get_or_404(course.term_id)
    project = Projects.query.get_or_404(term.project_id)
    quant_of_comments = count_comments(lesson.id, item_type=4)

    ##### РОЛЬ ДОСТУПА #####
    # Смотрим роли пользователей по проекту
    project_roles = get_roles(item_id=project.id, item_type=2)
    # определяем роль пользователя
    if current_user.is_authenticated:
        curr_user_role = user_role(project_roles, current_user.id)
    else:
        curr_user_role = ''

    if lesson.method_id:
        method = Methodics.query.get_or_404(lesson.method_id)
    else:
        method=''

    # разделяем преформатированный текст на строки, так как переносы не обрабатываются
    description_html=Markup(text_for_markup(lesson.description))
    tutors_html=Markup(text_for_markup(lesson.tutors))
    web_links_html=Markup(text_for_links_markup(lesson.web_links))
    note_html=Markup(text_for_markup(lesson.note))
    # Формируем список с файлами презентаций, достаем из базы список в JSON и переводим его в нормальный
    attachments = []
    if lesson.attach:
        for attachment in json.loads(lesson.attach):
            attachments.append(attachment)

    return render_template('lesson.html',
                            term = term,
                            project = project,
                            curr_user_role=curr_user_role,
                            course = course,
                            lesson=lesson,
                            method=method,
                            attachments = attachments,
                            description = description_html,
                            note = note_html,
                            web_links = web_links_html,
                            tutors = tutors_html,
                            quant_of_comments=quant_of_comments,
                            date_translate=date_translate)
Esempio n. 3
0
def create_students_group(course_id):
    """
    Создаем новую группу участников курса
    """
    course = Courses.query.get_or_404(course_id)
    term = term = Term.query.get_or_404(course.term_id)
    project = Projects.query.get_or_404(term.project_id)

    ##### РОЛЬ ДОСТУПА #####
    # Смотрим роли пользователей по проекту
    project_roles = get_roles(item_id=project.id, item_type=2)
    # определяем роль пользователя
    curr_user_role = user_role(project_roles, current_user.id)
    # завершаем обработку если у пользователя не хватает прав
    if not ((curr_user_role in ['admin', 'moder']) or
            (current_user.username == 'Administrator') or
            (current_user.id == project.author_id)):
        abort(403)

    form = AddStudentsGroupForm()

    if form.validate_on_submit():
        students_group = StudentsGroup(author_id=current_user.id,
                                       description=form.description.data)

        db.session.add(students_group)
        db.session.commit()
        flash('Новая группа участников создана', 'success')
        students_group = StudentsGroup.query.filter_by(
            author_id=current_user.id,
            description=form.description.data).order_by(
                StudentsGroup.create_date.desc()).first()
        course.students_group_id = students_group.id
        db.session.commit()
        return redirect(url_for('courses.course_view', course_id=course.id))
    # Первая загрузка
    return render_template('create_students_group.html',
                           form=form,
                           course_name=course.name,
                           course_id=course.id,
                           term=term,
                           project=project,
                           curr_user_role=curr_user_role,
                           course_label_image=course.label_image)
Esempio n. 4
0
def create_lesson(course_id):
    """
    Создаем новое занятие для выбранного курса
    """
    course = Courses.query.get_or_404(course_id)
    term = Term.query.get_or_404(course.term_id)
    project = Projects.query.get_or_404(term.project_id)

    ##### РОЛЬ ДОСТУПА #####
    # Смотрим роли пользователей по проекту
    project_roles = get_roles(item_id=project.id, item_type=2)
    # определяем роль пользователя
    curr_user_role = user_role(project_roles, current_user.id)
    # завершаем обработку если у пользователя не хватает прав
    if not ((curr_user_role in ['admin', 'moder'])
                or (current_user.username == 'Administrator')
                or (current_user.id == project.author_id)):
        abort(403)

    form = AddLessonForm()

    if form.validate_on_submit():
        lesson = Lessons(course_id=course.id,
                        description=form.description.data,
                        lesson_date = form.lesson_date.data,
                        start_time = form.start_time.data,
                        finish_time = form.finish_time.data)

        db.session.add(lesson)
        db.session.commit()
        flash('Занятие создано', 'success')
        if not form.start_time.data:
            lesson = Lessons.query.filter_by(course_id=course_id, description=form.description.data, lesson_date = form.lesson_date.data).first()
        else:
            lesson = Lessons.query.filter_by(course_id=course_id, description=form.description.data, lesson_date = form.lesson_date.data, start_time = form.start_time.data).first()
        return redirect(url_for('courses.update_lesson', lesson_id=lesson.id))
    # Первая загрузка
    return render_template('create_lesson.html',
                            form=form,
                            course = course,
                            project = project,
                            curr_user_role=curr_user_role,
                            term=term)
Esempio n. 5
0
def delete_lesson_attachment(lesson_id):
    """
    Удаляем прикрепленный файл для выбранного занятия
    """
    lesson = Lessons.query.get_or_404(lesson_id)
    course = Courses.query.get_or_404(lesson.course_id)
    term = Term.query.get_or_404(course.term_id)
    project = Projects.query.get_or_404(term.project_id)

    ##### РОЛЬ ДОСТУПА #####
    # Смотрим роли пользователей по проекту
    project_roles = get_roles(item_id=project.id, item_type=2)
    # определяем роль пользователя
    curr_user_role = user_role(project_roles, current_user.id)
    # завершаем обработку если у пользователя не хватает прав
    if not ((curr_user_role in ['admin', 'moder'])
                or (current_user.username == 'Administrator')
                or (current_user.id == project.author_id)):
        abort(403)

    attachment = request.args.get('attachment')
    filename = attachment
    curr_folder_path = os.path.join('static', 'project_attachments',
                                            'project_'+str(project.id),
                                            'term_'+str(term.id),
                                            'course_'+str(course.id))
    directory = os.path.join(current_app.root_path, curr_folder_path, 'lesson_'+str(lesson_id))
    curr_filepath = os.path.join(current_app.root_path, directory, filename)
    os.remove(curr_filepath)
    if len(os.listdir(directory)) == 0:
        shutil.rmtree(directory, ignore_errors=True)
        lesson.attach = None
        db.session.commit()
    else:
        if lesson.attach:
            attachments = json.loads(lesson.attach)
            attachments.remove(filename)
            lesson.attach = json.dumps(attachments)
            db.session.commit()
    flash('Прикрепленный к занятию файл удален', 'warning')
    # filepath = os.path.join(directory, filename)
    return redirect(url_for('courses.update_lesson', lesson_id=lesson_id))
Esempio n. 6
0
def create_course(term_id):
    """
    Создаем новый курс для определенного периода выбранного проекта
    """
    term = term = Term.query.get_or_404(term_id)
    project = Projects.query.get_or_404(term.project_id)

    ##### РОЛЬ ДОСТУПА #####
    # Смотрим роли пользователей по проекту
    project_roles = get_roles(item_id=project.id, item_type=2)
    # определяем роль пользователя
    curr_user_role = user_role(project_roles, current_user.id)
    # завершаем обработку если у пользователя не хватает прав
    if not ((curr_user_role in ['admin', 'moder'])
                or (current_user.username == 'Administrator')
                or (current_user.id == project.author_id)):
        abort(403)

    form = AddCourseForm()

    if form.validate_on_submit():
        course = Courses(project_id=project.id,
                        term_id = term.id,
                        name=form.name.data,
                        description=form.description.data,
                        start_date = form.start_date.data,
                        finish_date = form.finish_date.data)

        db.session.add(course)
        db.session.commit()
        flash('Курс занятий создан', 'success')
        course = Courses.query.filter_by(term_id=term_id, name=form.name.data).first()
        return redirect(url_for('courses.update_course', course_id=course.id))
    # Первая загрузка
    return render_template('create_course.html',
                            form=form,
                            term_name = term.name,
                            project_name = project.name,
                            project=project,
                            curr_user_role=curr_user_role,
                            term=term)
Esempio n. 7
0
def update_students_group_list(course_id):
    """
    Изменяем состав группы участников курса
    """
    session['course_id'] = course_id
    course = Courses.query.get_or_404(course_id)
    term = term = Term.query.get_or_404(course.term_id)
    project = Projects.query.get_or_404(term.project_id)

    ##### РОЛЬ ДОСТУПА #####
    # Смотрим роли пользователей по проекту
    project_roles = get_roles(item_id=project.id, item_type=2)
    # определяем роль пользователя
    curr_user_role = user_role(project_roles, current_user.id)
    # завершаем обработку если у пользователя не хватает прав
    if not ((curr_user_role in ['admin', 'moder']) or
            (current_user.username == 'Administrator') or
            (current_user.id == project.author_id)):
        abort(403)

    students_group = StudentsGroup.query.get_or_404(course.students_group_id)
    students_group_list = []
    learning_group = Learning_groups.query.filter_by(
        group_id=course.students_group_id)
    for student in learning_group:
        students_group_list.append(
            Students.query.filter_by(id=student.student_id).first())
    return render_template('students_group_list.html',
                           group_name=students_group.description,
                           group_id=students_group.id,
                           students_group_list=students_group_list,
                           course_id=course.id,
                           course_name=course.name,
                           term=term,
                           project=project,
                           curr_user_role=curr_user_role,
                           course_label_image=course.label_image,
                           zip=zip,
                           len=len)
Esempio n. 8
0
def update_schedule(course_id):
    """
    Редактируем расписание занятий проекта
    """
    course = Courses.query.get_or_404(course_id)
    term = Term.query.get_or_404(course.term_id)
    project = Projects.query.get_or_404(term.project_id)
    course_schedule = Lessons.query.filter_by(course_id=course.id).order_by(Lessons.lesson_date).order_by(Lessons.start_time).all()

    ##### РОЛЬ ДОСТУПА #####
    # Смотрим роли пользователей по проекту
    project_roles = get_roles(item_id=project.id, item_type=2)
    # определяем роль пользователя
    curr_user_role = user_role(project_roles, current_user.id)
    # завершаем обработку если у пользователя не хватает прав
    if not ((curr_user_role in ['admin', 'moder'])
                or (current_user.username == 'Administrator')
                or (current_user.id == project.author_id)):
        abort(403)

    # формируем словарь с привязанными к занятим методиками
    methods_dict = {}
    if course_schedule:
        # students_group = StudentsGroup.query.get_or_404(course.students_group_id)
        # learning_group = Learning_groups.query.filter_by(group_id=course.students_group_id)
        for lesson in course_schedule:
            method_id = lesson.method_id
            method = Methodics.query.filter_by(id=method_id).first()
            methods_dict[method_id] = method
    return render_template('course_schedule.html',
                            course_schedule=course_schedule,
                            course=course,
                            term=term,
                            project=project,
                            curr_user_role=curr_user_role,
                            methods_dict=methods_dict,
                            date_translate=date_translate,
                            len=len,
                            zip=zip)