diff options
-rw-r--r-- | admin/export.php | 56 | ||||
-rw-r--r-- | lib/class/catalog.class.php | 77 | ||||
-rw-r--r-- | lib/ui.lib.php | 2 | ||||
-rw-r--r-- | templates/show_export.inc.php | 55 | ||||
-rw-r--r-- | templates/sidebar_admin.inc.php | 1 |
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 } ?> |