Пример #1
0
def quest_edit(request, id=None):
    if id is not None:
        quest = get_object_or_404(Quest, pk=id)
    else:
        quest = None

    form = QuestCpanel(instance=quest)
    form.fields['questions'].queryset = get_questions_with_category(
        'quest').order_by('-id')

    if request.method == 'POST':
        form = QuestCpanel(request.POST, instance=quest)
        form.fields['questions'].queryset = get_questions_with_category(
            'quest').order_by('-id')
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(
                reverse('wouso.games.quest.cpanel.quest_home'))

    return render_to_response('quest/cpanel_quest_edit.html', {
        'quest': quest,
        'form': form,
        'module': 'quest'
    },
                              context_instance=RequestContext(request))
Пример #2
0
    def create(user_from, user_to, ignore_questions = False):
        """ Assigns questions, and returns the number of assigned q """

        questions = [q for q in get_questions_with_category('challenge')]
        if (len(questions) < 5) and not ignore_questions:
            raise ChallengeException('Too few questions')
        shuffle(questions)

        uf, ut = Participant(user=user_from), Participant(user=user_to)
        uf.save(), ut.save()

        c = Challenge(user_from=uf, user_to=ut, date=datetime.now())
        c.save()

        # TODO: better question selection
        #limit = 5
        for q in questions[:Challenge.LIMIT]:
            c.questions.add(q)

        # set last_launched
        user_from.last_launched = datetime.now()
        user_from.save()

        # take 3 points from user_from
        scoring.score(user_from, ChallengeGame, 'chall-warranty', external_id=c.id)
        return c
Пример #3
0
def qpool_home(request, cat=None, page=u'1'):
    if cat is None:
        cat = 'qotd'

    questions = get_questions_with_category(str(cat), active_only=False, endorsed_only=False)
    if cat == 'qotd':
        questions = questions.order_by('schedule__day')

    tags = Tag.objects.all().exclude(name__in=['qotd', 'challenge', 'quest'])
    form = TagsForm(tags=tags)

    paginator = Paginator(questions, 15)
    try:
        q_page = paginator.page(page)
    except (EmptyPage, InvalidPage):
        q_page = paginator.page(paginator.num_pages)

    return render_to_response('cpanel/qpool_home.html',
                              {'q_page': q_page,
                               'categs': CATEGORIES,
                               'cat': cat,
                               'form': form,
                               'module': 'qpool',
                               'tags': len(tags),
                               'today': str(datetime.date.today())},
                              context_instance=RequestContext(request))
Пример #4
0
    def create(user_from, user_to, ignore_questions = False):
        """ Assigns questions, and returns the number of assigned q """

        questions = [q for q in get_questions_with_category('challenge')]
        if (len(questions) < 5) and not ignore_questions:
            raise ChallengeException('Too few questions')
        shuffle(questions)

        uf, ut = Participant(user=user_from), Participant(user=user_to)
        uf.save(), ut.save()

        c = Challenge(user_from=uf, user_to=ut, date=datetime.now())
        c.save()

        # TODO: better question selection
        #limit = 5
        for q in questions[:Challenge.LIMIT]:
            c.questions.add(q)

        # set last_launched
        user_from.last_launched = datetime.now()
        user_from.save()

        # take 3 points from user_from
        scoring.score(user_from, ChallengeGame, 'chall-warranty', external_id=c.id)
        return c
Пример #5
0
def qpool_home(request, cat=None, page=u'1'):
    if cat is None:
        cat = 'qotd'

    questions = get_questions_with_category(str(cat),
                                            active_only=False,
                                            endorsed_only=False)
    if cat == 'qotd':
        questions = questions.order_by('schedule__day')

    tags = Tag.objects.all().exclude(name__in=['qotd', 'challenge', 'quest'])
    form = TagsForm(tags=tags)

    paginator = Paginator(questions, 15)
    try:
        q_page = paginator.page(page)
    except (EmptyPage, InvalidPage):
        q_page = paginator.page(paginator.num_pages)

    return render_to_response('cpanel/qpool_home.html', {
        'q_page': q_page,
        'categs': CATEGORIES,
        'cat': cat,
        'form': form,
        'module': 'qpool',
        'tags': len(tags),
        'today': str(datetime.date.today())
    },
                              context_instance=RequestContext(request))
