Slugs in dm urls aren't really passed through url decoding and
shouldn't throw any error currently if hashReplacement aren't enforced.
But we still encode them in this commit to make this consistent.
The error message text had an unfortunate hover effect, resulting
from the error container element being inside the main widget element.
Move the error message element to sit outside the main element; this also
fixes overflow issues with the error element.
Fixes#17571.
This commit adds code to live update the group permissions panel
when user loses access to a stream by removing the stream and its
settings from the UI.
This commit extracts code to hide "Organization permissions",
"Channel permissions" and "User group permissions" headings
in group permissions panel if there are no settings under
these sections and show the empty panel text if group does
not have any assigned permissions.
This new function will help in avoiding duplicate code in next
commit which will add code to live update the permissions
panel when user loses access to a stream.
When resizing subheader heights to be equal on the left and
right sides, the subheader being resized was set to 1px taller
because height_of included borders in its calculation.
This commit fixes that such that subheaders on both sides are
of same height.
This commit restructures the HTML for stream and group
settings overlay such that we first write all the HTML
for left side and then right side.
This change is important so that focus behavior during
keyboard navigation is correct in narrow screens and
does not move to the elements which are hidden after
we fix it in #26941.
This changes the focus behavior on keyboard navigation
in wide screens where first all of the left panel will
be covered from top to bottom and then the right panel,
but it is fine.
Previously, when a user navigated to a private channel that they had
metadata access to but not content access, they would see a confusing
"You are not subscribed" bookend and a generic empty-feed banner. This
was misleading, as the issue is about permissions, not subscription
status.
The empty message feed placeholder displays a more accurate message
for this case. And the logic in `message_list.ts` is changed to
prevent the trailing bookend from rendering at all in this case.
Fixes#36075
Co-authored-by: Lauryn Menard <lauryn@zulip.com>
This adds infrastructure to prevent duplicate custom emails from being
sent to users when the management command is run multiple times
with identical email template content.
The implementation uses RealmAuditLog tracking with a new
CUSTOM_EMAIL_SENT event type (810) that stores a hash of the email
template content.
Fixes: #19529.
This commit adds support to revoke mobile push notifications
for messages when deleted.
Fixes#26584.
Signed-off-by: Prakhar Pratyush <prakhar@zulip.com>
Zulip production suite / ${{ matrix.name }} (zulip/ci:bookworm, --test-custom-db, Debian 12 production install with custom db name and user, bookworm) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:jammy, , Ubuntu 22.04 production install and PostgreSQL upgrade with pgroonga, jammy) (push) Has been cancelled
Previously the counts were being generated assuming `show_channel_folders`
was true. But when we're not showing folders, the unread counts for
folders need to be distributed to the "normal" section.
Earlier, we were constructing the APNs & FCM payloads for legacy &
E2EE push notifications even if the user didn't have such a registered
device to send notifications to.
This commit makes changes to construct:
* apns_payload only if the user has an apple device registered
* fcm_payload only if the user has an android device registered
* payload_to_encrypt only if the user has push device registered
which supports E2EE.
Also, now we perform one db query instead of two to calculate
`apple_devices` and `android_devices` for the legacy case.
Overall, this helps to avoid unnecessary compute.
Signed-off-by: Prakhar Pratyush <prakhar@zulip.com>
This commit updates the `transaction.atomic` context manager
used to take a lock on Message row in `handle_push_notification`
to use `durable=True` instead of `savepoint=False`. It helps to
avoid introducing an outer transaction by mistake - resulting in
locking row for a longer duration.
Signed-off-by: Prakhar Pratyush <prakhar@zulip.com>
Zulip production suite / ${{ matrix.name }} (zulip/ci:bookworm, --test-custom-db, Debian 12 production install with custom db name and user, bookworm) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:jammy, , Ubuntu 22.04 production install and PostgreSQL upgrade with pgroonga, jammy) (push) Has been cancelled
This commit fixes textarea width being too small for "Long text"
custom profile fields in "Manage user" modal. This commit removes
the CSS which set the incorrect width and also restricts the
maximum width such that it does not overflows on narrow screens.
This commit adds CSS to make sure dropdowns and inputs, including
date type and pill inputs, remain inside the visible area of the
modals and are not cut off in narrow width screens.
Apart from setting max-width, this commit also changes the grid
CSS for datepicker input so the layout is arranged in such a way
that the "x" button is inside the input element and we can set
the max-width in a simpler way.
We previously added "settings_text_input" class to the datepickr
input in "Manage user" form as well, while other inputs have
"modal_text_input" class. This commit fixes that.
The format was changed in social-core 4.5.0-5-gb6317968 and the old
format is removed in 4.7.0-49-g5d98d92a.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
The `gh pr list --search` results may have an _empty_ state for the
first several seconds, leading to this immediately aborting, deleting
the branch and closing the PR.