Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/ModeratorLog/Thread.php
<?php

namespace XF\ModeratorLog;

use
XF\Entity\ModeratorLog;
use
XF\Mvc\Entity\Entity;

class
Thread extends AbstractHandler
{
    public function
isLoggable(Entity $content, $action, \XF\Entity\User $actor)
    {
        switch (
$action)
        {
            case
'title':
            case
'prefix_id':
            case
'custom_fields':
                if (
$actor->user_id == $content->user_id)
                {
                    return
false;
                }
        }

        return
parent::isLoggable($content, $action, $actor);
    }

    protected function
getLogActionForChange(Entity $content, $field, $newValue, $oldValue)
    {
       
/** @var \XF\Entity\Thread $content */

       
switch ($field)
        {
            case
'custom_fields':
                return
'custom_fields_edit';

            case
'sticky':
                return
$newValue ? 'stick' : 'unstick';

            case
'discussion_type':
               
$oldThreadType = \XF::phrase('thread_type.' . $oldValue)->render();
                return [
'discussion_type', ['old' => $oldThreadType]];

            case
'discussion_open':
                return
$newValue ? 'unlock' : 'lock';

            case
'discussion_state':
                if (
$newValue == 'visible' && $oldValue == 'moderated')
                {
                    return
'approve';
                }
                else if (
$newValue == 'visible' && $oldValue == 'deleted')
                {
                    return
'undelete';
                }
                else if (
$newValue == 'deleted')
                {
                   
$reason = $content->DeletionLog ? $content->DeletionLog->delete_reason : '';
                    return [
'delete_soft', ['reason' => $reason]];
                }
                else if (
$newValue == 'moderated')
                {
                    return
'unapprove';
                }
                break;

            case
'title':
                return [
'title', ['old' => $oldValue]];

            case
'prefix_id':
                if (
$oldValue)
                {
                   
$old = \XF::phrase('thread_prefix.' . $oldValue)->render();
                }
                else
                {
                   
$old = '-';
                }
                return [
'prefix', ['old' => $old]];

            case
'node_id':
               
$node = \XF::em()->find('XF:Node', $oldValue);
               
$oldForum = $node ? $node->title : '';
                return [
'move', ['from' => $oldForum]];
        }

        return
false;
    }

    protected function
setupLogEntityContent(ModeratorLog $log, Entity $content)
    {
       
/** @var \XF\Entity\Thread $content */
       
$log->content_user_id = $content->user_id;
       
$log->content_username = $content->username;
       
$log->content_title = $content->title;
       
$log->content_url = \XF::app()->router('public')->buildLink('nopath:threads', $content);
       
$log->discussion_content_type = 'thread';
       
$log->discussion_content_id = $content->thread_id;
    }

    protected function
getActionPhraseParams(ModeratorLog $log)
    {
        if (
$log->action == 'edit')
        {
            return [
'elements' => implode(', ', array_keys($log->action_params))];
        }
        else
        {
            return
parent::getActionPhraseParams($log);
        }
    }
}