diff options
Diffstat (limited to 'extensions/Nuke/Nuke_body.php')
-rw-r--r-- | extensions/Nuke/Nuke_body.php | 40 |
1 files changed, 28 insertions, 12 deletions
diff --git a/extensions/Nuke/Nuke_body.php b/extensions/Nuke/Nuke_body.php index 4fdc0809..fbe4f56e 100644 --- a/extensions/Nuke/Nuke_body.php +++ b/extensions/Nuke/Nuke_body.php @@ -7,14 +7,18 @@ class SpecialNuke extends SpecialPage { } public function execute( $par ) { - if( !$this->userCanExecute( $this->getUser() ) ) { + if ( !$this->userCanExecute( $this->getUser() ) ) { $this->displayRestrictionError(); - return; } - $this->setHeaders(); $this->outputHeader(); + if ( $this->getUser()->isBlocked() ) { + $block = $this->getUser()->getBlock(); + throw new UserBlockedError( $block ); + } + $this->checkReadOnly(); + $req = $this->getRequest(); $target = trim( $req->getText( 'target', $par ) ); @@ -161,15 +165,15 @@ class SpecialNuke extends SpecialPage { /** * @var $title Title */ - list( $title, $edits, $userName ) = $info; + list( $title, $userName ) = $info; $image = $title->getNamespace() == NS_IMAGE ? wfLocalFile( $title ) : false; $thumb = $image && $image->exists() ? $image->transform( array( 'width' => 120, 'height' => 120 ), 0 ) : false; - $changes = wfMsgExt( 'nchanges', 'parsemag', $this->getLanguage()->formatNum( $edits ) ); - $out->addHTML( '<li>' . - Xml::check( 'pages[]', true, + Xml::check( + 'pages[]', + true, array( 'value' => $title->getPrefixedDbKey() ) ) . ' ' . @@ -177,7 +181,12 @@ class SpecialNuke extends SpecialPage { Linker::linkKnown( $title ) . ' (' . ( $userName ? wfMsgExt( 'nuke-editby', 'parseinline', $userName ) . ', ' : '' ) . - Linker::linkKnown( $title, $changes, array(), array('action' => 'history' ) ) . + Linker::linkKnown( + $title, + wfMsg( 'nuke-viewchanges' ), + array(), + array( 'action' => 'history' ) + ) . ")</li>\n" ); } @@ -203,7 +212,6 @@ class SpecialNuke extends SpecialPage { 'rc_namespace', 'rc_title', 'rc_timestamp', - 'COUNT(*) AS edits' ); $where = array( "(rc_new = 1) OR (rc_log_type = 'upload' AND rc_log_action = 'upload')" ); @@ -218,6 +226,7 @@ class SpecialNuke extends SpecialPage { if ( !is_null( $pattern ) && trim( $pattern ) !== '' ) { $where[] = 'rc_title LIKE ' . $dbr->addQuotes( $pattern ); } + $group = implode( ', ', $what ); $result = $dbr->select( 'recentchanges', $what, @@ -225,7 +234,7 @@ class SpecialNuke extends SpecialPage { __METHOD__, array( 'ORDER BY' => 'rc_timestamp DESC', - 'GROUP BY' => 'rc_namespace, rc_title', + 'GROUP BY' => $group, 'LIMIT' => $limit ) ); @@ -235,8 +244,7 @@ class SpecialNuke extends SpecialPage { foreach ( $result as $row ) { $pages[] = array( Title::makeTitle( $row->rc_namespace, $row->rc_title ), - $row->edits, - $username == '' ? $row->rc_user_text : false + $username === '' ? $row->rc_user_text : false ); } @@ -255,6 +263,13 @@ class SpecialNuke extends SpecialPage { foreach( $pages as $page ) { $title = Title::newFromURL( $page ); $file = $title->getNamespace() == NS_FILE ? wfLocalFile( $title ) : false; + + $permission_errors = $title->getUserPermissionsErrors( 'delete', $this->getUser()); + + if ( count( $permission_errors )) { + throw new PermissionsError( 'delete', $permission_errors ); + } + if ( $file ) { $oldimage = null; // Must be passed by reference $ok = FileDeleteForm::doDelete( $title, $file, $oldimage, $reason, false )->isOK(); @@ -262,6 +277,7 @@ class SpecialNuke extends SpecialPage { $article = new Article( $title, 0 ); $ok = $article->doDeleteArticle( $reason ); } + if ( $ok ) { $res[] = wfMsgExt( 'nuke-deleted', array( 'parseinline' ), $title->getPrefixedText() ); } else { |