Эх сурвалжийг харах

[search] Next page button is broken is not collection selected

Romain Rigaux 12 жил өмнө
parent
commit
052390175b

+ 6 - 6
apps/search/src/search/forms.py

@@ -21,7 +21,7 @@ from search.models import Core
 
 
 class QueryForm(forms.Form):
-  cores = forms.ChoiceField()
+  collection = forms.ChoiceField()
 
   query = forms.CharField(label='', max_length=256, required=False, initial='',
                           widget=forms.TextInput(attrs={'class': 'search-query input-xxlarge', 'placeholder': 'Search...'}))
@@ -35,13 +35,13 @@ class QueryForm(forms.Form):
     super(QueryForm, self).__init__(*args, **kwargs)
     choices = [(core.name, core.label) for core in Core.objects.filter(enabled=True)]
     initial_choice = self._initial_core(choices)
-    self.fields['cores'] = forms.ChoiceField(choices=choices, initial=initial_choice, required=False, label='', widget=forms.Select(attrs={'class':'hide'}))
+    self.fields['collection'] = forms.ChoiceField(choices=choices, initial=initial_choice, required=False, label='', widget=forms.Select(attrs={'class':'hide'}))
 
-  def clean_cores(self):
-    if self.cleaned_data.get('cores'):
-      return self.cleaned_data['cores']
+  def clean_collection(self):
+    if self.cleaned_data.get('collection'):
+      return self.cleaned_data['collection']
     else:
-      return self._initial_core(self.fields['cores'].choices)
+      return self._initial_core(self.fields['collection'].choices)
 
 
   def _initial_core(self, choices):

+ 8 - 8
apps/search/src/search/migrations/0001_initial.py

@@ -5,9 +5,9 @@ from south.v2 import SchemaMigration
 from django.db import models
 
 class Migration(SchemaMigration):
-    
+
     def forwards(self, orm):
-        
+
         # Adding model 'Facet'
         db.create_table('search_facet', (
             ('data', self.gf('django.db.models.fields.TextField')()),
@@ -42,10 +42,10 @@ class Migration(SchemaMigration):
             ('properties', self.gf('django.db.models.fields.TextField')(default='[]')),
         ))
         db.send_create_signal('search', ['Core'])
-    
-    
+
+
     def backwards(self, orm):
-        
+
         # Deleting model 'Facet'
         db.delete_table('search_facet')
 
@@ -57,8 +57,8 @@ class Migration(SchemaMigration):
 
         # Deleting model 'Core'
         db.delete_table('search_core')
-    
-    
+
+
     models = {
         'search.core': {
             'Meta': {'object_name': 'Core'},
@@ -88,5 +88,5 @@ class Migration(SchemaMigration):
             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
         }
     }
-    
+
     complete_apps = ['search']

+ 89 - 0
apps/search/src/search/models.py

@@ -387,3 +387,92 @@ class Core(models.Model):
     return sorted([{'name': field.get('name'),'type': field.get('type')}
                    for fields in schema.iter('fields') for field in fields.iter('field')])
 
