From ca24a30ec6940052a259db5b38e85731ee7a3d27 Mon Sep 17 00:00:00 2001
From: Johannes Raggam <raggam-nl@adm.at>
Date: Wed, 25 May 2011 19:14:37 +0200
Subject: [PATCH] finalize form with date/time submission functionality

---
 nop/templates/nop/nop_form.html | 25 +++++++++---
 nop/views.py                    | 72 ++++++++++++++++++++++++---------
 2 files changed, 74 insertions(+), 23 deletions(-)

diff --git a/nop/templates/nop/nop_form.html b/nop/templates/nop/nop_form.html
index 71e16a2d..e4efcd95 100644
--- a/nop/templates/nop/nop_form.html
+++ b/nop/templates/nop/nop_form.html
@@ -10,11 +10,11 @@
 
   <script type="text/javascript"><!--
     $(document).ready(function() {
-      $(":date").dateinput({
+      $("#nop_date").dateinput({
         format: 'yyyy-mm-dd',
         firstDay: 1
         });
-      $("#time").AnyTime_picker({
+      $("#nop_time").AnyTime_picker({
         format: "%H:%i",
         labelTitle: "Zeit",
         labelHour: "Stunde",
@@ -27,10 +27,25 @@
 <body>
 
   <div id="content-main" class="show-detail">
-    <input type="date" id="date" class="date" value="" />
-    <input type="text" id="time" class="date" value="" />
+    <form action="" method="post">{% csrf_token %}
+      {{ form.as_table }}
+      <input type="submit" value="senden" />
+    </form>
+
+    {% if nowplaying %}
+    <ul>
+      {% for track in nowplaying %}
+      <li>
+        <small>{{track.datetime}}:</small>
+        <strong>{{track.artist}}</strong> -
+        {{track.title}} -
+        {{track.album}}
+        in der Sendung <em>{{track.showtitle}}</em>
+      </li>
+      {% endfor %}
+    </ul>
+    {% endif %}
   </div>
 
 </body>
 </html>
-
diff --git a/nop/views.py b/nop/views.py
index b633422e..610330ff 100644
--- a/nop/views.py
+++ b/nop/views.py
@@ -1,24 +1,39 @@
-from django.views.generic import simple
+from django.core.context_processors import csrf
+from django.shortcuts import render_to_response
 from django.http import HttpResponse
+from django import forms
 from models import Master
 import json
 import time
+from datetime import datetime
+
+class NopForm(forms.Form):
+    date = forms.DateField(
+            required=True,
+            initial=datetime.date(datetime.now()),
+            widget=forms.DateInput(
+                format='%Y-%m-%d',
+                attrs={'id':'nop_date', 'class':'date'})
+            )
+    time = forms.TimeField(
+            required=True,
+            initial=datetime.time(datetime.now()),
+            widget=forms.TimeInput(
+                format='%H:%M',
+                attrs={'id':'nop_time', 'class':'date'})
+            )
 
-def get_current(request):
 
+def _current():
     #current = int(time.time())*1000000
     #time.gmtime(Master.objects.using('nop').all()[6000].timestamp//1000000)
     # select all where timestamp < givenTS, get most recent one -> order DESC
 
     # reverse sorted. get the first object = last played
     result = Master.objects.using('nop').all()[0]
-    response = json.dumps({'artist': result.artist, 'title': result.title})
-
-    #return HttpResponse(response, mimetype='application/json')
-    return HttpResponse(response, mimetype='text/plain')
-
-def get(request, year=None, month=None, day=None, hour=None, minute=None):
+    return {'artist': result.artist, 'title': result.title}
 
+def _bydate(year=None, month=None, day=None, hour=None, minute=None):
     try:
         # tm_year,tm_mon,tm_mday,tm_hour,tm_min,tm_sec,tm_wday,tm_yday,tm_isdst
         ts = int(time.mktime((
@@ -29,19 +44,40 @@ def get(request, year=None, month=None, day=None, hour=None, minute=None):
                 int(minute),0,0,0,-1))) * 1000000
 
         result = Master.objects.using('nop').filter(timestamp__lt=ts)[:5]
-        response = json.dumps(
-                [{'artist': item.artist, 'title': item.title, 'album': item.album,
-                  'datetime': time.strftime('%Y-%m-%d %H:%M',
-                      time.localtime(item.timestamp//1000000)),
-                  'showtitle': item.showtitle} for item in result])
+        return [{'artist': item.artist, 'title': item.title, 'album': item.album,
+                   'datetime': time.strftime('%Y-%m-%d %H:%M',
+                       time.localtime(item.timestamp//1000000)),
+                   'showtitle': item.showtitle} for item in result]
     except: # all errors
-        response = ''
+        return None
+
+
+def get_current(request):
+    response = json.dumps(_current())
+
+    #return HttpResponse(response, mimetype='application/json')
+    return HttpResponse(response, mimetype='text/plain')
+
+def get(request, year=None, month=None, day=None, hour=None, minute=None):
+    response = json.dumps(_bydate(year, month, day, hour, minute))
 
     #return HttpResponse(response, mimetype='application/json')
     return HttpResponse(response, mimetype='text/plain')
 
+
 def nop_form(request):
-    extra_context = {'year':None, 'month':None, 'day':None, 'hour':None, 'minute': None}
-    if 'year' in request.GET:
-        pass
-    return simple.direct_to_template(request, extra_context=extra_context, template='nop/nop_form.html')
+    context = {}
+    context.update(csrf(request))
+    if request.method == 'POST':
+        form = NopForm(request.POST)
+        if form.is_valid():
+            date = form.cleaned_data['date']
+            time = form.cleaned_data['time']
+    else:
+        form = NopForm()
+        date = datetime.date(datetime.now())
+        time = datetime.time(datetime.now())
+    result = _bydate(date.year, date.month, date.day, time.hour, time.minute)
+    context['nowplaying'] = result
+    context['form'] = form
+    return render_to_response('nop/nop_form.html', context)
-- 
GitLab