mirror of
https://github.com/zulip/zulip.git
synced 2025-11-09 16:37:23 +00:00
Move process_new_human_user and helpers from views to actions.py.
This commit is contained in:
@@ -106,6 +106,116 @@ def bot_owner_userids(user_profile):
|
|||||||
else:
|
else:
|
||||||
return active_user_ids(user_profile.realm)
|
return active_user_ids(user_profile.realm)
|
||||||
|
|
||||||
|
def realm_user_count(realm):
|
||||||
|
user_dicts = get_active_user_dicts_in_realm(realm)
|
||||||
|
return len([user_dict for user_dict in user_dicts if not user_dict["is_bot"]])
|
||||||
|
|
||||||
|
def send_signup_message(sender, signups_stream, user_profile,
|
||||||
|
internal=False, realm=None):
|
||||||
|
if internal:
|
||||||
|
# When this is done using manage.py vs. the web interface
|
||||||
|
internal_blurb = " **INTERNAL SIGNUP** "
|
||||||
|
else:
|
||||||
|
internal_blurb = " "
|
||||||
|
|
||||||
|
user_count = realm_user_count(user_profile.realm)
|
||||||
|
# Send notification to realm notifications stream if it exists
|
||||||
|
# Don't send notification for the first user in a realm
|
||||||
|
if user_profile.realm.notifications_stream is not None and user_count > 1:
|
||||||
|
internal_send_message(sender, "stream",
|
||||||
|
user_profile.realm.notifications_stream.name,
|
||||||
|
"New users", "%s just signed up for Zulip. Say hello!" % \
|
||||||
|
(user_profile.full_name,),
|
||||||
|
realm=user_profile.realm)
|
||||||
|
|
||||||
|
internal_send_message(sender,
|
||||||
|
"stream", signups_stream, user_profile.realm.domain,
|
||||||
|
"%s <`%s`> just signed up for Zulip!%s(total: **%i**)" % (
|
||||||
|
user_profile.full_name,
|
||||||
|
user_profile.email,
|
||||||
|
internal_blurb,
|
||||||
|
user_count,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
def notify_new_user(user_profile, internal=False):
|
||||||
|
if settings.NEW_USER_BOT is not None:
|
||||||
|
send_signup_message(settings.NEW_USER_BOT, "signups", user_profile, internal)
|
||||||
|
statsd.gauge("users.signups.%s" % (user_profile.realm.domain.replace('.', '_')), 1, delta=True)
|
||||||
|
|
||||||
|
# Does the processing for a new user account:
|
||||||
|
# * Subscribes to default/invitation streams
|
||||||
|
# * Fills in some recent historical messages
|
||||||
|
# * Notifies other users in realm and Zulip about the signup
|
||||||
|
# * Deactivates PreregistrationUser objects
|
||||||
|
# * subscribe the user to newsletter if newsletter_data is specified
|
||||||
|
def process_new_human_user(user_profile, prereg_user=None, newsletter_data=None):
|
||||||
|
mit_beta_user = user_profile.realm.domain == "mit.edu"
|
||||||
|
try:
|
||||||
|
streams = prereg_user.streams.all()
|
||||||
|
except AttributeError:
|
||||||
|
# This will catch both the case where prereg_user is None and where it
|
||||||
|
# is a MitUser.
|
||||||
|
streams = []
|
||||||
|
|
||||||
|
# If the user's invitation didn't explicitly list some streams, we
|
||||||
|
# add the default streams
|
||||||
|
if len(streams) == 0:
|
||||||
|
streams = get_default_subs(user_profile)
|
||||||
|
bulk_add_subscriptions(streams, [user_profile])
|
||||||
|
|
||||||
|
# Give you the last 100 messages on your streams, so you have
|
||||||
|
# something to look at in your home view once you finish the
|
||||||
|
# tutorial.
|
||||||
|
one_week_ago = now() - datetime.timedelta(weeks=1)
|
||||||
|
recipients = Recipient.objects.filter(type=Recipient.STREAM,
|
||||||
|
type_id__in=[stream.id for stream in streams])
|
||||||
|
messages = Message.objects.filter(recipient_id__in=recipients, pub_date__gt=one_week_ago).order_by("-id")[0:100]
|
||||||
|
if len(messages) > 0:
|
||||||
|
ums_to_create = [UserMessage(user_profile=user_profile, message=message,
|
||||||
|
flags=UserMessage.flags.read)
|
||||||
|
for message in messages]
|
||||||
|
|
||||||
|
UserMessage.objects.bulk_create(ums_to_create)
|
||||||
|
|
||||||
|
# mit_beta_users don't have a referred_by field
|
||||||
|
if not mit_beta_user and prereg_user is not None and prereg_user.referred_by is not None \
|
||||||
|
and settings.NOTIFICATION_BOT is not None:
|
||||||
|
# This is a cross-realm private message.
|
||||||
|
internal_send_message(settings.NOTIFICATION_BOT,
|
||||||
|
"private", prereg_user.referred_by.email, user_profile.realm.domain,
|
||||||
|
"%s <`%s`> accepted your invitation to join Zulip!" % (
|
||||||
|
user_profile.full_name,
|
||||||
|
user_profile.email,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
# Mark any other PreregistrationUsers that are STATUS_ACTIVE as
|
||||||
|
# inactive so we can keep track of the PreregistrationUser we
|
||||||
|
# actually used for analytics
|
||||||
|
if prereg_user is not None:
|
||||||
|
PreregistrationUser.objects.filter(email__iexact=user_profile.email).exclude(
|
||||||
|
id=prereg_user.id).update(status=0)
|
||||||
|
else:
|
||||||
|
PreregistrationUser.objects.filter(email__iexact=user_profile.email).update(status=0)
|
||||||
|
|
||||||
|
notify_new_user(user_profile)
|
||||||
|
|
||||||
|
if newsletter_data is not None:
|
||||||
|
# If the user was created automatically via the API, we may
|
||||||
|
# not want to register them for the newsletter
|
||||||
|
queue_json_publish(
|
||||||
|
"signups",
|
||||||
|
{
|
||||||
|
'EMAIL': user_profile.email,
|
||||||
|
'merge_vars': {
|
||||||
|
'NAME': user_profile.full_name,
|
||||||
|
'REALM': user_profile.realm.domain,
|
||||||
|
'OPTIN_IP': newsletter_data["IP"],
|
||||||
|
'OPTIN_TIME': datetime.datetime.isoformat(datetime.datetime.now()),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
lambda event: None)
|
||||||
|
|
||||||
def notify_created_user(user_profile):
|
def notify_created_user(user_profile):
|
||||||
event = dict(type="realm_user", op="add",
|
event = dict(type="realm_user", op="add",
|
||||||
person=dict(email=user_profile.email,
|
person=dict(email=user_profile.email,
|
||||||
|
|||||||
@@ -29,11 +29,12 @@ from zerver.models import Message, UserProfile, Stream, Subscription, Huddle, \
|
|||||||
from zerver.lib.actions import bulk_remove_subscriptions, do_change_password, \
|
from zerver.lib.actions import bulk_remove_subscriptions, do_change_password, \
|
||||||
do_change_full_name, do_change_enable_desktop_notifications, do_change_is_admin, \
|
do_change_full_name, do_change_enable_desktop_notifications, do_change_is_admin, \
|
||||||
do_change_enter_sends, do_change_enable_sounds, do_activate_user, do_create_user, \
|
do_change_enter_sends, do_change_enable_sounds, do_activate_user, do_create_user, \
|
||||||
do_change_subscription_property, internal_send_message, \
|
process_new_human_user, do_change_subscription_property, internal_send_message, \
|
||||||
create_stream_if_needed, gather_subscriptions, subscribed_to_stream, \
|
create_stream_if_needed, gather_subscriptions, subscribed_to_stream, \
|
||||||
update_user_presence, bulk_add_subscriptions, do_events_register, \
|
update_user_presence, bulk_add_subscriptions, do_events_register, \
|
||||||
get_status_dict, do_change_enable_offline_email_notifications, \
|
get_status_dict, do_change_enable_offline_email_notifications, \
|
||||||
do_change_enable_digest_emails, do_set_realm_name, do_set_realm_restricted_to_domain, do_set_realm_invite_required, do_set_realm_invite_by_admins_only, internal_prep_message, \
|
do_change_enable_digest_emails, do_set_realm_name, do_set_realm_restricted_to_domain, \
|
||||||
|
do_set_realm_invite_required, do_set_realm_invite_by_admins_only, internal_prep_message, \
|
||||||
do_send_messages, get_default_subs, do_deactivate_user, do_reactivate_user, \
|
do_send_messages, get_default_subs, do_deactivate_user, do_reactivate_user, \
|
||||||
user_email_is_unique, do_invite_users, do_refer_friend, compute_mit_user_fullname, \
|
user_email_is_unique, do_invite_users, do_refer_friend, compute_mit_user_fullname, \
|
||||||
do_add_alert_words, do_remove_alert_words, do_set_alert_words, get_subscriber_emails, \
|
do_add_alert_words, do_remove_alert_words, do_set_alert_words, get_subscriber_emails, \
|
||||||
@@ -46,7 +47,8 @@ from zerver.lib.actions import bulk_remove_subscriptions, do_change_password, \
|
|||||||
do_change_enable_stream_desktop_notifications, do_change_enable_stream_sounds, \
|
do_change_enable_stream_desktop_notifications, do_change_enable_stream_sounds, \
|
||||||
do_change_stream_description, do_get_streams, do_make_stream_private, \
|
do_change_stream_description, do_get_streams, do_make_stream_private, \
|
||||||
do_regenerate_api_key, do_remove_default_stream, do_update_pointer, \
|
do_regenerate_api_key, do_remove_default_stream, do_update_pointer, \
|
||||||
do_change_avatar_source, do_change_twenty_four_hour_time, do_change_left_side_userlist
|
do_change_avatar_source, do_change_twenty_four_hour_time, do_change_left_side_userlist, \
|
||||||
|
realm_user_count
|
||||||
|
|
||||||
from zerver.lib.create_user import random_api_key
|
from zerver.lib.create_user import random_api_key
|
||||||
from zerver.lib.push_notifications import num_push_devices_for_user
|
from zerver.lib.push_notifications import num_push_devices_for_user
|
||||||
@@ -144,43 +146,6 @@ def list_to_streams(streams_raw, user_profile, autocreate=False, invite_only=Fal
|
|||||||
|
|
||||||
return existing_streams, created_streams
|
return existing_streams, created_streams
|
||||||
|
|
||||||
def realm_user_count(realm):
|
|
||||||
user_dicts = get_active_user_dicts_in_realm(realm)
|
|
||||||
return len([user_dict for user_dict in user_dicts if not user_dict["is_bot"]])
|
|
||||||
|
|
||||||
def send_signup_message(sender, signups_stream, user_profile,
|
|
||||||
internal=False, realm=None):
|
|
||||||
if internal:
|
|
||||||
# When this is done using manage.py vs. the web interface
|
|
||||||
internal_blurb = " **INTERNAL SIGNUP** "
|
|
||||||
else:
|
|
||||||
internal_blurb = " "
|
|
||||||
|
|
||||||
user_count = realm_user_count(user_profile.realm)
|
|
||||||
# Send notification to realm notifications stream if it exists
|
|
||||||
# Don't send notification for the first user in a realm
|
|
||||||
if user_profile.realm.notifications_stream is not None and user_count > 1:
|
|
||||||
internal_send_message(sender, "stream",
|
|
||||||
user_profile.realm.notifications_stream.name,
|
|
||||||
"New users", "%s just signed up for Zulip. Say hello!" % \
|
|
||||||
(user_profile.full_name,),
|
|
||||||
realm=user_profile.realm)
|
|
||||||
|
|
||||||
internal_send_message(sender,
|
|
||||||
"stream", signups_stream, user_profile.realm.domain,
|
|
||||||
"%s <`%s`> just signed up for Zulip!%s(total: **%i**)" % (
|
|
||||||
user_profile.full_name,
|
|
||||||
user_profile.email,
|
|
||||||
internal_blurb,
|
|
||||||
user_count,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
def notify_new_user(user_profile, internal=False):
|
|
||||||
if settings.NEW_USER_BOT is not None:
|
|
||||||
send_signup_message(settings.NEW_USER_BOT, "signups", user_profile, internal)
|
|
||||||
statsd.gauge("users.signups.%s" % (user_profile.realm.domain.replace('.', '_')), 1, delta=True)
|
|
||||||
|
|
||||||
class PrincipalError(JsonableError):
|
class PrincipalError(JsonableError):
|
||||||
def __init__(self, principal):
|
def __init__(self, principal):
|
||||||
self.principal = principal
|
self.principal = principal
|
||||||
@@ -362,79 +327,6 @@ def accounts_register(request):
|
|||||||
},
|
},
|
||||||
context_instance=RequestContext(request))
|
context_instance=RequestContext(request))
|
||||||
|
|
||||||
# Does the processing for a new user account:
|
|
||||||
# * Subscribes to default/invitation streams
|
|
||||||
# * Fills in some recent historical messages
|
|
||||||
# * Notifies other users in realm and Zulip about the signup
|
|
||||||
# * Deactivates PreregistrationUser objects
|
|
||||||
# * subscribe the user to newsletter if newsletter_data is specified
|
|
||||||
def process_new_human_user(user_profile, prereg_user=None, newsletter_data=None):
|
|
||||||
mit_beta_user = user_profile.realm.domain == "mit.edu"
|
|
||||||
try:
|
|
||||||
streams = prereg_user.streams.all()
|
|
||||||
except AttributeError:
|
|
||||||
# This will catch both the case where prereg_user is None and where it
|
|
||||||
# is a MitUser.
|
|
||||||
streams = []
|
|
||||||
|
|
||||||
# If the user's invitation didn't explicitly list some streams, we
|
|
||||||
# add the default streams
|
|
||||||
if len(streams) == 0:
|
|
||||||
streams = get_default_subs(user_profile)
|
|
||||||
bulk_add_subscriptions(streams, [user_profile])
|
|
||||||
|
|
||||||
# Give you the last 100 messages on your streams, so you have
|
|
||||||
# something to look at in your home view once you finish the
|
|
||||||
# tutorial.
|
|
||||||
one_week_ago = now() - datetime.timedelta(weeks=1)
|
|
||||||
recipients = Recipient.objects.filter(type=Recipient.STREAM,
|
|
||||||
type_id__in=[stream.id for stream in streams])
|
|
||||||
messages = Message.objects.filter(recipient_id__in=recipients, pub_date__gt=one_week_ago).order_by("-id")[0:100]
|
|
||||||
if len(messages) > 0:
|
|
||||||
ums_to_create = [UserMessage(user_profile=user_profile, message=message,
|
|
||||||
flags=UserMessage.flags.read)
|
|
||||||
for message in messages]
|
|
||||||
|
|
||||||
UserMessage.objects.bulk_create(ums_to_create)
|
|
||||||
|
|
||||||
# mit_beta_users don't have a referred_by field
|
|
||||||
if not mit_beta_user and prereg_user is not None and prereg_user.referred_by is not None \
|
|
||||||
and settings.NOTIFICATION_BOT is not None:
|
|
||||||
# This is a cross-realm private message.
|
|
||||||
internal_send_message(settings.NOTIFICATION_BOT,
|
|
||||||
"private", prereg_user.referred_by.email, user_profile.realm.domain,
|
|
||||||
"%s <`%s`> accepted your invitation to join Zulip!" % (
|
|
||||||
user_profile.full_name,
|
|
||||||
user_profile.email,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
# Mark any other PreregistrationUsers that are STATUS_ACTIVE as
|
|
||||||
# inactive so we can keep track of the PreregistrationUser we
|
|
||||||
# actually used for analytics
|
|
||||||
if prereg_user is not None:
|
|
||||||
PreregistrationUser.objects.filter(email__iexact=user_profile.email).exclude(
|
|
||||||
id=prereg_user.id).update(status=0)
|
|
||||||
else:
|
|
||||||
PreregistrationUser.objects.filter(email__iexact=user_profile.email).update(status=0)
|
|
||||||
|
|
||||||
notify_new_user(user_profile)
|
|
||||||
|
|
||||||
if newsletter_data is not None:
|
|
||||||
# If the user was created automatically via the API, we may
|
|
||||||
# not want to register them for the newsletter
|
|
||||||
queue_json_publish(
|
|
||||||
"signups",
|
|
||||||
{
|
|
||||||
'EMAIL': user_profile.email,
|
|
||||||
'merge_vars': {
|
|
||||||
'NAME': user_profile.full_name,
|
|
||||||
'REALM': user_profile.realm.domain,
|
|
||||||
'OPTIN_IP': newsletter_data["IP"],
|
|
||||||
'OPTIN_TIME': datetime.datetime.isoformat(datetime.datetime.now()),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
lambda event: None)
|
|
||||||
|
|
||||||
@login_required(login_url = settings.HOME_NOT_LOGGED_IN)
|
@login_required(login_url = settings.HOME_NOT_LOGGED_IN)
|
||||||
def accounts_accept_terms(request):
|
def accounts_accept_terms(request):
|
||||||
email = request.user.email
|
email = request.user.email
|
||||||
|
|||||||
Reference in New Issue
Block a user