This reverts commit d9246b1ec0
.
parent
b6e9b8d9e0
commit
b317c7521e
|
@ -62,7 +62,7 @@ def save_in_bulk(instances, callback=None, precall=None, **save_options):
|
||||||
|
|
||||||
precall(instance)
|
precall(instance)
|
||||||
instance.save(**save_options)
|
instance.save(**save_options)
|
||||||
callback(instance, created=True)
|
callback(instance)
|
||||||
|
|
||||||
|
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
|
|
|
@ -205,6 +205,15 @@ class MembershipViewSet(ModelCrudViewSet):
|
||||||
services.send_invitation(invitation=invitation)
|
services.send_invitation(invitation=invitation)
|
||||||
return Response(status=status.HTTP_204_NO_CONTENT)
|
return Response(status=status.HTTP_204_NO_CONTENT)
|
||||||
|
|
||||||
|
def pre_save(self, object):
|
||||||
|
# Only assign new token if a current token value is empty.
|
||||||
|
if not object.token:
|
||||||
|
object.token = str(uuid.uuid1())
|
||||||
|
|
||||||
|
object.user = services.find_invited_user(object, default=object.user)
|
||||||
|
|
||||||
|
super().pre_save(object)
|
||||||
|
|
||||||
def post_save(self, object, created=False):
|
def post_save(self, object, created=False):
|
||||||
super().post_save(object, created=created)
|
super().post_save(object, created=created)
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
import itertools
|
import itertools
|
||||||
import uuid
|
|
||||||
|
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
@ -32,7 +31,7 @@ from djorm_pgarray.fields import TextArrayField
|
||||||
from taiga.permissions.permissions import ANON_PERMISSIONS, USER_PERMISSIONS
|
from taiga.permissions.permissions import ANON_PERMISSIONS, USER_PERMISSIONS
|
||||||
|
|
||||||
from taiga.base.tags import TaggedMixin
|
from taiga.base.tags import TaggedMixin
|
||||||
from taiga.users.models import User, Role
|
from taiga.users.models import Role
|
||||||
from taiga.base.utils.slug import slugify_uniquely
|
from taiga.base.utils.slug import slugify_uniquely
|
||||||
from taiga.base.utils.dicts import dict_sum
|
from taiga.base.utils.dicts import dict_sum
|
||||||
from taiga.base.utils.sequence import arithmetic_progression
|
from taiga.base.utils.sequence import arithmetic_progression
|
||||||
|
@ -74,14 +73,6 @@ class Membership(models.Model):
|
||||||
if self.user and memberships.count() > 0 and memberships[0].id != self.id:
|
if self.user and memberships.count() > 0 and memberships[0].id != self.id:
|
||||||
raise ValidationError(_('The user is already member of the project'))
|
raise ValidationError(_('The user is already member of the project'))
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
|
||||||
if not self.token:
|
|
||||||
self.token = str(uuid.uuid1())
|
|
||||||
|
|
||||||
self.user = User.objects.filter(email=self.email).first()
|
|
||||||
|
|
||||||
super().save(*args, **kwargs)
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "membership"
|
verbose_name = "membership"
|
||||||
verbose_name_plural = "membershipss"
|
verbose_name_plural = "membershipss"
|
||||||
|
|
|
@ -35,5 +35,6 @@ from .members import create_members_in_bulk
|
||||||
from .members import get_members_from_bulk
|
from .members import get_members_from_bulk
|
||||||
|
|
||||||
from .invitations import send_invitation
|
from .invitations import send_invitation
|
||||||
|
from .invitations import find_invited_user
|
||||||
|
|
||||||
from .tags_colors import update_project_tags_colors_handler
|
from .tags_colors import update_project_tags_colors_handler
|
||||||
|
|
|
@ -10,3 +10,17 @@ def send_invitation(invitation):
|
||||||
template = mbuilder.membership_invitation
|
template = mbuilder.membership_invitation
|
||||||
email = template(invitation.email, {"membership": invitation})
|
email = template(invitation.email, {"membership": invitation})
|
||||||
email.send()
|
email.send()
|
||||||
|
|
||||||
|
|
||||||
|
def find_invited_user(invitation, default=None):
|
||||||
|
"""Check if the invited user is already a registered.
|
||||||
|
|
||||||
|
:param invitation: Invitation object.
|
||||||
|
:param default: Default object to return if user is not found.
|
||||||
|
|
||||||
|
:return: The user if it's found, othwerwise return `default`.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
return type(invitation).user.get_queryset().filter(email=invitation.email).all()[0]
|
||||||
|
except IndexError:
|
||||||
|
return default
|
||||||
|
|
Loading…
Reference in New Issue