Commit Graph

67120 Commits

Author SHA1 Message Date
Alya Abbott
62a086b60f help: Rearrange and expand user onboarding guidelines. 2025-11-03 15:54:45 -08:00
Alya Abbott
ec2557e93a contributor docs: Explain mechanics of adding a help center page. 2025-11-03 15:54:42 -08:00
Alya Abbott
6e7d595fd9 help: Document clearing of mobile notifications for deleted messages.
Document changes made in #26815.
2025-11-03 15:47:40 -08:00
Prakhar Pratyush
25630f316b push_notification: Improve logged message when apns_context is None.
Earlier, while sending notification if `apns_context=None` - we logged:
"APNs: Dropping a notification because nothing configured. Set
ZULIP_SERVICES_URL (or APNS_CERT_FILE)." which is not accurate for E2EE
case.

For the non-E2EE case it is correct because configuring
ZULIP_SERVICES_URL results in transfering the responsbility to
make API call to APNs to the bouncer. Or they can configure
APNS_CERT_FILE if they want to send directly.

In E2EE case, the `send_e2ee_push_notification_apple` is part of
bouncer so configuring `ZULIP_SERVICES_URL` doesn't help. One needs
to configure either `APNS_TOKEN_KEY_FILE` or `APNS_CERT_FILE`.

Message to log is updated accordingly + severity increased from
DEBUG to ERROR.

Signed-off-by: Prakhar Pratyush <prakhar@zulip.com>
2025-11-03 15:45:22 -08:00
Prakhar Pratyush
d893496de1 push_notification: Drop notif if ANDROID_FCM_CREDENTIALS_PATH is unset.
If `ANDROID_FCM_CREDENTIALS_PATH` is unset it results in fcm_app=None.
We should log error in this case and return, not doing so will result
in runtime error.

Signed-off-by: Prakhar Pratyush <prakhar@zulip.com>
2025-11-03 15:45:22 -08:00
Prakhar Pratyush
06501ab208 notification_data: Fix a typo.
Signed-off-by: Prakhar Pratyush <prakhar@zulip.com>
2025-11-03 15:45:22 -08:00
Alex Vandiver
7a640cf91b rocketchat: Emoji can have an ObjectID as an _id. 2025-11-03 13:55:47 -08:00
Alex Vandiver
6c1f3c09ba rocketchat: Write relative paths into emoji metadata. 2025-11-03 13:53:35 -08:00
Shubham Padia
2c40b6168a help: Skip redirect for non-document requests in dev server.
The port redirect is only needed for document requests. When doing it
for all requests, including astro assets, hot reload in dev server
stopped working since the assets could not be resolved on the hot
reload.
2025-11-03 13:52:54 -08:00
Shubham Padia
f76e450282 help: Do not redirect port in case of --only-help-center.
We redirect non /help URLs to port 9991 when help center is running on
9995, since our webapp lives on 9991. When we run `run-dev` with
`--only-help-center` flag, the help center runs directly on port 9991.
2025-11-03 13:52:54 -08:00
Aman Agrawal
cd433349a2 new_registration: Move human verification from popup to inline style.
Placed text just below the "Create organization" button.
Used styling to match "Learn how to import..." above.
Hidden the checkbox after the verification is done.
The verification text is hidden after 2s with a fadeout after 1s delay.

Fixes #36086
2025-11-03 12:19:57 -08:00
Aman Agrawal
dc88b0c9f5 stream_settings_ui: Show correct channel view based on user setting. 2025-11-03 12:18:45 -08:00
Aman Agrawal
5361a081e6 tooltips: Show correct hotkey to narrow to list of channel topics. 2025-11-03 12:18:45 -08:00
Aman Agrawal
b651d46618 narrow_channel_header: Navigate to use set view for channel on click. 2025-11-03 12:18:45 -08:00
Prakhar Pratyush
048b4a6ddf push_notifications: Fix error while sending legacy notification.
While sending push notifications for a user in
realm with `require_e2ee_push_notifications=true` and no
iOS device registered, it resulted in an error.

