def edit_questionnaire(): user = auth.get_logged_in_user() questionnaire_id = request.form['id'] name = request.form.get('name') category_id = request.form.get('category_id') public_id = request.form.get('public_id') qaires = Questionnaire.select().join(Category).where(Category.teacher == user).where(Questionnaire.id == questionnaire_id) for qaire in qaires: if category_id: categs = Category.select().where(Category.teacher == user).where(Category.id == category_id) for categ in categs: qaire.category = categ break else: return response_error('category_not_found') if public_id: qaires2 = Questionnaire.select().where(Questionnaire.public_id == public_id) for qaire2 in qaires2: return response_error('public_id_already_exists') qaire.public_id = public_id if name: qaire.name = name qaire.save() return response_success() return response_error('questionnaire_not_found')
def show_questions(qaire_id): user = auth.get_logged_in_user() qaires = Questionnaire.select().join(Category).where(Questionnaire.public_id == qaire_id).where(Category.teacher == user) ret = {} for qaire in qaires: category = Category.select().join(Questionnaire).where(Questionnaire.id == qaire.id) questions = Question.select().join(Questionnaire).where(Questionnaire.id == qaire.id) catname = '' for cat in category: catname = cat.name break ret = {'id': qaire.id, 'public_id': qaire.public_id, 'name': qaire.name, 'category': catname, 'questions' : []} for qion in questions: qtype = qtype2str(qion.typ) ret['questions'].append({'id': qion.id, 'type': qion.typ, 'description': qion.description, 'presented': qion.presented}) if qtype == 'single' or qtype == 'multi': ret['questions'][-1]['options'] = [] options = Option.select().join(Question).where(Question.id == qion.id) for opt in options: ret['questions'][-1]['options'].append({'id': opt.id, 'text': opt.text}) return json.dumps(ret)
def new_question(): user = auth.get_logged_in_user() description = request.form['description'] typ = request.form['type'] presented = request.form.get('presented', False) public_id = request.form['public_id'] options = request.form.getlist('options[]') try: # Find questionnaire qaire = Questionnaire.select().join(Category).where(Category.teacher == user).where(Questionnaire.public_id == public_id).get() # Create question if qtype2str(typ) is None: return response_error('unknown_question_type') question = Question.create(description=description, typ=typ, presented=presented, questionnaire=qaire) # Create option for option_text in options: option = Option.create(question=question, text=option_text) ret = response_success(False) ret['question_id'] = question.id return json.dumps(ret) except Questionnaire.DoesNotExist: return response_error('public_id_not_found')
def new_questionnaire(): user = auth.get_logged_in_user() name = request.form['name'] category_id = request.form['category_id'] public_id = request.form.get('public_id') if not public_id: public_id = public_id_from_name(name) ret = {} cats = Category.select().where(Category.teacher == user).where(Category.id == category_id) category = None for cat in cats: category = cat break if not category: return response_error('category_not_found') questionnaire = Questionnaire.create(name=name, public_id=public_id, category=category) if not questionnaire: return response_error('already_exists') ret = response_success(False) ret['public_id'] = public_id ret['id'] = questionnaire.id return json.dumps(ret)
def new_questionnaire(): user = auth.get_logged_in_user() name = request.form['name'] category_id = request.form['category_id'] public_id = request.form.get('public_id') if not public_id: public_id = public_id_from_name(name) ret = {} cats = Category.select().where(Category.teacher == user).where( Category.id == category_id) category = None for cat in cats: category = cat break if not category: return response_error('category_not_found') questionnaire = Questionnaire.create(name=name, public_id=public_id, category=category) if not questionnaire: return response_error('already_exists') ret = response_success(False) ret['public_id'] = public_id ret['id'] = questionnaire.id return json.dumps(ret)
def show(qaire_id): qaires = Questionnaire.select().where(Questionnaire.public_id == qaire_id) ret = {} for qaire in qaires: category = Category.select().join(Questionnaire).where(Questionnaire.id == qaire.id) questions = Question.select().join(Questionnaire).where(Questionnaire.id == qaire.id) catname = '' for cat in category: catname = cat.name break ret = {'id': qaire.id, 'public_id': qaire.public_id, 'name': qaire.name, 'category': catname, 'questions' : [], 'category_name': category.get().name} for qion in questions: qtype = qtype2str(qion.typ) ret['questions'].append({'id': qion.id, 'type': qion.typ, 'description': qion.description}) if qtype == 'single' or qtype == 'multi': ret['questions'][-1]['options'] = [] options = Option.select().join(Question).where(Question.id == qion.id) for opt in options: ret['questions'][-1]['options'].append({'id': opt.id, 'text': opt.text}) if not ret: ret = response_error('not_found', False) return json.dumps(ret)
def new_question(): user = auth.get_logged_in_user() description = request.form['description'] typ = request.form['type'] presented = request.form.get('presented', False) public_id = request.form['public_id'] options = request.form.getlist('options[]') try: # Find questionnaire qaire = Questionnaire.select().join(Category).where( Category.teacher == user).where( Questionnaire.public_id == public_id).get() # Create question if qtype2str(typ) is None: return response_error('unknown_question_type') question = Question.create(description=description, typ=typ, presented=presented, questionnaire=qaire) # Create option for option_text in options: option = Option.create(question=question, text=option_text) ret = response_success(False) ret['question_id'] = question.id return json.dumps(ret) except Questionnaire.DoesNotExist: return response_error('public_id_not_found')
def random_public_id(): while True: pubid = "".join([random.choice(string.ascii_letters + string.digits) for n in xrange(16)]) qions = Questionnaire.select().where(Questionnaire.public_id == pubid) for qion in qions: break else: return pubid
def public_id_from_name(name): name = unidecode.unidecode(name).lower() pubid = re.sub(r'\W+','-', name) while True: count = Questionnaire.select().where(Questionnaire.public_id == pubid).count() if count == 0: return pubid else: pubid = "%s-1" % pubid
def public_id_from_name(name): name = unidecode.unidecode(name).lower() pubid = re.sub(r'\W+', '-', name) while True: count = Questionnaire.select().where( Questionnaire.public_id == pubid).count() if count == 0: return pubid else: pubid = "%s-1" % pubid
def show_qaires(): user = auth.get_logged_in_user() cats = Category.select().join(Teacher).where(Teacher.id == user.id) ret = [] for c in cats: ret.append({'id': c.id, 'category': c.name, 'questionnaires': []}) qaires = Questionnaire.select().join(Category).where(Category.id == c.id) for q in qaires: ret[-1]['questionnaires'].append({'id': q.id, 'name': q.name, 'public_id': q.public_id}) return json.dumps(ret)
def remove_questionnaire(): user = auth.get_logged_in_user() questionnaire_id = request.form['id'] qaires = Questionnaire.select().join(Category).where(Category.teacher == user).where(Questionnaire.id == questionnaire_id) for qaire in qaires: qaire.delete_instance(recursive=True, delete_nullable=True) return response_success() return response_error('questionnaire_not_found')
def random_public_id(): while True: pubid = "".join([ random.choice(string.ascii_letters + string.digits) for n in xrange(16) ]) qions = Questionnaire.select().where(Questionnaire.public_id == pubid) for qion in qions: break else: return pubid
def submit_comment(): student = get_current_student() qaire_id = request.form['qaire_id'] body = request.form['body'] qaires = Questionnaire.select().where(Questionnaire.id == qaire_id) for qaire in qaires: Comment.create(author=student.name, body=body, questionnaire=qaire, datetime=datetime.datetime.now()) return response_success() return response_error('questionnaire_not_found')
def submit_comment(): student = get_current_student() qaire_id = request.form["qaire_id"] body = request.form["body"] qaires = Questionnaire.select().where(Questionnaire.id == qaire_id) for qaire in qaires: Comment.create(author=student.name, body=body, questionnaire=qaire, datetime=datetime.datetime.now()) return response_success() return response_error("questionnaire_not_found")
def remove_questionnaire(): user = auth.get_logged_in_user() questionnaire_id = request.form['id'] qaires = Questionnaire.select().join(Category).where( Category.teacher == user).where(Questionnaire.id == questionnaire_id) for qaire in qaires: qaire.delete_instance(recursive=True, delete_nullable=True) return response_success() return response_error('questionnaire_not_found')
def student_ping(qid): """Updates user last ping timestamp and returns current question""" # Get models student = get_student() questionnaire = Questionnaire.select().where(Questionnaire.public_id == qid).get() # Update presence StudentPresence.update_latest(student, questionnaire) # Get current question question = questionnaire.presented_question() return json.dumps({'presented_question': question.id})
def edit_questionnaire(): user = auth.get_logged_in_user() questionnaire_id = request.form['id'] name = request.form.get('name') category_id = request.form.get('category_id') public_id = request.form.get('public_id') qaires = Questionnaire.select().join(Category).where( Category.teacher == user).where(Questionnaire.id == questionnaire_id) for qaire in qaires: if category_id: categs = Category.select().where(Category.teacher == user).where( Category.id == category_id) for categ in categs: qaire.category = categ break else: return response_error('category_not_found') if public_id: qaires2 = Questionnaire.select().where( Questionnaire.public_id == public_id) for qaire2 in qaires2: return response_error('public_id_already_exists') qaire.public_id = public_id if name: qaire.name = name qaire.save() return response_success() return response_error('questionnaire_not_found')
def show_questions(qaire_id): user = auth.get_logged_in_user() qaires = Questionnaire.select().join(Category).where( Questionnaire.public_id == qaire_id).where(Category.teacher == user) ret = {} for qaire in qaires: category = Category.select().join(Questionnaire).where( Questionnaire.id == qaire.id) questions = Question.select().join(Questionnaire).where( Questionnaire.id == qaire.id) catname = '' for cat in category: catname = cat.name break ret = { 'id': qaire.id, 'public_id': qaire.public_id, 'name': qaire.name, 'category': catname, 'questions': [] } for qion in questions: qtype = qtype2str(qion.typ) ret['questions'].append({ 'id': qion.id, 'type': qion.typ, 'description': qion.description, 'presented': qion.presented }) if qtype == 'single' or qtype == 'multi': ret['questions'][-1]['options'] = [] options = Option.select().join(Question).where( Question.id == qion.id) for opt in options: ret['questions'][-1]['options'].append({ 'id': opt.id, 'text': opt.text }) return json.dumps(ret)
def edit_question(): user = auth.get_logged_in_user() question_id = request.form['id'] description = request.form.get('description') typ = request.form.get('type') presented = request.form.get('presented') public_id = request.form.get('public_id') ret = {} qions = Question.select().join(Questionnaire).join(Category).where( Category.teacher == user).where(Question.id == question_id) for qion in qions: if description is not None: qion.description = description if typ: if not qtype2str(typ): return response_error('unknown_question_type') qion.typ = typ if presented is not None: qion.presented = presented if public_id: qaires = Questionnaire.select().join(Category).where( Category.teacher == user).where( Questionnaire.public_id == public_id) for qaire in qaires: qion.public_id = public_id break else: return response_error('public_id_not_found') qion.save() if typ and qtype2str(qion.typ) == 'text': # Delete options when changing type to 'text'. opts = Option.select().where(Option.question == qion) for opt in opts: opt.delete_instance(recursive=True, delete_nullable=True) return response_success() return response_error('question_not_found')
def show_qaires(): user = auth.get_logged_in_user() cats = Category.select().join(Teacher).where(Teacher.id == user.id) ret = [] for c in cats: ret.append({'id': c.id, 'category': c.name, 'questionnaires': []}) qaires = Questionnaire.select().join(Category).where( Category.id == c.id) for q in qaires: ret[-1]['questionnaires'].append({ 'id': q.id, 'name': q.name, 'public_id': q.public_id }) return json.dumps(ret)
def edit_question(): user = auth.get_logged_in_user() question_id = request.form['id'] description = request.form.get('description') typ = request.form.get('type') presented = request.form.get('presented') public_id = request.form.get('public_id') ret = {} qions = Question.select().join(Questionnaire).join(Category).where(Category.teacher == user).where(Question.id == question_id) for qion in qions: if description is not None: qion.description = description if typ: if not qtype2str(typ): return response_error('unknown_question_type') qion.typ = typ if presented is not None: qion.presented = presented if public_id: qaires = Questionnaire.select().join(Category).where(Category.teacher == user).where(Questionnaire.public_id == public_id) for qaire in qaires: qion.public_id = public_id break else: return response_error('public_id_not_found') qion.save() if typ and qtype2str(qion.typ) == 'text': # Delete options when changing type to 'text'. opts = Option.select().where(Option.question == qion) for opt in opts: opt.delete_instance(recursive=True, delete_nullable=True) return response_success() return response_error('question_not_found')
def get_rating(): qaire_id = request.form['qaire_id'] qaires = Questionnaire.select().where(Questionnaire.id == qaire_id) for qaire in qaires: ratings = Rating.select(Rating, fn.Count(Rating.id).alias('count')).where(Rating.questionnaire == qaire).group_by(Rating.like) ret = {'likes': 0, 'dislikes': 0} for rating in ratings: if rating.like: ret['likes'] = rating.count else: ret['dislikes'] = rating.count return json.dumps(ret) return response_error('questionnaire_not_found')
def presentation_status(qid): """ For a questionnaire, returns number of connected users and the question that is currently presented. """ # TODO: For now we'll just return status for questionnaire # In the future, we'll want to check which questionnaire is being presented # by user, and return info for that questionnaire try: questionnaire = Questionnaire.get(Questionnaire.public_id == qid) except Questionnaire.DoesNotExist: return response_error('not_found') count = StudentPresence.count_active(questionnaire) question = questionnaire.presented_question() questionData = question.as_json() if question else None return json.dumps({'student_count': count, 'presented_question': questionData})
def get_rating(): qaire_id = request.form['qaire_id'] qaires = Questionnaire.select().where(Questionnaire.id == qaire_id) for qaire in qaires: ratings = Rating.select(Rating, fn.Count(Rating.id).alias('count')).where( Rating.questionnaire == qaire).group_by( Rating.like) ret = {'likes': 0, 'dislikes': 0} for rating in ratings: if rating.like: ret['likes'] = rating.count else: ret['dislikes'] = rating.count return json.dumps(ret) return response_error('questionnaire_not_found')
def presentation_status(qid): """ For a questionnaire, returns number of connected users and the question that is currently presented. """ # TODO: For now we'll just return status for questionnaire # In the future, we'll want to check which questionnaire is being presented # by user, and return info for that questionnaire try: questionnaire = Questionnaire.get(Questionnaire.public_id == qid) except Questionnaire.DoesNotExist: return response_error('not_found') count = StudentPresence.count_active(questionnaire) question = questionnaire.presented_question() questionData = question.as_json() if question else None return json.dumps({ 'student_count': count, 'presented_question': questionData })
def submit_rating(): student = get_current_student() qaire_id = request.form['qaire_id'] like = request.form['like'] qaires = Questionnaire.select().where(Questionnaire.id == qaire_id) for qaire in qaires: ratings = Rating.select().where(Rating.student == student).where(Rating.questionnaire == qaire) for rating in ratings: return response_error('already_rated') if like == "1" or like == "true": like = True else: like = False Rating.create(like=like, student=student, questionnaire=qaire) return response_success() return response_error('questionnaire_not_found')