static function create($root, $article, $superthread = null, $type = Threads::TYPE_NORMAL, $subject = '', $summary = '', $bump = null, $signature = null) { $thread = new Thread(null); if (!in_array($type, self::$VALID_TYPES)) { throw new MWException(__METHOD__ . ": invalid change type {$type}."); } if ($superthread) { $change_type = Threads::CHANGE_REPLY_CREATED; } else { $change_type = Threads::CHANGE_NEW_THREAD; } global $wgUser; $thread->setAuthor($wgUser); if (is_object($root)) { $thread->setRoot($root); } else { $thread->setRootId($root); } $thread->setSuperthread($superthread); $thread->setArticle($article); $thread->setSubject($subject); $thread->setType($type); if (!is_null($signature)) { $thread->setSignature($signature); } $thread->insert(); if ($superthread) { $superthread->addReply($thread); $superthread->commitRevision($change_type, $thread, $summary, $bump); } else { $hthread = ThreadRevision::create($thread, $change_type); } // Create talk page Threads::createTalkpageIfNeeded($article); // Notifications NewMessages::writeMessageStateForUpdatedThread($thread, $change_type, $wgUser); if ($wgUser->getOption('lqt-watch-threads', false)) { WatchAction::doWatch($thread->topmostThread()->root()->getTitle(), $wgUser); } return $thread; }