X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FFileDeleteForm.php;h=be11821c2125718b33bd86d04fc8181fae8ed47f;hb=44a950288a78c7cb89286271c068c2578865e0b3;hp=dad19524c3b39d2dc71586d72909883a0c885a46;hpb=1d0d879be013f8cc8bfd993608b1e740deef56b1;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/FileDeleteForm.php b/includes/FileDeleteForm.php index dad19524c3..be11821c21 100644 --- a/includes/FileDeleteForm.php +++ b/includes/FileDeleteForm.php @@ -102,6 +102,8 @@ class FileDeleteForm { public static function doDelete( &$title, &$file, &$oldimage, $reason, $suppress ) { global $wgUser; $article = null; + $status = Status::newFatal( 'error' ); + if( $oldimage ) { $status = $file->deleteOld( $oldimage, $reason, $suppress ); if( $status->ok ) { @@ -113,23 +115,33 @@ class FileDeleteForm { $log->addEntry( 'delete', $title, $logComment ); } } else { - $status = $file->delete( $reason, $suppress ); - if( $status->ok ) { - $id = $title->getArticleID( GAID_FOR_UPDATE ); - // Need to delete the associated article - $article = new Article( $title ); - $error = ''; - if( wfRunHooks('ArticleDelete', array(&$article, &$wgUser, &$reason, &$error)) ) { - if( $article->doDeleteArticle( $reason, $suppress, $id ) ) { + $id = $title->getArticleID( GAID_FOR_UPDATE ); + $article = new Article( $title ); + $error = ''; + $dbw = wfGetDB( DB_MASTER ); + try { + if( wfRunHooks( 'ArticleDelete', array( &$article, &$wgUser, &$reason, &$error ) ) ) { + // delete the associated article first + if( $article->doDeleteArticle( $reason, $suppress, $id, false ) ) { global $wgRequest; if( $wgRequest->getCheck( 'wpWatch' ) && $wgUser->isLoggedIn() ) { $article->doWatch(); } elseif( $title->userIsWatching() ) { $article->doUnwatch(); } - wfRunHooks('ArticleDeleteComplete', array(&$article, &$wgUser, $reason, $id)); + $status = $file->delete( $reason, $suppress ); + if( $status->ok ) { + $dbw->commit(); + wfRunHooks( 'ArticleDeleteComplete', array( &$article, &$wgUser, $reason, $id ) ); + } else { + $dbw->rollback(); + } } } + } catch ( MWException $e ) { + // rollback before returning to prevent UI from displaying incorrect "View or restore N deleted edits?" + $dbw->rollback(); + throw $e; } } if( $status->isGood() )