From b49a271f889a26e40b16fb6f78b47f2e320b40c8 Mon Sep 17 00:00:00 2001 From: Karl 'vollmerk' Vollmer Date: Wed, 11 Mar 2009 02:46:48 +0000 Subject: [PATCH] fix missing page headers on democratic playlist, also show the voters --- config/ampache.cfg.php.dist | 15 +++-- democratic.php | 1 + docs/CHANGELOG | 4 ++ lib/class/democratic.class.php | 77 +++++++++++++++++----- lib/class/stream.class.php | 25 +++---- lib/class/tmpplaylist.class.php | 20 +----- stream.php | 6 +- templates/show_democratic_playlist.inc.php | 45 ++++++++----- 8 files changed, 118 insertions(+), 75 deletions(-) diff --git a/config/ampache.cfg.php.dist b/config/ampache.cfg.php.dist index 162a2fcb..61e183ba 100644 --- a/config/ampache.cfg.php.dist +++ b/config/ampache.cfg.php.dist @@ -46,20 +46,21 @@ database_password = password ; Length that a session will last, the default is very restrictive ; at 15min -; DEFAULT: 900 -session_length = 900 +; DEFAULT: 1800 +session_length = 1800 ; Length that the session for a single streaming instance will last -; the default is one hour. With some clients, and long songs this can +; the default is two hours. With some clients, and long songs this can ; cause playback to stop, increase this value if you experience that -stream_length = 3600 +; DEFAULT: 7200 +stream_length = 7200 ; This length defines how long a 'remember me' session and cookie will -; last, the default is 3600, same as length. It is up to the administrator +; last, the default is 7200, same as length. It is up to the administrator ; of the box to increase this, for reference 86400 = 1 day ; 604800 = 1 week and 2419200 = 1 month -; DEAFULT: 3600 -remember_length = 3600 +; DEAFULT: 7200 +remember_length = 7200 ; Name of the Session/Cookie that will sent to the browser ; default should be fine diff --git a/democratic.php b/democratic.php index 327033be..1094f525 100644 --- a/democratic.php +++ b/democratic.php @@ -83,6 +83,7 @@ switch ($_REQUEST['action']) { require_once Config::get('prefix') . '/templates/show_democratic.inc.php'; $objects = $democratic->get_items(); Song::build_cache($democratic->object_ids); + Democratic::build_vote_cache($democratic->vote_ids); Browse::set_type('democratic'); Browse::reset(); Browse::set_static_content(1); diff --git a/docs/CHANGELOG b/docs/CHANGELOG index 5defd0c7..8e134cfe 100755 --- a/docs/CHANGELOG +++ b/docs/CHANGELOG @@ -4,6 +4,10 @@ -------------------------------------------------------------------------- v.3.5-Alpha3 + - Fixed missing page headers on democratic playlist + - Show who voted for the sogns on democratic playlist + - Increase default stream length to account for the fact that movies + are a good bit longer then songs - Correct Issues with multi-byte characters in Lyrics (Thx Momo-i) - Added caching to Video - Added Video calls to the API diff --git a/lib/class/democratic.class.php b/lib/class/democratic.class.php index f655b56f..a70d62e6 100644 --- a/lib/class/democratic.class.php +++ b/lib/class/democratic.class.php @@ -36,6 +36,8 @@ class Democratic extends tmpPlaylist { // Build local, buy local public $tmp_playlist; public $object_ids = array(); + public $vote_ids = array(); + public $user_votes = array(); /** * constructor @@ -53,23 +55,26 @@ class Democratic extends tmpPlaylist { } // constructor - /** - * get_info - * This returns the data from the database + * build_vote_cache + * This builds a vote cache of the objects we've got in the playlist */ - private function get_info($id) { + public static function build_vote_cache($ids) { - $id = Dba::escape($id); + if (!is_array($ids) OR !count($ids)) { return false; } - $sql = "SELECT * FROM `democratic` WHERE `id`='$id'"; - $db_results = Dba::query($sql); + $idlist = '(' . implode(',',$ids) . ')'; - $row = Dba::fetch_assoc($db_results); + $sql = "SELECT `object_id`,COUNT(`user`) AS `count` FROM user_vote WHERE `object_id` IN $idlist GROUP BY `object_id`"; + $db_results = Dba::read($sql); - return $row; + while ($row = Dba::fetch_assoc($db_results)) { + parent::add_to_cache('democratic_vote',$row['object_id'],$row['count']); + } - } // get_info + return true; + + } // build_vote_cache /** * set_parent @@ -187,7 +192,7 @@ class Democratic extends tmpPlaylist { $vote_join = "INNER JOIN `user_vote` ON `user_vote`.`object_id`=`tmp_playlist_data`.`id`"; /* Select all objects from this playlist */ - $sql = "SELECT `tmp_playlist_data`.`id`,`tmp_playlist_data`.`object_type`, `user_vote`.`date`, `tmp_playlist_data`.`object_id` " . + $sql = "SELECT `user_vote`.`object_id` AS `vote_id`,`user_vote`.`user`,`tmp_playlist_data`.`id`,`tmp_playlist_data`.`object_type`, `user_vote`.`date`, `tmp_playlist_data`.`object_id` " . "FROM `tmp_playlist_data` $vote_join " . "WHERE `tmp_playlist_data`.`tmp_playlist`='" . Dba::escape($this->tmp_playlist) . "' $order"; $db_results = Dba::query($sql); @@ -199,9 +204,11 @@ class Democratic extends tmpPlaylist { // Itterate and build the sortable array while ($results = Dba::fetch_assoc($db_results)) { - + // Extra set of data for caching! $this->object_ids[] = $results['object_id']; + $this->vote_ids[] = $results['vote_id']; + $this->user_votes[$results['vote_id']][] = $results['user']; // First build a variable that holds the number of votes for an object $name = 'vc_' . $results['object_id']; @@ -212,12 +219,16 @@ class Democratic extends tmpPlaylist { } - // Append oen to the vote + // Append one to the vote ${$name}++; $primary_key = ${$name}; $secondary_key = $votes[$results['object_id']]; - $items[$primary_key][$secondary_key][$results['id']] = array($results['object_id'],$results['object_type'],$results['id']); - } + $items[$primary_key][$secondary_key][$results['id']] = array('object_id'=>$results['object_id'],'object_type'=>$results['object_type'],'id'=>$results['id']); + } // gather data + + foreach ($this->user_votes as $key=>$data) { + parent::add_to_cache('democratic_voters',$key,$data); + } // Sort highest voted stuff to the top krsort($items); @@ -266,7 +277,7 @@ class Democratic extends tmpPlaylist { if (count($items) > $offset) { $array = array_slice($items,$offset,1); $item = array_shift($array); - $results['object_id'] = $item['0']; + $results['object_id'] = $item['object_id']; } /* If nothing was found and this is a voting playlist then get from base_playlist */ @@ -564,5 +575,39 @@ class Democratic extends tmpPlaylist { } // clear_votes + /** + * get_vote + * This returns the current count for a specific song on this tmp_playlist + */ + public function get_vote($object_id) { + + if (parent::is_cached('democratic_vote',$object_id)) { + return parent::get_from_cache('democratic_vote',$object_id); + } + + $object_id = Dba::escape($object_id); + + $sql = "SELECT COUNT(`user`) AS `count` FROM user_vote " . + "WHERE `object_id`='$object_id'"; + $db_results = Dba::read($sql); + + $results = Dba::fetch_assoc($db_results); + + return $results['count']; + + } // get_vote + + /** + * get_voters + * This returns the users that voted for the specified object + * This is an array of user ids + */ + public function get_voters($object_id) { + + return parent::get_from_cache('democratic_voters',$object_id); + + } // get_voters + + } // Democratic class ?> diff --git a/lib/class/stream.class.php b/lib/class/stream.class.php index 505bda49..3d05cbdd 100644 --- a/lib/class/stream.class.php +++ b/lib/class/stream.class.php @@ -89,19 +89,15 @@ class Stream { } // start /** - * manual_url_add - * This manually adds a URL to the stream object for passing - * to whatever, this is an exception for when we don't actually - * have a object_id but instead a weird or special URL + * add_urls + * Add an array of urls, it may be a single one who knows, this + * is used for things that aren't coming from media objects */ - public function manual_url_add($url) { + public function add_urls($urls=array()) { - if (is_array($url)) { - $this->urls[] = array_merge($url,$this->urls); - } - else { - $this->urls[] = $url; - } + if (!is_array($urls)) { return false; } + + $this->urls = array_merge($urls,$this->urls); } // manual_url_add @@ -520,6 +516,13 @@ class Stream { } // switch on types $localplay->add($media); } // foreach object + + /** + * Add urls after the fact + */ + foreach ($this->urls as $url) { + $localplay->add($url); + } $localplay->play(); diff --git a/lib/class/tmpplaylist.class.php b/lib/class/tmpplaylist.class.php index 6abdc36b..99c30cda 100644 --- a/lib/class/tmpplaylist.class.php +++ b/lib/class/tmpplaylist.class.php @@ -25,7 +25,7 @@ * tmp_playlist and tmp_playlist_data tables, and sneaks out at night to * visit user_vote from time to time */ -class tmpPlaylist { +class tmpPlaylist extends database_object { /* Variables from the Datbase */ public $id; @@ -311,24 +311,6 @@ class tmpPlaylist { } // add_object - /** - * get_vote - * This returns the current count for a specific song on this tmp_playlist - */ - public function get_vote($object_id) { - - $object_id = Dba::escape($object_id); - - $sql = "SELECT COUNT(`user`) AS `count` FROM user_vote " . - " WHERE object_id='$object_id'"; - $db_results = Dba::query($sql); - - $results = Dba::fetch_assoc($db_results); - - return $results['count']; - - } // get_vote - /** * vote_active * This checks to see if this playlist is a voting playlist diff --git a/stream.php b/stream.php index 115be99c..ff92a308 100644 --- a/stream.php +++ b/stream.php @@ -113,7 +113,7 @@ switch ($_REQUEST['action']) { break; case 'democratic': $democratic = new Democratic($_REQUEST['democratic_id']); - $urls[] = $democratic->play_url(); + $urls = array($democratic->play_url()); break; case 'download': $media_ids[] = $_REQUEST['song_id']; @@ -161,9 +161,7 @@ switch ($_REQUEST['method']) { /* Start the Stream */ $stream = new Stream($stream_type,$media_ids); - if (is_array($urls)) { - $stream->manual_url_add($urls); - } + $stream->add_urls($urls); $stream->start(); } // end method switch diff --git a/templates/show_democratic_playlist.inc.php b/templates/show_democratic_playlist.inc.php index 50fb5cdc..5bd34434 100644 --- a/templates/show_democratic_playlist.inc.php +++ b/templates/show_democratic_playlist.inc.php @@ -20,6 +20,7 @@ */ $web_path = Config::get('web_path'); ?> + @@ -37,12 +38,12 @@ if (!count($object_ids)) { $playlist = new Playlist($democratic->base_playlist); ?> - +set_parent(); -foreach($object_ids as $row_id=>$object_data) { - $song = new Song($object_data['0']); - $song->format(); +foreach($object_ids as $row_id=>$data) { + $media = new $data['object_type']($data['object_id']); + $media->format(); + $voters = $democratic->get_voters($row_id); + $voters_string = ''; + foreach ($voters as $client_id) { + $client = new User($client_id); + $voters_string .= $client->fullname . ','; + } + $voters_string = rtrim($voters_string,','); ?> - - - - - - has_access(100)) { ?> + + + + + + @@ -96,7 +104,7 @@ foreach($object_ids as $row_id=>$object_data) { - has_access(100)) { ?> + @@ -104,3 +112,4 @@ foreach($object_ids as $row_id=>$object_data) { } // end else ?>
- : - - name); ?> - - + : + + name); ?> + +
- has_vote($song->id)) { ?> + has_vote($media->id)) { ?> - id . '&type=' . scrub_out($object_data['1']),'tick',_('Add Vote'),'remove_vote_' . $row_id); ?> + id . '&type=' . scrub_out($data['object_type']),'tick',_('Add Vote'),'remove_vote_' . $row_id); ?> get_vote($row_id)); ?>f_link; ?>f_album_link; ?>f_artist_link; ?>f_time; ?>(get_vote($row_id)); ?>) f_link; ?>f_album_link; ?>f_artist_link; ?>f_time; ?>
+