Call Linker methods statically
[lhc/web/wiklou.git] / includes / api / ApiFileRevert.php
index b330e2b..5a9ccc1 100644 (file)
@@ -49,25 +49,26 @@ class ApiFileRevert extends ApiBase {
        public function execute() {
                global $wgUser;
 
-               // First check permission to upload/revert
-               $this->checkPermissions( $wgUser );
-
                $this->params = $this->extractRequestParams();
+               // Extract the file and archiveName from the request parameters
                $this->validateParameters();
 
+               // Check whether we're allowed to revert this file
+               $this->checkPermissions( $wgUser );
+
                $sourceUrl = $this->file->getArchiveVirtualUrl( $this->archiveName );
                $status = $this->file->upload( $sourceUrl, $this->params['comment'], $this->params['comment'] );
 
                if ( $status->isGood() ) {
                        $result = array( 'result' => 'Success' );
                } else {
-                       $result = array( 
-                               'result' => 'Failure', 
+                       $result = array(
+                               'result' => 'Failure',
                                'errors' => $this->getResult()->convertStatusToArray( $status ),
                        );
                }
 
-               $this->getResult()->addValue( null, $this->getModuleName(), $result );  
+               $this->getResult()->addValue( null, $this->getModuleName(), $result );
 
        }
 
@@ -77,14 +78,13 @@ class ApiFileRevert extends ApiBase {
         * @param $user User The user to check.
         */
        protected function checkPermissions( $user ) {
-               $permission = $user->isAllowedAll( 'edit', 'upload' );
-
-               if ( $permission !== true ) {
-                       if ( !$user->isLoggedIn() ) {
-                               $this->dieUsageMsg( array( 'mustbeloggedin', 'upload' ) );
-                       } else {
-                               $this->dieUsageMsg( array( 'badaccess-groups' ) );
-                       }
+               $permissionErrors = array_merge(
+                       $this->file->getTitle()->getUserPermissionsErrors( 'edit' , $user ),
+                       $this->file->getTitle()->getUserPermissionsErrors( 'upload' , $user )
+               );
+
+               if ( $permissionErrors ) {
+                       $this->dieUsageMsg( $permissionErrors[0] );
                }
        }
 
@@ -101,14 +101,14 @@ class ApiFileRevert extends ApiBase {
                // Check if the file really exists
                $this->file = wfLocalFile( $title );
                if ( !$this->file->exists() ) {
-                       $this->dieUsageMsg( array( 'notanarticle' ) );
+                       $this->dieUsageMsg( 'notanarticle' );
                }
 
                // Check if the archivename is valid for this file
                $this->archiveName = $this->params['archivename'];
                $oldFile = RepoGroup::singleton()->getLocalRepo()->newFromArchiveName( $title, $this->archiveName );
                if ( !$oldFile->exists() ) {
-                       $this->dieUsageMsg( array( 'filerevert-badversion' ) );
+                       $this->dieUsageMsg( 'filerevert-badversion' );
                }
        }
 
@@ -131,7 +131,7 @@ class ApiFileRevert extends ApiBase {
                        ),
                        'archivename' => array(
                                ApiBase::PARAM_TYPE => 'string',
-                               ApiBase::PARAM_REQUIRED => true,                        
+                               ApiBase::PARAM_REQUIRED => true,
                        ),
                        'token' => null,
                );
@@ -176,7 +176,7 @@ class ApiFileRevert extends ApiBase {
                return '';
        }
 
-       protected function getExamples() {
+       public function getExamples() {
                return array(
                        'Revert Wiki.png to the version of 20110305152740:',
                        '    api.php?action=filerevert&filename=Wiki.png&comment=Revert&archivename=20110305152740!Wiki.png&token=+\\',