function _formatVar(&$value) { if (is_null($value)) { return LogFormatter::_formatNull($value); } if (is_bool($value)) { return LogFormatter::_formatBool($value); } if (is_int($value) || is_float($value)) { return $value; } if (is_object($value)) { return LogFormatter::_formatObject($value); } // is_callable should be placed before is_string and is_array: if (is_callable($value)) { return LogFormatter::_formatCallback($value); } if (is_string($value)) { return LogFormatter::_formatString($value); } if (is_array($value)) { return LogFormatter::_formatArray($value); } return gettype($value) . ' { ... }'; }
public function getMessageParameters() { $params = parent::getMessageParameters(); $type = $this->entry->getSubtype(); $entry_params = $this->entry->getParameters(); if ($type === 'approve') { $revid = $entry_params['revid']; $link = Linker::linkKnown($this->entry->getTarget(), wfMessage('moderation-log-diff', $revid)->text(), array('title' => wfMessage('tooltip-moderation-approved-diff')), array('diff' => $revid)); $params[4] = Message::rawParam($link); } elseif ($type === 'reject') { $modid = $entry_params['modid']; $link = Linker::linkKnown(Title::makeTitle(NS_SPECIAL, "Moderation"), wfMessage('moderation-log-change', $modid)->text(), array('title' => wfMessage('tooltip-moderation-rejected-change')), array('modaction' => 'show', 'modid' => $modid)); $params[4] = Message::rawParam($link); $userlink = Linker::userLink($entry_params['user'], $entry_params['user_text']); $params[5] = Message::rawParam($userlink); } elseif ($type === 'merge') { $revid = $entry_params['revid']; $modid = $entry_params['modid']; $link = Linker::linkKnown(Title::makeTitle(NS_SPECIAL, "Moderation"), wfMessage('moderation-log-change', $modid)->text(), array('title' => wfMessage('tooltip-moderation-rejected-change')), array('modaction' => 'show', 'modid' => $modid)); $params[4] = Message::rawParam($link); $link = Linker::linkKnown($this->entry->getTarget(), wfMessage('moderation-log-diff', $revid)->text(), array('title' => wfMessage('tooltip-moderation-approved-diff')), array('diff' => $revid)); $params[5] = Message::rawParam($link); } elseif ($type === 'approveall' || $type === 'rejectall' || $type === 'block' || $type === 'unblock') { $title = $this->entry->getTarget(); $user_id = User::idFromName($title->getText()); $link = Linker::userLink($user_id, $title->getText()); $params[2] = Message::rawParam($link); } return $params; }
public function getMessageParameters() { $params = parent::getMessageParameters(); $type = $this->entry->getFullType(); if ($type === 'translationreview/message') { $targetPage = $this->makePageLink($this->entry->getTarget(), array('oldid' => $params[3])); $params[2] = Message::rawParam($targetPage); } elseif ($type === 'translationreview/group') { /* * - 3: language code * - 4: label of the message group * - 5: old state * - 6: new state */ $uiLanguage = $this->context->getLanguage(); $language = $params[3]; $targetPage = $this->makePageLinkWithText($this->entry->getTarget(), $params[4], array('language' => $language)); $params[2] = Message::rawParam($targetPage); $params[3] = TranslateUtils::getLanguageName($language, $uiLanguage->getCode()); $params[5] = $this->formatStateMessage($params[5]); $params[6] = $this->formatStateMessage($params[6]); } elseif ($type === 'translatorsandbox/rejected') { // No point linking to the user page which cannot have existed $params[2] = $this->entry->getTarget()->getText(); } elseif ($type === 'translatorsandbox/promoted') { // Gender for the target $params[3] = User::newFromId($params[3])->getName(); } return $params; }
/** * Main execution point * * @param string $subpage */ public function execute($subpage) { $this->rcSubpage = $subpage; $this->setHeaders(); $this->outputHeader(); $this->addModules(); $rows = $this->getRows(); $opts = $this->getOptions(); if ($rows === false) { if (!$this->including()) { $this->doHeader($opts, 0); $this->getOutput()->setStatusCode(404); } return; } $batch = new LinkBatch(); foreach ($rows as $row) { $batch->add(NS_USER, $row->rc_user_text); $batch->add(NS_USER_TALK, $row->rc_user_text); $batch->add($row->rc_namespace, $row->rc_title); if ($row->rc_source === RecentChange::SRC_LOG) { $formatter = LogFormatter::newFromRow($row); foreach ($formatter->getPreloadTitles() as $title) { $batch->addObj($title); } } } $batch->execute(); $this->webOutput($rows, $opts); $rows->free(); }
/** * @return string A HTML <li> element representing this revision, showing * change tags and everything */ public function getHTML() { $date = htmlspecialchars($this->list->getLanguage()->userTimeAndDate($this->row->log_timestamp, $this->list->getUser())); $title = Title::makeTitle($this->row->log_namespace, $this->row->log_title); $formatter = LogFormatter::newFromRow($this->row); $formatter->setContext($this->list->getContext()); $formatter->setAudience(LogFormatter::FOR_THIS_USER); // Log link for this page $loglink = Linker::link(SpecialPage::getTitleFor('Log'), $this->list->msg('log')->escaped(), array(), array('page' => $title->getPrefixedText())); $loglink = $this->list->msg('parentheses')->rawParams($loglink)->escaped(); // User links and action text $action = $formatter->getActionText(); // Comment $comment = $this->list->getLanguage()->getDirMark() . $formatter->getComment(); if (LogEventsList::isDeleted($this->row, LogPage::DELETED_COMMENT)) { $comment = '<span class="history-deleted">' . $comment . '</span>'; } $content = "{$loglink} {$date} {$action} {$comment}"; $attribs = array(); $tags = $this->getTags(); if ($tags) { list($tagSummary, $classes) = ChangeTags::formatSummaryRow($tags, 'edittags', $this->list->getContext()); $content .= " {$tagSummary}"; $attribs['class'] = implode(' ', $classes); } return Xml::tags('li', $attribs, $content); }
/** * @return array */ protected function getMessageParameters() { $entry = $this->entry->getParameters(); $params = parent::getMessageParameters(); $filter_title = SpecialPage::getTitleFor('AbuseFilter', $entry['filter']); $filter_caption = $this->msg('abusefilter-log-detailedentry-local')->params($entry['filter']); $log_title = SpecialPage::getTitleFor('AbuseLog', $entry['log']); $log_caption = $this->msg('abusefilter-log-detailslink'); $params[4] = $entry['action']; if ($this->plaintext) { $params[3] = '[[' . $filter_title->getPrefixedText() . '|' . $filter_caption . ']]'; $params[8] = '[[' . $log_title->getPrefixedText() . '|' . $log_caption . ']]'; } else { $params[3] = Message::rawParam(Linker::link($filter_title, htmlspecialchars($filter_caption))); $params[8] = Message::rawParam(Linker::link($log_title, htmlspecialchars($log_caption))); } $actions_taken = $entry['actions']; if (!strlen(trim($actions_taken))) { $actions_taken = $this->msg('abusefilter-log-noactions'); } else { $actions = explode(',', $actions_taken); $displayActions = array(); foreach ($actions as $action) { $displayActions[] = AbuseFilter::getActionDisplay($action); } $actions_taken = $this->context->getLanguage()->commaList($displayActions); } $params[5] = $actions_taken; // Bad things happen if the numbers are not in correct order ksort($params); return $params; }
/** * Hook function for RecentChange_save * Saves user data into the cu_changes table */ public static function updateCheckUserData(RecentChange $rc) { global $wgRequest; // Extract params extract($rc->mAttribs); // Get IP $ip = wfGetIP(); // Get XFF header $xff = $wgRequest->getHeader('X-Forwarded-For'); list($xff_ip, $isSquidOnly) = IP::getClientIPfromXFF($xff); // Get agent $agent = $wgRequest->getHeader('User-Agent'); // Store the log action text for log events // $rc_comment should just be the log_comment // BC: check if log_type and log_action exists // If not, then $rc_comment is the actiontext and comment if (isset($rc_log_type) && $rc_type == RC_LOG) { $target = Title::makeTitle($rc_namespace, $rc_title); $context = RequestContext::newExtraneousContext($target); $formatter = LogFormatter::newFromRow($rc->mAttribs); $formatter->setContext($context); $actionText = $formatter->getPlainActionText(); } else { $actionText = ''; } $dbw = wfGetDB(DB_MASTER); $cuc_id = $dbw->nextSequenceValue('cu_changes_cu_id_seq'); $rcRow = array('cuc_id' => $cuc_id, 'cuc_namespace' => $rc_namespace, 'cuc_title' => $rc_title, 'cuc_minor' => $rc_minor, 'cuc_user' => $rc_user, 'cuc_user_text' => $rc_user_text, 'cuc_actiontext' => $actionText, 'cuc_comment' => $rc_comment, 'cuc_this_oldid' => $rc_this_oldid, 'cuc_last_oldid' => $rc_last_oldid, 'cuc_type' => $rc_type, 'cuc_timestamp' => $rc_timestamp, 'cuc_ip' => IP::sanitizeIP($ip), 'cuc_ip_hex' => $ip ? IP::toHex($ip) : null, 'cuc_xff' => !$isSquidOnly ? $xff : '', 'cuc_xff_hex' => $xff_ip && !$isSquidOnly ? IP::toHex($xff_ip) : null, 'cuc_agent' => $agent); # On PG, MW unsets cur_id due to schema incompatibilites. So it may not be set! if (isset($rc_cur_id)) { $rcRow['cuc_page_id'] = $rc_cur_id; } $dbw->insert('cu_changes', $rcRow, __METHOD__); return true; }
protected function getMessageParameters() { $params = parent::getMessageParameters(); $oldname = $this->makePageLink( $this->entry->getTarget(), array( 'redirect' => 'no' ) ); $newname = $this->makePageLink( Title::newFromText( $params[3] ) ); $params[2] = Message::rawParam( $oldname ); $params[3] = Message::rawParam( $newname ); return $params; }
public function doTestLogFormatter($row, $extra) { RequestContext::resetMain(); $row = $this->expandDatabaseRow($row, $this->isLegacy($extra)); $formatter = LogFormatter::newFromRow($row); $this->assertEquals($extra['text'], self::removeSomeHtml($formatter->getActionText()), 'Action text is equal to expected text'); $this->assertSame($extra['api'], self::removeApiMetaData($formatter->formatParametersForApi()), 'Api log params is equal to expected array'); }
protected function getMessageParameters() { $lang = $this->context->getLanguage(); $params = parent::getMessageParameters(); $params[3] = ContentHandler::getLocalizedName($params[3], $lang); $params[4] = ContentHandler::getLocalizedName($params[4], $lang); return $params; }
public function getComment() { $timestamp = wfTimestamp( TS_MW, $this->entry->getTimestamp() ); if ( $timestamp < '20080129000000' ) { # Suppress $comment from old entries (before 2008-01-29), # not needed and can contain incorrect links return ''; } return parent::getComment(); }
protected function getMessageParameters() { parent::getMessageParameters(); $params = $this->extractParameters(); $lang = $this->context->getLanguage(); $this->parsedParameters[3] = Message::rawParam($lang->commaList(array_map(array($this, 'getCentralAuthLink'), explode('|', $params[3])))); $this->parsedParameters[4] = Message::rawParam($this->getCentralAuthLink($params[4])); ksort($this->parsedParameters); return $this->parsedParameters; }
protected function getMessageParameters() { $params = parent::getMessageParameters(); $oldname = $this->makePageLink($this->entry->getTarget(), array('redirect' => 'no')); $newname = $this->makePageLink(Title::newFromText($params[3])); $params[2] = Message::rawParam($oldname); $params[3] = Message::rawParam($newname); $params[4] = $this->context->getLanguage()->userTimeAndDate($params[4], $this->context->getUser()); return $params; }
protected function getMessageParameters() { $params = parent::getMessageParameters(); $subtype = $this->entry->getSubtype(); if ($subtype === 'requestwiki') { $params[6] = str_replace('#', '', $params[6]); $params[6] = Message::rawParam(Linker::linkKnown(Title::newFromText(SpecialPage::getTitleFor('RequestWikiQueue') . '/' . $params[6]), '#' . $params[6])); return $params; } }
protected function getMessageParameters() { $params = parent::getMessageParameters(); $subtype = $this->entry->getSubtype(); if ($subtype === 'move_prot') { $oldname = $this->makePageLink(Title::newFromText($params[3]), array('redirect' => 'no')); $params[3] = Message::rawParam($oldname); } return $params; }
protected function getMessageKey() { $key = parent::getMessageKey(); $params = $this->extractParameters(); if (isset($params[3])) { // New log items with more details // Messages: logentry-import-upload-details, logentry-import-interwiki-details $key .= '-details'; } return $key; }
/** * @param \LogEntry $entry */ public function __construct(\LogEntry $entry) { parent::__construct($entry); $params = $this->entry->getParameters(); // serialized topicId or postId can be stored foreach ($params as $key => $value) { if ($value instanceof UUID) { static::$uuids[$value->getAlphadecimal()] = $value; } } }
/** * Format a diff for the newsfeed * * @param $row Object: row from the recentchanges table * @return String */ public static function formatDiff($row) { $titleObj = Title::makeTitle($row->rc_namespace, $row->rc_title); $timestamp = wfTimestamp(TS_MW, $row->rc_timestamp); $actiontext = ''; if ($row->rc_type == RC_LOG) { $rcRow = (array) $row; // newFromRow() only accepts arrays for RC rows $actiontext = LogFormatter::newFromRow($rcRow)->getActionText(); } return self::formatDiffRow($titleObj, $row->rc_last_oldid, $row->rc_this_oldid, $timestamp, $row->rc_deleted & Revision::DELETED_COMMENT ? wfMessage('rev-deleted-comment')->escaped() : $row->rc_comment, $actiontext); }
public function getMessageKey() { $key = parent::getMessageKey(); $params = $this->extractParameters(); // Very old log format, everything in comment if (!isset($params[3])) { return "{$key}-legaciest"; } elseif (!isset($params[5])) { return "{$key}-legacier"; } return $key; }
protected function getMessageParameters() { $params = parent::getMessageParameters(); // Really old entries if ( !isset( $params[3] ) && !isset( $params[4] ) ) { return $params; } $oldGroups = $params[3]; $newGroups = $params[4]; // Less old entries if ( $oldGroups === '' ) { $oldGroups = array(); } elseif ( is_string( $oldGroups ) ) { $oldGroups = array_map( 'trim', explode( ',', $oldGroups ) ); } if ( $newGroups === '' ) { $newGroups = array(); } elseif ( is_string( $newGroups ) ) { $newGroups = array_map( 'trim', explode( ',', $newGroups ) ); } $userName = $this->entry->getTarget()->getText(); if ( !$this->plaintext && count( $oldGroups ) ) { foreach ( $oldGroups as &$group ) { $group = User::getGroupMember( $group, $userName ); } } if ( !$this->plaintext && count( $newGroups ) ) { foreach ( $newGroups as &$group ) { $group = User::getGroupMember( $group, $userName ); } } $lang = $this->context->getLanguage(); if ( count( $oldGroups ) ) { $params[3] = $lang->listToText( $oldGroups ); } else { $params[3] = $this->msg( 'rightsnone' )->text(); } if ( count( $newGroups ) ) { // Array_values is used here because of bug 42211 // see use of array_unique in UserrightsPage::doSaveUserGroups on $newGroups. $params[4] = $lang->listToText( array_values( $newGroups ) ); } else { $params[4] = $this->msg( 'rightsnone' )->text(); } return $params; }
protected function getMessageKey() { $key = parent::getMessageKey(); $params = $this->getMessageParameters(); $add = isset($params[6]) && isset($params[6]['num']) && $params[6]['num']; $remove = isset($params[8]) && isset($params[8]['num']) && $params[8]['num']; $key .= $remove ? $add ? '' : '-remove' : '-add'; if (isset($params[3]) && $params[3]) { $key .= '-revision'; } else { $key .= '-logentry'; } return $key; }
protected function getMessageKey() { $key = parent::getMessageKey(); $type = $this->entry->getFullType(); if ($type === 'pagetranslation/prioritylanguages') { $params = $this->getMessageParameters(); if (!isset($params[4])) { $key .= '-unset'; } elseif ($params['3'] === 'on') { $key .= '-force'; } } return $key; }
protected function getMessageParameters() { parent::getMessageParameters(); $params = $this->extractParameters(); if ($this->entry->getSubtype() === 'promote') { $this->parsedParameters[3] = $this->getLocalWikiLink($params[3], $params[5]); } else { // rename $this->parsedParameters[3] = $this->getCentralAuthLink($params[3]); } $this->parsedParameters[4] = $this->getCentralAuthLink($params[4]); ksort($this->parsedParameters); return $this->parsedParameters; }
protected function getMessageParameters() { $params = parent::getMessageParameters(); $target = $this->entry->getTarget(); $oldid = $params[3]; $revision = $this->context->getLanguage()->formatNum($oldid, true); if ($this->plaintext) { $revlink = $revision; } elseif ($target->exists()) { $query = array('oldid' => $oldid, 'diff' => 'prev'); $revlink = Linker::link($target, htmlspecialchars($revision), array(), $query); } else { $revlink = htmlspecialchars($revision); } $params[3] = Message::rawParam($revlink); return $params; }
protected function getMessageParameters() { if (isset($this->parsedParametersDeleteLog)) { return $this->parsedParametersDeleteLog; } $params = parent::getMessageParameters(); $subtype = $this->entry->getSubtype(); if (in_array($subtype, array('event', 'revision'))) { // $params[3] here is 'revision' or 'archive' for page revisions, 'oldimage' or // 'filearchive' for file versions, or a comma-separated list of log_ids for log // entries. $subtype here is 'revision' for page revisions and file // versions, or 'event' for log entries. if ($subtype === 'event' && count($params) === 6 || $subtype === 'revision' && isset($params[3]) && ($params[3] === 'revision' || $params[3] === 'oldimage' || $params[3] === 'archive' || $params[3] === 'filearchive')) { $paramStart = $subtype === 'revision' ? 4 : 3; $old = $this->parseBitField($params[$paramStart + 1]); $new = $this->parseBitField($params[$paramStart + 2]); list($hid, $unhid, $extra) = RevisionDeleter::getChanges($new, $old); $changes = array(); // messages used: revdelete-content-hid, revdelete-summary-hid, revdelete-uname-hid foreach ($hid as $v) { $changes[] = $this->msg("{$v}-hid")->plain(); } // messages used: revdelete-content-unhid, revdelete-summary-unhid, revdelete-uname-unhid foreach ($unhid as $v) { $changes[] = $this->msg("{$v}-unhid")->plain(); } foreach ($extra as $v) { $changes[] = $this->msg($v)->plain(); } $changeText = $this->context->getLanguage()->listToText($changes); $newParams = array_slice($params, 0, 3); $newParams[3] = $changeText; $count = count(explode(',', $params[$paramStart])); $newParams[4] = $this->context->getLanguage()->formatNum($count); $this->parsedParametersDeleteLog = $newParams; return $this->parsedParametersDeleteLog; } else { $this->parsedParametersDeleteLog = array_slice($params, 0, 3); return $this->parsedParametersDeleteLog; } } $this->parsedParametersDeleteLog = $params; return $this->parsedParametersDeleteLog; }
public function getHTML() { $date = htmlspecialchars($this->list->getLanguage()->userTimeAndDate($this->row->log_timestamp, $this->list->getUser())); $title = Title::makeTitle($this->row->log_namespace, $this->row->log_title); $formatter = LogFormatter::newFromRow($this->row); $formatter->setContext($this->list->getContext()); $formatter->setAudience(LogFormatter::FOR_THIS_USER); // Log link for this page $loglink = Linker::link(SpecialPage::getTitleFor('Log'), $this->list->msg('log')->escaped(), array(), array('page' => $title->getPrefixedText())); $loglink = $this->list->msg('parentheses')->rawParams($loglink)->escaped(); // User links and action text $action = $formatter->getActionText(); // Comment $comment = $this->list->getLanguage()->getDirMark() . Linker::commentBlock($this->row->log_comment); if (LogEventsList::isDeleted($this->row, LogPage::DELETED_COMMENT)) { $comment = '<span class="history-deleted">' . $comment . '</span>'; } return "<li>{$loglink} {$date} {$action} {$comment}</li>"; }
protected function getMessageParameters() { // First call the main function to load the other values parent::getMessageParameters(); $params = $this->extractParameters(); // Backwards compat for older log entries if (!isset($params[3])) { return $this->parsedParameters; } // This will be localized with Linker::link // @todo Somehow localize for plaintext messages $title = Title::newFromText('Special:Permalink/' . $params[3]); // Our simple version of LogFormatter::makeLink if ($this->plaintext) { $this->parsedParameters[2] = '[[' . $title->getPrefixedText() . ']]'; } else { $this->parsedParameters[2] = Message::rawParam(Linker::link($title, htmlspecialchars($this->entry->getTarget()))); } ksort($this->parsedParameters); return $this->parsedParameters; }
protected function getMessageParameters() { // Get the user language for displaying language names $userLang = $this->context->getLanguage()->getCode(); $params = parent::getMessageParameters(); // Get the language codes from log $oldLang = $params[3]; $kOld = strrpos($oldLang, '['); if ($kOld) { $oldLang = substr($oldLang, 0, $kOld); } $newLang = $params[4]; $kNew = strrpos($newLang, '['); if ($kNew) { $newLang = substr($newLang, 0, $kNew); } // Convert language codes to names in user language $logOld = Language::fetchLanguageName($oldLang, $userLang) . ' (' . $oldLang . ')'; $logNew = Language::fetchLanguageName($newLang, $userLang) . ' (' . $newLang . ')'; // Add the default message to languages if required $params[3] = !$kOld ? $logOld : $logOld . ' [' . $this->msg('default') . ']'; $params[4] = !$kNew ? $logNew : $logNew . ' [' . $this->msg('default') . ']'; return $params; }
public function getStartBody() { # Do a link batch query if ($this->getNumRows() > 0) { $lb = new LinkBatch(); foreach ($this->mResult as $row) { $lb->add($row->log_namespace, $row->log_title); $lb->addObj(Title::makeTitleSafe(NS_USER, $row->user_name)); $lb->addObj(Title::makeTitleSafe(NS_USER_TALK, $row->user_name)); $formatter = LogFormatter::newFromRow($row); foreach ($formatter->getPreloadTitles() as $title) { $lb->addObj($title); } } $lb->execute(); $this->mResult->seek(0); } return ''; }
/** * Extracts from a single sql row the data needed to describe one recent change. * * @param stdClass $row The row from which to extract the data. * @return array An array mapping strings (descriptors) to their respective string values. * @access public */ public function extractRowInfo($row) { /* Determine the title of the page that has been changed. */ $title = Title::makeTitle($row->rc_namespace, $row->rc_title); $user = $this->getUser(); /* Our output data. */ $vals = array(); $type = intval($row->rc_type); $vals['type'] = RecentChange::parseFromRCType($type); $anyHidden = false; /* Create a new entry in the result for the title. */ if ($this->fld_title || $this->fld_ids) { if ($type === RC_LOG && $row->rc_deleted & LogPage::DELETED_ACTION) { $vals['actionhidden'] = true; $anyHidden = true; } if ($type !== RC_LOG || LogEventsList::userCanBitfield($row->rc_deleted, LogPage::DELETED_ACTION, $user)) { if ($this->fld_title) { ApiQueryBase::addTitleInfo($vals, $title); } if ($this->fld_ids) { $vals['pageid'] = intval($row->rc_cur_id); $vals['revid'] = intval($row->rc_this_oldid); $vals['old_revid'] = intval($row->rc_last_oldid); } } } if ($this->fld_ids) { $vals['rcid'] = intval($row->rc_id); } /* Add user data and 'anon' flag, if user is anonymous. */ if ($this->fld_user || $this->fld_userid) { if ($row->rc_deleted & Revision::DELETED_USER) { $vals['userhidden'] = true; $anyHidden = true; } if (Revision::userCanBitfield($row->rc_deleted, Revision::DELETED_USER, $user)) { if ($this->fld_user) { $vals['user'] = $row->rc_user_text; } if ($this->fld_userid) { $vals['userid'] = $row->rc_user; } if (!$row->rc_user) { $vals['anon'] = true; } } } /* Add flags, such as new, minor, bot. */ if ($this->fld_flags) { $vals['bot'] = (bool) $row->rc_bot; $vals['new'] = $row->rc_type == RC_NEW; $vals['minor'] = (bool) $row->rc_minor; } /* Add sizes of each revision. (Only available on 1.10+) */ if ($this->fld_sizes) { $vals['oldlen'] = intval($row->rc_old_len); $vals['newlen'] = intval($row->rc_new_len); } /* Add the timestamp. */ if ($this->fld_timestamp) { $vals['timestamp'] = wfTimestamp(TS_ISO_8601, $row->rc_timestamp); } /* Add edit summary / log summary. */ if ($this->fld_comment || $this->fld_parsedcomment) { if ($row->rc_deleted & Revision::DELETED_COMMENT) { $vals['commenthidden'] = true; $anyHidden = true; } if (Revision::userCanBitfield($row->rc_deleted, Revision::DELETED_COMMENT, $user)) { if ($this->fld_comment && isset($row->rc_comment)) { $vals['comment'] = $row->rc_comment; } if ($this->fld_parsedcomment && isset($row->rc_comment)) { $vals['parsedcomment'] = Linker::formatComment($row->rc_comment, $title); } } } if ($this->fld_redirect) { $vals['redirect'] = (bool) $row->page_is_redirect; } /* Add the patrolled flag */ if ($this->fld_patrolled) { $vals['patrolled'] = $row->rc_patrolled == 1; $vals['unpatrolled'] = ChangesList::isUnpatrolled($row, $user); } if ($this->fld_loginfo && $row->rc_type == RC_LOG) { if ($row->rc_deleted & LogPage::DELETED_ACTION) { $vals['actionhidden'] = true; $anyHidden = true; } if (LogEventsList::userCanBitfield($row->rc_deleted, LogPage::DELETED_ACTION, $user)) { $vals['logid'] = intval($row->rc_logid); $vals['logtype'] = $row->rc_log_type; $vals['logaction'] = $row->rc_log_action; $vals['logparams'] = LogFormatter::newFromRow($row)->formatParametersForApi(); } } if ($this->fld_tags) { if ($row->ts_tags) { $tags = explode(',', $row->ts_tags); ApiResult::setIndexedTagName($tags, 'tag'); $vals['tags'] = $tags; } else { $vals['tags'] = array(); } } if ($this->fld_sha1 && $row->rev_sha1 !== null) { if ($row->rev_deleted & Revision::DELETED_TEXT) { $vals['sha1hidden'] = true; $anyHidden = true; } if (Revision::userCanBitfield($row->rev_deleted, Revision::DELETED_TEXT, $user)) { if ($row->rev_sha1 !== '') { $vals['sha1'] = wfBaseConvert($row->rev_sha1, 36, 16, 40); } else { $vals['sha1'] = ''; } } } if (!is_null($this->token)) { $tokenFunctions = $this->getTokenFunctions(); foreach ($this->token as $t) { $val = call_user_func($tokenFunctions[$t], $row->rc_cur_id, $title, RecentChange::newFromRow($row)); if ($val === false) { $this->setWarning("Action '{$t}' is not allowed for the current user"); } else { $vals[$t . 'token'] = $val; } } } if ($anyHidden && $row->rc_deleted & Revision::DELETED_RESTRICTED) { $vals['suppressed'] = true; } return $vals; }