21 use MediaWiki\HookContainer\ProtectedHookAccessorTrait;
35 use ProtectedHookAccessorTrait;
69 $this->showThumb = $context->getConfig()->get( MainConfigNames::ShowArchiveThumbnails ) &&
70 $this->img->canRender();
93 $this->
getOutput()->addModuleStyles(
'mediawiki.interface.helpers.styles' );
96 $canDelete = $this->current->isLocal() &&
97 $this->
getAuthority()->isAllowedAny(
'delete',
'deletedhistory' );
101 $canDelete ?
'' :
null,
103 $this->showThumb ?
'filehist-thumb' :
null,
104 'filehist-dimensions',
108 if ( $key !==
null ) {
109 $html .= Html::element(
'th', [], $key ? $this->
msg( $key )->text() :
'' );
113 return Html::openElement(
'table', [
'class' =>
'wikitable filehistory' ] ) .
"\n"
114 . Html::rawElement(
'tr', [], $html ) .
"\n";
121 return Html::closeElement(
'table' ) .
"\n";
134 $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
140 $local = $this->current->isLocal();
144 if ( $local && ( $this->
getAuthority()->isAllowedAny(
'delete',
'deletedhistory' ) ) ) {
145 $row .= Html::openElement(
'td' );
146 # Link to hide content. Don't show useless link to people who cannot hide revisions.
147 if ( !$iscur && $this->
getAuthority()->isAllowed(
'deleterevision' ) ) {
150 $row .= Html::check(
'deleterevisions',
false, [
'disabled' =>
'disabled' ] );
152 $row .= Html::check(
'ids[' . explode(
'!',
$img, 2 )[0] .
']',
false );
158 # Link to remove from history
160 if (
$file->exists() ) {
161 $row .= $linkRenderer->makeKnownLink(
163 $this->
msg( $iscur ?
'filehist-deleteall' :
'filehist-deleteone' )->text(),
165 [
'action' =>
'delete',
'oldimage' => $iscur ?
null :
$img ]
169 $row .= $this->
msg(
'filehist-missing' )->escaped();
173 $row .= Html::closeElement(
'td' );
177 $row .= Html::openElement(
'td' );
179 $row .= $this->
msg(
'filehist-current' )->escaped();
180 } elseif ( $local && $this->
getAuthority()->probablyCan(
'edit', $this->title )
181 && $this->
getAuthority()->probablyCan(
'upload', $this->title )
184 $row .= $this->
msg(
'filehist-revert' )->escaped();
185 } elseif ( !
$file->exists() ) {
187 $row .= $this->
msg(
'filehist-missing' )->escaped();
189 $row .= $linkRenderer->makeKnownLink(
191 $this->
msg(
'filehist-revert' )->text(),
194 'action' =>
'revert',
200 $row .= Html::closeElement(
'td' );
203 $selected =
$file->getTimestamp() === $this->img->getTimestamp();
204 $row .= Html::openElement(
'td', [
205 'class' => $selected ?
'filehistory-selected' :
null,
206 'style' =>
'white-space: nowrap;'
209 # Don't link to unviewable files
210 $row .= Html::element(
'span', [
'class' =>
'history-deleted' ],
211 $lang->userTimeAndDate( $timestamp, $user )
214 $timeAndDate = $lang->userTimeAndDate( $timestamp, $user );
217 # Make a link to review the image
218 $url = $linkRenderer->makeKnownLink(
219 SpecialPage::getTitleFor(
'Revisiondelete' ),
223 'target' => $this->title->getPrefixedText(),
225 'token' => $user->getEditToken(
$img )
229 $url = htmlspecialchars( $timeAndDate );
231 $row .= Html::rawElement(
'span', [
'class' =>
'history-deleted' ], $url );
232 } elseif ( !
$file->exists() ) {
233 $row .= Html::element(
'span', [
'class' =>
'mw-file-missing' ],
234 $lang->userTimeAndDate( $timestamp, $user )
237 $url = $iscur ? $this->current->getUrl() : $this->current->getArchiveUrl(
$img );
238 $row .= Html::element(
'a', [
'href' => $url ],
239 $lang->userTimeAndDate( $timestamp, $user )
242 $row .= Html::closeElement(
'td' );
245 if ( $this->showThumb ) {
246 $row .= Html::rawElement(
'td', [],
252 $row .= Html::openElement(
'td' );
253 $row .= htmlspecialchars(
$file->getDimensionsString() );
254 $row .= $this->
msg(
'word-separator' )->escaped();
255 $row .= Html::element(
'span', [
'style' =>
'white-space: nowrap;' ],
256 $this->
msg(
'parentheses' )->sizeParams(
$file->getSize() )->text()
258 $row .= Html::closeElement(
'td' );
261 $row .= Html::openElement(
'td' );
263 if ( $uploader && $local ) {
264 $row .= Linker::userLink( $uploader->getId(), $uploader->getName() );
265 $row .= Html::rawElement(
'span', [
'style' =>
'white-space: nowrap;' ],
266 Linker::userToolLinks( $uploader->getId(), $uploader->getName() )
268 } elseif ( $uploader ) {
269 $row .= htmlspecialchars( $uploader->getName() );
271 $row .= Html::element(
'span', [
'class' =>
'history-deleted' ],
272 $this->
msg(
'rev-deleted-user' )->text()
275 $row .= Html::closeElement(
'td' );
279 $row .= Html::rawElement(
'td', [],
280 Html::element(
'span', [
'class' =>
'history-deleted' ],
281 $this->
msg(
'rev-deleted-comment' )->text()
285 $contLang = MediaWikiServices::getInstance()->getContentLanguage();
286 $row .= Html::rawElement(
'td', [
'dir' => $contLang->getDir() ], $formattedComment );
290 $this->getHookRunner()->onImagePageFileHistoryLine( $this,
$file, $row, $rowClass );
292 return Html::rawElement(
'tr', [
'class' => $rowClass ], $row ) .
"\n";
302 if ( !
$file->allowInlineDisplay() ||
309 $thumbnail =
$file->transform(
314 'isFilePageThumb' => $iscur
324 'filehist-thumbtext',
325 $lang->userTimeAndDate( $timestamp, $user ),
326 $lang->userDate( $timestamp, $user ),
327 $lang->userTime( $timestamp, $user )
329 return $thumbnail->toHtml( [
'alt' => $alt,
'file-link' =>
true ] );
wfTimestamp( $outputtype=TS_UNIX, $ts=0)
Get a timestamp string in one of various formats.
getContext()
Gets the context this Article is executed in.
getTitle()
Get the title object of the article.
getPage()
Get the WikiPage object of this instance.
The simplest way of implementing IContextSource is to hold a RequestContext as a member variable and ...
msg( $key,... $params)
Get a Message object with context set Parameters are the same as wfMessage()
setContext(IContextSource $context)
Builds the image revision log shown on image pages.
preventClickjacking( $enable=true)
getThumbForLine( $file, $iscur)
setPreventClickjacking(bool $enable)
imageHistoryLine( $iscur, $file, $formattedComment)
A class containing constants representing the names of configuration variables.
Parent class for all special pages.
if(PHP_SAPI !='cli-server') if(!isset( $_SERVER['SCRIPT_FILENAME'])) $file
Item class for a filearchive table row.