diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index 39ea9d7e2..e0173e366 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -2890,8 +2890,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_rights_group_invite_link" = "Invite users via link"; "lng_rights_group_invite" = "Add users"; "lng_rights_group_pin" = "Pin messages"; -"lng_rights_group_pin_with_topics" = "Pin messages and topics"; -"lng_rights_group_pin_topics" = "Pin topics"; "lng_rights_group_topics" = "Manage topics"; "lng_rights_group_add_topics" = "Create topics"; "lng_rights_group_manage_calls" = "Manage voice chats"; @@ -3110,8 +3108,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_admin_log_admin_invite_users" = "Add members"; "lng_admin_log_admin_invite_link" = "Invite users via link"; "lng_admin_log_admin_pin_messages" = "Pin messages"; -"lng_admin_log_admin_pin_messages_topics" = "Pin messages and topics"; -"lng_admin_log_admin_pin_topics" = "Pin topics"; "lng_admin_log_admin_manage_topics" = "Manage topics"; "lng_admin_log_admin_create_topics" = "Create topics"; "lng_admin_log_admin_manage_calls" = "Manage voice chats"; diff --git a/Telegram/SourceFiles/boxes/peers/edit_participant_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_participant_box.cpp index aafc970d0..5d3e3b69b 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_participant_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_participant_box.cpp @@ -224,7 +224,7 @@ ChatAdminRightsInfo EditAdminBox::defaultRights() const { | Flag::BanUsers | Flag::InviteByLinkOrAdd | Flag::ManageTopics - | Flag::PinMessagesOrTopics + | Flag::PinMessages | Flag::ManageCall) } : ChatAdminRightsInfo{ (Flag::ChangeInfo | Flag::PostMessages @@ -329,14 +329,10 @@ void EditAdminBox::prepare() { const auto anyoneCanAddMembers = chat ? chat->anyoneCanAddMembers() : channel->anyoneCanAddMembers(); - const auto anyoneCanPinMessages = chat - ? chat->anyoneCanPinMessages() - : channel->anyoneCanPinMessages(); const auto options = Data::AdminRightsSetOptions{ .isGroup = isGroup, .isForum = peer()->isForum(), .anyoneCanAddMembers = anyoneCanAddMembers, - .anyoneCanPinMessages = anyoneCanPinMessages, }; auto [checkboxes, getChecked, changes] = CreateEditAdminRights( inner, diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_permissions_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_permissions_box.cpp index 37b73af89..376cd7c1a 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_permissions_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_permissions_box.cpp @@ -189,7 +189,7 @@ ChatRestrictions DisabledByAdminRights(not_null peer) { | ((adminRights & Admin::ManageTopics) ? Flag(0) : Flag::CreateTopics) - | ((adminRights & Admin::PinMessagesOrTopics) + | ((adminRights & Admin::PinMessages) ? Flag(0) : Flag::PinMessages) | ((adminRights & Admin::InviteByLinkOrAdd) @@ -311,15 +311,10 @@ ChatAdminRights DisabledByDefaultRestrictions(not_null peer) { } Unexpected("User in DisabledByDefaultRestrictions."); }()); - const auto forum = peer->isForum(); return Flag(0) - // - // We allow to edit 'pin_messages' admin right in forums - // even if it is allowed in default permissions, because - // if everyone can 'pin_messages' admin can also pin topics. - | ((forum || (restrictions & Restriction::PinMessages)) + | ((restrictions & Restriction::PinMessages) ? Flag(0) - : Flag::PinMessagesOrTopics) + : Flag::PinMessages) // // We allow to edit 'invite_users' admin right no matter what // is chosen in default permissions for 'invite_users', because @@ -765,11 +760,7 @@ std::vector AdminRightLabels( ? tr::lng_rights_group_invite_link(tr::now) : tr::lng_rights_group_invite(tr::now) }, { Flag::ManageTopics, tr::lng_rights_group_topics(tr::now) }, - { Flag::PinMessagesOrTopics, !options.isForum - ? tr::lng_rights_group_pin(tr::now) - : options.anyoneCanPinMessages - ? tr::lng_rights_group_pin_topics(tr::now) - : tr::lng_rights_group_pin_with_topics(tr::now) }, + { Flag::PinMessages, tr::lng_rights_group_pin(tr::now) }, { Flag::ManageCall, tr::lng_rights_group_manage_calls(tr::now) }, { Flag::Anonymous, tr::lng_rights_group_anonymous(tr::now) }, { Flag::AddAdmins, tr::lng_rights_add_admins(tr::now) }, diff --git a/Telegram/SourceFiles/core/local_url_handlers.cpp b/Telegram/SourceFiles/core/local_url_handlers.cpp index baf9d8a8f..1a2895bb7 100644 --- a/Telegram/SourceFiles/core/local_url_handlers.cpp +++ b/Telegram/SourceFiles/core/local_url_handlers.cpp @@ -299,7 +299,7 @@ bool ShowWallPaper( } else if (element == u"manage_topics"_q) { result |= ChatAdminRight::ManageTopics; } else if (element == u"pin_messages"_q) { - result |= ChatAdminRight::PinMessagesOrTopics; + result |= ChatAdminRight::PinMessages; } else if (element == u"promote_members"_q) { result |= ChatAdminRight::AddAdmins; } else if (element == u"manage_video_chats"_q) { diff --git a/Telegram/SourceFiles/data/data_channel.cpp b/Telegram/SourceFiles/data/data_channel.cpp index 14850d8d0..e9434c40a 100644 --- a/Telegram/SourceFiles/data/data_channel.cpp +++ b/Telegram/SourceFiles/data/data_channel.cpp @@ -528,10 +528,6 @@ bool ChannelData::anyoneCanAddMembers() const { return !(defaultRestrictions() & Restriction::AddParticipants); } -bool ChannelData::anyoneCanPinMessages() const { - return !(defaultRestrictions() & Restriction::PinMessages); -} - bool ChannelData::hiddenPreHistory() const { return (flags() & Flag::PreHistoryHidden); } diff --git a/Telegram/SourceFiles/data/data_channel.h b/Telegram/SourceFiles/data/data_channel.h index e61be6eb0..73a7cc2b4 100644 --- a/Telegram/SourceFiles/data/data_channel.h +++ b/Telegram/SourceFiles/data/data_channel.h @@ -324,7 +324,6 @@ public: [[nodiscard]] bool canBanMembers() const; [[nodiscard]] bool canSendPolls() const; [[nodiscard]] bool anyoneCanAddMembers() const; - [[nodiscard]] bool anyoneCanPinMessages() const; [[nodiscard]] bool canEditMessages() const; [[nodiscard]] bool canDeleteMessages() const; diff --git a/Telegram/SourceFiles/data/data_chat.cpp b/Telegram/SourceFiles/data/data_chat.cpp index 3ab234a1b..8d67ccff8 100644 --- a/Telegram/SourceFiles/data/data_chat.cpp +++ b/Telegram/SourceFiles/data/data_chat.cpp @@ -58,7 +58,7 @@ ChatAdminRightsInfo ChatData::defaultAdminRights(not_null user) { | Flag::DeleteMessages | Flag::BanUsers | Flag::InviteByLinkOrAdd - | Flag::PinMessagesOrTopics + | Flag::PinMessages | Flag::ManageCall | (isCreator ? Flag::AddAdmins : Flag(0))); } @@ -116,10 +116,6 @@ bool ChatData::anyoneCanAddMembers() const { return !(defaultRestrictions() & ChatRestriction::AddParticipants); } -bool ChatData::anyoneCanPinMessages() const { - return !(defaultRestrictions() & ChatRestriction::PinMessages); -} - void ChatData::setName(const QString &newName) { updateNameDelayed(newName.isEmpty() ? name() : newName, {}, {}); } diff --git a/Telegram/SourceFiles/data/data_chat.h b/Telegram/SourceFiles/data/data_chat.h index 29ce63983..eaccda8c4 100644 --- a/Telegram/SourceFiles/data/data_chat.h +++ b/Telegram/SourceFiles/data/data_chat.h @@ -112,7 +112,6 @@ public: [[nodiscard]] bool canBanMembers() const; [[nodiscard]] bool canSendPolls() const; [[nodiscard]] bool anyoneCanAddMembers() const; - [[nodiscard]] bool anyoneCanPinMessages() const; void applyEditAdmin(not_null user, bool isAdmin); diff --git a/Telegram/SourceFiles/data/data_chat_participant_status.h b/Telegram/SourceFiles/data/data_chat_participant_status.h index 03f1ccc3a..828a742db 100644 --- a/Telegram/SourceFiles/data/data_chat_participant_status.h +++ b/Telegram/SourceFiles/data/data_chat_participant_status.h @@ -19,7 +19,7 @@ enum class ChatAdminRight { DeleteMessages = (1 << 3), BanUsers = (1 << 4), InviteByLinkOrAdd = (1 << 5), - PinMessagesOrTopics = (1 << 7), + PinMessages = (1 << 7), AddAdmins = (1 << 9), Anonymous = (1 << 10), ManageCall = (1 << 11), @@ -74,7 +74,6 @@ struct AdminRightsSetOptions { bool isGroup : 1 = false; bool isForum : 1 = false; bool anyoneCanAddMembers : 1 = false; - bool anyoneCanPinMessages : 1 = false; }; struct RestrictionsSetOptions { diff --git a/Telegram/SourceFiles/data/data_forum_topic.cpp b/Telegram/SourceFiles/data/data_forum_topic.cpp index a83d3f98f..9bb0acefe 100644 --- a/Telegram/SourceFiles/data/data_forum_topic.cpp +++ b/Telegram/SourceFiles/data/data_forum_topic.cpp @@ -206,7 +206,7 @@ bool ForumTopic::my() const { } bool ForumTopic::canEdit() const { - return my() || channel()->canEditTopics(); + return my() || channel()->canManageTopics(); } bool ForumTopic::canDelete() const { @@ -223,12 +223,7 @@ bool ForumTopic::canToggleClosed() const { } bool ForumTopic::canTogglePinned() const { - if (creating()) { - return false; - } - const auto channel = this->channel(); - return channel->amCreator() - || (channel->adminRights() & ChatAdminRight::PinMessagesOrTopics); + return !creating() && channel()->canManageTopics(); } bool ForumTopic::creating() const { diff --git a/Telegram/SourceFiles/data/data_peer.cpp b/Telegram/SourceFiles/data/data_peer.cpp index e00bdc5f4..2b89ab335 100644 --- a/Telegram/SourceFiles/data/data_peer.cpp +++ b/Telegram/SourceFiles/data/data_peer.cpp @@ -538,7 +538,7 @@ bool PeerData::canCreateTopics() const { return false; } -bool PeerData::canEditTopics() const { +bool PeerData::canManageTopics() const { if (const auto channel = asChannel()) { return channel->isForum() && (channel->amCreator() @@ -970,7 +970,7 @@ Data::RestrictionCheckResult PeerData::amRestricted( } else if (right == ChatRestriction::CreateTopics) { return chat->adminRights() & ChatAdminRight::ManageTopics; } else if (right == ChatRestriction::PinMessages) { - return chat->adminRights() & ChatAdminRight::PinMessagesOrTopics; + return chat->adminRights() & ChatAdminRight::PinMessages; } else { return chat->hasAdminRights(); } diff --git a/Telegram/SourceFiles/data/data_peer.h b/Telegram/SourceFiles/data/data_peer.h index 1893dfd82..f79f34e79 100644 --- a/Telegram/SourceFiles/data/data_peer.h +++ b/Telegram/SourceFiles/data/data_peer.h @@ -340,7 +340,7 @@ public: [[nodiscard]] bool canPinMessages() const; [[nodiscard]] bool canEditMessagesIndefinitely() const; [[nodiscard]] bool canCreateTopics() const; - [[nodiscard]] bool canEditTopics() const; + [[nodiscard]] bool canManageTopics() const; [[nodiscard]] bool canExportChatHistory() const; // Returns true if about text was changed. diff --git a/Telegram/SourceFiles/data/data_peer_values.cpp b/Telegram/SourceFiles/data/data_peer_values.cpp index 997e32f69..08feba690 100644 --- a/Telegram/SourceFiles/data/data_peer_values.cpp +++ b/Telegram/SourceFiles/data/data_peer_values.cpp @@ -264,7 +264,7 @@ rpl::producer CanPinMessagesValue(not_null peer) { | ChatDataFlag::Creator; return rpl::combine( PeerFlagsValue(chat, mask), - AdminRightValue(chat, ChatAdminRight::PinMessagesOrTopics), + AdminRightValue(chat, ChatAdminRight::PinMessages), DefaultRestrictionValue(chat, ChatRestriction::PinMessages), []( ChatDataFlags flags, @@ -284,7 +284,7 @@ rpl::producer CanPinMessagesValue(not_null peer) { return rpl::single(true); } return rpl::combine( - AdminRightValue(megagroup, ChatAdminRight::PinMessagesOrTopics), + AdminRightValue(megagroup, ChatAdminRight::PinMessages), DefaultRestrictionValue(megagroup, ChatRestriction::PinMessages), PeerFlagsValue( megagroup, diff --git a/Telegram/SourceFiles/history/admin_log/history_admin_log_item.cpp b/Telegram/SourceFiles/history/admin_log/history_admin_log_item.cpp index 02d87fa98..699c8f3fe 100644 --- a/Telegram/SourceFiles/history/admin_log/history_admin_log_item.cpp +++ b/Telegram/SourceFiles/history/admin_log/history_admin_log_item.cpp @@ -199,18 +199,9 @@ TextWithEntities GenerateAdminChangeText( const auto useInviteLinkPhrase = channel->isMegagroup() && channel->anyoneCanAddMembers(); - const auto pinMessagesAndTopics = channel->isForum() - && !channel->anyoneCanPinMessages(); - const auto pinOnlyTopics = channel->isForum() - && channel->anyoneCanPinMessages(); const auto invitePhrase = useInviteLinkPhrase ? tr::lng_admin_log_admin_invite_link : tr::lng_admin_log_admin_invite_users; - const auto pinPhrase = pinOnlyTopics - ? tr::lng_admin_log_admin_pin_topics - : pinMessagesAndTopics - ? tr::lng_admin_log_admin_pin_messages_topics - : tr::lng_admin_log_admin_pin_messages; const auto callPhrase = channel->isBroadcast() ? tr::lng_admin_log_admin_manage_calls_channel : tr::lng_admin_log_admin_manage_calls; @@ -222,12 +213,11 @@ TextWithEntities GenerateAdminChangeText( { Flag::BanUsers, tr::lng_admin_log_admin_ban_users }, { Flag::InviteByLinkOrAdd, invitePhrase }, { Flag::ManageTopics, tr::lng_admin_log_admin_manage_topics }, - { Flag::PinMessagesOrTopics, pinPhrase }, + { Flag::PinMessages, tr::lng_admin_log_admin_pin_messages }, { Flag::ManageCall, tr::lng_admin_log_admin_manage_calls }, { Flag::AddAdmins, tr::lng_admin_log_admin_add_admins }, }; phraseMap[Flag::InviteByLinkOrAdd] = invitePhrase; - phraseMap[Flag::PinMessagesOrTopics] = pinPhrase; phraseMap[Flag::ManageCall] = callPhrase; if (!channel->isMegagroup()) {