Merged filerepo-work branch:
[lhc/web/wiklou.git] / maintenance / importImages.php
index f44007a..a3a8f83 100644 (file)
@@ -18,83 +18,65 @@ if( count( $args ) > 1 ) {
        $dir = array_shift( $args );
 
        # Check the allowed extensions
-       while( $ext = array_shift( $args ) )
+       while( $ext = array_shift( $args ) ) {
                $exts[] = ltrim( $ext, '.' );
-               
+       }
+
        # Search the directory given and pull out suitable candidates
        $files = findFiles( $dir, $exts );
 
-       # Set up a fake user for this operation
-       if( isset( $options['user'] ) ) {
-               $wgUser = User::newFromName( $options['user'] );
-       } else {
-               $wgUser = User::newFromName( 'Image import script' );
-       }
-       if ( $wgUser->isAnon() ) {
-               $wgUser->addToDatabase();
-       }
-       
+       # Initialise the user for this operation
+       $user = isset( $options['user'] )
+               ? User::newFromName( $options['user'] )
+               : User::newFromName( 'Maintenance script' );
+       if( !$user instanceof User )
+               $user = User::newFromName( 'Maintenance script' );
+       $wgUser = $user;
+
        # Get the upload comment
        $comment = isset( $options['comment'] )
                ? $options['comment']
                : 'Importing image file';
-       
+
        # Get the license specifier
        $license = isset( $options['license'] ) ? $options['license'] : '';
-       
+
        # Batch "upload" operation
+       global $wgUploadDirectory;
        foreach( $files as $file ) {
-       
                $base = wfBaseName( $file );
-               
+
                # Validate a title
                $title = Title::makeTitleSafe( NS_IMAGE, $base );
-               if( is_object( $title ) ) {
-                       
-                       # Check existence
-                       $image = new Image( $title );
-                       if( !$image->exists() ) {
-                       
-                               global $wgUploadDirectory;
-                               
-                               # copy() doesn't create paths so if the hash path doesn't exist, we
-                               # have to create it
-                               makeHashPath( wfGetHashPath( $image->name ) );
-                               
-                               # Stash the file
-                               echo( "Saving {$base}..." );
-                               
-                               if( copy( $file, $image->getFullPath() ) ) {
-                               
-                                       echo( "importing..." );
-                               
-                                       # Grab the metadata
-                                       $image->loadFromFile();
-                                       
-                                       # Record the upload
-                                       if( $image->recordUpload( '', $comment, $license ) ) {
-                                       
-                                               # We're done!
-                                               echo( "done.\n" );
-                                               
-                                       } else {
-                                               echo( "failed.\n" );
-                                       }
-                               
-                               } else {
-                                       echo( "failed.\n" );
-                               }
-                       
-                       } else {
-                               echo( "{$base} could not be imported; a file with this name exists in the wiki\n" );
-                       }
-               
-               } else {
+               if( !is_object( $title ) ) {
                        echo( "{$base} could not be imported; a valid title cannot be produced\n" );
+                       continue;
+               }
+
+               # Check existence
+               $image = wfLocalFile( $title );
+               if( $image->exists() ) {
+                       echo( "{$base} could not be imported; a file with this name exists in the wiki\n" );
+                       continue;
+               }
+
+               # Stash the file
+               echo( "Saving {$base}..." );
+
+               $archive = $image->publish( $file );
+               if ( WikiError::isError( $archive ) ) {
+                       echo( "failed.\n" );
+                       continue;
+               }
+               echo( "importing..." );
+
+               if ( $image->recordUpload( $archive, $comment, $license ) ) {
+                       # We're done!
+                       echo( "done.\n" );
+               } else {
+                       echo( "failed.\n" );
                }
-               
        }
-       
 
 } else {
        showUsage();
@@ -103,8 +85,10 @@ if( count( $args ) > 1 ) {
 exit();
 
 function showUsage( $reason = false ) {
-       if( $reason )
+       if( $reason ) {
                echo( $reason . "\n" );
+       }
+
        echo <<<END
 USAGE: php importImages.php [options] <dir> <ext1> ...