summaryrefslogtreecommitdiff
path: root/coip/apps
diff options
context:
space:
mode:
authorLeif Johansson <leifj@sunet.se>2011-03-01 01:25:44 +0100
committerLeif Johansson <leifj@sunet.se>2011-03-01 01:25:44 +0100
commitdfdfc57b631ea681b857b2b038d27d922af605c7 (patch)
treebaa19368a20612251c9ad431149e28fd5bb4da10 /coip/apps
parenta3c3141ad80eb1de6d67b2452a7e92b8c21e02c4 (diff)
leave and join groups
Diffstat (limited to 'coip/apps')
-rw-r--r--coip/apps/membership/models.py35
-rw-r--r--coip/apps/membership/views.py23
-rw-r--r--coip/apps/name/views.py6
3 files changed, 53 insertions, 11 deletions
diff --git a/coip/apps/membership/models.py b/coip/apps/membership/models.py
index 1430f64..0bb1185 100644
--- a/coip/apps/membership/models.py
+++ b/coip/apps/membership/models.py
@@ -9,12 +9,14 @@ from coip.apps.name.models import Name
import datetime
from pprint import pformat
import logging
+from coip.apps.service.models import Service
class Membership(models.Model):
'''
Membership in a namespace/group
'''
user = models.ForeignKey(User,blank=True,null=True,related_name='user')
+ service = models.ForeignKey(Service,blank=True,null=True,related_name='service')
name = models.ForeignKey(Name,related_name='memberships')
enabled = models.BooleanField()
hidden = models.BooleanField()
@@ -33,22 +35,43 @@ class Membership(models.Model):
return "active"
else:
return "inactive";
+
+ def is_user(self):
+ return self.user != None
+
+ def is_service(self):
+ return self.service != None
-def add_member(name,user,hidden=False):
- (m,created) = Membership.objects.get_or_create(user=user,name=name)
+def add_member(name,userorservice,hidden=False):
+ if isinstance(userorservice,User):
+ (m,created) = Membership.objects.get_or_create(user=userorservice,name=name)
+ else:
+ (m,created) = Membership.objects.get_or_create(service=userorservice,name=name)
+
if created or not m.enabled or m.hidden != hidden:
m.enabled = True
m.hidden = hidden
m.save()
-def disable_member(name,user):
- m = Membership.objects.get(name=name,user=user)
+def disable_member(name,userorservice):
+ if isinstance(userorservice,User):
+ m = Membership.objects.get(name=name,user=userorservice)
+ else:
+ m = Membership.objects.get(name=name,service=userorservice)
if m:
m.enabled = False
m.save()
-def remove_member(name,user):
- m = Membership.objects.get(name=name,user=user)
+def remove_member(name,userorservice):
+ if isinstance(userorservice,User):
+ m = Membership.objects.get(name=name,user=userorservice)
+ else:
+ m = Membership.objects.get(name=name,service=userorservice)
if m:
m.delete()
+def has_member(name,userorservice):
+ if isinstance(userorservice,User):
+ return Membership.objects.filter(name=name,user=userorservice)
+ else:
+ return Membership.objects.filter(name=name,service=userorservice) \ No newline at end of file
diff --git a/coip/apps/membership/views.py b/coip/apps/membership/views.py
index 11ce133..2f96251 100644
--- a/coip/apps/membership/views.py
+++ b/coip/apps/membership/views.py
@@ -4,8 +4,11 @@ Created on Jun 23, 2010
@author: leifj
'''
from django.shortcuts import get_object_or_404
-from coip.apps.membership.models import Membership
+from coip.apps.membership.models import Membership, add_member, remove_member
from coip.multiresponse import render403, respond_to
+from django.contrib.auth.models import User
+from coip.apps.name.models import Name
+from django.http import HttpResponseRedirect
def show(request,id):
membership = get_object_or_404(Membership,pk=id)
@@ -17,4 +20,20 @@ def show(request,id):
{'membership': membership,
'render': {'edit': name.has_permission(request.user,'w'),
'delete': name.has_permission(request.user,'d'),
- 'disable': name.has_permission(request.user,'d')}}) \ No newline at end of file
+ 'disable': name.has_permission(request.user,'d')}})
+
+def join(request,id,member=None):
+ name = get_object_or_404(Name,pk=id)
+ user = request.user
+ if member:
+ user = User.objects.get(username=member)
+ add_member(name, user)
+ return HttpResponseRedirect(name.url())
+
+def leave(request,id,member=None):
+ name = get_object_or_404(Name,pk=id)
+ user = request.user
+ if member:
+ user = User.objects.get(username=member)
+ remove_member(name, user)
+ return HttpResponseRedirect(name.url()) \ No newline at end of file
diff --git a/coip/apps/name/views.py b/coip/apps/name/views.py
index c6d0621..90c0773 100644
--- a/coip/apps/name/views.py
+++ b/coip/apps/name/views.py
@@ -39,7 +39,7 @@ def delete(request,id):
name.remove(False)
if parent:
- return HttpResponseRedirect("/name/id/%d" % parent.id)
+ return HttpResponseRedirect(parent.url())
else:
return HttpResponseRedirect("/name");
else:
@@ -64,7 +64,7 @@ def add(request,id):
if form.is_valid():
name = form.save()
name.copyacl(name.parent)
- return HttpResponseRedirect("/name/id/%d" % name.id)
+ return HttpResponseRedirect(name.url())
else:
form = NewNameForm()
@@ -81,7 +81,7 @@ def edit(request,id):
form = NameEditForm(request.POST,instance=name)
if form.is_valid():
form.save()
- return HttpResponseRedirect("/name/id/%d" % name.id)
+ return HttpResponseRedirect(name.url())
else:
form = NameEditForm(instance=name)