Ejemplo n.º 1
0
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')
Ejemplo n.º 2
0
Archivo: misc.py Proyecto: vojto/riddle
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)
Ejemplo n.º 3
0
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')
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
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)
Ejemplo n.º 7
0
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')
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
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
Ejemplo n.º 10
0
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
Ejemplo n.º 11
0
Archivo: misc.py Proyecto: vojto/riddle
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)
Ejemplo n.º 12
0
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')
Ejemplo n.º 13
0
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
Ejemplo n.º 14
0
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')
Ejemplo n.º 15
0
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")
Ejemplo n.º 16
0
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')
Ejemplo n.º 17
0
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})
Ejemplo n.º 18
0
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')
Ejemplo n.º 19
0
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)
Ejemplo n.º 20
0
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')
Ejemplo n.º 21
0
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)
Ejemplo n.º 22
0
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')
Ejemplo n.º 23
0
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')
Ejemplo n.º 24
0
Archivo: misc.py Proyecto: vojto/riddle
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})
Ejemplo n.º 25
0
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')
Ejemplo n.º 26
0
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
    })
Ejemplo n.º 27
0
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')