diff --git a/lib/batch.lib.php b/lib/batch.lib.php index 09d9e08b..8e560d8d 100644 --- a/lib/batch.lib.php +++ b/lib/batch.lib.php @@ -39,12 +39,17 @@ function get_song_files($media_ids) $media = new Song($element); } if ($media->enabled) { - $total_size += sprintf("%.2f",($media->size/1048576)); - array_push($media_files, $media->file); - } + $total_size += sprintf("%.2f",($media->size/1048576)); + $media->format(); + $dirname = $media->f_album_full; + if (!array_key_exists($dirname, $media_files)) { + $media_files[$dirname] = array(); + } + array_push($media_files[$dirname], $media->file); } + } - return array($media_files,$total_size); + return array($media_files, $total_size); } //get_song_files /** @@ -86,7 +91,9 @@ function send_zip( $name, $song_files ) ); $arc->set_options( $options ); - $arc->add_files( $song_files ); + foreach ($song_files as $dir => $files) { + $arc->add_files( $files, $dir ); + } if (count($arc->error)) { debug_event('archive',"Error: unable to add songs",'3'); diff --git a/modules/archive/archive.lib.php b/modules/archive/archive.lib.php index 97772838..c3d7bf64 100644 --- a/modules/archive/archive.lib.php +++ b/modules/archive/archive.lib.php @@ -170,11 +170,21 @@ class archive { unset ($this->exclude, $this->storeonly); } - function add_files($list) + function add_files($list, $prepend = '') { + // Change the preprend directory temporary + if (!empty($prepend)) { + $oldprepend = $this->options['prepend']; + $this->set_options(array('prepend' => $prepend)); + } $temp = $this->list_files($list); foreach ($temp as $current) $this->files[] = $current; + + // Restore previous prepend directory + if (isset($oldprepend)) { + $this->set_options(array('prepend' => $oldprepend)); + } } function exclude_files($list)