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:
Shubham Dhama
2018-12-30 15:36:12 +05:30
committed by Tim Abbott
parent c9414a3572
commit 42c262b807
9 changed files with 53 additions and 18 deletions

View File

@@ -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 = [];

View File

@@ -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>

View File

@@ -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

View File

@@ -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',
),
]

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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]:

View File

@@ -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)