1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Not a Bug Merging threads that contain zero posts

Discussion in 'Resolved Bug Reports' started by Ralle, May 24, 2015.

  1. Ralle

    Ralle Active Member

    Hello guys,

    I know this is a weird bug report and I understand if you feel this way.

    I am working on a system that is tightly coupled with threads. The user creates an item in my system and this item is coupled with a thread that contains no posts. This thread is created using XenForo's own datawriter this way:
    $title 'Some title';
    $nodeId 1;
    $visitor XenForo_Visitor::getInstance();

    $writer XenForo_DataWriter::create('XenForo_DataWriter_Discussion_Thread');

    'user_id' => $visitor['user_id'],
    'username' => $visitor['username'],
    'title' => $title,
    'node_id' => $nodeId

    As you can see, XenForo supports the creation of empty threads. It also supports viewing and moving them. Now, my problem arises when I try to merge them. I already wrote the code to merge my item type, but when it comes to merging the thread, it fails. Either I get a SQL query for a list of post IDs which is empty or when trying to set the first post.

    Below is a patch I wrote to fix this issue:
    diff --git a/library/XenForo/Model/Thread.php b/library/XenForo/Model/Thread.php
    index 3fa4cda..639efcd 100644
    --- a/library/XenForo/Model/Thread.php
    +++ b/library/XenForo/Model/Thread.php
    @@ -2272,10 +2272,14 @@ class XenForo_Model_Thread extends XenForo_Model
            $idsQuoted = $db->quote($mergeFromThreadIds);
    -        $db->update('xf_post',
    -            array('thread_id' => $targetThreadId),
    -            'post_id IN (' . $db->quote($movePostIds) . ')'
    -        );
    +        if ($movePostIds)
    +        {
    +            // Only update posts if there are any
    +            $db->update('xf_post',
    +                array('thread_id' => $targetThreadId),
    +                'post_id IN (' . $db->quote($movePostIds) . ')'
    +            );
    +        }
                UPDATE IGNORE xf_thread_watch SET
                    thread_id = ?
    @@ -2288,11 +2292,7 @@ class XenForo_Model_Thread extends XenForo_Model
            ", array($targetThreadId));
            $newCounters = $postModel->recalculatePostPositionsInThread($targetThreadId);
    -        if (!$newCounters['firstPostId'])
    -        {
    -            XenForo_Db::rollback($db);
    -            return false;
    -        }
    +        // [Removed code block] Add support for merging empty threads
            // TODO: user message counts will go off if merging from a visible thread into a hidden one or vice versa
            // TODO: user message counts will also go off if merging from a thread in a counting forum into a non-counting forum, or vice versa
    Last edited: May 24, 2015
  2. imthebest

    imthebest Formerly Super120

    If I understand correctly, you are creating a thread which doesn't even contain the first post? How a thread could exist if it doesn't have at least one post?
  3. Ralle

    Ralle Active Member

    Well, as I showed, you can create one. What I do is that I display some extra content before the posts. When submitting an item (which automatically has a thread attached), posts are essentially comments. There is no first comment unless someone posts one.
  4. Mike

    Mike XenForo Developer Staff Member

    I would say that while the system physically supports threads with no posts, it's not something that is logically allowed by XenForo and your code shouldn't be creating a thread with no posts.
  5. Ralle

    Ralle Active Member

    I was waiting for you to say that. Too bad. I see how you did with your resource system and I would prefer doing it differently. with not having both a thread and a separate resource display page. I think this is a better design and you should use it yourself, but oh well :).

Share This Page