Skip to content

Commit

Permalink
* Change the way that inviting users works so that an existing user w…
Browse files Browse the repository at this point in the history
…ill get added to the resource and a new email will be sent out.
  • Loading branch information
bgroff committed Aug 17, 2018
1 parent 44ce430 commit b53e95d
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 25 deletions.
3 changes: 0 additions & 3 deletions django_kala/auth/templates/users.html
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,6 @@ <h4 data-value="organization">{% trans 'Organization' %}</h4>
{{ user }}
{% endif %}
</div>
<div class="meta">
{{ user.organizations.all|join:', ' }}
</div>
<div class="description">
<a href="mailto:{{ user.email }}">{{ user.email }}</a>
</div>
Expand Down
6 changes: 5 additions & 1 deletion django_kala/projects/forms/invite_user.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
from django.utils.translation import ugettext_lazy as _


class EmailForm(forms.Form):
email = forms.EmailField()


class InviteUserForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
admin_permission = kwargs.pop('admin_permission')
Expand All @@ -19,7 +23,7 @@ def __init__(self, *args, **kwargs):

class Meta:
model = get_user_model()
fields = ['email', 'first_name', 'last_name']
fields = ['first_name', 'last_name']

def save(self, commit=True):
self.instance.is_active = False
Expand Down
10 changes: 5 additions & 5 deletions django_kala/projects/templates/documents/invite_user.html
Original file line number Diff line number Diff line change
Expand Up @@ -64,14 +64,14 @@ <h2 class="active section">Invite User
</ul>
</div>
{% endif %}
<form class="ui form {% if form.errors %}error{% endif %}" method="post">
<form class="ui form {% if form.errors or email_form.errors %}error{% endif %}" method="post">
{% csrf_token %}
<div class="field">
<label>{{ form.email.label }}</label>
{{ form.email }}
{% if form.email.errors %}
<label>{{ email_form.email.label }}</label>
{{ email_form.email }}
{% if email_form.email.errors %}
<div class="ui error message">
{{ form.email.errors }}
{{ email_form.email.errors }}
</div>
{% endif %}
</div>
Expand Down
10 changes: 5 additions & 5 deletions django_kala/projects/templates/projects/invite_user.html
Original file line number Diff line number Diff line change
Expand Up @@ -60,14 +60,14 @@ <h2 class="active section">
</div>
<div class="ui one column grid container">
<div class="twelve wide column">
<form class="ui form {% if form.errors %}error{% endif %}" method="post">
<form class="ui form {% if form.errors or email_form.errors %}error{% endif %}" method="post">
{% csrf_token %}
<div class="field">
<label>{{ form.email.label }}</label>
{{ form.email }}
{% if form.email.errors %}
<label>{{ email_form.email.label }}</label>
{{ email_form.email }}
{% if email_form.email.errors %}
<div class="ui error message">
{{ form.email.errors }}
{{ email_form.email.errors }}
</div>
{% endif %}
</div>
Expand Down
4 changes: 3 additions & 1 deletion django_kala/projects/views/documents/document.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@ def get_context_data(self, **kwargs):
'document': self.document,
'can_change': self.document.has_change(self.request.user),
'can_create': self.has_change or self.has_create,
'can_invite': self.project.organization.has_change(self.request.user) or self.project.organization.has_create(self.request.user)
'can_invite': self.project.organization.has_change(self.request.user) or
self.project.organization.has_create(self.request.user) or
self.has_create or self.has_change
}

def dispatch(self, request, project_pk, document_pk, *args, **kwargs):
Expand Down
20 changes: 15 additions & 5 deletions django_kala/projects/views/documents/invite_user.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from django.conf import settings
from django.contrib import messages
from django.contrib.auth import get_user_model
from django.contrib.auth.mixins import LoginRequiredMixin
from django.core.exceptions import PermissionDenied
from django.urls import reverse
Expand All @@ -9,7 +10,9 @@

from documents.models import Document
from projects.models import Project
from ...forms.invite_user import InviteUserForm
from ...forms.invite_user import InviteUserForm, EmailForm

User = get_user_model()


class InviteUserView(LoginRequiredMixin, TemplateView):
Expand All @@ -18,6 +21,7 @@ class InviteUserView(LoginRequiredMixin, TemplateView):
def get_context_data(self, **kwargs):
return {
'form': self.form,
'email_form': self.email_form,
'project': self.project,
'organization': self.project.organization,
'document': self.document,
Expand All @@ -39,6 +43,8 @@ def dispatch(self, request, project_pk, document_pk, *args, **kwargs):
self.has_change = self.document.has_change(request.user)
if not self.has_create and not self.has_change and not self.document.has_delete(request.user):
raise PermissionDenied(_('You do not have permissions to view this document.'))

self.email_form = EmailForm(request.POST or None)
self.form = InviteUserForm(
request.POST or None,
admin_permission=(
Expand All @@ -51,10 +57,14 @@ def dispatch(self, request, project_pk, document_pk, *args, **kwargs):
return super(InviteUserView, self).dispatch(request, *args, **kwargs)

def post(self, request, *args, **kwargs):
if self.form.is_valid():
user = self.form.save(commit=False)
user.username = user.email
user.save()
if self.email_form.is_valid() and self.form.is_valid():
try:
user = User.objects.get(email=self.email_form.cleaned_data['email'])
except User.DoesNotExist:
user = self.form.save(commit=False)
user.email = self.email_form.cleaned_data['email']
user.username = user.email
user.save()
self.document.add_create(user)
if self.form.cleaned_data['user_type'] == 'Admin':
self.document.add_change(user)
Expand Down
19 changes: 14 additions & 5 deletions django_kala/projects/views/projects/invite_user.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from django.conf import settings
from django.contrib import messages
from django.contrib.auth import get_user_model
from django.contrib.auth.mixins import LoginRequiredMixin
from django.core.exceptions import PermissionDenied
from django.urls import reverse
Expand All @@ -9,15 +10,18 @@

from auth.models import Permissions
from projects.models import Project
from ...forms.invite_user import InviteUserForm
from ...forms.invite_user import InviteUserForm, EmailForm


User = get_user_model()

class InviteUserView(LoginRequiredMixin, TemplateView):
template_name = 'projects/invite_user.html'

def get_context_data(self, **kwargs):
return {
'form': self.form,
'email_form': self.email_form,
'project': self.project,
'organization': self.project.organization,
'can_change': self.project.has_change(self.request.user),
Expand Down Expand Up @@ -59,13 +63,18 @@ def dispatch(self, request, pk, *args, **kwargs):
self.project.organization.uuid
) else False
self.form = InviteUserForm(request.POST or None, admin_permission=admin_permission)
self.email_form = EmailForm(request.POST or None)
return super(InviteUserView, self).dispatch(request, *args, **kwargs)

def post(self, request, *args, **kwargs):
if self.form.is_valid():
user = self.form.save(commit=False)
user.username = user.email
user.save()
if self.email_form.is_valid() and self.form.is_valid():
try:
user = User.objects.get(email=self.email_form.cleaned_data['email'])
except User.DoesNotExist:
user = self.form.save(commit=False)
user.email = self.email_form.cleaned_data['email']
user.username = user.email
user.save()
self.project.add_create(user)
if self.form.cleaned_data['user_type'] == 'Admin':
self.project.add_change(user)
Expand Down

0 comments on commit b53e95d

Please sign in to comment.