MediaWiki REL1_30
RevDelRevisionItem.php
Go to the documentation of this file.
1<?php
27 public $revision;
28
29 public function __construct( $list, $row ) {
30 parent::__construct( $list, $row );
31 $this->revision = new Revision( $row );
32 }
33
34 public function getIdField() {
35 return 'rev_id';
36 }
37
38 public function getTimestampField() {
39 return 'rev_timestamp';
40 }
41
42 public function getAuthorIdField() {
43 return 'rev_user';
44 }
45
46 public function getAuthorNameField() {
47 return 'rev_user_text';
48 }
49
50 public function canView() {
51 return $this->revision->userCan( Revision::DELETED_RESTRICTED, $this->list->getUser() );
52 }
53
54 public function canViewContent() {
55 return $this->revision->userCan( Revision::DELETED_TEXT, $this->list->getUser() );
56 }
57
58 public function getBits() {
59 return $this->revision->getVisibility();
60 }
61
62 public function setBits( $bits ) {
63 $dbw = wfGetDB( DB_MASTER );
64 // Update revision table
65 $dbw->update( 'revision',
66 [ 'rev_deleted' => $bits ],
67 [
68 'rev_id' => $this->revision->getId(),
69 'rev_page' => $this->revision->getPage(),
70 'rev_deleted' => $this->getBits() // cas
71 ],
72 __METHOD__
73 );
74 if ( !$dbw->affectedRows() ) {
75 // Concurrent fail!
76 return false;
77 }
78 // Update recentchanges table
79 $dbw->update( 'recentchanges',
80 [
81 'rc_deleted' => $bits,
82 'rc_patrolled' => 1
83 ],
84 [
85 'rc_this_oldid' => $this->revision->getId(), // condition
86 // non-unique timestamp index
87 'rc_timestamp' => $dbw->timestamp( $this->revision->getTimestamp() ),
88 ],
89 __METHOD__
90 );
91
92 return true;
93 }
94
95 public function isDeleted() {
96 return $this->revision->isDeleted( Revision::DELETED_TEXT );
97 }
98
99 public function isHideCurrentOp( $newBits ) {
100 return ( $newBits & Revision::DELETED_TEXT )
101 && $this->list->getCurrent() == $this->getId();
102 }
103
109 protected function getRevisionLink() {
110 $date = $this->list->getLanguage()->userTimeAndDate(
111 $this->revision->getTimestamp(), $this->list->getUser() );
112
113 if ( $this->isDeleted() && !$this->canViewContent() ) {
114 return htmlspecialchars( $date );
115 }
116
117 return $this->getLinkRenderer()->makeKnownLink(
118 $this->list->title,
119 $date,
120 [],
121 [
122 'oldid' => $this->revision->getId(),
123 'unhide' => 1
124 ]
125 );
126 }
127
133 protected function getDiffLink() {
134 if ( $this->isDeleted() && !$this->canViewContent() ) {
135 return $this->list->msg( 'diff' )->escaped();
136 } else {
137 return $this->getLinkRenderer()->makeKnownLink(
138 $this->list->title,
139 $this->list->msg( 'diff' )->text(),
140 [],
141 [
142 'diff' => $this->revision->getId(),
143 'oldid' => 'prev',
144 'unhide' => 1
145 ]
146 );
147 }
148 }
149
154 public function getHTML() {
155 $difflink = $this->list->msg( 'parentheses' )
156 ->rawParams( $this->getDiffLink() )->escaped();
157 $revlink = $this->getRevisionLink();
158 $userlink = Linker::revUserLink( $this->revision );
159 $comment = Linker::revComment( $this->revision );
160 if ( $this->isDeleted() ) {
161 $revlink = "<span class=\"history-deleted\">$revlink</span>";
162 }
163 $content = "$difflink $revlink $userlink $comment";
164 $attribs = [];
165 $tags = $this->getTags();
166 if ( $tags ) {
167 list( $tagSummary, $classes ) = ChangeTags::formatSummaryRow(
168 $tags,
169 'revisiondelete',
170 $this->list->getContext()
171 );
172 $content .= " $tagSummary";
173 $attribs['class'] = implode( ' ', $classes );
174 }
175 return Xml::tags( 'li', $attribs, $content );
176 }
177
181 public function getTags() {
182 return $this->row->ts_tags;
183 }
184
185 public function getApiData( ApiResult $result ) {
187 $user = $this->list->getUser();
188 $ret = [
189 'id' => $rev->getId(),
190 'timestamp' => wfTimestamp( TS_ISO_8601, $rev->getTimestamp() ),
191 'userhidden' => (bool)$rev->isDeleted( Revision::DELETED_USER ),
192 'commenthidden' => (bool)$rev->isDeleted( Revision::DELETED_COMMENT ),
193 'texthidden' => (bool)$rev->isDeleted( Revision::DELETED_TEXT ),
194 ];
195 if ( $rev->userCan( Revision::DELETED_USER, $user ) ) {
196 $ret += [
197 'userid' => $rev->getUser( Revision::FOR_THIS_USER ),
198 'user' => $rev->getUserText( Revision::FOR_THIS_USER ),
199 ];
200 }
201 if ( $rev->userCan( Revision::DELETED_COMMENT, $user ) ) {
202 $ret += [
203 'comment' => $rev->getComment( Revision::FOR_THIS_USER ),
204 ];
205 }
206
207 return $ret;
208 }
209}
wfGetDB( $db, $groups=[], $wiki=false)
Get a Database object.
wfTimestamp( $outputtype=TS_UNIX, $ts=0)
Get a timestamp string in one of various formats.
This class represents the result of the API operations.
Definition ApiResult.php:33
static formatSummaryRow( $tags, $page, IContextSource $context=null)
Creates HTML for the given tags.
static revComment(Revision $rev, $local=false, $isPublic=false)
Wrap and format the given revision's comment block, if the current user is allowed to view it.
Definition Linker.php:1470
static revUserLink( $rev, $isPublic=false)
Generate a user link if the current user is allowed to view it.
Definition Linker.php:1038
Abstract base class for deletable items.
Item class for a live revision table row.
setBits( $bits)
Set the visibility of the item.
canViewContent()
Returns true if the current user can view the item text/file.
getTimestampField()
Get the DB field name storing timestamps.
canView()
Returns true if the current user can view the item.
getBits()
Get the current deletion bitfield value.
getAuthorNameField()
Get the DB field name storing user names.
getApiData(ApiResult $result)
Get the return information about the revision for the API.
getAuthorIdField()
Get the DB field name storing user ids.
getRevisionLink()
Get the HTML link to the revision text.
isHideCurrentOp( $newBits)
Returns true if the item is "current", and the operation to set the given bits can't be executed for ...
getIdField()
Get the DB field name associated with the ID list.
getDiffLink()
Get the HTML link to the diff.
$row
The database result row.
RevisionListBase $list
The parent.
getId()
Get the ID, as it would appear in the ids URL parameter.
getLinkRenderer()
Returns an instance of LinkRenderer.
getUser( $audience=self::FOR_PUBLIC, User $user=null)
Fetch revision's user id if it's available to the specified audience.
Definition Revision.php:877
const DELETED_USER
Definition Revision.php:92
const DELETED_TEXT
Definition Revision.php:90
const DELETED_RESTRICTED
Definition Revision.php:93
const DELETED_COMMENT
Definition Revision.php:91
const FOR_THIS_USER
Definition Revision.php:99
deferred txt A few of the database updates required by various functions here can be deferred until after the result page is displayed to the user For updating the view updating the linked to tables after a etc PHP does not yet have any way to tell the server to actually return and disconnect while still running these but it might have such a feature in the future We handle these by creating a deferred update object and putting those objects on a global list
Definition deferred.txt:11
null means default in associative array with keys and values unescaped Should be merged with default with a value of false meaning to suppress the attribute in associative array with keys and values unescaped noclasses & $ret
Definition hooks.txt:1975
null means default in associative array with keys and values unescaped Should be merged with default with a value of false meaning to suppress the attribute in associative array with keys and values unescaped noclasses just before the function returns a value If you return an< a > element with HTML attributes $attribs and contents $html will be returned If you return $ret will be returned and may include noclasses after processing & $attribs
Definition hooks.txt:1984
presenting them properly to the user as errors is done by the caller return true use this to change the list i e etc $rev
Definition hooks.txt:1760
const DB_MASTER
Definition defines.php:26