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 ) {
87 $this->oldfile = RepoGroup::singleton()->getLocalRepo()->newFromArchiveName(
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;
123 if ( !$status->isGood() ) {
125 $wgOut->wrapWikiTextAsInterface(
127 $status->getWikiText(
'filedeleteerror-short',
'filedeleteerror-long' )
130 if ( $status->isOK() ) {
135 $wgOut->addReturnTo( $this->oldimage ? $this->title : Title::newMainPage() );
160 $suppress,
User $user =
null, $tags = []
162 if ( $user ===
null ) {
170 if ( $status->isOK() ) {
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 );
188 $status->value = $logid;
191 $status = Status::newFatal(
'cannotdelete',
194 $page = WikiPage::factory(
$title );
196 $dbw->startAtomic( __METHOD__ );
199 $deleteStatus = $page->doDeleteArticleReal( $reason, $suppress, 0,
false, $error,
203 if ( $deleteStatus->isOK() ) {
204 $status =
$file->
delete( $reason, $suppress, $user );
205 if ( $status->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 );
223 $status->value = $logid;
225 $status->value = $deleteStatus->value;
227 $dbw->endAtomic( __METHOD__ );
230 $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
231 $lbFactory->rollbackMasterChanges( __METHOD__ );
234 $dbw->endAtomic( __METHOD__ );
238 if ( $status->isOK() ) {
239 Hooks::run(
'FileDeleteComplete', [ &
$file, &
$oldimage, &$page, &$user, &$reason ] );
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(
264 $options = Xml::listDropDownOptions(
265 $wgOut->msg(
'filedelete-reason-dropdown' )->inContentLanguage()->text(),
266 [
'other' =>
$wgOut->msg(
'filedelete-reason-otherlist' )->inContentLanguage()->text() ]
268 $options = Xml::listDropDownOptionsOoui( $options );
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',
293 'maxLength' => CommentStore::COMMENT_CHARACTER_LIMIT,
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'
416 $wgLang->date( $this->getTimestamp(),
true ),
417 $wgLang->time( $this->getTimestamp(),
true ),
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();
$wgUploadMaintenance
To disable file delete/restore temporarily.
wfReadOnly()
Check whether the wiki is in read-only mode.
wfGetDB( $db, $groups=[], $wiki=false)
Get a Database object.
wfExpandUrl( $url, $defaultProto=PROTO_CURRENT)
Expand a potentially local URL to a fully-qualified URL.
wfMessage( $key,... $params)
This is the function for getting translated interface messages.
wfEscapeWikiText( $text)
Escapes the given text so that it may be output using addWikiText() without any linking,...
if(! $wgDBerrorLogTZ) $wgRequest
An error page which can definitely be safely rendered using the OutputPage.
isLocal()
Returns true if the file comes from the local file repository.
getTitle()
Return the associated title object.
Class to represent a local file in the wiki's own database.
exists()
canRender inherited
delete( $reason, $suppress=false, $user=null)
Delete all versions of the file.
deleteOld( $archiveName, $reason, $suppress=false, $user=null)
Delete an old version of the file.
static showLogExtract(&$out, $types=[], $page='', $user='', $param=[])
Show log extract.
Class to simplify the use of log pages.
Class for creating new log entries and inserting them into the database.
Show an error when a user tries to do something they do not have the necessary permissions for.
Show an error when the wiki is locked/read-only and the user tries to do something that requires writ...
Represents a title within MediaWiki.
getPrefixedText()
Get the prefixed title with spaces.
The User object encapsulates all of the user-specific settings (user_id, name, rights,...
static doWatchOrUnwatch( $watch, Title $title, User $user)
Watch or unwatch a page.