$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();
exit();
function showUsage( $reason = false ) {
- if( $reason )
+ if( $reason ) {
echo( $reason . "\n" );
+ }
+
echo <<<END
USAGE: php importImages.php [options] <dir> <ext1> ...