/server/index.ajax.php
PHP | 308 lines | 275 code | 9 blank | 24 comment | 58 complexity | 294ef29c181cee2c519e023d863c374b MD5 | raw file
- <?php
- /* vim:set softtabstop=4 shiftwidth=4 expandtab: */
- /**
- *
- * LICENSE: GNU General Public License, version 2 (GPLv2)
- * Copyright 2001 - 2015 Ampache.org
- *
- * 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.
- *
- */
- /**
- * Sub-Ajax page, requires AJAX_INCLUDE
- */
- if (!defined('AJAX_INCLUDE')) { exit; }
- $results = array();
- switch ($_REQUEST['action']) {
- case 'random_albums':
- $albums = Album::get_random(6);
- if (count($albums) AND is_array($albums)) {
- ob_start();
- require_once AmpConfig::get('prefix') . '/templates/show_random_albums.inc.php';
- $results['random_selection'] = ob_get_clean();
- } else {
- $results['random_selection'] = '<!-- None found -->';
- if (Access::check('interface', '100')) {
- $catalogs = Catalog::get_catalogs();
- if (count($catalogs) == 0) {
- $results['random_selection'] = sprintf(T_('No catalog configured yet. To start streaming your media, you now need to %s add a catalog %s'), '<a href="' . AmpConfig::get('web_path') . '/admin/catalog.php?action=show_add_catalog">', '</a>.<br /><br />');
- }
- }
- }
- break;
- case 'random_videos':
- $videos = Video::get_random(6);
- if (count($videos) AND is_array($videos)) {
- ob_start();
- require_once AmpConfig::get('prefix') . '/templates/show_random_videos.inc.php';
- $results['random_video_selection'] = ob_get_clean();
- } else {
- $results['random_video_selection'] = '<!-- None found -->';
- }
- break;
- case 'artist_info':
- if (AmpConfig::get('lastfm_api_key') && (isset($_REQUEST['artist']) || isset($_REQUEST['fullname']))) {
- if ($_REQUEST['artist']) {
- $artist = new Artist($_REQUEST['artist']);
- $artist->format();
- $biography = Recommendation::get_artist_info($artist->id);
- } else {
- $biography = Recommendation::get_artist_info(null, rawurldecode($_REQUEST['fullname']));
- }
- ob_start();
- require_once AmpConfig::get('prefix') . '/templates/show_artist_info.inc.php';
- $results['artist_biography'] = ob_get_clean();
- }
- break;
- case 'similar_artist':
- if (AmpConfig::get('show_similar') && isset($_REQUEST['artist'])) {
- $artist = new Artist($_REQUEST['artist']);
- $artist->format();
- $object_ids = array();
- $missing_objects = array();
- if ($similars = Recommendation::get_artists_like($artist->id, 10, !AmpConfig::get('wanted'))) {
- foreach ($similars as $similar) {
- if ($similar['id']) {
- $object_ids[] = $similar['id'];
- } else {
- $missing_objects[] = $similar;
- }
- }
- }
- ob_start();
- require_once AmpConfig::get('prefix') . '/templates/show_recommended_artists.inc.php';
- $results['similar_artist'] = ob_get_clean();
- }
- break;
- case 'similar_now_playing':
- $media_id = $_REQUEST['media_id'];
- if (AmpConfig::get('show_similar') && isset($media_id) && isset($_REQUEST['media_artist'])) {
- $artists = Recommendation::get_artists_like($_REQUEST['media_artist'], 3, false);
- $songs = Recommendation::get_songs_like($media_id, 3);
- ob_start();
- require_once AmpConfig::get('prefix') . '/templates/show_now_playing_similar.inc.php';
- $results['similar_items_' . $media_id] = ob_get_clean();
- }
- break;
- case 'concerts':
- if (AmpConfig::get('show_concerts') && isset($_REQUEST['artist'])) {
- $artist = new Artist($_REQUEST['artist']);
- $artist->format();
- if ($artist->id) {
- $up_concerts = Artist_Event::get_upcoming_events($artist);
- $past_concerts = Artist_Event::get_past_events($artist);
- $coming_concerts = array();
- $concerts = array();
- if ($up_concerts) {
- foreach ($up_concerts->children() as $item) {
- if ($item->getName() == 'event') {
- $coming_concerts[] = $item;
- }
- }
- }
- if ($past_concerts) {
- foreach ($past_concerts->children() as $item) {
- if ($item->getName() == 'event') {
- $concerts[] = $item;
- }
- }
- }
- }
- ob_start();
- require_once AmpConfig::get('prefix') . '/templates/show_concerts.inc.php';
- $results['concerts'] = ob_get_clean();
- }
- break;
- case 'wanted_missing_albums':
- if (AmpConfig::get('wanted') && (isset($_REQUEST['artist']) || isset($_REQUEST['artist_mbid']))) {
- if (isset($_REQUEST['artist'])) {
- $artist = new Artist($_REQUEST['artist']);
- $artist->format();
- if ($artist->mbid) {
- $walbums = Wanted::get_missing_albums($artist);
- } else {
- debug_event('wanted', 'Cannot get missing albums: MusicBrainz ID required.', '5');
- }
- } else {
- $walbums = Wanted::get_missing_albums(null, $_REQUEST['artist_mbid']);
- }
- ob_start();
- require_once AmpConfig::get('prefix') . '/templates/show_missing_albums.inc.php';
- $results['missing_albums'] = ob_get_clean();
- }
- break;
- case 'add_wanted':
- if (AmpConfig::get('wanted') && isset($_REQUEST['mbid'])) {
- $mbid = $_REQUEST['mbid'];
- if (empty($_REQUEST['artist'])) {
- $artist_mbid = $_REQUEST['artist_mbid'];
- $artist = null;
- } else {
- $artist = $_REQUEST['artist'];
- $aobj = new Artist($artist);
- $artist_mbid = $aobj->mbid;
- }
- $name = $_REQUEST['name'];
- $year = $_REQUEST['year'];
- if (!Wanted::has_wanted($mbid)) {
- Wanted::add_wanted($mbid, $artist, $artist_mbid, $name, $year);
- ob_start();
- $walbum = new Wanted(Wanted::get_wanted($mbid));
- $walbum->show_action_buttons();
- $results['wanted_action_' . $mbid] = ob_get_clean();
- } else {
- debug_event('wanted', 'Already wanted, skipped.', '5');
- }
- }
- break;
- case 'remove_wanted':
- if (AmpConfig::get('wanted') && isset($_REQUEST['mbid'])) {
- $mbid = $_REQUEST['mbid'];
- $walbum = new Wanted(Wanted::get_wanted($mbid));
- Wanted::delete_wanted($mbid);
- ob_start();
- $walbum->accepted = false;
- $walbum->id = 0;
- $walbum->show_action_buttons();
- $results['wanted_action_' . $mbid] = ob_get_clean();
- }
- break;
- case 'accept_wanted':
- if (AmpConfig::get('wanted') && isset($_REQUEST['mbid'])) {
- $mbid = $_REQUEST['mbid'];
- $walbum = new Wanted(Wanted::get_wanted($mbid));
- $walbum->accept();
- ob_start();
- $walbum->show_action_buttons();
- $results['wanted_action_' . $mbid] = ob_get_clean();
- }
- break;
- case 'reloadnp':
- ob_start();
- show_now_playing();
- $results['now_playing'] = ob_get_clean();
- ob_start();
- $data = Song::get_recently_played();
- Song::build_cache(array_keys($data));
- require_once AmpConfig::get('prefix') . '/templates/show_recently_played.inc.php';
- $results['recently_played'] = ob_get_clean();
- break;
- case 'sidebar':
- switch ($_REQUEST['button']) {
- case 'home':
- case 'modules':
- case 'localplay':
- case 'player':
- case 'preferences':
- $button = $_REQUEST['button'];
- break;
- case 'admin':
- if (Access::check('interface','100')) { $button = $_REQUEST['button']; } else { exit; }
- break;
- default:
- exit;
- } // end switch on button
- Ajax::set_include_override(true);
- ob_start();
- $_SESSION['state']['sidebar_tab'] = $button;
- require_once AmpConfig::get('prefix') . '/templates/sidebar.inc.php';
- $results['sidebar-content'] = ob_get_contents();
- ob_end_clean();
- break;
- case 'shoutbox':
- ob_start();
- $since = $_REQUEST['since'];
- if ($since) {
- $shouts = Shoutbox::get_shouts_since(intval($since / 1000));
- echo "<script language='javascript' type='text/javascript'>";
- foreach ($shouts as $id) {
- $shout = new Shoutbox($id);
- echo "noty({text: '" . addslashes($shout->get_display(true)) . "',
- type: 'alert', layout: 'bottomRight',
- template: '<div class=\"noty_message noty_ampache\"><span class=\"noty_text noty_ampache\"></span><div class=\"noty_close noty_ampache\"></div></div>',
- });";
- }
- echo "</script>";
- }
- $results['live_shoutbox'] = ob_get_clean();
- break;
- case 'start_channel':
- if (Access::check('interface','75')) {
- ob_start();
- $channel = new Channel($_REQUEST['id']);
- if ($channel->id) {
- if ($channel->check_channel()) {
- $channel->stop_channel();
- }
- $channel->start_channel();
- sleep(1);
- echo $channel->get_channel_state();
- }
- $results['channel_state_' . $_REQUEST['id']] = ob_get_clean();
- }
- break;
- case 'stop_channel':
- if (Access::check('interface','75')) {
- ob_start();
- $channel = new Channel($_REQUEST['id']);
- if ($channel->id) {
- $channel->stop_channel();
- sleep(1);
- echo $channel->get_channel_state();
- }
- $results['channel_state_' . $_REQUEST['id']] = ob_get_clean();
- }
- break;
- case 'slideshow':
- ob_start();
- $images = Slideshow::get_current_slideshow();
- if (count($images) > 0) {
- $fsname = 'fslider_' . time();
- echo "<div id='" . $fsname . "'>";
- foreach ($images as $image) {
- echo "<img src='" . $image['url'] . "' alt='' onclick='update_action();' />";
- }
- echo "</div>";
- $results['fslider'] = ob_get_clean();
- ob_start();
- echo "<script language='javascript' type='text/javascript'>";
- echo "$('#" . $fsname . "').rhinoslider({
- showTime: 15000,
- effectTime: 2000,
- randomOrder: true,
- controlsPlayPause: false,
- autoPlay: true,
- showBullets: 'never',
- showControls: 'always',
- controlsMousewheel: false,
- });";
- echo "</script>";
- }
- $results['fslider_script'] = ob_get_clean();
- break;
- default:
- $results['rfc3514'] = '0x1';
- break;
- } // switch on action;
- // We always do this
- echo xoutput_from_array($results);