summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--admin/export.php56
-rw-r--r--lib/class/catalog.class.php77
-rw-r--r--lib/ui.lib.php2
-rw-r--r--templates/show_export.inc.php55
-rw-r--r--templates/sidebar_admin.inc.php1
5 files changed, 158 insertions, 33 deletions
diff --git a/admin/export.php b/admin/export.php
new file mode 100644
index 00000000..f5301643
--- /dev/null
+++ b/admin/export.php
@@ -0,0 +1,56 @@
+<?php
+/*
+
+ Copyright (c) 2001 - 2007 Ampache.org
+ All rights reserved.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License v2
+ as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+require_once '../lib/init.php';
+
+if (!Access::check('interface','100')) {
+ access_denied();
+ exit;
+}
+
+/* Switch on Action */
+switch ($_REQUEST['action']) {
+ case 'export':
+
+ // This may take a while
+ set_time_limit(0);
+
+ $catalog = new Catalog($_REQUEST['export_catalog']);
+
+ header("Content-Transfer-Encoding: binary");
+ header("Cache-control: public");
+
+ switch($_REQUEST['export_format']) {
+ case 'itunes':
+ header("Content-Type: application/itunes+xml; charset=utf-8");
+ header("Content-Disposition: attachment; filename=\"itunes.xml\"");
+ $catalog->export('itunes');
+ break;
+ }
+
+ break;
+ default:
+ show_header();
+ require_once Config::get('prefix') . '/templates/show_export.inc.php';
+ show_footer();
+ break;
+} // end switch on action
+?>
diff --git a/lib/class/catalog.class.php b/lib/class/catalog.class.php
index 3f854b11..0320c1d6 100644
--- a/lib/class/catalog.class.php
+++ b/lib/class/catalog.class.php
@@ -247,8 +247,8 @@ class Catalog {
if (!$key) { $key = ' '; } //FIXME
// Ok we're good to go ahead and insert this record
- $sql = "INSERT INTO `catalog` (`name`,`path`,`catalog_type`,`rename_pattern`,`sort_pattern`,`gather_types`,`key`) " .
- "VALUES ('$name','$path','$catalog_type','$rename_pattern','$sort_pattern','$gather_types','$key')";
+ $sql = "INSERT INTO `catalog` (`name`,`path`,`add_path`,`catalog_type`,`rename_pattern`,`sort_pattern`,`gather_types`,`key`) " .
+ "VALUES ('$name','$path','','$catalog_type','$rename_pattern','$sort_pattern','$gather_types','$key')";
$db_results = Dba::query($sql);
$insert_id = Dba::insert_id();
@@ -2367,39 +2367,52 @@ class Catalog {
@discussion it exports all songs in the database to the given export type.
*/
function export($type){
-
- if ($type=="itunes"){
-
- $sql = "SELECT id FROM song ORDER BY album";
- $db_results = mysql_query($sql, dbh());
- while ($results = mysql_fetch_array($db_results)) {
- $song = new Song($results['id']);
- $song->format_song();
-
- $xml = array();
- $xml['key']= $results['id'];
- $xml['dict']['Track ID']= $results['id'];
- $xml['dict']['Name'] = utf8_encode($song->title);
- $xml['dict']['Artist'] = utf8_encode($song->f_artist_full);
- $xml['dict']['Album'] = utf8_encode($song->f_album_full);
- $xml['dict']['Genre'] = $song->f_genre;
- $xml['dict']['Total Time'] = $song->time;
- $xml['dict']['Track Number'] = $song->track;
- $xml['dict']['Year'] = $song->year;
- $xml['dict']['Date Added'] = date("Y-m-d\TH:i:s\Z",$song->addition_time);
- $xml['dict']['Bit Rate'] = intval($song->bitrate/1000);
- $xml['dict']['Sample Rate'] = $song->rate;
- $xml['dict']['Play Count'] = $song->played;
- $xml['dict']['Track Type'] = "URL";
- $xml['dict']['Location'] = $song->get_url();
-
- $result .= xml_from_array($xml,1,'itunes');
+ // Select all songs in catalog
+ if($this->id) {
+ $sql = "SELECT id FROM song WHERE catalog = '$this->id' ORDER BY album,track";
+ } else {
+ $sql = "SELECT id FROM song ORDER BY album,track";
}
- return $result;
+ $db_results = Dba::query($sql);
+
+ if ($type=="itunes"){
+
+ echo xml_get_header('itunes');
+
+ while ($results = Dba::fetch_assoc($db_results)) {
+ $song = new Song($results['id']);
+ $song->format();
+
+ $xml = array();
+ $xml['key']= $results['id'];
+ $xml['dict']['Track ID']= intval($results['id']);
+ $xml['dict']['Name'] = $song->title;
+ $xml['dict']['Artist'] = $song->f_artist_full;
+ $xml['dict']['Album'] = $song->f_album_full;
+ $xml['dict']['Genre'] = $song->f_genre;
+ $xml['dict']['Total Time'] = intval($song->time) * 1000; // iTunes uses milliseconds
+ $xml['dict']['Track Number'] = intval($song->track);
+ $xml['dict']['Year'] = intval($song->year);
+ $xml['dict']['Date Added'] = date("Y-m-d\TH:i:s\Z",$song->addition_time);
+ $xml['dict']['Bit Rate'] = intval($song->bitrate/1000);
+ $xml['dict']['Sample Rate'] = intval($song->rate);
+ $xml['dict']['Play Count'] = intval($song->played);
+ $xml['dict']['Track Type'] = "URL";
+ $xml['dict']['Location'] = $song->get_url();
+
+ echo xml_from_array($xml,1,'itunes');
+
+ // flush output buffer
+ ob_flush();
+ flush();
+
+ } // while result
+
+ echo xml_get_footer('itunes');
+
+ } // itunes
- }
-
} // export
} // end of catalog class
diff --git a/lib/ui.lib.php b/lib/ui.lib.php
index 8898298c..691e8f7d 100644
--- a/lib/ui.lib.php
+++ b/lib/ui.lib.php
@@ -899,7 +899,7 @@ function xml_from_array($array,$callback=0,$type='') {
else {
if ($key == "key"){
$string .= "\t\t<$key>$value</$key>\n";
- } elseif (is_numeric($value)) {
+ } elseif (is_int($value)) {
$string .= "\t\t\t<key>$key</key><integer>$value</integer>\n";
} elseif ($key == "Date Added") {
$string .= "\t\t\t<key>$key</key><date>$value</date>\n";
diff --git a/templates/show_export.inc.php b/templates/show_export.inc.php
new file mode 100644
index 00000000..eece02f2
--- /dev/null
+++ b/templates/show_export.inc.php
@@ -0,0 +1,55 @@
+<?php
+/*
+
+ Copyright (c) 2001 - 2007 Ampache.org
+ All rights reserved.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; version 2
+ of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+show_box_top(_('Export Catalog')); ?>
+<form name="duplicates" action="<?php echo Config::get('web_path'); ?>/admin/export.php?action=export" method="post" enctype="multipart/form-data" >
+<table cellspacing="0" cellpadding="3">
+<tr>
+ <td valign="top"><strong><?php echo _('Catalog'); ?>:</strong></td>
+ <td>
+ <select id="export_catalog" name="export_catalog" width="150" style="width: 150px">
+ <option value="">(all)</option>
+<?php
+ $catalog_ids = Catalog::get_catalogs();
+ foreach ($catalog_ids as $cat_id) {
+ $cat = new Catalog($cat_id);
+?>
+ <option value="<?php echo $cat->id; ?>" <?php if($_REQUEST['export_catalog']==$cat->id) echo "selected=\"selected\"" ?>><?php echo $cat->name; ?></option>
+<?php
+ }
+?>
+ </select>
+ </td>
+</tr>
+<tr>
+ <td valign="top"><strong><?php echo _('Format'); ?>:</strong></td>
+ <td>
+ <select id="export_format" name="export_format" width="150" style="width: 150px">
+ <option value="itunes" <?php if($_REQUEST['export_format']=='itunes') echo "selected=\"selected\"" ?>>iTunes</option>
+ </select>
+ </td>
+</tr>
+</table>
+<div class="formValidation">
+ <input type="submit" value="<?php echo _('Export'); ?>" />
+</div>
+</form>
+<?php show_box_bottom(); ?>
diff --git a/templates/sidebar_admin.inc.php b/templates/sidebar_admin.inc.php
index 45630bca..0f0411ab 100644
--- a/templates/sidebar_admin.inc.php
+++ b/templates/sidebar_admin.inc.php
@@ -25,6 +25,7 @@
<li id="sb_admin_ot_ClearNowPlaying"><a href="<?php echo $web_path; ?>/admin/catalog.php?action=clear_now_playing"><?php echo _('Clear Now Playing'); ?></a></li>
<li id="sb_admin_ot_ClearCatStats"><a href="<?php echo $web_path; ?>/admin/catalog.php?action=clear_stats"><?php echo _('Clear Stats'); ?></a></li>
<li id="sb_admin_ot_ManageFlagged"><a href="<?php echo $web_path; ?>/admin/flag.php"><?php echo _('Manage Flagged'); ?></a></li>
+ <li id="sb_admin_ot_Export"><a href="<?php echo $web_path; ?>/admin/export.php"><?php echo _('Export'); ?></a></li>
<?php if (Config::get('shoutbox')) { ?>
<li id="sb_admin_ot_ManageShoutbox"><a href="<?php echo $web_path; ?>/shout.php?action=show_manage"><?php echo _('Manage Shoutbox'); ?></a></li>
<?php } ?>