Пример #6
0
def quest_edit(request, id=None):
    if id is not None:
        quest = get_object_or_404(Quest, pk=id)
    else:
        quest = None

    form = QuestCpanel(instance=quest)
    form.fields['questions'].queryset = get_questions_with_category('quest').order_by('-id')

    if request.method == 'POST':
        form = QuestCpanel(request.POST, instance=quest)
        form.fields['questions'].queryset = get_questions_with_category('quest').order_by('-id')
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('wouso.games.quest.cpanel.quest_home'))

    return render_to_response('quest/cpanel_quest_edit.html',
                              {'quest': quest,
                               'form': form,
                               'module': 'quest'},
                              context_instance=RequestContext(request))
Пример #7
0
    def create(cls, user_from, user_to, ignore_questions=False):
        """ Assigns questions, and returns the number of assigned q """
        questions = [q for q in get_questions_with_category('challenge')]
        if (len(questions) < cls.LIMIT) and not ignore_questions:
            raise ChallengeException('Too few questions')
        shuffle(questions)

        questions_qs = questions[:cls.LIMIT]
        challenge = cls.create_custom(user_from, user_to, questions_qs)

        # set last_launched
        user_from = user_from.get_extension(ChallengeUser)
        user_from.set_last_launched(datetime.now())

        return challenge
Пример #8
0
    def create(cls, user_from, user_to, ignore_questions=False):
        """ Assigns questions, and returns the number of assigned q """
        questions = [q for q in get_questions_with_category('challenge')]
        if (len(questions) < cls.LIMIT) and not ignore_questions:
            raise ChallengeException('Too few questions')
        shuffle(questions)

        questions_qs = questions[:cls.LIMIT]
        challenge = cls.create_custom(user_from, user_to, questions_qs)

        # set last_launched
        user_from = user_from.get_extension(ChallengeUser)
        user_from.set_last_launched(datetime.now())

        return challenge
Пример #9
0
def qpool_home(request, cat='qotd', page=u'1', tag=None):
    categories = Category.objects.all()

    qs = get_questions_with_category(str(cat), active_only=False,
                                     endorsed_only=False)
    if tag:
        tag = get_object_or_404(Tag, pk=tag, category__name=cat)
        qs = qs.filter(tags=tag)

    if request.GET.get('q'):
        # This is a search query
        query = request.GET.get('q')
        qs = qs.filter(text__icontains=query)
    else:
        query = ''

    category = get_object_or_404(Category, name=cat)
    session_filter_name = 'tag_filters_%s' % category.name
    tag_filters = request.session.get(session_filter_name, [])
    if request.GET.get('addtagfilter'):
        tag = get_object_or_404(Tag, pk=request.GET.get('addtagfilter'))
        tag_filters.append(tag.id)
    if request.GET.get('remtagfilter'):
        tag = get_object_or_404(Tag, pk=request.GET.get('remtagfilter'))
        if tag.id in tag_filters:
            tag_filters.remove(tag.id)
    request.session[session_filter_name] = tag_filters
    if tag_filters:
        qs = qs.filter(tags__in=tag_filters)

    prop_filter_name = 'prop_filters_%s' % category.name
    prop_filters = request.session.get(prop_filter_name, [])
    if request.GET.get('addpropfilter'):
        prop_filters.append(request.GET.get('addpropfilter'))
    if request.GET.get('rempropfilter'):
        f = request.GET.get('rempropfilter')
        if f in prop_filters:
            prop_filters.remove(f)
    request.session[prop_filter_name] = prop_filters
    if 'active' in prop_filters:
        qs = qs.filter(active=True)

    # Ordering
    if cat == 'qotd':
        qs = qs.order_by('schedule__day')

    # Pagination
    perpage = request.session.get('qpool_perpage', 15)
    if request.GET.get('changeperpage'):
        perpage = int(request.GET.get('changeperpage'))
    request.session['qpool_perpage'] = perpage
    paginator = Paginator(qs, perpage)
    try:
        q_page = paginator.page(page)
    except (EmptyPage, InvalidPage):
        q_page = paginator.page(paginator.num_pages)

    return render_to_response('cpanel/qpool_home.html',
                              {'q_page': q_page,
                               'categs': categories,
                               'category': category,
                               'tag_filters': tag_filters,
                               'prop_filters': prop_filters,
                               'cat': cat,
                               'search_query': query,
                               'perpage_options': (15, 50, 100),
                               'module': 'qpool',
                               'today': str(datetime.date.today())},
                              context_instance=RequestContext(request))