Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Repository/ThreadField.php
<?php

namespace XF\Repository;

class
ThreadField extends AbstractField
{
    protected function
getRegistryKey()
    {
        return
'threadFieldsInfo';
    }

    protected function
getClassIdentifier()
    {
        return
'XF:ThreadField';
    }

    public function
getDisplayGroups()
    {
        return [
           
'before' => \XF::phrase('before_message'),
           
'after' => \XF::phrase('after_message'),
           
'thread_status' => \XF::phrase('thread_status_block')
        ];
    }

    public function
getThreadFieldValues($threadId)
    {
       
$fields = $this->db()->fetchAll('
            SELECT field_value.*, field.field_type
            FROM xf_thread_field_value AS field_value
            INNER JOIN xf_thread_field AS field ON (field.field_id = field_value.field_id)
            WHERE field_value.thread_id = ?
        '
, $threadId);

       
$values = [];
        foreach (
$fields AS $field)
        {
            if (
$field['field_type'] == 'checkbox' || $field['field_type'] == 'multiselect')
            {
               
$values[$field['field_id']] = \XF\Util\Php::safeUnserialize($field['field_value']);
            }
            else
            {
               
$values[$field['field_id']] = $field['field_value'];
            }
        }
        return
$values;
    }

    public function
rebuildThreadFieldValuesCache($threadId)
    {
       
$cache = $this->getThreadFieldValues($threadId);

       
$this->db()->update('xf_thread',
            [
'custom_fields' => json_encode($cache)],
           
'thread_id = ?', $threadId
       
);
    }
}