/** * A hook which creates a fake action "like" on the discussion controller. * This action handles all the liking and unliking. * * @param Controller $Sender * @return void */ public function DiscussionController_Like_Create($Sender) { $Session = Gdn::Session(); $User = $Session->User; $UID = $User->UserID; $Options = array('UserID' => $User->UserID); $DiscussionID = GetValue(0, $Sender->RequestArgs); $DiscussionModel = new DiscussionModel(); $CommentModel = new CommentModel(); $Discussion = $DiscussionModel->GetID($DiscussionID); // Check for permission. if (!($Session->IsValid() && $Session->CheckPermission('Plugins.LikeThis.AllowedToLike'))) { return; } $Options["DiscussionID"] = $DiscussionID; //$Sender->Permission('Vanilla.Discussions.View', TRUE, 'Category', $Discussion->CategoryID); if (GetValue(1, $Sender->RequestArgs) == 'comment') { $CommentID = GetValue(2, $Sender->RequestArgs); $Remove = GetValue(3, $Sender->RequestArgs); $Options["CommentID"] = $CommentID; $Comment = $CommentModel->GetID($CommentID); $Recipient = Gdn::UserModel()->GetID($Comment->InsertUserID); $RedirectURL = Url("../discussion/{$DiscussionID}#Item_{$CommentID}"); $Likes = $this->LikeModel->GetCommentLikes($CommentID); } else { $Remove = GetValue(1, $Sender->RequestArgs); $Recipient = Gdn::UserModel()->GetID($Discussion->InsertUserID); $RedirectURL = Url("../discussion/{$DiscussionID}"); $Likes = $this->LikeModel->GetDiscussionLikes($DiscussionID); } if (!$Remove) { if (!in_array($UID, $Likes)) { $this->LikeModel->Insert($Options); //$options includes current user id and discussion or comment id //Increment number of times someone liked one of the commentators posts Gdn::SQL()->Update('User', array('Liked' => $Recipient->Liked + 1))->Where(array('UserID' => $Recipient->UserID))->Put(); //Increment number of times this person has liked someone elses post Gdn::SQL()->Update('User', array('ILiked' => $User->ILiked + 1))->Where(array('UserID' => $User->UserID))->Put(); $Sender->InformMessage(T('<i class="icon-thumbs-up"></i>Liked.')); } } else { if (in_array($UID, $Likes)) { $this->LikeModel->Delete($Options); //Decrement number of times someone liked one of the commentators posts Gdn::SQL()->Update('User', array('Liked' => $Recipient->Liked - 1))->Where(array('UserID' => $Recipient->UserID))->Put(); //Decrement number of times this person has liked someone elses post Gdn::SQL()->Update('User', array('ILiked' => $User->ILiked - 1))->Where(array('UserID' => $User->UserID))->Put(); $Sender->InformMessage('You don\'t like that anymore.', "Dismissable"); } } if ($Sender->DeliveryType() == DELIVERY_TYPE_BOOL) { if (isset($CommentID)) { $Likes = $this->LikeModel->GetCommentLikes($CommentID); $Url = "{$DiscussionID}/comment/{$CommentID}"; $Sender->JSON('LikeNewLink', $this->FormatLikes($Likes, $Url, $UID, FALSE)); } else { $Likes = $this->LikeModel->GetDiscussionLikes($DiscussionID); $Url = "{$DiscussionID}"; $Sender->JSON('LikeNewLink', $this->FormatLikes($Likes, $Url, $UID, FALSE)); } $Sender->Render(); return; } Redirect($RedirectURL); }
/** * * @param Controller $Sender */ public function UserController_Ignore_Create($Sender) { $Sender->Permission('Garden.SignIn.Allow'); $Args = $Sender->RequestArgs; if (sizeof($Args) < 3) { $Args = array_merge($Args, array(0, 0)); } elseif (sizeof($Args) > 2) { $Args = array_slice($Args, 1, 3); } list($UserReference, $Username) = $Args; // Set user $User = $this->GetUserInfo($UserReference, $Username); $Sender->SetData('User', $User); $UserID = GetValue('UserID', $User); // Set title and mode $IgnoreRestricted = $this->IgnoreIsRestricted($UserID); $UserIgnored = $this->Ignored($UserID); $Mode = $UserIgnored ? 'unset' : 'set'; $ActionText = T($Mode == 'set' ? 'Ignore' : 'Unignore'); $Sender->Title($ActionText); $Sender->SetData('Mode', $Mode); if ($Mode == 'set') { // Check is Ignore is allowed. $IgnoreRestricted = $this->IgnoreRestricted($UserID); } try { // Check for prevented states switch ($IgnoreRestricted) { case self::IGNORE_GOD: $Sender->InformMessage('<span class="InformSprite Lightbulb"></span>' . T("You can't ignore that person."), 'AutoDismiss HasSprite'); break; case self::IGNORE_LIMIT: $Sender->InformMessage('<span class="InformSprite Lightbulb"></span>' . T("You have reached the maximum number of ignores."), 'AutoDismiss HasSprite'); break; case self::IGNORE_RESTRICTED: $Sender->InformMessage('<span class="InformSprite Lightbulb"></span>' . T("Your ignore privileges have been revoked."), 'AutoDismiss HasSprite'); break; case self::IGNORE_SELF: $Sender->InformMessage('<span class="InformSprite Lightbulb"></span>' . T("You can't put yourself on ignore."), 'AutoDismiss HasSprite'); break; } // Get conversation intersects $Conversations = $this->IgnoreConversations($UserID); $Sender->SetData('Conversations', $Conversations); if ($Sender->Form->AuthenticatedPostBack()) { switch ($Mode) { case 'set': if (!$IgnoreRestricted) { $Sender->JsonTarget('a.IgnoreButton', T('Unignore'), 'Text'); $this->AddIgnore(Gdn::Session()->UserID, $UserID); $Sender->InformMessage('<span class="InformSprite Contrast"></span>' . sprintf(T("%s is now on ignore."), $User->Name), 'AutoDismiss HasSprite'); } break; case 'unset': if (!$IgnoreRestricted) { $Sender->JsonTarget('a.IgnoreButton', T('Ignore'), 'Text'); $this->RemoveIgnore(Gdn::Session()->UserID, $UserID); $Sender->InformMessage('<span class="InformSprite Brightness"></span>' . sprintf(T("%s is no longer on ignore."), $User->Name), 'AutoDismiss HasSprite'); $Sender->RedirectUrl = Url('/profile/ignore'); } break; default: $Sender->InformMessage(T("Unsupported operation.")); $Sender->SetJson('Status', 400); break; } } } catch (Exception $Ex) { $Sender->InformMessage(T("Could not find that person! - " . $Ex->getMessage())); $Sender->SetJson('Status', 404); } $Sender->Render('confirm', '', 'plugins/Ignore'); }