Also, while sending notif to revoke in realm with
`require_e2ee_push_notifications=true` and no android
device registered, it resulted in an error.

This commit fixes the bug by improving the checks to apply
the redact logic only if android/iOS device is registered
and it's not a remove event.

Co-authored-by: Tim Abbott <tabbott@zulip.com>

Signed-off-by: Prakhar Pratyush <prakhar@zulip.com>
2025-11-03 08:15:18 -08:00
Aman Agrawal
71a89be0a9 inbox: Fix other channel folder name when adding/removing folders. 2025-11-02 14:43:58 -08:00
Karl Stolley
f3194057ae message_row: Use CSS selectors to hide reactions, reminders. 2025-11-02 14:42:24 -08:00
Aman Agrawal
418bd9ff06 reminders_overlay_ui: Allow focusing a specific reminder.
We focus on the reminder in the overlay based on the reminder
message clicked by the user.
2025-11-02 14:42:24 -08:00
Aman Agrawal
9106c85eca messages_overlay_ui: Fix focused row out of view.
Since we were always scrolling to top, the focused row was not
visible.

Fixed by scrolling to the focused element.
2025-11-02 14:42:24 -08:00
Aman Agrawal
afa38e8db9 reminder: Show scheduled reminder info on render message. 2025-11-02 14:42:24 -08:00
Aman Agrawal
c6d720f532 message_store: Provide more information for Message properties.
The inline comments were too brief to expalin how this property
is being used or their intended purpose.
2025-11-02 14:42:24 -08:00
Pratik Chanda
152ad3bf3d hash: Use encoding for slugs in dm narrow hashes.
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.
2025-11-02 14:37:30 -08:00
Aman Agrawal
f86654ba5f slack_import: Ask importer for default email address visibility.
Fixes #34982
2025-11-02 14:36:20 -08:00
Aman Agrawal
4bd9bb1995 create_realm: Extract logic to set default email visibility.
Extract default email address visibility.
This can be used for function argument defaults without
calling the function.
2025-11-02 14:36:20 -08:00
Yogesh
15f8a63b06
settings: Remove hover effect from error message text.
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.
2025-11-02 11:47:30 -08:00
Sahil Batra
ca46e09f41 groups-ui: Live update permissions panel on losing stream access.
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.
2025-11-02 11:42:36 -08:00
Sahil Batra
2b8fb4e161 user_group_edit: Extract function to hide empty permissions section.
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.
2025-11-02 11:42:36 -08:00
Sahil Batra
c471c9a0c4 user_group_edit: Pass only group ID to get_edit_container.
get_edit_container only required ID of the user group and
not the whole group object.
2025-11-02 11:42:36 -08:00
Sahil Batra
60be02d453 resize: Fix resizing height of stream settings headers.
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.
2025-11-02 11:39:57 -08:00
Sahil Batra
c58414b0ca settings: Restructure HTML for stream and groups overlay.
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.
2025-11-02 11:39:57 -08:00
santhoshkumarCodes
ecdfb14cb7 message-view: Fix banner/bookend for private channel no content access.
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>
2025-11-02 11:35:53 -08:00
The Dance
a028a6b9fd custom_emails: Prevent duplicate emails from send_custom_email command.
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.
2025-11-02 11:17:09 -08:00
Vector73
ba637d4e2c css: Fix inconsistent width of select fields in preferences settings. 2025-11-01 10:51:01 -07:00
Vector73
5704abf8b4 settings: Convert language picker to dropdown widget.
Fixes #35861.
2025-11-01 10:51:01 -07:00
Anders Kaseorg
be18d71624 dependencies: Upgrade JavaScript dependencies.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2025-11-01 07:24:57 -07:00
Anders Kaseorg
55293f57a8 eslint: Fix unicorn/no-immediate-mutation.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2025-11-01 07:24:57 -07:00
Anders Kaseorg
71ebbb30f1 eslint: Fix unicorn/no-useless-collection-argument.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2025-11-01 07:24:57 -07:00
Anders Kaseorg
cd1ced82d6 eslint: Fix @typescript-eslint/prefer-optional-chain.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2025-11-01 07:24:57 -07:00
Anders Kaseorg
8396c14cdc e2e-tests: Fix pageerror parameter type.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2025-11-01 07:24:57 -07:00
Anders Kaseorg
35d20b04d1 install-node: Upgrade Node.js from 22.20.0 to 24.11.0.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2025-11-01 07:24:57 -07:00
Prakhar Pratyush
7260ba689f push_notifications: Clear push notifications on message deletion.
This commit adds support to revoke mobile push notifications
for messages when deleted.

