editor fixes
[redakcja.git] / apps / organizations / views.py
1 # Create your views here.
2 from django.contrib.auth.decorators import login_required
3 from django.contrib.auth.models import User
4 from django.shortcuts import render, redirect
5 from django.http import HttpResponse, Http404
6 #from django.views.decorators import require_post
7 from .forms import OrganizationForm, UserCardForm
8 from .models import Organization, Membership, UserCard
9
10 @login_required
11 def org_new(request):
12     if request.method == 'POST':
13         form = OrganizationForm(request.POST, request.FILES)
14         if form.is_valid():
15             org = form.save()
16             org.set_user_status(request.user, Membership.Status.OWNER)
17             return redirect(org.get_absolute_url())
18     else:
19         form = OrganizationForm()
20     return render(request, 'organizations/new.html', {'form': form})
21
22
23 def main(request, pk, tab='documents'):
24     try:
25         org = Organization.objects.get(pk=pk)
26     except Organization.DoesNotExist:
27         raise Http404
28
29     my_status = org.get_user_status(request.user)
30     am_owner = my_status == Membership.Status.OWNER
31     am_member = am_owner or my_status == Membership.Status.REGULAR
32
33     return render(request, 'organizations/main.html', {
34             'org': org,
35             'tab': tab,
36             'my_status': my_status,
37             'am_owner': am_owner,
38             'am_member': am_member,
39         })
40
41 def user_card(request, pk):
42     try:
43         user = User.objects.get(pk=pk)
44     except User.DoesNotExist:
45         raise Http404
46     card, created = UserCard.objects.get_or_create(pk=user.pk)
47     return render(request, 'organizations/user_card.html', {
48             'card': card,
49         })
50
51
52 @login_required
53 def edit(request, pk):
54     try:
55         org = Organization.objects.get(pk=pk)
56     except Organization.DoesNotExist:
57         raise Http404
58
59     if request.method == 'POST':
60         form = OrganizationForm(request.POST, request.FILES, instance=org)
61         if form.is_valid():
62             org = form.save()
63             return redirect(org.get_absolute_url())
64     else:
65         form = OrganizationForm(instance=org)
66     return render(request, 'organizations/edit.html', {'form': form})
67
68
69 @login_required
70 def user_edit(request):
71     card, created = UserCard.objects.get_or_create(pk=request.user.pk)
72     if request.method == 'POST':
73         form = UserCardForm(request.POST, request.FILES, instance=card)
74         if form.is_valid():
75             card = form.save()
76             return redirect(card.get_absolute_url())
77     else:
78         form = UserCardForm(instance=card)
79     return render(request, 'organizations/edit_user.html', {'form': form})
80
81
82 @login_required
83 def join(request, pk):
84     try:
85         org = Organization.objects.get(pk=pk)
86     except Organization.DoesNotExist:
87         raise Http404
88
89     if request.method == 'POST':
90         org.set_user_status(request.user, Membership.Status.PENDING)
91         return redirect('organizations_members', org.pk)
92
93     return render(request, 'organizations/join.html', {'org': org})
94
95 @login_required
96 #@POST_required
97 def membership(request, pk):
98     try:
99         org = Organization.objects.get(pk=pk)
100     except Organization.DoesNotExist:
101         raise Http404
102
103     try:
104         user = User.objects.get(pk=request.POST['user'])
105     except KeyError, User.DoesNotExist:
106         pass
107     else:
108         if user != request.user:
109             action = request.POST.get('action')
110             if action:
111                 if action == 'remove':
112                     action = None
113                 org.set_user_status(user, action)
114     return redirect('organizations_members', org.pk)
115
116
117 def organizations(request):
118     return render(request, "organizations/organizations.html", {
119         'organizations': Organization.objects.all(),
120     })