Bladeren bron

[search] Use collection id instead of name

Romain Rigaux 12 jaren geleden
bovenliggende
commit
7bf550c

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

@@ -21,7 +21,7 @@ from search.models import Collection
 
 
 class QueryForm(forms.Form):
-  collection = forms.ChoiceField()
+  collection = forms.ChoiceField() # collection_id
 
   query = forms.CharField(label='', max_length=256, required=False, initial='',
                           widget=forms.TextInput(attrs={'class': 'search-query input-xxlarge', 'placeholder': 'Search...'}))
@@ -33,7 +33,7 @@ class QueryForm(forms.Form):
 
   def __init__(self, *args, **kwargs):
     super(QueryForm, self).__init__(*args, **kwargs)
-    choices = [(core.name, core.label) for core in Collection.objects.filter(enabled=True)]
+    choices = [(core.id, core.label) for core in Collection.objects.filter(enabled=True)]
     initial_choice = self._initial_core(choices)
     self.fields['collection'] = forms.ChoiceField(choices=choices, initial=initial_choice, required=False, label='', widget=forms.Select(attrs={'class':'hide'}))
 

+ 1 - 1
apps/search/src/search/models.py

@@ -388,7 +388,7 @@ class Collection(models.Model):
     return self.facets.get_query_params() + self.result.get_query_params() + self.sorting.get_query_params()
 
   def get_absolute_url(self):
-    return reverse('search:admin_collection', kwargs={'collection': self.name})
+    return reverse('search:admin_collection', kwargs={'collection_id': self.id})
 
   @property
   def fields(self):

+ 0 - 1
apps/search/src/search/search_controller.py

@@ -92,7 +92,6 @@ class SearchController(object):
     id = -1
     try:
       collection = Collection.objects.get(id=collection_id)
-      collection.name = collection.name + _('_copy')
       collection.label = collection.label + _(' (Copy)')
       collection.id = None
       collection.save()

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

@@ -29,7 +29,7 @@ ${ commonheader(_('Search'), "search", user, "40px") | n,unicode }
     <h4>${_('Search Admin - ')}${hue_collection.label}</h4>
   </%def>
   <%def name="navigation()">
-    ${ layout.sidebar(hue_collection.name, 'facets') }
+    ${ layout.sidebar(hue_collection, 'facets') }
   </%def>
   <%def name="content()">
     <form method="POST" class="form-horizontal" data-bind="submit: submit">