+
+def get_facet_field_label(field, type, facets):
+  label = field
+  if type == 'field':
+    for fld in facets['fields']:
+      if fld['field'] == field:
+        label = fld['label']
+  elif type == 'range':
+    for fld in facets['ranges']:
+      if fld['field'] == field:
+        label = fld['label']
+  elif type == 'date':
+    for fld in facets['dates']:
+      if fld['field'] == field:
+        label = fld['label']
+  return label
+
+def get_facet_field_uuid(field, type, facets):
+  uuid = ''
+  if type == 'field':
+    for fld in facets['fields']:
+      if fld['field'] == field:
+        uuid = fld['uuid']
+  elif type == 'range':
+    for fld in facets['ranges']:
+      if fld['field'] == field:
+        uuid = fld['uuid']
+  elif type == 'date':
+    for fld in facets['dates']:
+      if fld['field'] == field:
+        uuid = fld['uuid']
+  return uuid
+
+
+def augment_solr_response(response, facets):
+  augmented = response
+  augmented['normalized_facets'] = []
+
+  normalized_facets = {}
+  if response and response.get('facet_counts'):
+    if response['facet_counts']['facet_fields']:
+      for cat in response['facet_counts']['facet_fields']:
+        facet = {
+          'field': cat,
+          'type': 'field',
+          'label': get_facet_field_label(cat, 'field', facets),
+          'counts': response['facet_counts']['facet_fields'][cat],
+        }
+        normalized_facets[get_facet_field_uuid(cat, 'field', facets)] = facet
+
+    if response['facet_counts']['facet_ranges']:
+      for cat in response['facet_counts']['facet_ranges']:
+        facet = {
+          'field': cat,
+          'type': 'range',
+          'label': get_facet_field_label(cat, 'range', facets),
+          'counts': response['facet_counts']['facet_ranges'][cat]['counts'],
+          'start': response['facet_counts']['facet_ranges'][cat]['start'],
+          'end': response['facet_counts']['facet_ranges'][cat]['end'],
+          'gap': response['facet_counts']['facet_ranges'][cat]['gap'],
+        }
+        normalized_facets[get_facet_field_uuid(cat, 'range', facets)] = facet
+
+    if response['facet_counts']['facet_dates']:
+      for cat in response['facet_counts']['facet_dates']:
+        facet = {
+          'field': cat,
+          'type': 'date',
+          'label': get_facet_field_label(cat, 'date', facets),
+          'start': response['facet_counts']['facet_dates'][cat]['start'],
+          'end': response['facet_counts']['facet_dates'][cat]['end'],
+          'gap': response['facet_counts']['facet_dates'][cat]['gap'],
+        }
+        counts = []
+        for date, count in response['facet_counts']['facet_dates'][cat].iteritems():
+          if date not in ('start', 'end', 'gap'):
+            counts.append(date)
+            counts.append(count)
+        facet['counts'] = counts
+        normalized_facets[get_facet_field_uuid(cat, 'date', facets)] = facet
+
+  for ordered_uuid in facets.get('order', []):
+    try:
+      augmented['normalized_facets'].append(normalized_facets[ordered_uuid])
+    except:
+      pass
+
+  return augmented
+

+ 2 - 2
apps/search/src/search/templates/admin_core_facets.mako

@@ -339,10 +339,10 @@ ${ commonheader(_('Search'), "search", user) | n,unicode }
     // List of all facets sorted by UUID
     self.sortableFacets = ko.observableArray(self.fieldFacets().concat(self.rangeFacets()).concat(self.dateFacets()));
     self.sortableFacets.sort(function(left, right) {
-      var sorted_ids = ${ hue_core.facets.data | n,unicode }.order; 
+      var sorted_ids = ${ hue_core.facets.data | n,unicode }.order;
       return sorted_ids.indexOf(left.uuid) > sorted_ids.indexOf(right.uuid);
     })
-    
+
     self.selectedFieldFacet = ko.observable();
     self.selectedFieldLabel = ko.observable("");
     self.selectedRangeFacet = ko.observable();

+ 9 - 9
apps/search/src/search/templates/index.mako → apps/search/src/search/templates/search.mako

@@ -86,24 +86,24 @@ ${ commonheader(_('Search'), "search", user, "40px") | n,unicode }
           % for group, count in macros.pairwise(fld['counts']):
             %if count > 0 and group != "" and found_value == "":
               % if fld['type'] == 'field':
-                <li><a href='?cores=${ current_cores }&query=${ solr_query['q'] }&fq=${ solr_query['fq'] }|${ fld['field'] }:"${ urllib.quote_plus(group.encode('ascii', 'xmlcharrefreplace')) }"${solr_query.get("sort") and '&sort=' + solr_query.get("sort") or ''}'>${group}</a> <span class="counter">(${ count })</span></li>
+                <li><a href='?collection=${ current_cores }&query=${ solr_query['q'] }&fq=${ solr_query['fq'] }|${ fld['field'] }:"${ urllib.quote_plus(group.encode('ascii', 'xmlcharrefreplace')) }"${solr_query.get("sort") and '&sort=' + solr_query.get("sort") or ''}'>${group}</a> <span class="counter">(${ count })</span></li>
               % endif
               % if fld['type'] == 'range':
-                <li><a href='?cores=${ current_cores }&query=${ solr_query['q'] }&fq=${ solr_query['fq'] }|${ fld['field'] }:["${ group }" TO "${ str(int(group) + int(fld['gap']) - 1) }"]${solr_query.get("sort") and '&sort=' + solr_query.get("sort") or ''}'>${ group } (${ count })</a></li>
+                <li><a href='?collection=${ current_cores }&query=${ solr_query['q'] }&fq=${ solr_query['fq'] }|${ fld['field'] }:["${ group }" TO "${ str(int(group) + int(fld['gap']) - 1) }"]${solr_query.get("sort") and '&sort=' + solr_query.get("sort") or ''}'>${ group } (${ count })</a></li>
               % endif
               % if fld['type'] == 'date':
