Example #1
0
 /**
  * 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');
 }