def edit_question(q_id, question, activate): if question != None: escaped_question = escape(question) Question.by_id(q_id).question = question else: escaped_question = None Question.by_id(q_id).available = activate return json.dumps({"id":q_id,"text":escaped_question,"available":activate})
def renderanswerform(): try: questionid = int(request.values['question_id']) question = Question.by_id(questionid) except: return abort(404) return render_template('student_answer.html', question = question)
def delete_question(qid): question = Question.by_id(int(qid)) if g.lti.is_instructor(): session.delete(question) session.commit() return json.dumps({'deleted': g.lti.is_instructor()})
def edit_question(q_id, question, time): """Updates a question with given contents and activation status.""" if g.lti.is_instructor(): if question is None: escaped_question = None else: escaped_question = escape(question) escaped_time = escape(time) q = Question.by_id(q_id) q.question = escaped_question q.time = int(time) activate = q.answerable session.add(q) session.commit() return json.dumps({"id": q_id, "text": escaped_question, "answerable": activate, "time":time, "check": g.lti.is_instructor()}) else: return json.dumps({"id": q_id, "text": question, "answerable": activate, "time": time, "check": g.lti.is_instructor()})
def delete_question(qid): '''removes the question with the provided id from the database''' question = Question.by_id(int(qid)) if g.lti.is_instructor(): session.delete(question) session.commit() return json.dumps({'deleted': g.lti.is_instructor()})
def toggle_options(args): try: type = args['type'] except KeyError: return question = Question.by_id(args['id']) if question is None: return if not g.lti.is_instructor() and type != 'Reviewable': return if question.state == 'Answerable' and (type == 'Inactive' or type == 'Reviewable' or type == 'Archived'): AnswerModel.update_q_history(args['id']) rv = None if type == 'Inactive': rv = question.inactive = True question.answerable = question.reviewable = question.closed = False question.state = 'Inactive' if type == 'Answerable': rv = question.answerable = True question.activate_time = datetime.now() question.inactive = question.reviewable = question.closed = False question.state = 'Answerable' elif type == 'Reviewable': if not question.reviewable: Scheduler(args['id']) question.reviewable = True rv = question.reviewable question.inactive = question.answerable = question.closed = False question.state = 'Reviewable' elif type == 'Closed': rv = question.closed = True question.inactive = question.answerable = question.reviewable = False question.state = 'Closed' elif type == 'comments': rv = question.comment = not question.comment elif type == 'tags': rv = question.tags = not question.tags elif type == 'rating': rv = question.rating = not question.rating session.commit() return json.dumps({"toggle": rv, "check": True})
def save(): try: questionid = int(request.values['questionid']) question = Question.by_id(questionid) text = request.values['text'] userid = g.lti.get_user_id() except: return abort(404) if AnswerModel.question_valid(questionid) and text != "": AnswerModel.save(questionid, userid, text) return redirect('/index_student')
def delete_question(qid): '''removes the question with the provided id from the database''' question = Question.by_id(int(qid)) if g.lti.is_instructor(): session.delete(question) #Delete answers quid = {"questionID": int(qid)} answers = AnswerModel.get_filtered(**quid) for x in answers: session.delete(x) session.commit() return json.dumps({'deleted': g.lti.is_instructor()})
def get_remaining_time(q_id): question = Question.by_id(q_id) if question is not None and question.activate_time is not None: time_remaining = question.get_time_left() question_time = question.time else: time_remaining = 0 question_time = 0 return json.dumps({"still_answerable":((question is not None) and question.answerable), "time_remaining":time_remaining, "question_deleted":(question is None) or not question.answerable, "question_time":question_time})
def start_review(request): try: question_id = request.form['question_id'] except: return json.dumps({'Reviewable':False}) question = Question.by_id(question_id) reviewable = False if question is not None: if g.lti.is_instructor() or \ (question.get_time_left() <= 0 and question.time > 0): return QuestionController.toggle_options( {'id':question_id, 'type':'Reviewable'}) return json.dumps({'Reviewable':reviewable})
def review(): answer = Schedule.get_answer(g.lti.get_user_id()) if answer == None: return "No answers to review." fsession['reviewanswer'] = answer.id enabledtags = AnswerTag.get_tag_ids(answer.id) reviews = Review.get_list(answer.id) question = Question.by_id(answer.questionID) if question is None: return "Question was not found." return render_template('reviewanswer.html', answer=answer, tags=Tag.get_all(), enabledtags=enabledtags, reviews=reviews, question=question)
def availability(args): """ Handles availability via the question_list form """ try: type = args['type'] except KeyError: return question = Question.by_id(args['id']) if question is None: return if not g.lti.is_instructor() and type != 'reviewable': return rv = None if type == 'answerable': rv = question.answerable = not question.answerable question.activate_time = datetime.now() elif type == 'reviewable': if not question.reviewable: Scheduler(args['id']) question.reviewable = True rv = question.reviewable elif type == 'archived': rv = question.archived = not question.archived elif type == 'comments': rv = question.comment = not question.comment elif type == 'tags': rv = question.tags = not question.tags elif type == 'rating': rv = question.rating = not question.rating session.commit() return rv
def render(self): try: questionid = int(request.values['questionid']) answerid1 = int(request.values['answerid1']) answerid2 = int(request.values['answerid2']) except: return abort(404) try: question = Question.by_id(questionid) answer1 = AnswerModel.by_id(answerid1) answer2 = AnswerModel.by_id(answerid2) except: return abort(404) if AnswerModel.question_valid(questionid): return render_template('choice.html', question = question, answer1 = answer1, answer2 = answer2) else: return redirect('/choicelobby?question_id=' + questionid)