summaryrefslogtreecommitdiff
path: root/coip/apps/name/views.py
blob: 3152b0dba0a8259f6973e7d24e18441a48fc83e5 (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
'''
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
from django.contrib.auth.decorators import login_required
from coip.multiresponse import respond_to, json_response
from pprint import pprint

def show_root(request):
    return respond_to(request, {'text/html': 'apps/name/name.html'}, {'name': None, 'memberships': None, 'children': Name.objects.filter(parent=None)})

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})
    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)