summaryrefslogtreecommitdiff
path: root/coip/apps/invitation
diff options
context:
space:
mode:
authorLeif Johansson <leifj@sunet.se>2012-04-20 10:42:45 +0200
committerLeif Johansson <leifj@sunet.se>2012-04-20 10:42:45 +0200
commit131f7f2d869d394ac6e942c1135529033f1e0ca2 (patch)
tree128e490a425be8e9834ffdc216743c306d96c84e /coip/apps/invitation
parent241905ce73223ed97b6ac9c62d8250b9659f6e3a (diff)
scim v0.1newprofiles2
Diffstat (limited to 'coip/apps/invitation')
-rw-r--r--coip/apps/invitation/models.py68
-rw-r--r--coip/apps/invitation/views.py7
2 files changed, 66 insertions, 9 deletions
diff --git a/coip/apps/invitation/models.py b/coip/apps/invitation/models.py
index fabc145..22a4492 100644
--- a/coip/apps/invitation/models.py
+++ b/coip/apps/invitation/models.py
@@ -5,10 +5,20 @@ Created on Jun 23, 2010
'''
from django.db import models
from django.contrib.auth.models import User
-from coip.apps.name.models import Name
+from coip.apps.name.models import Name, lookup
from django.core.mail import send_mail
import logging
from coip.settings import PREFIX_URL, NOREPLY
+from coip.apps.scim.schema import scim_simple_attribute, ScimAttribute,\
+ scim_reference_attribute
+from coip.apps.scim import types
+from coip.apps.resource.models import object_for_uuid
+from coip.apps.auth.utils import nonce
+from django.dispatch.dispatcher import receiver
+from django.db.models.signals import post_save
+from actstream.signals import action
+from django.core.exceptions import ObjectDoesNotExist
+from iso8601 import iso8601
class Invitation(models.Model):
'''
@@ -26,8 +36,8 @@ class Invitation(models.Model):
def __unicode__(self):
return "%s invited to %s by %s" % (self.email,self.name,self.inviter)
- def send_email(self,request):
- pinviter = request.user.get_profile()
+ def send_email(self):
+ pinviter = self.inviter.get_profile()
send_mail('Invitation to join \'%s\'' % (self.name.shortname()),
'''
%s (%s) has invited you to join \'%s\':
@@ -48,3 +58,55 @@ To view information about \'%s\' open this link in your browser:
fail_silently=False)
return
+try:
+ from coip.apps.resource.models import resources
+ resources.register(Invitation)
+except ImportError:
+ pass
+
+@receiver(post_save,sender=Invitation)
+def auto_create_resource(sender,**kwargs):
+ if kwargs['created']:
+ invitation = kwargs['instance']
+ user = invitation.inviter
+ invitation.send_email()
+ action.send(user,verb='invited',target=invitation.name,action_object=invitation)
+
+class InvitationSchema():
+ URI = "uri:mace:swami.se:scim:schema:coip:1.0"
+ ATTRIBUTES = ('mail','externalId','groupId','message','expires','userId')
+
+ externalId = scim_simple_attribute('id')
+ mail = scim_simple_attribute('email')
+ groupId = scim_reference_attribute('name')
+ message = scim_simple_attribute('message')
+ expires = scim_simple_attribute('expires')
+ userId = scim_reference_attribute('inviter')
+
+ def create(self,model,d):
+ user = None
+ if d.has_key('userId'):
+ user = object_for_uuid(d['userId'])
+ elif d.has_key('userName'):
+ try:
+ user = User.objects.get(username=d['userName'])
+ except ObjectDoesNotExist:
+ pass
+
+ if user == None:
+ raise Exception("unspecified user")
+
+ name = None
+ if d.has_key('groupId'):
+ name = object_for_uuid(d['groupId'])
+ elif d.has_key('groupName'):
+ name = lookup(d['groupName'])
+
+ if name == None:
+ raise Exception("unspecified group")
+
+ expires = iso8601.parse_date(d['expires'])
+ invitation,created = Invitation.objects.get_or_create(inviter=user,nonce=nonce(),name=name,email=d['mail'],expires=expires)
+ return invitation
+
+types.register(Invitation,"Invitations",[InvitationSchema()]) \ No newline at end of file
diff --git a/coip/apps/invitation/views.py b/coip/apps/invitation/views.py
index 8e09ddc..2d11764 100644
--- a/coip/apps/invitation/views.py
+++ b/coip/apps/invitation/views.py
@@ -28,15 +28,12 @@ def invite(request,id):
form = InvitationForm(request.POST,instance=invitation)
if form.is_valid():
invitation = form.save()
- invitation.send_email(request)
return HttpResponseRedirect("/name/id/%d" % (name.id))
else:
exp = datetime.datetime.now()+datetime.timedelta(days=1)
invitation=Invitation(message="Please consider joining my group!",expires=exp.strftime("%Y-%m-%d"))
form = InvitationForm(instance=invitation);
- action.send(user,verb='invited',target=name,action_object=invitation)
-
return respond_to(request,{'text/html': 'apps/invitation/edit.html'},{'form': form,'name': name,'formtitle': 'Invite someone to join %s' % (name.short),'submitname': 'Invite User'})
@login_required
@@ -74,6 +71,4 @@ def resend(request,id):
action.send(request.user,verb='renewed invitation to',target=name,action_object=invitation)
invitation.send_email()
- return HttpResponseRedirect("/name/id/%d" % (name.id))
-
-
+ return HttpResponseRedirect("/name/id/%d" % (name.id)) \ No newline at end of file