mirror of
https://github.com/zulip/zulip.git
synced 2025-11-06 23:13:25 +00:00
invite: Replace invite_as_admin usage with invite_as.
Since we have already added the `invite_as` field to models, we can now replace usage of `invite_as_admin` properly with its equivalent `invite_as == PreregistrationUser.INVITE_AS['REALM_ADMIN']`. Hence, also removed now redundant `invite_as`.
This commit is contained in:
committed by
Tim Abbott
parent
c9414a3572
commit
42c262b807
@@ -18,10 +18,10 @@ function submit_invitation_form() {
|
||||
var invite_status = $('#invite_status');
|
||||
var invitee_emails = $("#invitee_emails");
|
||||
var invitee_emails_group = invitee_emails.closest('.control-group');
|
||||
var invite_as = $('#invite_as').val();
|
||||
var invite_as = parseInt($('#invite_as').val(), 10);
|
||||
var data = {
|
||||
invitee_emails: $("#invitee_emails").val(),
|
||||
invite_as_admin: invite_as === 'admin',
|
||||
invite_as: invite_as,
|
||||
csrfmiddlewaretoken: $('input[name="csrfmiddlewaretoken"]').attr('value'),
|
||||
};
|
||||
var streams = [];
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
<label class="control-label" for="invite_as">{{ _('User(s) join as') }}</label>
|
||||
<div class="controls">
|
||||
<select id="invite_as">
|
||||
<option name="invite_as" value="normal">{{ _('Members') }}</option>
|
||||
<option name="invite_as" value="admin">{{ _('Organization administrators') }}</option>
|
||||
<option name="invite_as" value="{{ invite_as.MEMBER }}">{{ _('Members') }}</option>
|
||||
<option name="invite_as" value="{{ invite_as.REALM_ADMIN }}">{{ _('Organization administrators') }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -4627,7 +4627,7 @@ def check_invite_limit(realm: Realm, num_invitees: int) -> None:
|
||||
def do_invite_users(user_profile: UserProfile,
|
||||
invitee_emails: SizedTextIterable,
|
||||
streams: Iterable[Stream],
|
||||
invite_as_admin: Optional[bool]=False) -> None:
|
||||
invite_as: Optional[int]=PreregistrationUser.INVITE_AS['MEMBER']) -> None:
|
||||
|
||||
check_invite_limit(user_profile.realm, len(invitee_emails))
|
||||
|
||||
@@ -4677,7 +4677,7 @@ def do_invite_users(user_profile: UserProfile,
|
||||
for email in validated_emails:
|
||||
# The logged in user is the referrer.
|
||||
prereg_user = PreregistrationUser(email=email, referred_by=user_profile,
|
||||
invited_as_admin=invite_as_admin,
|
||||
invited_as=invite_as,
|
||||
realm=user_profile.realm)
|
||||
prereg_user.save()
|
||||
stream_ids = [stream.id for stream in streams]
|
||||
@@ -4709,7 +4709,7 @@ def do_get_user_invites(user_profile: UserProfile) -> List[Dict[str, Any]]:
|
||||
ref=invitee.referred_by.email,
|
||||
invited=datetime_to_timestamp(invitee.invited_at),
|
||||
id=invitee.id,
|
||||
invited_as_admin=invitee.invited_as_admin))
|
||||
invited_as=invitee.invited_as))
|
||||
|
||||
return invites
|
||||
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.16 on 2018-12-30 10:07
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('zerver', '0199_userstatus'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='preregistrationuser',
|
||||
name='invited_as_admin',
|
||||
),
|
||||
]
|
||||
@@ -1054,8 +1054,6 @@ class PreregistrationUser(models.Model):
|
||||
)
|
||||
invited_as = models.PositiveSmallIntegerField(default=INVITE_AS['MEMBER']) # type: int
|
||||
|
||||
invited_as_admin = models.BooleanField(default=False) # type: bool
|
||||
|
||||
class MultiuseInvite(models.Model):
|
||||
referred_by = models.ForeignKey(UserProfile, on_delete=CASCADE) # Optional[UserProfile]
|
||||
streams = models.ManyToManyField('Stream') # type: Manager
|
||||
|
||||
@@ -603,7 +603,7 @@ class InviteUserBase(ZulipTestCase):
|
||||
self.assertTrue(re.search(self.TOKENIZED_NOREPLY_REGEX, tokenized_no_reply_email))
|
||||
|
||||
def invite(self, users: str, streams: List[str], body: str='',
|
||||
invite_as_admin: str="false") -> HttpResponse:
|
||||
invite_as: int=1) -> HttpResponse:
|
||||
"""
|
||||
Invites the specified users to Zulip with the specified streams.
|
||||
|
||||
@@ -616,7 +616,7 @@ class InviteUserBase(ZulipTestCase):
|
||||
return self.client_post("/json/invites",
|
||||
{"invitee_emails": users,
|
||||
"stream": streams,
|
||||
"invite_as_admin": invite_as_admin})
|
||||
"invite_as": invite_as})
|
||||
|
||||
class InviteUserTest(InviteUserBase):
|
||||
def test_successful_invite_user(self) -> None:
|
||||
@@ -719,7 +719,9 @@ class InviteUserTest(InviteUserBase):
|
||||
"""
|
||||
self.login(self.example_email('iago'))
|
||||
invitee = self.nonreg_email('alice')
|
||||
self.assert_json_success(self.invite(invitee, ["Denmark"], invite_as_admin="true"))
|
||||
result = self.invite(invitee, ["Denmark"],
|
||||
invite_as=PreregistrationUser.INVITE_AS['REALM_ADMIN'])
|
||||
self.assert_json_success(result)
|
||||
self.assertTrue(find_key_by_email(invitee))
|
||||
|
||||
self.submit_reg_form_for_user(invitee, "password")
|
||||
@@ -733,9 +735,20 @@ class InviteUserTest(InviteUserBase):
|
||||
"""
|
||||
self.login(self.example_email('hamlet'))
|
||||
invitee = self.nonreg_email('alice')
|
||||
response = self.invite(invitee, ["Denmark"], invite_as_admin="true")
|
||||
response = self.invite(invitee, ["Denmark"],
|
||||
invite_as=PreregistrationUser.INVITE_AS['REALM_ADMIN'])
|
||||
self.assert_json_error(response, "Must be an organization administrator")
|
||||
|
||||
def test_invite_user_as_invalid_type(self) -> None:
|
||||
"""
|
||||
Test inviting a user as invalid type of user i.e. type of invite_as
|
||||
is not in PreregistrationUser.INVITE_AS
|
||||
"""
|
||||
self.login(self.example_email('iago'))
|
||||
invitee = self.nonreg_email('alice')
|
||||
response = self.invite(invitee, ["Denmark"], invite_as=100)
|
||||
self.assert_json_error(response, "Must be invited as an valid type of user")
|
||||
|
||||
def test_successful_invite_user_with_name(self) -> None:
|
||||
"""
|
||||
A call to /json/invites with valid parameters causes an invitation
|
||||
|
||||
@@ -291,6 +291,7 @@ def home_real(request: HttpRequest) -> HttpResponse:
|
||||
'show_webathena': user_profile.realm.webathena_enabled,
|
||||
'enable_feedback': settings.ENABLE_FEEDBACK,
|
||||
'embedded': narrow_stream is not None,
|
||||
'invite_as': PreregistrationUser.INVITE_AS,
|
||||
},)
|
||||
patch_cache_control(response, no_cache=True, no_store=True, must_revalidate=True)
|
||||
return response
|
||||
|
||||
@@ -22,12 +22,15 @@ import re
|
||||
@has_request_variables
|
||||
def invite_users_backend(request: HttpRequest, user_profile: UserProfile,
|
||||
invitee_emails_raw: str=REQ("invitee_emails"),
|
||||
invite_as_admin: Optional[bool]=REQ(validator=check_bool, default=False),
|
||||
invite_as: Optional[int]=REQ(
|
||||
validator=check_int, default=PreregistrationUser.INVITE_AS['MEMBER']),
|
||||
) -> HttpResponse:
|
||||
|
||||
if user_profile.realm.invite_by_admins_only and not user_profile.is_realm_admin:
|
||||
return json_error(_("Must be an organization administrator"))
|
||||
if invite_as_admin and not user_profile.is_realm_admin:
|
||||
if invite_as not in PreregistrationUser.INVITE_AS.values():
|
||||
return json_error(_("Must be invited as an valid type of user"))
|
||||
if invite_as == PreregistrationUser.INVITE_AS['REALM_ADMIN'] and not user_profile.is_realm_admin:
|
||||
return json_error(_("Must be an organization administrator"))
|
||||
if not invitee_emails_raw:
|
||||
return json_error(_("You must specify at least one email address."))
|
||||
@@ -52,7 +55,7 @@ def invite_users_backend(request: HttpRequest, user_profile: UserProfile,
|
||||
return json_error(_("Stream does not exist: %s. No invites were sent.") % (stream_name,))
|
||||
streams.append(stream)
|
||||
|
||||
do_invite_users(user_profile, invitee_emails, streams, invite_as_admin)
|
||||
do_invite_users(user_profile, invitee_emails, streams, invite_as)
|
||||
return json_success()
|
||||
|
||||
def get_invitee_emails_set(invitee_emails_raw: str) -> Set[str]:
|
||||
|
||||
@@ -15,7 +15,8 @@ from zerver.context_processors import get_realm_from_request
|
||||
from zerver.models import UserProfile, Realm, Stream, MultiuseInvite, \
|
||||
name_changes_disabled, email_to_username, email_allowed_for_realm, \
|
||||
get_realm, get_user_by_delivery_email, get_default_stream_groups, DisposableEmailError, \
|
||||
DomainNotAllowedForRealmError, get_source_profile, EmailContainsPlusError
|
||||
DomainNotAllowedForRealmError, get_source_profile, EmailContainsPlusError, \
|
||||
PreregistrationUser
|
||||
from zerver.lib.send_email import send_email, FromAddress
|
||||
from zerver.lib.events import do_events_register
|
||||
from zerver.lib.actions import do_change_password, do_change_full_name, do_change_is_admin, \
|
||||
@@ -79,7 +80,7 @@ def accounts_register(request: HttpRequest) -> HttpResponse:
|
||||
email = prereg_user.email
|
||||
realm_creation = prereg_user.realm_creation
|
||||
password_required = prereg_user.password_required
|
||||
is_realm_admin = prereg_user.invited_as_admin or realm_creation
|
||||
is_realm_admin = prereg_user.invited_as == PreregistrationUser.INVITE_AS['REALM_ADMIN'] or realm_creation
|
||||
|
||||
try:
|
||||
validators.validate_email(email)
|
||||
|
||||
Reference in New Issue
Block a user