From 4e29f8262aedd3e6d5fe5aa0d740f4fd15c16a81 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 15 Aug 2006 05:42:37 +0000 Subject: [PATCH] Quickie script to dump out list of filenames of used images. Those not present in the local database will be taken from the shared database. List can be sorted and fed to tar to make archives. --- maintenance/dumpUploads.php | 110 ++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 maintenance/dumpUploads.php diff --git a/maintenance/dumpUploads.php b/maintenance/dumpUploads.php new file mode 100644 index 0000000000..e82515ef5f --- /dev/null +++ b/maintenance/dumpUploads.php @@ -0,0 +1,110 @@ +mAction = 'fetchUsed'; + $this->mBasePath = $IP; + $this->mShared = $wgUseSharedUploads; + + if( isset( $args['help'] ) ) { + $this->mAction = 'help'; + } + } + + function run() { + $this->{$this->mAction}(); + } + + function help() { + echo << list-o-files.txt + +Options: +--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 + +FIXME: options not implemented yet ;) + +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 -- 2.20.1