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})
Beispiel #2
0
 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()})
Beispiel #4
0
    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})
Beispiel #7
0
    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')
Beispiel #8
0
    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})
Beispiel #10
0
 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})
Beispiel #11
0
    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)
Beispiel #12
0
    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)