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))
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)
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)
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)
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))
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)
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)
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)