This commit restructures the layout of the move messages and move topic
modals to follow standard patterns from other modals (e.g., the invite
user modal). It includes the following changes:
- The intro text is removed from the modal for renaming a topic,
moving a topic, and moving messages between topics.
- The intro text is moved to the modal heading.
- If the heading doesn't fit on one line, it is abbreviated using
ellipsis.
Fixes#32168.
Adds COMPLIMENTARY_PLAN_TIERS to the CustomerPlan model so that
we start transitioning from the "legacy plan" language in the
billing system code. Adds a helper function that checks if the
plan tier is in COMPLIMENTARY_PLAN_TIERS.
Updates the sponsorship page context to use that helper function
and updates the relevant template for the updated user-facing
terminology.
Renames add_sponsorship_info_to_context to instead be
add_org_type_data_to_sponsorship_context since this function for
all billing entities is adding information about the organization
type for the sponsorship request form.
Being on a free trial also means that the billing entity is on a
paid plan.
If they are on a sponsored plan, then they are not on a free trial.
If they have a pending sponsorship request, then they will be
redirected to the billing page. Otherwise, they will be shown the
form to request a sponsored/discounted plan, which does not use
the free_trial boolean.
Reorders the logic in get_sponsorship_request_context so that the
early return for billing entities with a pending sponsorship request
that are also on a current paid plan is clearer.
* Uses em for width instead of px, matching the width of
the emoji style picker.
* Uses grid to line up columns, instead of flex with pixel widths
for the preview column.
* Add overflow hidden to look better on small widths.
The doc now shows instructions to setup the integration using
Slack's Events API instead of the legacy Outgoing webhook
service.
Co-authored-by: Alya Abbott <alya@zulip.com>
Co-authored-by: Lauryn Menard <lauryn@zulip.com>
A Slack fail condition occurs when we don't respond with HTTP 200 within
3 seconds after Slack calls our endpoint. If this happens, Slack will
retry sending the same payload. This is often triggered because we need
to perform callbacks when converting messages. To avoid sending the same
message multiple times, we block subsequent retry calls from Slack.
This commit returns early HTTP 200 response as soon as we get any retry
calls from Slack.
Part of #30465.
Payloads from Slack's Events API don't include human-readbale
information for a Slack username and for Slack channels.
This commit makes the Slack integration callback to the relevant
Slack API endpoints for that information.
Fixes#30074.
This commit adds 4 new payload fixtures to the Slack
integration for messages we don't process properly yet:
- Messages with code blocks.
- Messages with overlapping text formatting (e.g, bold
and italic).
- Messages with formatted mentions.
- Messages with quote blocks.
The follow-up plan to add support for these kind of
Slack messages is tracked in #30827.
Part of #30465.
This updates the Slack webhook integration to handle the Slack Events
API[1], while maintaining backwards compatibility with Slack's legacy
Outgoing Webhook service.
The Events API introduces the "challenge" handshake[2] to verify and
add a new webhook URL for them to call. This commit adds a handler for
the challenge handshake.
Additionally, this commit reformats incoming payloads using the Slack
text reformatter from `slack_message_conversion.py`. There is some
duplicative code here because of the difference in Slack export data
and Slack's webhook payload.
Part of #30465
[1]: https://api.slack.com/apis/events-api#using-events-api
[2]: https://api.slack.com/apis/events-api#handshake
Added a feature to the move message confirmation box to display the
count of messages that will be moved. The count updates dynamically
based on the selected option in the dropdown.
Fixes#23115.
This moves it "earlier" in the migrations graph, onto the last
migration in 9.x, and adds a merge migration to fold it back into
main's current migrations tip.
In the right side-bar, the popover states "Active x minutes ago",
even though the user could have been idle before going offline.
In that case we are stating something false, as the user was not
"Active x minutes ago", they were "Idle x minutes ago". Always
prioritizing the active_timestamp if possbile rather than taking
the max of active_timestamp and idle_timestamp fixes this issue.
Since we have many group based settings and many of them
use anonymous groups as default, there might be a group
with ID "1111" as group IDs keep increasing across a test
suite run and it is no longer an invalid group ID.
This commit updates the tests to use a large enough
value like "123456" as invalid group ID.
The test for updating group permissions when passing old value
used "1111" as an invalid group ID passed as new value as well
as old value. But now since we have many group based settings
and many of them use anonymous groups as default, there might
be a group with ID "1111" as group IDs keep increasing across
a test suite run and it is no longer an invalid group ID.
So, updated the test to -
- Use a large enough value like "123456" as new value for
testing invalid group ID case.
- Remove the test passing invalid value as "old" because we
do not check validity for old values and just compare it
with the actual current value of the setting.
The test for setting group permissions value when creating groups used
"1111" as an invalid group ID, but now since we have many group based
settings and many of them use anonymous groups as default, there might
be a group with ID "1111" as group IDs keep increasing across the test
suite run and it is no longer an invalid group ID.
So, updated the test to use a large enough number like "123456" as
invalid group ID.
For an incoming 1:1 DM, the recipient’s own recipient_id is useless to
the recipient themselves. Substitute the sender’s recipient_id, so the
recipient can use recipient_id as documented to uniquely represent the
set of 2 users in this conversation.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
Renames file and redirects existing links to "help/user-roles" as
the previous content tracks to that current file's content.
Updates existing links (excluding ReadtheDocs) to go to either
"help/user-roles" or "help/manage-permissions" depending on which
help center article applies to the content.
* css: Extract invalid input outline and shadow colors to variables.
We will use these colors in future for input pills and it would be
convenient to have them in a variable.
* group_setting_pill: Show outline on invalid input.
We could have manipulate the class directly from user_group_pill. But
it felt better to have `show_outline_on_invalid_input` as a param for
the input_pill prototype since we can have a consistent error state for
other pill input boxes if we want to.
* input_pill: Widget should not show as pending after pill creation.
* group_settings: Disable save changes button if pill widget is pending.
This will disable the button for group, realm and stream group settings.
* user_group_create: Don't go to next step with pending group widget.
We just show the red outline and shaking animation as an indication that
a group widget setting is pending when the user tries to go to the add
members step.
* stream_create: Don't go to next step with pending group widget.
Fixes#32113.
We just show the red outline and shaking animation as an indication that
a group widget setting is pending when the user tries to go to the add
subscribers step.