summaryrefslogtreecommitdiffstats
path: root/modules/class/playlist.php
diff options
context:
space:
mode:
Diffstat (limited to 'modules/class/playlist.php')
-rw-r--r--modules/class/playlist.php366
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
+
+?>