views.py 6.09 KB
# -*- coding:utf-8 -*-

from django.conf import settings
from django.utils.translation import ugettext as _

from haystack.views import SearchView

#from proxy.trac.models import Attachment


class ColabSearchView(SearchView):
    def extra_context(self, *args, **kwargs):

        use_language, date_format = settings.DJANGO_DATE_FORMAT_TO_JS.get(
            self.request.LANGUAGE_CODE, (None, None)
        )

        types = {
            'thread': {
                'name': _(u'Discussion'),
                'fields': (
                    ('author', _(u'Author'), self.request.GET.get('author')),
                    (
                        'list',
                        _(u'Mailinglist'),
                        self.request.GET.getlist('list')
                    ),
                ),
            },
        }
        # TODO: Replace for a more generic plugin architecture
        #if settings.TRAC_ENABLED:
        #    types['wiki'] = {
        #        'name': _(u'Wiki'),
        #        'fields': (
        #            ('author', _(u'Author'), self.request.GET.get('author')),
        #            (
        #                'collaborators',
        #                _(u'Collaborators'),
        #                self.request.GET.get('collaborators'),
        #            ),
        #        ),
        #    }

        #    types['ticket'] = {
        #        'name': _(u'Ticket'),
        #        'fields': (
        #            (
        #                'milestone',
        #                _(u'Milestone'),
        #                self.request.GET.get('milestone')
        #            ),
        #            (
        #                'priority',
        #                _(u'Priority'),
        #                self.request.GET.get('priority')
        #            ),
        #            (
        #                'component',
        #                _(u'Component'),
        #                self.request.GET.get('component')
        #            ),
        #            (
        #                'severity',
        #                _(u'Severity'),
        #                self.request.GET.get('severity')
        #            ),
        #            (
        #                'reporter',
        #                _(u'Reporter'),
        #                self.request.GET.get('reporter')
        #            ),
        #            ('author', _(u'Author'), self.request.GET.get('author')),
        #            ('tag', _(u'Status'), self.request.GET.get('tag')),
        #            (
        #                'keywords',
        #                _(u'Keywords'),
        #                self.request.GET.get('keywords'),
        #            ),
        #            (
        #                'collaborators',
        #                _(u'Collaborators'),
        #                self.request.GET.get('collaborators')
        #            ),
        #        ),
        #    }

        #    types['changeset'] = {
        #        'name': _(u'Changeset'),
        #        'fields': (
        #            ('author', _(u'Author'), self.request.GET.get('author')),
        #            (
        #                'repository_name',
        #                _(u'Repository'),
        #                self.request.GET.get('repository_name'),
        #            ),
        #        )
        #    }

        #    types['user'] = {
        #        'name': _(u'User'),
        #        'fields': (
        #            (
        #                'username',
        #                _(u'Username'),
        #                self.request.GET.get('username'),
        #            ),
        #            ('name', _(u'Name'), self.request.GET.get('name')),
        #            (
        #                'institution',
        #                _(u'Institution'),
        #                self.request.GET.get('institution'),
        #            ),
        #            ('role', _(u'Role'), self.request.GET.get('role'))
        #        ),
        #    }

        #    types['attachment'] = {
        #        'name': _(u'Attachment'),
        #        'fields': (
        #            (
        #                'filename',
        #                _(u'Filename'),
        #                self.request.GET.get('filename')
        #            ),
        #            ('author', _(u'Author'), self.request.GET.get('author')),
        #            (
        #                'used_by',
        #                _(u'Used by'), self.request.GET.get('used_by')),
        #            (
        #                'mimetype',
        #                _(u'File type'),
        #                self.request.GET.get('mimetype')
        #            ),
        #            ('size', _(u'Size'), self.request.GET.get('size')),
        #        )
        #    }

        try:
            type_chosen = self.form.cleaned_data.get('type')
        except AttributeError:
            type_chosen = ''

        mimetype_choices = ()
        size_choices = ()
        used_by_choices = ()

        if type_chosen == 'attachment':
            mimetype_choices = [(type_, display) for type_, display, mimelist_ in settings.FILE_TYPE_GROUPINGS]
            size_choices = [
                ('<500KB', u'< 500 KB'),
                ('500KB__10MB', u'>= 500 KB <= 10 MB'),
                ('>10MB', u'> 10 MB'),
            ]
            used_by_choices = set([
                (v, v) for v in Attachment.objects.values_list(
                'used_by', flat=True)
            ])

        mimetype_chosen = self.request.GET.get('mimetype')
        size_chosen = self.request.GET.get('size')
        used_by_chosen = self.request.GET.get('used_by')

        return dict(
            filters=types.get(type_chosen),
            type_chosen=type_chosen,
            order_data=settings.ORDERING_DATA,
            date_format=date_format,
            use_language=use_language,
            mimetype_chosen=mimetype_chosen if mimetype_chosen else '',
            mimetype_choices=mimetype_choices,
            size_chosen=size_chosen if size_chosen else '',
            size_choices=size_choices,
            used_by_chosen=used_by_chosen if used_by_chosen else '',
            used_by_choices=used_by_choices,
        )