Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Entity/BookmarkTrait.php
<?php

namespace XF\Entity;

use
XF\Mvc\Entity\Entity;
use
XF\Mvc\Entity\Structure;

/**
 * COLUMNS
 * @property int bookmark_count
 */
trait BookmarkTrait
{
    abstract protected function
canBookmarkContent(&$error = null);

    public function
canBookmark(&$error = null)
    {
       
$visitor = \XF::visitor();
        if (!
$visitor->user_id)
        {
            return
false;
        }

        if (!
$this->canBookmarkContent($error))
        {
            return
false;
        }

        return (
           
$visitor->hasPermission('bookmark', 'view')
            &&
$visitor->hasPermission('bookmark', 'create')
        );
    }

    public function
isBookmarked()
    {
       
$visitor = \XF::visitor();
        if (!
$visitor->user_id)
        {
            return
false;
        }

        return (isset(
$this->Bookmarks[$visitor->user_id]) ? true : false);
    }

   
/**
     * @return null|BookmarkItem
     */
   
public function getBookmark()
    {
        if (!
$this->isBookmarked())
        {
            return
null;
        }

        return
$this->Bookmarks[\XF::visitor()->user_id];
    }

   
/**
     * @return Entity|BookmarkItem
     */
   
public function getNewBookmark()
    {
       
$bookmark = $this->em()->create('XF:BookmarkItem');
       
$bookmark->content_type = $this->getEntityContentType();
       
$bookmark->content_id = $this->getEntityId();

        return
$bookmark;
    }

    protected function
_postSaveBookmarks() {}

    protected function
_postDeleteBookmarks()
    {
       
$this->getBookmarkRepo()->fastDeleteBookmarksForContent(
           
$this->getEntityContentType(),
           
$this->getEntityId()
        );
    }

    public static function
addBookmarkableStructureElements(Structure $structure)
    {
       
$structure->relations['Bookmarks'] = [
           
'entity' => 'XF:BookmarkItem',
           
'type' => self::TO_MANY,
           
'conditions' => [
                [
'content_type', '=', $structure->contentType],
                [
'content_id', '=', '$' . $structure->primaryKey]
            ],
           
'key' => 'user_id',
           
'order' => 'bookmark_date'
       
];
    }

   
/**
     * @return \XF\Repository\Bookmark
     */
   
protected function getBookmarkRepo()
    {
        return
$this->repository('XF:Bookmark');
    }
}