return sqs
if self.cleaned_data['q']:
- sqs=sqs.models(MediaItem).filter(content__contains=self.cleaned_data['q'])
+ sqs=sqs.filter(content__contains=self.cleaned_data['q']).facet('item_acces').facet('item_status').facet('digitized')
- return sqs
+ for facet in self.selected_facets:
+ if ":" not in facet:
+ continue
- class HaySearchFormCollection(SearchForm):
+ field, value = facet.split(":", 1)
- def search(self):
- sqs=SearchQuerySet().load_all()
+ if value:
+ if value == 'viewable':
+ sqs = sqs.narrow('item_acces:full OR item_acces:metadata OR item_acces:mixed')
+ else:
+ sqs = sqs.narrow(u'%s:"%s"' % (field, sqs.query.clean(value)))
- if not self.is_valid():
- return sqs
+ return sqs
- if self.cleaned_data['q']:
- sqs=sqs.models(MediaCollection).filter(content__contains=self.cleaned_data['q'])
- return sqs
-
+
+class HayAdvanceFormItem(SearchForm):
+
+ cote = forms.CharField(required=False, label=('Cote'), widget=forms.TextInput(attrs={'type': 'search'}))
+
+ def search(self):
+ sqs = super(HayAdvanceFormItem, self).search().models(MediaItem)
+
+ if not self.is_valid():
+ return sqs
+
+ if self.cleaned_data['q']:
+ sqs = sqs.filter(content__contains=self.cleaned_data['q'])
+
+ if self.cleaned_data['cote']:
+ sqs = sqs.filter(content__cote__contains=self.cleaned_data['cote'])
+
+ return sqs
+
+
+class HayAdvanceFormCollection(SearchForm):
+
+ cote = forms.CharField(required=False, label=('Cote'), widget=forms.TextInput(attrs={'type': 'search'}))
+
+ def search(self):
+ sqs = super(HayAdvanceFormCollection, self).search().models(MediaCollection)
+
+ if not self.is_valid():
+ return sqs
+
+ if self.cleaned_data['q']:
+ sqs = sqs.filter(content__contains=self.cleaned_data['q'])
+
+ if self.cleaned_data['cote']:
+ sqs = sqs.filter(content__cote__contains=self.cleaned_data['cote'])
+
+ return sqs
+
+
+class HayAdvanceForm(SearchForm):
+ #to replace de basic search form field
+ q = forms.CharField(required=False, label=('Title'), widget=forms.TextInput(attrs={'type': 'search'}))
+ cote = forms.CharField(required=False, label=('Cote'), widget=forms.TextInput(attrs={'type': 'search'}))
+ location = forms.CharField(required=False, label=('Location'), widget=forms.TextInput(attrs={'type': 'search'}))
+
- return sqs
+ def search(self):
+ sqs = SearchQuerySet().load_all()
+
+ if not self.is_valid():
+ return self.no_query_found()
+
+ if self.cleaned_data.get('q'):
+ sqs = sqs.filter(title__title__contains=self.cleaned_data['q'])
+
+ if self.cleaned_data.get('cote'):
+ sqs = sqs.filter(cote__cote__contains=self.cleaned_data['cote'])
+
+ if self.cleaned_data.get('location'):
+ sqs = sqs.filter(location__location__contains=self.cleaned_data['location'])
+
++ return sqs
class MediaItemIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
-- item_acces = indexes.CharField(model_attr= 'collection__public_access' , faceted=True)
-- item_status = indexes.CharField(model_attr= 'collection__document_status' , faceted=True)
- digitized = indexes.BooleanField(default=False , faceted=True)
-
- def prepare_digitized(self,obj):
++ item_acces = indexes.CharField(model_attr='collection__public_access', faceted=True)
++ item_status = indexes.CharField(model_attr='collection__document_status', faceted=True)
+ title = indexes.NgramField(model_attr='title')
+ code = indexes.NgramField(model_attr='code')
+ location = indexes.NgramField(model_attr='location__name', default='')
++ digitized = indexes.BooleanField(default=False, faceted=True)
++
++ def prepare_digitized(self, obj):
+ if obj.file.name:
+ return True
+ elif '/' in obj.url:
+ return True
+ else:
+ return False
def get_model(self):
return MediaItem
class MediaCollectionIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.NgramField(document=True, use_template=True)
- item_acces = indexes.CharField(model_attr= 'public_access' , faceted=True)
- item_status = indexes.CharField(model_attr= 'document_status' , faceted=True)
- digitized = indexes.BooleanField(default=False , faceted=True)
-
- def prepare_digitized(self,obj):
+ #rec_date = indexes.DateTimeField(use_template=True, null=True)
+ title = indexes.NgramField(model_attr='title')
+ code = indexes.NgramField(model_attr='code')
+ location = indexes.NgramField(default='')
++ item_acces = indexes.CharField(model_attr='public_access', faceted=True)
++ item_status = indexes.CharField(model_attr='document_status', faceted=True)
++ digitized = indexes.BooleanField(default=False, faceted=True)
++
++ def prepare_digitized(self, obj):
+ return obj.has_mediafile
def get_model(self):
- return MediaCollection
+ return MediaCollection
+
+ def prepare_location(self, obj):
- return "%s" % obj.countries()
++ return "%s" % obj.countries()
# -*- coding: utf-8 -*-
- from haystack.views import SearchView
- from haystack.query import SearchQuerySet
+ from haystack.views import *
-from haystack.query import SearchQuerySet
++#from haystack.query import SearchQuerySet
from telemeta.models import *
-from telemeta.forms.haystack_form import HaySearchForm
+from telemeta.forms.haystack_form import *
+
- class HaystackSearch(SearchView):
-
- def __call__(self,request,type=None):
- self.type = type
- if(self.type=='collection'):
- self.form_class=HaySearchFormCollection
- else:
- self.form_class=HaySearchFormItem
- return super(HaystackSearch,self).__call__(request)
+ class HaystackSearch(FacetedSearchView):
- def __call__(self,request,type=None):
++ def __call__(self, request, type=None):
+ self.type = type
- self.form_class=HaySearchForm
- return super(HaystackSearch,self).__call__(request)
-
-
++ self.form_class = HaySearchForm
++ return super(HaystackSearch, self).__call__(request)
def get_query(self):
return super(HaystackSearch, self).get_query()
+ def get_results(self):
+ if(self.type == 'collection'):
+ return super(HaystackSearch, self).get_results().models(MediaCollection)
+ else:
+ return super(HaystackSearch, self).get_results().models(MediaItem)
+
def extra_context(self):
extra = super(HaystackSearch, self).extra_context()
- extra['collection_count']=SearchQuerySet().load_all().models(MediaCollection).filter(content__contains=self.get_query()).count()
- extra['item_count']=SearchQuerySet().load_all().models(MediaItem).filter(content__contains=self.get_query()).count()
- if self.type=='collection':
- extra['type']='collection'
- extra['collection_count']=super(HaystackSearch, self).get_results().models(MediaCollection).count()
- extra['item_count']=super(HaystackSearch, self).get_results().models(MediaItem).count()
++ extra['collection_count'] = super(HaystackSearch, self).get_results().models(MediaCollection).count()
++ extra['item_count'] = super(HaystackSearch, self).get_results().models(MediaItem).count()
+
+ if extra['facets']:
+ viewable_total = 0
+ for viewable in extra['facets']['fields']['item_acces']:
+ if viewable == 'none':
+ pass
+ else:
+ viewable_total = viewable_total + viewable[1]
+
- extra['viewable_count']=self.get_results().narrow('item_acces:full OR item_acces:metadata OR item_acces:mixed').count()
- if self.type=='collection':
- extra['type']='collection'
++ extra['viewable_count'] = self.get_results().narrow('item_acces:full OR item_acces:metadata OR item_acces:mixed').count()
++ if self.type == 'collection':
++ extra['type'] = 'collection'
else:
-- extra['type']='item'
++ extra['type'] = 'item'
return extra
+
+class HaystackAdvanceSearch(SearchView):
+
+ def __call__(self, request, type=None):
+ self.type = type
+ return super(HaystackAdvanceSearch, self).__call__(request)
+
+ def get_query(self):
+ """
+ Returns the query provided by the user.
+
+ Returns an empty string if the query is invalid.
+ """
+ if self.form.is_valid():
+ return self.form.cleaned_data
+
+ return ''
+
+ def get_results(self):
+ if(self.type == 'collection'):
+ return self.form.search().models(MediaCollection)
+ else:
+ return self.form.search().models(MediaItem)
+
+ def extra_context(self):
+ extra = super(HaystackAdvanceSearch, self).extra_context()
+
+ if self.request.GET.get('q'):
+ extra['title'] = self.request.GET['q']
+
+ if self.request.GET.get('cote'):
+ extra['cote'] = self.request.GET['cote']
+
+ if self.request.GET.get('location'):
+ extra['location'] = self.request.GET['location']
+
+ extra['collection_count'] = self.form.search().models(MediaCollection).count()
+ extra['item_count'] = self.form.search().models(MediaItem).count()
+ if self.type == 'collection':
+ extra['type'] = 'collection'
+ else:
+ extra['type'] = 'item'
+ return extra