mirror of
https://github.com/Yetangitu/ampache
synced 2025-10-05 10:49:37 +02:00
removed some obsolete theme patches
This commit is contained in:
parent
1fa5c4aea3
commit
c796c8be38
10 changed files with 0 additions and 1268 deletions
|
@ -1,9 +0,0 @@
|
|||
This is optional!
|
||||
But it improves accessability and better fits in ampache installations using themes by me.
|
||||
|
||||
Copy the files includes in this folder to ampaches root to the appropriate folders.
|
||||
They include some patches to ampache 3.3.3.2 for login page, album listing and some other things.
|
||||
They'll work fine until included/fixed (maybe) in the next version of ampache.
|
||||
They are not necessary but improve look & feel.
|
||||
|
||||
Thanks to blueorder and andy90 for help on some patches ;)
|
|
@ -1,9 +0,0 @@
|
|||
This is optional!
|
||||
But it improves accessability and better fits in ampache installations using themes by me
|
||||
|
||||
Copy the files includes in this folder to ampaches root to the appropriate folders.
|
||||
They include some patches to ampache 3.3.3.3 for login page, album listing and some other things.
|
||||
They'll work fine until included/fixed (maybe) in the next version of ampache.
|
||||
They are not necessary but improve look & feel.
|
||||
|
||||
Thanks to blueorder and andy90 for help on some patches ;)
|
Binary file not shown.
Before Width: | Height: | Size: 222 KiB |
|
@ -1,9 +0,0 @@
|
|||
This is optional!
|
||||
But it improves accessability and better fits in ampache installations using themes by me.
|
||||
|
||||
Copy the files includes in this folder to ampaches root to the appropriate folders.
|
||||
They include some patches to ampache 3.3.3.2 for login page, album listing and some other things.
|
||||
They'll work fine until included/fixed (maybe) in the next version of ampache.
|
||||
They are not necessary but improve look & feel.
|
||||
|
||||
Thanks to blueorder and andy90 for help on some patches ;)
|
|
@ -1,286 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
|
||||
Copyright (c) 2001 - 2007 Ampache.org
|
||||
All Rights Reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License v2
|
||||
as published by the Free Software Foundation.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
|
||||
require_once 'lib/init.php';
|
||||
|
||||
show_template('header');
|
||||
|
||||
// We'll set any input parameters here
|
||||
if(!isset($_REQUEST['match'])) { $_REQUEST['match'] = "Browse"; }
|
||||
if(isset($_REQUEST['match'])) $match = scrub_in($_REQUEST['match']);
|
||||
if(isset($_REQUEST['album'])) $album = scrub_in($_REQUEST['album']);
|
||||
if(isset($_REQUEST['artist'])) $artist = scrub_in($_REQUEST['artist']);
|
||||
$_REQUEST['artist_id'] = scrub_in($_REQUEST['artist_id']);
|
||||
$min_album_size = conf('min_object_count');
|
||||
if ($min_album_size == '') {
|
||||
$min_album_size = '0';
|
||||
}
|
||||
|
||||
$action = scrub_in($_REQUEST['action']);
|
||||
|
||||
/* Switch on Action */
|
||||
switch ($action) {
|
||||
case 'clear_art':
|
||||
if (!$GLOBALS['user']->has_access('75')) { access_denied(); }
|
||||
$album = new Album($_REQUEST['album_id']);
|
||||
$album->clear_art();
|
||||
show_confirmation(_('Album Art Cleared'),_('Album Art information has been removed from the database'),"/albums.php?action=show&album=" . $album->id);
|
||||
break;
|
||||
case 'show':
|
||||
$album = new Album($_REQUEST['album']);
|
||||
$album->format();
|
||||
|
||||
require (conf('prefix') . '/templates/show_album.inc');
|
||||
|
||||
/* Get the song ids for this album */
|
||||
$song_ids = $album->get_song_ids($_REQUEST['artist']);
|
||||
|
||||
show_songs($song_ids,0,$album);
|
||||
break;
|
||||
// Upload album art
|
||||
case 'upload_art':
|
||||
|
||||
// we didn't find anything
|
||||
if (empty($_FILES['file']['tmp_name'])) {
|
||||
show_confirmation(_('Album Art Not Located'),_('Album Art could not be located at this time. This may be due to write access error, or the file is not received corectly.'),"/albums.php?action=show&album=" . $album->id);
|
||||
break;
|
||||
}
|
||||
|
||||
$album = new Album($_REQUEST['album_id']);
|
||||
|
||||
// Pull the image information
|
||||
$data = array('file'=>$_FILES['file']['tmp_name']);
|
||||
$image_data = get_image_from_source($data);
|
||||
|
||||
// If we got something back insert it
|
||||
if ($image_data) {
|
||||
$album->insert_art($image_data,$_FILES['file']['type']);
|
||||
show_confirmation(_('Album Art Inserted'),'',"/albums.php?action=show&album=" . $album->id);
|
||||
}
|
||||
// Else it failed
|
||||
else {
|
||||
show_confirmation(_('Album Art Not Located'),_('Album Art could not be located at this time. This may be due to write access error, or the file is not received corectly.'),"/albums.php?action=show&album=" . $album->id);
|
||||
}
|
||||
|
||||
break;
|
||||
case 'find_art':
|
||||
|
||||
// If not a user then kick em out
|
||||
if (!$GLOBALS['user']->has_access('25')) { access_denied(); exit; }
|
||||
|
||||
// get the Album information
|
||||
$album = new Album($_REQUEST['album_id']);
|
||||
$images = array();
|
||||
$cover_url = array();
|
||||
|
||||
// If we've got an upload ignore the rest and just insert it
|
||||
if (!empty($_FILES['file']['tmp_name'])) {
|
||||
$path_info = pathinfo($_FILES['file']['name']);
|
||||
$upload['file'] = $_FILES['file']['tmp_name'];
|
||||
$upload['mime'] = 'image/' . $path_info['extension'];
|
||||
$image_data = get_image_from_source($upload);
|
||||
|
||||
if ($image_data) {
|
||||
$album->insert_art($image_data,$upload['0']['mime']);
|
||||
show_confirmation(_('Album Art Inserted'),'',"/albums.php?action=show&album=" . $_REQUEST['album_id']);
|
||||
break;
|
||||
|
||||
} // if image data
|
||||
|
||||
} // if it's an upload
|
||||
|
||||
// Build the options for our search
|
||||
if (isset($_REQUEST['artist_name'])) {
|
||||
$artist = scrub_in($_REQUEST['artist_name']);
|
||||
}
|
||||
elseif ($album->artist_count == '1') {
|
||||
$artist = $album->artist;
|
||||
}
|
||||
if (isset($_REQUEST['album_name'])) {
|
||||
$album_name = scrub_in($_REQUEST['album_name']);
|
||||
}
|
||||
else {
|
||||
$album_name = $album->name;
|
||||
}
|
||||
|
||||
$options['artist'] = $artist;
|
||||
$options['album_name'] = $album_name;
|
||||
$options['keyword'] = $artist . " " . $album_name;
|
||||
// HACK that makes baby jesus cry...
|
||||
// $options['skip_id3'] = true; // modified for working covers in id3
|
||||
|
||||
// Attempt to find the art.
|
||||
$images = $album->find_art($options,'6');
|
||||
|
||||
if (!empty($_REQUEST['cover'])) {
|
||||
$path_info = pathinfo($_REQUEST['cover']);
|
||||
$cover_url[0]['url'] = scrub_in($_REQUEST['cover']);
|
||||
$cover_url[0]['mime'] = 'image/' . $path_info['extension'];
|
||||
}
|
||||
$images = array_merge($cover_url,$images);
|
||||
|
||||
// If we've found anything then go for it!
|
||||
if (count($images)) {
|
||||
// We don't want to store raw's in here so we need to strip them out into a seperate array
|
||||
foreach ($images as $index=>$image) {
|
||||
if (isset($image['raw'])) {
|
||||
//unset($images[$index]);
|
||||
unset($images[$index]['raw']);
|
||||
// $images[$index]['raw'] = ''; // modified for working covers in id3
|
||||
}
|
||||
} // end foreach
|
||||
|
||||
// Store the results for further use
|
||||
$_SESSION['form']['images'] = $images;
|
||||
require_once(conf('prefix') . '/templates/show_album_art.inc.php');
|
||||
}
|
||||
// Else nothing
|
||||
else {
|
||||
show_confirmation(_('Album Art Not Located'),_('Album Art could not be located at this time. This may be due to write access error, or the file is not received corectly.'),"/albums.php?action=show&album=" . $album->id);
|
||||
}
|
||||
|
||||
$albumname = $album->name;
|
||||
$artistname = $artist;
|
||||
|
||||
// Remember the last typed entry, if there was one
|
||||
if (isset($_REQUEST['album_name'])) { $albumname = scrub_in($_REQUEST['album_name']); }
|
||||
if (isset($_REQUEST['artist_name'])) { $artistname = scrub_in($_REQUEST['artist_name']); }
|
||||
|
||||
require_once(conf('prefix') . '/templates/show_get_albumart.inc.php');
|
||||
|
||||
break;
|
||||
case 'select_art':
|
||||
|
||||
/* Check to see if we have the image url still */
|
||||
$image_id = $_REQUEST['image'];
|
||||
$album_id = $_REQUEST['album_id'];
|
||||
|
||||
$image = get_image_from_source($_SESSION['form']['images'][$image_id]);
|
||||
$mime = $_SESSION['form']['images'][$image_id]['mime'];
|
||||
|
||||
$album = new Album($album_id);
|
||||
$album->insert_art($image,$mime);
|
||||
|
||||
|
||||
show_confirmation(_('Album Art Inserted'),'',"/albums.php?action=show&album=$album_id");
|
||||
break;
|
||||
case 'update_from_tags':
|
||||
|
||||
$album = new Album($_REQUEST['album_id']);
|
||||
|
||||
show_box_top(_('Starting Update from Tags'));
|
||||
|
||||
$catalog = new Catalog();
|
||||
$catalog->update_single_item('album',$_REQUEST['album_id']);
|
||||
|
||||
echo "<br /><b>" . _('Update From Tags Complete') . "</b> ";
|
||||
echo "<a href=\"" . conf('web_path') . "/albums.php?action=show&album=" . scrub_out($_REQUEST['album_id']) . "\">[" . _('Return') . "]</a>";
|
||||
show_box_bottom();
|
||||
break;
|
||||
// Browse by Album
|
||||
default:
|
||||
if (strlen($_REQUEST['match']) < '1') { $match = 'a'; }
|
||||
|
||||
// Setup the View Ojbect
|
||||
$view = new View();
|
||||
$view->import_session_view();
|
||||
|
||||
if ($match == 'Show_all' || $match == 'Show_missing_art' || $match == 'Browse') { $chr = ''; }
|
||||
else { $chr = $match; }
|
||||
|
||||
require (conf('prefix') . '/templates/show_box_top.inc.php');
|
||||
show_alphabet_list('albums','albums.php',$match);
|
||||
show_alphabet_form($chr,_('Show Albums starting with'),"albums.php?action=match");
|
||||
require (conf('prefix') . '/templates/show_box_bottom.inc.php');
|
||||
|
||||
switch($match) {
|
||||
case 'Show_all':
|
||||
$offset_limit = 99999;
|
||||
$sql = "SELECT album.id FROM song,album ".
|
||||
" WHERE song.album=album.id ".
|
||||
"GROUP BY song.album ".
|
||||
" HAVING COUNT(song.id) > $min_album_size ";
|
||||
break;
|
||||
case 'Show_missing_art':
|
||||
$offset_limit = 99999;
|
||||
$sql = "SELECT album.id FROM song,album ".
|
||||
" WHERE song.album=album.id ".
|
||||
" AND album.art is null ".
|
||||
"GROUP BY song.album ".
|
||||
" HAVING COUNT(song.id) > $min_album_size ";
|
||||
break;
|
||||
case 'Browse':
|
||||
case 'show_albums':
|
||||
$sql = "SELECT album.id FROM song,album ".
|
||||
" WHERE song.album=album.id ".
|
||||
"GROUP BY song.album ".
|
||||
" HAVING COUNT(song.id) > $min_album_size ";
|
||||
break;
|
||||
default:
|
||||
$sql = "SELECT album.id FROM song,album ".
|
||||
" WHERE song.album=album.id ".
|
||||
" AND album.name LIKE '$match%'".
|
||||
"GROUP BY song.album ".
|
||||
" HAVING COUNT(song.id) > $min_album_size ";
|
||||
} // end switch
|
||||
|
||||
switch ($_REQUEST['type']) {
|
||||
case 'album_sort':
|
||||
if ($match != 'Browse' && $match != 'Show_missing_art' && $match != 'Show_all') {
|
||||
$match_string = " AND album.name LIKE '$match%'";
|
||||
}
|
||||
$sort_sql = "SELECT album.id, IF(COUNT(DISTINCT(song.artist)) > 1,'Various', artist.name) AS artist_name " .
|
||||
"FROM song,artist,album WHERE song.album=album.id AND song.artist=artist.id $match_string" .
|
||||
"GROUP BY album.name,album.year ".
|
||||
"HAVING COUNT(song.id) > $min_album_size ";
|
||||
$sort_order = 'artist.name';
|
||||
break;
|
||||
default:
|
||||
|
||||
break;
|
||||
} // switch on special sort types
|
||||
|
||||
// if we are returning
|
||||
if ($_REQUEST['keep_view']) {
|
||||
$view->initialize($sort_sql);
|
||||
}
|
||||
|
||||
// If we aren't keeping the view then initlize it
|
||||
elseif ($sql) {
|
||||
if (!$sort_order) { $sort_order = 'name'; }
|
||||
$db_results = mysql_query($sql, dbh());
|
||||
$total_items = mysql_num_rows($db_results);
|
||||
if ($match != "Show_all") { $offset_limit = $user->prefs['offset_limit']; }
|
||||
$view = new View($sql, 'albums.php',$sort_order,$total_items,$offset_limit);
|
||||
}
|
||||
|
||||
else { $view = false; }
|
||||
|
||||
if ($view->base_sql) {
|
||||
$albums = get_albums($view->sql);
|
||||
require conf('prefix') . '/templates/show_albums.inc.php';
|
||||
}
|
||||
|
||||
break;
|
||||
} // end switch on action
|
||||
|
||||
show_footer();
|
||||
?>
|
|
@ -1,110 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
|
||||
This library handles album related functions.... wooo!
|
||||
//FIXME: Remove this in favor of /modules/class/album
|
||||
*/
|
||||
|
||||
/*!
|
||||
@function get_albums
|
||||
@discussion pass a sql statement, and it gets full album info and returns
|
||||
an array of the goods.. can be set to format them as well
|
||||
*/
|
||||
function get_albums($sql, $action=0) {
|
||||
|
||||
$db_results = mysql_query($sql, dbh());
|
||||
while ($r = mysql_fetch_array($db_results)) {
|
||||
$album = new Album($r[0]);
|
||||
$album->format_album();
|
||||
$albums[] = $album;
|
||||
}
|
||||
|
||||
return $albums;
|
||||
|
||||
|
||||
} // get_albums
|
||||
|
||||
/**
|
||||
* get_image_from_source
|
||||
* This gets an image for the album art from a source as
|
||||
* defined in the passed array. Because we don't know where
|
||||
* its comming from we are a passed an array that can look like
|
||||
* ['url'] = URL *** OPTIONAL ***
|
||||
* ['file'] = FILENAME *** OPTIONAL ***
|
||||
* ['raw'] = Actual Image data, already captured
|
||||
*/
|
||||
function get_image_from_source($data) {
|
||||
|
||||
// Already have the data, this often comes from id3tags
|
||||
if (isset($data['raw'])) {
|
||||
return $data['raw'];
|
||||
}
|
||||
|
||||
// Check to see if it's a URL
|
||||
if (isset($data['url'])) {
|
||||
$snoopy = new Snoopy();
|
||||
$snoopy->fetch($data['url']);
|
||||
return $snoopy->results;
|
||||
}
|
||||
|
||||
// Check to see if it's a FILE
|
||||
if (isset($data['file'])) {
|
||||
$handle = fopen($data['file'],'rb');
|
||||
$image_data = fread($handle,filesize($data['file']));
|
||||
fclose($handle);
|
||||
return $image_data;
|
||||
}
|
||||
// // Check to see if it is embedded in id3 of a song
|
||||
if (isset($data['song'])) {
|
||||
// If we find a good one, stop looking
|
||||
$getID3 = new getID3();
|
||||
$id3 = $getID3->analyze($data['song']);
|
||||
|
||||
if ($id3['format_name'] == "WMA") {
|
||||
return $id3['asf']['extended_content_description_object']['content_descriptors']['13']['data'];
|
||||
}
|
||||
elseif (isset($id3['id3v2']['APIC'])) {
|
||||
// Foreach incase they have more then one
|
||||
foreach ($id3['id3v2']['APIC'] as $image) {
|
||||
return $image['data'];
|
||||
}
|
||||
}
|
||||
}
|
||||
// last "checked" added for working covers in id3
|
||||
return false;
|
||||
|
||||
} // get_image_from_source
|
||||
|
||||
/**
|
||||
* get_random_albums
|
||||
* This returns a random number of albums from the catalogs
|
||||
* this is used by the index to return some 'potential' albums to play
|
||||
*/
|
||||
function get_random_albums($count='') {
|
||||
|
||||
if (!$count) { $count = 5; }
|
||||
|
||||
$count = sql_escape($count);
|
||||
|
||||
// We avoid a table scan by using the id index and then using a rand to pick a row #
|
||||
$sql = "SELECT `id` FROM `album` WHERE `art` IS NOT NULL";
|
||||
$db_results = mysql_query($sql,dbh());
|
||||
|
||||
while ($r = mysql_fetch_assoc($db_results)) {
|
||||
$albums[] = $r['id'];
|
||||
}
|
||||
|
||||
$total = count($albums);
|
||||
|
||||
for ($i=0; $i <= $count; $i++) {
|
||||
$record = rand(0,$total);
|
||||
// If we've already set this one, we gotta get another!
|
||||
if (isset($results[$record])) { $i--; }
|
||||
$results[$record] = $albums[$record];
|
||||
}
|
||||
|
||||
return $results;
|
||||
|
||||
} // get_random_albums
|
||||
|
||||
?>
|
|
@ -1,602 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
|
||||
Copyright (c) 2001 - 2006 Ampache.org
|
||||
All Rights Reserved
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License v2
|
||||
as published by the Free Software Foundation.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
|
||||
/**
|
||||
* Album Class
|
||||
* This is the class responsible for handling the Album object
|
||||
* it is related to the album table in the database.
|
||||
*/
|
||||
class Album {
|
||||
|
||||
/* Variables from DB */
|
||||
var $id;
|
||||
var $name;
|
||||
var $year;
|
||||
var $prefix;
|
||||
|
||||
/* Art Related Fields */
|
||||
var $art;
|
||||
var $art_mime;
|
||||
|
||||
// cached information
|
||||
var $_songs=array();
|
||||
|
||||
/*!
|
||||
@function Album
|
||||
@discussion Album class, for modifing a song.
|
||||
@param $album_id The ID of the song
|
||||
*/
|
||||
function Album($album_id = 0) {
|
||||
|
||||
if (!$album_id) { return false; }
|
||||
|
||||
/* Assign id for use in get_info() */
|
||||
$this->id = $album_id;
|
||||
|
||||
/* Get the information from the db */
|
||||
if ($info = $this->_get_info()) {
|
||||
$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->has_art = $info['has_art'];
|
||||
$this->prefix = $info['prefix'];
|
||||
} // if info
|
||||
|
||||
return true;
|
||||
|
||||
} //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() {
|
||||
|
||||
$this->id = intval($this->id);
|
||||
|
||||
/* 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,album.art AS has_art ".
|
||||
"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_assoc($db_results);
|
||||
|
||||
// If there is art then set it to 1, if not set it to 0, we don't want to cary
|
||||
// around the full blob with every object because it can be pretty big
|
||||
$results['has_art'] = strlen($results['has_art']) ? '1' : '0';
|
||||
|
||||
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
|
||||
|
||||
/**
|
||||
* get_song_ids
|
||||
* This returns an array of the song id's that are on this album. This is used by the
|
||||
* show_songs function and can be pased and artist if you so desire to limit it to that
|
||||
*/
|
||||
function get_song_ids($artist='') {
|
||||
|
||||
/* If they pass an artist then constrain it based on the artist as well */
|
||||
if ($artist) {
|
||||
$artist_sql = " AND artist='" . sql_escape($artist) . "'";
|
||||
}
|
||||
|
||||
$sql = "SELECT id FROM song WHERE album='" . sql_escape($this->id) . "' $artist_sql ORDER BY track";
|
||||
$db_results = mysql_query($sql, dbh());
|
||||
|
||||
$results = array();
|
||||
|
||||
while ($r = mysql_fetch_assoc($db_results)) {
|
||||
$results[] = $r['id'];
|
||||
}
|
||||
|
||||
return $results;
|
||||
|
||||
} // get_song_ids
|
||||
|
||||
/**
|
||||
* format
|
||||
* This is the format function for this object. It sets cleaned up
|
||||
* album information with the base required
|
||||
* f_link, f_name
|
||||
*/
|
||||
function format() {
|
||||
|
||||
$web_path = conf('web_path');
|
||||
|
||||
/* Truncate the string if it's to long */
|
||||
$name = scrub_out(truncate_with_ellipse($this->name,conf('ellipse_threshold_album')));
|
||||
$artist = scrub_out($this->artist);
|
||||
$this->f_name = "<a href=\"$web_path/albums.php?action=show&album=" . $this->id . "\" title=\"" . scrub_out($this->name) . "\">" . $name . "</a>";
|
||||
$this->f_link = "<a href=\"$web_path/albums.php?action=show&album=" . scrub_out($this->id) . "\" title=\"" . scrub_out($this->name) . "\">" . $name . "</a>";
|
||||
$this->f_songs = "<div align=\"center\">" . $this->songs . "</div>";
|
||||
$this->f_title = $name;
|
||||
if ($this->artist_count == '1') {
|
||||
$this->f_artist = "<a href=\"$web_path/artists.php?action=show&artist=" . $this->artist_id . "\">" . $artist . "</a>";
|
||||
}
|
||||
else {
|
||||
$this->f_artist = _('Various');
|
||||
}
|
||||
|
||||
if ($this->year == '0') {
|
||||
$this->year = "N/A";
|
||||
}
|
||||
|
||||
} // format
|
||||
|
||||
/**
|
||||
* format_album
|
||||
* DEPRECIATED DO NOT USE!
|
||||
*/
|
||||
function format_album() {
|
||||
|
||||
// Call the real function
|
||||
$this->format();
|
||||
|
||||
} // format_album
|
||||
|
||||
/**
|
||||
* get_art
|
||||
* This function only pulls art from the database, nothing else
|
||||
* It should not be called when trying to find new art
|
||||
*/
|
||||
function get_art() {
|
||||
|
||||
return $this->get_db_art();
|
||||
|
||||
} // get_art
|
||||
|
||||
/**
|
||||
* find_art
|
||||
* This function searches for album art using all configured methods
|
||||
* for the current album. There is an optional 'limit' passed that will
|
||||
* gather up to the specified number of possible album covers.
|
||||
* There is also an optional array of options the possible options are
|
||||
* ['keyword'] = STRING
|
||||
* ['artist'] = STRING
|
||||
* ['album_name'] = STRING
|
||||
*/
|
||||
function find_art($options=array(),$limit='') {
|
||||
|
||||
/* Create Base Vars */
|
||||
$results = 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)) {
|
||||
// They don't want art!
|
||||
return array();
|
||||
}
|
||||
elseif (!is_array($config_value)) {
|
||||
$config_value = array($config_value);
|
||||
}
|
||||
|
||||
foreach ($config_value AS $method) {
|
||||
|
||||
$data = array();
|
||||
|
||||
$method_name = "get_" . $method . "_art";
|
||||
if (in_array($method_name,$class_methods)) {
|
||||
// Some of these take options!
|
||||
switch ($method_name) {
|
||||
case 'get_amazon_art':
|
||||
$data = $this->{$method_name}($options['keyword'],$limit);
|
||||
break;
|
||||
case 'get_id3_art':
|
||||
if ($options['skip_id3']) { break; }
|
||||
$data = $this->{$method_name}($limit);
|
||||
break;
|
||||
default:
|
||||
$data = $this->{$method_name}();
|
||||
break;
|
||||
}
|
||||
|
||||
// Add the results we got to the current set
|
||||
$total_results += count($data);
|
||||
$results = array_merge($results,$data);
|
||||
|
||||
if ($total_results > $limit AND $limit > 0) {
|
||||
return $results;
|
||||
}
|
||||
|
||||
} // if the method exists
|
||||
|
||||
} // end foreach
|
||||
|
||||
return $results;
|
||||
|
||||
} // find_art
|
||||
|
||||
/*!
|
||||
@function get_id3_art
|
||||
@discussion looks for art from the id3 tags
|
||||
*/
|
||||
function get_id3_art($limit='') {
|
||||
|
||||
// grab the songs and define our results
|
||||
if (!count($this->_songs)) {
|
||||
$this->_songs = $this->get_songs();
|
||||
}
|
||||
$data = array();
|
||||
|
||||
// Foreach songs in this album
|
||||
foreach ($this->_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'];
|
||||
// $data[] = array('raw'=>$image['data'],'mime'=>$image['mime']);
|
||||
// }
|
||||
// elseif (isset($id3['id3v2']['APIC'])) {
|
||||
// // Foreach incase they have more then one
|
||||
// foreach ($id3['id3v2']['APIC'] as $image) {
|
||||
// $data[] = array('raw'=>$image['data'],'mime'=>$image['mime']);
|
||||
// }
|
||||
// }
|
||||
if ($id3['format_name'] == "WMA") {
|
||||
$image = $id3['asf']['extended_content_description_object']['content_descriptors']['13'];
|
||||
$data[] = array('song'=>$song->file,'raw'=>$image['data'],'mime'=>$image['mime']);
|
||||
}
|
||||
elseif (isset($id3['id3v2']['APIC'])) {
|
||||
// Foreach incase they have more then one
|
||||
foreach ($id3['id3v2']['APIC'] as $image) {
|
||||
$data[] = array('song'=>$song->file,'raw'=>$image['data'],'mime'=>$image['mime']);
|
||||
}
|
||||
}
|
||||
// modified for working covers in id3
|
||||
|
||||
if (!empty($limit) && $limit < count($data)) {
|
||||
return $data;
|
||||
}
|
||||
|
||||
} // end foreach
|
||||
|
||||
return $data;
|
||||
|
||||
} // get_id3_art
|
||||
|
||||
/**
|
||||
* get_folder_art()
|
||||
* returns the album art from the folder of the audio files
|
||||
* If a limit is passed or the preferred filename is found the current results set
|
||||
* is returned
|
||||
*/
|
||||
function get_folder_art($limit='') {
|
||||
|
||||
if (!count($this->_songs)) {
|
||||
$this->_songs = $this->get_songs();
|
||||
}
|
||||
$data = array();
|
||||
|
||||
/* See if we are looking for a specific filename */
|
||||
$preferred_filename = conf('album_art_preferred_filename');
|
||||
|
||||
// Init a horrible hack array of lameness
|
||||
$cache =array();
|
||||
|
||||
/* Thanks to dromio for origional code */
|
||||
/* Added search for any .jpg, png or .gif - Vollmer */
|
||||
foreach($this->_songs as $song) {
|
||||
$dir = dirname($song->file);
|
||||
|
||||
debug_event('folder_art',"Opening $dir and checking for Album Art",'3');
|
||||
|
||||
/* Open up the directory */
|
||||
$handle = @opendir($dir);
|
||||
|
||||
if (!is_resource($handle)) {
|
||||
echo "<font class=\"error\">" . _("Error: Unable to open") . " $dir</font><br />\n";
|
||||
debug_event('read',"Error: Unable to open $dir for album art read",'2');
|
||||
}
|
||||
|
||||
|
||||
/* 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") {
|
||||
|
||||
// HACK ALERT this is to prevent duplicate filenames
|
||||
$full_filename = $dir . '/' . $file;
|
||||
$index = md5($full_filename);
|
||||
|
||||
/* Make sure it's got something in it */
|
||||
if (!filesize($dir . '/' . $file)) { continue; }
|
||||
|
||||
if ($file == $preferred_filename) {
|
||||
// If we found the preferred filename we're done, wipe out previous results
|
||||
$data = array(array('file' => $full_filename, 'mime' => 'image/' . $extension));
|
||||
return $data;
|
||||
}
|
||||
elseif (!isset($cache[$index])) {
|
||||
$data[] = array('file' => $full_filename, 'mime' => 'image/' . $extension);
|
||||
}
|
||||
|
||||
$cache[$index] = '1';
|
||||
|
||||
} // end if it's an image
|
||||
|
||||
} // end while reading dir
|
||||
@closedir($handle);
|
||||
|
||||
if (!empty($limit) && $limit < count($data)) {
|
||||
return $data;
|
||||
}
|
||||
|
||||
} // end foreach songs
|
||||
|
||||
return $data;
|
||||
|
||||
} // get_folder_art()
|
||||
|
||||
/**
|
||||
* get_db_art()
|
||||
* returns the album art from the db along with the mime type
|
||||
*/
|
||||
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_assoc($db_results);
|
||||
|
||||
if (!$results['art']) { return array(); }
|
||||
|
||||
return $results;
|
||||
|
||||
} // get_db_art
|
||||
|
||||
/**
|
||||
* get_amazon_art
|
||||
* This takes keywords and performs a search of the Amazon website
|
||||
* for album art. It returns an array of found objects with mime/url keys
|
||||
*/
|
||||
function get_amazon_art($keywords = '',$limit='') {
|
||||
|
||||
$images = array();
|
||||
$final_results = array();
|
||||
$possible_keys = array("LargeImage","MediumImage","SmallImage");
|
||||
|
||||
// Prevent the script from timing out
|
||||
set_time_limit(0);
|
||||
|
||||
if (empty($keywords)) {
|
||||
$keywords = $this->name;
|
||||
/* If this isn't a various album combine with artist name */
|
||||
if ($this->artist_count == '1') { $keywords .= ' ' . $this->artist; }
|
||||
}
|
||||
|
||||
/* Create Base Vars */
|
||||
$amazon_base_urls = array();
|
||||
|
||||
/* Attempt to retrive the album art order */
|
||||
$config_value = conf('amazon_base_urls');
|
||||
|
||||
/* If it's not set */
|
||||
if (empty($config_value)) {
|
||||
$amazon_base_urls = array('http://webservices.amazon.com');
|
||||
}
|
||||
elseif (!is_array($config_value)) {
|
||||
array_push($amazon_base_urls,$config_value);
|
||||
}
|
||||
else {
|
||||
$amazon_base_urls = array_merge($amazon_base_urls, conf('amazon_base_urls'));
|
||||
}
|
||||
|
||||
/* Foreach through the base urls that we should check */
|
||||
foreach ($amazon_base_urls AS $amazon_base) {
|
||||
|
||||
// Create the Search Object
|
||||
$amazon = new AmazonSearch(conf('amazon_developer_key'), $amazon_base);
|
||||
$search_results = array();
|
||||
|
||||
/* Setup the needed variables */
|
||||
$max_pages_to_search = max(conf('max_amazon_results_pages'),$amazon->_default_results_pages);
|
||||
$pages_to_search = $max_pages_to_search; //init to max until we know better.
|
||||
|
||||
// while we have pages to search
|
||||
do {
|
||||
$raw_results = $amazon->search(array('artist'=>$artist,'album'=>$albumname,'keywords'=>$keywords));
|
||||
|
||||
$total = count($raw_results) + count($search_results);
|
||||
|
||||
// If we've gotten more then we wanted
|
||||
if (!empty($limit) && $total > $limit) {
|
||||
// We don't want ot re-count every loop
|
||||
$i = $total;
|
||||
while ($i > $limit) {
|
||||
array_pop($raw_results);
|
||||
$i--;
|
||||
}
|
||||
|
||||
debug_event('amazon-xml',"Found $total, Limit $limit reducing and breaking from loop",'5');
|
||||
// Merge the results and BREAK!
|
||||
$search_results = array_merge($search_results,$raw_results);
|
||||
break;
|
||||
} // if limit defined
|
||||
|
||||
$search_results = array_merge($search_results,$raw_results);
|
||||
$pages_to_search = min($max_pages_to_search, $amazon->_maxPage);
|
||||
debug_event('amazon-xml', "Searched results page " . ($amazon->_currentPage+1) . "/" . $pages_to_search,'5');
|
||||
$amazon->_currentPage++;
|
||||
|
||||
} while($amazon->_currentPage < $pages_to_search);
|
||||
|
||||
|
||||
// Only do the second search if the first actually returns something
|
||||
if (count($search_results)) {
|
||||
$final_results = $amazon->lookup($search_results);
|
||||
}
|
||||
|
||||
/* Log this if we're doin debug */
|
||||
debug_event('amazon-xml',"Searched using $keywords with " . conf('amazon_developer_key') . " as key " . count($final_results) . " results found",'5');
|
||||
|
||||
// If we've hit our limit
|
||||
if (!empty($limit) && count($final_results) >= $limit) {
|
||||
break;
|
||||
}
|
||||
|
||||
} // end foreach
|
||||
|
||||
/* Foreach through what we've found */
|
||||
foreach ($final_results as $result) {
|
||||
|
||||
/* Recurse through the images found */
|
||||
foreach ($possible_keys as $key) {
|
||||
if (strlen($result[$key])) {
|
||||
break;
|
||||
}
|
||||
} // foreach
|
||||
|
||||
// Rudimentary image type detection, only JPG and GIF allowed.
|
||||
if (substr($result[$key], -4 == '.jpg')) {
|
||||
$mime = "image/jpg";
|
||||
}
|
||||
elseif (substr($result[$key], -4 == '.gif')) {
|
||||
$mime = "image/gif";
|
||||
}
|
||||
elseif (substr($result[$key], -4 == '.png')) {
|
||||
$mime = "image/png";
|
||||
}
|
||||
else {
|
||||
/* Just go to the next result */
|
||||
continue;
|
||||
}
|
||||
|
||||
$data['url'] = $result[$key];
|
||||
$data['mime'] = $mime;
|
||||
|
||||
$images[] = $data;
|
||||
|
||||
if (!empty($limit)) {
|
||||
if (count($images) >= $limit) {
|
||||
return $images;
|
||||
}
|
||||
}
|
||||
|
||||
} // if we've got something
|
||||
|
||||
return $images;
|
||||
|
||||
} // 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()";
|
||||
$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 insert_art
|
||||
@discussion this takes a string representation of an image
|
||||
and inserts it into the database. You must pass the
|
||||
mime type as well
|
||||
*/
|
||||
function insert_art($image, $mime) {
|
||||
|
||||
/* Have to disable this for Demo because people suck and try to
|
||||
* insert PORN :(
|
||||
*/
|
||||
if (conf('demo_mode')) { return false; }
|
||||
|
||||
// Check for PHP:GD and if we have it make sure this image is of some size
|
||||
if (function_exists('ImageCreateFromString')) {
|
||||
$im = @ImageCreateFromString($image);
|
||||
if (@imagesx($im) == 1 || @imagesy($im) == 1 && $im) {
|
||||
return false;
|
||||
}
|
||||
} // if we have PHP:GD
|
||||
|
||||
// Push the image into the database
|
||||
$sql = "UPDATE album SET art = '" . sql_escape($image) . "'," .
|
||||
" art_mime = '" . sql_escape($mime) . "'" .
|
||||
" WHERE id = '$this->id'";
|
||||
$db_results = mysql_query($sql, dbh());
|
||||
|
||||
return true;
|
||||
|
||||
} // insert_art
|
||||
|
||||
|
||||
} //end of album class
|
||||
|
||||
?>
|
|
@ -1,234 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
|
||||
Copyright (c) 2001 - 2006 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 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"; // affects only album sorting order
|
||||
$this->sort_order = "DESC";
|
||||
$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($sql='') {
|
||||
|
||||
/* From time to time we need to change the SQL statement while
|
||||
* maintaining the paging
|
||||
*/
|
||||
if ($sql) {
|
||||
$this->change_sql($sql);
|
||||
}
|
||||
|
||||
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
|
||||
?>
|
|
@ -1,9 +0,0 @@
|
|||
This is optional!
|
||||
But it improves accessability and better fits in ampache installations using themes by me
|
||||
|
||||
Copy the files includes in this folder to ampaches root to the appropriate folders.
|
||||
They include some patches to ampache 3.3.3.3 for login page, album listing and some other things.
|
||||
They'll work fine until included/fixed (maybe) in the next version of ampache.
|
||||
They are not necessary but improve look & feel.
|
||||
|
||||
Thanks to blueorder and andy90 for help on some patches ;)
|
Binary file not shown.
Before Width: | Height: | Size: 170 KiB |
Loading…
Add table
Add a link
Reference in a new issue