/** * Delete an activity item. * * @since 2.0.0 * @access public * * @param int $ActivityID Unique ID of item to delete. * @param string $TransientKey Verify intent. */ public function Delete($ActivityID = '', $TransientKey = '') { $Session = Gdn::Session(); if (!$Session->ValidateTransientKey($TransientKey)) { throw PermissionException(); } if (!is_numeric($ActivityID)) { throw Gdn_UserException('Invalid activity ID'); } $HasPermission = $Session->CheckPermission('Garden.Activity.Delete'); if (!$HasPermission) { $Activity = $this->ActivityModel->GetID($ActivityID); if (!$Activity) { throw NotFoundException('Activity'); } $HasPermission = $Activity['InsertUserID'] == $Session->UserID; } if (!$HasPermission) { throw PermissionException(); } $this->ActivityModel->Delete($ActivityID); if ($this->_DeliveryType === DELIVERY_TYPE_ALL) { Redirect(GetIncomingValue('Target', $this->SelfUrl)); } // Still here? Getting a 404. $this->ControllerName = 'Home'; $this->View = 'FileNotFound'; $this->Render(); }
/** * This determines if the current user can react on this item with this action * * @param string $Type valid options are 'discussion', 'comment', and 'activity' * @param int $ID * @param int $ActionID * @throws Gdn_UserException */ public function Index($Type, $ID, $ActionID) { $Type = strtolower($Type); $Action = $this->ActionModel->GetByID($ActionID); // Make sure the action exists and the user is allowed to react if (!$Action) { throw new Gdn_UserException(T('Yaga.Action.Invalid')); } if (!Gdn::Session()->CheckPermission($Action->Permission)) { throw PermissionException(); } switch ($Type) { case 'discussion': $Model = new DiscussionModel(); $AnchorID = '#Discussion_'; break; case 'comment': $Model = new CommentModel(); $AnchorID = '#Comment_'; break; case 'activity': $Model = new ActivityModel(); $AnchorID = '#Activity_'; break; default: throw new Gdn_UserException(T('Yaga.Action.InvalidTargetType')); break; } $Item = $Model->GetID($ID); if ($Item) { $Anchor = $AnchorID . $ID . ' .ReactMenu'; } else { throw new Gdn_UserException(T('Yaga.Action.InvalidTargetID')); } $UserID = Gdn::Session()->UserID; switch ($Type) { case 'comment': case 'discussion': $ItemOwnerID = $Item->InsertUserID; break; case 'activity': $ItemOwnerID = $Item['RegardingUserID']; break; default: throw new Gdn_UserException(T('Yaga.Action.InvalidTargetType')); break; } if ($ItemOwnerID == $UserID) { throw new Gdn_UserException(T('Yaga.Error.ReactToOwn')); } // It has passed through the gauntlet $this->ReactionModel->Set($ID, $Type, $ItemOwnerID, $UserID, $ActionID); $this->JsonTarget($Anchor, RenderReactionList($ID, $Type, FALSE), 'ReplaceWith'); // Don't render anything $this->Render('Blank', 'Utility', 'Dashboard'); }
function GetRecord($RecordType, $ID, $ThrowError = FALSE) { $Row = FALSE; switch (strtolower($RecordType)) { case 'discussion': $Model = new DiscussionModel(); $Row = $Model->GetID($ID); $Row->Url = DiscussionUrl($Row); $Row->ShareUrl = $Row->Url; if ($Row) { return (array) $Row; } break; case 'comment': $Model = new CommentModel(); $Row = $Model->GetID($ID, DATASET_TYPE_ARRAY); if ($Row) { $Row['Url'] = Url("/discussion/comment/{$ID}#Comment_{$ID}", TRUE); $Model = new DiscussionModel(); $Discussion = $Model->GetID($Row['DiscussionID']); if ($Discussion) { $Discussion->Url = DiscussionUrl($Discussion); $Row['ShareUrl'] = $Discussion->Url; $Row['Name'] = $Discussion->Name; $Row['Discussion'] = (array) $Discussion; } return $Row; } break; case 'activity': $Model = new ActivityModel(); $Row = $Model->GetID($ID, DATASET_TYPE_ARRAY); if ($Row) { $Row['Name'] = FormatString($Row['HeadlineFormat'], $Row); $Row['Body'] = $Row['Story']; return $Row; } default: throw new Gdn_UserException(sprintf("I don't know what a %s is.", strtolower($RecordType))); } if ($ThrowError) { throw NotFoundException($RecordType); } else { return FALSE; } }