/** * doPost -- static hook/entry for normal request post * * @static * @access public * * @param WebRequest $request -- instance of WebRequest * @param User $user -- instance of User who is leaving the comment * @param Title $title -- instance of Title * * @return Article -- newly created article */ public static function doPost($text, $user, $title, $parentId = false, $metadata = array()) { global $wgTitle; wfProfileIn(__METHOD__); if (!$text || !strlen($text)) { wfProfileOut(__METHOD__); return false; } if (wfReadOnly()) { wfProfileOut(__METHOD__); return false; } /** * title for comment is combination of article title and some 'random' data */ if ($parentId == false) { //1st level comment $commentTitle = sprintf('%s/%s%s-%s', $title->getText(), ARTICLECOMMENT_PREFIX, $user->getName(), wfTimestampNow()); } else { $parentArticle = Article::newFromID($parentId); if (empty($parentArticle)) { $parentTitle = Title::newFromID($parentId, Title::GAID_FOR_UPDATE); // it's possible for Title to be empty at this point // if article was removed in the meantime // (for eg. when replying on Wall from old browser session // to non-existing thread) // it's fine NOT to create Article in that case if (!empty($parentTitle)) { $parentArticle = new Article($parentTitle); } // if $parentTitle is empty the logging below will be executed } //FB#2875 (log data for further debugging) if (is_null($parentArticle)) { $debugTitle = !empty($title) ? $title->getText() : '--EMPTY--'; // BugId:2646 Wikia::log(__FUNCTION__, __LINE__, "Failed to create Article object, ID={$parentId}, title={$debugTitle}, user={$user->getName()}", true); wfProfileOut(__METHOD__); return false; } $parentTitle = $parentArticle->getTitle(); //nested comment $commentTitle = sprintf('%s/%s%s-%s', $parentTitle->getText(), ARTICLECOMMENT_PREFIX, $user->getName(), wfTimestampNow()); } $commentTitle = Title::newFromText($commentTitle, MWNamespace::getTalk($title->getNamespace())); /** * because we save different tile via Ajax request TODO: fix it !! */ $wgTitle = $commentTitle; if (!$commentTitle instanceof Title) { return false; } /** * add article using EditPage class (for hooks) */ $article = new Article($commentTitle, 0); $retval = self::doSaveAsArticle($text, $article, $user, $metadata); // add comment to database if ($retval->value == EditPage::AS_SUCCESS_NEW_ARTICLE) { $revId = $article->getRevIdFetched(); $data = array('namespace' => $title->getNamespace(), 'parentPageId' => $title->getArticleID(), 'commentId' => $article->getID(), 'parentCommentId' => intval($parentId), 'firstRevId' => $revId, 'lastRevId' => $revId); /** * @var $commentsIndex CommentsIndex */ $commentsIndex = F::build('CommentsIndex', array($data)); $commentsIndex->addToDatabase(); // set last child comment id $commentsIndex->updateParentLastCommentId($data['commentId']); wfRunHooks('EditCommentsIndex', array($article->getTitle(), $commentsIndex)); } $res = ArticleComment::doAfterPost($retval, $article, $parentId); ArticleComment::doPurge($title, $commentTitle); wfProfileOut(__METHOD__); return array($retval, $article, $res); }