MediaWiki  master
RevDelFileItem.php
Go to the documentation of this file.
1 <?php
23 
27 class RevDelFileItem extends RevDelItem {
29  protected $list;
31  protected $file;
32 
33  public function __construct( RevisionListBase $list, $row ) {
34  parent::__construct( $list, $row );
35  $this->file = static::initFile( $list, $row );
36  }
37 
45  protected static function initFile( $list, $row ) {
46  return RepoGroup::singleton()->getLocalRepo()->newFileFromRow( $row );
47  }
48 
49  public function getIdField() {
50  return 'oi_archive_name';
51  }
52 
53  public function getTimestampField() {
54  return 'oi_timestamp';
55  }
56 
57  public function getAuthorIdField() {
58  return 'oi_user';
59  }
60 
61  public function getAuthorNameField() {
62  return 'oi_user_text';
63  }
64 
65  public function getAuthorActorField() {
66  return 'oi_actor';
67  }
68 
69  public function getId() {
70  $parts = explode( '!', $this->row->oi_archive_name );
71 
72  return $parts[0];
73  }
74 
75  public function canView() {
76  return $this->file->userCan( File::DELETED_RESTRICTED, $this->list->getUser() );
77  }
78 
79  public function canViewContent() {
80  return $this->file->userCan( File::DELETED_FILE, $this->list->getUser() );
81  }
82 
83  public function getBits() {
84  return $this->file->getVisibility();
85  }
86 
87  public function setBits( $bits ) {
88  # Queue the file op
89  # @todo FIXME: Move to LocalFile.php
90  if ( $this->isDeleted() ) {
91  if ( $bits & File::DELETED_FILE ) {
92  # Still deleted
93  } else {
94  # Newly undeleted
95  $key = $this->file->getStorageKey();
96  $srcRel = $this->file->repo->getDeletedHashPath( $key ) . $key;
97  $this->list->storeBatch[] = [
98  $this->file->repo->getVirtualUrl( 'deleted' ) . '/' . $srcRel,
99  'public',
100  $this->file->getRel()
101  ];
102  $this->list->cleanupBatch[] = $key;
103  }
104  } elseif ( $bits & File::DELETED_FILE ) {
105  # Newly deleted
106  $key = $this->file->getStorageKey();
107  $dstRel = $this->file->repo->getDeletedHashPath( $key ) . $key;
108  $this->list->deleteBatch[] = [ $this->file->getRel(), $dstRel ];
109  }
110 
111  # Do the database operations
112  $dbw = wfGetDB( DB_MASTER );
113  $dbw->update( 'oldimage',
114  [ 'oi_deleted' => $bits ],
115  [
116  'oi_name' => $this->row->oi_name,
117  'oi_timestamp' => $this->row->oi_timestamp,
118  'oi_deleted' => $this->getBits()
119  ],
120  __METHOD__
121  );
122 
123  return (bool)$dbw->affectedRows();
124  }
125 
126  public function isDeleted() {
127  return $this->file->isDeleted( File::DELETED_FILE );
128  }
129 
135  protected function getLink() {
136  $date = $this->list->getLanguage()->userTimeAndDate(
137  $this->file->getTimestamp(), $this->list->getUser() );
138 
139  if ( !$this->isDeleted() ) {
140  # Regular files...
141  return Html::element( 'a', [ 'href' => $this->file->getUrl() ], $date );
142  }
143 
144  # Hidden files...
145  if ( !$this->canViewContent() ) {
146  $link = htmlspecialchars( $date );
147  } else {
148  $link = $this->getLinkRenderer()->makeLink(
149  SpecialPage::getTitleFor( 'Revisiondelete' ),
150  $date,
151  [],
152  [
153  'target' => $this->list->title->getPrefixedText(),
154  'file' => $this->file->getArchiveName(),
155  'token' => $this->list->getUser()->getEditToken(
156  $this->file->getArchiveName() )
157  ]
158  );
159  }
160 
161  return '<span class="history-deleted">' . $link . '</span>';
162  }
163 
168  protected function getUserTools() {
169  if ( $this->file->userCan( RevisionRecord::DELETED_USER, $this->list->getUser() ) ) {
170  $uid = $this->file->getUser( 'id' );
171  $name = $this->file->getUser( 'text' );
172  $link = Linker::userLink( $uid, $name ) . Linker::userToolLinks( $uid, $name );
173  } else {
174  $link = $this->list->msg( 'rev-deleted-user' )->escaped();
175  }
176  if ( $this->file->isDeleted( RevisionRecord::DELETED_USER ) ) {
177  return '<span class="history-deleted">' . $link . '</span>';
178  }
179 
180  return $link;
181  }
182 
189  protected function getComment() {
190  if ( $this->file->userCan( File::DELETED_COMMENT, $this->list->getUser() ) ) {
191  $block = Linker::commentBlock( $this->file->getDescription() );
192  } else {
193  $block = ' ' . $this->list->msg( 'rev-deleted-comment' )->escaped();
194  }
195  if ( $this->file->isDeleted( File::DELETED_COMMENT ) ) {
196  return "<span class=\"history-deleted\">$block</span>";
197  }
198 
199  return $block;
200  }
201 
202  public function getHTML() {
203  $data =
204  $this->list->msg( 'widthheight' )->numParams(
205  $this->file->getWidth(), $this->file->getHeight() )->text() .
206  ' (' . $this->list->msg( 'nbytes' )->numParams( $this->file->getSize() )->text() . ')';
207 
208  return '<li>' . $this->getLink() . ' ' . $this->getUserTools() . ' ' .
209  $data . ' ' . $this->getComment() . '</li>';
210  }
211 
212  public function getApiData( ApiResult $result ) {
213  $file = $this->file;
214  $user = $this->list->getUser();
215  $ret = [
216  'title' => $this->list->title->getPrefixedText(),
217  'archivename' => $file->getArchiveName(),
218  'timestamp' => wfTimestamp( TS_ISO_8601, $file->getTimestamp() ),
219  'width' => $file->getWidth(),
220  'height' => $file->getHeight(),
221  'size' => $file->getSize(),
222  'userhidden' => (bool)$file->isDeleted( RevisionRecord::DELETED_USER ),
223  'commenthidden' => (bool)$file->isDeleted( RevisionRecord::DELETED_COMMENT ),
224  'contenthidden' => (bool)$this->isDeleted(),
225  ];
226  if ( !$this->isDeleted() ) {
227  $ret += [
228  'url' => $file->getUrl(),
229  ];
230  } elseif ( $this->canViewContent() ) {
231  // @phan-suppress-next-line PhanUselessBinaryAddRight
232  $ret += [
233  'url' => SpecialPage::getTitleFor( 'Revisiondelete' )->getLinkURL(
234  [
235  'target' => $this->list->title->getPrefixedText(),
236  'file' => $file->getArchiveName(),
237  'token' => $user->getEditToken( $file->getArchiveName() )
238  ]
239  ),
240  ];
241  }
242  if ( $file->userCan( RevisionRecord::DELETED_USER, $user ) ) {
243  $ret += [
244  'userid' => $file->getUser( 'id' ),
245  'user' => $file->getUser( 'text' ),
246  ];
247  }
248  if ( $file->userCan( RevisionRecord::DELETED_COMMENT, $user ) ) {
249  $ret += [
250  'comment' => $file->getDescription( LocalFile::RAW ),
251  ];
252  }
253 
254  return $ret;
255  }
256 
257  public function lock() {
258  return $this->file->acquireFileLock();
259  }
260 
261  public function unlock() {
262  return $this->file->releaseFileLock();
263  }
264 }
RevDelFileItem\$file
OldLocalFile $file
Definition: RevDelFileItem.php:31
Revision\RevisionRecord
Page revision base class.
Definition: RevisionRecord.php:46
RepoGroup\singleton
static singleton()
Definition: RepoGroup.php:60
RevDelFileItem\getApiData
getApiData(ApiResult $result)
Get the return information about the revision for the API.
Definition: RevDelFileItem.php:212
LocalFile\getTimestamp
getTimestamp()
Definition: LocalFile.php:2120
RevDelFileItem\getAuthorIdField
getAuthorIdField()
Get the DB field name storing user ids.
Definition: RevDelFileItem.php:57
LocalFile\getUser
getUser( $type='text')
Returns user who uploaded the file.
Definition: LocalFile.php:861
Linker\userLink
static userLink( $userId, $userName, $altUserName=false)
Make user link (or user contributions for unregistered users)
Definition: Linker.php:898
RevisionListBase
List for revision table items for a single page.
Definition: RevisionListBase.php:29
File\DELETED_RESTRICTED
const DELETED_RESTRICTED
Definition: File.php:66
File\RAW
const RAW
Definition: File.php:81
OldLocalFile\isDeleted
isDeleted( $field)
Definition: OldLocalFile.php:335
wfTimestamp
wfTimestamp( $outputtype=TS_UNIX, $ts=0)
Get a timestamp string in one of various formats.
Definition: GlobalFunctions.php:1871
Linker\userToolLinks
static userToolLinks( $userId, $userText, $redContribsWhenNoEdits=false, $flags=0, $edits=null, $useParentheses=true)
Generate standard user tool links (talk, contributions, block link, etc.)
Definition: Linker.php:943
RevDelFileItem\lock
lock()
Lock the item against changes outside of the DB.
Definition: RevDelFileItem.php:257
File\getUrl
getUrl()
Return the URL of the file.
Definition: File.php:358
RevDelFileItem\getIdField
getIdField()
Get the DB field name associated with the ID list.
Definition: RevDelFileItem.php:49
RevDelFileItem\getTimestampField
getTimestampField()
Get the DB field name storing timestamps.
Definition: RevDelFileItem.php:53
LocalFile\getSize
getSize()
Returns the size of the image file, in bytes.
Definition: LocalFile.php:932
SpecialPage\getTitleFor
static getTitleFor( $name, $subpage=false, $fragment='')
Get a localised Title object for a specified special page name If you don't need a full Title object,...
Definition: SpecialPage.php:83
RevDelFileItem\__construct
__construct(RevisionListBase $list, $row)
Definition: RevDelFileItem.php:33
RevDelFileItem\initFile
static initFile( $list, $row)
Create file object from $row sourced from $list.
Definition: RevDelFileItem.php:45
RevDelFileItem\setBits
setBits( $bits)
Set the visibility of the item.
Definition: RevDelFileItem.php:87
RevDelFileItem\getAuthorActorField
getAuthorActorField()
Get the DB field name storing actor ids.
Definition: RevDelFileItem.php:65
RevDelFileItem\getAuthorNameField
getAuthorNameField()
Get the DB field name storing user names.
Definition: RevDelFileItem.php:61
File\DELETED_COMMENT
const DELETED_COMMENT
Definition: File.php:64
ApiResult
This class represents the result of the API operations.
Definition: ApiResult.php:35
RevDelFileItem\unlock
unlock()
Unlock the item against changes outside of the DB.
Definition: RevDelFileItem.php:261
RevisionItemBase\getLinkRenderer
getLinkRenderer()
Returns an instance of LinkRenderer.
Definition: RevisionItemBase.php:174
wfGetDB
wfGetDB( $db, $groups=[], $wiki=false)
Get a Database object.
Definition: GlobalFunctions.php:2579
RevDelFileItem\isDeleted
isDeleted()
Definition: RevDelFileItem.php:126
DB_MASTER
const DB_MASTER
Definition: defines.php:26
RevDelFileItem\getComment
getComment()
Wrap and format the file's comment block, if the current user is allowed to view it.
Definition: RevDelFileItem.php:189
RevDelFileItem\getHTML
getHTML()
Get the HTML of the list item.
Definition: RevDelFileItem.php:202
LocalFile\getDescription
getDescription( $audience=self::FOR_PUBLIC, User $user=null)
Definition: LocalFile.php:2104
RevDelFileItem\getUserTools
getUserTools()
Generate a user tool link cluster if the current user is allowed to view it.
Definition: RevDelFileItem.php:168
RevDelFileItem\canViewContent
canViewContent()
Returns true if the current user can view the item text/file.
Definition: RevDelFileItem.php:79
RevDelFileItem\getBits
getBits()
Get the current deletion bitfield value.
Definition: RevDelFileItem.php:83
Linker\commentBlock
static commentBlock( $comment, $title=null, $local=false, $wikiId=null, $useParentheses=true)
Wrap a comment in standard punctuation and formatting if it's non-empty, otherwise return empty strin...
Definition: Linker.php:1543
RevisionItemBase\$row
$row
The database result row.
Definition: RevisionItemBase.php:33
RevDelFileItem
Item class for an oldimage table row.
Definition: RevDelFileItem.php:27
RevDelFileItem\getLink
getLink()
Get the link to the file.
Definition: RevDelFileItem.php:135
RevDelFileItem\canView
canView()
Returns true if the current user can view the item.
Definition: RevDelFileItem.php:75
OldLocalFile\userCan
userCan( $field, User $user=null)
Determine if the current user is allowed to view a particular field of this image file,...
Definition: OldLocalFile.php:359
RevDelFileItem\getId
getId()
Get the ID, as it would appear in the ids URL parameter.
Definition: RevDelFileItem.php:69
RevDelFileItem\$list
RevDelFileList $list
Definition: RevDelFileItem.php:29
RevDelFileList
List for oldimage table items.
Definition: RevDelFileList.php:28
File\DELETED_FILE
const DELETED_FILE
Definition: File.php:63
LocalFile\getWidth
getWidth( $page=1)
Return the width of the image.
Definition: LocalFile.php:796
LocalFile\getHeight
getHeight( $page=1)
Return the height of the image.
Definition: LocalFile.php:828
OldLocalFile\getArchiveName
getArchiveName()
Definition: OldLocalFile.php:180
OldLocalFile
Class to represent a file in the oldimage table.
Definition: OldLocalFile.php:31
RevDelItem
Abstract base class for deletable items.
Definition: RevDelItem.php:25