소스 검색

[search] Save and load sorting properties

Romain Rigaux 12 년 전
부모
커밋
93edc4c

+ 14 - 3
apps/search/src/search/models.py

@@ -54,7 +54,7 @@ class Facet(models.Model):
     if post_data.get('ranges'):
       data_dict['ranges'] = json.loads(post_data['ranges'])
 
-    if post_data('dates'):
+    if post_data.get('dates'):
       data_dict['dates'] = json.loads(post_data['dates'])
 
     self.data = json.dumps(data_dict)
@@ -121,7 +121,18 @@ class Result(models.Model):
     return Template(self.get_template()).render(result=result)
 
 
-class Sorting(models.Model): pass
+class Sorting(models.Model):
+  _META_TEMPLATE_ATTRS = ['fields']
+
+  data = models.TextField()
+
+  def update_from_post(self, post_data):
+    data_dict = json.loads(self.data)
+
+    if post_data.get('fields'):
+      data_dict['fields'] = json.loads(post_data['fields'])
+
+    self.data = json.dumps(data_dict)  
 
 
 class Core(models.Model):
@@ -160,7 +171,7 @@ def temp_fixture_hook():
                  'dates': [{"type":"date","field":"last_modified","start":"02-13-2013","end":"02-19-2013","gap":"1"}]
               }))
     result = Result.objects.create(data=json.dumps({'template': 'To customize!<br/>'}))
-    sorting = Sorting.objects.create()
+    sorting = Sorting.objects.create(data=json.dumps({'fields': [{"field":"id","label":"My id","asc":False}]}))
 
     Core.objects.create(name='collection1', label='Tweets', facets=facets, result=result, sorting=sorting)
     Core.objects.create(name='collection2', label='Zendesk Tickets', facets=facets, result=result, sorting=sorting)

+ 9 - 4
apps/search/src/search/templates/admin_core_facets.mako

@@ -114,7 +114,7 @@ ${ commonheader(_('Search'), "search", user) | n,unicode }
 
 
       <div class="form-actions" style="margin-top: 80px">
-        <button type="submit" class="btn btn-primary">${_('Save Facets')}</button>
+        <button type="submit" class="btn btn-primary" id="save-facets">${_('Save Facets')}</button>
         <a class="btn" href="${ url('search:admin') }"><i class="icon-list"></i> ${ _('Return to Core list') }</a>
         <a class="btn" href="${ url('search:index') }"><i class="icon-search"></i> ${ _('Back to Search') }</a>
       </div>
@@ -221,7 +221,6 @@ ${ commonheader(_('Search'), "search", user) | n,unicode }
     };
 
     self.submit = function () {
-      console.log(ko.utils.stringifyJson(self.fieldFacets));
       $.ajax("${ url('search:admin_core_facets', core=hue_core.name) }", {
         data: {
           'fields': ko.utils.stringifyJson(self.fieldFacets),
@@ -230,8 +229,14 @@ ${ commonheader(_('Search'), "search", user) | n,unicode }
         },
         contentType: 'application/json',
         type: 'POST',
-        complete: function (data) {
-          location.reload();
+        success: function () {
+          $.jHueNotify.info("${_('Facets updated')}");
+        },
+        error: function (data) {
+          $.jHueNotify.error("${_('Error: ')}" + data);
+        },
+        complete: function() {
+          $("#save-facets").button('reset');
         }
       });
     };

+ 19 - 8
apps/search/src/search/templates/admin_core_sorting.mako

@@ -63,7 +63,7 @@ ${ commonheader(_('Search'), "search", user) | n,unicode }
       </div>
 
       <div class="form-actions" style="margin-top: 80px">
-        <button type="submit" class="btn btn-primary">${_('Save Sorting')}</button>
+        <button type="submit" class="btn btn-primary" id="save-sorting">${_('Save Sorting')}</button>
         <a class="btn" href="${ url('search:admin') }"><i class="icon-list"></i> ${ _('Return to Core list') }</a>
         <a class="btn" href="${ url('search:index') }"><i class="icon-search"></i> ${ _('Back to Search') }</a>
       </div>
@@ -111,7 +111,7 @@ ${ commonheader(_('Search'), "search", user) | n,unicode }
     var self = this;
     self.fields = ko.observableArray(${ hue_core.fields | n,unicode });
 
-    self.sortingFields = ko.observableArray(ko.utils.arrayMap([], function (obj) {
+    self.sortingFields = ko.observableArray(ko.utils.arrayMap(${ hue_core.sorting.data | n,unicode }.fields, function (obj) {
       return new SortingField(obj.field, obj.label, obj.asc);
     }));
 
@@ -133,15 +133,28 @@ ${ commonheader(_('Search'), "search", user) | n,unicode }
     };
 
     self.submit = function () {
-      ##TODO: the sorting fields are in self.sortingFields
-      console.log(ko.utils.stringifyJson(self.sortingFields));
-    };
+      $.ajax("${ url('search:admin_core_sorting', core=hue_core.name) }", {
+        data: {
+          'fields': ko.utils.stringifyJson(self.sortingFields)
+        },
+        contentType: 'application/json',
+        type: 'POST',
+        success: function () {
+          $.jHueNotify.info("${_('Sorting updated')}");
+        },
+        error: function (data) {
+          $.jHueNotify.error("${_('Error: ')}" + data);
+        },
+        complete: function() {
+          $("#save-sorting").button('reset');
+        }
+      });
+    };    
   };
 
   var viewModel = new ViewModel();
 
   $(document).ready(function () {
-
     ko.applyBindings(viewModel);
 
     $("#newFieldAsc").click(function(){
@@ -151,9 +164,7 @@ ${ commonheader(_('Search'), "search", user) | n,unicode }
     $("#newFieldDesc").click(function(){
       viewModel.newFieldAscDesc("desc");
     });
-
   });
 </script>
 
-
 ${ commonfooter(messages) | n,unicode }

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

@@ -135,7 +135,7 @@ def admin_core_facets(request, core):
   if request.method == 'POST':
     hue_core.facets.update_from_post(request.POST)
     hue_core.facets.save()
-    request.info(_('Facets updated'))
+    return HttpResponse(json.dumps({}), mimetype="application/json")
 
   return render('admin_core_facets.mako', request, {
     'solr_core': solr_core,
@@ -148,6 +148,11 @@ def admin_core_sorting(request, core):
   solr_core = SolrApi(SOLR_URL.get()).core(core)
   hue_core = Core.objects.get(name=core)
 
+  if request.method == 'POST':
+    hue_core.sorting.update_from_post(request.POST)
+    hue_core.sorting.save()
+    return HttpResponse(json.dumps({}), mimetype="application/json")
+
   return render('admin_core_sorting.mako', request, {
     'solr_core': solr_core,
     'hue_core': hue_core,