Commit 30321990 authored by Michal Čihař's avatar Michal Čihař

Remember changes filtering while browsing (fixes #264).

parent a1eda982
...@@ -26,6 +26,7 @@ from django.utils.translation import ugettext as _ ...@@ -26,6 +26,7 @@ from django.utils.translation import ugettext as _
from trans.models.changes import Change from trans.models.changes import Change
from trans.views.helper import get_project_translation from trans.views.helper import get_project_translation
from lang.models import Language from lang.models import Language
from urllib import urlencode
class ChangesView(ListView): class ChangesView(ListView):
...@@ -34,6 +35,14 @@ class ChangesView(ListView): ...@@ -34,6 +35,14 @@ class ChangesView(ListView):
''' '''
paginate_by = 20 paginate_by = 20
def __init__(self, **kwargs):
super(ChangesView, self).__init__(**kwargs)
self.project= None
self.subproject= None
self.translation = None
self.language = None
self.user = None
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
''' '''
Creates context for rendering page. Creates context for rendering page.
...@@ -42,34 +51,50 @@ class ChangesView(ListView): ...@@ -42,34 +51,50 @@ class ChangesView(ListView):
**kwargs **kwargs
) )
context['title'] = _('Changes') context['title'] = _('Changes')
url = {}
if self.translation is not None:
url['lang'] = self.translation.language.code
url['subproject'] = self.translation.subproject.slug
url['project'] = self.translation.subproject.project.slug
elif self.subproject is not None:
url['subproject'] = self.subproject.slug
url['project'] = self.subproject.project.slug
elif self.project is not None:
url['project'] = self.project.slug
if self.language is not None:
url['lang'] = self.language.code
if self.user is not None:
url['user'] = self.user.username
context['search_url'] = urlencode(url)
return context return context
def get_queryset(self): def get_queryset(self):
''' '''
Returns list of changes to browse. Returns list of changes to browse.
''' '''
project = None
subproject = None
translation = None
language = None
user = None
# Filtering by translation/project # Filtering by translation/project
if 'project' in self.request.GET: if 'project' in self.request.GET:
try: try:
project, subproject, translation = get_project_translation( self.project, self.subproject, self.translation = \
self.request, get_project_translation(
self.request.GET.get('project', None), self.request,
self.request.GET.get('subproject', None), self.request.GET.get('project', None),
self.request.GET.get('lang', None), self.request.GET.get('subproject', None),
) self.request.GET.get('lang', None),
)
except Http404: except Http404:
messages.error(self.request, _('Invalid search string!')) messages.error(self.request, _('Invalid search string!'))
# Filtering by language # Filtering by language
if translation is None and 'lang' in self.request.GET: if self.translation is None and 'lang' in self.request.GET:
try: try:
language = Language.objects.get( self.language = Language.objects.get(
code=self.request.GET['lang'] code=self.request.GET['lang']
) )
except Language.DoesNotExist: except Language.DoesNotExist:
...@@ -78,7 +103,7 @@ class ChangesView(ListView): ...@@ -78,7 +103,7 @@ class ChangesView(ListView):
# Filtering by user # Filtering by user
if 'user' in self.request.GET: if 'user' in self.request.GET:
try: try:
user = User.objects.get( self.user = User.objects.get(
username=self.request.GET['user'] username=self.request.GET['user']
) )
except User.DoesNotExist: except User.DoesNotExist:
...@@ -86,17 +111,27 @@ class ChangesView(ListView): ...@@ -86,17 +111,27 @@ class ChangesView(ListView):
result = Change.objects.all() result = Change.objects.all()
if translation is not None: if self.translation is not None:
result = result.filter(translation=translation) result = result.filter(
elif subproject is not None: translation=self.translation
result = result.filter(translation__subproject=subproject) )
elif project is not None: elif self.subproject is not None:
result = result.filter(translation__subproject__project=project) result = result.filter(
translation__subproject=self.subproject
)
elif self.project is not None:
result = result.filter(
translation__subproject__project=self.project
)
if language is not None: if self.language is not None:
result = result.filter(translation__language=language) result = result.filter(
translation__language=self.language
)
if user is not None: if self.user is not None:
result = result.filter(user=user) result = result.filter(
user=self.user
)
return result return result
...@@ -13,11 +13,11 @@ ...@@ -13,11 +13,11 @@
<span class="navi-toolbar ui-widget-header ui-corner-all"> <span class="navi-toolbar ui-widget-header ui-corner-all">
<span id="navi"> <span id="navi">
<a id="button-first" {% if page_obj.number == 1 %}class="button-disabled"{% endif %} href="?page=1">{% trans "First" %}</a> <a id="button-first" {% if page_obj.number == 1 %}class="button-disabled"{% endif %} href="?page=1&amp;{{ search_url }}">{% trans "First" %}</a>
<a id="button-prev" {% if not page_obj.has_previous %}class="button-disabled"{% else %}href="?page={{ page_obj.previous_page_number }}"{% endif %}>{% trans "Previous" %}</a> <a id="button-prev" {% if not page_obj.has_previous %}class="button-disabled"{% else %}href="?page={{ page_obj.previous_page_number }}&amp;{{ search_url }}"{% endif %}>{% trans "Previous" %}</a>
<a id="button-pos" class="textbutton">{% blocktrans with page_obj.number as position and page_obj.paginator.num_pages as total %}{{ position }} / {{ total }}{% endblocktrans %}</a> <a id="button-pos" class="textbutton">{% blocktrans with page_obj.number as position and page_obj.paginator.num_pages as total %}{{ position }} / {{ total }}{% endblocktrans %}</a>
<a id="button-next" {% if not page_obj.has_next %}class="button-disabled"{% else %}href="?page={{ page_obj.next_page_number }}"{% endif %}>{% trans "Next" %}</a> <a id="button-next" {% if not page_obj.has_next %}class="button-disabled"{% else %}href="?page={{ page_obj.next_page_number }}&amp;{{ search_url }}"{% endif %}>{% trans "Next" %}</a>
<a id="button-end" {% if page_obj.paginator.num_pages == page_obj.number %}class="button-disabled"{% endif %} href="?page={{ page_obj.paginator.num_pages }}">{% trans "Last" %}</a> <a id="button-end" {% if page_obj.paginator.num_pages == page_obj.number %}class="button-disabled"{% endif %} href="?page={{ page_obj.paginator.num_pages }}&amp;{{ search_url }}">{% trans "Last" %}</a>
</span> </span>
<form class="autosubmit">{{ letterform.as_p }}</form> <form class="autosubmit">{{ letterform.as_p }}</form>
</span> </span>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment