From 08b06e70f6a5f9f4d51317b0b2930238e09ee8c7 Mon Sep 17 00:00:00 2001 From: Leif Johansson Date: Wed, 7 Jul 2010 22:01:53 +0200 Subject: integrated invitation management into membership application --- coip/apps/auth/utils.py | 9 +++++++++ coip/apps/invitation/__init__.py | 0 coip/apps/invitation/admin.py | 4 ---- coip/apps/invitation/forms.py | 11 ----------- coip/apps/invitation/models.py | 34 ---------------------------------- coip/apps/invitation/views.py | 33 --------------------------------- coip/apps/membership/forms.py | 8 +++++++- coip/apps/membership/models.py | 11 ++++++++++- coip/apps/membership/views.py | 32 +++++++++++++++++++++++++++++--- 9 files changed, 55 insertions(+), 87 deletions(-) create mode 100644 coip/apps/auth/utils.py delete mode 100644 coip/apps/invitation/__init__.py delete mode 100644 coip/apps/invitation/admin.py delete mode 100644 coip/apps/invitation/forms.py delete mode 100644 coip/apps/invitation/models.py delete mode 100644 coip/apps/invitation/views.py (limited to 'coip/apps') diff --git a/coip/apps/auth/utils.py b/coip/apps/auth/utils.py new file mode 100644 index 0000000..b7bb044 --- /dev/null +++ b/coip/apps/auth/utils.py @@ -0,0 +1,9 @@ +''' +Created on Jul 7, 2010 + +@author: leifj +''' +from uuid import uuid4 + +def nonce(): + return uuid4().hex; \ No newline at end of file diff --git a/coip/apps/invitation/__init__.py b/coip/apps/invitation/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/coip/apps/invitation/admin.py b/coip/apps/invitation/admin.py deleted file mode 100644 index 722b147..0000000 --- a/coip/apps/invitation/admin.py +++ /dev/null @@ -1,4 +0,0 @@ -from django.contrib import admin -from coip.apps.invitation.models import Invitation - -admin.site.register(Invitation) \ No newline at end of file diff --git a/coip/apps/invitation/forms.py b/coip/apps/invitation/forms.py deleted file mode 100644 index 3370597..0000000 --- a/coip/apps/invitation/forms.py +++ /dev/null @@ -1,11 +0,0 @@ -''' -Created on Jul 5, 2010 - -@author: leifj -''' -from django import forms -from coip.apps.invitation.models import Invitation - -class InvitationForm(forms.ModelForm): - class Meta: - model = Invitation \ No newline at end of file diff --git a/coip/apps/invitation/models.py b/coip/apps/invitation/models.py deleted file mode 100644 index 951fa59..0000000 --- a/coip/apps/invitation/models.py +++ /dev/null @@ -1,34 +0,0 @@ -''' -Created on Jun 23, 2010 - -@author: leifj -''' - -from django.db import models -from django.contrib.auth.models import User -from coip.apps.membership.models import Membership -from pprint import pprint -from uuid import uuid4 -import datetime - -class Invitation(models.Model): - ''' - Represents an invitation to an application - ''' - sender = models.ForeignKey(User, unique=True) - membership = models.ForeignKey(Membership, unique=True) - timecreated = models.DateTimeField(auto_now_add=True) - lastupdated = models.DateTimeField(auto_now=True) - expires = models.DateTimeField() - token = models.TextField(unique=True) - - - def __init__(self): - self.token = uuid4() - - def valid(self): - return datetime.date.today() > self.expires - - def send_email(self): - pprint("sent email to "+self.to) - return \ No newline at end of file diff --git a/coip/apps/invitation/views.py b/coip/apps/invitation/views.py deleted file mode 100644 index 63f017f..0000000 --- a/coip/apps/invitation/views.py +++ /dev/null @@ -1,33 +0,0 @@ -''' -Created on Jun 23, 2010 - -@author: leifj -''' -from django.contrib.auth.decorators import login_required -from coip.apps.invitation.forms import InvitationForm -from coip.apps.invitation.models import Invitation -from django.shortcuts import render_to_response -from django.http import HttpResponseRedirect - -@login_required -def create(request): - user = request.user - if request.method == 'POST': - form = InvitationForm(request.POST) - if form.is_valid(): - to = form.cleaned_data["to"] - expires = form.cleaned_data["expires"] - invitation = Invitation(sender=user,to=to,expires=expires) - invitation.save() - invitation.send_email() - return HttpResponseRedirect("/user/home") - else: - form = InvitationForm({}); - - return render_to_response('apps/invitation/create.html') - -def accept(request,token): - user = request.user - invitation = Invitation.objects.get(token=token) - - \ No newline at end of file diff --git a/coip/apps/membership/forms.py b/coip/apps/membership/forms.py index 9adab0d..c74307b 100644 --- a/coip/apps/membership/forms.py +++ b/coip/apps/membership/forms.py @@ -5,7 +5,13 @@ Created on Jun 23, 2010 ''' from django import forms from coip.apps.membership.models import Membership +from django.forms.widgets import Textarea class MembershipForm(forms.ModelForm): class Meta: - model = Membership \ No newline at end of file + model = Membership + +class InvitationForm(forms.Form): + email = forms.EmailField() + expires = forms.DateTimeField() + message = forms.CharField(widget=Textarea) \ No newline at end of file diff --git a/coip/apps/membership/models.py b/coip/apps/membership/models.py index 2186607..72b102a 100644 --- a/coip/apps/membership/models.py +++ b/coip/apps/membership/models.py @@ -7,17 +7,21 @@ from django.db import models from django.contrib.auth.models import User from coip.apps.name.models import Name import datetime +from pprint import pprint class Membership(models.Model): ''' Membership in a namespace/group ''' user = models.ForeignKey(User,unique=True,blank=True) + inviter = models.ForeignKey(User,unique=True,blank=True) + name = models.ForeignKey(Name,related_name='memberships') + email = models.EmailField(blank=True,null=True) + nonce = models.CharField(max_length=255,blank=True,null=True) enabled = models.BooleanField() timecreated = models.DateTimeField(auto_now_add=True) lastupdated = models.DateTimeField(auto_now=True) expires = models.DateTimeField(blank=True) - name = models.ForeignKey(Name,related_name='memberships') def __unicode__(self): return "%s in %s" % (self.user,self.name) @@ -30,3 +34,8 @@ class Membership(models.Model): return "active" else: return "inactive"; + + def send_email(self): + pprint("sent email to "+self.to) + return + diff --git a/coip/apps/membership/views.py b/coip/apps/membership/views.py index 7a06a21..6a500d9 100644 --- a/coip/apps/membership/views.py +++ b/coip/apps/membership/views.py @@ -5,9 +5,35 @@ Created on Jun 23, 2010 ''' from django.contrib.auth.decorators import login_required from coip.apps.membership.models import Membership +from coip.apps.membership.forms import InvitationForm +from django.http import HttpResponseRedirect +from coip.apps.auth.utils import nonce +from coip.multiresponse import respond_to +#@login_required +#def memberships(request,name): +# +# Membership.objects.get(name) + + @login_required -def memberships(request,name): +def invite(request): + user = request.user + if request.method == 'POST': + form = InvitationForm(request.POST) + if form.is_valid(): + email = form.cleaned_data["email"] + expires = form.cleaned_data["expires"] + message = form.cleaned_data["message"] + membership = Membership(inviter=user,email=email,message=message,expires=expires,nonce=nonce()) + membership.save() + membership.send_email() + return HttpResponseRedirect("/membership/id/"+membership.id) + else: + form = InvitationForm({}); - Membership.objects.get(name) - \ No newline at end of file + return respond_to(request,{'text/html': 'apps/invitation/create.html'},{'form': form}) + +def accept(request,nonce): + user = request.user + membership = Membership.objects.get(nonce=nonce) \ No newline at end of file -- cgit v1.1