Merge "Removed obsolete "containsOldMagic" code"
[lhc/web/wiklou.git] / maintenance / importImages.php
index 7b340cc..ae70441 100644 (file)
@@ -4,7 +4,8 @@
  * using the web-based interface.
  *
  * "Smart import" additions:
- * - aim: preserve the essential metadata (user, description) when importing medias from an existing wiki
+ * - aim: preserve the essential metadata (user, description) when importing media
+ *   files from an existing wiki.
  * - process:
  *      - interface with the source wiki, don't use bare files only (see --source-wiki-url).
  *      - fetch metadata from source wiki for each file to import.
@@ -35,11 +36,11 @@ $optionsWithArgs = array(
        'extensions', 'comment', 'comment-file', 'comment-ext', 'summary', 'user',
        'license', 'sleep', 'limit', 'from', 'source-wiki-url', 'timestamp',
 );
-require_once( __DIR__ . '/commandLine.inc' );
-require_once( __DIR__ . '/importImages.inc' );
+require_once __DIR__ . '/commandLine.inc';
+require_once __DIR__ . '/importImages.inc';
 $processed = $added = $ignored = $skipped = $overwritten = $failed = 0;
 
-echo( "Import Images\n\n" );
+echo "Import Images\n\n";
 
 # Need a path
 if ( count( $args ) == 0 ) {
@@ -87,16 +88,24 @@ if ( isset( $options['check-userblock'] ) ) {
 }
 
 # Get --from
-$from = @$options['from'];
+wfSuppressWarnings();
+$from = $options['from'];
+wfRestoreWarnings();
 
 # Get sleep time.
-$sleep = @$options['sleep'];
+wfSuppressWarnings();
+$sleep = $options['sleep'];
+wfRestoreWarnings();
+
 if ( $sleep ) {
        $sleep = (int)$sleep;
 }
 
 # Get limit number
-$limit = @$options['limit'];
+wfSuppressWarnings();
+$limit = $options['limit'];
+wfRestoreWarnings();
+
 if ( $limit ) {
        $limit = (int)$limit;
 }
@@ -104,7 +113,7 @@ if ( $limit ) {
 $timestamp = isset( $options['timestamp'] ) ? $options['timestamp'] : false;
 
 # Get the upload comment. Provide a default one in case there's no comment given.
-$comment = 'Importing image file';
+$comment = 'Importing file';
 
 if ( isset( $options['comment-file'] ) ) {
        $comment = file_get_contents( $options['comment-file'] );
@@ -132,7 +141,7 @@ if ( $count > 0 ) {
                # Validate a title
                $title = Title::makeTitleSafe( NS_FILE, $base );
                if ( !is_object( $title ) ) {
-                       echo( "{$base} could not be imported; a valid title cannot be produced\n" );
+                       echo "{$base} could not be imported; a valid title cannot be produced\n";
                        continue;
                }
 
@@ -148,7 +157,7 @@ if ( $count > 0 ) {
                if ( $checkUserBlock && ( ( $processed % $checkUserBlock ) == 0 ) ) {
                        $user->clearInstanceCache( 'name' ); // reload from DB!
                        if ( $user->isBlocked() ) {
-                               echo( $user->getName() . " was blocked! Aborting.\n" );
+                               echo $user->getName() . " was blocked! Aborting.\n";
                                break;
                        }
                }
@@ -157,28 +166,29 @@ if ( $count > 0 ) {
                $image = wfLocalFile( $title );
                if ( $image->exists() ) {
                        if ( isset( $options['overwrite'] ) ) {
-                               echo( "{$base} exists, overwriting..." );
+                               echo "{$base} exists, overwriting...";
                                $svar = 'overwritten';
                        } else {
-                               echo( "{$base} exists, skipping\n" );
+                               echo "{$base} exists, skipping\n";
                                $skipped++;
                                continue;
                        }
                } else {
                        if ( isset( $options['skip-dupes'] ) ) {
                                $repo = $image->getRepo();
-                               $sha1 = File::sha1Base36( $file ); # XXX: we end up calculating this again when actually uploading. that sucks.
+                               # XXX: we end up calculating this again when actually uploading. that sucks.
+                               $sha1 = FSFile::getSha1Base36FromPath( $file );
 
                                $dupes = $repo->findBySha1( $sha1 );
 
                                if ( $dupes ) {
-                                       echo( "{$base} already exists as " . $dupes[0]->getName() . ", skipping\n" );
+                                       echo "{$base} already exists as " . $dupes[0]->getName() . ", skipping\n";
                                        $skipped++;
                                        continue;
                                }
                        }
 
-                       echo( "Importing {$base}..." );
+                       echo "Importing {$base}...";
                        $svar = 'added';
                }
 
@@ -199,7 +209,7 @@ if ( $count > 0 ) {
                                $wgUser = User::newFromName( $real_user );
                                if ( $wgUser === false ) {
                                        # user does not exist in target wiki
-                                       echo ( "failed: user '$real_user' does not exist in target wiki." );
+                                       echo "failed: user '$real_user' does not exist in target wiki.";
                                        continue;
                                }
                        }
@@ -210,11 +220,12 @@ if ( $count > 0 ) {
                        if ( $commentExt ) {
                                $f = findAuxFile( $file, $commentExt );
                                if ( !$f ) {
-                                       echo( " No comment file with extension {$commentExt} found for {$file}, using default comment. " );
+                                       echo " No comment file with extension {$commentExt} found "
+                                               . "for {$file}, using default comment. ";
                                } else {
                                        $commentText = file_get_contents( $f );
                                        if ( !$commentText ) {
-                                               echo( " Failed to load comment file {$f}, using default comment. " );
+                                               echo " Failed to load comment file {$f}, using default comment. ";
                                        }
                                }
                        }
@@ -226,37 +237,43 @@ if ( $count > 0 ) {
 
                # Import the file
                if ( isset( $options['dry'] ) ) {
-                       echo( " publishing {$file} by '" . $wgUser->getName() . "', comment '$commentText'... " );
+                       echo " publishing {$file} by '" . $wgUser->getName() . "', comment '$commentText'... ";
                } else {
                        $props = FSFile::getPropsFromPath( $file );
                        $flags = 0;
-                       $options = array();
+                       $publishOptions = array();
                        $handler = MediaHandler::getHandler( $props['mime'] );
                        if ( $handler ) {
-                               $options['headers'] = $handler->getStreamHeaders( $props['metadata'] );
+                               $publishOptions['headers'] = $handler->getStreamHeaders( $props['metadata'] );
                        } else {
-                               $options['headers'] = array();
+                               $publishOptions['headers'] = array();
                        }
-                       $archive = $image->publish( $file, $flags, $options );
+                       $archive = $image->publish( $file, $flags, $publishOptions );
                        if ( !$archive->isGood() ) {
-                               echo( "failed. (" .
+                               echo "failed. (" .
                                        $archive->getWikiText() .
-                                       ")\n" );
+                                       ")\n";
                                $failed++;
                                continue;
                        }
                }
 
                $commentText = SpecialUpload::getInitialPageText( $commentText, $license );
-               if ( !$summary ) {
+               if ( !isset( $options['summary'] ) ) {
                        $summary = $commentText;
                }
 
                if ( isset( $options['dry'] ) ) {
-                       echo( "done.\n" );
-               } elseif ( $image->recordUpload2( $archive->value, $summary, $commentText, $props, $timestamp ) ) {
+                       echo "done.\n";
+               } elseif ( $image->recordUpload2(
+                       $archive->value,
+                       $summary,
+                       $commentText,
+                       $props,
+                       $timestamp
+               ) ) {
                        # We're done!
-                       echo( "done.\n" );
+                       echo "done.\n";
 
                        $doProtect = false;
 
@@ -273,27 +290,26 @@ if ( $count > 0 ) {
                        }
 
                        if ( $doProtect ) {
-                                       # Protect the file
-                                       echo "\nWaiting for slaves...\n";
-                                       // Wait for slaves.
-                                       sleep( 2.0 ); # Why this sleep?
-                                       wfWaitForSlaves();
-
-                                       echo( "\nSetting image restrictions ... " );
-
-                                       $cascade = false;
-                                       $restrictions = array();
-                                       foreach ( $title->getRestrictionTypes() as $type ) {
-                                               $restrictions[$type] = $protectLevel;
-                                       }
+                               # Protect the file
+                               echo "\nWaiting for slaves...\n";
+                               // Wait for slaves.
+                               sleep( 2.0 ); # Why this sleep?
+                               wfWaitForSlaves();
+
+                               echo "\nSetting image restrictions ... ";
+
+                               $cascade = false;
+                               $restrictions = array();
+                               foreach ( $title->getRestrictionTypes() as $type ) {
+                                       $restrictions[$type] = $protectLevel;
+                               }
 
-                                       $page = WikiPage::factory( $title );
-                                       $status = $page->doUpdateRestrictions( $restrictions, array(), $cascade, '', $user );
-                                       echo( ( $status->isOK() ? 'done' : 'failed' ) . "\n" );
+                               $page = WikiPage::factory( $title );
+                               $status = $page->doUpdateRestrictions( $restrictions, array(), $cascade, '', $user );
+                               echo ( $status->isOK() ? 'done' : 'failed' ) . "\n";
                        }
-
                } else {
-                       echo( "failed. (at recordUpload stage)\n" );
+                       echo "failed. (at recordUpload stage)\n";
                        $svar = 'failed';
                }
 
@@ -310,24 +326,31 @@ if ( $count > 0 ) {
        }
 
        # Print out some statistics
-       echo( "\n" );
-       foreach ( array( 'count' => 'Found', 'limit' => 'Limit', 'ignored' => 'Ignored',
-               'added' => 'Added', 'skipped' => 'Skipped', 'overwritten' => 'Overwritten',
-               'failed' => 'Failed' ) as $var => $desc ) {
+       echo "\n";
+       foreach (
+               array(
+                       'count' => 'Found',
+                       'limit' => 'Limit',
+                       'ignored' => 'Ignored',
+                       'added' => 'Added',
+                       'skipped' => 'Skipped',
+                       'overwritten' => 'Overwritten',
+                       'failed' => 'Failed'
+               ) as $var => $desc
+       ) {
                if ( $$var > 0 ) {
-                       echo( "{$desc}: {$$var}\n" );
+                       echo "{$desc}: {$$var}\n";
                }
        }
-
 } else {
-       echo( "No suitable files could be found for import.\n" );
+       echo "No suitable files could be found for import.\n";
 }
 
 exit( 0 );
 
 function showUsage( $reason = false ) {
        if ( $reason ) {
-               echo( $reason . "\n" );
+               echo $reason . "\n";
        }
 
        echo <<<TEXT
@@ -337,28 +360,37 @@ USAGE: php importImages.php [options] <dir>
 <dir> : Path to the directory containing images to be imported
 
 Options:
---extensions=<exts>     Comma-separated list of allowable extensions, defaults to \$wgFileExtensions
---overwrite             Overwrite existing images with the same name (default is to skip them)
---limit=<num>           Limit the number of images to process. Ignored or skipped images are not counted.
---from=<name>           Ignore all files until the one with the given name. Useful for resuming
-                        aborted imports. <name> should be the file's canonical database form.
---skip-dupes            Skip images that were already uploaded under a different name (check SHA1)
---search-recursively    Search recursively for files in subdirectories
+--extensions=<exts>     Comma-separated list of allowable extensions, defaults
+                        to \$wgFileExtensions.
+--overwrite             Overwrite existing images with the same name (default
+                        is to skip them).
+--limit=<num>           Limit the number of images to process. Ignored or
+                        skipped images are not counted.
+--from=<name>           Ignore all files until the one with the given name.
+                        Useful for resuming aborted imports. <name> should be
+                        the file's canonical database form.
+--skip-dupes            Skip images that were already uploaded under a different
+                        name (check SHA1).
+--search-recursively    Search recursively for files in subdirectories.
 --sleep=<sec>           Sleep between files. Useful mostly for debugging.
---user=<username>       Set username of uploader, default 'Maintenance script'
+--user=<username>       Set username of uploader, default 'Maintenance script'.
 --check-userblock       Check if the user got blocked during import.
---comment=<text>        Set file description, default 'Importing image file'.
+--comment=<text>        Set file description, default 'Importing file'.
 --comment-file=<file>   Set description to the content of <file>.
---comment-ext=<ext>     Causes the description for each file to be loaded from a file with the same name
-                        but the extension <ext>. If a global description is also given, it is appended.
---license=<code>        Use an optional license template
---dry                   Dry run, don't import anything
---protect=<protect>     Specify the protect value (autoconfirmed,sysop)
---summary=<summary>     Upload summary, description will be used if not provided
---timestamp=<timestamp> Override upload time/date, all MediaWiki timestamp formats are accepted
---unprotect             Unprotects all uploaded images
---source-wiki-url       If specified, take User and Comment data for each imported file from this URL.
-                        For example, --source-wiki-url="http://en.wikipedia.org/"
+--comment-ext=<ext>     Causes the description for each file to be loaded from a
+                        file with the same name, but the extension <ext>. If a
+                        global description is also given, it is appended.
+--license=<code>        Use an optional license template.
+--dry                   Dry run, don't import anything.
+--protect=<protect>     Specify the protect value (autoconfirmed,sysop).
+--summary=<summary>     Upload summary, description will be used if not
+                        provided.
+--timestamp=<timestamp> Override upload time/date, all MediaWiki timestamp
+                        formats are accepted.
+--unprotect             Unprotects all uploaded images.
+--source-wiki-url       If specified, take User and Comment data for each
+                        imported file from this URL. For example,
+                        --source-wiki-url="http://en.wikipedia.org/."
 
 TEXT;
        exit( 1 );