events: Send invites changes event to non-admin users also.

Earlier whenever a new invitation is created a event was sent
to only admin users. So, if invites by a non-admins user are changed
the invite panel does not live update.

This commit makes changes to also send event to non-admin
user if invites by them are changed.
This commit is contained in:
Ujjawal Modi 2023-08-05 18:20:19 +05:30 committed by Tim Abbott
parent 5e31a6b1c0
commit 88ec312b21
5 changed files with 24 additions and 10 deletions

View File

@ -42,6 +42,11 @@ format used by the Zulip server that they are interacting with.
reusable invitation links they have created. Previously, only admin users could reusable invitation links they have created. Previously, only admin users could
create and revoke reusable invitation links. create and revoke reusable invitation links.
* [`GET /events`](/api/get-events): When the set of invitations in an
organization changes, an `invites_changed` event is now sent to the
creator of the changed invitation, as well as all admin users.
Previously, this event was only sent to admin users.
**Feature level 208** **Feature level 208**
* [`POST /users/me/subscriptions`](/api/subscribe), * [`POST /users/me/subscriptions`](/api/subscribe),

View File

@ -33,7 +33,7 @@ DESKTOP_WARNING_VERSION = "5.9.3"
# Changes should be accompanied by documentation explaining what the # Changes should be accompanied by documentation explaining what the
# new level means in api_docs/changelog.md, as well as "**Changes**" # new level means in api_docs/changelog.md, as well as "**Changes**"
# entries in the endpoint's documentation in `zulip.yaml`. # entries in the endpoint's documentation in `zulip.yaml`.
API_FEATURE_LEVEL = 208 API_FEATURE_LEVEL = 209
# Bump the minor PROVISION_VERSION to indicate that folks should provision # Bump the minor PROVISION_VERSION to indicate that folks should provision
# only when going from an old version of the code to a newer version. Bump # only when going from an old version of the code to a newer version. Bump

View File

@ -273,7 +273,7 @@ def process_new_human_user(
).update(status=confirmation_settings.STATUS_REVOKED) ).update(status=confirmation_settings.STATUS_REVOKED)
if prereg_user is not None and prereg_user.referred_by is not None: if prereg_user is not None and prereg_user.referred_by is not None:
notify_invites_changed(user_profile.realm) notify_invites_changed(user_profile.realm, changed_invite_referrer=prereg_user.referred_by)
notify_new_user(user_profile) notify_new_user(user_profile)
# Clear any scheduled invitation emails to prevent them # Clear any scheduled invitation emails to prevent them

View File

@ -36,10 +36,15 @@ from zerver.models import (
from zerver.tornado.django_api import send_event from zerver.tornado.django_api import send_event
def notify_invites_changed(realm: Realm) -> None: def notify_invites_changed(
realm: Realm, *, changed_invite_referrer: Optional[UserProfile] = None
) -> None:
event = dict(type="invites_changed") event = dict(type="invites_changed")
admin_ids = [user.id for user in realm.get_admin_users_and_bots()] admin_ids = [user.id for user in realm.get_admin_users_and_bots()]
send_event(realm, event, admin_ids) recipient_ids = admin_ids
if changed_invite_referrer and changed_invite_referrer.id not in recipient_ids:
recipient_ids.append(changed_invite_referrer.id)
send_event(realm, event, recipient_ids)
def do_send_confirmation_email( def do_send_confirmation_email(
@ -321,7 +326,7 @@ def do_invite_users(
skipped, skipped,
sent_invitations=True, sent_invitations=True,
) )
notify_invites_changed(user_profile.realm) notify_invites_changed(user_profile.realm, changed_invite_referrer=user_profile)
def get_invitation_expiry_date(confirmation_obj: Confirmation) -> Optional[int]: def get_invitation_expiry_date(confirmation_obj: Confirmation) -> Optional[int]:
@ -446,7 +451,7 @@ def do_create_multiuse_invite_link(
invite.streams.set(streams) invite.streams.set(streams)
invite.invited_as = invited_as invite.invited_as = invited_as
invite.save() invite.save()
notify_invites_changed(referred_by.realm) notify_invites_changed(referred_by.realm, changed_invite_referrer=referred_by)
return create_confirmation_link( return create_confirmation_link(
invite, Confirmation.MULTIUSE_INVITE, validity_in_minutes=invite_expires_in_minutes invite, Confirmation.MULTIUSE_INVITE, validity_in_minutes=invite_expires_in_minutes
) )
@ -466,7 +471,7 @@ def do_revoke_user_invite(prereg_user: PreregistrationUser) -> None:
Confirmation.objects.filter(content_type=content_type, object_id=prereg_user.id).delete() Confirmation.objects.filter(content_type=content_type, object_id=prereg_user.id).delete()
prereg_user.delete() prereg_user.delete()
clear_scheduled_invitation_emails(email) clear_scheduled_invitation_emails(email)
notify_invites_changed(realm) notify_invites_changed(realm, changed_invite_referrer=prereg_user.referred_by)
def do_revoke_multi_use_invite(multiuse_invite: MultiuseInvite) -> None: def do_revoke_multi_use_invite(multiuse_invite: MultiuseInvite) -> None:
@ -479,7 +484,7 @@ def do_revoke_multi_use_invite(multiuse_invite: MultiuseInvite) -> None:
).delete() ).delete()
multiuse_invite.status = confirmation_settings.STATUS_REVOKED multiuse_invite.status = confirmation_settings.STATUS_REVOKED
multiuse_invite.save(update_fields=["status"]) multiuse_invite.save(update_fields=["status"])
notify_invites_changed(realm) notify_invites_changed(realm, changed_invite_referrer=multiuse_invite.referred_by)
def do_resend_user_invite_email(prereg_user: PreregistrationUser) -> int: def do_resend_user_invite_email(prereg_user: PreregistrationUser) -> int:

View File

@ -955,10 +955,14 @@ paths:
} }
- type: object - type: object
description: | description: |
A simple event sent to organization administrators when the A simple event sent when the set of invitations changes.
set of invitations changes; this tells clients they need to refetch This event is sent to organization administrators and the creator of
the changed invitation; this tells clients they need to refetch
data from `GET /invites` if they are displaying UI containing active data from `GET /invites` if they are displaying UI containing active
invitations. invitations.
**Changes**: Before Zulip 8.0 (feature level 209), this event was
only sent to organization administrators.
properties: properties:
id: id:
$ref: "#/components/schemas/EventIdSchema" $ref: "#/components/schemas/EventIdSchema"