diff options
author | Pierre Schmitz <pierre@archlinux.de> | 2006-10-11 20:21:25 +0000 |
---|---|---|
committer | Pierre Schmitz <pierre@archlinux.de> | 2006-10-11 20:21:25 +0000 |
commit | d81f562b712f2387fa02290bf2ca86392ab356f2 (patch) | |
tree | d666cdefbe6ac320827a2c6cb473581b46e22c4c /maintenance/dumpUploads.php | |
parent | 183851b06bd6c52f3cae5375f433da720d410447 (diff) |
Aktualisierung auf Version 1.8.1
Diffstat (limited to 'maintenance/dumpUploads.php')
-rw-r--r-- | maintenance/dumpUploads.php | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/maintenance/dumpUploads.php b/maintenance/dumpUploads.php new file mode 100644 index 00000000..8ba4e87b --- /dev/null +++ b/maintenance/dumpUploads.php @@ -0,0 +1,116 @@ +<?php + +require_once 'commandLine.inc'; + +class UploadDumper { + + function __construct( $args ) { + global $IP, $wgUseSharedUploads; + $this->mAction = 'fetchUsed'; + $this->mBasePath = $IP; + $this->mShared = $wgUseSharedUploads; + + if( isset( $args['help'] ) ) { + $this->mAction = 'help'; + } + + if( isset( $args['base'] ) ) { + $this->mBasePath = $args['base']; + } + } + + function run() { + $this->{$this->mAction}(); + } + + function help() { + echo <<<END +Generates list of uploaded files which can be fed to tar or similar. +By default, outputs relative paths against the parent directory of +\$wgUploadDirectory. + +Usage: +php dumpUploads.php [options] > list-o-files.txt + +Options: +--base=<path> Set base relative path instead of wiki include root + +FIXME: other options not implemented yet ;) + +--local List all local files, used or not. No shared files included. +--used Skip local images that are not used +--shared Include images used from shared repository + +END; + } + + /** + * Fetch a list of all or used images from a particular image source. + * @param string $table + * @param string $directory Base directory where files are located + * @param bool $shared true to pass shared-dir settings to hash func + */ + function fetchUsed() { + $dbr = wfGetDB( DB_SLAVE ); + $image = $dbr->tableName( 'image' ); + $imagelinks = $dbr->tableName( 'imagelinks' ); + + $sql = "SELECT DISTINCT il_to, img_name + FROM $imagelinks + LEFT OUTER JOIN $image + ON il_to=img_name"; + $result = $dbr->query( $sql ); + + while( $row = $dbr->fetchObject( $result ) ) { + if( is_null( $row->img_name ) ) { + if( $this->mShared ) { + $this->outputShared( $row->il_to ); + } + } else { + $this->outputLocal( $row->il_to ); + } + } + $dbr->freeResult( $result ); + } + + function outputLocal( $name ) { + global $wgUploadDirectory; + return $this->outputItem( $name, $wgUploadDirectory, false ); + } + + function outputShared( $name ) { + global $wgSharedUploadDirectory; + return $this->outputItem( $name, $wgSharedUploadDirectory, true ); + } + + function outputItem( $name, $directory, $shared ) { + $filename = $directory . + wfGetHashPath( $name, $shared ) . + $name; + $rel = $this->relativePath( $filename, $this->mBasePath ); + echo "$rel\n"; + } + + /** + * Return a relative path to $path from the base directory $base + * For instance relativePath( '/foo/bar/baz', '/foo' ) should return + * 'bar/baz'. + */ + function relativePath( $path, $base) { + $path = explode( DIRECTORY_SEPARATOR, $path ); + $base = explode( DIRECTORY_SEPARATOR, $base ); + while( count( $base ) && $path[0] == $base[0] ) { + array_shift( $path ); + array_shift( $base ); + } + foreach( $base as $prefix ) { + array_unshift( $path, '..' ); + } + return implode( DIRECTORY_SEPARATOR, $path ); + } +} + +$dumper = new UploadDumper( $options ); +$dumper->run(); + +?>
\ No newline at end of file |