def list_homework(course_id=None): error = None gc = Course.get_cours(course_id) if gc is None or current_user.id != gc.user_id: return redirect(url_for('cur_course', course_id=int(course_id))) get_all_homework = g.db.query( HomeWork.id, HomeWork.wait, HomeWork.lessons_id, HomeWork.courses_id, HomeWork.text, Lesson.name, Lesson.number, User.login, ).join(User, User.id == HomeWork.user_id).join( Lesson, Lesson.id == HomeWork.lessons_id).filter( and_( HomeWork.courses_id == gc.id, HomeWork.wait == 1, )).all() if request.method == 'POST': if request.form.get('accept'): accept = request.form.get('accept') change_homework = g.db.query(HomeWork).filter( HomeWork.id == int(accept)).first() change_homework.done = 1 change_homework.wait = 0 new_notice = Notice( notice_to_user=User.get_user(change_homework.user_id), text='Вы успено прошли урок %s курса %s' % (Lesson.get_lesson(change_homework.lessons_id).name, Course.get_cours(change_homework.courses_id).name), read=False) g.db.add(new_notice) if request.form.get('digress'): digress = request.form.get('digress') change_homework = g.db.query(HomeWork).filter( HomeWork.id == int(digress)).first() change_homework.done = 0 change_homework.wait = 0 new_notice = Notice( notice_to_user=User.get_user(change_homework.user_id), text='Извините, но вы не прошли урок %s курса %s' % (Lesson.get_lesson(change_homework.lessons_id).name, Course.get_cours(change_homework.courses_id).name), read=False) g.db.add(new_notice) g.db.commit() return redirect(url_for('list_homework', course_id=int(course_id))) return render_template('list_homework.html', error=error, get_all_homework=get_all_homework)
def add_blog(course_id=None): error = None subject = None text = None cur_course = Course.get_cours(course_id) if cur_course is None or cur_course.user_id != current_user.id or not current_user.admin: return redirect(404) if request.method == 'POST': subject = request.form.get('subject') text = request.form.get('text') if subject is None or subject == '': error = 'Не введена тема' return render_template('add_blog.html', error=error, subject=subject or '', text=text or '') if text is None or text == '': error = 'Не введено содержимое' return render_template('add_blog.html', error=error, subject=subject or '', text=text or '') new_blog = Blog(subject=subject, text=text, course_id_blog=cur_course, user_id_blog=current_user) g.db.add(new_blog) g.db.commit() return redirect(url_for('blog', blog_id=new_blog.id)) return render_template('add_blog.html', error=error, subject=subject or '', text=text or '')
def cur_course(course_id=None): list_lesson = request.args.get('list') error = None c_course = Course.get_cours(course_id) if not c_course: return redirect(url_for('course')) all_blog = g.db.query(Blog).filter( and_(Blog.course_id == c_course.id, Blog.ban == 0)).all() all_lesson_cur_course = g.db.query(Lesson).filter( and_(Lesson.cours_id == c_course.id, Lesson.ban == 0)).order_by(asc(Lesson.number)).all() if list_lesson: new_list = list_lesson.split(',') for num in range(len(new_list)): gl = g.db.query(Lesson).filter( and_(Lesson.id == int(new_list[num]), Lesson.cours_id == int(course_id))).first() gl.number = num + 1 g.db.commit() return render_template('cur_course.html', error=error, c_course=c_course, all_lesson_cur_course=all_lesson_cur_course, check=check_sub_curs(c_course.id), all_blog=all_blog)
def list_students_course(course_id=None): if Course.get_cours( course_id) is None or current_user.id != Course.get_cours( course_id).user_id: return redirect(url_for('course')) get_all_user_in_list = g.db.query( List.id, List.courses_id, List.ban, List.user_id, User.login, User.email, ).join(User, User.id == List.user_id).filter( and_(List.courses_id == Course.get_cours(course_id).id, List.ban == 0)).all() return render_template('list_students_course.html', get_all_user_in_list=get_all_user_in_list, get_course=Course.get_cours(course_id))
def list_students_lesson(course_id=None, lesson_number=None): course = Course.get_cours(course_id) if not current_user.admin and current_user.id != course.user_id: return redirect(url_for('cur_course', course_id=int(course_id))) get_all_user_in_list = g.db.query( List.id, List.courses_id, List.ban, List.user_id, User.login, User.email).join(User, User.id == List.user_id).filter( and_(List.courses_id == course.id, List.lessons_number == int(lesson_number), List.ban == 0)).all() get_lesson = g.db.query(Lesson).filter( and_(Lesson.cours_id == course.id, Lesson.number == int(lesson_number))).first() return render_template('list_student_lesson.html', get_all_user_in_list=get_all_user_in_list, get_course=course, get_lesson=get_lesson)
def check_homework_done(course_id, lesson_number): if current_user.admin or Course.get_cours( course_id).user_id == current_user.id: return True else: check_lesson = g.db.query(Lesson).filter( and_(Lesson.cours_id == int(course_id), Lesson.number == int(lesson_number) - 1, Lesson.ban == 0)).first() if check_lesson is None: return True else: if check_homework_wait(check_lesson.id, course_id) is None: return False if check_homework_wait(check_lesson.id, course_id).done: return True else: return False
def add_lesson(course_id=None): error = None name = None homework = None questions_result = None persent_for_test = None homework_type = None content = None test_in_day = None gc = Course.get_cours(course_id) if gc is None or gc.user_id != current_user.id: return redirect(url_for('course')) if request.method == 'POST': name = request.form.get('name') content = request.form.get('content') homework_type = request.form.get('homework_type') if name == '' or name is None: error = 'Название не введено' return render_template('add_lesson.html', error=error, name=name or '', test_in_day=test_in_day or '', persent_for_test=persent_for_test or '', homework_type=homework_type or '', content=content or '') if 5 > len(name) > 100: error = 'Название урока должно быть от 5 до 100 символов' return render_template('add_lesson.html', error=error, name=name or '', test_in_day=test_in_day or '', persent_for_test=persent_for_test or '', homework_type=homework_type or '', content=content or '') if content == '' or content is None: error = 'Содержимое не введено' return render_template('add_lesson.html', error=error, name=name or '', test_in_day=test_in_day or '', persent_for_test=persent_for_test or '', homework_type=homework_type or '', content=content or '') if homework_type == 'homework': homework = request.form.get('homework') if homework == '' or homework is None: error = 'Домашнее задание не введено' return render_template('add_lesson.html', error=error, name=name or '', test_in_day=test_in_day or '', persent_for_test=persent_for_test or '', homework_type=homework_type or '', content=content or '') elif homework_type == 'test': test_in_day = request.form.get('test_in_day') persent_for_test = request.form.get('persent_for_test') questions_result = [] quest = request.form.getlist("quest") for i in range(len(quest)): questions_result.append( dict(quest=quest[i], answers=request.form.getlist("answer_%s" % i), right=request.form.get("right_%s" % i))) if quest == '' or quest is None: error = 'Тест не введён' return render_template('add_lesson.html', error=error, name=name or '', test_in_day=test_in_day or '', persent_for_test=persent_for_test or '', homework_type=homework_type or '', content=content or '') if re.search(r'[0-9]{1,3}$', test_in_day) is None: error = 'Кол-во попыток в день не введено' return render_template('add_lesson.html', error=error, name=name or '', test_in_day=test_in_day or '', persent_for_test=persent_for_test or '', homework_type=homework_type or '', content=content or '') if re.search(r'[0-9]{1,3}$', persent_for_test) is None: error = 'Процент для теста не введён или введён не верно' return render_template('add_lesson.html', error=error, name=name or '', test_in_day=test_in_day or '', persent_for_test=persent_for_test or '', homework_type=homework_type or '', content=content or '') elif homework_type == 'free': error = None else: error = 'Тип выбран не верно' return render_template('add_lesson.html', error=error, name=name or '', test_in_day=test_in_day or '', persent_for_test=persent_for_test or '', homework_type=homework_type or '', content=content or '') get_all_lesson_in_course = g.db.query(Lesson.number).filter( and_(Lesson.cours_id == int(course_id), Lesson.ban == 0)).all() if get_all_lesson_in_course == [] or get_all_lesson_in_course is None: next_num = 1 else: next_num = max(get_all_lesson_in_course).number + 1 new_lesson = Lesson(name=name, number=next_num, content=content, homework_type=homework_type, homework=homework, test=questions_result, persent_for_test=persent_for_test, test_in_day=test_in_day, lessons_course_id=gc) g.db.add(new_lesson) g.db.commit() return redirect( url_for('lesson', course_id=int(course_id), lesson_id=new_lesson.id)) return render_template('add_lesson.html', error=error, name=name or '', persent_for_test=persent_for_test or '', homework_type=homework_type or '', content=content or '')
def edit_lesson(course_id=None, lesson_id=None): error = None gt = Course.get_cours(course_id) if gt is None: return redirect(url_for('course')) gl = Lesson.get_lesson(lesson_id) print(gl.homework_type) if gl is None: return redirect(url_for('cur_course', course_id=int(course_id))) if gt.user_id != current_user.id or not current_user.admin: return redirect(url_for('cur_course', course_id=int(course_id))) if request.method == 'POST': if request.form.get('del'): gl.ban = True g.db.commit() number = 1 get_all_less = g.db.query(Lesson).filter( and_(Lesson.cours_id == gt.id, Lesson.ban == False)).all() for gal in get_all_less: get_all_less[gal].number = number number += 1 g.db.commit() return redirect(url_for('cur_course', course_id=int(course_id))) name = request.form.get('name') edit_content = request.form.get('edit_content') # homework_type = request.form.get('homework_type') if name != gl.name and name != '' and name is not None: gl.name = name if edit_content != gl.content and edit_content != '' and edit_content is not None: gl.content = edit_content # if homework_type != gl.homework_type and homework_type != '' and homework_type is not None: # gl.homework_type = homework_type # print(homework_type) if gl.homework_type == 'homework': edit_homework = request.form.get('edit_homework') if edit_homework != gl.homework and edit_homework != '' and edit_homework is not None: gl.homework = edit_homework if gl.homework_type == 'test': test_in_day = request.form.get('test_in_day') if re.search(r'[0-9]{1,3}$', test_in_day) is None: error = 'Пожалуйста введите попытки для теста' return render_template('edit_lesson.html', lesson=gl, name=gl.name or '', edit_content=gl.content or '', homework_type=gl.homework_type or '', edit_homework=gl.homework or '', error=error) persent_for_test = request.form.get('persent_for_test') if re.search(r'[0-9]{1,3}$', persent_for_test) is None: error = 'Пожалуйста введите процент прохождения теста' return render_template('edit_lesson.html', lesson=gl, name=gl.name or '', edit_content=gl.content or '', homework_type=gl.homework_type or '', edit_homework=gl.homework or '', error=error) questions_result = [] quest = request.form.getlist("quest") for i in range(len(quest)): questions_result.append( dict(quest=quest[i], answers=request.form.getlist("answer_%s" % i), right=request.form.get("right_%s" % i))) gl.test = questions_result g.db.commit() return render_template('edit_lesson.html', lesson=gl, name=gl.name or '', edit_content=gl.content or '', homework_type=gl.homework_type or '', edit_homework=gl.homework or '', error=error)
def lesson(course_id=None, lesson_id=None): homework = '' error = None gc = Course.get_cours(course_id) if gc is None: return redirect(url_for('course')) gl = Lesson.get_lesson(lesson_id) if gl is None or not check_sub_curs( int(course_id)) or not check_homework_done(int(course_id), int(gl.number)): return redirect(url_for('cur_course', course_id=course_id)) check_test = g.db.query(TestInDay).filter( and_(TestInDay.user_id == current_user.id, TestInDay.lesson_id == gl.id, TestInDay.ban == 0)).first() if request.method == 'POST': change_list = g.db.query(List).filter( and_(List.user_id == current_user.id, List.courses_id == gc.id)).first() if gl.homework_type == 'homework': homework = request.form.get('homework') if homework == '' or homework is None: error = 'Вы не ввели домашнее задание' return render_template('lesson.html', lesson=gl, course=gc, homework=homework, error=error, chcl=check_homework_wait( lesson_id, course_id)) else: change_list.lessons_number = gl.number + 1 new_homework = HomeWork(homework_num=gl, course_user=gc, wait=True, text=homework, done=False, user_homework=current_user) new_notice = Notice( notice_to_user=User.get_user(gc.user_id), text='Пришла домашня работа на проверку от %s' % current_user.login, hypertext='http://%s/list_homework/%s' % (school.config['HOST_AND_PORT'], gc.id), read=False) g.db.add(new_homework, new_notice) g.db.commit() return redirect(url_for('cur_course', course_id=int(course_id))) if gl.homework_type == 'free': change_list.lessons_number = gl.number + 1 new_homework = HomeWork(homework_num=gl, course_user=gc, wait=False, done=True, user_homework=current_user) g.db.add(new_homework) g.db.commit() return redirect(url_for('cur_course', course_id=int(course_id))) if gl.homework_type == 'test': if check_test is not None: if check_test.data[0] < datetime.datetime.now( ) < check_test.data[1]: if check_test.count == gl.test_in_day: error = "У вас закончились попытки, приходите завтра" return render_template('lesson.html', lesson=gl, course=gc, error=error, chcl=check_homework_wait( lesson_id, course_id)) if check_test.data[1] < datetime.datetime.now(): check_test.ban = True g.db.commit() check_test = None change_list.lessons_number = gl.number + 1 right_answer_user = 0 for number in range(len(gl.test)): if int(request.form.get('right_%s' % number)) == int( gl.test[number]['right']): right_answer_user += 1 persent_right_answer_user = (right_answer_user / len(gl.test)) * 100 if gl.persent_for_test <= persent_right_answer_user: if check_test is not None: check_test.ban = True new_homework = HomeWork(homework_num=gl, course_user=gc, wait=False, done=True, user_homework=current_user) g.db.add(new_homework) g.db.commit() return redirect(url_for('cur_course', course_id=int(course_id))) else: if check_test is None: new_testinday = TestInDay(user_test_in_day=current_user, test_lesson=gl, count=1, data=[ datetime.datetime.now(), datetime.datetime.now() + datetime.timedelta(days=1) ]) g.db.add(new_testinday) g.db.commit() error = "Вы не прошли тест. Попробуйте пройти тест ещё раз. " \ "Осталось попыток(в день): %s" % (gl.test_in_day - 1) return render_template('lesson.html', course=gc, lesson=gl, error=error, chcl=check_homework_wait( lesson_id, course_id)) else: check_test.count = check_test.count + 1 g.db.commit() error = "Вы не прошли тест. Попробуйте пройти тест ещё раз. " \ "Осталось попыток(в день): %s" % (gl.test_in_day - check_test.count) return render_template('lesson.html', course=gc, lesson=gl, error=error, chcl=check_homework_wait( lesson_id, course_id)) return render_template('lesson.html', course=gc, lesson=gl, homework=homework, error=error, chcl=check_homework_wait(lesson_id, course_id))
def add_course(): error = None name = '' text = '' price = '' if not check_rights('add_course'): return redirect(url_for('subscript')) else: all_ways = g.db.query(Direction).all() if request.method == 'POST': name = request.form.get('name') text = request.form.get('text') direction_name = request.form.get('direction_name') price = request.form.get('price') infinity = request.form.get('infinity') if 5 > len(name) > 100: error = 'Название курса не должно быть меньше 5 и более 100 символов' return render_template('add_course.html', error=error, name=name, text=text, price=price, all_ways=all_ways) if text == '' or text is None: error = 'Описание курса не введено' return render_template('add_course.html', error=error, name=name, text=text, price=price, all_ways=all_ways) if direction_name == '' or direction_name is None: error = 'Напаравление не выбранно' return render_template('add_course.html', error=error, name=name, text=text, price=price, all_ways=all_ways) if re.search(r'^[0-9]{1,10}$', price) is None: error = 'Цена была введена не коректно' return render_template('add_course.html', error=error, name=name, text=text, price=price, all_ways=all_ways) if infinity == '1': infinity = True else: infinity = False new_course = Course(name=name, text=text, direction_name=direction_name, price=int(price), infinity=infinity, user_id_course=current_user) g.db.add(new_course) g.db.commit() dic_key = copy.copy(current_user.sub_course) or {} dic_key[new_course.id] = [ datetime.datetime.now(), (datetime.datetime.now() + datetime.timedelta(days=999999)) ] current_user.sub_course = dic_key set_f = copy.copy(current_user.follow) set_f.append(int(new_course.id)) current_user.follow = set_f g.db.commit() return redirect(url_for('cur_course', course_id=new_course.id)) return render_template('add_course.html', error=error, name=name, text=text, price=price, all_ways=all_ways)
def buy_course(id_course=None): error = None month = None cur_buy_course = Course.get_cours(id_course) if cur_buy_course is None: return redirect(url_for('course')) else: if request.method == 'POST': # prime peremen's check_user_sub_course = current_user.sub_course.get( cur_buy_course.id) setting = g.db.query(Setting).filter(Setting.id == 1).first() set_f = copy.copy(current_user.follow) # admin = g.db.query(User).filter(User.id == 1).first() # admin_course = g.db.query(User).filter(and_(User.id == cur_buy_course.user_id, User.ban == 0)).first() if cur_buy_course.infinity: if current_user.user_balance() < cur_buy_course.price: error = 'У вас не достаточно средств' return render_template('buy_course.html', error=error, cur_buy_course=cur_buy_course, month=month or '') if check_user_sub_course is None: dic_key = copy.copy(current_user.sub_course) or {} dic_key[cur_buy_course.id] = [ datetime.datetime.now(), (datetime.datetime.now() + datetime.timedelta(days=999999)) ] current_user.sub_course = dic_key new_trans = Transaction( transect_user_id=current_user, text='Приобретена пожизненая подписка %s' % cur_buy_course.name, price=-cur_buy_course.price) new_user_to_list = List(user_to_list=current_user, lessons_number=1, user_to_course_list=cur_buy_course) new_trans_admin = Transaction( transect_user_id=User.get_user(1), text='Коммисия с приобритения курса %s' % cur_buy_course.name, price=cur_buy_course.price * (setting.commission / 100)) new_trans_direc = Transaction( transect_user_id=User.get_user(cur_buy_course.user_id), text='%s купил курс %s на всегда' % (current_user.login, cur_buy_course.name), price=cur_buy_course.price - (cur_buy_course.price * (setting.commission / 100))) if set_f.count(int(cur_buy_course.id)) == 0: set_f.append(int(cur_buy_course.id)) current_user.follow = set_f g.db.add(new_trans, new_user_to_list) g.db.add(new_trans_admin, new_trans_direc) g.db.commit() return redirect( url_for('cur_course', course_id=cur_buy_course.id)) else: error = 'У вас уже куплен этот пожизненый курс' return render_template('buy_course.html', error=error, cur_buy_course=cur_buy_course, month=month or '') else: month = request.form.get('month') if re.search(r'^[0-9]{1,3}$', month) is None: error = 'Количество месяцев введено не верно' return render_template('buy_course.html', error=error, cur_buy_course=cur_buy_course, month=month or '') day = int(month) * 30.5 price_mount = cur_buy_course.price * int(month) if current_user.user_balance() < price_mount: error = 'У вас не достаточно средств' return render_template('buy_course.html', error=error, cur_buy_course=cur_buy_course, month=month or '') if check_user_sub_course is None: dic_key = copy.copy(current_user.sub_course) dic_key[cur_buy_course.id] = [ datetime.datetime.now(), (datetime.datetime.now() + datetime.timedelta(days=day)) ] current_user.sub_course = dic_key new_trans = Transaction( transect_user_id=current_user, text='Приобрёл подписка %s на %s месяц' % (cur_buy_course.name, month), price=-price_mount) new_user_to_list = List(user_to_list=current_user, lessons_number=1, user_to_course_list=cur_buy_course) new_trans_director = Transaction( transect_user_id=User.get_user(cur_buy_course.user_id), text='%s приобрёл подписку на курс %s на %s' % (current_user.login, cur_buy_course.name, month), price=price_mount - (price_mount * (setting.commission / 100))) new_trans_admin = Transaction( transect_user_id=User.get_user(1), text='Процент от курса %s ' % cur_buy_course.name, price=price_mount * (setting.commission / 100)) if set_f.count(int(cur_buy_course.id)) == 0: set_f.append(int(cur_buy_course.id)) current_user.follow = set_f g.db.add(new_trans, new_trans_director) g.db.add(new_trans_admin, new_user_to_list) g.db.commit() return redirect( url_for('cur_course', course_id=cur_buy_course.id)) else: dic_key = copy.copy(current_user.sub_course) or {} dic_key.update([ cur_buy_course.id, [ datetime.datetime.now(), (check_user_sub_course[1] + datetime.timedelta(days=day)) ] ]) current_user.sub_course = dic_key new_trans = Transaction( transect_user_id=current_user, text='Продлил подписка %s на %s месяц' % (cur_buy_course.name, month), price=-price_mount) new_trans_director = Transaction( transect_user_id=User.get_user(cur_buy_course.user_id), text='%s продлил подписку на курс %s на %s' % (current_user.login, cur_buy_course.name, month), price=price_mount - (price_mount * (setting.commission / 100))) new_trans_admin = Transaction( transect_user_id=User.get_user(1), text='Процент от курса %s' % cur_buy_course.name, price=price_mount * (setting.commission / 100)) g.db.add(new_trans, new_trans_director) g.db.add(new_trans_admin) g.db.commit() return redirect( url_for('cur_course', course_id=cur_buy_course.id)) return render_template('buy_course.html', error=error, cur_buy_course=cur_buy_course, month=month or '')