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

namespace XF\Import\DataHelper;

use function
is_scalar;

class
Thread extends AbstractHelper
{
    public function
importThreadWatch($threadId, $userId, $email = false)
    {
       
$this->importThreadWatchBulk($threadId, [$userId => $email]);
    }

    public function
importThreadWatchBulk($threadId, array $userConfigs)
    {
       
$insert = [];

        foreach (
$userConfigs AS $userId => $config)
        {
            if (
is_scalar($config))
            {
               
$config = ['email_subscribe' => (bool)$config];
            }

           
$insert[] = [
               
'user_id' => $userId,
               
'thread_id' => $threadId,
               
'email_subscribe' => empty($config['email_subscribe']) ? 0 : 1
           
];
        }

        if (
$insert)
        {
           
$this->db()->insertBulk(
               
'xf_thread_watch',
               
$insert,
               
false,
               
'email_subscribe = VALUES(email_subscribe)'
           
);
        }
    }

    public function
updateQuestionSolution(int $threadId, int $postId)
    {
        if (!
$threadId || !$postId)
        {
            return;
        }

       
$db = $this->db();

       
$solutionPost = $db->fetchRow("
            SELECT post.thread_id,
                   post.user_id,
                   post.message_state,
                   thread.discussion_state,
                   forum.count_messages
            FROM xf_post AS post
            INNER JOIN xf_thread AS thread ON (post.thread_id = thread.thread_id)
            INNER JOIN xf_forum AS forum ON (thread.node_id = forum.node_id)
            WHERE post.post_id = ?
        "
, $postId);
        if (!
$solutionPost)
        {
            return;
        }

        if (
           
$solutionPost['thread_id'] != $threadId
           
|| $solutionPost['message_state'] != 'visible'
       
)
        {
           
// solution isn't in the expected thread or isn't visible
           
return;
        }

       
$db->update(
           
'xf_thread_question',
            [
'solution_post_id' => $postId, 'solution_user_id' => $solutionPost['user_id']],
           
'thread_id = ?',
           
$threadId
       
);

        if (
           
$solutionPost['discussion_state'] == 'visible'
           
&& $solutionPost['count_messages']
            &&
$solutionPost['user_id']
        )
        {
           
// thread is visible and in a message counting forum, add to user solution count
           
$db->query("
                UPDATE xf_user
                SET question_solution_count = question_solution_count + 1
                WHERE user_id = ?
            "
, $solutionPost['user_id']);
        }
    }
}