Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Bookmark/AbstractHandler.php
<?php

namespace XF\Bookmark;

use
XF\Entity\BookmarkItem;
use
XF\Entity\BookmarkTrait;
use
XF\Mvc\Entity\Entity;

use function
get_class;

abstract class
AbstractHandler
{
    protected
$contentType;

    public function
__construct($contentType)
    {
       
$this->contentType = $contentType;
    }

    public function
getContentUser(Entity $content)
    {
        if (isset(
$content->User))
        {
            return
$content->User;
        }

        return
null;
    }

    public function
getContentTitle(Entity $content)
    {
        if (
$content instanceof \XF\Entity\LinkableInterface)
        {
            return
$content->getContentTitle();
        }

        throw new \
LogicException(
           
'Implement XF\Entity\LinkableInterface for ' . get_class($content)
            .
' or override ' . get_class($this) . '::getContentTitle'
       
);
    }

    public function
getContentLink(Entity $content)
    {
        if (
$content instanceof \XF\Entity\LinkableInterface)
        {
            return
$content->getContentUrl(true);
        }

        return \
XF::app()->router('public')->buildLink('canonical:' . $this->getContentRoute($content), $content);
    }

    public function
getContentRoute(Entity $content)
    {
        if (
$content instanceof \XF\Entity\LinkableInterface)
        {
            return
$content->getContentPublicRoute();
        }

        throw new \
LogicException(
           
'Implement XF\Entity\LinkableInterface for ' . get_class($content)
            .
' or override ' . get_class($this) . '::getContentRoute'
       
);
    }

    public function
getEditLink(Entity $content)
    {
        return \
XF::app()->router('public')->buildLink($this->getContentRoute($content) . '/bookmark', $content);
    }

    public function
getDeleteLink(Entity $content)
    {
        return \
XF::app()->router('public')->buildLink($this->getContentRoute($content) . '/bookmark', $content, ['delete' => 1]);
    }

    public function
canViewContent(Entity $content, &$error = null)
    {
        if (
method_exists($content, 'canView'))
        {
            return
$content->canView($error);
        }

        throw new \
LogicException("Could not determine content viewability; please override");
    }

    protected function
getDefaultTemplateData(BookmarkItem $bookmark, Entity $content = null)
    {
        if (!
$content)
        {
           
$content = $bookmark->Content;
        }

        return [
           
'bookmark' => $bookmark,
           
'user' => $bookmark->User,
           
'content' => $content
       
];
    }

   
/**
     * @return null|string
     */
   
public function getCustomIconTemplateName()
    {
        return
null;
    }

    public function
getCustomIconTemplateData(BookmarkItem $bookmark, Entity $content = null)
    {
        return
$this->getDefaultTemplateData($bookmark, $content);
    }

    public function
renderCustomIcon(BookmarkItem $bookmark, Entity $content = null)
    {
        if (!
$this->getCustomIconTemplateName())
        {
            return
'';
        }

        if (!
$content)
        {
           
$content = $bookmark->Content;
            if (!
$content)
            {
                return
'';
            }
        }

       
$template = $this->getCustomIconTemplateName();
       
$data = $this->getCustomIconTemplateData($bookmark, $content);

        return \
XF::app()->templater()->renderTemplate($template, $data);
    }

   
/**
     * @return string
     */
   
public function getItemTemplateName()
    {
        return
'public:bookmark_item_' . $this->contentType;
    }

   
/**
     * @param BookmarkItem $bookmark
     * @param Entity|BookmarkTrait|null $content
     *
     * @return array
     */
   
public function getItemTemplateData(BookmarkItem $bookmark, Entity $content = null)
    {
        return
$this->getDefaultTemplateData($bookmark, $content);
    }

   
/**
     * @param BookmarkItem $bookmark
     * @param Entity|BookmarkTrait|null $content
     *
     * @return string
     */
   
public function renderMessageFallback(BookmarkItem $bookmark, Entity $content = null)
    {
        if (!
$content)
        {
           
$content = $bookmark->Content;
            if (!
$content)
            {
                return
'';
            }
        }

       
$template = $this->getItemTemplateName();
       
$data = $this->getItemTemplateData($bookmark, $content);

        return \
XF::app()->templater()->renderTemplate($template, $data);
    }

    public function
getEntityWith()
    {
        return [];
    }

   
/**
     * @param $id
     * @return BookmarkTrait|Entity|null
     */
   
public function getContent($id)
    {
        return \
XF::app()->findByContentType($this->contentType, $id, $this->getEntityWith());
    }

    public function
getContentType()
    {
        return
$this->contentType;
    }
}