Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Behavior/NewsFeedPublishable.php
<?php

namespace XF\Behavior;

use
XF\Mvc\Entity\Behavior;

class
NewsFeedPublishable extends Behavior
{
    protected function
getDefaultConfig()
    {
        return [
           
'userIdField' => 'user_id',
           
'usernameField' => null,
           
'dateField' => null
       
];
    }

    protected function
getDefaultOptions()
    {
        return [
           
'enabled' => true
       
];
    }

    protected function
verifyConfig()
    {
        if (!
$this->contentType())
        {
            throw new \
LogicException("Structure must provide a contentType value");
        }
    }

    public function
postSave()
    {
        if (
$this->entity->isInsert() && $this->options['enabled'])
        {
           
$this->publish();
        }
    }

    public function
publish()
    {
        if (!
$this->isPublishable())
        {
            return;
        }

       
/** @var \XF\Repository\NewsFeed $newsFeedRepo */
       
$newsFeedRepo = $this->repository('XF:NewsFeed');

       
$userIdField = $this->config['userIdField'];
       
$usernameField = $this->config['usernameField'];
       
$dateField = $this->config['dateField'];
       
$entity = $this->entity;

        if (
$userIdField instanceof \Closure)
        {
           
$userId = $userIdField($entity);
        }
        else
        {
           
$userId = $entity->getValue($userIdField);
        }

       
$username = null;

        if (
$userId)
        {
           
$user = $this->app()->em()->find('XF:User', $userId);
            if (
$user)
            {
               
$username = $user->username;
            }
        }

        if (
$username === null)
        {
            if (
$usernameField instanceof \Closure)
            {
               
$username = $usernameField($entity);
            }
            else if (
$usernameField)
            {
               
$username = $entity->getValue($usernameField);
            }
        }

        if (
$username === null)
        {
           
$username = '';
        }

        if (
$dateField)
        {
            if (
$dateField instanceof \Closure)
            {
               
$date = $dateField($entity);
            }
            else
            {
               
$date = $entity->getValue($dateField);
            }
        }
        else
        {
           
$date = null;
        }

       
$newsFeedRepo->publish(
           
$this->contentType(), $this->id(), 'insert', $userId, $username, [], $date
       
);
    }

    protected function
isPublishable()
    {
       
$handler = $this->repository('XF:NewsFeed')->getNewsFeedHandler($this->contentType(), true);
        if (!
$handler->isPublishable($this->entity, 'insert'))
        {
            return
false;
        }

        return
true;
    }

    public function
postDelete()
    {
       
/** @var \XF\Repository\NewsFeed $newsFeedRepo */
       
$newsFeedRepo = $this->repository('XF:NewsFeed');
       
$newsFeedRepo->unpublish($this->contentType(), $this->id());
    }
}