diff --git a/mayan/apps/dynamic_search/admin.py b/mayan/apps/dynamic_search/admin.py deleted file mode 100644 index 3c1297cfc8..0000000000 --- a/mayan/apps/dynamic_search/admin.py +++ /dev/null @@ -1,14 +0,0 @@ -from __future__ import unicode_literals - -from django.contrib import admin - -from .models import RecentSearch - - -@admin.register(RecentSearch) -class RecentSearchAdmin(admin.ModelAdmin): - date_hierarchy = 'datetime_created' - list_display = ('user', 'query', 'datetime_created', 'hits') - list_display_links = ('user', 'query', 'datetime_created', 'hits') - list_filter = ('user',) - readonly_fields = ('user', 'query', 'datetime_created', 'hits') diff --git a/mayan/apps/dynamic_search/api_views.py b/mayan/apps/dynamic_search/api_views.py index 7941a8963b..65f78104a9 100644 --- a/mayan/apps/dynamic_search/api_views.py +++ b/mayan/apps/dynamic_search/api_views.py @@ -6,29 +6,6 @@ from rest_framework.exceptions import ParseError from rest_api.filters import MayanObjectPermissionsFilter from .classes import SearchModel -from .filters import RecentSearchUserFilter -from .models import RecentSearch -from .serializers import RecentSearchSerializer - - -class APIRecentSearchListView(generics.ListAPIView): - """ - Returns a list of all the recent searches for the logged user. - """ - - filter_backends = (RecentSearchUserFilter,) - queryset = RecentSearch.objects.all() - serializer_class = RecentSearchSerializer - - -class APIRecentSearchView(generics.RetrieveAPIView): - """ - Returns the selected recent search details. - """ - - filter_backends = (RecentSearchUserFilter,) - queryset = RecentSearch.objects.all() - serializer_class = RecentSearchSerializer class APISearchView(generics.ListAPIView): diff --git a/mayan/apps/dynamic_search/classes.py b/mayan/apps/dynamic_search/classes.py index 99522b6345..18fa94aac1 100644 --- a/mayan/apps/dynamic_search/classes.py +++ b/mayan/apps/dynamic_search/classes.py @@ -12,7 +12,6 @@ from django.utils.module_loading import import_string from acls.models import AccessControlList from permissions import Permission -from .models import RecentSearch from .settings import setting_limit logger = logging.getLogger(__name__) @@ -222,10 +221,6 @@ class SearchModel(object): self.permission, user, queryset ) - RecentSearch.objects.add_query_for_user( - user, query_string, len(result_set) - ) - return queryset, result_set, elapsed_time diff --git a/mayan/apps/dynamic_search/filters.py b/mayan/apps/dynamic_search/filters.py deleted file mode 100644 index 579cb59632..0000000000 --- a/mayan/apps/dynamic_search/filters.py +++ /dev/null @@ -1,11 +0,0 @@ -from __future__ import unicode_literals - -from rest_framework.filters import BaseFilterBackend - - -class RecentSearchUserFilter(BaseFilterBackend): - def filter_queryset(self, request, queryset, view): - if request.user.is_staff or request.user.is_superuser: - return queryset - else: - return queryset.filter(user=self.request.user) diff --git a/mayan/apps/dynamic_search/managers.py b/mayan/apps/dynamic_search/managers.py deleted file mode 100644 index 456d53c819..0000000000 --- a/mayan/apps/dynamic_search/managers.py +++ /dev/null @@ -1,40 +0,0 @@ -import urlparse - -from django.contrib.auth.models import AnonymousUser -from django.db import models -from django.utils.http import urlencode - -from .settings import setting_recent_count - - -class RecentSearchManager(models.Manager): - def add_query_for_user(self, user, query_string, hits): - parsed_query = urlparse.parse_qs( - urlencode(dict(query_string.items())) - ) - - for key, value in parsed_query.items(): - parsed_query[key] = ' '.join(value) - - if 'q' in query_string: - # Is a simple query - - if not query_string['q']: - # Don't store empty simple searches - return - else: - # Cleanup query string and only store the q parameter - parsed_query = {'q': parsed_query['q']} - - if parsed_query and not isinstance(user, AnonymousUser): - # If the URL query has at least one variable with a value - new_recent, created = self.model.objects.get_or_create( - user=user, query=urlencode(parsed_query), - defaults={'hits': hits} - ) - if not created: - new_recent.hits = hits - new_recent.save() - - for recent_to_delete in self.model.objects.filter(user=user)[setting_recent_count.value:]: - recent_to_delete.delete() diff --git a/mayan/apps/dynamic_search/models.py b/mayan/apps/dynamic_search/models.py deleted file mode 100644 index b3ee98b156..0000000000 --- a/mayan/apps/dynamic_search/models.py +++ /dev/null @@ -1,75 +0,0 @@ -from __future__ import unicode_literals - -import urllib -import urlparse - -from django.conf import settings -from django.core.urlresolvers import reverse -from django.db import models -from django.utils.encoding import ( - python_2_unicode_compatible, smart_str, smart_unicode -) -from django.utils.translation import ugettext_lazy as _ - -from .managers import RecentSearchManager - - -@python_2_unicode_compatible -class RecentSearch(models.Model): - """ - Keeps a list of the [n] most recent search keywords for a given user - """ - - user = models.ForeignKey( - settings.AUTH_USER_MODEL, editable=False, verbose_name=_('User') - ) - query = models.TextField(editable=False, verbose_name=_('Query')) - datetime_created = models.DateTimeField( - auto_now=True, db_index=True, verbose_name=_('Datetime created') - ) - hits = models.IntegerField(editable=False, verbose_name=_('Hits')) - - objects = RecentSearchManager() - - def __str__(self): - # TODO: Fix this hack, store the search model name in the recent - # search entry - from .classes import SearchModel - document_search = SearchModel.get('documents.Document') - - query_dict = urlparse.parse_qs( - urllib.unquote_plus(smart_str(self.query)) - ) - - if self.is_advanced(): - # Advanced search - advanced_string = [] - for key, value in query_dict.items(): - search_field = document_search.get_search_field(key) - advanced_string.append( - '%s: %s' % ( - search_field.label, smart_unicode(' '.join(value)) - ) - ) - - display_string = ', '.join(advanced_string) - else: - # Is a simple search - display_string = smart_unicode(' '.join(query_dict['q'])) - - return '%s (%s)' % (display_string, self.hits) - - def save(self, *args, **kwargs): - super(RecentSearch, self).save(*args, **kwargs) - - def url(self): - view = 'search:results' if self.is_advanced() else 'search:search' - return '%s?%s' % (reverse(view), self.query) - - def is_advanced(self): - return 'q' not in urlparse.parse_qs(self.query) - - class Meta: - ordering = ('-datetime_created',) - verbose_name = _('Recent search') - verbose_name_plural = _('Recent searches') diff --git a/mayan/apps/dynamic_search/serializers.py b/mayan/apps/dynamic_search/serializers.py deleted file mode 100644 index 0e49d1b9bf..0000000000 --- a/mayan/apps/dynamic_search/serializers.py +++ /dev/null @@ -1,19 +0,0 @@ -from __future__ import unicode_literals - -from rest_framework import serializers - -from user_management.serializers import UserSerializer - -from .models import RecentSearch - - -class RecentSearchSerializer(serializers.HyperlinkedModelSerializer): - url = serializers.HyperlinkedIdentityField( - view_name='rest_api:recentsearch-detail' - ) - user = UserSerializer() - - class Meta: - fields = ('datetime_created', 'hits', 'query', 'url', 'user') - model = RecentSearch - read_only_fields = ('datetime_created', 'hits', 'query', 'user') diff --git a/mayan/apps/dynamic_search/settings.py b/mayan/apps/dynamic_search/settings.py index 38f3fb9bd3..3c5a8dbb89 100644 --- a/mayan/apps/dynamic_search/settings.py +++ b/mayan/apps/dynamic_search/settings.py @@ -10,7 +10,3 @@ setting_limit = namespace.add_setting( global_name='SEARCH_LIMIT', default=100, help_text=_('Maximum amount search hits to fetch and display.') ) -setting_recent_count = namespace.add_setting( - global_name='SEARCH_RECENT_COUNT', default=5, - help_text=_('Maximum number of search queries to remember per user.') -) diff --git a/mayan/apps/dynamic_search/urls.py b/mayan/apps/dynamic_search/urls.py index 0d4bb64b9f..9dba7e8c75 100644 --- a/mayan/apps/dynamic_search/urls.py +++ b/mayan/apps/dynamic_search/urls.py @@ -2,9 +2,7 @@ from __future__ import unicode_literals from django.conf.urls import patterns, url -from .api_views import ( - APIRecentSearchListView, APIRecentSearchView, APISearchView -) +from .api_views import APISearchView from .views import ( AdvancedSearchView, ResultsView, SearchAgainView, SearchView ) @@ -28,13 +26,5 @@ urlpatterns = patterns( api_urls = patterns( '', - url( - r'^recent_searches/$', APIRecentSearchListView.as_view(), - name='recentsearch-list' - ), - url( - r'^recent_searches/(?P[0-9]+)/$', APIRecentSearchView.as_view(), - name='recentsearch-detail' - ), url(r'^search/$', APISearchView.as_view(), name='search-view'), )