From d72d1aabe6f0f18c2457332bc4365bdd5ecf8caa Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 13 Jan 2020 14:18:15 +0300 Subject: [PATCH] Disable creating public polls in channels. --- .../SourceFiles/boxes/create_poll_box.cpp | 22 ++++++++++++------- Telegram/SourceFiles/boxes/create_poll_box.h | 6 +++++ .../SourceFiles/window/window_peer_menu.cpp | 3 +++ 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/Telegram/SourceFiles/boxes/create_poll_box.cpp b/Telegram/SourceFiles/boxes/create_poll_box.cpp index 6af46f625d..e2813eac7f 100644 --- a/Telegram/SourceFiles/boxes/create_poll_box.cpp +++ b/Telegram/SourceFiles/boxes/create_poll_box.cpp @@ -712,8 +712,10 @@ void Options::checkLastOption() { CreatePollBox::CreatePollBox( QWidget*, not_null session, + PublicVotes publicVotes, Api::SendType sendType) : _session(session) +, _publicVotes(publicVotes) , _sendType(sendType) { } @@ -813,13 +815,15 @@ object_ptr CreatePollBox::setupContent() { AddSkip(container); AddSubsectionTitle(container, tr::lng_polls_create_settings()); - const auto anonymous = container->add( - object_ptr( - container, - tr::lng_polls_create_anonymous(tr::now), - true, - st::defaultCheckbox), - st::createPollCheckboxMargin); + const auto anonymous = (_publicVotes == PublicVotes::Enabled) + ? container->add( + object_ptr( + container, + tr::lng_polls_create_anonymous(tr::now), + true, + st::defaultCheckbox), + st::createPollCheckboxMargin) + : nullptr; const auto multiple = container->add( object_ptr( container, @@ -873,7 +877,9 @@ object_ptr CreatePollBox::setupContent() { auto result = PollData(&_session->data(), id); result.question = question->getLastText().trimmed(); result.answers = options->toPollAnswers(); - result.setFlags((anonymous->checked() ? Flag(0) : Flag::PublicVotes) + const auto publicVotes = (anonymous && !anonymous->checked()); + result.setFlags(Flag(0) + | (publicVotes ? Flag::PublicVotes : Flag(0)) | (multiple->checked() ? Flag::MultiChoice : Flag(0)) | (quiz->checked() ? Flag::Quiz : Flag(0))); return result; diff --git a/Telegram/SourceFiles/boxes/create_poll_box.h b/Telegram/SourceFiles/boxes/create_poll_box.h index 57b7fa789e..d61cf80b13 100644 --- a/Telegram/SourceFiles/boxes/create_poll_box.h +++ b/Telegram/SourceFiles/boxes/create_poll_box.h @@ -27,10 +27,15 @@ public: PollData poll; Api::SendOptions options; }; + enum class PublicVotes { + Enabled, + Disabled, + }; CreatePollBox( QWidget*, not_null session, + PublicVotes publicVotes, Api::SendType sendType); rpl::producer submitRequests() const; @@ -47,6 +52,7 @@ private: not_null container); const not_null _session; + const PublicVotes _publicVotes = PublicVotes(); const Api::SendType _sendType = Api::SendType(); Fn _setInnerFocus; Fn()> _dataIsValidValue; diff --git a/Telegram/SourceFiles/window/window_peer_menu.cpp b/Telegram/SourceFiles/window/window_peer_menu.cpp index 90e8ff9068..96486663ff 100644 --- a/Telegram/SourceFiles/window/window_peer_menu.cpp +++ b/Telegram/SourceFiles/window/window_peer_menu.cpp @@ -710,6 +710,9 @@ void PeerMenuShareContactBox( void PeerMenuCreatePoll(not_null peer) { const auto box = Ui::show(Box( &peer->session(), + ((peer->isChannel() && !peer->isMegagroup()) + ? CreatePollBox::PublicVotes::Disabled + : CreatePollBox::PublicVotes::Enabled), Api::SendType::Normal)); const auto lock = box->lifetime().make_state(false); box->submitRequests(