diff options
Diffstat (limited to 'modules/class/playlist.php')
-rw-r--r-- | modules/class/playlist.php | 366 |
1 files changed, 366 insertions, 0 deletions
diff --git a/modules/class/playlist.php b/modules/class/playlist.php new file mode 100644 index 00000000..130537af --- /dev/null +++ b/modules/class/playlist.php @@ -0,0 +1,366 @@ +<? +/* + + Copyright (c) 2001 - 2005 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; either version 2 + of the License, or (at your option) any later version. + + 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. + + +*/ +/*! + @header Playlist Class + This class handles all actual work in regards to playlists. +*/ + +class Playlist { + + // Variables from DB + var $id; + var $name; + var $owner; + var $type; + var $time; + var $items; + + /*! + @function Playlist + @discussion Playlist class + @param $playlist_id The ID of the playlist + */ + function Playlist($playlist_id = 0) { + + /* If we have an id then do something */ + if ($playlist_id) { + // Assign id + $this->id = $playlist_id; + + // Get the information from the db + $this->refresh_object(); + } + + } + + + + /*! + @function refresh_object + @discussion Reads playlist information from the db and updates the Playlist object with it + */ + function refresh_object() { + + $dbh = dbh(); + + if ($this->id) { + $sql = "SELECT name, owner, type, date FROM playlist" . + " WHERE id = '$this->id'"; + $db_results = mysql_query($sql, $dbh); + + if ($r = mysql_fetch_object($db_results)) { + $this->name = $r->name; + $this->owner = $r->owner; + $this->type = $r->type; + $this->time = $r->date; + $this->items = array(); + + // Fetch playlist items + $sql = "SELECT song, track FROM playlist_data" . + " WHERE playlist = '$this->id'" . + " ORDER BY track"; + $db_results = mysql_query($sql, $dbh); + + while ($r = mysql_fetch_object($db_results)) { + $this->items[] = array("song_id" => $r->song, "track" => $r->track); + } + } + + return TRUE; + } + + return FALSE; + + } + + + /*! + @function create_playlist + @discussion Creates an empty playlist, given a name, owner_id, and type. + */ + function create_playlist($name, $owner_id, $type) { + + $dbh = dbh(); + + if (isset($name) && isset($owner_id) && isset($type) && $this->check_type($type)) { + $name = sql_escape($name); + $sql = "INSERT INTO playlist" . + " (name, owner, type)" . + " VALUES ('$name', '$owner_id', '$type')"; + $db_results = mysql_query($sql, $dbh); + if ($this->id = mysql_insert_id($dbh)) { + $this->refresh_object(); + return TRUE; + } + } + + return FALSE; + + } + + + /*! + @function delete + @discussion Deletes the playlist. + */ + function delete() { + + $dbh = dbh(); + + if ($this->id) { + $sql = "DELETE FROM playlist_data" . + " WHERE playlist = '$this->id'"; + $db_results = mysql_query($sql, $dbh); + + $sql = "DELETE FROM playlist" . + " WHERE id = '$this->id'"; + $db_results = mysql_query($sql, $dbh); + + // Clean up this object + foreach (get_object_vars($this) as $var) { + unset($var); + } + + return TRUE; + } + + return FALSE; + + } + + + /*! + @function update_track_numbers + @discussion Reads an array of song_ids and track numbers to update + */ + function update_track_numbers($changes) { + + $dbh = dbh(); + + if ($this->id && isset($changes) && is_array($changes)) { + foreach ($changes as $change) { + // Check for valid song_id + $sql = "SELECT count(*) FROM song WHERE id = '" . $change['song_id'] . "'"; + $db_results = mysql_query($sql, $dbh); + $r = mysql_fetch_row($db_results); + if ($r[0] == 1) { + $sql = "UPDATE playlist_data SET" . + " track = '" . $change['track'] . "'" . + " WHERE playlist = '$this->id'". + " AND song = '" . $change['song_id'] . "'"; + $db_results = mysql_query($sql, $dbh); + } + } + + // Refresh the playlist object + $this->refresh_object(); + + return TRUE; + } + + return FALSE; + + } + + + /*! + @function add_songs + @discussion Reads an array of song_ids to add to the playlist + */ + function add_songs($song_ids) { + + $dbh = dbh(); + + if ($this->id && isset($song_ids) && is_array($song_ids)) { + foreach ($song_ids as $song_id) { + $song = new Song($song_id); + if (isset($song->id)) { + $sql = "INSERT INTO playlist_data" . + " (playlist, song, track)" . + " VALUES ('$this->id', '$song->id', '$song->track')"; + $db_results = mysql_query($sql, $dbh); + } + } + + // Refresh the playlist object + $this->refresh_object(); + + return TRUE; + } + + return FALSE; + + } + + + /*! + @function remove_songs + @discussion Reads an array of song_ids to remove from the playlist + */ + function remove_songs($song_ids) { + + $dbh = dbh(); + + if ($this->id && isset($song_ids) && is_array($song_ids)) { + foreach ($song_ids as $song_id) { + $sql = "DELETE FROM playlist_data" . + " WHERE song = '$song_id'" . + " AND playlist = '$this->id'"; + $db_results = mysql_query($sql, $dbh); + } + + // Refresh the playlist object + $this->refresh_object(); + + return TRUE; + } + + return FALSE; + + } + + + /*! + @function check_type + @discussion Checks for a valid playlist type + */ + function check_type($type) { + + if (isset($type)) { + if ($type === 'public' || $type === 'private') { + return TRUE; + } + } + + return FALSE; + + } + + + /*! + @function update_type + @discussion Updates the playlist type + */ + function update_type($type) { + + $dbh = dbh(); + + if ($this->id && isset($type) && $this->check_type($type)) { + $sql = "UPDATE playlist SET type = '$type'" . + " WHERE id = '$this->id'"; + $db_results = mysql_query($sql, $dbh); + + // Refresh the playlist object + $this->refresh_object(); + + return TRUE; + } + + return FALSE; + + } + + + /*! + @function update_name + @discussion Updates the playlist name + */ + function update_name($name) { + + $dbh = dbh(); + + if ($this->id && isset($name)) { + $name = sql_escape($name); + $sql = "UPDATE playlist SET name = '$name'" . + " WHERE id = '$this->id'"; + $db_results = mysql_query($sql, $dbh); + + // Refresh the playlist object + $this->refresh_object(); + + return TRUE; + } + + return FALSE; + + } + + + /*! + @function get_songs + @discussion Returns an array of song_ids for the playlist + */ + function get_songs() { + + $song_ids = array(); + + if ($this->id && is_array($this->items)) { + foreach ($this->items as $item) { + $song_ids[] = $item['song_id']; + } + } + + return $song_ids; + + } // get_songs + + /*! + @function get_random_songs + @discussion gets a random set of the songs in this + playlist + */ + function get_random_songs() { + + $sql = "SELECT COUNT(song) FROM playlist_data WHERE playlist = '$this->id'"; + $db_results = mysql_query($sql, dbh()); + + $total_songs = mysql_fetch_row($db_results); + + $limit = rand(1,$total_songs[0]); + + // Fetch playlist items + $sql = "SELECT song, track FROM playlist_data" . + " WHERE playlist = '$this->id'" . + " ORDER BY RAND() LIMIT $limit"; + $db_results = mysql_query($sql, dbh()); + while ($r = mysql_fetch_object($db_results)) { + $song_ids[] = $r->song; + } + + return $song_ids; + } // get_random_songs + + /*! + @function show_import + @discussion shows the import from file template + */ + function show_import() { + + require (conf('prefix') . "/templates/show_import_playlist.inc.php"); + + } // show_import + + +} //end of playlist class + +?> |