maposmatic-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Maposmatic-dev] [PATCH maposmatic 1/2] Implement basic search functiona


From: Maxime Petazzoni
Subject: [Maposmatic-dev] [PATCH maposmatic 1/2] Implement basic search functionality
Date: Tue, 19 Jan 2010 16:39:01 +0100

---
 www/maposmatic/views.py                |   35 ++++++++++++++++++++++++++++---
 www/media/style.css                    |    1 -
 www/templates/maposmatic/all_maps.html |    4 ++-
 3 files changed, 34 insertions(+), 6 deletions(-)

diff --git a/www/maposmatic/views.py b/www/maposmatic/views.py
index 452212a..fd56dff 100644
--- a/www/maposmatic/views.py
+++ b/www/maposmatic/views.py
@@ -27,7 +27,8 @@
 from django.core.paginator import Paginator
 from django.forms.util import ErrorList
 from django.forms import CharField, ChoiceField, FloatField, Select, 
RadioSelect, \
-                         ModelForm, ValidationError, IntegerField, HiddenInput
+                         ModelForm, ValidationError, IntegerField, 
HiddenInput, \
+                         Form
 from django.shortcuts import get_object_or_404, render_to_response
 from django.http import HttpResponseRedirect, HttpResponseBadRequest, 
HttpResponse
 from django.utils.translation import ugettext_lazy as _
@@ -275,8 +276,32 @@ def get_letters():
     # who don't?
     return [chr(i) for i in xrange(ord('A'), ord('Z')+1)]
 
+class MapSearchForm(Form):
+    query = CharField(min_length=1, required=True)
+
 def all_maps(request):
-    map_list = (MapRenderingJob.objects.filter(status=2)
+    map_list = None
+
+    if request.method == 'POST':
+        form = MapSearchForm(request.POST)
+        if form.is_valid():
+            map_list = (MapRenderingJob.objects
+                        .filter(status=2)
+                        .filter(resultmsg='ok')
+                        .filter(maptitle__icontains=form.cleaned_data['query'])
+                        .order_by('maptitle')
+                        .order_by('-submission_time'))
+            if len(map_list) == 1:
+                return HttpResponseRedirect('/jobs/%d' % map_list[0].id)
+
+            # TODO: find a way to have a working paginator with search. For
+            # now, just make sure we don't have more than ITEMS_PER_PAGE
+            # results.
+            map_list = map_list[:www.settings.ITEMS_PER_PAGE]
+    else:
+        form = MapSearchForm()
+
+    map_list = map_list or (MapRenderingJob.objects.filter(status=2)
             .filter(resultmsg="ok")
             .order_by("maptitle"))
     paginator = Paginator(map_list, www.settings.ITEMS_PER_PAGE)
@@ -291,7 +316,8 @@ def all_maps(request):
     except (EmptyPage, InvalidPage):
         maps = paginator.page(paginator.num_pages)
     return render_to_response('maposmatic/all_maps.html',
-                              { 'maps': maps, 'letters': get_letters() },
+                              { 'maps': maps, 'letters': get_letters(),
+                                'form': form },
                               context_instance=RequestContext(request))
 
 def all_maps_by_letter(request, letter):
@@ -314,7 +340,8 @@ def all_maps_by_letter(request, letter):
         maps = paginator.page(paginator.num_pages)
     return render_to_response('maposmatic/all_maps.html',
                               { 'maps': maps, 'letters': get_letters(),
-                                'current_letter': letter},
+                                'current_letter': letter,
+                                'form': MapSearchForm() },
                               context_instance=RequestContext(request))
 
 def query_nominatim(request, format, squery):
diff --git a/www/media/style.css b/www/media/style.css
index da271e1..f24525e 100644
--- a/www/media/style.css
+++ b/www/media/style.css
@@ -271,7 +271,6 @@ table.jobinfo td.info {
 
 div.mapsearch {
   float: right;
-  margin-top: 1em;
   font-style: italic;
 }
 
diff --git a/www/templates/maposmatic/all_maps.html 
b/www/templates/maposmatic/all_maps.html
index 860c8a4..ac1b6f9 100644
--- a/www/templates/maposmatic/all_maps.html
+++ b/www/templates/maposmatic/all_maps.html
@@ -30,7 +30,9 @@
 {% block menu-maps %}class="activelink"{% endblock %}
 
 {% block page %}
-<div class="mapsearch"><!-- <input type="text" name="map_search" /><input 
type="submit" value="{% trans "Search" %}" />-->{% trans "Search coming soon!" 
%}</div>
+<div class="mapsearch">
+  <form action="{% url maps %}" method="post">{{ form.query }}<input 
type="submit" value="{% trans "Search" %}" /></form>
+</div>
 
 <h1><a href="{% url maps %}">{% trans "Maps" %}</a></h1>
 
-- 
1.6.3.3.277.g88938c





reply via email to

[Prev in Thread] Current Thread [Next in Thread]