diff options
-rw-r--r-- | config/ampache.cfg.php.dist | 15 | ||||
-rw-r--r-- | democratic.php | 1 | ||||
-rwxr-xr-x | docs/CHANGELOG | 4 | ||||
-rw-r--r-- | lib/class/democratic.class.php | 77 | ||||
-rw-r--r-- | lib/class/stream.class.php | 25 | ||||
-rw-r--r-- | lib/class/tmpplaylist.class.php | 20 | ||||
-rw-r--r-- | stream.php | 6 | ||||
-rw-r--r-- | 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']); + } + + return true; - } // get_info + } // 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; @@ -312,24 +312,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 * and if it is active @@ -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'); ?> +<?php require Config::get('prefix') . '/templates/list_header.inc.php'; ?> <table class="tabledata" cellpadding="0" cellspacing="0"> <colgroup> <col id="col_action" /> @@ -37,12 +38,12 @@ if (!count($object_ids)) { $playlist = new Playlist($democratic->base_playlist); ?> <tr> - <td> - <?php echo _('Playing from base Playlist'); ?>: - <a href="<?php echo $web_path; ?>/playlist.php?action=show_playlist&playlist_id=<?php echo $playlist->id; ?>"> - <?php echo scrub_out($playlist->name); ?> - </a> - </td> +<td> + <?php echo _('Playing from base Playlist'); ?>: + <a href="<?php echo $web_path; ?>/playlist.php?action=show_playlist&playlist_id=<?php echo $playlist->id; ?>"> + <?php echo scrub_out($playlist->name); ?> + </a> +</td> </tr> <?php } // if no songs @@ -63,24 +64,31 @@ else { <?php $democratic = Democratic::get_current_playlist(); $democratic->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,','); ?> <tr class="<?php echo flip_class(); ?>"> <td class="cel_action"> - <?php if ($democratic->has_vote($song->id)) { ?> + <?php if ($democratic->has_vote($media->id)) { ?> <?php echo Ajax::button('?page=democratic&action=delete_vote&row_id=' . $row_id,'delete',_('Remove Vote'),'remove_vote_' . $row_id); ?> <?php } else { ?> - <?php echo Ajax::button('?page=democratic&action=add_vote&object_id=' . $song->id . '&type=' . scrub_out($object_data['1']),'tick',_('Add Vote'),'remove_vote_' . $row_id); ?> + <?php echo Ajax::button('?page=democratic&action=add_vote&object_id=' . $media->id . '&type=' . scrub_out($data['object_type']),'tick',_('Add Vote'),'remove_vote_' . $row_id); ?> <?php } ?> </td> - <td class="cel_votes"><?php echo scrub_out($democratic->get_vote($row_id)); ?></td> - <td class="cel_title"><?php echo $song->f_link; ?></td> - <td class="cel_album"><?php echo $song->f_album_link; ?></td> - <td class="cel_artist"><?php echo $song->f_artist_link; ?></td> - <td class="cel_time"><?php echo $song->f_time; ?></td> - <?php if ($GLOBALS['user']->has_access(100)) { ?> + <td class="cel_votes" >(<?php echo scrub_out($democratic->get_vote($row_id)); ?>) <span class="information"><?php echo scrub_out($voters_string); ?></span></td> + <td class="cel_title"><?php echo $media->f_link; ?></td> + <td class="cel_album"><?php echo $media->f_album_link; ?></td> + <td class="cel_artist"><?php echo $media->f_artist_link; ?></td> + <td class="cel_time"><?php echo $media->f_time; ?></td> + <?php if (Access::check('interface','100')) { ?> <td class="cel_admin"> <?php echo Ajax::button('?page=democratic&action=delete&row_id=' . $row_id,'disable',_('Delete'),'delete_row_' . $row_id); ?> </td> @@ -96,7 +104,7 @@ foreach($object_ids as $row_id=>$object_data) { <th class="cel_album"><?php echo _('Album'); ?></th> <th class="cel_artist"><?php echo _('Artist'); ?></th> <th class="cel_time"><?php echo _('Time'); ?></th> - <?php if ($GLOBALS['user']->has_access(100)) { ?> + <?php if (Access::check('interface','100')) { ?> <th class="cel_admin"><?php echo _('Admin'); ?></th> <?php } ?> </tr> @@ -104,3 +112,4 @@ foreach($object_ids as $row_id=>$object_data) { } // end else ?> </table> +<?php require Config::get('prefix') . '/templates/list_header.inc.php'; ?> |