@@ -461,7 +461,7 @@ ${ commonheader(_('Search'), "search", user, "40px") | n,unicode }
     };
 
     self.submit = function () {
-      $.ajax("${ url('search:admin_collection_facets', collection=hue_collection.name) }", {
+      $.ajax("${ url('search:admin_collection_facets', collection_id=hue_collection.id) }", {
         data: {
           'properties': ko.toJSON(self.properties),
           'fields': ko.utils.stringifyJson(self.fieldFacets),

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

@@ -30,7 +30,7 @@ ${ commonheader(_('Search'), "search", user, "40px") | n,unicode }
   </%def>
 
   <%def name="navigation()">
-    ${ layout.sidebar(hue_collection.name, 'highlighting') }
+    ${ layout.sidebar(hue_collection, 'highlighting') }
   </%def>
 
   <%def name="content()">
@@ -102,7 +102,7 @@ ${ commonheader(_('Search'), "search", user, "40px") | n,unicode }
     self.isEnabled = ko.observable(properties.highlighting_enabled);
 
     self.submit = function () {
-      $.ajax("${ url('search:admin_collection_highlighting', collection=hue_collection.name) }", {
+      $.ajax("${ url('search:admin_collection_highlighting', collection_id=hue_collection.id) }", {
         data: {
           'properties': ko.utils.stringifyJson({'highlighting_enabled': self.isEnabled()}),
           'highlighting': ko.utils.stringifyJson(self.highlightedFields)

+ 3 - 3
apps/search/src/search/templates/admin_collection_properties.mako

@@ -44,7 +44,7 @@ ${ commonheader(_('Search'), "search", user, "40px") | n,unicode }
   </%def>
 
   <%def name="navigation()">
-    ${ layout.sidebar(hue_collection.name, 'properties') }
+    ${ layout.sidebar(hue_collection, 'properties') }
   </%def>
 
   <%def name="content()">
@@ -88,10 +88,10 @@ ${ commonheader(_('Search'), "search", user, "40px") | n,unicode }
 
 <script type="text/javascript" charset="utf-8">
   $(document).ready(function(){
-    $.get("${ url('search:admin_collection_schema', collection=hue_collection.name) }", function(data) {
+    $.get("${ url('search:admin_collection_schema', collection_id=hue_collection.id) }", function(data) {
         $("#schema").html(data.content); // Need to scroll to refresh
     });
-    $.get("${ url('search:admin_collection_solr_properties', collection=hue_collection.name) }", function(data) {
+    $.get("${ url('search:admin_collection_solr_properties', collection_id=hue_collection.id) }", function(data) {
         $("#properties").html(data.content);
     });
  });

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

@@ -30,7 +30,7 @@ ${ commonheader(_('Search'), "search", user, "40px") | n,unicode }
   </%def>
 
   <%def name="navigation()">
-    ${ layout.sidebar(hue_collection.name, 'sorting') }
+    ${ layout.sidebar(hue_collection, 'sorting') }
   </%def>
 
   <%def name="content()">
@@ -160,7 +160,7 @@ ${ commonheader(_('Search'), "search", user, "40px") | n,unicode }
     };
 
     self.submit = function () {
-      $.ajax("${ url('search:admin_collection_sorting', collection=hue_collection.name) }", {
+      $.ajax("${ url('search:admin_collection_sorting', collection_id=hue_collection.id) }", {
         data: {
           'properties': ko.utils.stringifyJson({'is_enabled': self.isEnabled()}),
           'fields': ko.utils.stringifyJson(self.sortingFields)

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

@@ -128,7 +128,7 @@ ${ commonheader(_('Search'), "search", user, "40px") | n,unicode }
   </%def>
 
   <%def name="navigation()">
-    ${ layout.sidebar(hue_collection.name, 'template') }
+    ${ layout.sidebar(hue_collection, 'template') }
   </%def>
 
   <%def name="content()">
@@ -618,7 +618,7 @@ ${ commonheader(_('Search'), "search", user, "40px") | n,unicode }
     });
 
     $("#save-template").click(function () {
-      $.ajax("${ url('search:admin_collection_template', collection=hue_collection.name) }", {
+      $.ajax("${ url('search:admin_collection_template', collection_id=hue_collection.id) }", {
         data: {
           'template': ko.utils.stringifyJson($("#content-editor").html()),
           'extracode': ko.utils.stringifyJson(templateExtraMirror.getValue())

+ 2 - 0
apps/search/src/search/templates/admin_collections.mako

@@ -172,6 +172,7 @@ ${ commonheader(_('Search'), "search", user, "40px") | n,unicode }
 
     var orderedCores;
     serializeList();
+    /**
     $("#collections").sortable({
       placeholder: "placeholder",
       update: function (event, ui) {
@@ -182,6 +183,7 @@ ${ commonheader(_('Search'), "search", user, "40px") | n,unicode }
       }
     });
     $("#collections").disableSelection();
+    */
 
     function serializeList() {
       orderedCores = [];

+ 7 - 7
apps/search/src/search/templates/layout.mako

@@ -70,30 +70,30 @@
   </script>
 </%def>
 
-<%def name="sidebar(collection, section='')">
+<%def name="sidebar(hue_collection, section='')">
   <div class="well sidebar-nav" style="min-height: 250px">
     <ul class="nav nav-list">
 
     <li class="nav-header">${_('Collection')}</li>
       <li class="${ utils.is_selected(section, 'properties') }">
-        <a href="${ url('search:admin_collection_properties', collection=collection) }"><i class="icon-reorder"></i> ${_('Properties')}</a>
+        <a href="${ url('search:admin_collection_properties', collection_id=hue_collection.id) }"><i class="icon-reorder"></i> ${_('Properties')}</a>
       </li>
       <li>
-        <a href="${ url('search:index') }?collection=${ collection }"><i class="icon-share-alt"></i> ${ _('Query') }</a>
+        <a href="${ url('search:index') }?collection_id=${ hue_collection.id }"><i class="icon-share-alt"></i> ${ _('Query') }</a>
       </li>
 
       <li class="nav-header">${_('Template')}</li>
       <li class="${ utils.is_selected(section, 'template') }">
-        <a href="${ url('search:admin_collection_template', collection=collection) }">${_('1. Snippet')}</a>
+        <a href="${ url('search:admin_collection_template', collection_id=hue_collection.id) }">${_('1. Snippet')}</a>
       </li>
       <li class="${ utils.is_selected(section, 'facets') }">
-        <a href="${ url('search:admin_collection_facets', collection=collection) }">${_('2. Facets')}</a>
+        <a href="${ url('search:admin_collection_facets', collection_id=hue_collection.id) }">${_('2. Facets')}</a>
       </li>
       <li class="${ utils.is_selected(section, 'sorting') }">
-        <a href="${ url('search:admin_collection_sorting', collection=collection) }">${_('3. Sorting')}</a>
+        <a href="${ url('search:admin_collection_sorting', collection_id=hue_collection.id) }">${_('3. Sorting')}</a>
       </li>
       <li class="${ utils.is_selected(section, 'highlighting') }">
-        <a href="${ url('search:admin_collection_highlighting', collection=collection) }">${_('4. Highlighting')}</a>
+        <a href="${ url('search:admin_collection_highlighting', collection_id=hue_collection.id) }">${_('4. Highlighting')}</a>
       </li>
 
     </ul>

+ 3 - 3
apps/search/src/search/templates/search.mako

@@ -41,11 +41,11 @@ ${ commonheader(_('Search'), "search", user, "40px") | n,unicode }
       <ul class="dropdown-menu">
         % if user.is_superuser:
           % for collection in hue_collections:
-            <li><a class="dropdown-collection" href="#" data-value="${ collection.name }" data-settings-url="${ collection.get_absolute_url() }">${ collection.label }</a></li>
+            <li><a class="dropdown-collection" href="#" data-value="${ collection.id }" data-settings-url="${ collection.get_absolute_url() }">${ collection.label }</a></li>
           % endfor
         % else:
           % for collection in hue_collections:
-            <li><a class="dropdown-collection" href="#" data-value="${ collection.name }">${ collection.label }</a></li>
+            <li><a class="dropdown-collection" href="#" data-value="${ collection.id }">${ collection.label }</a></li>
           % endfor
         % endif
       </ul>
@@ -330,7 +330,7 @@ ${ commonheader(_('Search'), "search", user, "40px") | n,unicode }
       var query = $("#id_query").val();
       if ($.trim(query) != "") {
         $("#id_query").addClass("deletable");
-        $.ajax("${ url('search:query_suggest', collection=hue_collection.name) }" + query, {
+        $.ajax("${ url('search:query_suggest', collection_id=hue_collection.id) }" + query, {
           type: 'GET',
           success: function (data) {
             if (data.message.spellcheck && ! jQuery.isEmptyObject(data.message.spellcheck.suggestions)) {

+ 9 - 9
apps/search/src/search/urls.py

@@ -24,17 +24,17 @@ urlpatterns = patterns('search.views',
   url(r'^admin/collections$', 'admin_collections', name='admin_collections'),
   url(r'^admin/collections_import$', 'admin_collections_import', name='admin_collections_import'),
 
-  url(r'^admin/collection/(?P<collection>\w+)$', 'admin_collection_template', name='admin_collection'),
-  url(r'^admin/collection/(?P<collection>\w+)/properties$', 'admin_collection_properties', name='admin_collection_properties'),
-  url(r'^admin/collection/(?P<collection>\w+)/template$', 'admin_collection_template', name='admin_collection_template'),
-  url(r'^admin/collection/(?P<collection>\w+)/facets$', 'admin_collection_facets', name='admin_collection_facets'),
-  url(r'^admin/collection/(?P<collection>\w+)/highlighting$', 'admin_collection_highlighting', name='admin_collection_highlighting'),
-  url(r'^admin/collection/(?P<collection>\w+)/sorting$', 'admin_collection_sorting', name='admin_collection_sorting'),
+  url(r'^admin/collection/(?P<collection_id>\d+)$', 'admin_collection_template', name='admin_collection'),
+  url(r'^admin/collection/(?P<collection_id>\d+)/properties$', 'admin_collection_properties', name='admin_collection_properties'),
+  url(r'^admin/collection/(?P<collection_id>\d+)/template$', 'admin_collection_template', name='admin_collection_template'),
+  url(r'^admin/collection/(?P<collection_id>\d+)/facets$', 'admin_collection_facets', name='admin_collection_facets'),
+  url(r'^admin/collection/(?P<collection_id>\d+)/highlighting$', 'admin_collection_highlighting', name='admin_collection_highlighting'),
+  url(r'^admin/collection/(?P<collection_id>\d+)/sorting$', 'admin_collection_sorting', name='admin_collection_sorting'),
 
   # Ajax
-  url(r'^suggest/(?P<collection>\w+)/(?P<query>\w+)?$', 'query_suggest', name='query_suggest'),
-  url(r'^admin/collection/(?P<collection>\w+)/schema$', 'admin_collection_schema', name='admin_collection_schema'),
-  url(r'^admin/collection/(?P<collection>\w+)/solr_properties$', 'admin_collection_solr_properties', name='admin_collection_solr_properties'),
+  url(r'^suggest/(?P<collection_id>\w+)/(?P<query>\w+)?$', 'query_suggest', name='query_suggest'),
+  url(r'^admin/collection/(?P<collection_id>\w+)/schema$', 'admin_collection_schema', name='admin_collection_schema'),
+  url(r'^admin/collection/(?P<collection_id>\w+)/solr_properties$', 'admin_collection_solr_properties', name='admin_collection_solr_properties'),
   url(r'^admin/collection_delete$', 'admin_collection_delete', name='admin_collection_delete'),
   url(r'^admin/collection_copy$', 'admin_collection_copy', name='admin_collection_copy'),
 )

+ 24 - 24
apps/search/src/search/views.py

@@ -75,7 +75,7 @@ def index(request):
       error['message'] = unicode(str(e), "utf8")
   else:
     hue_collection = hue_collections[0]
-    collection = hue_collections.name
+    collection = hue_collections.id
 
   if hue_collection is not None:
     response = augment_solr_response(response, hue_collection.facets.get_data())
@@ -195,15 +195,15 @@ def admin_collection_copy(request):
 
 
 @allow_admin_only
-def admin_collection_properties(request, collection):
-  hue_collection = Collection.objects.get(name=collection)
+def admin_collection_properties(request, collection_id):
+  hue_collection = Collection.objects.get(id=collection_id)
   solr_collection = SolrApi(SOLR_URL.get()).collection_or_core(hue_collection)
 
   if request.method == 'POST':
     collection_form = CollectionForm(request.POST, instance=hue_collection)
     if collection_form.is_valid():
       hue_collection = collection_form.save()
-      return redirect(reverse('search:admin_collection_properties', kwargs={'collection': hue_collection.name}))
+      return redirect(reverse('search:admin_collection_properties', kwargs={'collection_id': hue_collection.id}))
     else:
       request.error(_('Errors on the form: %s') % collection_form.errors)
   else:
@@ -217,8 +217,8 @@ def admin_collection_properties(request, collection):
 
 
 @allow_admin_only
-def admin_collection_template(request, collection):
-  hue_collection = Collection.objects.get(name=collection)
+def admin_collection_template(request, collection_id):
+  hue_collection = Collection.objects.get(id=collection_id)
   solr_collection = SolrApi(SOLR_URL.get()).collection_or_core(hue_collection)
 
   if request.method == 'POST':
@@ -227,7 +227,7 @@ def admin_collection_template(request, collection):
     return HttpResponse(json.dumps({}), mimetype="application/json")
 
   solr_query = {}
-  solr_query['collection'] = collection
+  solr_query['collection'] = hue_collection.name
   solr_query['q'] = ''
   solr_query['fq'] = ''
   solr_query['rows'] = 5
@@ -244,9 +244,9 @@ def admin_collection_template(request, collection):
 
 
 @allow_admin_only
-def admin_collection_facets(request, collection):
-  solr_collection = SolrApi(SOLR_URL.get()).collection(collection)
-  hue_collection = Collection.objects.get(name=collection)
+def admin_collection_facets(request, collection_id):
+  hue_collection = Collection.objects.get(id=collection_id)
+  solr_collection = SolrApi(SOLR_URL.get()).collection(hue_collection.name)
 
   if request.method == 'POST':
     hue_collection.facets.update_from_post(request.POST)
@@ -260,9 +260,9 @@ def admin_collection_facets(request, collection):
 
 
 @allow_admin_only
-def admin_collection_sorting(request, collection):
-  solr_collection = SolrApi(SOLR_URL.get()).collection(collection)
-  hue_collection = Collection.objects.get(name=collection)
+def admin_collection_sorting(request, collection_id):
+  hue_collection = Collection.objects.get(id=collection_id)
+  solr_collection = SolrApi(SOLR_URL.get()).collection(hue_collection.name)
 
   if request.method == 'POST':
     hue_collection.sorting.update_from_post(request.POST)
@@ -276,9 +276,9 @@ def admin_collection_sorting(request, collection):
 
 
 @allow_admin_only
-def admin_collection_highlighting(request, collection):
-  hue_collection = Collection.objects.get(name=collection)
-  solr_collection = SolrApi(SOLR_URL.get()).collection(collection)
+def admin_collection_highlighting(request, collection_id):
+  hue_collection = Collection.objects.get(id=collection_id)
+  solr_collection = SolrApi(SOLR_URL.get()).collection(hue_collection.name)
 
   if request.method == 'POST':
     hue_collection.result.update_from_post(request.POST)
@@ -294,9 +294,9 @@ def admin_collection_highlighting(request, collection):
 # Ajax below
 
 @allow_admin_only
-def admin_collection_solr_properties(request, collection):
-  solr_collection = SolrApi(SOLR_URL.get()).collection(collection)
-  hue_collection = Collection.objects.get(name=collection)
+def admin_collection_solr_properties(request, collection_id):
+  hue_collection = Collection.objects.get(id=collection_id)
+  solr_collection = SolrApi(SOLR_URL.get()).collection(hue_collection.name)
 
   content = render('admin_collection_properties_solr_properties.mako', request, {
     'solr_collection': solr_collection,
@@ -307,9 +307,9 @@ def admin_collection_solr_properties(request, collection):
 
 
 @allow_admin_only
-def admin_collection_schema(request, collection):
-  solr_schema = SolrApi(SOLR_URL.get()).schema(collection)
-  hue_collection = Collection.objects.get(name=collection)
+def admin_collection_schema(request, collection_id):
+  hue_collection = Collection.objects.get(id=collection_id)
+  solr_schema = SolrApi(SOLR_URL.get()).schema(hue_collection.name)
 
   content = render('admin_collection_properties_solr_schema.mako', request, {
     'solr_schema': solr_schema,
@@ -320,8 +320,8 @@ def admin_collection_schema(request, collection):
 
 
 # TODO security
-def query_suggest(request, collection, query=""):
-  hue_collection = Collection.objects.get(name=collection)
+def query_suggest(request, collection_id, query=""):
+  hue_collection = Collection.objects.get(id=collection_id)
   result = {'status': -1, 'message': 'Error'}
 
   solr_query = {}