本文整理汇总了PHP中ChangesList类的典型用法代码示例。如果您正苦于以下问题:PHP ChangesList类的具体用法?PHP ChangesList怎么用?PHP ChangesList使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ChangesList类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: historyLine
/**
* Returns a row from the history printout.
*
* @todo document some more, and maybe clean up the code (some params redundant?)
*
* @param $row Object: the database row corresponding to the previous line.
* @param $next Mixed: the database row corresponding to the next line.
* @param $notificationtimestamp
* @param $latest Boolean: whether this row corresponds to the page's latest revision.
* @param $firstInList Boolean: whether this row corresponds to the first displayed on this history page.
* @return String: HTML output for the row
*/
function historyLine($row, $next, $notificationtimestamp = false, $latest = false, $firstInList = false)
{
global $wgUser, $wgLang;
$rev = new Revision($row);
$rev->setTitle($this->title);
$curlink = $this->curLink($rev, $latest);
$lastlink = $this->lastLink($rev, $next);
$diffButtons = $this->diffButtons($rev, $firstInList);
$histLinks = Html::rawElement('span', array('class' => 'mw-history-histlinks'), '(' . $curlink . $this->historyPage->message['pipe-separator'] . $lastlink . ') ');
$s = $histLinks . $diffButtons;
$link = $this->revLink($rev);
$classes = array();
$del = '';
// Show checkboxes for each revision
if ($wgUser->isAllowed('deleterevision')) {
$this->preventClickjacking();
// If revision was hidden from sysops, disable the checkbox
if (!$rev->userCan(Revision::DELETED_RESTRICTED)) {
$del = Xml::check('deleterevisions', false, array('disabled' => 'disabled'));
// Otherwise, enable the checkbox...
} else {
$del = Xml::check('showhiderevisions', false, array('name' => 'ids[' . $rev->getId() . ']'));
}
// User can only view deleted revisions...
} else {
if ($rev->getVisibility() && $wgUser->isAllowed('deletedhistory')) {
// If revision was hidden from sysops, disable the link
if (!$rev->userCan(Revision::DELETED_RESTRICTED)) {
$cdel = $this->getSkin()->revDeleteLinkDisabled(false);
// Otherwise, show the link...
} else {
$query = array('type' => 'revision', 'target' => $this->title->getPrefixedDbkey(), 'ids' => $rev->getId());
$del .= $this->getSkin()->revDeleteLink($query, $rev->isDeleted(Revision::DELETED_RESTRICTED), false);
}
}
}
if ($del) {
$s .= " {$del} ";
}
$s .= " {$link}";
$s .= " <span class='history-user'>" . $this->getSkin()->revUserTools($rev, true) . "</span>";
if ($rev->isMinor()) {
$s .= ' ' . ChangesList::flag('minor');
}
if (!is_null($size = $rev->getSize()) && !$rev->isDeleted(Revision::DELETED_TEXT)) {
$s .= ' ' . $this->getSkin()->formatRevisionSize($size);
}
$s .= $this->getSkin()->revComment($rev, false, true);
if ($notificationtimestamp && $row->rev_timestamp >= $notificationtimestamp) {
$s .= ' <span class="updatedmarker">' . wfMsgHtml('updatedmarker') . '</span>';
}
$tools = array();
# Rollback and undo links
if (!is_null($next) && is_object($next)) {
if ($latest && $this->title->userCan('rollback') && $this->title->userCan('edit')) {
$this->preventClickjacking();
$tools[] = '<span class="mw-rollback-link">' . $this->getSkin()->buildRollbackLink($rev) . '</span>';
}
if ($this->title->quickUserCan('edit') && !$rev->isDeleted(Revision::DELETED_TEXT) && !$next->rev_deleted & Revision::DELETED_TEXT) {
# Create undo tooltip for the first (=latest) line only
$undoTooltip = $latest ? array('title' => wfMsg('tooltip-undo')) : array();
$undolink = $this->getSkin()->link($this->title, wfMsgHtml('editundo'), $undoTooltip, array('action' => 'edit', 'undoafter' => $next->rev_id, 'undo' => $rev->getId()), array('known', 'noclasses'));
$tools[] = "<span class=\"mw-history-undo\">{$undolink}</span>";
}
}
if ($tools) {
$s .= ' (' . $wgLang->pipeList($tools) . ')';
}
# Tags
list($tagSummary, $newClasses) = ChangeTags::formatSummaryRow($row->ts_tags, 'history');
$classes = array_merge($classes, $newClasses);
$s .= " {$tagSummary}";
wfRunHooks('PageHistoryLineEnding', array($this, &$row, &$s, &$classes));
$attribs = array();
if ($classes) {
$attribs['class'] = implode(' ', $classes);
}
return Xml::tags('li', $attribs, $s) . "\n";
}
示例2: showDiffPage
//.........这里部分代码省略.........
// Build the link
if ($rcid) {
$wgOut->preventClickjacking();
$token = $wgUser->editToken($rcid);
$patrol = ' <span class="patrollink">[' . $sk->link($this->mTitle, wfMsgHtml('markaspatrolleddiff'), array(), array('action' => 'markpatrolled', 'rcid' => $rcid, 'token' => $token), array('known', 'noclasses')) . ']</span>';
} else {
$patrol = '';
}
} else {
$patrol = '';
}
# Carry over 'diffonly' param via navigation links
if ($diffOnly != $wgUser->getBoolOption('diffonly')) {
$query['diffonly'] = $diffOnly;
}
# Make "previous revision link"
$query['diff'] = 'prev';
$query['oldid'] = $this->mOldid;
# Cascade unhide param in links for easy deletion browsing
if ($this->unhide) {
$query['unhide'] = 1;
}
if (!$this->mOldRev->getPrevious()) {
$prevlink = ' ';
} else {
$prevlink = $sk->link($this->mTitle, wfMsgHtml('previousdiff'), array('id' => 'differences-prevlink'), $query, array('known', 'noclasses'));
}
# Make "next revision link"
$query['diff'] = 'next';
$query['oldid'] = $this->mNewid;
# Skip next link on the top revision
if ($this->mNewRev->isCurrent()) {
$nextlink = ' ';
} else {
$nextlink = $sk->link($this->mTitle, wfMsgHtml('nextdiff'), array('id' => 'differences-nextlink'), $query, array('known', 'noclasses'));
}
$oldminor = '';
$newminor = '';
if ($this->mOldRev->isMinor()) {
$oldminor = ChangesList::flag('minor');
}
if ($this->mNewRev->isMinor()) {
$newminor = ChangesList::flag('minor');
}
# Handle RevisionDelete links...
$ldel = $this->revisionDeleteLink($this->mOldRev);
$rdel = $this->revisionDeleteLink($this->mNewRev);
$oldHeader = '<div id="mw-diff-otitle1"><strong>' . $this->mOldtitle . '</strong></div>' . '<div id="mw-diff-otitle2">' . $sk->revUserTools($this->mOldRev, !$this->unhide) . '</div>' . '<div id="mw-diff-otitle3">' . $oldminor . $sk->revComment($this->mOldRev, !$diffOnly, !$this->unhide) . $ldel . '</div>' . '<div id="mw-diff-otitle4">' . $prevlink . '</div>';
$newHeader = '<div id="mw-diff-ntitle1"><strong>' . $this->mNewtitle . '</strong></div>' . '<div id="mw-diff-ntitle2">' . $sk->revUserTools($this->mNewRev, !$this->unhide) . " {$rollback}</div>" . '<div id="mw-diff-ntitle3">' . $newminor . $sk->revComment($this->mNewRev, !$diffOnly, !$this->unhide) . $rdel . '</div>' . '<div id="mw-diff-ntitle4">' . $nextlink . $patrol . '</div>';
# Check if this user can see the revisions
$allowed = $this->mOldRev->userCan(Revision::DELETED_TEXT) && $this->mNewRev->userCan(Revision::DELETED_TEXT);
# Check if one of the revisions is deleted/suppressed
$deleted = $suppressed = false;
if ($this->mOldRev->isDeleted(Revision::DELETED_TEXT)) {
$deleted = true;
// old revisions text is hidden
if ($this->mOldRev->isDeleted(Revision::DELETED_RESTRICTED)) {
$suppressed = true;
}
// also suppressed
}
if ($this->mNewRev->isDeleted(Revision::DELETED_TEXT)) {
$deleted = true;
// new revisions text is hidden
if ($this->mNewRev->isDeleted(Revision::DELETED_RESTRICTED)) {
$suppressed = true;
}
// also suppressed
}
# If the diff cannot be shown due to a deleted revision, then output
# the diff header and links to unhide (if available)...
if ($deleted && (!$this->unhide || !$allowed)) {
$this->showDiffStyle();
$multi = $this->getMultiNotice();
$wgOut->addHTML($this->addHeader('', $oldHeader, $newHeader, $multi));
if (!$allowed) {
$msg = $suppressed ? 'rev-suppressed-no-diff' : 'rev-deleted-no-diff';
# Give explanation for why revision is not visible
$wgOut->wrapWikiMsg("<div id='mw-{$msg}' class='mw-warning plainlinks'>\n\$1\n</div>\n", array($msg));
} else {
# Give explanation and add a link to view the diff...
$link = $this->mTitle->getFullUrl(array('diff' => $this->mNewid, 'oldid' => $this->mOldid, 'unhide' => 1));
$msg = $suppressed ? 'rev-suppressed-unhide-diff' : 'rev-deleted-unhide-diff';
$wgOut->wrapWikiMsg("<div id='mw-{$msg}' class='mw-warning plainlinks'>\n\$1\n</div>\n", array($msg, $link));
}
# Otherwise, output a regular diff...
} else {
# Add deletion notice if the user is viewing deleted content
$notice = '';
if ($deleted) {
$msg = $suppressed ? 'rev-suppressed-diff-view' : 'rev-deleted-diff-view';
$notice = "<div id='mw-{$msg}' class='mw-warning plainlinks'>\n" . wfMsgExt($msg, 'parseinline') . "</div>\n";
}
$this->showDiff($oldHeader, $newHeader, $notice);
if (!$diffOnly) {
$this->renderNewRevision();
}
}
wfProfileOut(__METHOD__);
}
示例3: getCharacterDifference
/**
* Returns the change size (HTML).
* The lengths can be given optionally.
*/
public function getCharacterDifference($old = 0, $new = 0)
{
if ($old === 0) {
$old = $this->mAttribs['rc_old_len'];
}
if ($new === 0) {
$new = $this->mAttribs['rc_new_len'];
}
if ($old === null || $new === null) {
return '';
}
return ChangesList::showCharacterDifference($old, $new);
}
示例4: outputChangesList
/**
* Build and output the actual changes list.
*
* @param array $rows Database rows
* @param FormOptions $opts
*/
public function outputChangesList($rows, $opts)
{
$limit = $opts['limit'];
$showWatcherCount = $this->getConfig()->get('RCShowWatchingUsers') && $this->getUser()->getOption('shownumberswatching');
$watcherCache = array();
$dbr = $this->getDB();
$counter = 1;
$list = ChangesList::newFromContext($this->getContext());
$list->initChangesListRows($rows);
$rclistOutput = $list->beginRecentChangesList();
foreach ($rows as $obj) {
if ($limit == 0) {
break;
}
$rc = RecentChange::newFromRow($obj);
$rc->counter = $counter++;
# Check if the page has been updated since the last visit
if ($this->getConfig()->get('ShowUpdatedMarker') && !empty($obj->wl_notificationtimestamp)) {
$rc->notificationtimestamp = $obj->rc_timestamp >= $obj->wl_notificationtimestamp;
} else {
$rc->notificationtimestamp = false;
// Default
}
# Check the number of users watching the page
$rc->numberofWatchingusers = 0;
// Default
if ($showWatcherCount && $obj->rc_namespace >= 0) {
if (!isset($watcherCache[$obj->rc_namespace][$obj->rc_title])) {
$watcherCache[$obj->rc_namespace][$obj->rc_title] = $dbr->selectField('watchlist', 'COUNT(*)', array('wl_namespace' => $obj->rc_namespace, 'wl_title' => $obj->rc_title), __METHOD__ . '-watchers');
}
$rc->numberofWatchingusers = $watcherCache[$obj->rc_namespace][$obj->rc_title];
}
$changeLine = $list->recentChangesLine($rc, !empty($obj->wl_user), $counter);
if ($changeLine !== false) {
$rclistOutput .= $changeLine;
--$limit;
}
}
$rclistOutput .= $list->endRecentChangesList();
if ($rows->numRows() === 0) {
$this->getOutput()->addHtml('<div class="mw-changeslist-empty">' . $this->msg('recentchanges-noresult')->parse() . '</div>');
if (!$this->including()) {
$this->getOutput()->setStatusCode(404);
}
} else {
$this->getOutput()->addHTML($rclistOutput);
}
}
示例5: showDiffPage
public function showDiffPage($diffOnly = false)
{
# Allow frames except in certain special cases
$out = $this->getOutput();
$out->allowClickjacking();
$out->setRobotPolicy('noindex,nofollow');
if (!$this->loadRevisionData()) {
$this->showMissingRevision();
return;
}
$user = $this->getUser();
$permErrors = $this->mNewPage->getUserPermissionsErrors('read', $user);
if ($this->mOldPage) {
# mOldPage might not be set, see below.
$permErrors = wfMergeErrorArrays($permErrors, $this->mOldPage->getUserPermissionsErrors('read', $user));
}
if (count($permErrors)) {
throw new PermissionsError('read', $permErrors);
}
$rollback = '';
$query = array();
# Carry over 'diffonly' param via navigation links
if ($diffOnly != $user->getBoolOption('diffonly')) {
$query['diffonly'] = $diffOnly;
}
# Cascade unhide param in links for easy deletion browsing
if ($this->unhide) {
$query['unhide'] = 1;
}
# Check if one of the revisions is deleted/suppressed
$deleted = $suppressed = false;
$allowed = $this->mNewRev->userCan(Revision::DELETED_TEXT, $user);
$revisionTools = array();
# mOldRev is false if the difference engine is called with a "vague" query for
# a diff between a version V and its previous version V' AND the version V
# is the first version of that article. In that case, V' does not exist.
if ($this->mOldRev === false) {
$out->setPageTitle($this->msg('difference-title', $this->mNewPage->getPrefixedText()));
$samePage = true;
$oldHeader = '';
} else {
Hooks::run('DiffViewHeader', array($this, $this->mOldRev, $this->mNewRev));
if ($this->mNewPage->equals($this->mOldPage)) {
$out->setPageTitle($this->msg('difference-title', $this->mNewPage->getPrefixedText()));
$samePage = true;
} else {
$out->setPageTitle($this->msg('difference-title-multipage', $this->mOldPage->getPrefixedText(), $this->mNewPage->getPrefixedText()));
$out->addSubtitle($this->msg('difference-multipage'));
$samePage = false;
}
if ($samePage && $this->mNewPage->quickUserCan('edit', $user)) {
if ($this->mNewRev->isCurrent() && $this->mNewPage->userCan('rollback', $user)) {
$rollbackLink = Linker::generateRollback($this->mNewRev, $this->getContext());
if ($rollbackLink) {
$out->preventClickjacking();
$rollback = '   ' . $rollbackLink;
}
}
if (!$this->mOldRev->isDeleted(Revision::DELETED_TEXT) && !$this->mNewRev->isDeleted(Revision::DELETED_TEXT)) {
$undoLink = Html::element('a', array('href' => $this->mNewPage->getLocalURL(array('action' => 'edit', 'undoafter' => $this->mOldid, 'undo' => $this->mNewid)), 'title' => Linker::titleAttrib('undo')), $this->msg('editundo')->text());
$revisionTools['mw-diff-undo'] = $undoLink;
}
}
# Make "previous revision link"
if ($samePage && $this->mOldRev->getPrevious()) {
$prevlink = Linker::linkKnown($this->mOldPage, $this->msg('previousdiff')->escaped(), array('id' => 'differences-prevlink'), array('diff' => 'prev', 'oldid' => $this->mOldid) + $query);
} else {
$prevlink = ' ';
}
if ($this->mOldRev->isMinor()) {
$oldminor = ChangesList::flag('minor');
} else {
$oldminor = '';
}
$ldel = $this->revisionDeleteLink($this->mOldRev);
$oldRevisionHeader = $this->getRevisionHeader($this->mOldRev, 'complete');
$oldChangeTags = ChangeTags::formatSummaryRow($this->mOldTags, 'diff');
$oldHeader = '<div id="mw-diff-otitle1"><strong>' . $oldRevisionHeader . '</strong></div>' . '<div id="mw-diff-otitle2">' . Linker::revUserTools($this->mOldRev, !$this->unhide) . '</div>' . '<div id="mw-diff-otitle3">' . $oldminor . Linker::revComment($this->mOldRev, !$diffOnly, !$this->unhide) . $ldel . '</div>' . '<div id="mw-diff-otitle5">' . $oldChangeTags[0] . '</div>' . '<div id="mw-diff-otitle4">' . $prevlink . '</div>';
if ($this->mOldRev->isDeleted(Revision::DELETED_TEXT)) {
$deleted = true;
// old revisions text is hidden
if ($this->mOldRev->isDeleted(Revision::DELETED_RESTRICTED)) {
$suppressed = true;
// also suppressed
}
}
# Check if this user can see the revisions
if (!$this->mOldRev->userCan(Revision::DELETED_TEXT, $user)) {
$allowed = false;
}
}
# Make "next revision link"
# Skip next link on the top revision
if ($samePage && !$this->mNewRev->isCurrent()) {
$nextlink = Linker::linkKnown($this->mNewPage, $this->msg('nextdiff')->escaped(), array('id' => 'differences-nextlink'), array('diff' => 'next', 'oldid' => $this->mNewid) + $query);
} else {
$nextlink = ' ';
}
if ($this->mNewRev->isMinor()) {
$newminor = ChangesList::flag('minor');
//.........这里部分代码省略.........
示例6: historyLine
/**
* Returns a row from the history printout.
*
* @todo document some more, and maybe clean up the code (some params redundant?)
*
* @param stdClass $row The database row corresponding to the previous line.
* @param mixed $next The database row corresponding to the next line
* (chronologically previous)
* @param bool|string $notificationtimestamp
* @param bool $latest Whether this row corresponds to the page's latest revision.
* @param bool $firstInList Whether this row corresponds to the first
* displayed on this history page.
* @return string HTML output for the row
*/
function historyLine($row, $next, $notificationtimestamp = false, $latest = false, $firstInList = false)
{
$rev = new Revision($row);
$rev->setTitle($this->getTitle());
if (is_object($next)) {
$prevRev = new Revision($next);
$prevRev->setTitle($this->getTitle());
} else {
$prevRev = null;
}
$curlink = $this->curLink($rev, $latest);
$lastlink = $this->lastLink($rev, $next);
$curLastlinks = $curlink . $this->historyPage->message['pipe-separator'] . $lastlink;
$histLinks = Html::rawElement('span', array('class' => 'mw-history-histlinks'), $this->msg('parentheses')->rawParams($curLastlinks)->escaped());
$diffButtons = $this->diffButtons($rev, $firstInList);
$s = $histLinks . $diffButtons;
$link = $this->revLink($rev);
$classes = array();
$del = '';
$user = $this->getUser();
// Show checkboxes for each revision
if ($user->isAllowed('deleterevision')) {
$this->preventClickjacking();
// If revision was hidden from sysops, disable the checkbox
if (!$rev->userCan(Revision::DELETED_RESTRICTED, $user)) {
$del = Xml::check('deleterevisions', false, array('disabled' => 'disabled'));
// Otherwise, enable the checkbox...
} else {
$del = Xml::check('showhiderevisions', false, array('name' => 'ids[' . $rev->getId() . ']'));
}
// User can only view deleted revisions...
} elseif ($rev->getVisibility() && $user->isAllowed('deletedhistory')) {
// If revision was hidden from sysops, disable the link
if (!$rev->userCan(Revision::DELETED_RESTRICTED, $user)) {
$del = Linker::revDeleteLinkDisabled(false);
// Otherwise, show the link...
} else {
$query = array('type' => 'revision', 'target' => $this->getTitle()->getPrefixedDBkey(), 'ids' => $rev->getId());
$del .= Linker::revDeleteLink($query, $rev->isDeleted(Revision::DELETED_RESTRICTED), false);
}
}
if ($del) {
$s .= " {$del} ";
}
$lang = $this->getLanguage();
$dirmark = $lang->getDirMark();
$s .= " {$link}";
$s .= $dirmark;
$s .= " <span class='history-user'>" . Linker::revUserTools($rev, true) . "</span>";
$s .= $dirmark;
if ($rev->isMinor()) {
$s .= ' ' . ChangesList::flag('minor');
}
# Sometimes rev_len isn't populated
if ($rev->getSize() !== null) {
# Size is always public data
$prevSize = isset($this->parentLens[$row->rev_parent_id]) ? $this->parentLens[$row->rev_parent_id] : 0;
$sDiff = ChangesList::showCharacterDifference($prevSize, $rev->getSize());
$fSize = Linker::formatRevisionSize($rev->getSize());
$s .= ' <span class="mw-changeslist-separator">. .</span> ' . "{$fSize} {$sDiff}";
}
# Text following the character difference is added just before running hooks
$s2 = Linker::revComment($rev, false, true);
if ($notificationtimestamp && $row->rev_timestamp >= $notificationtimestamp) {
$s2 .= ' <span class="updatedmarker">' . $this->msg('updatedmarker')->escaped() . '</span>';
$classes[] = 'mw-history-line-updated';
}
$tools = array();
# Rollback and undo links
if ($prevRev && $this->getTitle()->quickUserCan('edit', $user)) {
if ($latest && $this->getTitle()->quickUserCan('rollback', $user)) {
// Get a rollback link without the brackets
$rollbackLink = Linker::generateRollback($rev, $this->getContext(), array('verify', 'noBrackets'));
if ($rollbackLink) {
$this->preventClickjacking();
$tools[] = $rollbackLink;
}
}
if (!$rev->isDeleted(Revision::DELETED_TEXT) && !$prevRev->isDeleted(Revision::DELETED_TEXT)) {
# Create undo tooltip for the first (=latest) line only
$undoTooltip = $latest ? array('title' => $this->msg('tooltip-undo')->text()) : array();
$undolink = Linker::linkKnown($this->getTitle(), $this->msg('editundo')->escaped(), $undoTooltip, array('action' => 'edit', 'undoafter' => $prevRev->getId(), 'undo' => $rev->getId()));
$tools[] = "<span class=\"mw-history-undo\">{$undolink}</span>";
}
}
// Allow extension to add their own links here
//.........这里部分代码省略.........
示例7: formatRevisionRow
protected function formatRevisionRow($row, $earliestLiveTime, $remaining)
{
$rev = Revision::newFromArchiveRow($row, array('title' => $this->mTargetObj));
$revTextSize = '';
$ts = wfTimestamp(TS_MW, $row->ar_timestamp);
// Build checkboxen...
if ($this->mAllowed) {
if ($this->mInvert) {
if (in_array($ts, $this->mTargetTimestamp)) {
$checkBox = Xml::check("ts{$ts}");
} else {
$checkBox = Xml::check("ts{$ts}", true);
}
} else {
$checkBox = Xml::check("ts{$ts}");
}
} else {
$checkBox = '';
}
// Build page & diff links...
$user = $this->getUser();
if ($this->mCanView) {
$titleObj = $this->getPageTitle();
# Last link
if (!$rev->userCan(Revision::DELETED_TEXT, $this->getUser())) {
$pageLink = htmlspecialchars($this->getLanguage()->userTimeAndDate($ts, $user));
$last = $this->msg('diff')->escaped();
} elseif ($remaining > 0 || $earliestLiveTime && $ts > $earliestLiveTime) {
$pageLink = $this->getPageLink($rev, $titleObj, $ts);
$last = Linker::linkKnown($titleObj, $this->msg('diff')->escaped(), array(), array('target' => $this->mTargetObj->getPrefixedText(), 'timestamp' => $ts, 'diff' => 'prev'));
} else {
$pageLink = $this->getPageLink($rev, $titleObj, $ts);
$last = $this->msg('diff')->escaped();
}
} else {
$pageLink = htmlspecialchars($this->getLanguage()->userTimeAndDate($ts, $user));
$last = $this->msg('diff')->escaped();
}
// User links
$userLink = Linker::revUserTools($rev);
// Minor edit
$minor = $rev->isMinor() ? ChangesList::flag('minor') : '';
// Revision text size
$size = $row->ar_len;
if (!is_null($size)) {
$revTextSize = Linker::formatRevisionSize($size);
}
// Edit summary
$comment = Linker::revComment($rev);
// Tags
$attribs = array();
list($tagSummary, $classes) = ChangeTags::formatSummaryRow($row->ts_tags, 'deletedhistory');
if ($classes) {
$attribs['class'] = implode(' ', $classes);
}
// Revision delete links
$revdlink = Linker::getRevDeleteLink($user, $rev, $this->mTargetObj);
$revisionRow = $this->msg('undelete-revision-row')->rawParams($checkBox, $revdlink, $last, $pageLink, $userLink, $minor, $revTextSize, $comment, $tagSummary)->escaped();
return Xml::tags('li', $attribs, $revisionRow) . "\n";
}
示例8: wfSpecialRecentchanges
//.........这里部分代码省略.........
$batch->add(NS_USER, $row->rc_user_text);
$batch->add(NS_USER_TALK, $row->rc_user_text);
}
}
$dbr->freeResult($res);
if ($feedFormat) {
rcOutputFeed($rows, $feedFormat, $limit, $hideminor, $lastmod);
} else {
# Web output...
// Run existence checks
$batch->execute();
$any = $wgRequest->getBool('categories_any', $defaults['categories_any']);
// Output header
if (!$specialPage->including()) {
$wgOut->addWikiText('<div class="minor_text">' . wfMsgForContentNoTrans("recentchangestext") . '<br /></div>');
// Dump everything here
$nondefaults = array();
wfAppendToArrayIfNotDefault('days', $days, $defaults, $nondefaults);
wfAppendToArrayIfNotDefault('limit', $limit, $defaults, $nondefaults);
wfAppendToArrayIfNotDefault('hideminor', $hideminor, $defaults, $nondefaults);
wfAppendToArrayIfNotDefault('hidebots', $hidebots, $defaults, $nondefaults);
wfAppendToArrayIfNotDefault('hideanons', $hideanons, $defaults, $nondefaults);
wfAppendToArrayIfNotDefault('hideliu', $hideliu, $defaults, $nondefaults);
wfAppendToArrayIfNotDefault('hidepatrolled', $hidepatrolled, $defaults, $nondefaults);
wfAppendToArrayIfNotDefault('hidemyself', $hidemyself, $defaults, $nondefaults);
wfAppendToArrayIfNotDefault('from', $from, $defaults, $nondefaults);
wfAppendToArrayIfNotDefault('namespace', $namespace, $defaults, $nondefaults);
wfAppendToArrayIfNotDefault('invert', $invert, $defaults, $nondefaults);
wfAppendToArrayIfNotDefault('categories_any', $any, $defaults, $nondefaults);
// Add end of the texts
$wgOut->addHTML('<div class="rcoptions">' . rcOptionsPanel($defaults, $nondefaults) . "\n");
//XXCHANGED
$wgOut->addHTML(rcNamespaceForm($namespace, $invert, $reverse, $featured, $nondefaults, $any) . '</div>' . "\n");
//XXADDED
global $wgLanguageCode;
if ($wgUser->getID() > 0 && $wgLanguageCode == 'en') {
$sk = $wgUser->getSkin();
$url = $wgRequest->getRequestURL();
if ($wgRequest->getVal('refresh', null) != null) {
$url = str_replace("&refresh=1", "", $url);
$url = str_replace("?refresh=1", "", $url);
$wgOut->addHTML("<a href='{$url}' class='button secondary'>" . wfMsg('rc_turn_refresh_off') . "</a>");
} else {
if (strpos($url, "?") !== false) {
$url .= "&refresh=1";
} else {
$url .= "?refresh=1";
}
$wgOut->addHTML("<a href='{$url}' class='button secondary'>" . wfMsg('rc_turn_refresh_on') . "</a>");
}
$wgOut->addHTML(" <a class='button secondary' href='#' onclick=\"open('/index.php?title=Special:RCBuddy&hidepatrolled=1&limit=200&featured=1', '', 'scrollbars=no,status=no,width=570,height=200,resizable=yes,titlebar=no');\">RC Buddy</a>");
}
}
// And now for the content
$wgOut->setSyndicated(true);
$list = ChangesList::newFromUser($wgUser);
if ($wgAllowCategorizedRecentChanges) {
$categories = trim($wgRequest->getVal('categories', ""));
$categories = str_replace("|", "\n", $categories);
$categories = explode("\n", $categories);
rcFilterByCategories($rows, $categories, $any);
}
$s = $list->beginRecentChangesList();
$s .= "<div id='recentchanges'>\n";
$counter = 1;
$showWatcherCount = $wgRCShowWatchingUsers && $wgUser->getOption('shownumberswatching');
$watcherCache = array();
foreach ($rows as $obj) {
if ($limit == 0) {
break;
}
if (!($hideminor && $obj->rc_minor) && !($hidepatrolled && $obj->rc_patrolled)) {
$rc = RecentChange::newFromRow($obj);
$rc->counter = $counter++;
if ($wgShowUpdatedMarker && !empty($obj->wl_notificationtimestamp) && $obj->rc_timestamp >= $obj->wl_notificationtimestamp) {
$rc->notificationtimestamp = true;
} else {
$rc->notificationtimestamp = false;
}
$rc->numberofWatchingusers = 0;
// Default
if ($showWatcherCount && $obj->rc_namespace >= 0) {
if (!isset($watcherCache[$obj->rc_namespace][$obj->rc_title])) {
$watcherCache[$obj->rc_namespace][$obj->rc_title] = $dbr->selectField('watchlist', 'COUNT(*)', array('wl_namespace' => $obj->rc_namespace, 'wl_title' => $obj->rc_title), __METHOD__ . '-watchers');
}
$rc->numberofWatchingusers = $watcherCache[$obj->rc_namespace][$obj->rc_title];
}
$rc->show_namespace = $namespace;
$rc->invert = $invert;
$rc->reverse = $reverse;
$rc->featured = $featured;
$s .= $list->recentChangesLine($rc, !empty($obj->wl_user));
--$limit;
}
}
$s .= $list->endRecentChangesList();
$s .= "</div>\n";
$wgOut->addHTML($s);
}
}
示例9: formatRow
/**
* Generates each row in the contributions list.
*
* Contributions which are marked "top" are currently on top of the history.
* For these contributions, a [rollback] link is shown for users with roll-
* back privileges. The rollback link restores the most recent version that
* was not written by the target user.
*
* @todo This would probably look a lot nicer in a table.
*/
function formatRow($row)
{
global $wgUser, $wgLang, $wgContLang;
wfProfileIn(__METHOD__);
$sk = $this->getSkin();
$rev = new Revision($row);
$classes = array();
$page = Title::newFromRow($row);
$page->resetArticleId($row->rev_page);
// use process cache
$link = $sk->link($page, htmlspecialchars($page->getPrefixedText()), array(), $page->isRedirect() ? array('redirect' => 'no') : array());
# Mark current revisions
$difftext = $topmarktext = '';
if ($row->rev_id == $row->page_latest) {
$topmarktext .= '<span class="mw-uctop">' . $this->messages['uctop'] . '</span>';
# Add rollback link
if (!$row->page_is_new && $page->quickUserCan('rollback') && $page->quickUserCan('edit')) {
$this->preventClickjacking();
$topmarktext .= ' ' . $sk->generateRollback($rev);
}
}
# Is there a visible previous revision?
if ($rev->userCan(Revision::DELETED_TEXT) && $rev->getParentId() !== 0) {
$difftext = $sk->linkKnown($page, $this->messages['diff'], array(), array('diff' => 'prev', 'oldid' => $row->rev_id));
} else {
$difftext = $this->messages['diff'];
}
$histlink = $sk->linkKnown($page, $this->messages['hist'], array(), array('action' => 'history'));
$comment = $wgContLang->getDirMark() . $sk->revComment($rev, false, true);
$date = $wgLang->timeanddate(wfTimestamp(TS_MW, $row->rev_timestamp), true);
if ($rev->isDeleted(Revision::DELETED_TEXT)) {
$d = '<span class="history-deleted">' . $date . '</span>';
} else {
$d = $sk->linkKnown($page, htmlspecialchars($date), array(), array('oldid' => intval($row->rev_id)));
}
if ($this->target == 'newbies') {
$userlink = ' . . ' . $sk->userLink($row->rev_user, $row->rev_user_text);
$userlink .= ' ' . wfMsg('parentheses', $sk->userTalkLink($row->rev_user, $row->rev_user_text)) . ' ';
} else {
$userlink = '';
}
if ($rev->getParentId() === 0) {
$nflag = ChangesList::flag('newpage');
} else {
$nflag = '';
}
if ($rev->isMinor()) {
$mflag = ChangesList::flag('minor');
} else {
$mflag = '';
}
// Don't show useless link to people who cannot hide revisions
$canHide = $wgUser->isAllowed('deleterevision');
if ($canHide || $rev->getVisibility() && $wgUser->isAllowed('deletedhistory')) {
if (!$rev->userCan(Revision::DELETED_RESTRICTED)) {
$del = $this->mSkin->revDeleteLinkDisabled($canHide);
// revision was hidden from sysops
} else {
$query = array('type' => 'revision', 'target' => $page->getPrefixedDbkey(), 'ids' => $rev->getId());
$del = $this->mSkin->revDeleteLink($query, $rev->isDeleted(Revision::DELETED_RESTRICTED), $canHide);
}
$del .= ' ';
} else {
$del = '';
}
$diffHistLinks = '(' . $difftext . $this->messages['pipe-separator'] . $histlink . ')';
$ret = "{$del}{$d} {$diffHistLinks} {$nflag}{$mflag} {$link}{$userlink} {$comment} {$topmarktext}";
# Denote if username is redacted for this edit
if ($rev->isDeleted(Revision::DELETED_USER)) {
$ret .= " <strong>" . wfMsgHtml('rev-deleted-user-contribs') . "</strong>";
}
# Tags, if any.
list($tagSummary, $newClasses) = ChangeTags::formatSummaryRow($row->ts_tags, 'contributions');
$classes = array_merge($classes, $newClasses);
$ret .= " {$tagSummary}";
// Let extensions add data
wfRunHooks('ContributionsLineEnding', array(&$this, &$ret, $row));
$classes = implode(' ', $classes);
$ret = "<li class=\"{$classes}\">{$ret}</li>\n";
wfProfileOut(__METHOD__);
return $ret;
}
示例10: renderFeedItemHtml
/**
* Renders an item in the feed
* @param MWTimestamp $ts The time the edit occurred
* @param string $diffLink url to the diff for the edit
* @param string $username The username of the user that made the edit (absent if anonymous)
* @param string $comment The edit summary
* @param Title|null $title The title of the page that was edited
* @param bool $isAnon Is the edit anonymous?
* @param int|null $bytes Net number of bytes changed or null if not applicable
* @param bool $isMinor Is the edit minor?
* @return string HTML code
*
* @todo FIXME: use an array as an argument?
*/
protected function renderFeedItemHtml($ts, $diffLink = '', $username = '', $comment = '', $title = null, $isAnon = false, $bytes = 0, $isMinor = false)
{
$output = $this->getOutput();
$user = $this->getUser();
$lang = $this->getLanguage();
if ($isAnon) {
$usernameClass = MobileUI::iconClass('anonymous', 'before', 'icon-16px mw-mf-user mw-mf-anon');
} else {
$usernameClass = MobileUI::iconClass('user', 'before', 'icon-16px mw-mf-user');
}
$html = Html::openElement('li', array('class' => 'page-summary'));
if ($diffLink) {
$html .= Html::openElement('a', array('href' => $diffLink, 'class' => 'title'));
} else {
$html .= Html::openElement('div', array('class' => 'title'));
}
if ($title) {
$html .= Html::element('h3', array(), $title->getPrefixedText());
}
if ($username && $this->showUsername) {
$html .= Html::element('p', array('class' => $usernameClass), $username);
}
$html .= Html::element('p', array('class' => 'edit-summary component truncated-text multi-line two-line'), $comment);
if ($isMinor) {
$html .= ChangesList::flag('minor');
}
$html .= Html::openElement('div', array('class' => 'list-thumb')) . Html::element('p', array('class' => 'timestamp'), $lang->userTime($ts, $user));
if ($bytes) {
$formattedBytes = $lang->formatNum($bytes);
if ($bytes > 0) {
$formattedBytes = '+' . $formattedBytes;
$bytesClass = 'mw-mf-bytesadded';
} else {
$bytesClass = 'mw-mf-bytesremoved';
}
$html .= Html::element('p', array('class' => $bytesClass, 'dir' => 'ltr'), $formattedBytes);
}
$html .= Html::closeElement('div');
if ($diffLink) {
$html .= Html::closeElement('a');
} else {
$html .= Html::closeElement('div');
}
$html .= Html::closeElement('li');
$output->addHtml($html);
}
示例11: wfSpecialWatchlist
//.........这里部分代码省略.........
# Spit out some control panel links
$thisTitle = SpecialPage::getTitleFor('Watchlist');
$skin = $wgUser->getSkin();
$showLinktext = wfMsgHtml('show');
$hideLinktext = wfMsgHtml('hide');
# Hide/show minor edits
$label = $hideMinor ? $showLinktext : $hideLinktext;
$linkBits = wfArrayToCGI(array('hideMinor' => 1 - (int) $hideMinor), $nondefaults);
$links[] = wfMsgHtml('rcshowhideminor', $skin->makeKnownLinkObj($thisTitle, $label, $linkBits));
# Hide/show bot edits
$label = $hideBots ? $showLinktext : $hideLinktext;
$linkBits = wfArrayToCGI(array('hideBots' => 1 - (int) $hideBots), $nondefaults);
$links[] = wfMsgHtml('rcshowhidebots', $skin->makeKnownLinkObj($thisTitle, $label, $linkBits));
# Hide/show anonymous edits
$label = $hideAnons ? $showLinktext : $hideLinktext;
$linkBits = wfArrayToCGI(array('hideAnons' => 1 - (int) $hideAnons), $nondefaults);
$links[] = wfMsgHtml('rcshowhideanons', $skin->makeKnownLinkObj($thisTitle, $label, $linkBits));
# Hide/show logged in edits
$label = $hideLiu ? $showLinktext : $hideLinktext;
$linkBits = wfArrayToCGI(array('hideLiu' => 1 - (int) $hideLiu), $nondefaults);
$links[] = wfMsgHtml('rcshowhideliu', $skin->makeKnownLinkObj($thisTitle, $label, $linkBits));
# Hide/show own edits
$label = $hideOwn ? $showLinktext : $hideLinktext;
$linkBits = wfArrayToCGI(array('hideOwn' => 1 - (int) $hideOwn), $nondefaults);
$links[] = wfMsgHtml('rcshowhidemine', $skin->makeKnownLinkObj($thisTitle, $label, $linkBits));
# Hide/show patrolled edits
if ($wgUser->useRCPatrol()) {
$label = $hidePatrolled ? $showLinktext : $hideLinktext;
$linkBits = wfArrayToCGI(array('hidePatrolled' => 1 - (int) $hidePatrolled), $nondefaults);
$links[] = wfMsgHtml('rcshowhidepatr', $skin->makeKnownLinkObj($thisTitle, $label, $linkBits));
}
# Namespace filter and put the whole form together.
$form .= $wlInfo;
$form .= $cutofflinks;
$form .= implode(' | ', $links);
$form .= Xml::openElement('form', array('method' => 'post', 'action' => $thisTitle->getLocalUrl()));
$form .= '<hr /><p>';
$form .= Xml::label(wfMsg('namespace'), 'namespace') . ' ';
$form .= Xml::namespaceSelector($nameSpace, '') . ' ';
$form .= Xml::checkLabel(wfMsg('invert'), 'invert', 'nsinvert', $invert) . ' ';
$form .= Xml::submitButton(wfMsg('allpagessubmit')) . '</p>';
$form .= Xml::hidden('days', $days);
if ($hideMinor) {
$form .= Xml::hidden('hideMinor', 1);
}
if ($hideBots) {
$form .= Xml::hidden('hideBots', 1);
}
if ($hideAnons) {
$form .= Xml::hidden('hideAnons', 1);
}
if ($hideLiu) {
$form .= Xml::hidden('hideLiu', 1);
}
if ($hideOwn) {
$form .= Xml::hidden('hideOwn', 1);
}
$form .= Xml::closeElement('form');
$form .= Xml::closeElement('fieldset');
$wgOut->addHTML($form);
# If there's nothing to show, stop here
if ($numRows == 0) {
$wgOut->addWikiMsg('watchnochange');
return;
}
/* End bottom header */
/* Do link batch query */
$linkBatch = new LinkBatch();
while ($row = $dbr->fetchObject($res)) {
$userNameUnderscored = str_replace(' ', '_', $row->rc_user_text);
if ($row->rc_user != 0) {
$linkBatch->add(NS_USER, $userNameUnderscored);
}
$linkBatch->add(NS_USER_TALK, $userNameUnderscored);
}
$linkBatch->execute();
$dbr->dataSeek($res, 0);
$list = ChangesList::newFromUser($wgUser);
$s = $list->beginRecentChangesList();
$counter = 1;
while ($obj = $dbr->fetchObject($res)) {
# Make RC entry
$rc = RecentChange::newFromRow($obj);
$rc->counter = $counter++;
if ($wgShowUpdatedMarker) {
$updated = $obj->wl_notificationtimestamp;
} else {
$updated = false;
}
if ($wgRCShowWatchingUsers && $wgUser->getOption('shownumberswatching')) {
$rc->numberofWatchingusers = $dbr->selectField('watchlist', 'COUNT(*)', array('wl_namespace' => $obj->rc_namespace, 'wl_title' => $obj->rc_title), __METHOD__);
} else {
$rc->numberofWatchingusers = 0;
}
$s .= $list->recentChangesLine($rc, $updated);
}
$s .= $list->endRecentChangesList();
$dbr->freeResult($res);
$wgOut->addHTML($s);
}
示例12: extractRowInfo
//.........这里部分代码省略.........
// These should already have been filtered out of the query, but just in case.
if ($type === RC_LOG && $row->rc_deleted & LogPage::DELETED_ACTION) {
$vals['actionhidden'] = '';
$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);
}
}
}
/* 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'] = '';
$anyHidden = true;
}
if (Revision::userCanBitfield($row->rc_deleted, Revision::DELETED_USER, $user)) {
if ($this->fld_userid) {
$vals['userid'] = $row->rc_user;
// for backwards compatibility
$vals['user'] = $row->rc_user;
}
if ($this->fld_user) {
$vals['user'] = $row->rc_user_text;
}
if (!$row->rc_user) {
$vals['anon'] = '';
}
}
}
/* Add flags, such as new, minor, bot. */
if ($this->fld_flags) {
if ($row->rc_bot) {
$vals['bot'] = '';
}
if ($row->rc_type == RC_NEW) {
$vals['new'] = '';
}
if ($row->rc_minor) {
$vals['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);
}
if ($this->fld_notificationtimestamp) {
$vals['notificationtimestamp'] = $row->wl_notificationtimestamp == null ? '' : wfTimestamp(TS_ISO_8601, $row->wl_notificationtimestamp);
}
/* Add edit summary / log summary. */
if ($this->fld_comment || $this->fld_parsedcomment) {
if ($row->rc_deleted & Revision::DELETED_COMMENT) {
$vals['commenthidden'] = '';
$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);
}
}
}
/* Add the patrolled flag */
if ($this->fld_patrol && $row->rc_patrolled == 1) {
$vals['patrolled'] = '';
}
if ($this->fld_patrol && ChangesList::isUnpatrolled($row, $user)) {
$vals['unpatrolled'] = '';
}
if ($this->fld_loginfo && $row->rc_type == RC_LOG) {
if ($row->rc_deleted & LogPage::DELETED_ACTION) {
$vals['actionhidden'] = '';
$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;
$logEntry = DatabaseLogEntry::newFromRow((array) $row);
ApiQueryLogEvents::addLogParams($this->getResult(), $vals, $logEntry->getParameters(), $logEntry->getType(), $logEntry->getSubtype(), $logEntry->getTimestamp());
}
}
if ($anyHidden && $row->rc_deleted & Revision::DELETED_RESTRICTED) {
$vals['suppressed'] = '';
}
return $vals;
}
示例13: revisionInfo
function revisionInfo($row)
{
global $wgUser;
$changes = ChangesList::newFromContext(RequestContext::getMain());
$out = $changes->beginRecentChangesList();
$rc = RecentChange::newFromCurRow($row);
$rc->counter = 0;
// ???
$out .= $changes->recentChangesLine($rc);
$out .= $changes->endRecentChangesList();
return $out;
}
示例14: formatRow
/**
* Generates each row in the contributions list.
*
* Contributions which are marked "top" are currently on top of the history.
* For these contributions, a [rollback] link is shown for users with sysop
* privileges. The rollback link restores the most recent version that was not
* written by the target user.
*
* @todo This would probably look a lot nicer in a table.
*/
function formatRow($row)
{
global $wgUser, $wgLang;
wfProfileIn(__METHOD__);
$sk = $this->getSkin();
$rev = new Revision(array('id' => $row->ar_rev_id, 'comment' => $row->ar_comment, 'user' => $row->ar_user, 'user_text' => $row->ar_user_text, 'timestamp' => $row->ar_timestamp, 'minor_edit' => $row->ar_minor_edit, 'deleted' => $row->ar_deleted));
$page = Title::makeTitle($row->ar_namespace, $row->ar_title);
$undelete = SpecialPage::getTitleFor('Undelete');
$logs = SpecialPage::getTitleFor('Log');
$dellog = $sk->linkKnown($logs, $this->messages['deletionlog'], array(), array('type' => 'delete', 'page' => $page->getPrefixedText()));
$reviewlink = $sk->linkKnown(SpecialPage::getTitleFor('Undelete', $page->getPrefixedDBkey()), $this->messages['undeleteviewlink']);
if ($wgUser->isAllowed('deletedtext')) {
$last = $sk->linkKnown($undelete, $this->messages['diff'], array(), array('target' => $page->getPrefixedText(), 'timestamp' => $rev->getTimestamp(), 'diff' => 'prev'));
} else {
$last = $this->messages['diff'];
}
$comment = $sk->revComment($rev);
$date = htmlspecialchars($wgLang->timeanddate($rev->getTimestamp(), true));
if (!$wgUser->isAllowed('undelete') || !$rev->userCan(Revision::DELETED_TEXT)) {
$link = $date;
// unusable link
} else {
$link = $sk->linkKnown($undelete, $date, array(), array('target' => $page->getPrefixedText(), 'timestamp' => $rev->getTimestamp()));
}
// Style deleted items
if ($rev->isDeleted(Revision::DELETED_TEXT)) {
$link = '<span class="history-deleted">' . $link . '</span>';
}
$pagelink = $sk->link($page);
if ($rev->isMinor()) {
$mflag = ChangesList::flag('minor');
} else {
$mflag = '';
}
// Revision delete link
$canHide = $wgUser->isAllowed('deleterevision');
if ($canHide || $rev->getVisibility() && $wgUser->isAllowed('deletedhistory')) {
if (!$rev->userCan(Revision::DELETED_RESTRICTED)) {
$del = $this->mSkin->revDeleteLinkDisabled($canHide);
// revision was hidden from sysops
} else {
$query = array('type' => 'archive', 'target' => $page->getPrefixedDbkey(), 'ids' => $rev->getTimestamp());
$del = $this->mSkin->revDeleteLink($query, $rev->isDeleted(Revision::DELETED_RESTRICTED), $canHide) . ' ';
}
} else {
$del = '';
}
$tools = Html::rawElement('span', array('class' => 'mw-deletedcontribs-tools'), wfMsg('parentheses', $wgLang->pipeList(array($last, $dellog, $reviewlink))));
$ret = "{$del}{$link} {$tools} . . {$mflag} {$pagelink} {$comment}";
# Denote if username is redacted for this edit
if ($rev->isDeleted(Revision::DELETED_USER)) {
$ret .= " <strong>" . wfMsgHtml('rev-deleted-user-contribs') . "</strong>";
}
$ret = Html::rawElement('li', array(), $ret) . "\n";
wfProfileOut(__METHOD__);
return $ret;
}
示例15: formatRow
/**
* Generates each row in the contributions list.
*
* Contributions which are marked "top" are currently on top of the history.
* For these contributions, a [rollback] link is shown for users with roll-
* back privileges. The rollback link restores the most recent version that
* was not written by the target user.
*
* @todo This would probably look a lot nicer in a table.
* @param $row
* @return string
*/
function formatRow($row)
{
wfProfileIn(__METHOD__);
$ret = '';
$classes = array();
/*
* There may be more than just revision rows. To make sure that we'll only be processing
* revisions here, let's _try_ to build a revision out of our row (without displaying
* notices though) and then trying to grab data from the built object. If we succeed,
* we're definitely dealing with revision data and we may proceed, if not, we'll leave it
* to extensions to subscribe to the hook to parse the row.
*/
wfSuppressWarnings();
$rev = new Revision($row);
$validRevision = $rev->getParentId() !== null;
wfRestoreWarnings();
if ($validRevision) {
$classes = array();
$page = Title::newFromRow($row);
$link = Linker::link($page, htmlspecialchars($page->getPrefixedText()), array('class' => 'mw-contributions-title'), $page->isRedirect() ? array('redirect' => 'no') : array());
# Mark current revisions
$topmarktext = '';
$user = $this->getUser();
if ($row->rev_id == $row->page_latest) {
$topmarktext .= '<span class="mw-uctop">' . $this->messages['uctop'] . '</span>';
# Add rollback link
if (!$row->page_is_new && $page->quickUserCan('rollback', $user) && $page->quickUserCan('edit', $user)) {
$this->preventClickjacking();
$topmarktext .= ' ' . Linker::generateRollback($rev, $this->getContext());
}
}
# Is there a visible previous revision?
if ($rev->userCan(Revision::DELETED_TEXT, $user) && $rev->getParentId() !== 0) {
$difftext = Linker::linkKnown($page, $this->messages['diff'], array(), array('diff' => 'prev', 'oldid' => $row->rev_id));
} else {
$difftext = $this->messages['diff'];
}
$histlink = Linker::linkKnown($page, $this->messages['hist'], array(), array('action' => 'history'));
if ($row->rev_parent_id === null) {
// For some reason rev_parent_id isn't populated for this row.
// Its rumoured this is true on wikipedia for some revisions (bug 34922).
// Next best thing is to have the total number of bytes.
$chardiff = ' <span class="mw-changeslist-separator">. .</span> ' . Linker::formatRevisionSize($row->rev_len) . ' <span class="mw-changeslist-separator">. .</span> ';
} else {
$parentLen = isset($this->mParentLens[$row->rev_parent_id]) ? $this->mParentLens[$row->rev_parent_id] : 0;
$chardiff = ' <span class="mw-changeslist-separator">. .</span> ' . ChangesList::showCharacterDifference($parentLen, $row->rev_len, $this->getContext()) . ' <span class="mw-changeslist-separator">. .</span> ';
}
$lang = $this->getLanguage();
$comment = $lang->getDirMark() . Linker::revComment($rev, false, true);
$date = $lang->userTimeAndDate($row->rev_timestamp, $user);
if ($rev->userCan(Revision::DELETED_TEXT, $user)) {
$d = Linker::linkKnown($page, htmlspecialchars($date), array('class' => 'mw-changeslist-date'), array('oldid' => intval($row->rev_id)));
} else {
$d = htmlspecialchars($date);
}
if ($rev->isDeleted(Revision::DELETED_TEXT)) {
$d = '<span class="history-deleted">' . $d . '</span>';
}
# Show user names for /newbies as there may be different users.
# Note that we already excluded rows with hidden user names.
if ($this->contribs == 'newbie') {
$userlink = ' . . ' . Linker::userLink($rev->getUser(), $rev->getUserText());
$userlink .= ' ' . $this->msg('parentheses')->rawParams(Linker::userTalkLink($rev->getUser(), $rev->getUserText()))->escaped() . ' ';
} else {
$userlink = '';
}
if ($rev->getParentId() === 0) {
$nflag = ChangesList::flag('newpage');
} else {
$nflag = '';
}
if ($rev->isMinor()) {
$mflag = ChangesList::flag('minor');
} else {
$mflag = '';
}
$del = Linker::getRevDeleteLink($user, $rev, $page);
if ($del !== '') {
$del .= ' ';
}
$diffHistLinks = $this->msg('parentheses')->rawParams($difftext . $this->messages['pipe-separator'] . $histlink)->escaped();
$ret = "{$del}{$d} {$diffHistLinks}{$chardiff}{$nflag}{$mflag} {$link}{$userlink} {$comment} {$topmarktext}";
# Denote if username is redacted for this edit
if ($rev->isDeleted(Revision::DELETED_USER)) {
$ret .= " <strong>" . $this->msg('rev-deleted-user-contribs')->escaped() . "</strong>";
}
# Tags, if any.
list($tagSummary, $newClasses) = ChangeTags::formatSummaryRow($row->ts_tags, 'contributions');
//.........这里部分代码省略.........