-                <li class="dateFacetItem"><a href='?cores=${ current_cores }&query=${ solr_query['q'] }&fq=${ solr_query['fq'] }|${ fld['field'] }:"${ group }"${solr_query.get("sort") and '&sort=' + solr_query.get("sort") or ''}'><span class="dateFacet">${ group }</span> (${ count })</a></li>
+                <li class="dateFacetItem"><a href='?collection=${ current_core }&query=${ solr_query['q'] }&fq=${ solr_query['fq'] }|${ fld['field'] }:"${ group }"${solr_query.get("sort") and '&sort=' + solr_query.get("sort") or ''}'><span class="dateFacet">${ group }</span> (${ count })</a></li>
               % endif
             %endif
             % if found_value != "":
               % if fld['type'] == 'field' and '"' + group + '"' == found_value:
-                <li><strong>${ group }</strong> <a href="?cores=${ current_cores }&query=${ solr_query['q'] }&fq=${'|'.join(remove_list)}${solr_query.get("sort") and '&sort=' + solr_query.get("sort") or ''}"><i class="icon-remove"></i></a></li>
+                <li><strong>${ group }</strong> <a href="?collection=${ current_cores }&query=${ solr_query['q'] }&fq=${'|'.join(remove_list)}${solr_query.get("sort") and '&sort=' + solr_query.get("sort") or ''}"><i class="icon-remove"></i></a></li>
               %endif
               % if fld['type'] == 'range' and '["' + group + '" TO "' + str(int(group) + int(fld['gap']) - 1) + '"]' == found_value:
-                <li><strong>${ group }</strong> <a href="?cores=${ current_cores }&query=${ solr_query['q'] }&fq=${'|'.join(remove_list)}${solr_query.get("sort") and '&sort=' + solr_query.get("sort") or ''}"><i class="icon-remove"></i></a></li>
+                <li><strong>${ group }</strong> <a href="?collection=${ current_cores }&query=${ solr_query['q'] }&fq=${'|'.join(remove_list)}${solr_query.get("sort") and '&sort=' + solr_query.get("sort") or ''}"><i class="icon-remove"></i></a></li>
               %endif
               % if fld['type'] == 'date' and '"' + group + '"' == found_value:
-                <li><strong><span class="dateFacet">${group}</span></strong> <a href="?cores=${ current_cores }&query=${ solr_query['q'] }&fq=${'|'.join(remove_list)}${solr_query.get("sort") and '&sort=' + solr_query.get("sort") or ''}"><i class="icon-remove"></i></a></li>
+                <li><strong><span class="dateFacet">${group}</span></strong> <a href="?collection=${ current_core }&query=${ solr_query['q'] }&fq=${'|'.join(remove_list)}${solr_query.get("sort") and '&sort=' + solr_query.get("sort") or ''}"><i class="icon-remove"></i></a></li>
               %endif
             %endif
           % endfor
@@ -264,10 +264,10 @@ ${ hue_core.result.get_extracode() | n,unicode }
     });
     $(".dateFacetHeader").after(orderedDateFacets);
 
