Implement invite deleting/revoking
This commit is contained in:
@@ -14,6 +14,10 @@ class Invite(models.Model):
|
||||
code = models.CharField(max_length=30)
|
||||
creator = models.ForeignKey(User, related_name='invites')
|
||||
claimer = models.OneToOneField(User, related_name='claimed_invite', blank=True, null=True)
|
||||
deleted = models.BooleanField(default=False)
|
||||
|
||||
class Meta:
|
||||
ordering = ['deleted']
|
||||
|
||||
@models.permalink
|
||||
def get_absolute_url(self):
|
||||
|
@@ -7,6 +7,7 @@ urlpatterns = patterns('profiles',
|
||||
url(r'^register', 'views.register'),
|
||||
url(r'^invites/claim$', 'views.claimInvite'),
|
||||
url(r'^invites/claim/(?P<code>.+)$', 'views.claimInvite'),
|
||||
url(r'^invites/delete/(?P<code>.+)$', 'views.deleteInvite'),
|
||||
url(r'^invites/new$', 'views.createInvite'),
|
||||
url(r'^invites$', 'views.invites'),
|
||||
url(r'^edit$', 'views.edit'),
|
||||
|
@@ -82,6 +82,16 @@ def register(request):
|
||||
return HttpResponseRedirect("/")
|
||||
return render_to_response('profiles/register.html', {'userForm': userForm, 'profileForm': profileForm, 'invite':invite}, context_instance = RequestContext(request))
|
||||
|
||||
@login_required
|
||||
def deleteInvite(request, code=None):
|
||||
invite = models.Invite.objects.get(code__exact=code)
|
||||
if invite.claimer:
|
||||
return HttpResponseRedirect(reverse('profiles.views.invites'))
|
||||
if request.method == 'POST':
|
||||
invite.deleted = True
|
||||
invite.save()
|
||||
return HttpResponseRedirect(reverse('profiles.views.invites'))
|
||||
return render_to_response('profiles/delete_invite.html', {'invite':invite}, context_instance = RequestContext(request))
|
||||
|
||||
def claimInvite(request, code=None):
|
||||
if request.user.is_authenticated():
|
||||
|
@@ -153,3 +153,8 @@ tr.sticky a:link {
|
||||
color: #fff;
|
||||
border: 1px solid white;
|
||||
}
|
||||
|
||||
#invite-table tr.deleted {
|
||||
background-color:#000;
|
||||
color:#aaa;
|
||||
}
|
||||
|
12
templates/profiles/delete_invite.html
Normal file
12
templates/profiles/delete_invite.html
Normal file
@@ -0,0 +1,12 @@
|
||||
{% extends 'base.html' %}
|
||||
|
||||
{% block title %}Delete Invite{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<form method="POST" action="{%url profiles.views.deleteInvite code=invite.code %}">
|
||||
{% csrf_token %}
|
||||
<p>If you delete this invite, it may not be used to create an account. If you already gave this invite to someone, <em>they will not be able to use it!</em></p>
|
||||
<p>Are you sure you want to delete this invite?</p>
|
||||
<input type="submit" value="Yes, I'm sure."/>
|
||||
</form>
|
||||
{% endblock %}
|
@@ -4,16 +4,32 @@
|
||||
|
||||
{% block content %}
|
||||
<p>Your Invites:</p>
|
||||
<table>
|
||||
<table id='invite-table'>
|
||||
<tr class="header">
|
||||
<th>Code</th>
|
||||
<th>Invited User</th>
|
||||
</tr>
|
||||
{% if invites %}
|
||||
{% for invite in invites %}
|
||||
<tr>
|
||||
<td><a href="{{invite.get_absolute_url}}">{{invite.code}}</a></td>
|
||||
<td>{{invite.claimer}}</td>
|
||||
<tr class="{%cycle 'even' 'odd' %} {% if invite.deleted %}deleted{%endif%}">
|
||||
<td>
|
||||
{% if invite.deleted %}
|
||||
{{invite.code}}
|
||||
{% else %}
|
||||
<a href="{{invite.get_absolute_url}}">{{invite.code}}</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% if invite.claimer %}
|
||||
{{invite.claimer}}
|
||||
{% else %}
|
||||
{% if invite.deleted %}
|
||||
<em>Deleted</em>
|
||||
{% else %}
|
||||
<a href="{%url profiles.views.deleteInvite code=invite.code %}">Delete</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
|
Reference in New Issue
Block a user