More UI and a basic datastructure
This commit is contained in:
1 parent
6a4620b4d1
commit
8af1a2f2b4
10 files changed
+116
-44
No files matched your search
+12
-12
@@ -1,17 +1,17 @@
|
||||
from django import forms
|
||||
from django.forms.widgets import RadioSelect
|
||||
|
||||
#from radius.models import *
|
||||
#
|
||||
#class TempUserForm(forms.ModelForm):
|
||||
# # TODO : Move this to radius?
|
||||
# class Meta:
|
||||
# model = TempUser
|
||||
class TempUserForm(forms.Form):
|
||||
who = forms.CharField(label='Hvem')
|
||||
who = forms.CharField(label='Hvem', required=True)
|
||||
RANGE_CHOICES = (
|
||||
('1 day', '1 dag'),
|
||||
('2 days', '2 dager'),
|
||||
('7 days', '1 uke (7 dager)'),
|
||||
('1', '1 dag'),
|
||||
('2', '2 dager'),
|
||||
('7', '1 uke (7 dager)'),
|
||||
)
|
||||
duration = forms.ChoiceField(label='Varighet', choices=RANGE_CHOICES)
|
||||
why = forms.CharField(label='Hvorfor')
|
||||
duration = forms.TypedChoiceField(
|
||||
label='Varighet',
|
||||
coerce=int,
|
||||
choices=RANGE_CHOICES,
|
||||
widget=RadioSelect,
|
||||
required=True)
|
||||
why = forms.CharField(label='Hvorfor', required=True)
|
||||
+8
-1
@@ -1,3 +1,10 @@
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
# Create your models here.
|
||||
class TempUserLog(models.Model):
|
||||
who = models.CharField(max_length=255)
|
||||
why = models.CharField(max_length=255)
|
||||
expires = models.DateTimeField()
|
||||
issued_by = models.ForeignKey(User)
|
||||
created = models.DateTimeField(auto_now_add=True)
|
||||
# TODO username and pass
|
||||
+1
-5
@@ -4,7 +4,6 @@
|
||||
# - http://stackoverflow.com/questions/1377446/html-to-pdf-for-a-django-site
|
||||
# - http://stackoverflow.com/questions/2179958/django-pisa-adding-images-to-pdf-output ?
|
||||
|
||||
import uuid
|
||||
import cStringIO as StringIO
|
||||
import ho.pisa as pisa
|
||||
from django.template.loader import get_template
|
||||
@@ -18,10 +17,7 @@ def render_to_pdf(template_src, context_dict):
|
||||
html = template.render(context)
|
||||
result = StringIO.StringIO()
|
||||
|
||||
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("ISO-8859-1")), result)
|
||||
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), result)
|
||||
if not pdf.err:
|
||||
return HttpResponse(result.getvalue(), mimetype='application/pdf')
|
||||
return HttpResponse('We had some errors<pre>%s</pre>' % escape(html))
|
||||
|
||||
def unique_filename():
|
||||
return uuid.uuid4()
|
||||
@@ -1,7 +1,7 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>My Title</title>
|
||||
<title>Midlertidig Bruker For Trådløst Nettverk på Chateau Neuf - {{log.id}}</title>
|
||||
<style type="text/css">
|
||||
@page {
|
||||
size: {{ pagesize }};
|
||||
@@ -18,9 +18,12 @@
|
||||
</head>
|
||||
<body>
|
||||
<div>
|
||||
{% for item in mylist %}
|
||||
{{ item }}
|
||||
{% endfor %}
|
||||
<h1>Midlertidig Bruker For Trådløst Nettverk på Chateau Neuf</h1>
|
||||
Brukernavn: {{log.username}}<br />
|
||||
Passord: {{ log.password }}<br />
|
||||
Utstedt: {{ log.created }}<br />
|
||||
Gyldig til: {{ log.expires }}<br />
|
||||
<!-- LOGO -->
|
||||
</div>
|
||||
<div id="footerContent">
|
||||
{% block page_foot %}
|
||||
|
||||
@@ -3,10 +3,26 @@
|
||||
{% block content %}
|
||||
<h2>Liste over midlertidige brukere</h2>
|
||||
<p>
|
||||
Tabell her:<br />
|
||||
{{ table }}
|
||||
<table>
|
||||
<tr>
|
||||
<th>Produsert</th>
|
||||
<th>Produsert av</th>
|
||||
<th>For hvem</th>
|
||||
<th>Utgår</th>
|
||||
<th>PDF</th>
|
||||
</tr>
|
||||
{% for user in object_list %}
|
||||
<tr>
|
||||
<td>{{ user.created }}</td>
|
||||
<td>{{ user.issued_by }}</td>
|
||||
<td>{{ user.who }}</td>
|
||||
<td>{{ user.expires|timeuntil}}</td>
|
||||
<td><a href="{% url download_pdf tempuserlog_id=user.id %}">PDF-icon</a></td>
|
||||
</tr>
|
||||
{%endfor %}
|
||||
</table>
|
||||
<a href="deleted">Vis utgåtte ...</a>
|
||||
</p>
|
||||
<a href="{% url main.views.system %}" class="btn">« Tilbake</a>
|
||||
<a href="{% url system %}" class="btn">« Tilbake</a>
|
||||
|
||||
{% endblock %}
|
||||
@@ -1,15 +1,17 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
{{errors}}
|
||||
<h2>Lag ny midlertidig bruker</h2>
|
||||
<p>
|
||||
OK, du skal få lage en, men først...
|
||||
</p>
|
||||
<p>OK, du skal få lage en, men først...</p>
|
||||
<form method="post" class="form-stacked">
|
||||
{% csrf_token %}
|
||||
{{ form.as_p }}
|
||||
{{ form }}
|
||||
<p>
|
||||
<br />
|
||||
<button type="submit" class="btn primary">Lag bruker og hent PDF</button>
|
||||
<a href="{% url main.views.system %}" class="btn">Avbryt</a>
|
||||
<a href="{% url system %}" class="btn">Avbryt</a>
|
||||
</p>
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,7 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<p><a href="{% url download_pdf tempuserlog_id=tempuserlog_id %}" class="btn large primary">Last ned PDF</a></p>
|
||||
<a href="{% url system %}" class="btn">Videre »</a>
|
||||
|
||||
{% endblock %}
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
{% block content %}
|
||||
|
||||
<a href="{% url main.views.new %}" class="btn primary">Lag ny midlertidig bruker</a>
|
||||
<a href="{% url main.views.list_users %}" class="btn">Vis midlertidige</a>
|
||||
<a href="{% url new %}" class="btn primary">Lag ny midlertidig bruker</a>
|
||||
<a href="{% url list_users %}" class="btn">Vis midlertidige</a>
|
||||
<a href="{% url django.contrib.auth.views.logout %}" class="btn">Logg ut</a>
|
||||
|
||||
{% endblock %}
|
||||
+18
-3
@@ -1,7 +1,22 @@
|
||||
from django.conf.urls.defaults import patterns, include, url
|
||||
from models import *
|
||||
from django.views.generic.list_detail import object_list # FIXME: subclass?
|
||||
from datetime import datetime
|
||||
|
||||
urlpatterns = patterns('main.views',
|
||||
url(r'^system/', 'system'),
|
||||
url(r'^new/', 'new'),
|
||||
url(r'^list/', 'list_users'),
|
||||
url(r'^system/$', 'system', name='system'),
|
||||
url(r'^new/$', 'new', name='new'),
|
||||
url(r'^new/created/$', 'new_created', name='new_created'),
|
||||
url(r'^list/page(?P<page>[0-9]+)/$',
|
||||
object_list, {
|
||||
'queryset': TempUserLog.objects.filter(expires__gte=datetime.now()).order_by('created').reverse(),
|
||||
'template_name':'private/list.html'
|
||||
}, name='list'),
|
||||
url(r'^list/',
|
||||
object_list, {
|
||||
'queryset': TempUserLog.objects.filter(expires__gte=datetime.now()).order_by('created').reverse(),
|
||||
'template_name':'private/list.html'
|
||||
},
|
||||
name='list_users'),
|
||||
url(r'^download/(?P<tempuserlog_id>[0-9]+)/pdf$', 'download_pdf', name='download_pdf')
|
||||
)
|
||||
+35
-9
@@ -1,7 +1,9 @@
|
||||
# coding: utf-8
|
||||
import simplejson as json
|
||||
import datetime
|
||||
|
||||
from django.http import HttpResponse, HttpResponseRedirect
|
||||
from django.conf import settings
|
||||
from django.contrib.auth import login
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib.auth.forms import AuthenticationForm
|
||||
@@ -10,11 +12,14 @@ from django.core.urlresolvers import reverse
|
||||
from django.shortcuts import render_to_response, get_object_or_404
|
||||
from django.template import RequestContext
|
||||
from django.views.decorators.csrf import csrf_protect
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.contrib import messages
|
||||
|
||||
|
||||
from models import *
|
||||
from forms import *
|
||||
|
||||
from pdf import render_to_pdf, unique_filename
|
||||
from pdf import render_to_pdf
|
||||
|
||||
def index(request):
|
||||
if request.method == "POST":
|
||||
@@ -35,17 +40,38 @@ def new(request):
|
||||
if request.method == "POST":
|
||||
form = TempUserForm(data=request.POST)
|
||||
if form.is_valid():
|
||||
# generate and save the filename for the new pdf
|
||||
fn = unique_filename()
|
||||
download_pdf()
|
||||
|
||||
duration = datetime.timedelta(days=form.cleaned_data['duration'])
|
||||
expires = datetime.datetime.now() + duration
|
||||
log = TempUserLog(
|
||||
who=form.cleaned_data['who'],
|
||||
why=form.cleaned_data['why'],
|
||||
expires=expires,
|
||||
issued_by=request.user)
|
||||
#TODO : generate username and pasword
|
||||
#TODO : save in radiusdb
|
||||
log.save()
|
||||
messages.success(request, log.id) # Store the id in session, since we are redirecting
|
||||
return HttpResponseRedirect( reverse('main.views.new_created') )
|
||||
else:
|
||||
form = TempUserForm(request.POST)
|
||||
return render_to_response('private/new.html', locals(), context_instance=RequestContext(request))
|
||||
form = TempUserForm()
|
||||
|
||||
return render_to_response('private/new.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
def new_created(request):
|
||||
# Retrieve the last id from session
|
||||
storage = messages.get_messages(request)
|
||||
msgs = [message for message in storage]
|
||||
tempuserlog_id = msgs[0].message
|
||||
return render_to_response('private/new_created.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
|
||||
@login_required
|
||||
def list_users(request):
|
||||
# generic view?
|
||||
users = TempUserLog.objects.all()
|
||||
return render_to_response('private/list.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
@@ -54,14 +80,14 @@ def system(request):
|
||||
|
||||
|
||||
@login_required
|
||||
def download_pdf(request):
|
||||
# TODO Retrieve data
|
||||
results = [1,2,3,4,5,'lol']
|
||||
def download_pdf(request, tempuserlog_id=-1):
|
||||
log = get_object_or_404(TempUserLog, pk=tempuserlog_id)
|
||||
|
||||
return render_to_pdf(
|
||||
'pdf/new_temp_user.html',
|
||||
{
|
||||
'pagesize':'A4',
|
||||
'mylist': results,
|
||||
'log': log,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
Reference in new issue
Block a user