Esempio n. 1
0
def view(request):
    q = request.GET.get('q')

    if q is not None:
        q = split_tags(q)

    error = []
    tags = list(get_available_tags(q or []).values_list('name', flat=True))
    if q is not None:
        if not q:
            error.append('Navedite barem jednu oznaku!')
        elif len(tags) != len(q):
            diff = set([x.lower() for x in q]) - set([x.lower() for x in tags])
            error.append(u'Nepostojeć%s: %s!' % (
                u'a oznaka' if len(diff) == 1 else 'e oznake',
                u', '.join(diff),
            ))

    kwargs = dict(
        show_hidden = 'show_hidden' in request.GET,
        quality_min = request.GET.get('quality_min'),
        quality_max = request.GET.get('quality_max'),
        difficulty_min = request.GET.get('difficulty_min'),
        difficulty_max = request.GET.get('difficulty_max'),
    )

    groups_error = False
    if request.user.has_perm('advanced_search'):
        if request.GET.get('q') is not None:
            advanced_form = AdvancedSearchForm(request.GET, user=request.user)
            if advanced_form.is_valid():
                kwargs['groups'] = advanced_form.cleaned_data['groups']
            else:
                groups_error = True
        else:
            advanced_form = AdvancedSearchForm(user=request.user)
    else:
        advanced_form = None

    if not error:
        tasks = search_tasks(tags, user=request.user, **kwargs)
        if hasattr(tasks, 'select_related'):
            tasks = tasks.select_related('author', 'content')
    else:
        tasks = Task.objects.none()


    return render_to_response('search.html', {
        'advanced_form': advanced_form,
        'any': bool(request.GET),
        'errors': '<br>'.join(error),
        'form': SearchForm(request.GET),
        'groups_error': groups_error,
        'search_solved_count': bool(kwargs.get('groups')),
        'tasks': tasks,
        'tags': tags,
        }, context_instance=RequestContext(request))
Esempio n. 2
0
def show_news(context, div_class=None, title=None):
    news = search_tasks(['news'], user=context['user'], no_hidden_check=True)
    news = news.order_by('-id')

    return {
        'news': news,
        'div_class': div_class,
        'title': title,
        'user': context['user'],
    }
Esempio n. 3
0
 def assertSearchTask(self, query, results):
     self.assertEqual(set(search_tasks(query)), set(results))