summaryrefslogtreecommitdiff
path: root/coip/apps/name/views.py
blob: 6e0132f0bae729f09652363daffc03670c7b14e5 (plain)
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)