Fixes #26584.

Signed-off-by: Prakhar Pratyush <prakhar@zulip.com>
2025-10-31 16:05:21 -07:00
Aman Agrawal
8b11e88a91 stripe: Upgrade to latest version.
This includes some changes to specify the correct type for
params.
2025-10-31 16:01:10 -07:00
Evy Kassirer
1e78447c50 message_store: Edit message content in a helper function.
In a future commit, this will be where we ensure the saved
topic links are up to date.
2025-10-30 17:46:10 -07:00
Evy Kassirer
04244f7099 message_edit: Fix stale comment about update message function. 2025-10-30 15:57:33 -07:00
Karl Stolley
9fe24279d7 inputs: Remove selectors for unused input types.
Some checks failed
API Documentation Update Check / check-feature-level-updated (push) Has been cancelled
Code scanning / CodeQL (push) Has been cancelled
Zulip production suite / Ubuntu 22.04 production build (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:bookworm, true, false, Debian 12 (Python 3.11, backend + documentation), bookworm) (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:jammy, false, true, Ubuntu 22.04 (Python 3.10, backend + frontend), jammy) (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:noble, false, false, Ubuntu 24.04 (Python 3.12, backend), noble) (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:trixie, false, false, Debian 13 (Python 3.13, backend), trixie) (push) Has been cancelled
API Documentation Update Check / notify-if-api-docs-changed (push) Has been cancelled
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
Zulip production suite / ${{ matrix.name }} (zulip/ci:noble, , Ubuntu 24.04 production install, noble) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:trixie, , Debian 13 production install, trixie) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:bookworm-7.0, 7.0 Version Upgrade, bookworm) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:bookworm-8.0, 8.0 Version Upgrade, bookworm) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:jammy-6.0, 6.0 Version Upgrade, jammy) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:noble-10.0, 10.0 Version Upgrade, noble) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:noble-9.0, 9.0 Version Upgrade, noble) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:trixie-11.0, 11.0 Version Upgrade, trixie) (push) Has been cancelled
2025-10-28 15:01:44 -07:00
Karl Stolley
a2c22795c8 inputs: Remove type=number from styles.
There are no Zulip inputs that take this type; the only
instances of type="number" are in the portico, which does
not load zulip.css.
2025-10-28 15:01:44 -07:00
Evy Kassirer
a8493e71aa channel_folders: Fix unread counts for show_channel_folders option.
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.
2025-10-28 13:50:41 -07:00
Evy Kassirer
dbcef2efd3 stream_list: Fix two bugs related to is_filtering_inactives.
(1) Remove the "inactive-or-muted-in-channel-folder" classname
    when channels stop being considered inactive on rerender.
(2) The toggle button shouldn't mention inactive channels if
    we're not hiding them.

Discussed here:
https://chat.zulip.org/#narrow/channel/101-design/topic/hide.20inactive.20channel.20setting/near/2272941
2025-10-28 13:32:01 -07:00
Prakhar Pratyush
1468c8c160 push_notification: Prepare payload only if registered device exists.
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>
2025-10-28 13:29:02 -07:00
Prakhar Pratyush
140e575ddc push_notification: Use durable=True for the outermost transaction.
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>
2025-10-28 13:29:02 -07:00