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))
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
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))
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))
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))
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
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))