protected function handleOptOutLinks() { if (!($topic = $this->getTopic())) { return; } if (!($action = post('action'))) { return; } if (!in_array($action, ['unfollow', 'unsubscribe'])) { return; } /* * Attempt to find member using dry authentication */ if (!($member = $this->getMember())) { if (!($authCode = post('auth')) || !strpos($authCode, '!')) { return; } list($hash, $userId) = explode('!', $authCode); if (!($user = UserModel::find($userId))) { return; } if (!($member = MemberModel::getFromUser($user))) { return; } $expectedCode = TopicFollow::makeAuthCode($action, $topic, $member); if ($authCode != $expectedCode) { Flash::error('Invalid authentication code, please sign in and try the link again.'); return; } } /* * Unfollow link */ if ($action == 'unfollow') { TopicFollow::unfollow($topic, $member); Flash::success('You will no longer receive notifications about this topic.'); } /* * Unsubscribe link */ if ($action == 'unsubscribe' && $member->user) { MailBlocker::addBlock('rainlab.forum::mail.topic_reply', $member->user); Flash::success('You will no longer receive notifications about any topics in this forum.'); } }