mirror of
https://github.com/zulip/zulip.git
synced 2025-11-12 01:47:41 +00:00
marketing_emails: Ask for user's consent at sign-up.
This commit is contained in:
@@ -920,6 +920,11 @@ button#register_auth_button_gitlab {
|
||||
&.inline-block {
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
||||
&.marketing_emails_checkbox {
|
||||
text-indent: -24px;
|
||||
margin-left: 24px;
|
||||
}
|
||||
}
|
||||
|
||||
&.radio {
|
||||
|
||||
@@ -249,6 +249,14 @@ Form is validated both client-side using jquery-validate (see signup.js) and ser
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="input-group">
|
||||
<label for="id_enable_marketing_emails" class="inline-block checkbox marketing_emails_checkbox">
|
||||
<input id="id_enable_marketing_emails" type="checkbox" name="enable_marketing_emails"
|
||||
checked="checked" />
|
||||
<span></span>
|
||||
{% trans %}Send me occasional marketing emails about Zulip (a few times a year).{% endtrans %}
|
||||
</label>
|
||||
</div>
|
||||
<div class="register-button-box">
|
||||
<button class="register-button" type="submit">
|
||||
<span>{{ _('Sign up') }}</span>
|
||||
|
||||
@@ -116,6 +116,7 @@ class RegistrationForm(forms.Form):
|
||||
realm_subdomain = forms.CharField(max_length=Realm.MAX_REALM_SUBDOMAIN_LENGTH, required=False)
|
||||
realm_type = forms.IntegerField(required=False)
|
||||
is_demo_organization = forms.BooleanField(required=False)
|
||||
enable_marketing_emails = forms.BooleanField(required=False)
|
||||
|
||||
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
||||
# Since the superclass doesn't except random extra kwargs, we
|
||||
|
||||
@@ -648,6 +648,7 @@ def do_create_user(
|
||||
realm_creation: bool = False,
|
||||
*,
|
||||
acting_user: Optional[UserProfile],
|
||||
enable_marketing_emails: bool = True,
|
||||
) -> UserProfile:
|
||||
|
||||
user_profile = create_user(
|
||||
@@ -665,6 +666,7 @@ def do_create_user(
|
||||
default_events_register_stream=default_events_register_stream,
|
||||
default_all_public_streams=default_all_public_streams,
|
||||
source_profile=source_profile,
|
||||
enable_marketing_emails=enable_marketing_emails,
|
||||
)
|
||||
|
||||
event_time = user_profile.date_joined
|
||||
|
||||
@@ -128,6 +128,7 @@ def create_user(
|
||||
default_all_public_streams: Optional[bool] = None,
|
||||
source_profile: Optional[UserProfile] = None,
|
||||
force_id: Optional[int] = None,
|
||||
enable_marketing_emails: bool = True,
|
||||
) -> UserProfile:
|
||||
user_profile = create_user_profile(
|
||||
realm,
|
||||
@@ -146,6 +147,7 @@ def create_user(
|
||||
user_profile.timezone = timezone
|
||||
user_profile.default_sending_stream = default_sending_stream
|
||||
user_profile.default_events_register_stream = default_events_register_stream
|
||||
user_profile.enable_marketing_emails = enable_marketing_emails
|
||||
if role is not None:
|
||||
user_profile.role = role
|
||||
# Allow the ORM default to be used if not provided
|
||||
|
||||
@@ -627,6 +627,7 @@ Output:
|
||||
source_realm_id: str = "",
|
||||
key: Optional[str] = None,
|
||||
realm_type: Optional[int] = Realm.ORG_TYPES["business"]["id"],
|
||||
enable_marketing_emails: Optional[bool] = True,
|
||||
**kwargs: Any,
|
||||
) -> HttpResponse:
|
||||
"""
|
||||
@@ -650,6 +651,7 @@ Output:
|
||||
"from_confirmation": from_confirmation,
|
||||
"default_stream_group": default_stream_groups,
|
||||
"source_realm_id": source_realm_id,
|
||||
"enable_marketing_emails": enable_marketing_emails,
|
||||
}
|
||||
if password is not None:
|
||||
payload["password"] = password
|
||||
|
||||
@@ -3074,6 +3074,92 @@ class RealmCreationTest(ZulipTestCase):
|
||||
self.assertEqual(realm.name, realm_name)
|
||||
self.assertEqual(realm.subdomain, string_id)
|
||||
|
||||
@override_settings(OPEN_REALM_CREATION=True)
|
||||
def test_create_realm_with_marketing_emails_enabled(self) -> None:
|
||||
password = "test"
|
||||
string_id = "zuliptest"
|
||||
email = "user1@test.com"
|
||||
realm_name = "Test"
|
||||
|
||||
# Make sure the realm does not exist
|
||||
with self.assertRaises(Realm.DoesNotExist):
|
||||
get_realm(string_id)
|
||||
|
||||
# Create new realm with the email
|
||||
result = self.client_post("/new/", {"email": email})
|
||||
self.assertEqual(result.status_code, 302)
|
||||
self.assertTrue(result["Location"].endswith(f"/accounts/new/send_confirm/{email}"))
|
||||
result = self.client_get(result["Location"])
|
||||
self.assert_in_response("Check your email so we can get started.", result)
|
||||
|
||||
# Visit the confirmation link.
|
||||
confirmation_url = self.get_confirmation_url_from_outbox(email)
|
||||
result = self.client_get(confirmation_url)
|
||||
self.assertEqual(result.status_code, 200)
|
||||
|
||||
result = self.submit_reg_form_for_user(
|
||||
email,
|
||||
password,
|
||||
realm_subdomain=string_id,
|
||||
realm_name=realm_name,
|
||||
enable_marketing_emails=True,
|
||||
)
|
||||
self.assertEqual(result.status_code, 302)
|
||||
|
||||
result = self.client_get(result.url, subdomain=string_id)
|
||||
self.assertEqual(result.status_code, 302)
|
||||
self.assertEqual(result.url, "http://zuliptest.testserver")
|
||||
|
||||
# Make sure the realm is created
|
||||
realm = get_realm(string_id)
|
||||
self.assertEqual(realm.string_id, string_id)
|
||||
user = get_user(email, realm)
|
||||
self.assertEqual(user.realm, realm)
|
||||
self.assertTrue(user.enable_marketing_emails)
|
||||
|
||||
@override_settings(OPEN_REALM_CREATION=True)
|
||||
def test_create_realm_with_marketing_emails_disabled(self) -> None:
|
||||
password = "test"
|
||||
string_id = "zuliptest"
|
||||
email = "user1@test.com"
|
||||
realm_name = "Test"
|
||||
|
||||
# Make sure the realm does not exist
|
||||
with self.assertRaises(Realm.DoesNotExist):
|
||||
get_realm(string_id)
|
||||
|
||||
# Create new realm with the email
|
||||
result = self.client_post("/new/", {"email": email})
|
||||
self.assertEqual(result.status_code, 302)
|
||||
self.assertTrue(result["Location"].endswith(f"/accounts/new/send_confirm/{email}"))
|
||||
result = self.client_get(result["Location"])
|
||||
self.assert_in_response("Check your email so we can get started.", result)
|
||||
|
||||
# Visit the confirmation link.
|
||||
confirmation_url = self.get_confirmation_url_from_outbox(email)
|
||||
result = self.client_get(confirmation_url)
|
||||
self.assertEqual(result.status_code, 200)
|
||||
|
||||
result = self.submit_reg_form_for_user(
|
||||
email,
|
||||
password,
|
||||
realm_subdomain=string_id,
|
||||
realm_name=realm_name,
|
||||
enable_marketing_emails=False,
|
||||
)
|
||||
self.assertEqual(result.status_code, 302)
|
||||
|
||||
result = self.client_get(result.url, subdomain=string_id)
|
||||
self.assertEqual(result.status_code, 302)
|
||||
self.assertEqual(result.url, "http://zuliptest.testserver")
|
||||
|
||||
# Make sure the realm is created
|
||||
realm = get_realm(string_id)
|
||||
self.assertEqual(realm.string_id, string_id)
|
||||
user = get_user(email, realm)
|
||||
self.assertEqual(user.realm, realm)
|
||||
self.assertFalse(user.enable_marketing_emails)
|
||||
|
||||
@override_settings(OPEN_REALM_CREATION=True, FREE_TRIAL_DAYS=30)
|
||||
def test_create_realm_during_free_trial(self) -> None:
|
||||
password = "test"
|
||||
|
||||
@@ -332,6 +332,7 @@ def accounts_register(
|
||||
assert realm is not None
|
||||
|
||||
full_name = form.cleaned_data["full_name"]
|
||||
enable_marketing_emails = form.cleaned_data["enable_marketing_emails"]
|
||||
default_stream_group_names = request.POST.getlist("default_stream_group")
|
||||
default_stream_groups = lookup_default_stream_groups(default_stream_group_names, realm)
|
||||
|
||||
@@ -437,6 +438,7 @@ def accounts_register(
|
||||
source_profile=source_profile,
|
||||
realm_creation=realm_creation,
|
||||
acting_user=None,
|
||||
enable_marketing_emails=enable_marketing_emails,
|
||||
)
|
||||
|
||||
if realm_creation:
|
||||
|
||||
Reference in New Issue
Block a user