DiscussionModel::canEdit PHP Method

canEdit() public static method

Determines whether or not the current user can edit a discussion.
public static canEdit ( object | array $discussion, &$timeLeft ) : boolean
$discussion object | array The discussion to examine.
return boolean Returns true if the user can edit or false otherwise.
    public static function canEdit($discussion, &$timeLeft = 0)
    {
        if (!($permissionCategoryID = val('PermissionCategoryID', $discussion))) {
            $category = CategoryModel::categories(val('CategoryID', $discussion));
            $permissionCategoryID = val('PermissionCategoryID', $category);
        }
        // Users with global edit permission can edit.
        if (Gdn::session()->checkPermission('Vanilla.Discussions.Edit', true, 'Category', $permissionCategoryID)) {
            return true;
        }
        // Non-mods can't edit if they aren't the author.
        if (Gdn::session()->UserID != val('InsertUserID', $discussion)) {
            return false;
        }
        return self::editContentTimeout($discussion, $timeLeft);
    }

Usage Example

コード例 #1
0
 function optionsList($Discussion)
 {
     $Sender = Gdn::controller();
     $Session = Gdn::session();
     if ($Session->isValid() && $Sender->ShowOptions) {
         $Sender->Options = '';
         // Dismiss an announcement
         if (c('Vanilla.Discussions.Dismiss', 1) && $Discussion->Announce == '1' && $Discussion->Dismissed != '1') {
             $Sender->Options .= '<li>' . anchor(t('Dismiss'), "vanilla/discussion/dismissannouncement?discussionid={$Discussion->DiscussionID}", 'DismissAnnouncement Hijack') . '</li>';
         }
         // Edit discussion
         if (DiscussionModel::canEdit($Discussion)) {
             $Sender->Options .= '<li>' . anchor(t('Edit'), 'vanilla/post/editdiscussion/' . $Discussion->DiscussionID, 'EditDiscussion') . '</li>';
         }
         // Announce discussion
         if ($Session->checkPermission('Vanilla.Discussions.Announce', TRUE, 'Category', $Discussion->PermissionCategoryID)) {
             $Sender->Options .= '<li>' . anchor(t('Announce...'), '/discussion/announce?discussionid=' . $Discussion->DiscussionID . '&Target=' . urlencode($Sender->SelfUrl), 'Popup AnnounceDiscussion') . '</li>';
         }
         // Sink discussion
         if ($Session->checkPermission('Vanilla.Discussions.Sink', TRUE, 'Category', $Discussion->PermissionCategoryID)) {
             $NewSink = (int) (!$Discussion->Sink);
             $Sender->Options .= '<li>' . anchor(t($Discussion->Sink == '1' ? 'Unsink' : 'Sink'), "vanilla/discussion/sink?discussionid={$Discussion->DiscussionID}&sink={$NewSink}", 'SinkDiscussion Hijack') . '</li>';
         }
         // Close discussion
         if ($Session->checkPermission('Vanilla.Discussions.Close', TRUE, 'Category', $Discussion->PermissionCategoryID)) {
             $NewClosed = (int) (!$Discussion->Closed);
             $Sender->Options .= '<li>' . anchor(t($Discussion->Closed == '1' ? 'Reopen' : 'Close'), "/discussion/close?discussionid={$Discussion->DiscussionID}&close={$NewClosed}", 'CloseDiscussion Hijack') . '</li>';
         }
         // Delete discussion
         if ($Session->checkPermission('Vanilla.Discussions.Delete', TRUE, 'Category', $Discussion->PermissionCategoryID)) {
             $Sender->Options .= '<li>' . anchor(t('Delete'), '/discussion/delete?discussionid=' . $Discussion->DiscussionID, 'DeleteDiscussion Popup') . '</li>';
         }
         // Allow plugins to add options.
         $Sender->EventArguments['Discussion'] = $Discussion;
         $Sender->fireEvent('DiscussionOptions');
         if ($Sender->Options != '') {
             $Result = '<span class="ToggleFlyout OptionsMenu">' . '<span class="OptionsTitle" title="' . t('Options') . '">' . t('Options') . '</span>' . '<span class="SpFlyoutHandle"></span>' . '<ul class="Flyout MenuItems">' . $Sender->Options . '</ul>' . '</span>';
             return $Result;
         }
     }
     return '';
 }
All Usage Examples Of DiscussionModel::canEdit