1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
'''
Created on Jul 6, 2010
@author: leifj
'''
from coip.apps.name.models import Name, lookup, traverse
from django.core.exceptions import ObjectDoesNotExist
from django.http import HttpResponseNotFound, HttpResponseForbidden,\
HttpResponseRedirect
from django.contrib.auth.decorators import login_required
from coip.multiresponse import respond_to, json_response
from pprint import pprint
from coip.apps.name.forms import NameEditForm
from twisted.python.reflect import ObjectNotFound
def edit(request,id):
name = None
try:
name = Name.objects.get(id=id)
except ObjectNotFound:
return HttpResponseNotFound()
if not name.has_permission(request.user,'#w'):
return HttpResponseForbidden()
if request.method == 'POST':
form = NameEditForm(request.POST,instance=name)
if form.is_valid():
form.save()
return HttpResponseRedirect("/name/id/%d" % name.id)
else:
form = NameEditForm(instance=name)
return respond_to(request,{'text/html': 'apps/name/edit.html'},{'form': form,'name': name})
def show_root(request):
return respond_to(request,
{'text/html': 'apps/name/name.html'},
{'name': None, 'memberships': None, 'edit': False})
def show(request,name):
if not name:
return HttpResponseNotFound()
if name.has_permission(request.user,'r'):
return respond_to(request,
{'text/html': 'apps/name/name.html'},
{'name': name,
'memberships': name.memberships,
'delete': name.has_permission(request.user,'#d'),
'insert': name.has_permission(request.user,'#i'),
'edit': name.has_permission(request.user,'#w')})
else:
return HttpResponseForbidden()
@login_required
def show_by_name(request,n=None):
if not n:
return show_root(request)
try:
return show(request,lookup(n))
except ObjectDoesNotExist:
return HttpResponseNotFound()
@login_required
def show_by_id(request,id=None):
if not id:
return show_root(request)
try:
return show(request,Name.objects.get(id=id))
except ObjectDoesNotExist:
return HttpResponseNotFound()
def _tree_node(name,depth):
state = 'closed'
return {'data': { 'title': name.relative_name(), 'attr': {'href': '/name/id/%d' % name.id} },
'state': state,
'attr': {'id': name.id}}
def _tree(request,id=None,includeroot=False):
name = None
if id:
name = Name.objects.get(id=id)
depth = 3
if request.GET.has_key('depth'):
depth = request.GET['depth']
t = traverse(name,_tree_node,request.user,depth,includeroot)
pprint(t)
return json_response(t)
@login_required
def rtree(request,id=None):
return _tree(request,id,True)
@login_required
def ctree(request,id=None):
return _tree(request,id,False)
|