-    $(".current-core").text($("select[name='cores'] option:selected").text());
+    $(".current-core").text($("select[name='collection'] option:selected").text());
     % if user.is_superuser:
         $(".dropdown-core").each(function () {
-          if ($(this).data("value") == $("select[name='cores']").val()) {
+          if ($(this).data("value") == $("select[name='collection']").val()) {
             $(".change-settings").attr("href", $(this).data("settings-url"));
           }
         });
@@ -276,7 +276,7 @@ ${ hue_core.result.get_extracode() | n,unicode }
     $(".dropdown-core").click(function (e) {
       e.preventDefault();
       $(".current-core").text($(this).text());
-      $("select[name='cores']").val($(this).data("value"));
+      $("select[name='collection']").val($(this).data("value"));
       % if user.is_superuser:
           $(".change-settings").attr("href", $(this).data("settings-url"));
       % endif

+ 6 - 91
apps/search/src/search/views.py

@@ -33,7 +33,7 @@ from search.api import SolrApi
 from search.conf import SOLR_URL
 from search.decorators import allow_admin_only
 from search.forms import QueryForm, CoreForm, HighlightingForm
-from search.models import Core
+from search.models import Core, augment_solr_response
 
 
 LOG = logging.getLogger(__name__)
@@ -52,7 +52,7 @@ def index(request):
   solr_query = {}
 
   if search_form.is_valid():
-    core = search_form.cleaned_data['cores']
+    core = search_form.cleaned_data['collection']
     solr_query['core'] = core
     solr_query['q'] = search_form.cleaned_data['query']
     solr_query['fq'] = search_form.cleaned_data['fq']
@@ -68,105 +68,20 @@ def index(request):
       response = SolrApi(SOLR_URL.get()).query(solr_query, hue_core)
     except Exception, e:
       error['message'] = unicode(str(e), "utf8")
+  else:
+    core = cores['status'].keys()[0]
 
-  return render('index.mako', request, {
+  return render('search.mako', request, {
     'search_form': search_form,
     'response': augment_solr_response(response, hue_core.facets.get_data()),
     'error': error,
     'solr_query': solr_query,
     'hue_core': hue_core,
     'hue_cores': hue_cores,
-    'current_cores': request.GET and request.GET['cores'] or '',
+    'current_core': request.GET and request.GET.get('collection', core),
     'json': json,
   })
 
-def get_facet_field_label(field, type, facets):
-  label = field
-  if type == 'field':
-    for fld in facets['fields']:
-      if fld['field'] == field:
-        label = fld['label']
-  elif type == 'range':
-    for fld in facets['ranges']:
-      if fld['field'] == field:
-        label = fld['label']
-  elif type == 'date':
-    for fld in facets['dates']:
-      if fld['field'] == field:
-        label = fld['label']
-  return label
-
-def get_facet_field_uuid(field, type, facets):
-  uuid = ''
-  if type == 'field':
-    for fld in facets['fields']:
-      if fld['field'] == field:
-        uuid = fld['uuid']
-  elif type == 'range':
-    for fld in facets['ranges']:
-      if fld['field'] == field:
-        uuid = fld['uuid']
-  elif type == 'date':
-    for fld in facets['dates']:
-      if fld['field'] == field:
-        uuid = fld['uuid']
-  return uuid
-
-
-def augment_solr_response(response, facets):
-  augmented = response
-  augmented['normalized_facets'] = []
-
-  normalized_facets = {}
-  if response and response.get('facet_counts'):
-    if response['facet_counts']['facet_fields']:
-      for cat in response['facet_counts']['facet_fields']:
-        facet = {
-          'field': cat,
-          'type': 'field',
-          'label': get_facet_field_label(cat, 'field', facets),
-          'counts': response['facet_counts']['facet_fields'][cat],
-        }
-        normalized_facets[get_facet_field_uuid(cat, 'field', facets)] = facet
-
-    if response['facet_counts']['facet_ranges']:
-      for cat in response['facet_counts']['facet_ranges']:
-        facet = {
-          'field': cat,
-          'type': 'range',
-          'label': get_facet_field_label(cat, 'range', facets),
-          'counts': response['facet_counts']['facet_ranges'][cat]['counts'],
-          'start': response['facet_counts']['facet_ranges'][cat]['start'],
-          'end': response['facet_counts']['facet_ranges'][cat]['end'],
-          'gap': response['facet_counts']['facet_ranges'][cat]['gap'],
-        }
-        normalized_facets[get_facet_field_uuid(cat, 'range', facets)] = facet
-
-    if response['facet_counts']['facet_dates']:
-      for cat in response['facet_counts']['facet_dates']:
-        facet = {
-          'field': cat,
-          'type': 'date',
-          'label': get_facet_field_label(cat, 'date', facets),
-          'start': response['facet_counts']['facet_dates'][cat]['start'],
-          'end': response['facet_counts']['facet_dates'][cat]['end'],
-          'gap': response['facet_counts']['facet_dates'][cat]['gap'],
-        }
-        counts = []
-        for date, count in response['facet_counts']['facet_dates'][cat].iteritems():
-          if date not in ('start', 'end', 'gap'):
-            counts.append(date)
-            counts.append(count)
-        facet['counts'] = counts
-        normalized_facets[get_facet_field_uuid(cat, 'date', facets)] = facet
-
-  for ordered_uuid in facets.get('order', []):
-    try:
-      augmented['normalized_facets'].append(normalized_facets[ordered_uuid])
-    except:
-      pass
-
-  return augmented
 
 @allow_admin_only
 def admin(request):