Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Attachment/Post.php
<?php

namespace XF\Attachment;

use
XF\Entity\Attachment;
use
XF\Mvc\Entity\Entity;

use function
intval;

class
Post extends AbstractHandler
{
    public function
getContainerWith()
    {
       
$visitor = \XF::visitor();

        return [
'Thread', 'Thread.Forum', 'Thread.Forum.Node.Permissions|' . $visitor->permission_combination_id];
    }

    public function
canView(Attachment $attachment, Entity $container, &$error = null)
    {
       
/** @var \XF\Entity\Post $container */
       
if (!$container->canView())
        {
            return
false;
        }

       
/** @var \XF\Entity\Thread $thread */
       
$thread = $container->Thread;
        return
$thread->canViewAttachments($error);
    }

    public function
canManageAttachments(array $context, &$error = null)
    {
       
$forum = $this->getForumFromContext($context);
        return (
$forum && $forum->canUploadAndManageAttachments());
    }

    public function
onAttachmentDelete(Attachment $attachment, Entity $container = null)
    {
        if (!
$container)
        {
            return;
        }

       
/** @var \XF\Entity\Post $container */
       
$container->attach_count--;
       
$container->save();

        \
XF::app()->logger()->logModeratorAction($this->contentType, $container, 'attachment_deleted', [], false);
    }

    public function
getConstraints(array $context)
    {
       
/** @var \XF\Repository\Attachment $attachRepo */
       
$attachRepo = \XF::repository('XF:Attachment');

       
$constraints = $attachRepo->getDefaultAttachmentConstraints();

       
$forum = $this->getForumFromContext($context);
        if (
$forum && $forum->canUploadVideos())
        {
           
$constraints = $attachRepo->applyVideoAttachmentConstraints($constraints);
        }

        return
$constraints;
    }

    public function
getContainerIdFromContext(array $context)
    {
        return isset(
$context['post_id']) ? intval($context['post_id']) : null;
    }

    public function
getContext(Entity $entity = null, array $extraContext = [])
    {
        if (
$entity instanceof \XF\Entity\Post)
        {
           
$extraContext['post_id'] = $entity->post_id;
        }
        else if (
$entity instanceof \XF\Entity\Thread)
        {
           
$extraContext['thread_id'] = $entity->thread_id;
        }
        else if (
$entity instanceof \XF\Entity\Forum)
        {
           
$extraContext['node_id'] = $entity->node_id;
        }
        else
        {
            throw new \
InvalidArgumentException("Entity must be post, thread or forum");
        }

        return
$extraContext;
    }

    protected function
getForumFromContext(array $context)
    {
       
$em = \XF::em();
       
$forum = null;

        if (!empty(
$context['post_id']))
        {
           
/** @var \XF\Entity\Post $post */
           
$post = $em->find('XF:Post', intval($context['post_id']), ['Thread', 'Thread.Forum']);
            if (!
$post || !$post->canView() || !$post->canEdit())
            {
                return
null;
            }

           
$forum = $post->Thread->Forum;
        }
        else if (!empty(
$context['thread_id']))
        {
           
/** @var \XF\Entity\Thread $thread */
           
$thread = $em->find('XF:Thread', intval($context['thread_id']), ['Forum']);
            if (!
$thread || !$thread->canView())
            {
                return
null;
            }

           
$forum = $thread->Forum;
        }
        else if (!empty(
$context['node_id']))
        {
           
/** @var \XF\Entity\Forum $forum */
           
$forum = $em->find('XF:Forum', intval($context['node_id']));
            if (!
$forum || !$forum->canView())
            {
                return
null;
            }
        }
        else
        {
            return
null;
        }

        return
$forum;
    }
}