64 $permissionErrors = $this->title->getUserPermissionsErrors(
'delete', $wgUser );
65 if ( count( $permissionErrors ) ) {
74 throw new ErrorPageError(
'filedelete-maintenance-title',
'filedelete-maintenance' );
79 $this->oldimage =
$wgRequest->getText(
'oldimage',
false );
81 # Flag to hide all contents of the archived revisions
82 $permissionManager = MediaWikiServices::getInstance()->getPermissionManager();
83 $suppress =
$wgRequest->getCheck(
'wpSuppress' ) &&
84 $permissionManager->userHasRight( $wgUser,
'suppressrevision' );
86 if ( $this->oldimage ) {
93 if ( !self::haveDeletableFile( $this->file, $this->oldfile, $this->oldimage ) ) {
95 $wgOut->addReturnTo( $this->title );
100 if (
$wgRequest->wasPosted() && $wgUser->matchEditToken( $token, $this->oldimage ) ) {
101 $deleteReasonList =
$wgRequest->getText(
'wpDeleteReasonList' );
102 $deleteReason =
$wgRequest->getText(
'wpReason' );
104 if ( $deleteReasonList ==
'other' ) {
105 $reason = $deleteReason;
106 } elseif ( $deleteReason !=
'' ) {
108 $reason = $deleteReasonList .
wfMessage(
'colon-separator' )
109 ->inContentLanguage()->text() . $deleteReason;
111 $reason = $deleteReasonList;
125 $wgOut->wrapWikiTextAsInterface(
127 $status->getWikiText(
'filedeleteerror-short',
'filedeleteerror-long' )
160 $suppress,
User $user =
null, $tags = []
162 if ( $user ===
null ) {
173 if ( trim( $reason ) !=
'' ) {
174 $logComment .=
wfMessage(
'colon-separator' )
175 ->inContentLanguage()->text() . $reason;
178 $logtype = $suppress ?
'suppress' :
'delete';
181 $logEntry->setPerformer( $user );
182 $logEntry->setTarget(
$title );
183 $logEntry->setComment( $logComment );
184 $logEntry->addTags( $tags );
185 $logid = $logEntry->insert();
186 $logEntry->publish( $logid );
196 $dbw->startAtomic( __METHOD__ );
199 $deleteStatus = $page->doDeleteArticleReal( $reason, $suppress, 0,
false, $error,
203 if ( $deleteStatus->isOK() ) {
206 if ( $deleteStatus->value ===
null ) {
210 $logtype = $suppress ?
'suppress' :
'delete';
212 $logEntry->setPerformer( $user );
213 $logEntry->setTarget( clone
$title );
214 $logEntry->setComment( $reason );
215 $logEntry->addTags( $tags );
216 $logid = $logEntry->insert();
217 $dbw->onTransactionPreCommitOrIdle(
218 function () use ( $logEntry, $logid ) {
219 $logEntry->publish( $logid );
225 $status->value = $deleteStatus->value;
227 $dbw->endAtomic( __METHOD__ );
230 $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
231 $lbFactory->rollbackMasterChanges( __METHOD__ );
234 $dbw->endAtomic( __METHOD__ );
250 $permissionManager = MediaWikiServices::getInstance()->getPermissionManager();
252 $wgOut->addModules(
'mediawiki.action.delete.file' );
254 $checkWatch = $wgUser->getBoolOption(
'watchdeletion' ) || $wgUser->isWatched( $this->title );
260 $fields[] =
new OOUI\LabelWidget( [
'label' =>
new OOUI\HtmlSnippet(
265 $wgOut->msg(
'filedelete-reason-dropdown' )->inContentLanguage()->text(),
266 [
'other' =>
$wgOut->msg(
'filedelete-reason-otherlist' )->inContentLanguage()->text() ]
270 $fields[] =
new OOUI\FieldLayout(
271 new OOUI\DropdownInputWidget( [
272 'name' =>
'wpDeleteReasonList',
273 'inputId' =>
'wpDeleteReasonList',
277 'options' => $options,
280 'label' =>
$wgOut->msg(
'filedelete-comment' )->text(),
288 $fields[] =
new OOUI\FieldLayout(
289 new OOUI\TextInputWidget( [
290 'name' =>
'wpReason',
291 'inputId' =>
'wpReason',
299 'label' =>
$wgOut->msg(
'filedelete-otherreason' )->text(),
304 if ( $permissionManager->userHasRight( $wgUser,
'suppressrevision' ) ) {
305 $fields[] =
new OOUI\FieldLayout(
306 new OOUI\CheckboxInputWidget( [
307 'name' =>
'wpSuppress',
308 'inputId' =>
'wpSuppress',
313 'label' =>
$wgOut->msg(
'revdelete-suppress' )->text(),
320 if ( $wgUser->isLoggedIn() ) {
321 $fields[] =
new OOUI\FieldLayout(
322 new OOUI\CheckboxInputWidget( [
324 'inputId' =>
'wpWatch',
326 'selected' => $checkWatch,
329 'label' =>
$wgOut->msg(
'watchthis' )->text(),
336 $fields[] =
new OOUI\FieldLayout(
337 new OOUI\ButtonInputWidget( [
338 'name' =>
'mw-filedelete-submit',
339 'inputId' =>
'mw-filedelete-submit',
341 'value' =>
$wgOut->msg(
'filedelete-submit' )->text(),
342 'label' =>
$wgOut->msg(
'filedelete-submit' )->text(),
343 'flags' => [
'primary',
'destructive' ],
351 $fieldset =
new OOUI\FieldsetLayout( [
352 'label' =>
$wgOut->msg(
'filedelete-legend' )->text(),
356 $form =
new OOUI\FormLayout( [
359 'id' =>
'mw-img-deleteconfirm',
361 $form->appendContent(
363 new OOUI\HtmlSnippet(
364 Html::hidden(
'wpEditToken', $wgUser->getEditToken( $this->oldimage ) )
369 new OOUI\PanelLayout( [
370 'classes' => [
'deletepage-wrapper' ],
378 if ( $permissionManager->userHasRight( $wgUser,
'editinterface' ) ) {
379 $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
380 $link = $linkRenderer->makeKnownLink(
381 $wgOut->msg(
'filedelete-reason-dropdown' )->inContentLanguage()->getTitle(),
382 wfMessage(
'filedelete-edit-reasonlist' )->text(),
384 [
'action' =>
'edit' ]
386 $wgOut->addHTML(
'<p class="mw-filedelete-editreasons">' . $link .
'</p>' );
395 $deleteLogPage =
new LogPage(
'delete' );
396 $wgOut->addHTML(
'<h2>' . $deleteLogPage->getName()->escaped() .
"</h2>\n" );
410 if ( $this->oldimage ) {
412 # 'filedelete-intro-old', 'filedelete-nofile-old', 'filedelete-success-old'
432 $wgOut->setPageTitle(
wfMessage(
'filedelete', $this->title->getText() ) );
433 $wgOut->setRobotPolicy(
'noindex,nofollow' );
434 $wgOut->addBacklinkSubtitle( $this->title );
472 $q[
'action'] =
'delete';
474 if ( $this->oldimage ) {
478 return $this->title->getLocalURL( $q );
487 return $this->oldfile->getTimestamp();