summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authorKarl 'vollmerk' Vollmer <vollmer@ampache.org>2005-06-27 08:40:23 +0000
committerKarl 'vollmerk' Vollmer <vollmer@ampache.org>2005-06-27 08:40:23 +0000
commit65663a24f14bf544c8391c169239d0811eed4ffb (patch)
treeaceffe4d5ffc0e11b9488ce404f57f4369c0df5e /modules
parent4d64e9219f3dce5ccdb283e777132c503dd355d6 (diff)
downloadampache-65663a24f14bf544c8391c169239d0811eed4ffb.tar.gz
ampache-65663a24f14bf544c8391c169239d0811eed4ffb.tar.bz2
ampache-65663a24f14bf544c8391c169239d0811eed4ffb.zip
move and break, move and break
Diffstat (limited to 'modules')
-rw-r--r--modules/class/access.php189
-rw-r--r--modules/class/album.php463
-rw-r--r--modules/class/artist.php205
-rw-r--r--modules/class/catalog.php1934
-rw-r--r--modules/class/error.php94
-rw-r--r--modules/class/genre.class.php45
-rw-r--r--modules/class/playlist.php366
-rw-r--r--modules/class/song.php658
-rw-r--r--modules/class/stream.php294
-rw-r--r--modules/class/update.php931
-rw-r--r--modules/class/user.php632
-rw-r--r--modules/class/view.php229
-rw-r--r--modules/init.php32
13 files changed, 16 insertions, 6056 deletions
diff --git a/modules/class/access.php b/modules/class/access.php
deleted file mode 100644
index 6e6afbf2..00000000
--- a/modules/class/access.php
+++ /dev/null
@@ -1,189 +0,0 @@
-<?
-/*
-
- 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 Access Class
-*/
-
-class Access {
-
- /* Variables from DB */
- var $id;
- var $name;
- var $start;
- var $end;
- var $level;
-
- /*!
- @function Access
- @discussion Access class, for modifing access rights
- @param $access_id The ID of access entry
- */
- function Access($access_id = 0) {
-
- /* If we have passed an id then do something */
- if ($access_id) {
-
- /* Assign id for use in get_info() */
- $this->id = $access_id;
-
- /* Get the information from the db */
- if ($info = $this->get_info()) {
-
- /* Assign Vars */
- $this->name = $info->name;
- $this->start = $info->start;
- $this->end = $info->end;
- $this->level = $info->level;
- } // if info
-
- } // if access_id
-
- } //constructor
-
- /*!
- @function get_info
- @discussion get's the vars for $this out of the database
- @param $this->id Taken from the object
- */
- function get_info() {
-
- /* Grab the basic information from the catalog and return it */
- $sql = "SELECT * FROM access_list WHERE id='$this->id'";
- $db_results = mysql_query($sql, dbh());
-
- $results = mysql_fetch_object($db_results);
-
- return $results;
-
- } //get_info
-
- /*!
- @function create
- @discussion creates a new entry
- */
- function create($name,$start,$end,$level) {
-
- $start = ip2int($start);
- $end = ip2int($end);
- $name = sql_escape($name);
- $level = intval($level);
-
- $sql = "INSERT INTO access_list (`name`,`level`,`start`,`end`) VALUES ".
- "('$name','$level','$start','$end')";
- $db_results = mysql_query($sql, dbh());
-
- } // create
-
- /*!
- @function delete
- @discussion deletes $this access_list entry
- */
- function delete($access_id=0) {
-
- if (!$access_id) {
- $access_id = $this->id;
- }
-
- $sql = "DELETE FROM access_list WHERE id='$access_id'";
- $db_results = mysql_query($sql, dbh());
-
- } // delete
-
- /*!
- @function check
- @discussion check to see if they have rights
- */
- function check($needed, $ip) {
-
- // They aren't using access control
- // lets just keep on trucking
- if (!conf('access_control')) {
- return true;
- }
-
- $ip = ip2int($ip);
-
- $sql = "SELECT id FROM access_list WHERE start<='$ip' AND end>='$ip' AND level>='$needed'";
- $db_results = mysql_query($sql, dbh());
-
- // Yah they have access they can use the mojo
- if (mysql_fetch_row($db_results)) {
- return true;
- }
-
- // No Access Sucks to be them.
- else {
- return false;
- }
-
- } // check
-
- /*!
- @function get_access_list
- @discussion returns a full listing of all access
- rules on this server
- */
- function get_access_list() {
-
- $sql = "SELECT * FROM access_list";
- $db_results = mysql_query($sql, dbh());
-
-
- while ($r = mysql_fetch_object($db_results)) {
- $obj = new Access();
- $obj->id = $r->id;
- $obj->start = $r->start;
- $obj->end = $r->end;
- $obj->name = $r->name;
- $obj->level = $r->level;
- $results[] = $obj;
- } // end while access list mojo
-
- return $results;
-
- } // get_access_list
-
-
- /*!
- @function get_level_name
- @discussion take the int level and return a
- named level
- */
- function get_level_name() {
-
- if ($this->level == '75') {
- return "Full Access";
- }
- if ($this->level == '5') {
- return "Demo";
- }
- if ($this->level == '25') {
- return "Stream";
- }
- if ($this->level == '50') {
- return "Stream/Download";
- }
-
-
- } // get_level_name
-
-} //end of access class
-
-?>
diff --git a/modules/class/album.php b/modules/class/album.php
deleted file mode 100644
index 17befbd9..00000000
--- a/modules/class/album.php
+++ /dev/null
@@ -1,463 +0,0 @@
-<?php
-/*
- Copyright (c) 2004
- Ampache.org
-
- 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 Album Class
-*/
-
-class Album {
-
- /* Variables from DB */
- var $id;
- var $name;
- var $year;
- var $prefix;
-
- /*!
- @function Album
- @discussion Album class, for modifing a song.
- @param $album_id The ID of the song
- */
- function Album($album_id = 0) {
-
- /* If we have passed an id then do something */
- if ($album_id) {
-
- /* Assign id for use in get_info() */
- $this->id = $album_id;
-
- /* Get the information from the db */
- if ($info = $this->get_info()) {
-
- /* Assign Vars */
- $this->name = trim($info->prefix . " " . $info->album_name);
- $this->songs = $info->song_count;
- $this->artist_count = $info->artist_count;
- $this->year = $info->year;
- $this->artist = trim($info->artist_prefix . " " . $info->artist_name);
- $this->artist_id = $info->art_id;
- $this->album = $info->album_name;
-
- $this->prefix = $info->prefix;
- } // if info
-
- } // if album_id
-
- } //constructor
-
-
- /*!
- @function get_info
- @discussion get's the vars for $this out of the database
- @param $this->id Taken from the object
- */
- function get_info() {
-
- /* Grab the basic information from the catalog and return it */
- $sql = "SELECT COUNT(DISTINCT(song.artist)) as artist_count,album.prefix,album.year,album.name AS album_name,COUNT(song.id) AS song_count," .
- "artist.name AS artist_name,artist.id AS art_id,artist.prefix AS artist_prefix ".
- "FROM song,artist,album WHERE album.id='$this->id' AND song.album=album.id AND song.artist=artist.id GROUP BY song.album";
-
- $db_results = mysql_query($sql, dbh());
-
- $results = mysql_fetch_object($db_results);
-
- return $results;
-
- } //get_info
-
- /*!
- @function get_songs
- @discussion gets the songs for this album
- */
- function get_songs($limit = 0) {
-
- $results = array();
-
- $sql = "SELECT id FROM song WHERE album='$this->id' ORDER BY track, title";
- if ($limit) { $sql .= " LIMIT $limit"; }
- $db_results = mysql_query($sql, dbh());
-
- while ($r = mysql_fetch_object($db_results)) {
- $results[] = new Song($r->id);
- }
-
- return $results;
-
- } // get_songs
-
-
- /*!
- @function format_album
- @dicussion reformats this object with f_name, f_songs and f_artist
- that contain links etc...
- */
- function format_album() {
-
- $web_path = conf('web_path');
-
- /* Truncate the string if it's to long */
- $name = htmlspecialchars(truncate_with_ellipse($this->name,conf('ellipse_threshold_album')));
- $artist = htmlspecialchars($this->artist);
- $this->f_name = "<a href=\"$web_path/albums.php?action=show&amp;album=" . $this->id . "\" title=\"" . $name . "\">" . $name . "</a>";
- $this->f_songs = "<div align=\"center\">" . $this->songs . "</div>";
- if ($this->artist_count == '1') {
- $this->f_artist = "<a href=\"$web_path/artists.php?action=show&amp;artist=" . $this->artist_id . "\">" . $artist . "</a>";
- }
- else {
- $this->f_artist = _("Various");
- }
-
- if ($this->year == '0') {
- $this->year = "N/A";
- }
-
- } // format_album
-
- /*!
- @function get_art
- @discussion get art wrapper function
- */
- function get_art($fast = 0) {
-
- /* Check DB first */
- if ($image = $this->get_db_art()) {
- return $image;
- }
-
- /* Stop here if we are doing the fast art */
- if ($fast) { return false; }
-
- /* Create Base Vars */
- $album_art_order = array();
-
- /* Attempt to retrive the album art order */
- $config_value = conf('album_art_order');
- $class_methods = get_class_methods('Album');
-
- /* If it's not set */
- if (empty($config_value)) {
- $album_art_order = array('id3','folder','amazon');
- }
- elseif (!is_array($config_value)) {
- $album_art_order = array_push($album_art_order,$config_value);
- }
- else {
- $album_art_order = array_merge($album_art_order, conf('album_art_order'));
- }
-
- foreach ($album_art_order AS $method) {
-
- $method_name = "get_" . $method . "_art";
-
- if (in_array($method_name,$class_methods)) {
- if ($this->{$method_name}()) {
- return $this->get_db_art();
- } // if method finds the art
- } // if the method exists
-
- } // end foreach
-
- return false;
-
- } // get_art
-
- /*!
- @function get_id3_art
- @discussion looks for art from the id3 tags
- */
- function get_id3_art() {
-
- $songs = $this->get_songs();
-
- // Foreach songs in this album
- foreach ($songs as $song) {
- // If we find a good one, stop looking
- $getID3 = new getID3();
- $id3 = $getID3->analyze($song->file);
-
- if ($id3['format_name'] == "WMA") {
- $image = $id3['asf']['extended_content_description_object']['content_descriptors']['13'];
- }
- else {
- $image = $id3['id3v2']['APIC']['0'];
- }
- if ($image) {
- $art = $image['data'];
- $mime = $image['mime'];
-
- // Stick it in the db for next time
- $sql = "UPDATE album SET art = '" . sql_escape($art) . "'," .
- " art_mime = '" . sql_escape($mime) . "'" .
- " WHERE id = '" . $this->id . "'";
- $db_result = mysql_query($sql, dbh());
-
- return true;
- } // end if image
- } // end foreach
-
- return false;
-
- } // get_id3_art
-
- /*!
- @function get_folder_art()
- @discussion returns the album art from the folder of the mp3s
- */
- function get_folder_art() {
-
- $songs = $this->get_songs();
-
- /* See if we are looking for a specific filename */
- $preferred_filename = conf('album_art_preferred_filename');
-
- /* Thanks to dromio for origional code */
- /* Added search for any .jpg, png or .gif - Vollmer */
- foreach($songs as $song) {
- $dir = dirname($song->file);
-
- /* Open up the directory */
- $handle = @opendir($dir);
-
- if (!is_resource($handle)) {
- echo "<font class=\"error\">" . _("Error: Unable to open") . " $dir</font><br />\n";
- if (conf('debug')) { log_event($GLOBALS['user']->username,' read ',"Error: Unable to open $dir for album art read"); }
- }
-
- /* Recurse through this dir and create the files array */
- while ( FALSE !== ($file = @readdir($handle)) ) {
- $extension = substr($file,strlen($file)-3,4);
-
- /* If it's an image file */
- if ($extension == "jpg" || $extension == "gif" || $extension == "png" || $extension == "jp2") {
-
- if ($file == $preferred_filename) {
- $found = 1;
- $album_art_filename = array('file' => $file, 'ext' => $extension);
- break;
- }
- elseif (!$preferred_filename) {
- $found = 1;
- $album_art_filename = array('file' => $file, 'ext' => $extension);
- break;
- }
- else {
- $found = 1;
- $album_art_filename = array('file' => $file, 'ext' => $extension);
- }
-
- } // end if it's an image
-
- } // end while reading dir
- @closedir($handle);
-
- if ($found) {
- $handle = fopen($dir."/".$album_art_filename['file'], "rb");
- $mime = "image/" . $album_art_filename['ext'];
- $art = '';
- while(!feof($handle)) {
- $art .= fread($handle, 1024);
- }
- fclose($handle);
- $sql = "UPDATE album SET art = '" . sql_escape($art) . "'," .
- " art_mime = '" . sql_escape($mime) . "'" .
- " WHERE id = '$this->id'";
- $db_results = mysql_query($sql, dbh());
- return true;
- } // if found
- } // end foreach songs
-
- return false;
-
- } // get_folder_art()
-
- /*!
- @function get_db_art()
- @discussion returns the album art from the db
- */
- function get_db_art() {
-
- $sql = "SELECT art,art_mime FROM album WHERE id='$this->id' AND art_mime IS NOT NULL";
- $db_results = mysql_query($sql, dbh());
-
- $results = mysql_fetch_object($db_results);
-
- return $results;
-
- } // get_db_art
-
-
- /*!
- @function get_amazon_art
- @discussion searches amazon for the
- album art
- */
- function get_amazon_art() {
-
- return $this->find_art();
-
- } // get_amazon_art
-
- /*!
- @function get_random_songs
- @discussion gets a random number, and
- a random assortment of songs from this
- album
- */
- function get_random_songs() {
-
- $results = array();
-
- $sql = "SELECT id FROM song WHERE album='$this->id' ORDER BY RAND() LIMIT " . rand(1,$this->songs);
- $db_results = mysql_query($sql, dbh());
-
- while ($r = mysql_fetch_array($db_results)) {
- $results[] = $r[0];
- }
-
- return $results;
-
- } // get_random_songs
-
- /*!
- @function clear_art
- @discussion clears the album art from the DB
- */
- function clear_art() {
-
- $sql = "UPDATE album SET art=NULL, art_mime=NULL WHERE id='$this->id'";
- $db_results = mysql_query($sql, dbh());
-
- } // clear_art
-
- /*!
- @function find_art
- @discussion searches amazon or a url
- for the album art
- //FIXME: Rename this POS
- */
- function find_art($coverurl = '') {
-
- // No coverurl specified search amazon
- if (empty($coverurl)) {
- $amazon = new AmazonSearch(conf('amazon_developer_key'));
- // Prevent the script from timing out
- set_time_limit(0);
- $search_term = $this->artist . " " . $this->name;
- $amazon->search(array('artist' => $this->artist, 'album' => $this->name, 'keywords' => $serch_term));
- // Only do the second search if the first actually returns something
- if (count($amazon->results)) {
- $amazon->lookup($amazon->results);
- }
-
- /* Log this if we're doin debug */
- if (conf('debug')) {
- log_event($_SESSION['userdata']['username'],' amazon-xml ',"Searched using $search_term with " . conf('amazon_developer_key') . " as key " . count($amazon->results) . " results found");
- }
-
- //FIXME: For now just pull the first one we find
- foreach ($amazon->results as $key=>$value) {
- $results = $value;
- break;
- } //FIXME:
-
- } // if no cover
- // If we've specified a coverurl, create a fake Amazon array with it
- else {
- $results = array('LargeImage' => $coverurl);
- }
-
- // If we have results of some kind
- if (is_array($results)) {
-
- /* Recurse through the images found */
- $possible_keys = array("LargeImage","MediumImage","SmallImage");
-
- foreach ($possible_keys as $key) {
- if (strlen($results[$key])) {
- break;
- }
-
-
- } // foreach
-
- // Rudimentary image type detection, only JPG and GIF allowed.
- if (substr($results[$key], -4 == ".jpg")) {
- $mime = "image/jpg";
- }
- elseif (substr($results[$key], -4 == ".gif")) {
- $mime = "image/gif";
- }
- else {
- return false;
- }
-
- /* Create Snoopy Object and pull info */
- $snoopy = new Snoopy;
- $snoopy->fetch($results[$key]);
- $art = $snoopy->results;
-
- // Skip 1x1 size images
- if (function_exists('ImageCreateFromString')) {
- $im = @ImageCreateFromString($art);
- if (@imagesx($im) == 1 || @imagesy($im) == 1 && $im) {
- return false;
- }
- }
-
- // Push the image into the database
- $sql = "UPDATE album SET art = '" . sql_escape($art) . "'," .
- " art_mime = '" . sql_escape($mime) . "'" .
- " WHERE id = '$this->id'";
- $db_results = mysql_query($sql, dbh());
-
- return true;
-
- } // if we've got something
-
- /* Default to false */
- return false;
-
- } // find_art
-
- /*!
- @function get_song_ids
- @discussion returns a list of song_ids on the album
- get_songs returns a list of song objects
- */
-
- // it seems get_songs really should call this,
- // but I don't feel comfortable imposing that - RCR
- function get_song_ids( $limit = 0 ) {
- $results = array();
- $sql = "SELECT id FROM song WHERE album='$this->id' ORDER BY track, title";
- if ($limit) { $sql .= " LIMIT $limit"; }
- $db_results = mysql_query($sql, dbh());
-
- while ($r = mysql_fetch_object($db_results)) {
- $results[] = $r->id;
- }
- return( $results );
- } // get_song_ids
-
-} //end of album class
-
-?>
diff --git a/modules/class/artist.php b/modules/class/artist.php
deleted file mode 100644
index 2a6e3308..00000000
--- a/modules/class/artist.php
+++ /dev/null
@@ -1,205 +0,0 @@
-<?php
-/*
-
- Copyright (c) 2004 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 Artist Class
-*/
-
-class Artist {
-
- /* Variables from DB */
- var $id;
- var $name;
- var $songs;
- var $albums;
- var $prefix;
-
- /*!
- @function Artist
- @discussion Song class, for modifing a song.
- @param $song_id The ID of the song
- */
- function Artist($song_id = 0) {
-
- /* If we have passed an id then do something */
- if ($song_id) {
-
- /* Assign id for use in get_info() */
- $this->id = $song_id;
-
- /* Get the information from the db */
- if ($info = $this->get_info()) {
-
- /* Assign Vars */
- $this->name = $info->name;
- $this->prefix = $info->prefix;
- } // if info
-
- } // if song_id
-
- } //constructor
-
-
- /*!
- @function get_info
- @discussion get's the vars for $this out of the database
- @param $this->id Taken from the object
- */
- function get_info() {
-
- /* Grab the basic information from the catalog and return it */
- $sql = "SELECT * FROM artist WHERE id='$this->id'";
- $db_results = mysql_query($sql, dbh());
-
- $results = mysql_fetch_object($db_results);
-
- return $results;
-
- } //get_info
-
- /*!
- @function get_albums
- @discussion gets the albums for this artist
- */
- function get_albums() {
-
- $results = array();
-
- $sql = "SELECT DISTINCT(album.id) FROM song,album WHERE song.album=album.id AND song.artist='$this->id' ORDER BY album.name";
- $db_results = mysql_query($sql, dbh());
-
- while ($r = mysql_fetch_object($db_results)) {
- $results[] = new Album($r->id);
- }
-
- return $results;
-
- } // get_albums
-
- /*!
- @function get_songs
- @discussion gets the songs for this artist
- */
- function get_songs() {
-
- $sql = "SELECT song.id FROM song WHERE song.artist='$this->id'";
- $db_results = mysql_query($sql, dbh());
-
- while ($r = mysql_fetch_object($db_results)) {
- $results[] = new Song($r->id);
- }
-
- return $results;
-
- } // get_songs
-
- /*!
- @function get_random_songs
- @discussion gets a random number, and
- a random assortment of songs from this
- album
- */
- function get_random_songs() {
-
- $results = array();
-
- $sql = "SELECT id FROM song WHERE artist='$this->id' ORDER BY RAND() LIMIT " . rand(1,$this->songs);
- $db_results = mysql_query($sql, dbh());
-
- while ($r = mysql_fetch_array($db_results)) {
- $results[] = $r[0];
- }
-
- return $results;
-
- } // get_random_songs
-
- /*!
- @function get_count
- @discussion gets the album and song count of
- this artist
- */
- function get_count() {
-
- /* Define vars */
- $songs = 0;
- $albums = 0;
-
- $sql = "SELECT COUNT(song.id) FROM song WHERE song.artist='$this->id' GROUP BY song.album";
- $db_results = mysql_query($sql, dbh());
-
- while ($r = mysql_fetch_array($db_results)) {
- $songs += $r[0];
- $albums++;
- }
-
- /* Set Object Vars */
- $this->songs = $songs;
- $this->albums = $albums;
-
- return true;
-
- } // get_count
-
- /*!
- @function format_artist
- @discussion this function takes an array of artist
- information and reformats the relevent values
- so they can be displayed in a table for example
- it changes the title into a full link.
- */
- function format_artist() {
-
- /* Combine prefix and name, trim then add ... if needed */
- $name = htmlspecialchars(truncate_with_ellipse(trim($this->prefix . " " . $this->name)));
- $this->f_name = $this->name;
- $this->full_name = htmlspecialchars(trim($this->prefix . " " . $this->name));
- //FIXME: This shouldn't be set like this, f_name should be like this
- $this->link = "<a href=\"" . conf('web_path') . "/artists.php?action=show&amp;artist=" . $this->id . "\" title=\"" . $this->full_name . "\">" . $name . "</a>";
- $this->name = $this->link;
- return $artist;
-
- } // format_artist
-
-
- /*!
- @function show_albums
- @discussion displays the show albums by artist page
- */
- function show_albums() {
-
- /* Set Vars */
- $web_path = conf('web_path');
-
-
- $albums = $this->get_albums();
- $this->format_artist();
- $artist = $this;
-
- require (conf('prefix') . "/templates/show_artist.inc");
-
- } // show_albums
-
-
-} //end of artist class
-
-?>
diff --git a/modules/class/catalog.php b/modules/class/catalog.php
deleted file mode 100644
index 9affc95a..00000000
--- a/modules/class/catalog.php
+++ /dev/null
@@ -1,1934 +0,0 @@
-<?
-/*
-
- 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 Catalog Class
- This class handles all actual work in regards to the catalog, it contains functions for creating/listing/updated the catalogs.
-*/
-
-class Catalog {
-
- var $name;
- var $last_update;
- var $last_add;
- var $id3_set_command;
- var $rename_pattern;
- var $sort_pattern;
- var $catalog_type;
-
- // Used in functions
- var $albums = array();
- var $artists = array();
- var $genres = array();
-
- /*!
- @function Catalog
- @discussion Catalog class constructor, pulls catalog information
- @param $catalog_id The ID of the catalog you want to build information from
- */
- function Catalog($catalog_id = 0) {
-
- /* If we have passed an id then do something */
- if ($catalog_id) {
- /* Assign id for use in get_info() */
- $this->id = $catalog_id;
-
- /* Get the information from the db */
- $info = $this->get_info();
-
- /* Assign Vars */
- $this->path = $info->path;
- $this->name = $info->name;
- $this->last_update = $info->last_update;
- $this->last_add = $info->last_add;
- $this->id3_set_command = $info->id3_set_command;
- $this->rename_pattern = $info->rename_pattern;
- $this->sort_pattern = $info->sort_pattern;
- $this->catalog_type = $info->catalog_type;
- } //catalog_id
-
- } //constructor
-
-
- /*!
- @function get_info
- @discussion get's the vars for $this out of the database
- @param $this->id Taken from the object
- */
- function get_info() {
-
- /* Grab the basic information from the catalog and return it */
- $sql = "SELECT * FROM catalog WHERE id='$this->id'";
- $db_results = mysql_query($sql, dbh());
-
- $results = mysql_fetch_object($db_results);
-
- return $results;
-
- } //get_info
-
-
- /*!
- @function get_catalogs
- @discussion Pull all the current catalogs
- */
- function get_catalogs() {
-
- $sql = "SELECT id FROM catalog";
- $db_results = mysql_query($sql, dbh());
-
- while ($r = mysql_fetch_object($db_results)) {
- $results[] = new Catalog($r->id);
- }
-
- return $results;
-
- } // get_catalogs
-
-
- /*!
- @function get_catalog_stats
- @discussion Pulls information about number of songs etc for a specifc catalog, or all catalogs
- calls many other internal functions, returns an object containing results
- @param $catalog_id If set tells us to pull from a single catalog, rather than all catalogs
- */
- function get_catalog_stats($catalog_id=0) {
-
- $results->songs = $this->count_songs($catalog_id);
- $results->albums = $this->count_albums($catalog_id);
- $results->artists = $this->count_artists($catalog_id);
- $results->size = $this->get_song_size($catalog_id);
- $results->time = $this->get_song_time($catalog_id);
-
- } // get_catalog_stats
-
-
- /*!
- @function get_song_time
- @discussion Get the total amount of time (song wise) in all or specific catalog
- @param $catalog_id If set tells ut to pick a specific catalog
- */
- function get_song_time($catalog_id=0) {
-
- $sql = "SELECT SUM(song.time) FROM song";
- if ($catalog_id) {
- $sql .= " WHERE catalog='$catalog_id'";
- }
-
- $db_results = mysql_query($sql, dbh());
-
- $results = mysql_fetch_field($db_results);
-
- /* Do some conversion to get Hours Min Sec */
-
-
- return $results;
-
- } // get_song_time
-
-
- /*!
- @function get_song_size
- @discussion Get the total size of songs in all or a specific catalog
- @param $catalog_id If set tells us to pick a specific catalog
- */
- function get_song_size($catalog_id=0) {
-
- $sql = "SELECT SUM(song.size) FROM song";
- if ($catalog_id) {
- $sql .= " WHERE catalog='$catalog_id'";
- }
-
- $db_results = mysql_query($sql, dbh());
-
- $results = mysql_fetch_field($db_results);
-
- /* Convert it into MB */
- $results = ($results / 1048576);
-
- return $results;
-
- } // get_song_size
-
-
- /*!
- @function count_artists
- @discussion Count the number of artists in all catalogs or in a specific one
- @param $catalog_id If set tells us to pick a specific catalog
- */
- function count_artists($catalog_id=0) {
-
- $sql = "SELECT DISTINCT(song.artist) FROM song";
- if ($catalog_id) {
- $sql .= " WHERE catalog='$catalog_id'";
- }
-
- $db_results = mysql_query($sql,dbh());
-
- $results = mysql_num_rows($db_results);
-
- return $results;
-
- } // count_artists
-
-
- /*!
- @function count_albums
- @discussion Count the number of albums in all catalogs or in a specific one
- @param $catalog_id If set tells us to pick a specific catalog
- */
- function count_albums($catalog_id=0) {
-
- $sql = "SELECT DISTINCT(song.album) FROM song";
- if ($catalog_id) {
- $sql .=" WHERE catalog='$catalog_id'";
- }
-
- $db_results = mysql_query($sql, dbh());
-
- $results = mysql_num_rows($db_results);
-
- return $results;
-
- } // count_albums
-
-
- /*!
- @function count_songs
- @discussion Count the number of songs in all catalogs, or a specific one
- @param $catalog_id If set tells us to pick a specific catalog
- */
- function count_songs($catalog_id=0) {
-
- $sql = "SELECT count(*) FROM song";
- if ($catalog_id) {
- $sql .= " WHERE catalog='$catalog_id'";
- }
-
- $db_results = mysql_query($sql, dbh());
- $results = mysql_fetch_field($db_results);
-
- return $results;
-
- } // count_songs
-
- /*!
- @function add_file
- @discussion adds a single file
- */
- function add_file($filename) {
-
- $file_size = @filesize($filename);
- $pattern = "/\.[" . conf('catalog_file_pattern') . "]$/i";
-
- if ( preg_match($pattern ,$filename) && ($file_size > 0) && (!preg_match('/\.AppleDouble/', $filename)) ) {
- if(!$this->check_local_mp3($filename,$gather_type)) {
- $this->insert_local_song($filename,$file_size);
- }
- } // if valid file
-
-
- } // add_file
-
-
- /*!
- @function add_files
- @discussion Recurses throught $this->path and pulls out all mp3s and returns the full
- path in an array. Passes gather_type to determin if we need to check id3
- information against the db.
- @param $path The root path you want to start grabing files from
- @param $gather_type=0 Determins if we need to check the id3 tags of the file or not
- */
- function add_files($path,$gather_type=0,$parse_m3u=0) {
- /* Strip existing escape slashes and then add them again
- This is done because we keep adding to the dir (slashed) + (non slashed)
- and a double addslashes would pooch things
- */
-
- /* Open up the directory */
- $handle = opendir(stripslashes($path));
-
- if (!is_resource($handle)) {
- if (conf('debug')) { log_event($_SESSION['userdata']['username'],'read',"Unable to Open $path",'ampache-catalog'); }
- echo "<font class=\"error\">" . _("Error: Unable to open") . " $path</font><br />\n";
- }
-
- /* Recurse through this dir and create the files array */
- while ( false !== ( $file = readdir($handle) ) ) {
-
- // Fix Found by Naund
- // Needed to protect from ' in filenames
- $file = sql_escape($file);
-
- // Prevent the script from timing out
- set_time_limit(0);
-
- /* if not .. or . */
- if ($file != "." AND $file != "..") {
-
- if (conf('debug')) {
- log_event($_SESSION['userdata']['username'],'read',"Starting work on $file inside $path",'ampache-catalog');
- }
-
- /* Change the dir so is_dir works correctly */
- if (!@chdir(stripslashes($path))) {
- if (conf('debug')) { log_event($_SESSION['userdata']['username'],'read',"Unable to chdir $path",'ampache-catalog'); }
- echo "<font class=\"error\">" . _("Error: Unable to change to directory") . " $path</font><br />\n";
- }
-
- /* Create the new path */
- $full_file = stripslashes($path."/".$file);
- $full_file = str_replace("//","/",$full_file);
-
- if (conf('no_symlinks')) {
- if (is_link($full_file)) { $failed_check = 1; }
- }
-
- /* If it's a dir run this function again! */
- if (is_dir($full_file) AND !$failed_check) {
- $this->add_files($full_file,$gather_type,$parse_m3u);
- unset($failed_check);
- } //it's a directory
-
- /* If it's not a dir let's roll with it */
- else {
- /* Get the file information */
- $file_size = @filesize($full_file);
-
- if (!$file_size && $file_size != '0') {
- echo "<font class=\"error\">" . _("Error: Unable to get filesize for") . " $full_file <br />";
- if (conf('debug')) { log_event($GLOBALS['user']->username,' read ',"Error: Unable to get filesize for $full_file",'ampache-catalog'); }
- } // if no filesize
-
- $pattern = "/\.(" . conf('catalog_file_pattern');
- if ($parse_m3u) {
- $pattern .= "|m3u)$/i";
- }
- else {
- $pattern .= ")$/i";
- }
-
- /* see if this is an mp3 file and if it is greater than 0 bytes */
- if ( preg_match($pattern ,$file) && ($file_size > 0) && (!preg_match('/\.AppleDouble/', $file)) ) {
-
- if (is_readable($full_file)) {
-
- if (substr($file,-3,3) == 'm3u') {
- if ($this->import_m3u($full_file)) {
- echo "&nbsp;&nbsp;&nbsp;" . _("Added Playlist From") . " $file . . . .<br />\n";
- flush();
- }
- } // if it's an m3u
-
- else {
-
- /* see if the current song is in the catalog */
- $found = $this->check_local_mp3($full_file,$gather_type);
-
- /* If not found then insert, gets id3 information
- * and then inserts it into the database
- */
- if (!$found) {
- $this->insert_local_song($full_file,$file_size);
-
- /* Stupid little cutesie thing */
- $this->count++;
- if ( !($this->count%conf('catalog_echo_count')) ) {
- echo _("Added") . " $this->count. . . . <br />\n";
- flush();
- } //echos song count
-
- } // not found
-
- } // if it's not an m3u
-
- } // is readable
- else {
- // not readable, warn user
- if (conf('debug')) { log_event($_SESSION['userdata']['username'],'read',"$full_file is not readable by ampache",'ampache-catalog'); }
- echo "$full_file " . _("is not readable by ampache") . ".<br />\n";
-
- }
-
- } //if it's a mp3 and is greater than 0 bytes
-
- else {
- if (conf('debug')) {
- log_event($_SESSION['userdata']['username'],'read',"$full_file ignored, non audio file or 0 bytes",'ampache-catalog');
- }
- } // else not an audio file or 0 size
-
- } //else it's not a directory
-
- } //end if not . or ..
-
- } //end while
-
- if (conf('debug')) {
- log_event($_SESSION['userdata']['username'],' closedir ',"Finished reading $path closing handle",'ampache-catalog');
- }
-
- /* Close the dir handle */
- @closedir($handle);
-
- } //add_files
-
- /*!
- @function get_albums
- @discussion This gets albums for all songs passed in an array
- */
- function get_albums($songs=array()) {
-
- foreach ($songs as $song_id) {
- $sql = "SELECT album FROM song WHERE id='$song_id'";
- $db_results = mysql_query($sql, dbh());
- $results = mysql_fetch_array($db_results);
- $albums[] = new Album($results[0]);
- } // files
-
- return $albums;
-
- } // get_albums
-
- /*!
- @function get_album_art
- @discussion This runs through all of the albums and trys to find the
- art for them from the mp3s
- //FIXME: Make the display a table so it all lines up
- */
- function get_album_art($catalog_id=0,$methods=array()) {
-
- if (!$catalog_id) { $catalog_id = $this->id; }
-
- // Get all of the albums in this catalog
- $albums = $this->get_catalog_albums($catalog_id);
-
- // Run through them an get the art!
- foreach ($albums as $album) {
- flush();
- if ($debug) { echo "&nbsp;&nbsp;&nbsp;&nbsp;" . $album->name . " -- "; }
-
- if ($methods['id3']) {
- $found = $album->get_id3_art();
- if ($found && $debug) { echo _("Found in ID3") . "<br />\n"; }
- }
- if ($methods['amazon'] && !$found) {
- $found = $album->get_amazon_art();
- if ($found && $debug) { echo _("Found on Amazon") . "<br />\n"; }
- }
- if ($methods['folder'] && !$found) {
- $found = $album->get_folder_art();
- if ($found && $debug) { echo _("Found in Folder") . "<br />\n"; }
- }
- if (count($methods) == '0' && !$found) {
- $found = $album->get_art();
- if ($found && $debug) { echo _("Found") . "<br />\n"; }
- }
-
- if (!$found && $debug) { echo "<font class=\"error\">" . _("Not Found") . "</font><br />\n"; }
-
- if ($found) { $art_found++; }
-
-
- /* Stupid little cutesie thing */
- $search_count++;
- if ( !($search_count%conf('catalog_echo_count')) ) {
- echo _("Searched") . " $search_count. . . . <br />\n";
- flush();
- } //echos song count
-
-
- // Prevent the script from timing out
- set_time_limit(0);
-
- unset($found);
-
- } // foreach albums
-
- echo "$art_found album's with art. . .<br />\n";
- flush();
-
- } // get_album_art
-
- /*!
- @function get_catalog_albums()
- @discussion Returns an array of the albums from a catalog
- */
- function get_catalog_albums($catalog_id=0) {
-
- $results = array();
-
- /* Use $this->id if nothing is passed */
- if (!$catalog_id) { $catalog_id = $this->id; }
-
- $sql = "SELECT DISTINCT(album.id) FROM album,song WHERE song.catalog='$catalog_id' AND song.album=album.id";
- $db_results = mysql_query($sql, dbh());
-
- while ($r = mysql_fetch_object($db_results)) {
- $results[] = new Album($r->id);
- }
-
- return $results;
-
- } // get_catalog_albums
-
-
- /*!
- @function get_catalog_files
- @discussion Returns an array of song objects from a catalog
- @param $catalog_id=0 Specify the catalog ID you want to get the files of
- */
- function get_catalog_files($catalog_id=0) {
-
- $results = array();
-
- /* Use $this->id if nothing passed */
- if (!$catalog_id) { $catalog_id = $this->id; }
-
- $sql = "SELECT id FROM song WHERE catalog='$catalog_id' AND status='enabled'";
- $db_results = mysql_query($sql, dbh());
-
- $results = array(); // return an emty array instead of nothing if no objects
- while ($r = mysql_fetch_object($db_results)) {
- $results[] = new Song($r->id);
- } //end while
-
- return $results;
-
- } //get_catalog_files
-
-
- /*!
- @function get_disabled
- @discussion Gets an array of the disabled songs for all catalogs
- and returns full song objects with them
- */
- function get_disabled() {
- global $conf;
-
- $results = array();
-
- $sql = "SELECT id FROM song WHERE status='disabled'";
- $db_results = mysql_query($sql, dbh());
-
- while ($r = mysql_fetch_array($db_results)) {
- $results[] = new Song($r['id']);
- }
-
- return $results;
-
- } // get_disabled
-
-
- /*!
- @function get_files
- @discussion Get's an array of .mp3s and returns the filenames
- @param $path Get files starting at root $path
- */
- function get_files($path) {
-
- /* Set it as an empty array */
- $files = array();
-
- $path = stripslashes($path);
-
- /* Open up the directory */
- $handle = @opendir($path);
-
- if (!is_resource($handle)) { echo "<font class=\"error\">" . _("Error: Unable to open") . " $path</font><br />\n"; }
-
- /* Change dir so we can tell if it's a directory */
- if (!@chdir($path)) {
- echo "<font class=\"error\">Error: Unable to change to $path directory</font><br />\n";
- }
-
- /* Recurse through this dir and create the files array */
- while ( FALSE !== ($file = @readdir($handle)) ) {
-
- $full_file = stripslashes($path . "/" . $file);
- $full_file = str_replace("//","/",$full_file);
-
- if (conf('no_symlinks')) {
- if (is_link($full_file)) { $failed_check = true; }
- }
-
- /* It's a dir */
- if (is_dir($full_file) AND $file != "." AND $file != ".." AND !$failed_check) {
- /* Merge the results of the get_files with the current results */
- $files = array_merge($files,$this->get_files($full_file));
- } //isdir
-
- /* Get the file information */
- $file_info = filesize($full_file);
-
- $pattern = "/\.[" . conf('catalog_file_pattern') . "]$/i";
-
- if ( preg_match($pattern ,$file) && ($file_info > 0) && (!preg_match("/\.AppleDouble/", $file)) ) {
- $files[] = $full_file;
- } //is mp3 of at least some size
-
- } //end while
-
- /* Close the dir handle */
- @closedir($handle);
-
- /* Return the files array */
- return $files;
-
- } //get_files
-
- /*!
- @function dump_album_art (Added by Cucumber 20050216)
- @discussion This runs through all of the albums and trys to dump the
- art for them into the 'folder.jpg' file in the appropriate dir
- */
- function dump_album_art($catalog_id=0,$methods=array()) {
- if (!$catalog_id) { $catalog_id = $this->id; }
-
- // Get all of the albums in this catalog
- $albums = $this->get_catalog_albums($catalog_id);
-
- echo "<br /><b>" . _("Starting Dump Album Art") . ". . .</b><br><br />\n";
-
- // Run through them an get the art!
- foreach ($albums as $album) {
- flush();
- if ($image = $album->get_db_art()) {
- /* Get the first song in the album */
- $songs = $album->get_songs(1);
- $song = $songs[0];
- $dir = dirname($song->file);
- $extension = substr($image->art_mime,strlen($image->art_mime)-3,3);
-
- $preferred_filename = conf('album_art_preferred_filename');
- if (!$preferred_filename) { $preferred_filename = "folder.$extension"; }
-
- $file = "$dir/$preferred_filename";
- if ($file_handle = @fopen($file,"w")) {
- if (fwrite($file_handle, $image->art)) {
- $i++;
- if ( !($i%conf('catalog_echo_count')) ) {
- echo _("Written") . " $i. . . <br />\n";
- flush();
- } //echos song count
- if (conf('debug')) { log_event($_SESSION['userdata']['username'],'art_write',"$album->name Art written to $file"); }
- }
- fclose($file_handle);
- } // end if fopen
- else {
- if (conf('debug')) { log_event($_SESSION['userdata']['username'],'art_write',"Unable to open $file for writting"); }
- echo "<font class=\"error\">" . _("Error unable to open file for writting") . " [$file] </font><br />\n";
- }
-
- } // end if image
-
- } // end foreach
-
- echo "<br /><b>" . _("Album Art Dump Complete") . "</b> &nbsp;&nbsp;";
- echo "<a href=\"" . conf('web_path') . "/admin/catalog.php" . "\">[" . _("Return") . "]</a>";
-
- flush();
-
- } // dump_album_art
-
- /*!
- @function update_last_update
- @discussion updates the last_update of the catalog
- */
- function update_last_update() {
-
- $date = time();
- $sql = "UPDATE catalog SET last_update='$date' WHERE id='$this->id'";
- $db_results = mysql_query($sql, dbh());
-
- } // update_last_update
-
-
- /*!
- @function update_last_add
- @discussion updates the last_add of the catalog
- */
- function update_last_add() {
-
- $date = time();
- $sql = "UPDATE catalog SET last_add='$date' WHERE id='$this->id'";
- $db_results = mysql_query($sql, dbh());
-
- } // update_last_add
-
-
- /*!
- @function new_catalog
- @discussion The Main array for making a new catalog calls many other child functions within this class
- @param $path Root path to start from for catalog
- @param $name Name of the new catalog
- */
- function new_catalog($path,$name, $id3cmd=0, $ren=0, $sort=0, $type=0,$gather_art=0,$parse_m3u=0,$art=array()) {
-
- /* Record the time.. time the catalog gen */
- $start_time = time();
-
- /* Flush anything that has happened so they don't think it's locked */
- flush();
-
- /*
- * Step one Add this to the catalog table if it's not
- * already there returns the new catalog_id
- */
- $catalog_id = $this->check_catalog($path);
-
- if (!$catalog_id) {
- $catalog_id = $this->create_catalog_entry($path,$name,$id3cmd, $ren, $sort, $type);
- }
-
- /* Setup the $this with the new information */
- $this->id = $catalog_id;
- $this->path = $path;
- $this->name = $name;
- $this->id3_set_command = ($id3cmd)?$id3cmd:'';
- $this->rename_pattern = ($ren)?$ren:'';
- $this->sort_pattern = ($sort)?$sort:'';
- $this->catalog_type = $type;
-
- /* Fluf */
- echo _("Starting Catalog Build") . " [$name]<br />\n";
- flush();
-
-
- if ($this->catalog_type == 'remote') {
- echo _("Running Remote Sync") . ". . .<br /><br />";
- flush();
- $this->get_remote_catalog($type=0);
- return true;
- }
- /* Get the songs and then insert them into the db */
- $this->add_files($this->path,$type,$parse_m3u);
-
- /* Now Adding Album Art? */
- if ($gather_art) {
- echo "<br />\n<b>" . _("Starting Album Art Search") . ". . .</b><br />\n";
- flush();
- $this->get_album_art(0,$art);
- } // if we want to gather album art
-
- /* Do a little stats mojo here */
- $current_time = time();
-
- $time_diff = $current_time - $start_time;
- if ($time_diff) { $song_per_sec = intval($this->count/$time_diff); }
- echo _("Catalog Finished") . ". . . " . _("Total Time") . " [" . date("i:s",$time_diff) . "] " . _("Total Songs") . " [" . $this->count . "] " .
- _("Songs Per Seconds") . " [" . $song_per_sec . "]<br />\n";
-
- return $catalog_id;
-
- } //new_catalog
-
- /*!
- @function update_single_item
- @discussion updates a single album,artist,song
- */
- function update_single_item($type,$id) {
-
- $songs = array();
-
- switch ($type) {
- case 'album':
- $album = new Album($id);
- $songs = $album->get_songs();
- break;
- case 'artist':
- $artist = new Artist($id);
- $songs = $artist->get_songs();
- break;
- case 'song':
- $songs[0] = new Song($id);
- break;
- } // end switch type
-
- foreach($songs as $song) {
-
- $info = $this->update_song_from_tags($song);
-
- if ($info['change']) {
- echo "<dl>\n\t<li>";
- echo "<b>$song->file " . _("Updated") . "</b>\n";
- echo $info['text'];
- echo "\t</li>\n</dl><hr align=\"left\" width=\"50%\" />";
- flush();
- } // if change
- else {
- echo"<dl>\n\t<li>";
- echo "<b>$song->file</b><br />" . _("No Update Needed") . "\n";
- echo "\t</li>\n</dl><hr align=\"left\" width=\"50%\" />";
- flush();
- }
- } // foreach songs
-
- } // update_single_item
-
- /*!
- @function update_song_from_tags
- @discussion updates the song info based on tags
- */
- function update_song_from_tags($song) {
-
- $info = new Audioinfo();
- $results = $info->Info($song->file);
-
- /* Find the correct key */
- $key = get_tag_type($results);
-
- /* Fill Missing Information */
- $results = $song->fill_info($results,$this->sort_pattern . "/" . $this->rename_pattern, $this->id, $key);
-
- /* Clean up the tags */
- $results = clean_tag_info($results,$key,$song->file);
-
- /* Setup the vars */
- $new_song = new Song();
- $new_song->file = $results['file'];
- $new_song->title = $results['title'];
- $new_song->year = $results['year'];
- $new_song->comment = $results['comment'];
- $new_song->bitrate = $results['bitrate'];
- $new_song->rate = $results['rate'];
- $new_song->mode = $results['mode'];
- $new_song->size = $results['size'];
- $new_song->time = $results['time'];
- $new_song->track = $results['track'];
- $artist = $results['artist'];
- $album = $results['album'];
- $genre = $results['genre'];
-
- /* Clean up Old Vars */
- unset($results,$key,$info);
-
- /*
- * We have the artist/genre/album name need to check it in the tables
- * If found then add & return id, else return id
- */
- $new_song->artist = $this->check_artist($artist);
- $new_song->f_artist = $artist;
- $new_song->genre = $this->check_genre($genre);
- $new_song->f_genre = $genre;
- $new_song->album = $this->check_album($album,$new_song->year);
- $new_song->f_album = $album . " - " . $new_song->year;
- $new_song->title = $this->check_title($new_song->title,$new_song->file);
-
- $info = $song->compare_song_information($song,$new_song);
-
- if ($info['change']) {
- $song->update_song($song->id,$new_song);
- }
-
- return $info;
-
- } // update_song_from_tags
-
- /*!
- @function add_to_catalog
- @discussion this function adds new files to an
- existing catalog
- */
- function add_to_catalog($type=0) {
-
- echo _("Starting New Song Search on") . " <b>[$this->name]</b> " . _("catalog") . "<br /><br />\n";
- flush();
-
- if ($this->catalog_type == 'remote') {
- echo _("Running Remote Update") . ". . .<br /><br />";
- flush();
- $this->get_remote_catalog($type=0);
- return true;
- }
-
- /* Set the Start time */
- $start_time = time();
-
- /* Get the songs and then insert them into the db */
- $this->add_files($this->path,$type);
-
- /* Do a little stats mojo here */
- $current_time = time();
-
- if ($type != "fast_add") {
- echo "<b>" . _("Starting Album Art Search") . ". . .</b><br />\n";
- flush();
- $this->get_album_art();
- }
-
- /* Update the Catalog last_update */
- $this->update_last_add();
-
- $time_diff = $current_time - $start_time;
- if ($time_diff) {
- $song_per_sec = intval($this->count/$time_diff);
- }
- if (!$song_per_sec) {
- $song_per_sec = "N/A";
- }
- if (!$this->count) {
- $this->count = 0;
- }
-
- echo "\n<br />" . _("Catalog Update Finished") . "... " . _("Total Time") . " [" . date("i:s",$time_diff) . "] " .
- _("Total Songs") . " [" . $this->count . "] " . _("Songs Per Seconds") . " [" . $song_per_sec . "]<br /><br />";
-
- } // add_to_catalog
-
-
- /*!
- @function get_remote_catalog
- @discussion get a remote catalog and runs update if needed
- */
- function get_remote_catalog($type=0) {
-
- if (!class_exists('xmlrpc_client')) {
- if (conf('debug')) { log_event($_SESSION['userdata']['username'],'xmlrpc',"Unable to load XMLRPC library"); }
- echo "<font class=\"error\"><b>" . _("Error") . "</b>: " . _("Unable to load XMLRPC library, make sure XML-RPC is enabled") . "<br />\n";
- return false;
- }
-
- // first, glean out the information from the path about the server and remote path
- preg_match("/http:\/\/([^\/]+)\/*(.*)/", $this->path, $match);
- $server = $match[1];
- $path = $match[2];
-
- if ( ! $path ) {
- $client = new xmlrpc_client("/server.php", $server, 80);
- }
- else {
- $client = new xmlrpc_client("/$path/server.php", $server, 80);
- }
-
- $f = new xmlrpcmsg('remote_server_query', array(new xmlrpcval( conf('web_path'), "string")) );
- //if (conf('debug')) { $client->setDebug(1); }
- $response = $client->send($f);
- $value = $response->value();
-
- if ( !$response->faultCode() ) {
- $data = old_xmlrpc_decode($value);
-
- // Print out the catalogs we are going to sync
- //FIXME: We should add catalog level access control
- foreach ($data as $vars) {
- $catalog_name = $vars[0];
- print("<b>Reading Remote Catalog: $catalog_name</b> [$this->path]<br />\n");
- }
- }
- else {
- $error_msg = _("Error connecting to") . " " . $server . " " . _("Code") . ": " . $response->faultCode() . " " . _("Reason") . ": " . $response->faultString();
- log_event($_SESSION['userdata']['username'],'xmlrpc',$error_msg);
- echo "<p class=\"error\">$error_msg</p>";
- return;
- }
-
- $f = new xmlrpcmsg('remote_song_query', array(new xmlrpcval( 'song', "string")) );
- $response = $client->send($f);
- $value = $response->value();
-
- if ( !$response->faultCode() ) {
- $data = old_xmlrpc_decode($value);
- $this->update_remote_catalog($data,$this->path);
- }
- else {
- $error_msg = _("Error connecting to") . " " . $server . " " . _("Code") . ": " . $response->faultCode() . " " . _("Reason") . ": " . $response->faultString();
- log_event($_SESSION['userdata']['username'],'xmlrpc',$error_msg);
- echo "<p class=\"error\">$error_msg</p>";
- }
-
- echo "<p>" . _("Completed updating remote catalog(s)") . ".</p><hr>\n";
-
-
- } // get_remote_catalog
-
- /*!
- @function update_remote_catalog
- @discussion actually updates from the remote data
- */
- function update_remote_catalog($songs,$root_path) {
- global $settings, $dbh, $artists;
-
-
- /*
- We need to check the incomming songs
- to see which ones need to be added
- */
- foreach ($songs as $song) {
-
- // Prevent a timeout
- set_time_limit(0);
-
- $song = base64_decode($song);
-
- $data = explode("::", $song);
-
- $new_song->artist = $this->check_artist($data[0]);
- $new_song->album = $this->check_album($data[1],$data[4]);
- $new_song->title = $data[2];
- $new_song->comment = $data[3];
- $new_song->year = $data[4];
- $new_song->bitrate = $data[5];
- $new_song->rate = $data[6];
- $new_song->mode = $data[7];
- $new_song->size = $data[8];
- $new_song->time = $data[9];
- $new_song->track = $data[10];
- $new_song->genre = $this->check_genre($data[11]);
- $new_song->file = $root_path . "/play/index.php?song=" . $data[12] . "uid=$md5_ip";
- $new_song->catalog = $this->id;
-
- if (!$song_id = $this->check_remote_song($new_song->file)) {
- $this->insert_remote_song($new_song);
- }
-
- } // foreach new Songs
-
- //FIXME: Delete Songs that were not updated (gone)
-
- // now delete invalid entries
- $this->clean_albums();
- $this->clean_stats();
- $this->clean_artists();
- $this->clean_flagged();
-
- } // update_remote_catalog
-
-
- /*!
- @function clean_catalog
- @discussion Cleans the Catalog of files that no longer exist grabs from $this->id or $id passed
- Doesn't actually delete anything, disables errored files, and returns them in an array
- @param $catalog_id=0 Take the ID of the catalog you want to clean
- @param $action=0 Delete/Disable, default is disable
- */
- function clean_catalog($catalog_id=0,$action=0) {
-
- /* Define the Arrays we will need */
- $dead_files = array();
-
- if (!$catalog_id) { $catalog_id = $this->id; }
-
- echo "Cleaning the <b>[" . $this->name . "]</b> Catalog...<br /><br />";
- flush();
-
- /* Get all songs in this catalog */
- $sql = "SELECT id,file FROM song WHERE catalog='$catalog_id' AND status='enabled'";
- $db_results = mysql_query($sql, dbh());
-
- /* Recurse through files, put @ to prevent errors poping up */
- while ($results = mysql_fetch_object($db_results)) {
-
- /* Remove slashes while we are checking for its existance */
- $results->file = stripslashes($results->file);
-
- /* Stupid little cutesie thing */
- $this->count++;
- if ( !($this->count%conf('catalog_echo_count')) ) {
- echo _("Checking") . " $this->count. . . . <br />\n";
- flush();
- } //echos song count
-
- /* Also check the file information */
- $file_info = @filesize($results->file);
-
- /* If it errors somethings splated, or the files empty */
- if (!file_exists($results->file) OR $file_info < 1) {
-
- /* Add Error */
- echo "<font class=\"error\">Error File Not Found or 0 Bytes: " . $results->file . "</font><br />";
- flush();
-
- /* Add this file to the list for removal from the db */
- $dead_files[] = $results;
- } //if error
-
- } //while gettings songs
-
- /* Incase there's been a snafo with a mount point on something
- * don't actually delete from DB here, simply disable and list
- */
- if (count($dead_files)) {
- foreach ($dead_files as $data) {
-
- //FIXME: Until I fix the form, assume delete
- //if ($action === 'delete_dead') {
- $sql = "DELETE FROM song WHERE id='$data->id'";
- //}
- //
- //else {
- // $sql = "UPDATE song SET status='disabled' WHERE id='$data->id'";
- //}
-
- $db_results = mysql_query($sql, dbh());
-
- /* DB Error occured */
- if (!$db_results) {
- /* Add Error */
- } //if error
-
- } //end foreach
-
- } // end if dead files
-
- /* Step two find orphaned Arists/Albums
- * This finds artists and albums that no
- * longer have any songs associated with them
- */
- $this->clean_albums();
- $this->clean_artists();
- $this->clean_stats();
- $this->clean_playlists();
- $this->clean_flagged();
-
- /* Return dead files, so they can be listed */
- echo "<b>" . _("Catalog Clean Done") . " [" . count($dead_files) . "] " . _("files removed") . "</b><br />\n";
- flush();
- return $dead_files;
-
- } //clean_catalog
-
-
- /*!
- @function clean_albums
- @discussion This function cleans out unused albums
- @param $this->id Depends on the current object
- */
- function clean_albums() {
-
- /* Mysql 3.23 doesn't support our cool query so we have to do it a different way */
- if (preg_match("/^3\./",mysql_get_server_info())) {
- $sql = "SELECT album.id FROM album LEFT JOIN song ON song.album = album.id WHERE song.id IS NULL";
- $db_results = mysql_query($sql, dbh());
-
- $results = array();
-
- while ($r = mysql_fetch_row($db_results)) {
- $results[] = $r;
- }
-
- foreach ($results as $dead) {
-
- $sql = "DELETE FROM album WHERE id='$dead[0]'";
- $db_results = mysql_query($sql,dbh());
- }
- return true;
- }
-
- /* Do a complex delete to get albums where there are no songs */
- $sql = "DELETE FROM album USING album LEFT JOIN song ON song.album = album.id WHERE song.id IS NULL";
- $db_results = mysql_query($sql, dbh());
-
- } //clean_albums
-
- /*!
- @function clean_flagged
- @discussion This functions cleans ou unused flagged items
- */
- function clean_flagged() {
-
- /* Mysql 3.23 doesn't support our cool query so we have to do it a different way */
- if (preg_match("/^3\./",mysql_get_server_info())) {
- $sql = "SELECT flagged.id FROM flagged LEFT JOIN song ON song.id=flagged.song WHERE song.id IS NULL";
- $db_results = mysql_query($sql, dbh());
-
- $results = array();
-
- while ($r = mysql_fetch_row($db_results)) {
- $results[] = $r;
- }
-
- foreach ($results as $dead) {
- $sql = "DELETE FROM flagged WHERE id='$dead[0]'";
- $db_results = mysql_query($sql, dbh());
- }
- return true;
- }
-
- /* Do a complex delete to get flagged items where the songs are now gone */
- $sql = "DELETE FROM flagged USING flagged LEFT JOIN song ON song.id = flagged.song WHERE song.id IS NULL";
- $db_results = mysql_query($sql, dbh());
-
- } // clean_flagged
-
-
- /*!
- @function clean_artists
- @discussion This function cleans out unused artists
- @param $this->id Depends on the current object
- */
- function clean_artists() {
-
- /* Mysql 3.23 doesn't support our cool query so we have to do it a different way */
- if (preg_match("/^3\./",mysql_get_server_info())) {
- $sql = "SELECT artist.id FROM artist LEFT JOIN song ON song.artist = artist.id WHERE song.id IS NULL";
- $db_results = mysql_query($sql, dbh());
-
- $results = array();
-
- while ($r = mysql_fetch_row($db_results)) {
- $results[] = $r;
- }
-
- foreach ($results as $dead) {
-
- $sql = "DELETE FROM artist WHERE id='$dead[0]'";
- $db_results = mysql_query($sql,dbh());
- }
- return true;
- }
-
-
- /* Do a complex delete to get artists where there are no songs */
- $sql = "DELETE FROM artist USING artist LEFT JOIN song ON song.artist = artist.id WHERE song.id IS NULL";
- $db_results = mysql_query($sql, dbh());
-
- } //clean_artists
-
- /*
- @function clean_playlists
- @discussion cleans out dead files from playlists
- @param $this->id depends on the current object
- */
- function clean_playlists() {
-
- /* Mysql 3.23 doesn't support our cool query so we have to do it a different way */
- if (preg_match("/^3\./",mysql_get_server_infO())) {
- $sql = "SELECT playlist_data.song FROM playlist_data LEFT JOIN song ON song.id = playlist_data.song WHERE song.file IS NULL";
- $db_results = mysql_query($sql, dbh());
-
- $results = array();
-
- while ($r = mysql_fetch_row($db_results)) {
- $results[] = $r;
- }
-
- foreach ($results as $dead) {
- $sql = "DELETE FROM playlist_data WHERE song='$dead[0]'";
- $db_results = mysql_query($sql, dbh());
- }
- return true;
- }
-
- /* Do a complex delete to get playlist songs where there are no songs */
- $sql = "DELETE FROM playlist_data USING playlist_data LEFT JOIN song ON song.id = playlist_data.song WHERE song.file IS NULL";
- $db_results = mysql_query($sql, dbh());
-
- } // clean_playlists
-
- /*!
- @function clean_stats
- @discussion This functions removes stats for songs/albums that no longer exist
- @param $catalog_id The ID of the catalog to clean
- */
- function clean_stats() {
-
- $version = mysql_get_server_info();
-
- /* Mysql 3.23 doesn't support our cool query so we have to do it a different way */
- if (preg_match("/^3\./",$version)) {
- $sql = "SELECT object_count.id FROM object_count LEFT JOIN song ON song.id = object_count.object_id WHERE object_type='song' AND song.id IS NULL";
- $db_results = mysql_query($sql, dbh());
-
- $results = array();
-
- while ($r = mysql_fetch_row($db_results)) {
- $results[] = $r;
- }
-
- foreach ($results as $dead) {
-
- $sql = "DELETE FROM object_count WHERE id='$dead[0]'";
- $db_results = mysql_query($sql,dbh());
- }
-
- }
- // We assume this will be 4.0+
- else {
- /* Crazy SQL Mojo to remove stats where there are no songs */
- $sql = "DELETE FROM object_count USING object_count LEFT JOIN song ON song.id=object_count.object_id WHERE object_type='song' AND song.id IS NULL";
- $db_results = mysql_query($sql, dbh());
- }
-
- /* Mysql 3.23 doesn't support our cool query so we have to do it a different way */
- if (preg_match("/^3\./",$version)) {
- $sql = "SELECT object_count.id FROM object_count LEFT JOIN album ON album.id = object_count.object_id WHERE object_type='album' AND album.id IS NULL";
- $db_results = mysql_query($sql, dbh());
-
- $results = array();
-
- while ($r = mysql_fetch_row($db_results)) {
- $results[] = $r;
- }
-
- foreach ($results as $dead) {
-
- $sql = "DELETE FROM object_count WHERE id='$dead[0]'";
- $db_results = mysql_query($sql,dbh());
- }
- }
- // We assume 4.0+ Here
- else {
- /* Crazy SQL Mojo to remove stats where there are no albums */
- $sql = "DELETE FROM object_count USING object_count LEFT JOIN album ON album.id=object_count.object_id WHERE object_type='album' AND album.id IS NULL";
- $db_results = mysql_query($sql, dbh());
- }
-
- /* Mysql 3.23 doesn't support our cool query so we have to do it a different way */
- if (preg_match("/^3\./",$version)) {
- $sql = "SELECT object_count.id FROM object_count LEFT JOIN artist ON artist.id = object_count.object_id WHERE object_type='artist' AND artist.id IS NULL";
- $db_results = mysql_query($sql, dbh());
-
- $results = array();
-
- while ($r = mysql_fetch_row($db_results)) {
- $results[] = $r;
- }
-
- foreach ($results as $dead) {
-
- $sql = "DELETE FROM object_count WHERE id='$dead[0]'";
- $db_results = mysql_query($sql,dbh());
- }
- }
- // We assume 4.0+ here
- else {
- /* Crazy SQL Mojo to remove stats where ther are no artists */
- $sql = "DELETE FROM object_count USING object_count LEFT JOIN artist ON artist.id=object_count.object_id WHERE object_type='artist' AND artist.id IS NULL";
- $db_results = mysql_query($sql, dbh());
- }
-
-
- } // clean_stats
-
-
- /*!
- @function verify_catalog
- @discussion This function compares the DB's information with the ID3 tags
- @param $catalog_id The ID of the catalog to compare
- */
- function verify_catalog($catalog_id=0,$gather_type=0) {
-
- /* Create and empty song for us to use */
- $total_updated = 0;
-
- /* Set it to this if they don't pass anything */
- if (!$catalog_id) {
- $catalog_id = $this->id;
- }
-
- /* First get the filenames for the catalog */
- $sql = "SELECT id FROM song WHERE catalog='$catalog_id' ORDER BY id";
- $db_results = mysql_query($sql, dbh());
- $number = mysql_num_rows($db_results);
-
- echo _("Updating the") . " <b>[ $this->name ]</b> " . _("Catalog") . "<br />\n";
- echo $number . " " . _("songs found checking tag information.") . "<br /><br />\n\n";
- flush();
-
- /* Magical Fix so we don't run out of time */
- set_time_limit(0);
-
- /* Recurse through this catalogs files
- * and get the id3 tage information,
- * if it's not blank, and different in
- * in the file then update!
- */
- while ($results = mysql_fetch_object($db_results)) {
-
- $song = new Song($results->id);
-
- if (is_readable($song->file)) {
- unset($skip);
-
- /* If they have specified fast_update check the file
- filemtime to make sure the file has actually
- changed
- */
- if ($gather_type === "fast_update") {
- $file_date = filemtime($song->file);
- if ($file_date < $this->last_update) { $skip = true; }
- } // if gather_type
-
- if ($song->update_time >= $this->last_update) {
- $skip = true;
- $song->update_utime($song->id,time()+86400);
- }
-
- // if the file hasn't been modified since the last_update
- if (!$skip) {
-
- $info = $this->update_song_from_tags($song);
- $album_id = $song->album;
- if ($info['change']) {
- echo "<dl>\n\t<li>";
- echo "<b>$song->file " . _("Updated") . "</b>\n";
- echo $info['text'];
- /* If we aren't doing a fast update re-gather album art */
- if ($gather_type !== "fast_update" AND !isset($searched_albums[$album_id])) {
- $album = new Album($song->album);
- $searched_albums[$album_id] = 1;
- $found = $album->get_art();
- unset($album);
- if ($found) { $is_found = _(" FOUND"); }
- echo "<br /><b>" . _("Searching for new Album Art") . ". . .$is_found</b><br />\n";
- unset($found,$is_found);
- }
- elseif (isset($searched_albums[$album_id])) {
- echo "<br /><b>" . _("Album Art Already Found") . ". . .</b><br />\n";
- }
- echo "\t</li>\n</dl>\n<hr align=\"left\" width=\"50%\" />\n";
- flush();
- $total_updated++;
- }
-
- unset($info);
-
- } // end skip
-
- /* Stupid little cutesie thing */
- $this->count++;
- if ( !($this->count%conf('catalog_echo_count')) ) {
- echo "Checked $this->count. . . . <br />\n";
- flush();
- } //echos song count
-
- } // end if file exists
-
- else {
- echo "<dl>\n <li>";
- echo "<b>$song->file does not exist or is not readable</b>\n";
- echo " </li>\n</dl>\n<hr align=\"left\" width=\"50%\" />\n";
- // Should we remove it from catalog?
- }
-
-
- } //end foreach
-
-
- /* After we have updated all the songs with the new information clear any empty albums/artists */
- $this->clean_albums();
- $this->clean_artists();
- $this->clean_stats();
- $this->clean_flagged();
-
- // Update the last_update
- $this->update_last_update();
-
- echo "Update Finished. Checked $this->count. $total_updated songs updated.<br /><br />";
-
- } //verify_catalog
-
-
- /*!
- @function create_catalog_entry
- @discussion Creates a new catalog from path and type
- @param $path The root path for this catalog
- @param $name The name of the new catalog
- */
- function create_catalog_entry($path,$name,$id3cmd=0,$ren=0,$sort=0, $type='local') {
-
- // Current time
- $date = time();
-
- $path = sql_escape($path);
- $name = sql_escape($name);
-
- if($id3cmd && $ren && $sort) {
- $sql = "INSERT INTO catalog (path,name,last_update,id3_set_command,rename_pattern,sort_pattern,catalog_type) " .
- " VALUES ('$path','$name','$date', '$id3cmd', '$ren', '$sort','$type')";
- }
- else {
- $sql = "INSERT INTO catalog (path,name,last_update) VALUES ('$path','$name','$date')";
- }
-
- $db_results = mysql_query($sql, dbh());
- $catalog_id = mysql_insert_id(dbh());
-
- return $catalog_id;
-
- } //create_catalog_entry
-
-
- /*!
- @function check_catalog
- @discussion Checks for the $path already in the catalog table
- @param $path The root path for the catalog we are checking
- */
- function check_catalog($path) {
-
- $path = sql_escape($path);
-
- $sql = "SELECT id FROM catalog WHERE path='$path'";
- $db_results = mysql_query($sql, dbh());
-
- $results = mysql_fetch_object($db_results);
-
- return $results->id;
-
- } //check_catalog
-
-
- /*!
- @function check_artist
- @discussion Takes $artist checks if there then return id else insert and return id
- @param $artist The name of the artist
- */
- function check_artist($artist) {
-
- // Only get the var ones.. less func calls
- $cache_limit = conf('artist_cache_limit');
-
- /* Clean up the artist */
- $artist = trim($artist);
- $artist = sql_escape($artist);
-
-
- /* Ohh no the artist has lost it's mojo! */
- if (!$artist) {
- $artist = "Unknown (Orphaned)";
- }
-
- // Remove the prefix so we can sort it correctly
- preg_match("/^(The\s|An\s|A\s)(.*)/i",$artist,$matches);
-
- if (count($matches)) {
- $artist = $matches[2];
- $prefix = $matches[1];
- }
-
- // Check to see if we've seen this artist before
- if (isset($this->artists[$artist])) {
- return $this->artists[$artist];
- } // if we've seen this artist before
-
- /* Setup the checking sql statement */
- $sql = "SELECT id FROM artist WHERE name LIKE '$artist' ";
- $db_results = mysql_query($sql, dbh());
-
- /* If it's found */
- if ($r = mysql_fetch_object($db_results)) {
- $artist_id = $r->id;
- } //if found
-
- /* If not found create */
- else {
-
- $sql = "INSERT INTO artist (name, prefix) VALUES ('$artist', '$prefix')";
- $db_results = mysql_query($sql, dbh());
- $artist_id = mysql_insert_id(dbh());
-
-
- if (!$db_results) {
- echo "Error Inserting Artist:$artist <br />";
- flush();
- }
-
- } //not found
-
- if ($cache_limit) {
-
- $artist_count = count($this->artists);
- if ($artist_count == $cache_limit) {
- $this->artists = array_slice($this->artists,1);
- }
- if (conf('debug')) { log_event($_SESSION['userdata']['username'],'cache',"Adding $artist with $artist_id to Cache",'ampache-catalog'); }
- $array = array($artist => $artist_id);
- $this->artists = array_merge($this->artists, $array);
- unset($array);
-
- } // if cache limit is on..
-
- return $artist_id;
-
- } //check_artist
-
-
- /*!
- @function check_album
- @disucssion Takes $album and checks if there then return id else insert and return id
- @param $album The name of the album
- */
- function check_album($album,$album_year=0) {
-
- /* Clean up the album name */
- $album = trim($album);
- $album = sql_escape($album);
- $album_year = intval($album_year);
-
- // Set it once to reduce function calls
- $cache_limit = conf('album_cache_limit');
-
- /* Ohh no the album has lost it's mojo */
- if (!$album) {
- $album = "Unknown (Orphaned)";
- }
-
- // Remove the prefix so we can sort it correctly
- preg_match("/^(The\s|An\s|A\s)(.*)/i",$album,$matches);
-
- if (count($matches)) {
- $album = $matches[2];
- $prefix = $matches[1];
- }
-
- // Check to see if we've seen this album before
- if (isset($this->albums[$album])) {
- return $this->albums[$album];
- }
-
- /* Setup the Query */
- $sql = "SELECT id FROM album WHERE name LIKE '$album'";
- if ($album_year) { $sql .= " AND year='$album_year'"; }
- $db_results = mysql_query($sql, dbh());
-
- /* If it's found */
- if ($r = mysql_fetch_object($db_results)) {
- $album_id = $r->id;
-
- } //if found
-
- /* If not found create */
- else {
-
- $sql = "INSERT INTO album (name, prefix,year) VALUES ('$album', '$prefix','$album_year')";
- $db_results = mysql_query($sql, dbh());
- $album_id = mysql_insert_id(dbh());
-
- if (!$db_results) {
- echo "Error Inserting Album:$album <br />";
- flush();
- }
-
- } //not found
-
- if ($cache_limit > 0) {
-
- $albums_count = count($this->albums);
-
- if ($albums_count == $cache_limit) {
- $this->albums = array_slice($this->albums,1);
- }
- $array = array($album => $album_id);
- $this->albums = array_merge($this->albums,$array);
- unset($array);
-
- } // if cache limit is on..
-
- return $album_id;
-
- } //check_album
-
-
- /*!
- @function check_genre
- @discussion Finds the Genre_id from the text name
- @param $genre The name of the genre
- */
- function check_genre($genre) {
-
- if (!$genre) {
- return false;
- }
-
- if ($this->genres[$genre]) {
- return $this->genres[$genre];
- }
-
- /* Look in the genre table */
- $genre = sql_escape($genre);
- $sql = "SELECT id FROM genre WHERE name LIKE '$genre'";
- $db_results = mysql_query($sql, dbh());
-
- $results = mysql_fetch_object($db_results);
-
- if (!$results->id) {
- $sql = "INSERT INTO genre (name) VALUES ('$genre')";
- $db_results = mysql_query($sql, dbh());
- $results->id = mysql_insert_id(dbh());
- }
-
- $this->genres[$genre] = $results->id;
-
- return $results->id;
-
- } //check_genre
-
-
- /*!
- @function check_title
- @discussion this checks to make sure something is
- set on the title, if it isn't it looks at the
- filename and trys to set the title based on that
- */
- function check_title($title,$file=0) {
-
- if (strlen(trim($title)) < 1) {
- preg_match("/.+\/(.*)\.....?$/",$file,$matches);
- $title = sql_escape($matches[1]);
- }
-
- return $title;
-
-
- } //check_title
-
-
- /*!
- @function insert_local_song
- @discussion Insert a song that isn't already in the database this
- function is in here so we don't have to create a song object
- @param $file The file name we are adding (full path)
- @param $file_info The information of the file, size etc taken from stat()
- */
- function insert_local_song($file,$file_info) {
-
- /* Create the Audioinfo object and get info */
- $audio_info = new Audioinfo();
- $song_obj = new Song();
- $results = $audio_info->Info($file);
- $results['file'] = $file;
-
- $key = get_tag_type($results);
-
- /* Fill Empty info from filename/path */
- $results = $song_obj->fill_info($results,$this->sort_pattern . "/" . $this->rename_pattern,$this->id,$key);
-
- /* Clean Up the tags */
- $results = clean_tag_info($results,$key,$file);
-
- /* Set the vars here... so we don't have to do the '" . $blah['asd'] . "' */
- $title = sql_escape($results['title']);
- $artist = $results['artist'];
- $album = $results['album'];
- $genre = $results['genre'];
- $bitrate = $results['bitrate'];
- $rate = $results['rate'];
- $mode = $results['mode'];
- $size = $results['size'];
- $song_time = $results['time'];
- $track = $results['track'];
- $year = $results['year'];
- $comment = $results['comment'];
- $current_time = time();
-
- /*
- * We have the artist/genre/album name need to check it in the tables
- * If found then add & return id, else return id
- */
- $artist_id = $this->check_artist($artist);
- $genre_id = $this->check_genre($genre);
- $album_id = $this->check_album($album,$year);
- $title = $this->check_title($title,$file);
- $add_file = sql_escape($results['file']);
-
- $sql = "INSERT INTO song (file,catalog,album,artist,title,bitrate,rate,mode,size,time,track,genre,addition_time,year,comment)" .
- " VALUES ('$add_file','$this->id','$album_id','$artist_id','$title','$bitrate','$rate','$mode','$size','$song_time','$track','$genre_id','$current_time','$year','$comment')";
-
- $db_results = mysql_query($sql, dbh());
-
- if (!$db_results) {
- if (conf('debug')) { log_event($_SESSION['userdata']['username'],'insert',"Unable to insert $file -- $sql",'ampache-catalog'); }
- echo "<span style=\"color: #F00;\">Error Adding $file </span><br />$sql<br />";
- flush();
- }
-
- /* Clear Variables */
- unset($results,$audio_info,$song_obj);
-
- } // insert_local_song
-
- /*!
- @function insert_remote_song
- @discussion takes the information gotten from XML-RPC and
- inserts it into the local database. The filename
- ends up being the url.
- */
- function insert_remote_song($song) {
-
- $url = sql_escape($song->file);
- $title = $this->check_title($song->title);
- $title = sql_escape($title);
- $comment = sql_escape($song->comment);
- $current_time = time();
-
- $sql = "INSERT INTO song (file,catalog,album,artist,title,bitrate,rate,mode,size,time,track,genre,addition_time,year,comment)" .
- " VALUES ('$url','$song->catalog','$song->album','$song->artist','$title','$song->bitrate','$song->rate','$song->mode','$song->size','$song->time','$song->track','$song->genre','$current_time','$song->year','$comment')";
- $db_results = mysql_query($sql, dbh());
-
- if (!$db_results) {
- if (conf('debug')) { log_event($_SESSION['userdata']['username'],'insert',"Unable to Add Remote $url -- $sql",'ampache-catalog'); }
- echo "<span style=\"color: #FOO;\">Error Adding Remote $url </span><br />$sql<br />\n";
- flush();
- }
-
- } // insert_remote_song
-
-
- /*!
- @function check_remote_song
- @discussion checks to see if a remote song exists in the database or not
- if it find a song it returns the UID
- */
- function check_remote_song($url) {
-
- $url = sql_escape($url);
-
- $sql = "SELECT id FROM song WHERE file='$url'";
- $db_results = mysql_query($sql, dbh());
-
- if ($r = mysql_fetch_object($db_results)) {
- return $r->id;
- }
-
- return false;
-
- } // check_remote_song
-
-
- /*!
- @function check_local_mp3
- @discussion Checks the song to see if it's there already returns true if found, false if not
- @param $full_file The full file name that we are checking
- @param $gather_type=0 If we need to check id3 tags or not
- */
- function check_local_mp3($full_file, $gather_type=0) {
-
- if ($gather_type == 'fast_add') {
- $file_date = filemtime($full_file);
- if ($file_date < $this->last_add) {
- return true;
- }
- }
-
- $full_file = sql_escape($full_file);
-
- $sql = "SELECT id FROM song WHERE file = '$full_file'";
- $db_results = mysql_query($sql, dbh());
-
- //If it's found then return true
- if (@mysql_fetch_row($db_results)) {
- return true;
- }
-
- return false;
-
- } //check_local_mp3
-
- /*!
- @function import_m3u
- @discussion this takes m3u filename and then attempts
- to create a Public Playlist based on the filenames
- listed in the m3u
- */
- function import_m3u($filename) {
-
- $m3u_handle = @fopen($filename,'r');
-
- $data = @fread($m3u_handle,filesize($filename));
-
- $results = explode("\n",$data);
-
- foreach ($results as $value) {
- // Remove extra whitespace
- $value = trim($value);
- if (preg_match("/\.[A-Za-z0-9]{3}$/",$value)) {
- $file[0] = str_replace("/","\\",$value);
- $file[1] = str_replace("\\","/",$value);
- /* Search for this filename, cause it's a audio file */
- $sql = "SELECT id FROM song WHERE file LIKE '%" . sql_escape($file[0]) . "' OR file LIKE '%" . sql_escape($file[1]) . "'";
- $db_results = mysql_query($sql, dbh());
- $song_id = mysql_result($db_results,'id');
- if ($song_id) { $songs[] = $song_id; }
- } // if it's a file
-
- } // end foreach line
-
- if (conf('debug')) { log_event($GLOBALS['user']->username,' m3u_parse ',"Parsing $filename - Found: " . count($songs) . " Songs"); }
-
- if (count($songs)) {
- $playlist = new Playlist();
- $playlist_name = "M3U - " . basename($filename);
- $playlist->create_playlist($playlist_name,$GLOBALS['user']->id,'public');
- $playlist->add_songs($songs);
- return true;
- }
-
- return false;
-
- } // import_m3u
-
- /*!
- @function delete_catalog
- @discussion Deletes the catalog and everything assoicated with it
- assumes $this
- */
- function delete_catalog() {
-
- // Do some crazyness to delete all the songs in this catalog
- // from playlists...
- $sql = "SELECT playlist_data.song FROM song,playlist_data,catalog WHERE catalog.id=song.catalog AND playlist_data.song=song.id AND catalog.id='$this->id'";
- $db_results = mysql_query($sql, dbh());
-
- $results = array();
-
- while ($r = mysql_fetch_object($db_results)) {
- $results[] = $r;
- }
-
- foreach ($results as $r) {
- // Clear Playlist Data
- $sql = "DELETE FROM playlist_data WHERE song='$r->song'";
- $db_results = mysql_query($sql, dbh());
-
- } // End Foreach
-
- // First remove the songs in this catalog
- $sql = "DELETE FROM song WHERE catalog = '$this->id'";
- $db_results = mysql_query($sql, dbh());
-
- // Next Remove the Catalog Entry it's self
- $sql = "DELETE FROM catalog WHERE id = '$this->id'";
- $db_results = mysql_query($sql, dbh());
-
- // Run the Aritst/Album Cleaners...
- $this->clean_albums();
- $this->clean_artists();
- $this->clean_stats();
- $this->clean_playlists();
- $this->clean_flagged();
-
- } // delete_catalog
-
-
- /*!
- @function remove_songs
- @discussion removes all songs sent in $songs array from the
- database, it doesn't actually delete them...
- */
- function remove_songs($songs) {
-
- foreach($songs as $song) {
- $sql = "DELETE FROM song WHERE id = '$song'";
- $db_results = mysql_query($sql, dbh());
- }
-
- } // remove_songs
-
-} //end of catalog class
-
-?>
diff --git a/modules/class/error.php b/modules/class/error.php
deleted file mode 100644
index 9283e29d..00000000
--- a/modules/class/error.php
+++ /dev/null
@@ -1,94 +0,0 @@
-<?php
-/*
-
- 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 Error handler requires error_results() function
-
-*/
-
-
-class Error {
-
- //Basic Componets
- var $error_state=0;
-
- /* Generated values */
- var $errors = array();
-
- /*!
- @function error
- @discussion this is the constructor for the error class
- */
- function Error() {
-
- return true;
-
- } //constructor
-
- /*!
- @function add_error
- @discussion adds an error to the static array stored in
- error_results()
- */
- function add_error($name,$description) {
-
- $array = array($name=>$description);
-
- error_results($array);
- $this->error_state = 1;
-
- return true;
-
- } // add_error
-
-
- /*!
- @function has_error
- @discussion returns true if the name given has an error,
- false if it doesn't
- */
- function has_error($name) {
-
- $results = error_results($name);
-
- if (!empty($results)) {
- return true;
- }
-
- return false;
-
- } // has_error
-
- /*!
- @function print_error
- @discussion prints out the error for a name if it exists
- */
- function print_error($name) {
-
- if ($this->has_error($name)) {
- echo "<div class=\"fatalerror\">" . error_results($name) . "</div>\n";
- }
-
- } // print_error
-
-} //end error class
-?>
diff --git a/modules/class/genre.class.php b/modules/class/genre.class.php
deleted file mode 100644
index 9d5e4d4e..00000000
--- a/modules/class/genre.class.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?
-/*
-
- Copyright 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.
-
-*/
-
-/**
- * Genre Class
- * This class takes care of the genre object
- */
-class Genre {
-
- /* Variables */
- var $id;
- var $name;
-
- /**
- * Constructor
- * @package Genre
- * @catagory Constructor
- */
- function Genre() {
-
-
- } // genre
-
-} //end of genre class
-
-?>
diff --git a/modules/class/playlist.php b/modules/class/playlist.php
deleted file mode 100644
index 130537af..00000000
--- a/modules/class/playlist.php
+++ /dev/null
@@ -1,366 +0,0 @@
-<?
-/*
-
- 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
-
-?>
diff --git a/modules/class/song.php b/modules/class/song.php
deleted file mode 100644
index 47600ee5..00000000
--- a/modules/class/song.php
+++ /dev/null
@@ -1,658 +0,0 @@
-<?
-/*
-
- Copyright (c) 2004 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 Song Class
-*/
-
-class Song {
-
- /* Variables from DB */
- var $id;
- var $file;
- var $album;
- var $artist;
- var $title;
- var $year;
- var $comment;
- var $bitrate;
- var $rate;
- var $mode;
- var $size;
- var $time;
- var $track;
- var $genre;
- var $type;
- var $mime;
- var $played;
- var $addition_time;
- var $update_time;
-
- /*!
- @function Song
- @discussion Song class, for modifing a song.
- @param $song_id The ID of the song
- */
- function Song($song_id = 0) {
-
- /* If we have passed an id then do something */
- if ($song_id) {
-
- /* Assign id for use in get_info() */
- $this->id = $song_id;
-
- /* Get the information from the db */
- if ($info = $this->get_info()) {
-
- /* Assign Vars */
- $this->file = $info->file;
- $this->album = $info->album;
- $this->artist = $info->artist;
- $this->title = $info->title;
- $this->comment = $info->comment;
- $this->year = $info->year;
- $this->bitrate = $info->bitrate;
- $this->rate = $info->rate;
- $this->mode = $info->mode;
- $this->size = $info->size;
- $this->time = $info->time;
- $this->track = $info->track;
- $this->genre = $info->genre;
- $this->addition_time = $info->addition_time;
- $this->catalog = $info->catalog;
- $this->played = $info->played;
- $this->update_time = $info->update_time;
- $this->flagid = $info->flagid;
- $this->flaguser = $info->flaguser;
- $this->flagtype = $info->flagtype;
- $this->flagcomment = $info->flagcomment;
- $this->status = $info->status;
-
- // Format the Type of the song
- $this->format_type();
- }
-
- }
-
- } //constructor
-
-
- /*!
- @function get_info
- @discussion get's the vars for $this out of the database
- @param $this->id Taken from the object
- */
- function get_info() {
-
- /* Grab the basic information from the catalog and return it */
- $sql = "SELECT song.id,file,catalog,album,song.comment,year,artist,".
- "title,bitrate,rate,mode,size,time,track,genre,played,status,update_time,".
- "addition_time,flagged.id as flagid,flagged.user as flaguser,flagged.type ".
- "as flagtype,flagged.date as flagdate,flagged.comment as flagcomment FROM ".
- "song LEFT JOIN flagged ON song.id = flagged.song WHERE song.id = '$this->id'";
- $db_results = mysql_query($sql, dbh());
-
- $results = mysql_fetch_object($db_results);
-
- return $results;
-
- } //get_info
-
- /*!
- @function format_type
- @discussion gets the type of song we are trying to
- play, used to set mime headers and to trick
- players into playing them correctly
- */
- function format_type() {
-
- preg_match('/\.([A-Za-z0-9]+)$/', $this->file,$results);
-
- $this->type = $results[1];
-
- switch ($this->type) {
- case "spx":
- case "ogg":
- $this->mime = "application/x-ogg";
- break;
- case "wma":
- case "WMA":
- case "asf":
- $this->mime = "audio/x-ms-wma";
- break;
- case "mp3":
- case "mpeg3":
- $this->mime = "audio/mpeg";
- break;
- case "rm":
- $this->mime = "audio/x-realaudio";
- break;
- case "flac";
- $this->mime = "audio/x-flac";
- break;
- case 'aac':
- case 'mp4':
- case 'm4a':
- $this->mime = "audio/mp4";
- break;
- case 'mpc':
- $this->mime = "audio/x-musepack";
- break;
- default:
- $this->mime = "audio/mpeg";
- break;
- }
-
- } // get_type
- /*!
- @function get_album_songs
- @discussion gets an array of song objects based on album
- */
- function get_album_songs($album_id) {
-
- $sql = "SELECT id FROM song WHERE album='$album_id'";
- $db_results = mysql_query($sql, libglue_param(libglue_param('dbh_name')));
-
- while ($r = mysql_fetch_object($db_results)) {
- $results[] = new Song($r->id);
- }
-
- return $results;
-
- } // get_album_songs
-
- /*!
- @function get_album_name
- @discussion gets the name of $this->album
- */
- function get_album_name() {
-
- $sql = "SELECT name,prefix FROM album WHERE id='$this->album'";
- $db_results = mysql_query($sql, dbh());
-
- $results = mysql_fetch_array($db_results);
-
- if ($results['prefix']) {
- return $results['prefix'] . " " .$results['name'];
- }
- else {
- return $results['name'];
- }
-
- } // get_album_name
-
- /*!
- @function get_artist_name
- @discussion gets the name of $this->artist
- */
- function get_artist_name() {
-
- $sql = "SELECT name,prefix FROM artist WHERE id='$this->artist'";
- $db_results = mysql_query($sql, dbh());
-
- $results = mysql_fetch_array($db_results);
-
- if ($results['prefix']) {
- return $results['prefix'] . " " . $results['name'];
- }
- else {
- return $results['name'];
- }
-
- } // get_album_name
-
- /*!
- @function get_genre_name
- @discussion gets the name of the genre
- */
- function get_genre_name() {
-
- $sql = "SELECT name FROM genre WHERE id='$this->genre'";
- $db_results = mysql_query($sql, dbh());
-
- $results = mysql_fetch_array($db_results);
-
- return $results['name'];
-
- } // get_genre_name
- /*!
- @function compare_song_information
- @discussion this compares the new ID3 tags of a file against
- the ones in the database to see if they have changed
- it returns false if nothing has changes, or the true
- if they have.
- @param $song The origional song object
- @param $new_song The new version of the song
- */
- function compare_song_information($song,$new_song) {
-
- if ($song->title == "No Title Found") { $song->title = false; }
-
-
- if (trim($song->title) != trim($new_song->title) && strlen($new_song->title) > 0) {
- $array['change'] = true;
- $array['text'] .= "<br />" . _("Title") . " [$song->title] " . _("updated to") . " [$new_song->title]\n";
- } // if title
- if ($song->bitrate != $new_song->bitrate) {
- $array['change'] = true;
- $array['text'] .= "<br />" . _("Bitrate") . " [$song->bitrate] " . _("updated to") . " [$new_song->bitrate]\n";
- } // if bitrate
- if ($song->rate != $new_song->rate) {
- $array['change'] = true;
- $array['text'] .= "<br />" . _("Rate") . " [$song->rate] " . _("updated to") . " [$new_song->rate]\n";
- } // if rate
- if ($song->mode != $new_song->mode) {
- $array['change'] = true;
- $array['text'] .= "<br />" . _("Mode") . " [$song->mode] " . _("updated to") . " [$new_song->mode]\n";
- } // if mode
- if ($song->time != $new_song->time) {
- $array['change'] = true;
- $array['text'] .= "<br />" . _("Time") . " [$song->time] " . _("updated to") . " [$new_song->time]\n";
- } // if time
- if ($song->track != $new_song->track) {
- $array['change'] = true;
- $array['text'] .= "<br />" . _("Track") . " [$song->track] " . _("updated to") . " [$new_song->track]\n";
- } // if track
- if ($song->size != $new_song->size) {
- $array['change'] = true;
- $array['text'] .= "<br />" . _("Filesize") . " [$song->size] " . _("updated to") . " [$new_song->size]\n";
- } // if artist
- if ($song->artist != $new_song->artist) {
- $array['change'] = true;
- $name = $song->get_artist_name();
- $array['text'] .= "<br />" . _("Artist") . " [$name] " . _("updated to") . " [$new_song->f_artist]\n";
- } // if artist
- if ($song->album != $new_song->album) {
- $array['change'] = true;
- $name = $song->get_album_name() . " - " . $song->year;
- $array['text'] .= "<br />" . _("Album") . " [$name] " . _("updated to") . " [$new_song->f_album]\n";
- } // if album
- if ($song->year != $new_song->year) {
- $array['change'] = true;
- $array['text'] .= "<br />" . _("Year") . " [$song->year] " . _("updated to") . " [$new_song->year]\n";
- } // if year
- if (trim($song->comment) != trim($new_song->comment)) {
- $array['change'] = true;
- $array['text'] .= "<br />" . _("Comment") . " [$song->comment] " . _("updated to") . " [$new_song->comment]\n";
- } // if comment
- if ($song->genre != $new_song->genre) {
- $array['change'] = true;
- $name = $song->get_genre_name();
- $array['text'] .= "<br />" . _("Genre") . " [$name] " . _("updated to") . " [$new_song->f_genre]\n";
- } // if genre
-
- return $array;
-
- } // compare_song_information
-
- /*!
- @function update_song
- @discussion this is the main updater for a song it actually
- calls a whole bunch of mini functions to update
- each little part of the song... lastly it updates
- the "update_time" of the song
- @param $song_id The id of the song we are updating
- @param $new_song A object with the new song params
- */
- function update_song($song_id, $new_song) {
-
- $this->update_title($new_song->title,$song_id);
- $this->update_bitrate($new_song->bitrate,$song_id);
- $this->update_rate($new_song->rate,$song_id);
- $this->update_mode($new_song->mode,$song_id);
- $this->update_size($new_song->size,$song_id);
- $this->update_time($new_song->time,$song_id);
- $this->update_track($new_song->track,$song_id);
- $this->update_artist($new_song->artist,$song_id);
- $this->update_genre($new_song->genre,$song_id);
- $this->update_album($new_song->album,$song_id);
- $this->update_year($new_song->year,$song_id);
- $this->update_comment($new_song->comment,$song_id);
- $this->update_played('false',$song_id);
- $this->update_utime($song_id);
-
- } // update_song
-
- /*!
- @function update_year
- @discussion update the year tag
- */
- function update_year($new_year,$song_id=0) {
-
- if ($_SESSION['userdata']['access'] === 'admin') {
- $this->update_item('year',$new_year,$song_id);
- }
- } // update_year
-
- /*!
- @function update_comment
- @discussion updates the comment field
- */
- function update_comment($new_comment,$song_id=0) {
-
- if ($_SESSION['userdata']['access'] === 'admin') {
- $this->update_item('comment',$new_comment,$song_id);
- }
- } // update_comment
-
- /*!
- @function update_title
- @discussion updates the title field
- */
- function update_title($new_title,$song_id=0) {
-
- if ($_SESSION['userdata']['access'] === 'admin') {
- $this->update_item('title',$new_title,$song_id);
- }
- } // update_title
-
- /*!
- @function update_bitrate
- @discussion updates the bitrate field
- */
- function update_bitrate($new_bitrate,$song_id=0) {
-
- if ($_SESSION['userdata']['access'] === 'admin') {
- $this->update_item('bitrate',$new_bitrate,$song_id);
- }
-
- } // update_bitrate
-
- /*!
- @function update_rate
- @discussion updates the rate field
- */
- function update_rate($new_rate,$song_id=0) {
-
- if ($_SESSION['userdata']['access'] === 'admin') {
- $this->update_item('rate',$new_rate,$song_id);
- }
-
- } // update_rate
-
- /*!
- @function update_mode
- @discussion updates the mode field
- */
- function update_mode($new_mode,$song_id=0) {
-
- if ($_SESSION['userdata']['access'] === 'admin') {
- $this->update_item('mode',$new_mode,$song_id);
- }
-
- } // update_mode
-
- /*!
- @function update_size
- @discussion updates the size field
- */
- function update_size($new_size,$song_id=0) {
-
- if ($_SESSION['userdata']['access'] === 'admin') {
- $this->update_item('size',$new_size,$song_id);
- }
-
- } // update_size
-
- /*!
- @function update_time
- @discussion updates the time field
- */
- function update_time($new_time,$song_id=0) {
-
- if ($_SESSION['userdata']['access'] === 'admin') {
- $this->update_item('time',$new_time,$song_id);
- }
-
- } // update_time
-
- /*!
- @function update_track
- @discussion this updates the track field
- */
- function update_track($new_track,$song_id=0) {
-
- if ($_SESSION['userdata']['access'] === 'admin') {
- $this->update_item('track',$new_track,$song_id);
- }
-
- } // update_track
-
- /*!
- @function update_artist
- @discussion updates the artist field
- */
- function update_artist($new_artist,$song_id=0) {
-
- if ($_SESSION['userdata']['access'] === 'admin') {
- $this->update_item('artist',$new_artist,$song_id);
- }
-
- } // update_artist
-
- /*!
- @function update_genre
- @discussion updates the genre field
- */
- function update_genre($new_genre,$song_id=0) {
-
- if ($_SESSION['userdata']['access'] === 'admin') {
- $this->update_item('genre',$new_genre,$song_id);
- }
-
- } // update_genre
-
- /*!
- @function update_album
- @discussion updates the album field
- */
- function update_album($new_album,$song_id=0) {
-
- if ($_SESSION['userdata']['access'] === 'admin') {
- $this->update_item('album',$new_album,$song_id);
- }
-
- } // update_album
-
- /*!
- @function update_utime
- @discussion sets a new update time
- */
- function update_utime($song_id=0,$time=0) {
-
- if (!$time) { $time = time(); }
-
- if ($_SESSION['userdata']['access'] === 'admin') {
- $this->update_item('update_time',$time,$song_id);
- }
-
- } // update_utime
-
- /*!
- @function update_played
- @discussion sets the played flag
- */
- function update_played($new_played,$song_id=0) {
-
- $this->update_item('played',$new_played,$song_id);
-
- } // update_played
-
-
- /*!
- @function update_enabled
- @discussion sets the enabled flag
- */
- function update_enabled($new_enabled,$song_id=0) {
-
- if ($_SESSION['userdata']['access'] === 'admin' || $_SESSION['userdata']['access'] === '100') {
- $this->update_item('status',$new_enabled,$song_id);
- }
-
- } // update_enabled
-
- /*!
- @function update_item
- @discussion this is a generic function that is called
- by all the other update functions...
- @param $field The field we are updating
- @param $value The new value for said field
- @param $song_id ID of the song, uses $this->id by default
- */
- function update_item($field,$value,$song_id=0) {
-
- if (!$song_id) { $song_id = $this->id; }
-
- $value = sql_escape($value);
-
- $sql = "UPDATE song SET $field='$value' WHERE id='$song_id'";
- $db_results = mysql_query($sql, dbh());
-
- $this->{$field} = $value;
-
- } //update_item
-
-
- /*!
- @function format_song
- @discussion this takes a song object
- and formats it for display
- and returns the object cleaned up
- */
- function format_song() {
-
- // Format the filename
- preg_match("/^.*\/(.*?)$/",$this->file, $short);
- $this->f_file = htmlspecialchars($short[1]);
-
- // Format the album name
- $this->f_album_full = $this->get_album_name();
- $this->f_album = truncate_with_ellipse($this->f_album_full,conf('ellipse_threshold_album'));
-
- // Format the artist name
- $this->f_artist_full = $this->get_artist_name();
- $this->f_artist = truncate_with_ellipse($this->f_artist_full,conf('ellipse_threshold_artist'));
-
- // Format the title
- $this->f_title = truncate_with_ellipse($this->title,conf('ellipse_threshold_title'));
-
- // Create A link inclduing the title
- $this->f_link = "<a href=\"" . conf('web_path') . "/song.php?action=m3u&amp;song=" . $this->id . "\">$this->f_title</a>";
-
- // Format the Bitrate
- $this->f_bitrate = intval($this->bitrate/1000) . "-" . strtoupper($this->mode);
-
- // Format Genre
- $this->f_genre = $this->get_genre_name();
-
- // Format the Time
- $min = floor($this->time/60);
- $sec = sprintf("%02d", ($this->time%60) );
- $this->f_time = $min . ":" . $sec;
-
- // Format the size
- $this->f_size = sprintf("%.2f",($this->size/1048576));
-
- // Set style
- if (preg_match("/id3/", $this->flagtype)) { $this->f_style = "style=\"color: #33c;\""; }
- elseif (preg_match("/(mp3|del|sort|ren)/", $this->flagtype)) { $this->f_style = "style=\"color: #C00;\""; }
- if ($this->status === 'disabled') { $this->f_style = "style=\"text-decoration: line-through;\""; }
-
- return true;
-
- } // format_song
-
- /*!
- * @function get_rel_path
- * @discussion returns the path of the song file stripped of the catalog path
- * used for mpd playback
- */
- function get_rel_path($file_path=0,$catalog_id=0) {
-
- if (!$file_path) {
- $info = $this->get_info( );
- $file_path = $info->file;
- }
- if (!$catalog_id) {
- $catalog_id = $info->catalog;
- }
- $catalog = new Catalog( $catalog_id );
- $info = $catalog->get_info( );
- $catalog_path = $info->path;
- $catalog_path = rtrim($catalog_path, "/");
- return( str_replace( $catalog_path . "/", "", $file_path ) );
-
- } // get_rel_path
-
-
- /*!
- @function fill_info
- @discussion this takes the $results from getid3 and attempts to fill
- as much information as possible from the file name using the
- pattern set in the current catalog
- */
- function fill_info($results,$pattern,$catalog_id,$key) {
-
- $filename = $this->get_rel_path($results['file'],$catalog_id);
-
- if (!strlen($results[$key]['title'])) {
- $results[$key]['title'] = $this->get_info_from_filename($filename,$pattern,"%t");
- }
- if (!strlen($results[$key]['track'])) {
- $results[$key]['track'] = $this->get_info_from_filename($filename,$pattern,"%T");
- }
- if (!strlen($results[$key]['year'])) {
- $results[$key]['year'] = $this->get_info_from_filename($filename,$pattern,"%y");
- }
- if (!strlen($results[$key]['album'])) {
- $results[$key]['album'] = $this->get_info_from_filename($filename,$pattern,"%A");
- }
- if (!strlen($results[$key]['artist'])) {
- $results[$key]['artist'] = $this->get_info_from_filename($filename,$pattern,"%a");
- }
- if (!strlen($results[$key]['genre'])) {
- $results[$key]['genre'] = $this->get_info_from_filename($filename,$pattern,"%g");
- }
-
- return $results;
-
- } // fill_info
-
- /*!
- @function get_info_from_filename
- @discussion get information from a filename based on pattern
- */
- function get_info_from_filename($file,$pattern,$tag) {
-
- $preg_pattern = preg_replace("/$tag/","(.+)",$pattern);
- $preg_pattern = preg_replace("/\%\w/",".+",$preg_pattern);
- $preg_pattern = "/" . str_replace("/","\/",$preg_pattern) . "\..+/";
-
- preg_match($preg_pattern,$file,$matches);
-
- return stripslashes($matches[1]);
-
- } // get_info_from_filename
-
-} //end of song class
-
-?>
diff --git a/modules/class/stream.php b/modules/class/stream.php
deleted file mode 100644
index 999dcbca..00000000
--- a/modules/class/stream.php
+++ /dev/null
@@ -1,294 +0,0 @@
-<?php
-/*
-
- 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 Stream Class
-*/
-
-class Stream {
-
- /* Variables from DB */
- var $type;
- var $web_path;
- var $songs = array();
- var $sess;
-
- /*!
- @function stream
- @discussion constructor for the stream class
- */
- function Stream($type='m3u', $song_ids=0) {
-
- $this->type = $type;
- $this->songs = $song_ids;
- $this->web_path = conf('web_path');
-
- if (conf('force_http_play')) {
- $port = conf('http_port');
- $this->web_path = preg_replace("/https/", "http",$this->web_path);
- $this->web_path = preg_replace("/:\d+/",":$port",$this->web_path);
- }
-
- $this->sess = session_id();
- $this->user_id = $_SESSION['userdata']['id'];
-
- } //constructor
-
- /*!
- @function start
- @discussion runs this and depending on the type passed it will
- call the correct function
- */
- function start() {
-
- $methods = get_class_methods('Stream');
- $create_function = "create_" . $this->type;
- if (in_array($create_function,$methods)) {
- $this->{$create_function}();
- }
- // Assume M3u incase they've pooched the type
- else {
- $this->create_m3u();
- }
-
- } // start
-
- /*!
- @function create_simplem3u
- @discussion this creates a simple m3u
- without any of the extended information
- */
- function create_simple_m3u() {
-
- header("Cache-control: public");
- header("Content-Disposition: filename=playlist.m3u");
- header("Content-Type: audio/x-mpegurl;");
- foreach ($this->songs as $song_id) {
- $song = new Song($song_id);
- if ($song->type == ".flac") { $song->type = ".ogg"; }
- if($GLOBALS['user']->prefs['play_type'] == 'downsample') {
- $ds = $GLOBALS['user']->prefs['sample_rate'];
- }
- echo "$this->web_path/play/index.php?song=$song_id&uid=$this->user_id&sid=$this->sess&ds=$ds&stupidwinamp=." . $song->type . "\n";
- } // end foreach
-
- } // simple_m3u
-
- /*!
- @function create_m3u
- @discussion creates an m3u file
- */
- function create_m3u() {
-
- // Send the client an m3u playlist
- header("Cache-control: public");
- header("Content-Disposition: filename=playlist.m3u");
- header("Content-Type: audio/x-mpegurl;");
- echo "#EXTM3U\n";
- foreach($this->songs as $song_id) {
- $song = new Song($song_id);
- $song->format_song();
- if ($song->type == ".flac") { $song->type = ".ogg"; }
- $song_name = $song->f_artist_full . " - " . $song->title . "." . $song->type;
- echo "#EXTINF:$song->time,$song_name\n";
- $sess = $_COOKIE[libglue_param('sess_name')];
- if($GLOBALS['user']->prefs['play_type'] == 'downsample') {
- $ds = $GLOBALS['user']->prefs['sample_rate'];
- }
- echo "$this->web_path/play/index.php?song=$song_id&uid=$this->user_id&sid=$this->sess&ds=$ds&name=/" . rawurlencode($song_name) . "\n";
- } // end foreach
-
- } // create_m3u
-
- /*!
- @function create_pls
- @discussion creates a pls file
- */
- function create_pls() {
-
- // Send the client a pls playlist
- header("Cache-control: public");
- header("Content-Disposition: filename=playlist.pls");
- header("Content-Type: audio/x-scpls;");
- echo "[Playlist]\n";
- echo "NumberOfEntries=" . count($this->songs) . "\n";
- foreach ($this->songs as $song_id) {
- $i++;
- $song = new Song($song_id);
- $song->format_song();
- if ($song->type == ".flac") { $song->type = ".ogg"; }
- $song_name = $song->f_artist_full . " - " . $song->title . "." . $song->type;
- if($GLOBALS['user']->prefs['play_type'] == 'downsample') {
- $ds = $GLOBALS['user']->prefs['sample_rate'];
- }
- $song_url = $this->web_path . "/play/index.php?song=$song_id&uid=$this->user_id&sid=$this->sess&ds=$ds&stupidwinamp=." . $song->type;
- echo "File" . $i . "=$song_url\n";
- echo "Title" . $i . "=$song_name\n";
- echo "Length" . $i . "=-1\n";
- } // end foreach songs
- echo "Version=2\n";
-
- } // create_pls
-
- /*!
- @function create_asx
- @discussion creates an ASZ playlist (Thx Samir Kuthiala)
- */
- function create_asx() {
-
- header("Cache-control: public");
- header("Content-Disposition: filename=playlist.asx");
- header("Content-Type: video/x-ms-asf;");
-
- echo "<ASX version = \"3.0\" BANNERBAR=\"AUTO\">\n";
- echo "<TITLE>Ampache ASX Playlist</TITLE>";
-
- foreach ($this->songs as $song_id) {
- $song = new Song($song_id);
- $song->format_song();
- $song_name = $song->f_artist_full . " - " . $song->title . "." . $song->type;
- echo "<ENTRY>\n";
- echo "<TITLE>".$song->f_album_full ." - ". $song->f_artist_full ." - ". $song->title ."</TITLE>\n";
- echo "<AUTHOR>".$song->f_artist_full."</AUTHOR>\n";
- $sess = $_COOKIE[libglue_param('sess_name')];
- if ($GLOBALS['user']->prefs['play_type'] == 'downsample') {
- $ds = $GLOBALS['user']->prefs['sample_rate'];
- }
- echo "<REF HREF = \"". conf('web_path') . "/play/index.php?song=$song_id&uid=$this->user_id&sid=$sess&ds=$ds&name=/" . rawurlencode($song_name) . "\" />\n";
- echo "</ENTRY>\n";
-
- } // end foreach
-
- echo "</ASX>\n";
-
- } // create_asx
-
- /*!
- @function create_icecast2
- @discussion pushes an icecast stream
- */
- function create_icecast2() {
-
- echo "ICECAST2<br>\n";
-
- // Play the song locally using local play configuration
- if (count($this->songs) > 0) {
- echo "ICECAST2<br>\n";
- exec("killall ices");
- $filename = conf('icecast_tracklist');
- echo "$filename " . _("Opened for writting") . "<br>\n";
-
- /* Open the file for writting */
- if (!$handle = @fopen($filename, "w")) {
- log_event($_SESSION['userdata']['username'],"icecast","Fopen: $filename Failed");
- echo _("Error, cannot write") . " $filename<br>\n";
- exit;
- }
-
- /* Foreach through songs */
- foreach($this->songs as $song_id) {
- $song = new Song($song_id);
- echo "$song->file<br>\n";
- $line = "$song->file\n";
- if (!fwrite($handle, $line)) {
- log_event($_SESSION['userdata']['username'],"icecast","Fwrite: Unabled to write $line into $filename");
- echo _("Error, cannot write song in file") . " $song->file --&gt; $filename";
- exit;
- } // if write fails
-
- } // foreach songs
-
- echo $filename . " " . _("Closed after write") . "<br>\n";
- fclose($handle);
- $cmd = conf('icecast_command');
- $cmd = str_replace("%FILE%", $filename, $cmd);
- if (conf('debug')) {
- log_event($_SESSION['userdata']['username'],"icecast","Exec: $cmd");
- }
- exec($cmd);
- exit;
-
- } // if songs
-
-
- } // create_icecast2
-
- /*!
- @function create_local_play
- @discussion pushes out localplay mojo
- */
- function create_local_play() {
-
- foreach($this->songs as $song_id) {
- $song = new Song($song_id);
- $song->format_song();
- $song_name = $song->f_artist_full . " - " . $song->title . "." . $song->type;
- $url = escapeshellarg("$this->web_path/play/?song=$song_id&uid=$this->user_id&sid=$this->sess&name=" . rawurlencode($song_name));
- $localplay_add = conf('localplay_add');
- $localplay_add = str_replace("%URL%", $url, $localplay_add);
- if (conf('debug')) {
- log_event($_SESSION['userdata']['username'],"localplay","Exec: $localplay_add");
- }
- exec($localplay_add);
- header("Location: " . conf('web_path') . "/index.php");
- }
-
- } // create_localplay
-
- /*!
- @function create_mpd
- @discussion function that passes information to
- MPD
- */
- function create_mpd() {
-
- /* Create the MPD object */
- $myMpd = @new mpd(conf('mpd_host'),conf('mpd_port'),conf('mpd_pass'));
-
- /* Add the files to the MPD playlist */
- addToPlaylist($myMpd,$this->songs);
-
- /* If we've added songs we should start playing */
- $myMpd->Play();
-
- header ("Location: " . return_referer());
-
- } // create_mpd
-
-
- /*!
- @function create_slim
- @discussion this function passes the correct mojo to the slim
- class which is in turn passed to the slimserver
- */
- function create_slim() {
-
-
-
-
-
- } // create_slim
-
-
-} //end of stream class
-
-?>
diff --git a/modules/class/update.php b/modules/class/update.php
deleted file mode 100644
index b006b8e7..00000000
--- a/modules/class/update.php
+++ /dev/null
@@ -1,931 +0,0 @@
-<?php
-/*
-
- 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 Update Class
- @discussion this class handles updating from one version of
- maintain to the next. Versions are a 6 digit number
- 220000
- ^
- Major Revision
-
- 220000
- ^
- Minor Revision
-
- The last 4 digits are a build number...
- If Minor can't go over 9 Major can go as high as we want
-*/
-
-class Update {
-
- var $key;
- var $value;
- var $versions; // array containing version information
-
- /*!
- @function Update
- @discussion Constructor, pulls out information about
- the desired key
- */
- function Update ( $key=0 ) {
-
- if ($key) {
- $info = $this->get_info();
- $this->key = $key;
- $this->value = $info->value;
- $this->versions = $this->populate_version();
- }
-
- } // constructor
-
- /*!
- @function get_info
- @discussion gets the information for the zone
- */
- function get_info() {
- global $conf;
-
- $sql = "SELECT * FROM update_info WHERE key='$this->key'";
- $db_results = mysql_query($sql, dbh());
-
- return mysql_fetch_object($db_results);
-
- } //get_info
-
- /*!
- @function get_version
- @discussion this checks to see what version you are currently running
- because we may not have the update_info table we have to check
- for it's existance first.
- */
- function get_version() {
-
-
- /* Make sure that update_info exits */
- $sql = "SHOW TABLES LIKE 'update_info'";
- $db_results = mysql_query($sql, dbh());
- // If no table
- if (!mysql_num_rows($db_results)) {
-
- $version = '310000';
-
- } // if table isn't found
-
- else {
- // If we've found the update_info table, let's get the version from it
- $sql = "SELECT * FROM update_info WHERE `key`='db_version'";
- $db_results = mysql_query($sql, dbh());
- $results = mysql_fetch_object($db_results);
- $version = $results->value;
- }
-
- return $version;
-
- } // get_version
-
- /*!
- @function format_version
- @discussion make the version number pretty
- */
- function format_version($data) {
-
- $new_version = substr($data,0,strlen($data) - 5) . "." . substr($data,strlen($data)-5,1) . " Build:" .
- substr($data,strlen($data)-4,strlen($data));
-
- return $new_version;
-
- } // format_version
-
- /*!
- @function need_update
- @discussion checks to see if we need to update
- maintain at all
- */
- function need_update() {
-
- $current_version = $this->get_version();
-
- if (!is_array($this->versions)) {
- $this->versions = $this->populate_version();
- }
-
- /*
- Go through the versions we have and see if
- we need to apply any updates
- */
- foreach ($this->versions as $update) {
- if ($update['version'] > $current_version) {
- return true;
- }
-
- } // end foreach version
-
- return false;
-
- } // need_update
-
-
- /*!
- @function populate_version
- @discussion just sets an array the current differences
- that require an update
- */
- function populate_version() {
-
- /* Define the array */
- $version = array();
-
- /* Version 3.2 Build 0001 */
- $update_string = "- Add update_info table to the database<br />" .
- "- Add Now Playing Table<br />" .
- "- Add album art columns to album table<br />" .
- "- Compleatly Changed Preferences table<br />" .
- "- Added Upload table<br />";
- $version[] = array('version' => '320001', 'description' => $update_string);
-
- $update_string = "- Add back in catalog_type for XML-RPC Mojo<br />" .
- "- Add level to access list to allow for play/download/xml-rpc share permissions<br />" .
- "- Changed access_list table to allow start-end (so we can set full ip ranges)<br />" .
- "- Add default_play to preferences to allow quicktime/localplay/stream<br />" .
- "- Switched Artist ID from 10 --> 11 to match other tables<br />";
- $version[] = array('version' => '320002', 'description' => $update_string);
-
- $update_string = "- Added a last_seen field user table to track users<br />" .
- "- Made preferences table key/value based<br />";
-
- $version[] = array('version' => '320003', 'description' => $update_string);
-
- $update_string = "- Added play_type to preferences table<br />" .
- "- Removed multicast,downsample,localplay from preferences table<br />" .
- "- Dropped old config table which was no longer needed<br />";
-
- $version[] = array('version' => '320004', 'description' => $update_string);
-
- $update_string = "- Added type to preferences to allow for site/user preferences<br />";
-
- $version[] = array('version' => '330000', 'description' => $update_string);
-
- $update_string = "- Added Year to album table<br />" .
- "- Increased length of password field in User table<br />";
-
- $version[] = array('version' => '330001', 'description' => $update_string);
-
- $update_string = "- Changed user.access to varchar from enum for more flexibility<br />" .
- "- Added catalog.private for future catalog access control<br />" .
- "- Added user_catalog table for future catalog access control<br />";
-
-
- $version[] = array('version' => '330002', 'description' => $update_string);
-
- $update_string = "- Added user_preferences table to once and for all fix preferences.<br />" .
- "- Moved Contents of preferences into new table, and modifies old preferences table.<br />";
-
- $version[] = array('version' => '330003', 'description' => $update_string);
-
- $update_string = "- Changed song comment from varchar255 in order to handle comments longer than 255 chr.<br />" .
- "- Added Language and Playlist Type as a per user preference.<br />" .
- "- Added Level to Catalog_User table for future use.<br />" .
- "- Added gather_types to Catalog table for future use.<br />";
-
-
- $version[] = array('version' => '330004', 'description' => $update_string);
-
- $update_string = "- Added Theme config option.<br />";
-
- $version[] = array('version' => '331000', 'description' => $update_string);
-
- $update_string = "- Added Elipse Threshold Preferences.<br />";
-
- $version[] = array('version' => '331001', 'description' => $update_string);
-
- $update_string = "- Added Show bottom menu option.<br />";
- $version[] = array('version' => '331002', 'description' => $update_string);
-
- $update_string = "- Cleaned up user management.<br />";
-
- $version[] = array('version' => '331003', 'description' => $update_string);
-
-
- return $version;
-
- } // populate_version
-
- /*!
- @function display_update
- @discussion This displays a list of the needed
- updates to the database. This will actually
- echo out the list...
- */
- function display_update() {
-
- $current_version = $this->get_version();
- if (!is_array($this->versions)) {
- $this->versions = $this->populate_version();
- }
-
- echo "<ul>\n";
-
- foreach ($this->versions as $version) {
-
- if ($version['version'] > $current_version) {
- $updated = true;
- echo "<b>Version: " . $this->format_version($version['version']) . "</b><br />";
- echo $version['description'] . "<br />\n";
- } // if newer
-
- } // foreach versions
-
- echo "</ul>\n";
-
- if (!$updated) { echo "<p align=\"center\">No Updates Needed [<a href=\"" . conf('web_path') . "\">Return]</a></p>"; }
- } // display_update
-
- /*!
- @function run_update
- @discussion This function actually updates the db.
- it goes through versions and finds the ones
- that need to be run. Checking to make sure
- the function exists first.
- */
- function run_update() {
-
- /* Nuke All Active session before we start the mojo */
- $sql = "DELETE * FROM session";
- $db_results = mysql_query($sql, dbh());
-
-
- $methods = array();
-
- $current_version = $this->get_version();
-
- $methods = get_class_methods('Update');
-
- if (!is_array($this->versions)) {
- $this->versions = $this->populate_version();
- }
-
- foreach ($this->versions as $version) {
-
-
- // If it's newer than our current version
- // let's see if a function exists and run the
- // bugger
- if ($version['version'] > $current_version) {
- $update_function = "update_" . $version['version'];
- if (in_array($update_function,$methods)) {
- $this->{$update_function}();
- }
-
- }
-
- } // end foreach version
-
- } // run_update
-
- /*!
- @function set_version
- @discussion sets a new version takes
- a key and value
- */
- function set_version($key,$value) {
-
- $sql = "UPDATE update_info SET value='$value' WHERE `key`='$key'";
- $db_results = mysql_query($sql, dbh());
-
- } //set_version
-
- /*!
- @function update_320001
- @discussion Migration function for 3.2 Build 0001
- */
- function update_320001() {
-
- // Add the update_info table to the database
- $sql = "CREATE TABLE `update_info` (`key` VARCHAR( 128 ) NOT NULL ,`value` VARCHAR( 255 ) NOT NULL ,INDEX ( `key` ) )";
- $db_results = mysql_query($sql, dbh());
-
- // Insert the first version info
- $sql = "INSERT INTO update_info (`key`,`value`) VALUES ('db_version','320001')";
- $db_results = mysql_query($sql, dbh());
-
- // Add now_playing table to database
- $sql = "CREATE TABLE now_playing (" .
- "id int(11) unsigned NOT NULL auto_increment, " .
- "song_id int(11) unsigned NOT NULL default '0', " .
- "user_id int(11) unsigned default NULL, " .
- "start_time int(11) unsigned NOT NULL default '0', " .
- "PRIMARY KEY (id) " .
- ") TYPE=MyISAM";
- $db_results = mysql_query($sql, dbh());
-
- // Add the upload table to the database
- $sql = "CREATE TABLE upload ( id int(11) unsigned NOT NULL auto_increment, `user` int(11) unsigned NOT NULL," .
- "`file` varchar(255) NOT NULL , `comment` varchar(255) NOT NULL , action enum('add','quarantine','delete') NOT NULL default 'quarantine', " .
- "addition_time int(11) unsigned default '0', PRIMARY KEY (id), KEY action (`action`), KEY user (`user`) )";
- $db_results = mysql_query($sql, dbh());
-
- /*
- Ok we need to compleatly tweak the preferences table
- first things first, nuke the damn thing so we can
- setup our new mojo
- */
- $sql = "DROP TABLE `preferences`";
- $db_results = mysql_query($sql, dbh());
-
- $sql = "CREATE TABLE `preferences` (`id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT , `user` INT( 11 ) UNSIGNED NOT NULL ," .
- "`download` ENUM( 'true', 'false' ) DEFAULT 'false' NOT NULL , `upload` ENUM( 'disabled', 'html', 'gui' ) DEFAULT 'disabled' NOT NULL ," .
- "`downsample` ENUM( 'true', 'false' ) DEFAULT 'false' NOT NULL , `local_play` ENUM( 'true', 'false' ) DEFAULT 'false' NOT NULL ," .
- "`multicast` ENUM( 'true', 'false' ) DEFAULT 'false' NOT NULL , `quarantine` ENUM( 'true', 'false' ) DEFAULT 'true' NOT NULL ," .
- "`popular_threshold` INT( 11 ) UNSIGNED DEFAULT '10' NOT NULL , `font` VARCHAR( 255 ) DEFAULT 'Verdana, Helvetica, sans-serif' NOT NULL ," .
- "`bg_color1` VARCHAR( 32 ) DEFAULT '#ffffff' NOT NULL , `bg_color2` VARCHAR( 32 ) DEFAULT '#000000' NOT NULL , `base_color1` VARCHAR( 32 ) DEFAULT '#bbbbbb' NOT NULL , " .
- "`base_color2` VARCHAR( 32 ) DEFAULT '#dddddd' NOT NULL , `font_color1` VARCHAR( 32 ) DEFAULT '#222222' NOT NULL , " .
- "`font_color2` VARCHAR( 32 ) DEFAULT '#000000' NOT NULL , `font_color3` VARCHAR( 32 ) DEFAULT '#ffffff' NOT NULL , " .
- "`row_color1` VARCHAR( 32 ) DEFAULT '#cccccc' NOT NULL , `row_color2` VARCHAR( 32 ) DEFAULT '#bbbbbb' NOT NULL , " .
- "`row_color3` VARCHAR( 32 ) DEFAULT '#dddddd' NOT NULL , `error_color` VARCHAR( 32 ) DEFAULT '#990033' NOT NULL , " .
- "`font_size` INT( 11 ) UNSIGNED DEFAULT '10' NOT NULL , `upload_dir` VARCHAR( 255 ) NOT NULL , " .
- "`sample_rate` INT( 11 ) UNSIGNED DEFAULT '32' NOT NULL , PRIMARY KEY ( `id` ), KEY user (`user`) )";
- $db_results = mysql_query($sql, dbh());
-
- $sql = "INSERT INTO preferences (`user`,`font_size`) VALUES ('0','12')";
- $db_results = mysql_query($sql, dbh());
-
- // Now we need to give everyone some preferences
- $sql = "SELECT * FROM user";
- $db_results = mysql_query($sql, dbh());
-
- while ($r = mysql_fetch_object($db_results)) {
- $users[] = $r;
- }
-
- foreach ($users as $user) {
- $sql = "INSERT INTO preferences (`user`) VALUES ('$user->id')";
- $db_results = mysql_query($sql, dbh());
- }
-
- // Add album art columns to album table
- $sql = "ALTER TABLE album ADD art MEDIUMBLOB, ADD art_mime VARCHAR(128)";
- $db_result = mysql_query($sql, dbh());
-
- } // update_320001
-
- /*!
- @function update_320002
- @discussion update to alpha 2
- */
- function update_320002() {
-
- /* Add catalog_type back in for XML-RPC */
- $sql = "ALTER TABLE `catalog` ADD `catalog_type` ENUM( 'local', 'remote' ) DEFAULT 'local' NOT NULL AFTER `path`";
- $db_results = mysql_query($sql, dbh());
-
- /* Add default_play to pick between stream/localplay/quicktime */
- $sql = "ALTER TABLE `preferences` ADD `default_play` VARCHAR( 128 ) DEFAULT 'stream' NOT NULL AFTER `popular_threshold`";
- $db_results = mysql_query($sql, dbh());
-
- /* Should be INT(11) Why not eah? */
- $sql = "ALTER TABLE `artist` CHANGE `id` `id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT";
- $db_results = mysql_query($sql, dbh());
-
- /* Add level to access_list so we can limit playback/download/xml-rpc share */
- $sql = "ALTER TABLE `access_list` ADD `level` SMALLINT( 3 ) UNSIGNED DEFAULT '5' NOT NULL";
- $db_results = mysql_query($sql, dbh());
-
- /* Shouldn't be zero fill... not needed */
- $sql = "ALTER TABLE `user` CHANGE `offset_limit` `offset_limit` INT( 5 ) UNSIGNED DEFAULT '00050' NOT NULL";
- $db_results = mysql_query($sql, dbh());
-
- /* Let's knock it up a notch 11.. BAM */
- $sql = "ALTER TABLE `user` CHANGE `id` `id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT";
- $db_results = mysql_query($sql, dbh());
-
- /* Change IP --> Start */
- $sql = "ALTER TABLE `access_list` CHANGE `ip` `start` INT( 11 ) UNSIGNED NOT NULL";
- $db_results = mysql_query($sql, dbh());
-
- /* Add End */
- $sql = "ALTER TABLE `access_list` ADD `end` INT( 11 ) UNSIGNED NOT NULL AFTER `start`";
- $db_results = mysql_query($sql, dbh());
-
- /* Update Version */
- $this->set_version('db_version', '320002');
-
- } // update_320002
-
-
- /*!
- @function update_320003
- @discussion updates to the alpha 3 of 3.2
- */
- function update_320003() {
-
- /* Add last_seen to user table */
- $sql = "ALTER TABLE `user` ADD `last_seen` INT( 11 ) UNSIGNED NOT NULL";
- $db_results = mysql_query($sql, dbh());
-
- /*
- Load the preferences table into an array
- so we can migrate it to the new format
- */
- $sql = "SELECT * FROM preferences";
- $db_results = mysql_query($sql, dbh());
-
- $results = array();
-
- while ($r = mysql_fetch_object($db_results)) {
- $results[$r->user]['download'] = $r->download;
- $results[$r->user]['upload'] = $r->upload;
- $results[$r->user]['downsample'] = $r->downsample;
- $results[$r->user]['local_play'] = $r->local_play;
- $results[$r->user]['multicast'] = $r->multicast;
- $results[$r->user]['quarantine'] = $r->quarantine;
- $results[$r->user]['popular_threshold'] = $r->popular_threshold;
- $results[$r->user]['default_play'] = $r->default_play;
- $results[$r->user]['font'] = $r->font;
- $results[$r->user]['bg_color1'] = $r->bg_color1;
- $results[$r->user]['bg_color2'] = $r->bg_color2;
- $results[$r->user]['base_color1'] = $r->base_color1;
- $results[$r->user]['base_color2'] = $r->base_color2;
- $results[$r->user]['font_color1'] = $r->font_color1;
- $results[$r->user]['font_color2'] = $r->font_color2;
- $results[$r->user]['font_color3'] = $r->font_color3;
- $results[$r->user]['row_color1'] = $r->row_color1;
- $results[$r->user]['row_color2'] = $r->row_color2;
- $results[$r->user]['row_color3'] = $r->row_color3;
- $results[$r->user]['error_color'] = $r->error_color;
- $results[$r->user]['font_size'] = $r->font_size;
- $results[$r->user]['upload_dir'] = $r->upload_dir;
- $results[$r->user]['sample_rate'] = $r->sample_rate;
-
- } // while preferences
-
- /* Drop the preferences table so we can start over */
- $sql = "DROP TABLE `preferences`";
- $db_results = mysql_query($sql, dbh()) or die('Query failed: ' . mysql_error());
-
- /* Create the new preferences table */
- $sql = "CREATE TABLE `preferences` (`key` VARCHAR( 255 ) NOT NULL , `value` VARCHAR( 255 ) NOT NULL , `user` INT( 11 ) UNSIGNED NOT NULL)";
- $db_results = mysql_query($sql, dbh());
-
- $sql = "ALTER TABLE `preferences` ADD INDEX ( `key` )";
- $db_results = mysql_query($sql, dbh());
-
- $sql = "ALTER TABLE `preferences` ADD INDEX ( `user` )";
- $db_results = mysql_query($sql, dbh());
-
-
- $user = new User();
-
- /* Populate the mofo! */
- foreach ($results as $key => $data) {
-
- $user->add_preference('download',$results[$key]['download'],$key);
- $user->add_preference('upload',$results[$key]['upload'], $key);
- $user->add_preference('downsample',$results[$key]['downsample'], $key);
- $user->add_preference('local_play', $results[$key]['local_play'], $key);
- $user->add_preference('multicast', $results[$key]['multicast'], $key);
- $user->add_preference('quarantine', $results[$key]['quarantine'], $key);
- $user->add_preference('popular_threshold',$results[$key]['popular_threshold'], $key);
- $user->add_preference('font', $results[$key]['font'], $key);
- $user->add_preference('bg_color1',$results[$key]['bg_color1'], $key);
- $user->add_preference('bg_color2',$results[$key]['bg_color2'], $key);
- $user->add_preference('base_color1',$results[$key]['base_color1'], $key);
- $user->add_preference('base_color2',$results[$key]['base_color2'], $key);
- $user->add_preference('font_color1',$results[$key]['font_color1'], $key);
- $user->add_preference('font_color2',$results[$key]['font_color2'], $key);
- $user->add_preference('font_color3',$results[$key]['font_color3'], $key);
- $user->add_preference('row_color1',$results[$key]['row_color1'], $key);
- $user->add_preference('row_color2',$results[$key]['row_color2'], $key);
- $user->add_preference('row_color3',$results[$key]['row_color3'], $key);
- $user->add_preference('error_color', $results[$key]['error_color'], $key);
- $user->add_preference('font_size', $results[$key]['font_size'], $key);
- $user->add_preference('upload_dir', $results[$key]['upload_dir'], $key);
- $user->add_preference('sample_rate', $results[$key]['sample_rate'], $key);
-
- } // foreach preferences
-
- /* Update Version */
- $this->set_version('db_version', '320003');
-
- } // update_320003
-
- /*!
- @function update_320004
- @discussion updates to the 320004
- version of the db
- */
- function update_320004() {
-
- $results = array();
-
- $sql = "SELECT * FROM preferences WHERE `key`='local_play' AND `value`='true'";
- $db_results = mysql_query($sql, dbh());
-
- while ($r = mysql_fetch_object($db_results)) {
- $results[$r->user] = 'local_play';
- }
-
- $sql = "SELECT * FROM preferences WHERE `key`='downsample' AND `value`='true'";
- $db_results = mysql_query($sql, dbh());
-
- while ($r = mysql_fetch_object($db_results)) {
- $results[$r->user] = 'downsample';
- }
-
- $sql = "SELECT * FROM preferences WHERE `key`='multicast' AND `value`='true'";
- $db_results = mysql_query($sql, dbh());
-
- while ($r = mysql_fetch_object($db_results)) {
- $results[$r->user] = 'multicast';
- }
-
- $sql = "SELECT DISTINCT(user) FROM preferences";
- $db_results = mysql_query($sql, dbh());
-
- while ($r = mysql_fetch_object($db_results)) {
- if (!isset($results[$r->user])) {
- $results[$r->user] = 'normal';
- }
- }
-
- foreach ($results as $key => $value) {
- $sql = "INSERT INTO preferences (`key`,`value`,`user`) VALUES ('play_type','$value','$key')";
- $db_results = mysql_query($sql, dbh());
- }
-
- $sql = "DELETE FROM preferences WHERE `key`='downsample'";
- $db_results = mysql_query($sql, dbh());
-
- $sql = "DELETE FROM preferences WHERE `key`='local_play'";
- $db_results = mysql_query($sql, dbh());
-
- $sql = "DELETE FROM preferences WHERE `key`='multicast'";
- $db_results = mysql_query($sql, dbh());
-
- $sql = "DROP TABLE `config`";
- $db_results = mysql_query($sql, dbh());
-
- /* Update Version */
- $this->set_version('db_version', '320004');
-
- } // update_320004
-
- /*!
- @function update_330000
- @discussion updates to 3.3 Build 0
- */
- function update_330000() {
-
- /* Add Type to preferences */
- $sql = "ALTER TABLE `preferences` ADD `type` VARCHAR( 128 ) NOT NULL";
- $db_results = mysql_query($sql, dbh());
-
- /* Set Type on current preferences */
- $sql = "UPDATE `preferences` SET type='user'";
- $db_results = mysql_query($sql, dbh());
-
- /* Add New Preferences */
- $new_prefs[] = array('key' => 'local_length', 'value' => libglue_param('local_length'));
- $new_prefs[] = array('key' => 'site_title', 'value' => conf('site_title'));
- $new_prefs[] = array('key' => 'access_control', 'value' => conf('access_control'));
- $new_prefs[] = array('key' => 'xml_rpc', 'value' => conf('xml_rpc'));
- $new_prefs[] = array('key' => 'lock_songs', 'value' => conf('lock_songs'));
- $new_prefs[] = array('key' => 'force_http_play', 'value' => conf('force_http_play'));
- $new_prefs[] = array('key' => 'http_port', 'value' => conf('http_port'));
- $new_prefs[] = array('key' => 'do_mp3_md5', 'value' => conf('do_mp3_md5'));
- $new_prefs[] = array('key' => 'catalog_echo_count', 'value' => conf('catalog_echo_count'));
- $new_prefs[] = array('key' => 'no_symlinks', 'value' => conf('no_symlinks'));
- $new_prefs[] = array('key' => 'album_cache_limit', 'value' => conf('album_cache_limit'));
- $new_prefs[] = array('key' => 'artist_cache_limit', 'value' => conf('artist_cache_limit'));
- $new_prefs[] = array('key' => 'memory_limit', 'value' => conf('memory_limit'));
- $new_prefs[] = array('key' => 'refresh_limit', 'value' => conf('refresh_interval'));
-
- foreach ($new_prefs as $pref) {
- $sql = "INSERT INTO `preferences` (`key`,`value`,`type`) VALUES ('".$pref['key']."','".$pref['value']."','system')";
- $db_results = mysql_query($sql, dbh());
- }
-
-
- /* Update Version */
- $this->set_version('db_version','330000');
-
-
- } // update_330000
-
-
- /*!
- @function update_330001
- @discussion adds year to album and tweaks
- the password field in session
- */
- function update_330001() {
-
- /* Add Year to Album Table */
- $sql = "ALTER TABLE `album` ADD `year` INT( 4 ) UNSIGNED NOT NULL AFTER `prefix`";
- $db_results = mysql_query($sql, dbh());
-
- /* Alter Password Field */
- $sql = "ALTER TABLE `user` CHANGE `password` `password` VARCHAR( 64 ) NOT NULL";
- $db_results = mysql_query($sql, dbh());
-
- /* Update Version */
- $this->set_version('db_version', '330001');
-
- } // update_330001
-
- /*!
- @function update_330002
- @discussion changes user.access from enum to a
- varchr field
- */
- function update_330002() {
-
- /* Alter user table */
- $sql = "ALTER TABLE `user` CHANGE `access` `access` VARCHAR( 64 ) NOT NULL";
- $db_results = mysql_query($sql, dbh());
-
- /* Add private option to catalog */
- $sql = "ALTER TABLE `catalog` ADD `private` INT( 1 ) UNSIGNED DEFAULT '0' NOT NULL AFTER `enabled`";
- $db_results = mysql_query($sql, dbh());
-
- /* Add new user_catalog table */
- $sql = "CREATE TABLE `user_catalog` ( `user` INT( 11 ) UNSIGNED NOT NULL , `catalog` INT( 11 ) UNSIGNED NOT NULL )";
- $db_results = mysql_query($sql, dbh());
-
- /* Update Version */
- $this->set_version('db_version', '330002');
-
- } // update_330002
-
- /*!
- @function update_330003
- @discussion adds user_preference and modifies the
- existing preferences table
- */
- function update_330003() {
-
- /* Add new user_preference table */
- $sql = "CREATE TABLE `user_preference` ( `user` INT( 11 ) UNSIGNED NOT NULL , `preference` INT( 11 ) UNSIGNED NOT NULL, `value` VARCHAR( 255 ) NOT NULL )";
- $db_results = mysql_query($sql, dbh());
-
- /* Add indexes */
- $sql = "ALTER TABLE `user_preference` ADD INDEX ( `user` )";
- $db_results = mysql_query($sql, dbh());
-
- $sql = "ALTER TABLE `user_preference` ADD INDEX ( `preference` )";
- $db_results = mysql_query($sql, dbh());
-
- /* Pull and store all preference information */
- $sql = "SELECT * FROM preferences";
- $db_results = mysql_query($sql, dbh());
-
- $results = array();
-
- while ($r = mysql_fetch_object($db_results)) {
- $results[] = $r;
- }
-
-
- /* Re-combobulate preferences table */
-
- /* Drop the preferences table so we can start over */
- $sql = "DROP TABLE `preferences`";
- $db_results = mysql_query($sql, dbh()) or die('Query failed: ' . mysql_error());
-
- /* Insert new preference table */
- $sql = "CREATE TABLE `preferences` ( `id` INT ( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR ( 128 ) NOT NULL, `value` VARCHAR ( 255 ) NOT NULL," .
- " `description` VARCHAR ( 255 ) NOT NULL, `level` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '100', `type` VARCHAR ( 128 ) NOT NULL, `locked` SMALLINT ( 1 ) NOT NULL Default '1'" .
- ", PRIMARY KEY ( `id` ) )";
- $db_results = mysql_query($sql, dbh()) or die("Query failed: " . mysql_error());
-
- /* Create Array of Preferences */
- $new_prefs = array();
-
- $new_prefs[] = array('name' => 'download', 'value' => '0', 'description' => 'Allow Downloads', 'level' => '100', 'locked' => '0', 'type' => 'user');
- $new_prefs[] = array('name' => 'upload', 'value' => '0', 'description' => 'Allow Uploads', 'level' => '100', 'locked' => '0', 'type' => 'user');
- $new_prefs[] = array('name' => 'quarantine', 'value' => '1', 'description' => 'Quarantine All Uploads', 'level' => '100', 'locked' => '0', 'type' => 'user');
- $new_prefs[] = array('name' => 'popular_threshold', 'value' => '10', 'description' => 'Popular Threshold', 'level' => '25', 'locked' => '0', 'type' => 'user');
- $new_prefs[] = array('name' => 'font', 'value' => 'Verdana, Helvetica, sans-serif', 'description' => 'Interface Font', 'level' => '25', 'locked' => '0', 'type' => 'user');
- $new_prefs[] = array('name' => 'bg_color1', 'value' => '#ffffff', 'description' => 'Background Color 1', 'level' => '25', 'locked' => '0', 'type' => 'user');
- $new_prefs[] = array('name' => 'bg_color2', 'value' => '#000000', 'description' => 'Background Color 2', 'level' => '25', 'locked' => '0', 'type' => 'user');
- $new_prefs[] = array('name' => 'base_color1', 'value' => '#bbbbbb', 'description' => 'Base Color 1', 'level' => '25', 'locked' => '0', 'type' => 'user');
- $new_prefs[] = array('name' => 'base_color2', 'value' => '#dddddd', 'description' => 'Base Color 2', 'level' => '25', 'locked' => '0', 'type' => 'user');
- $new_prefs[] = array('name' => 'font_color1', 'value' => '#222222', 'description' => 'Font Color 1', 'level' => '25', 'locked' => '0', 'type' => 'user');
- $new_prefs[] = array('name' => 'font_color2', 'value' => '#000000', 'description' => 'Font Color 2', 'level' => '25', 'locked' => '0', 'type' => 'user');
- $new_prefs[] = array('name' => 'font_color3', 'value' => '#ffffff', 'description' => 'Font Color 3', 'level' => '25', 'locked' => '0', 'type' => 'user');
- $new_prefs[] = array('name' => 'row_color1', 'value' => '#cccccc', 'description' => 'Row Color 1', 'level' => '25', 'locked' => '0', 'type' => 'user');
- $new_prefs[] = array('name' => 'row_color2', 'value' => '#bbbbbb', 'description' => 'Row Color 2', 'level' => '25', 'locked' => '0', 'type' => 'user');
- $new_prefs[] = array('name' => 'row_color3', 'value' => '#dddddd', 'description' => 'Row Color 3', 'level' => '25', 'locked' => '0', 'type' => 'user');
- $new_prefs[] = array('name' => 'error_color', 'value' => '#990033', 'description' => 'Error Color', 'level' => '25', 'locked' => '0', 'type' => 'user');
- $new_prefs[] = array('name' => 'font_size', 'value' => '10', 'description' => 'Font Size', 'level' => '25', 'locked' => '0', 'type' => 'user');
- $new_prefs[] = array('name' => 'upload_dir', 'value' => '/tmp', 'description' => 'Upload Directory', 'level' => '25', 'locked' => '0', 'type' => 'user');
- $new_prefs[] = array('name' => 'sample_rate', 'value' => '32', 'description' => 'Downsample Bitrate', 'level' => '25', 'locked' => '0', 'type' => 'user');
- $new_prefs[] = array('name' => 'refresh_limit', 'value' => '0', 'description' => 'Refresh Rate for Homepage', 'level' => '100', 'locked' => '0', 'type' => 'system');
- $new_prefs[] = array('name' => 'local_length', 'value' => '900', 'description' => 'Session Expire in Seconds', 'level' => '100', 'locked' => '0', 'type' => 'system');
- $new_prefs[] = array('name' => 'site_title', 'value' => 'For The Love of Music', 'description' => 'Website Title', 'level' => '100', 'locked' => '0', 'type' => 'system');
- $new_prefs[] = array('name' => 'lock_songs', 'value' => '0', 'description' => 'Lock Songs', 'level' => '100', 'locked' => '1', 'type' => 'system');
- $new_prefs[] = array('name' => 'force_http_play', 'value' => '1', 'description' => 'Forces Http play regardless of port', 'level' => '100', 'locked' => '1', 'type' => 'system');
- $new_prefs[] = array('name' => 'http_port', 'value' => '80', 'description' => 'Non-Standard Http Port', 'level' => '100', 'locked' => '1', 'type' => 'system');
- $new_prefs[] = array('name' => 'catalog_echo_count', 'value' => '100', 'description' => 'Catalog Echo Interval', 'level' => '100', 'locked' => '0', 'type' => 'system');
- $new_prefs[] = array('name' => 'no_symlinks', 'value' => '0', 'description' => 'Don\'t Follow Symlinks', 'level' => '100', 'locked' => '0', 'type' => 'system');
- $new_prefs[] = array('name' => 'album_cache_limit', 'value' => '25', 'description' => 'Album Cache Limit', 'level' => '100', 'locked' => '0', 'type' => 'system');
- $new_prefs[] = array('name' => 'artist_cache_limit', 'value' => '50', 'description' => 'Artist Cache Limit', 'level' => '100', 'locked' => '0', 'type' => 'system');
- $new_prefs[] = array('name' => 'play_type', 'value' => 'stream', 'description' => 'Type of Playback', 'level' => '25', 'locked' => '0', 'type' => 'user');
- $new_prefs[] = array('name' => 'direct_link', 'value' => '1', 'description' => 'Allow Direct Links', 'level' => '100', 'locked' => '0', 'type' => 'user');
-
- foreach ($new_prefs as $prefs) {
-
- $sql = "INSERT INTO preferences (`name`,`value`,`description`,`level`,`locked`,`type`) VALUES ('" . $prefs['name'] . "','" . $prefs['value'] ."','". $prefs['description'] ."','" . $prefs['level'] ."','". $prefs['locked'] ."','" . $prefs['type'] . "')";
- $db_results = mysql_query($sql, dbh());
-
- } // foreach prefs
-
-
- /* Re-insert Data into preferences table */
-
- $user = new User();
- $users = array();
-
- foreach ($results as $old_pref) {
- // This makes sure that true/false yes no get turned into 0/1
- $temp_array = fix_preferences(array('old' => $old_pref->value));
- $old_pref->value = $temp_array['old'];
- $user->add_preference($old_pref->key,$old_pref->value,$old_pref->user);
- $users[$old_pref->user] = 1;
- } // end foreach old preferences
-
- /* Fix missing preferences */
- foreach ($users as $userid => $data) {
- $user->fix_preferences($userid);
- } // end foreach user
-
- /* Update Version */
- $this->set_version('db_version', '330003');
-
- } // update_330003
-
- /*!
- @function update_330004
- @discussion changes comment from varchar to text
- and also adds a few preferences options and
- adds the per db art functions
- */
- function update_330004() {
-
- /* Change comment field in song */
- $sql = "ALTER TABLE `song` CHANGE `comment` `comment` TEXT NOT NULL";
- $db_results = mysql_query($sql, dbh());
-
- /* Add Extra Preferences */
- $sql = "INSERT INTO `preferences` ( `id` , `name` , `value` , `description` , `level` , `type` , `locked` ) VALUES ('', 'lang', 'en_US', 'Language', '100', 'user', '0')";
- $db_results = mysql_query($sql, dbh());
-
- $sql = "INSERT INTO `preferences` ( `id` , `name` , `value` , `description` , `level` , `type` , `locked` ) VALUES ('', 'playlist_type','m3u','Playlist Type','100','user','0')";
- $db_results = mysql_query($sql, dbh());
-
- /* Add Gathertype to Catalog for future use */
- $sql = "ALTER TABLE `catalog` ADD `gather_types` VARCHAR( 255 ) NOT NULL AFTER `sort_pattern`";
- $db_results = mysql_query($sql, dbh());
-
- /* Add level to user_catalog for future use */
- $sql = "ALTER TABLE `user_catalog` ADD `level` SMALLINT( 3 ) DEFAULT '25' NOT NULL AFTER `catalog`";
- $db_results = mysql_query($sql, dbh());
-
- /* Fix existing preferences */
- $sql = "SELECT id FROM user";
- $db_results = mysql_query($sql, dbh());
-
- $user = new User(0);
-
- while ($results = mysql_fetch_array($db_results)) {
- $user->fix_preferences($results[0]);
- }
-
- /* Update Version */
- $this->set_version('db_version', '330004');
-
- } // update_330004
-
- /*!
- @function update_331000
- @discussion this updates is for 3.3.1 it adds
- the theme preference.
- */
- function update_331000() {
-
-
- /* Add new preference */
- $sql = "INSERT INTO `preferences` (`id`,`name`,`value`,`description`,`level`,`type`,`locked`) VALUES ('','theme_name','classic','Theme','0','user','0')";
- $db_results = mysql_query($sql, dbh());
-
- /* Fix existing preferecnes */
- $sql = "SELECT DISTINCT(user) FROM user_preference";
- $db_results = mysql_query($sql, dbh());
-
- $user = new User(0);
-
- while ($results = mysql_fetch_array($db_results)) {
- $user->fix_preferences($results[0]);
- }
-
- /* Update Version */
- $this->set_version('db_version','331000');
-
- } // update_331000
-
- /*!
- @function update_331001
- @discussion this adds a few more user preferences
- */
- function update_331001() {
-
- /* Add new preference */
- $sql = "INSERT INTO `preferences` (`id`,`name`,`value`,`description`,`level`,`type`,`locked`) VALUES ('','ellipse_threshold_album','27','Album Ellipse Threshold','0','user','0')";
- $db_results = mysql_query($sql, dbh());
-
- $sql = "INSERT INTO `preferences` (`id`,`name`,`value`,`description`,`level`,`type`,`locked`) VALUES ('','ellipse_threshold_artist','27','Artist Ellipse Threshold','0','user','0')";
- $db_results = mysql_query($sql, dbh());
-
- $sql = "INSERT INTO `preferences` (`id`,`name`,`value`,`description`,`level`,`type`,`locked`) VALUES ('','ellipse_threshold_title','27','Title Ellipse Threshold','0','user','0')";
- $db_results = mysql_query($sql, dbh());
-
- /* Fix existing preferecnes */
- $sql = "SELECT DISTINCT(user) FROM user_preference";
- $db_results = mysql_query($sql, dbh());
-
- $user = new User(0);
-
- while ($results = mysql_fetch_array($db_results)) {
- $user->fix_preferences($results[0]);
- }
-
- /* Update Version */
- $this->set_version('db_version','331001');
-
- } // update_331001
-
-
- function update_331002() {
-
- /* Add new preference */
- $sql = "INSERT INTO `preferences` (`id`,`name`,`value`,`description`,`level`,`type`,`locked`) VALUES ('','display_menu','1','Show Bottom Menu','0','user','0')";
- $db_results = mysql_query($sql, dbh());
- /* Fix existing preferecnes */
- $sql = "SELECT DISTINCT(user) FROM user_preference";
- $db_results = mysql_query($sql, dbh());
-
- $user = new User(0);
-
- while ($results = mysql_fetch_array($db_results)) {
- $user->fix_preferences($results[0]);
- }
-
- /* Update Version */
- $this->set_version('db_version','331002');
-
- } // update_331002
-
- function update_331003() {
-
- /* Add `disabled` column to user table */
- $sql = "ALTER TABLE `user` ADD `disabled` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `access`";
- $db_results = mysql_query($sql, dbh());
-
- /* Set `disabled` to '1' to all users that have an access level of 'disabled',
- * then change their access level to 'user' because an access level of 'disabled'
- * is now going to cause problems.
- */
- $sql = "UPDATE `user` SET `disabled`='1',`access`='user' WHERE `access`='disabled'";
- $db_results = mysql_query($sql, dbh());
-
- $this->set_version('db_version','331003');
-
- } //update 331003
-
- function update_332001() {
-
- $sql = "ALTER TABLE `object_count` CHANGE `object_type` `object_type` ENUM( 'album', 'artist', 'song', 'playlist', 'genre', 'catalog' ) NOT NULL DEFAULT 'song'";
- $sql = "ALTER TABLE `session` CHANGE `type` `type` ENUM( 'sso', 'mysql', 'ldap', 'http' ) NOT NULL DEFAULT 'mysql'";
-
- } // update_332001
-
-} // end update class
-?>
diff --git a/modules/class/user.php b/modules/class/user.php
deleted file mode 100644
index 8f45cfed..00000000
--- a/modules/class/user.php
+++ /dev/null
@@ -1,632 +0,0 @@
-<?php
-/*
-
- 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 User Object
- View object that is thrown into their session
-
-*/
-
-
-class User {
-
- //Basic Componets
- var $username;
- var $id=0;
- var $fullname;
- var $access;
- var $disabled;
- var $offset_limit=25;
- var $email;
- var $last_seen;
-
- function User($username=0,$uid=0) {
-
- if (!$username && !$uid) {
- return true;
- }
-
- $this->username = $username;
- $this->id = $uid;
- $info = $this->get_info();
- $this->username = $info->username;
- $this->id = $info->id;
- $this->id = $info->id;
- $this->fullname = $info->fullname;
- $this->access = $info->access;
- $this->disabled = $info->disabled;
- $this->offset_limit = $info->offset_limit;
- $this->email = $info->email;
- $this->last_seen = $info->last_seen;
- $this->set_preferences();
-
- // Make sure the Full name is always filled
- if (strlen($this->fullname) < 1) { $this->fullname = $this->username; }
-
- } // User
-
-
- /*!
- @function get_info
- @dicussion gets the info!
- */
- function get_info() {
-
- if ($this->username) {
- $sql = "SELECT * FROM user WHERE username='$this->username'";
- }
- else {
- $sql = "SELECT * FROM user WHERE id='$this->id'";
- }
- $db_results = mysql_query($sql, dbh());
-
- return mysql_fetch_object($db_results);
-
- } // get_info
-
- /*!
- @function get_preferences
- @discussion gets the prefs for this specific
- user and returns them as an array
- */
- function get_preferences() {
-
- $sql = "SELECT preferences.name, preferences.description, preferences.type, user_preference.value FROM preferences,user_preference WHERE user_preference.user='$this->id' AND user_preference.preference=preferences.id AND preferences.type='user'";
- $db_results = mysql_query($sql, dbh());
-
- while ($r = mysql_fetch_object($db_results)) {
- $results[] = $r;
- }
-
- return $results;
-
- } // get_preferences
-
- /*!
- @function set_preferences
- @discussion sets the prefs for this specific
- user
- */
- function set_preferences() {
-
- $sql = "SELECT preferences.name,user_preference.value FROM preferences,user_preference WHERE user_preference.user='$this->id' " .
- "AND user_preference.preference=preferences.id AND preferences.type='user'";
- $db_results = mysql_query($sql, dbh());
-
- while ($r = mysql_fetch_object($db_results)) {
- $this->prefs[$r->name] = $r->value;
- }
- } // get_preferences
-
- /*!
- @function get_favorites
- @discussion returns an array of your $type
- favorites
- */
- function get_favorites($type) {
-
- $sql = "SELECT * FROM object_count" .
- " WHERE count > 0" .
- " AND object_type = '$type'" .
- " AND userid = '" . $this->id . "'" .
- " ORDER BY count DESC LIMIT " . conf('popular_threshold');
- $db_result = mysql_query($sql, dbh());
-
- $items = array();
- $web_path = conf('web_path');
-
- while ($r = @mysql_fetch_object($db_result) ) {
- /* If its a song */
- if ($type == 'song') {
- $data = new Song($r->object_id);
- $data->count = $r->count;
- $data->format_song();
- $data->f_name = $data->f_link;
- $items[] = $data;
- }
- /* If its an album */
- elseif ($type == 'album') {
- $data = new Album($r->object_id);
- $data->count = $r->count;
- $data->format_album();
- $items[] = $data;
- }
- /* If its an artist */
- elseif ($type == 'artist') {
- $data = new Artist($r->object_id);
- $data->count = $r->count;
- $data->format_artist();
- $data->f_name = $data->link;
- $items[] = $data;
- }
-
- } // end while
-
- return $items;
-
- } // get_favorites
-
- /*!
- @function is_xmlrpc
- @discussion checks to see if this is a valid
- xmlrpc user
- */
- function is_xmlrpc() {
-
- /* If we aren't using XML-RPC return true */
- if (!conf('xml_rpc')) {
- return false;
- }
-
- //FIXME: Ok really what we will do is check the MD5 of the HTTP_REFERER
- //FIXME: combined with the song title to make sure that the REFERER
- //FIXME: is in the access list with full rights
- return true;
-
- } // is_xmlrpc
-
- /*!
- @function is_logged_in
- @discussion checks to see if $this user is logged in
- */
- function is_logged_in() {
-
- $sql = "SELECT id FROM session WHERE username='$this->id'" .
- " AND expire > ". time();
- $db_results = mysql_query($sql,dbh());
-
- if (mysql_num_rows($db_results)) {
- return true;
- }
-
- return false;
-
- } // is_logged_in
-
- /*!
- @function has_access
- @discussion this function checkes to see if this user has access
- to the passed action (pass a level requirement)
- */
- function has_access($needed_level) {
-
- if ($this->access == "admin") { $level = 100; }
- elseif ($this->access == "user") { $level = 25; }
- else { $level = $this->access; }
-
- if (!conf('use_auth') || conf('demo_mode')) { return true; }
-
- if ($level >= $needed_level) { return true; }
-
- return false;
-
- } // has_access
-
- /*!
- @function update_preference
- @discussion updates a single preference if the query fails
- it attempts to insert the preference instead
- */
- function update_preference($preference_id, $value, $id=0) {
-
- if (!$id) {
- $id = $this->id;
- }
-
- $value = sql_escape($value);
- //FIXME:
- // Do a has_access check here...
-
- $sql = "UPDATE user_preference SET value='$value' WHERE user='$id' AND preference='$preference_id'";
- $db_results = @mysql_query($sql, dbh());
-
- } // update_preference
-
- /*!
- @function add_preference
- @discussion adds a new preference
- @param $key preference name
- @param $value preference value
- @param $id user is
- */
- function add_preference($preference_id, $value, $id=0) {
-
- if (!$id) {
- $id = $this->id;
- }
-
- $value = sql_escape($value);
-
- if (!is_numeric($preference_id)) {
- $sql = "SELECT id FROM preferences WHERE `name`='$preference_id'";
- $db_results = mysql_query($sql, dbh());
- $r = mysql_fetch_array($db_results);
- $preference_id = $r[0];
- } // end if it's not numeric
-
- $sql = "INSERT user_preference SET `user`='$id' , `value`='$value' , `preference`='$preference_id'";
- $db_results = mysql_query($sql, dbh());
-
- } // add_preference
-
- /*!
- @function update_username
- @discussion updates their username
- */
- function update_username($new_username) {
-
- $new_username = sql_escape($new_username);
- $sql = "UPDATE user SET username='$new_username' WHERE id='$this->id'";
- $db_results = mysql_query($sql, dbh());
-
- } // update_username
-
- /*!
- @function update_fullname
- @discussion updates their fullname
- */
- function update_fullname($new_fullname) {
-
- $new_fullname = sql_escape($new_fullname);
- $sql = "UPDATE user SET fullname='$new_fullname' WHERE id='$this->id'";
- $db_results = mysql_query($sql, dbh());
-
- } // update_username
-
- /*!
- @function update_email
- @discussion updates their email address
- */
- function update_email($new_email) {
-
- $new_email = sql_escape($new_email);
- $sql = "UPDATE user SET email='$new_email' WHERE id='$this->id'";
- $db_results = mysql_query($sql, dbh());
-
- } // update_email
-
- /*!
- @function update_offset
- @discussion this updates the users offset_limit
- */
- function update_offset($new_offset) {
-
- $new_offset = sql_escape($new_offset);
- $sql = "UPDATE user SET offset_limit='$new_offset' WHERE id='$this->id'";
- $db_results = mysql_query($sql, dbh());
-
- } // update_offset
-
- /*!
- @function update_access
- @discussion updates their access level
- */
- function update_access($new_access) {
-
- /* Check for all disable */
- if ($new_access == 'disabled') {
- $sql = "SELECT id FROM user WHERE disabled != '1' AND id != '$this->id'";
- $db_results = mysql_query($sql,dbh());
- if (!mysql_num_rows($db_results)) { return false; }
- }
-
- /* Prevent Only User accounts */
- if ($new_access == 'user') {
- $sql = "SELECT id FROM user WHERE (access='admin' OR access='100') AND id != '$this->id'";
- $db_results = mysql_query($sql, dbh());
- if (!mysql_num_rows($db_results)) { return false; }
- }
-
- if ($new_access == 'enabled') {
- $new_access = sql_escape($new_access);
- $sql = "UPDATE user SET disabled='0' WHERE id='$this->id'";
- $db_results = mysql_query($sql, dbh());
- } elseif ($new_access == 'disabled') {
- $new_access = sql_escape($new_access);
- $sql = "UPDATE user SET disabled='1' WHERE id='$this->id'";
- $db_results = mysql_query($sql, dbh());
- $sql = "DELETE FROM session WHERE username='" . sql_escape($this->username) . "'";
- $db_results = mysql_query($sql, dbh());
- } else {
- $new_access = sql_escape($new_access);
- $sql = "UPDATE user SET access='$new_access' WHERE id='$this->id'";
- $db_results = mysql_query($sql, dbh());
- }
-
- } // update_access
-
- /*!
- @function update_last_seen
- @discussion updates the last seen data for this user
- */
- function update_last_seen() {
-
- $sql = "UPDATE user SET last_seen='" . time() . "' WHERE id='$this->id'";
- $db_results = mysql_query($sql, dbh());
-
- } // update_last_seen
-
- /*!
- @function update_user_stats
- @discussion updates the playcount mojo for this
- specific user
- */
- function update_stats($song_id) {
-
- $song_info = new Song($song_id);
- $user = $this->id;
- $dbh = dbh();
-
- if (!$song_info->file) { return false; }
-
- $time = time();
-
- // Play count for this song
- $sql = "UPDATE object_count" .
- " SET date = '$time', count=count+1" .
- " WHERE object_type = 'song'" .
- " AND object_id = '$song_id' AND userid = '$user'";
- $db_result = mysql_query($sql, $dbh);
-
- $rows = mysql_affected_rows();
- if (!$rows) {
- $sql = "INSERT INTO object_count (object_type,object_id,date,count,userid)" .
- " VALUES ('song','$song_id','$time','1','$user')";
- $db_result = mysql_query($sql, $dbh);
- }
-
- // Play count for this artist
- $sql = "UPDATE object_count" .
- " SET date = '$time', count=count+1" .
- " WHERE object_type = 'artist'" .
- " AND object_id = '" . $song_info->artist . "' AND userid = '$user'";
- $db_result = mysql_query($sql, $dbh);
-
- $rows = mysql_affected_rows();
- if (!$rows) {
- $sql = "INSERT INTO object_count (object_type,object_id,date,count,userid)" .
- " VALUES ('artist','".$song_info->artist."','$time','1','$user')";
- $db_result = mysql_query($sql, $dbh);
- }
-
- // Play count for this album
- $sql = "UPDATE object_count" .
- " SET date = '$time', count=count+1" .
- " WHERE object_type = 'album'" .
- " AND object_id = '".$song_info->album."' AND userid = '$user'";
- $db_result = mysql_query($sql, $dbh);
-
- $rows = mysql_affected_rows();
- if (!$rows) {
- $sql = "INSERT INTO object_count (object_type,object_id,date,count,userid)" .
- "VALUES ('album','".$song_info->album."','$time','1','$user')";
- $db_result = mysql_query($sql, $dbh);
- }
-
- // Play count for this genre
- $sql = "UPDATE object_count" .
- " SET date = '$time', count=count+1" .
- " WHERE object_type = 'genre'" .
- " AND object_id = '" . $song_info->genre."' AND userid='$user'";
- $db_results = mysql_query($sql, $dbh);
-
- $rows = mysql_affected_rows();
- if (!$rows) {
- $sql = "INSERT INTO object_count (`object_type`,`object_id`,`date`,`count`,`userid`)" .
- "VALUES ('genre','" . $song_info->genre."','$time','1'1,'$user')";
- $db_results = mysql_query($sql, $dbh);
- }
-
-
- } // update_stats
-
- /*!
- @function create
- @discussion inserts a new user into ampache
- */
- function create($username, $fullname, $email, $password, $access) {
-
- /* Lets clean up the fields... */
- $username = sql_escape($username);
- $fullname = sql_escape($fullname);
- $email = sql_escape($email);
-
- /* Now Insert this new user */
- $sql = "INSERT INTO user (username, fullname, email, password, access) VALUES" .
- " ('$username','$fullname','$email',PASSWORD('$password'),'$access')";
- $db_results = mysql_query($sql, dbh());
- if (!$db_results) { return false; }
- $user_id = mysql_insert_id(dbh());
-
- /* Populates any missing preferences, in this case all of them */
- $this->fix_preferences($user_id);
-
- return $user_id;
-
- } // new
-
- /*!
- @function update_password
- @discussion updates a users password
- */
- function update_password($new_password) {
-
- $sql = "UPDATE user SET password=PASSWORD('$new_password') WHERE id='$this->id'";
- $db_results = mysql_query($sql, dbh());
-
- return true;
- } // update_password
-
-
- /*!
- @function format_favorites
- @discussion takes an array of objects and formats them corrrectly
- and returns a simply array with just <a href values
- */
- function format_favorites($items) {
-
- // The length of the longest item
- $maxlen = strlen($items[0]->count);
-
- // Go through the favs
- foreach ($items as $data) {
-
- // Make all number lengths equal
- $len = strlen($data->count);
- while ($len < $maxlen) {
- $data->count = "0" . $data->count;
- $len++;
- }
-
- $results[] = "<li>[$data->count] - $data->f_name</li>\n";
-
- } // end foreach items
-
- return $results;
-
- } // format_favorites
-
- /*!
- @function fix_preferences
- @discussion this makes sure that the specified user
- has all the correct preferences. This function
- should be run whenever a system preference is run
- it's a cop out... FIXME!
- */
- function fix_preferences($user_id = 0) {
-
- if (!$user_id) {
- $user_id = $this->id;
- }
-
- /* Get All Preferences */
- $sql = "SELECT * FROM user_preference WHERE user='$user_id'";
- $db_results = mysql_query($sql, dbh());
-
- while ($r = mysql_fetch_object($db_results)) {
- /* Check for duplicates */
- if (isset($results[$r->preference])) {
- $r->value = sql_escape($r->value);
- $sql = "DELETE FROM user_preference WHERE user='$user_id' AND preference='$r->preference' AND value='$r->value'";
- $delete_results = mysql_query($sql, dbh());
- } // duplicate
- else {
- $results[$r->preference] = $r;
- }
- } // while results
-
- /*
- If we aren't the 0 user before we continue then grab the
- 0 user's values
- */
- if ($user_id != '0') {
- $sql = "SELECT user_preference.preference,user_preference.value FROM user_preference,preferences " .
- "WHERE user_preference.preference = preferences.id AND user_preference.user='0' AND preferences.type='user'";
- $db_results = mysql_query($sql, dbh());
- while ($r = mysql_fetch_object($db_results)) {
- $zero_results[$r->preference] = $r->value;
- }
- } // if not user 0
-
-
- $sql = "SELECT * FROM preferences";
- if ($user_id != '0') {
- $sql .= " WHERE type='user'";
- }
- $db_results = mysql_query($sql, dbh());
-
-
- while ($r = mysql_fetch_object($db_results)) {
-
- /* Check if this preference is set */
- if (!isset($results[$r->id])) {
- if (isset($zero_results[$r->id])) {
- $r->value = $zero_results[$r->id];
- }
- $sql = "INSERT INTO user_preference (`user`,`preference`,`value`) VALUES ('$user_id','$r->id','$r->value')";
- $insert_db = mysql_query($sql, dbh());
- }
- } // while preferences
-
- } // fix_preferences
-
-
- /*!
- @function delete_stats
- @discussion deletes the stats for this user
- */
- function delete_stats() {
-
- $sql = "DELETE FROM object_count WHERE userid='" . $this->id . "'";
- $db_results = mysql_query($sql, dbh());
-
- } // delete_stats
-
- /*!
- @function delete
- @discussion deletes this user and everything assoicated with it
- */
- function delete() {
-
- /*
- Before we do anything make sure that they aren't the last
- admin
- */
- if ($this->has_access(100)) {
- $sql = "SELECT * FROM user WHERE (level='admin' OR level='100') AND id!='" . $this->id . "'";
- $db_results = mysql_query($sql, dbh());
- if (!mysql_num_rows($db_results)) {
- return false;
- }
- } // if this is an admin check for others
-
- // Delete their playlists
- $sql = "DELETE FROM playlist WHERE owner='$this->id'";
- $db_results = mysql_query($sql, dbh());
-
- // Delete any stats they have
- $sql = "DELETE FROM object_count WHERE userid='$this->id'";
- $db_results = mysql_query($sql, dbh());
-
- // Delete their preferences
- $sql = "DELETE FROM preferences WHERE user='$this->id'";
- $db_results = mysql_query($sql, dbh());
-
- // Delete the user itself
- $sql = "DELETE FROM user WHERE id='$this->id'";
- $db_results = mysql_query($sql, dbh());
-
- return true;
-
- } // delete
-
- /*!
- @function is_online
- @parameter delay how long since last_seen in seconds default of 20 min
- @description calcs difference between now and last_seen
- if less than delay, we consider them still online
- */
- function is_online( $delay = 1200 ) {
- return time() - $this->last_seen <= $delay;
- }
-
-} //end class
-?>
diff --git a/modules/class/view.php b/modules/class/view.php
deleted file mode 100644
index f9de4ee6..00000000
--- a/modules/class/view.php
+++ /dev/null
@@ -1,229 +0,0 @@
-<?
-/*
-
- Copyright (c) 2004 Ampache.org
- All rights reserved.
-
- $CVSHeader: ampache/modules/class/artist.php,v 1.1 2004/03/25 09:12:57 vollmerk Exp $
- $Source: /data/cvsroot/ampache/modules/class/artist.php,v $
-
- 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 View Object of crappyness
- View object that is thrown into their session
-
-*/
-
-
-class View {
-
- //Basic Componets
- var $base_sql;
- var $offset;
- var $offset_limit;
- var $sort_order; //asc or desc
- var $sort_type;
- var $action;
- var $total_items;
-
- //generate a new view
- function View($base_sql=0,$script=0,$sort_type=0,$total_items=0,$offset_limit=0) {
- global $conf;
-
- // If we don't have a base sql, stop here
- if (!is_string($base_sql)) {
- return true;
- }
-
- //Convert all 's into "s
- $base_sql = str_replace("'",'"',$base_sql);
-
- $this->base_sql = $base_sql;
- if ($offset_limit) { $this->offset_limit = $offset_limit; }
- else { $this->offset_limit = $_SESSION['offset_limit']; }
- if ($this->offset_limit < '1') { $this->offset_limit = '50'; }
- $this->script = $script;
- $this->sort_type = $sort_type;
- $this->sort_order = "ASC";
- $this->offset = 0;
- $this->total_items = $total_items;
-
- // Set the session
- $_SESSION['view_offset_limit'] = $this->offset_limit;
- $_SESSION['view_sort_type'] = $this->sort_type;
- $_SESSION['view_offset'] = $this->offset;
- $_SESSION['view_base_sql'] = $this->base_sql;
- $_SESSION['view_sort_order'] = $this->sort_order;
- $_SESSION['view_script'] = $this->script;
- $_SESSION['view_total_items'] = $this->total_items;
- $this->sql = $this->generate_sql();
-
- } //constructor
-
- //takes all the parts and makes a full blown sql statement
- function generate_sql() {
- global $conf;
-
- $sql = $this->base_sql . " ORDER BY " . $this->sort_type ." ". $this->sort_order ." LIMIT " . $this->offset . "," . $this->offset_limit;
-
- return $sql;
-
- } //generate_sql
-
- //change the sort order from asc to desc or vise versa
- function change_sort($new_sort=0) {
- global $conf;
-
- if ($new_sort) {
- $this->sort_order = $new_sort;
- }
- elseif ($this->sort_order == "DESC") {
- $this->sort_order = "ASC";
- }
- else {
- $this->sort_order = "DESC";
- }
-
- $_SESSION['view_sort_order'] = $this->sort_order;
-
- $this->sql = $this->generate_sql();
-
- return;
-
- } //change_sort
-
- //change the base sql
- function change_sql($base_sql) {
- global $conf;
-
- //Convert all 's into "s
- $base_sql = str_replace("'",'"',$base_sql);
-
- $this->base_sql = $base_sql;
-
- $_SESSION['view_base_sql'] = $this->base_sql;
-
- $this->sql = $this->generate_sql();
-
- } //change_sql
-
- //change offset
- function change_offset($offset=0) {
- global $conf;
-
- if (isset($offset)) {
- $this->offset = $offset;
- }
- else {
- $this->offset = $this->offset + $this->offset_limit;
- }
-
- $_SESSION['view_offset'] = $this->offset;
-
- $this->sql = $this->generate_sql();
-
- } //change_offset
-
- //change sort_type
- function change_sort_type($sort_type) {
-
- $this->sort_type = $sort_type;
-
- $_SESSION['view_sort_type'] = $this->sort_type;
-
- $this->sql = $this->generate_sql();
-
- } //change_sort_type
-
- /*!
- @function change_offset_limit
- @discussion changes the offset limit, sets the session
- var and generates the sql statement
- */
- function change_offset_limit($offset_limit) {
-
- $this->offset_limit = $offset_limit;
-
- $_SESSION['view_offset_limit'] = $this->offset_limit;
-
- $this->sql = $this->generate_sql();
-
- } // change_offset_limit
-
- /*!
- @function initialize
- @discussion initializes the view object, checks $_REQUEST
- for changes to the view object
- */
- function initialize() {
-
- if ($_REQUEST['sort_type']) {
- $this->change_sort_type($_REQUEST['sort_type']);
- }
-
- if (isset($_REQUEST['offset'])) {
- $this->change_offset($_REQUEST['offset']);
- }
-
- if ($_REQUEST['base_sql']) {
- $this->change_sql($_REQUEST['base_sql']);
- }
-
- if (isset($_REQUEST['sort_order'])) {
- $this->change_sort($_REQUEST['sort_order']);
- }
-
- if ($_REQUEST['offset_limit']) {
- $this->change_offset_limit($_REQUEST['offset_limit']);
- }
-
- } // initialize
-
-
- /*!
- @function import_session_view
- @discussion this imports the view from the session for use..
- this keeps us from having to globalize anything
- wohoo!
- */
- function import_session_view() {
-
- $this->sort_type = $_SESSION['view_sort_type'];
- $this->offset = $_SESSION['view_offset'];
- $this->base_sql = $_SESSION['view_base_sql'];
- $this->sort_order = $_SESSION['view_sort_order'];
- $this->script = $_SESSION['view_script'];
- $this->total_items = $_SESSION['view_total_items'];
-
-
- if ($_SESSION['view_offset_limit']) {
- $this->offset_limit = $_SESSION['view_offset_limit'];
- }
- else {
- $this->offset_limit = $_SESSION['offset_limit'];
- }
-
-
- $this->sql = $this->generate_sql();
-
- } // import_session_view
-
-
-
-} //end class
-?>
diff --git a/modules/init.php b/modules/init.php
index a2b5503b..41c83670 100644
--- a/modules/init.php
+++ b/modules/init.php
@@ -35,7 +35,7 @@ error_reporting(E_ALL ^ E_NOTICE);
$ampache_path = dirname(__FILE__);
$prefix = realpath($ampache_path . "/../");
$configfile = "$prefix/config/ampache.cfg.php";
-require_once($prefix . "/lib/general.php");
+require_once($prefix . "/lib/general.lib.php");
/*********************STOP EDITING*********************************/
@@ -151,8 +151,8 @@ require_once(libglue_param('libglue_path') . "/session.php");
require_once(libglue_param('libglue_path') . "/dbh.php");
// Librarys
-require_once(conf('prefix') . "/lib/album.php");
-require_once(conf('prefix') . "/lib/artist.php");
+require_once(conf('prefix') . "/lib/album.lib.php");
+require_once(conf('prefix') . "/lib/artist.lib.php");
require_once(conf('prefix') . "/lib/song.php");
require_once(conf('prefix') . "/lib/search.php");
require_once(conf('prefix') . "/lib/preferences.php");
@@ -160,7 +160,7 @@ require_once(conf('prefix') . "/lib/rss.php");
require_once(conf('prefix') . "/lib/log.lib.php");
require_once(conf('prefix') . "/lib/ui.lib.php");
require_once(conf('prefix') . "/lib/gettext.php");
-require_once(conf('prefix') . "/lib/batch.php");
+require_once(conf('prefix') . "/lib/batch.lib.php");
require_once(conf('prefix') . "/lib/themes.php");
require_once(conf('prefix') . "/modules/lib.php");
require_once(conf('prefix') . "/modules/admin.php");
@@ -186,18 +186,18 @@ if (conf('allow_mpd_playback')) {
}
// Classes
-require_once(conf('prefix') . "/modules/class/catalog.php");
-require_once(conf('prefix') . "/modules/class/stream.php");
-require_once(conf('prefix') . "/modules/class/playlist.php");
-require_once(conf('prefix') . "/modules/class/song.php");
-require_once(conf('prefix') . "/modules/class/view.php");
-require_once(conf('prefix') . "/modules/class/update.php");
-require_once(conf('prefix') . "/modules/class/user.php");
-require_once(conf('prefix') . "/modules/class/album.php");
-require_once(conf('prefix') . "/modules/class/artist.php");
-require_once(conf('prefix') . "/modules/class/access.php");
-require_once(conf('prefix') . "/modules/class/error.php");
-require_once(conf('prefix') . "/modules/class/genre.class.php");
+require_once(conf('prefix') . "/lib/class/catalog.class.php");
+require_once(conf('prefix') . "/lib/class/stream.class.php");
+require_once(conf('prefix') . "/lib/class/playlist.class.php");
+require_once(conf('prefix') . "/lib/class/song.class.php");
+require_once(conf('prefix') . "/lib/class/view.class.php");
+require_once(conf('prefix') . "/lib/class/update.class.php");
+require_once(conf('prefix') . "/lib/class/user.class.php");
+require_once(conf('prefix') . "/lib/class/album.class.php");
+require_once(conf('prefix') . "/lib/class/artist.class.php");
+require_once(conf('prefix') . "/lib/class/access.class.php");
+require_once(conf('prefix') . "/lib/class/error.class.php");
+require_once(conf('prefix') . "/lib/class/genre.class.php");
/* Some Libglue Hacks */
$array['dbh_name'] = 'stupid_pos';