Merge branch 'saas-dev' into saas-dev-facebook-radio
This commit is contained in:
commit
25c54ce974
183 changed files with 52601 additions and 1553 deletions
|
@ -265,10 +265,12 @@ echo($currentProduct["name"]);
|
|||
//echo Application_Model_Preference::GetPlanLevel();
|
||||
?>
|
||||
</p>
|
||||
<!--
|
||||
<div class="educational-discount">
|
||||
<h4>Are you a student or educator?</h4>
|
||||
<p>Sign up on an annual plan before the end of October to receive a special educational discount. <a href="https://www.airtime.pro/educational-discount">Find out more</a>.</p>
|
||||
</div>
|
||||
-->
|
||||
|
||||
<h3><?php echo(_pro('Choose a plan: ')); ?></h3>
|
||||
<form id="<?php echo $form->getId(); ?>" method="<?php echo $form->getMethod() ?>" action="<?php echo
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
<div class="text-content">
|
||||
<h2><?php echo _("Table Test") ?></h2>
|
||||
<p>
|
||||
Hello
|
||||
</p>
|
||||
<table id="example-table" cellpadding="0" cellspacing="0" class="datatable"></table>
|
||||
</div>
|
|
@ -44,6 +44,9 @@
|
|||
if (this.playerMode == "manual") {
|
||||
this.settings.url = <?php echo $this->streamURL ?>;
|
||||
this.settings.codec = "<?php echo $this->codec ?>";
|
||||
} else if (this.playerMode == "file") {
|
||||
this.settings.url = <?php echo $this->streamURL ?>;
|
||||
this.settings.codec = "<?php echo $this->codec ?>";
|
||||
} else if (this.playerMode == "auto") {
|
||||
this.availableMobileStreamQueue = <?php echo $this->availableMobileStreams?>;
|
||||
this.availableDesktopStreamQueue = <?php echo $this->availableDesktopStreams?>;
|
||||
|
@ -176,9 +179,18 @@
|
|||
};
|
||||
|
||||
MusesPlayer.prototype.setURL = function(url) {
|
||||
MRP.setUrl(url);
|
||||
this.flashDetect ? MRP.setUrl(url) : musesHTMLSetURL(url);
|
||||
|
||||
// update musesPlayer object
|
||||
musesPlayer.settings.url = url;
|
||||
};
|
||||
|
||||
MusesPlayer.prototype.setCodec = function(codec) {
|
||||
//TODO: get rid of this? Doesn't seem to make a difference
|
||||
this.flashDetect ? console.log("blah") : musesHTMLSetCodec(codec);
|
||||
musesPlayer.settings.codec = codec;
|
||||
}
|
||||
|
||||
/** Retry playback after a few seconds (used to throttle attempts to reconnect/play). */
|
||||
MusesPlayer.prototype.deferredPlay = function(streamUrl, delayMSec) {
|
||||
if (!this.flashDetect) {
|
||||
|
@ -217,6 +229,7 @@
|
|||
if (musesPlayer.playerMode == "auto") {
|
||||
var stream = musesPlayer.getNextAvailableStream();
|
||||
musesPlayer.deferredPlay(stream["url"], RETRY_DELAY_MSECS);
|
||||
} else if (musesPlayer.playerMode == "file") {
|
||||
} else {
|
||||
// If in manual mode and there is a problem connecting to
|
||||
// the stream display an error and stop play back.
|
||||
|
@ -233,12 +246,7 @@
|
|||
|
||||
// Triggers the play function on the Muses player object in HTML5 mode
|
||||
function musesHTMLPlayClick() {
|
||||
/*if (MRP.html === undefined) {
|
||||
console.log("inserting player");
|
||||
MRP.insert(musesPlayer.settings);
|
||||
}*/
|
||||
MRP.html.audio.src = MRP.html.src;
|
||||
|
||||
MRP.html.audio.src = musesPlayer.settings.url;
|
||||
MRP.html.audio.play();
|
||||
}
|
||||
|
||||
|
@ -250,6 +258,18 @@
|
|||
//delete MRP.html;
|
||||
}
|
||||
|
||||
function musesHTMLSetURL(url)
|
||||
{
|
||||
MRP.html.audio.src = url;
|
||||
|
||||
//MRP.html.audio.play();
|
||||
//musesPlayer.play();
|
||||
}
|
||||
|
||||
function musesHTMLSetCodec(codec) {
|
||||
MRP.html.audio.codec = codec;
|
||||
}
|
||||
|
||||
function togglePlayStopButton() {
|
||||
document.getElementById("play_button").classList.toggle("hide_button");
|
||||
document.getElementById("stop_button").classList.toggle("hide_button");
|
||||
|
@ -329,6 +349,8 @@
|
|||
|
||||
// Add 3 seconds to the timeout so Airtime has time to update the metadata before we fetch it
|
||||
metadataTimer = setTimeout(attachStreamMetadataToPlayer, time_to_next_track_starts+3000);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -8,10 +8,14 @@
|
|||
<?php echo $this->element->getSubform('preferences_tunein') ?>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
if (Billing::isStationPodcastAllowed()) { ?>
|
||||
<h3 class="collapsible-header" id="soundcloud-heading"><span class="arrow-icon"></span><?php echo _("SoundCloud Settings") ?></h3>
|
||||
<div class="collapsible-content" id="soundcloud-settings">
|
||||
<?php echo $this->element->getSubform('preferences_soundcloud') ?>
|
||||
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<!-- Hide the 'dangerous settings' by default -->
|
||||
<h3 class="collapsible-header closed" id="dangerous-heading"><span class="arrow-icon"></span><?php echo _("Dangerous Options") ?></h3>
|
||||
|
|
|
@ -14,13 +14,9 @@
|
|||
<div id="Logo-img-container">
|
||||
<?php
|
||||
$logoImg = $this->element->getView()->logoImg;
|
||||
if ($logoImg === DEFAULT_LOGO_PLACEHOLDER) {
|
||||
$src = DEFAULT_LOGO_FILE;
|
||||
} else {
|
||||
$src = "data:image/png;base64,".$logoImg;
|
||||
}
|
||||
$src = "data:image/png;base64,".$logoImg;
|
||||
?>
|
||||
<img onError="this.onerror = '';this.style.visibility='hidden';$('#logo-remove-btn').hide();$('[id^=stationLogoRemove]').each(function(i,v){v.style.width=v.style.height=v.style.margin=v.style.padding='0px';});" id="logo-img" onload='resizeImg(this, 450, 450);' src="<?php echo $src ?>" />
|
||||
<img onError="this.onerror = '';this.style.visibility='hidden';$('#logo-remove-btn').hide();$('[id^=stationLogoRemove]').each(function(i,v){v.style.width=v.style.height=v.style.margin=v.style.padding='0px';});" id="logo-img" onload='/*resizeImg(this, 450, 450);*/' src="<?php echo $src ?>" />
|
||||
</div>
|
||||
|
||||
<?php echo $this->element->getElement('locale')->render() ?>
|
||||
|
@ -39,6 +35,5 @@
|
|||
|
||||
<?php echo $this->element->getElement('radioPageLoginButton')->renderViewHelper() ?>
|
||||
<?php echo $this->element->getElement('radioPageLoginButton')->renderLabel() ?>
|
||||
|
||||
</dl>
|
||||
</fieldset>
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
<fieldset class="padded">
|
||||
<?php echo $this->element->getElement('stationPodcastPrivacy')->render() ?>
|
||||
<?php echo $this->element->getElement('stationPodcastFeedUrl')->render() ?>
|
||||
</fieldset>
|
|
@ -1,7 +1,7 @@
|
|||
<fieldset class="padded">
|
||||
<dl class="zend_form">
|
||||
<?php
|
||||
$soundcloudService = new SoundcloudService();
|
||||
$soundcloudService = new Application_Service_SoundcloudService();
|
||||
if ($soundcloudService->hasAccessToken()) {
|
||||
echo $this->element->getElement('SoundCloudDisconnect')->render();
|
||||
} else {
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
<script language="JavaScript">
|
||||
function autoResize(id){
|
||||
var newheight;
|
||||
var newwidth;
|
||||
function autoResize(id){
|
||||
var newheight;
|
||||
var newwidth;
|
||||
|
||||
if(document.getElementById){
|
||||
newheight=document.getElementById(id).contentWindow.document.body.scrollHeight;
|
||||
// Hack to get height in Firefox
|
||||
if (newheight == 0) newheight = newheight = document.getElementById(id).contentWindow.document.documentElement.scrollHeight;
|
||||
newwidth=document.getElementById(id).contentWindow.document.body.scrollWidth;
|
||||
}
|
||||
document.getElementById(id).height= (newheight) + "px";
|
||||
document.getElementById(id).width= (newwidth) + "px";
|
||||
}
|
||||
if(document.getElementById){
|
||||
newheight=document.getElementById(id).contentWindow.document.body.scrollHeight;
|
||||
// Hack to get height in Firefox
|
||||
if (newheight == 0) newheight = newheight = document.getElementById(id).contentWindow.document.documentElement.scrollHeight;
|
||||
newwidth=document.getElementById(id).contentWindow.document.body.scrollWidth;
|
||||
}
|
||||
document.getElementById(id).height= (newheight) + "px";
|
||||
document.getElementById(id).width= (newwidth) + "px";
|
||||
}
|
||||
</script>
|
||||
|
||||
<div class="wrapper">
|
||||
|
@ -31,13 +31,13 @@ document.getElementById(id).width= (newwidth) + "px";
|
|||
<span class='login-img'></span>
|
||||
</a>
|
||||
</div>";
|
||||
}?>
|
||||
}?>
|
||||
|
||||
<div id="tab-1" class="schedule tab_content current">
|
||||
<iframe onLoad="autoResize('schedule_iframe');" id="schedule_iframe" height="300px" scrolling="yes" frameborder="0" src=<?php echo $this->stationUrl."embed/weekly-program?style=premium"?>></iframe>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div id="tab-2" class="about_us tab_content">
|
||||
<h1><?php echo $this->escape($this->stationName) ?></h1>
|
||||
<p><?php echo $this->escape($this->stationDescription) ?></p>
|
||||
|
@ -52,16 +52,275 @@ document.getElementById(id).width= (newwidth) + "px";
|
|||
</form>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
if ($this->displayRssTab) {?>
|
||||
<div id="tab-4" class="podcast tab_content">
|
||||
<div class="rss-title-wrapper">
|
||||
<div id="rss-subscribe">
|
||||
<a target="_blank" href="<?php echo $this->stationPodcastRssUrl ?>" class="rss_icon"><span>Subscribe </span><img src="css/radio-page/img/rss.png"></a>
|
||||
</div>
|
||||
<div id="rss-title">
|
||||
<?php echo $this->podcastTitle ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="jquery_jplayer_1" class="jp-player">
|
||||
</div>
|
||||
<div class="podcast_bck">
|
||||
<div id="jp_container_1" class="jp-audio">
|
||||
<div class="jp-type-playlist">
|
||||
|
||||
<div class="current-track track-overflow">Now Playing: <span class="track-overflow"></span></div>
|
||||
<div class="jp-gui jp-interface">
|
||||
<div class="playbar playbar-buttons">
|
||||
<ul class="jp-controls rss-buttons">
|
||||
<li class="ui-corner-all jp-play">
|
||||
<span class="icon-play icon-white" tabindex="1"><?php /*echo _("play") */?></span>
|
||||
</li>
|
||||
|
||||
<li class="ui-corner-all jp-pause">
|
||||
<span class="icon-pause icon-white" tabindex="1"><?php /*echo _("pause") */?></span>
|
||||
</li>
|
||||
<li class="ui-corner-all jp-stop">
|
||||
<span class="icon-stop icon-white" tabindex="1"><?php /*echo _("stop") */?></span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="playbar playbar-progress">
|
||||
<div class="jp-time-block">
|
||||
<div class="jp-progress">
|
||||
<div class="jp-seek-bar">
|
||||
<div class="jp-play-bar"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="jp-time-holder">
|
||||
<div class="jp-current-time"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="playbar playbar-progress">
|
||||
<div class="jp-volume-block">
|
||||
<div class="jp-mute">
|
||||
<span class="ui-icon" tabindex="1" title="mute"><?php /*echo _("mute") */?></span>
|
||||
</div>
|
||||
<div class="jp-unmute">
|
||||
<span class="ui-icon" tabindex="1" title="unmute"><?php /*echo _("unmute") */?></span>
|
||||
</div>
|
||||
<div class="jp-volume-bar">
|
||||
<div class="jp-volume-bar-value"></div>
|
||||
</div>
|
||||
<div class="jp-volume-max">
|
||||
<span class="ui-icon" tabindex="1" title="max volume"><?php /*echo _("max volume") */?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="rss-tracks">
|
||||
<ul class="jp-playlist">
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<ul class="pagination">
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
var playlist;
|
||||
function buildJplayerPlaylist(page, data) {
|
||||
playlist = new Array();
|
||||
var media;
|
||||
|
||||
$('.rss-tracks ul').html('');
|
||||
$.each(data[Object.keys(data)[page]], function (index, value) {
|
||||
var media_mime_supported = true;
|
||||
media = {
|
||||
title: value.CcFiles.track_title,
|
||||
artist: value.CcFiles.artist_name,
|
||||
}
|
||||
|
||||
if (value.mime == "mp3") {
|
||||
media.mp3 = value.download_url;
|
||||
} else if (value.mime == "ogg") {
|
||||
media.oga = value.download_url;
|
||||
} else if (value.mime == "m4a") {
|
||||
media.m4a = value.download_url;
|
||||
} else if (value.mime == "wav") {
|
||||
media.wav = value.download_url;
|
||||
} else {
|
||||
media_mime_supported = false;
|
||||
}
|
||||
|
||||
var podcast_title_link = "<a class='podcast_title jp-playlist-item' tabindex='0' href='#'>"+value.CcFiles.track_title+"</a>";
|
||||
var podcast_title_no_link = "<div class='podcast_title'>"+value.CcFiles.track_title+"</div>";
|
||||
var playlist_metadata = "<span class='podcast_date'>"+value.publication_date+"</span>" +
|
||||
"<span class='podcast_length'>"+value.CcFiles.length+"</span>" +
|
||||
"<span class='podcast_desc_btn'>Description</span>" +
|
||||
"<div class='podcast_desc'>"+value.CcFiles.description+"</div>";
|
||||
|
||||
if (media_mime_supported) {
|
||||
playlist.push(media);
|
||||
|
||||
var playlist_item = "<li class='jp-playlist-item'><div class='podcast_info'>";
|
||||
|
||||
playlist_item += podcast_title_link + playlist_metadata;
|
||||
|
||||
playlist_item += "<div class='podcast_btn_group'>"+
|
||||
"<span class='podcast_play podcast_action_btn'><a href='#' id='rss-track' data-rss-playlist-id='"+index+"'><img src='css/radio-page/img/podcast_play.png'></a></span>" +
|
||||
"<span class='podcast_download podcast_action_btn'><a id='rss-download-link' href='"+value.download_url+"'><img src='css/radio-page/img/podcast_download.png'></a></span> </div></div></li>";
|
||||
|
||||
} else {
|
||||
// add empty media item to playlist so indexes stay inline with the corret
|
||||
// audio and metadata
|
||||
playlist.push({});
|
||||
|
||||
var playlist_item = "<div class='playlist-item-no-preview podcast_info'>";
|
||||
playlist_item += podcast_title_no_link + playlist_metadata;
|
||||
playlist_item += "<div class='podcast_btn_group'>"+
|
||||
"<span class='podcast_no_play'><img src='css/radio-page/img/podcast_no_play.png'></span>" +
|
||||
"<span class='podcast_download podcast_action_btn'><a id='rss-download-link' href='"+value.download_url+"'><img src='css/radio-page/img/podcast_download.png'></a></span> </div></div>";
|
||||
}
|
||||
|
||||
$('.rss-tracks ul').append(playlist_item);
|
||||
|
||||
});
|
||||
|
||||
_playlist_jplayer.setPlaylist(playlist);
|
||||
|
||||
// we have to set the player to play the first track on page load
|
||||
// or else the play button won't work at first. make sure nothing
|
||||
// is playing first
|
||||
if($("#jquery_jplayer_1").data().jPlayer.status.paused == true){
|
||||
// jPlayer is not currently playing
|
||||
_playlist_jplayer.play(0);
|
||||
$("#jquery_jplayer_1").jPlayer("stop");
|
||||
}
|
||||
|
||||
$('.podcast_play').on('click', function() {
|
||||
_playlist_jplayer.play($(this).find('#rss-track').attr('data-rss-playlist-id'));
|
||||
|
||||
// we need to manually highlight the track that play was clicked on
|
||||
$(this).parents('li').addClass('jp-playlist-current');
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
$('.podcast_desc_btn').click(function(){
|
||||
$(this).toggleClass('current');
|
||||
$(this).next('.podcast_desc').slideToggle();
|
||||
});
|
||||
|
||||
} //buildPlaylist
|
||||
|
||||
_playlist_jplayer = new jPlayerPlaylist({
|
||||
jPlayer: "#jquery_jplayer_1",
|
||||
cssSelectorAncestor: "#jp_container_1"
|
||||
},[], //array of songs will be filled with below's json call
|
||||
{
|
||||
swfPath: baseUrl + "js/jplayer",
|
||||
supplied: "oga, mp3, m4v, m4a, wav",
|
||||
size: {
|
||||
width: "0px",
|
||||
height: "0px",
|
||||
cssClass: "jp-video-270p"
|
||||
},
|
||||
playlistOptions: {
|
||||
autoPlay: false,
|
||||
loopOnPrevious: false,
|
||||
shuffleOnLoop: true,
|
||||
enableRemoveControls: false,
|
||||
displayTime: 0,
|
||||
addTime: 0,
|
||||
removeTime: 0,
|
||||
shuffleTime: 0
|
||||
},
|
||||
ready: function () {
|
||||
|
||||
var episodes = <?php echo $this->episodes ?>;
|
||||
var empty_podcast_message = "<?php echo $this->emptyPodcastMessage ?>";
|
||||
|
||||
if (Object.keys(episodes).length <= 0) {
|
||||
$(".jp-playlist").append(empty_podcast_message);
|
||||
} else {
|
||||
buildJplayerPlaylist(0, episodes);
|
||||
|
||||
|
||||
// update current track metadata on player bar
|
||||
$("#jquery_jplayer_1").bind(jQuery.jPlayer.event.play, function (event) {
|
||||
var current = _playlist_jplayer.current;
|
||||
$('.current-track span').html(playlist[current].title);
|
||||
});
|
||||
|
||||
// build pagination menu
|
||||
var pages = "<li data-page-index='0'><</li>";
|
||||
$.each(episodes, function (index, value) {
|
||||
var page_number = +index + 1;
|
||||
pages += "<li data-page-index='" + index + "'>" + page_number + "</li>";
|
||||
});
|
||||
var last_index = Object.keys(episodes).length - 1;
|
||||
pages += "<li data-page-index='" + last_index + "'>></li>";
|
||||
$("ul.pagination").append(pages);
|
||||
$("ul.pagination").find("li:contains('1')").addClass('current');
|
||||
|
||||
// pagination click
|
||||
$("ul.pagination li").click(function () {
|
||||
buildJplayerPlaylist($(this).attr("data-page-index"), episodes);
|
||||
$(this).siblings().removeClass('current');
|
||||
if ($(this).text() === "<") {
|
||||
$(this).next().addClass("current");
|
||||
} else if ($(this).text() === ">") {
|
||||
$(this).prev().addClass("current");
|
||||
} else {
|
||||
$(this).addClass('current');
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
//turn off player bar when podcast track is played
|
||||
$("a.jp-playlist-item, .jp-play, .podcast_play").click(function () {
|
||||
if ($("#player_iframe").contents().find('.play').hasClass('pause')) {
|
||||
$("#player_iframe").contents().find('.play').click();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
</script>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
<iframe id="player_iframe" frameborder="0" width="100%" style="bottom:0px; left:0px; position:fixed; right:0px;" src=<?php echo $this->stationUrl."embed/player?stream=auto&style=premium";?>></iframe>
|
||||
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){
|
||||
$(document).ready(function () {
|
||||
|
||||
|
||||
|
||||
$("#player_iframe").load(function () {
|
||||
$("#player_iframe").contents().find('.bottom_bar').append("<div class='about_us_btn button' data-tab='tab-2'></div>");
|
||||
|
||||
$("#player_iframe").contents().find('.bottom_bar').append("<div class='flex_spacer' data-tab='tab-1'></div>");
|
||||
$("#player_iframe").contents().find('.bottom_bar').append("<div class='schedule_btn button current' data-tab='tab-1'></div>");
|
||||
$("#player_iframe").contents().find('.bottom_bar').append("<div class='about_us_btn button' data-tab='tab-2'></div>");
|
||||
|
||||
<?php
|
||||
// Is there a better way to do this?
|
||||
if ($this->displayRssTab) {?>
|
||||
$("#player_iframe").contents().find('.bottom_bar').append("<div class='station_rss_btn button' data-tab='tab-4'></div>");
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
$("#player_iframe").contents().find('.bottom_bar .button').click(function(){
|
||||
|
@ -74,6 +333,13 @@ document.getElementById(id).width= (newwidth) + "px";
|
|||
$(this).addClass('current');
|
||||
$("#"+tab_id).addClass('current');
|
||||
});
|
||||
|
||||
//turn off jplayer if it's playing and someone clicks to play the player bar
|
||||
$("#player_iframe").contents().find('.play').click(function () {
|
||||
if ($('.jp-play').is(':hidden')) {
|
||||
$('.jp-pause').click();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// schedule widget tabs
|
||||
|
@ -87,5 +353,6 @@ document.getElementById(id).width= (newwidth) + "px";
|
|||
$("#"+tab_id).addClass('active');
|
||||
});
|
||||
|
||||
})
|
||||
});
|
||||
|
||||
</script>
|
|
@ -1,6 +1,6 @@
|
|||
<div class="ui-widget ui-widget-content block-shadow simple-formblock clearfix padded-strong" id="edit-md-dialog">
|
||||
<div class="ui-widget ui-widget-content block-shadow simple-formblock clearfix padded-strong edit-md-dialog">
|
||||
<div class="inner_editor_title">
|
||||
<?php if ($this->permissionDenied) { ?> <h3>You do not have permission to edit this track.</h3> <?php } ?>
|
||||
<?php if ($this->permissionDenied) { ?> <h3><?php echo _("You do not have permission to edit this track.") ?></h3> <?php } ?>
|
||||
<H2><?php
|
||||
if ($this->permissionDenied) {
|
||||
echo(_("Viewing "));
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
<div class="angular_wrapper" ng-controller="Publish">
|
||||
<div class="inner_editor_title">
|
||||
<h2>
|
||||
<?php echo _("Publishing") ?> "<span ng-bind="media.track_title" class="title_obj_name"></span>"
|
||||
</h2>
|
||||
<button ng-click="openEditDialog()" class="btn publish-edit-md"><?php echo _("Edit Metadata...") ?></button>
|
||||
</div>
|
||||
<div class="inner_editor_wrapper">
|
||||
<form class="media-metadata">
|
||||
<input ng-value="media.id" class="obj_id" type="hidden"/>
|
||||
<label class="publish-md-field"><?php echo _("Title:") ?></label>
|
||||
<input disabled ng-model="media.track_title" type="text"/>
|
||||
|
||||
<label class="publish-md-field"><?php echo _("Creator:") ?></label>
|
||||
<input disabled ng-model="media.artist_name" type="text"/>
|
||||
|
||||
<label class="publish-md-field"><?php echo _("Description:") ?></label>
|
||||
<textarea disabled ng-model="media.description"></textarea>
|
||||
<fieldset>
|
||||
<legend><?php echo _("Publish to:"); ?></legend>
|
||||
<div class="publish-sources" ng-repeat="source in sources.toPublish">
|
||||
<input ng-disabled="{{source.status == 2}}" ng-model="publishData[source.source]" type="checkbox" name="publish_sources" id="{{source.source}}">
|
||||
<label class="source-name" for="{{source.source}}">{{source.label}}</label>
|
||||
<span ng-if="source.status == 2" style="margin: auto" ng-bind-html="sourceConnectEnum[source.source]"></span>
|
||||
</div>
|
||||
<div ng-if="sources.toPublish.length == 0">
|
||||
<?php echo _("You have already published this track to all available sources!") . "<br/>"
|
||||
. _("Published tracks can be removed or updated below.") ?>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend><?php echo _("Published on:"); ?></legend>
|
||||
<div class="published-sources" ng-repeat="source in sources.published">
|
||||
<span class="sp-checked-icon checked-icon left-floated"></span>
|
||||
<span class="source-name">{{source.label}}</span>
|
||||
<button ng-disabled="{{source.status == -1}}" class="btn btn-small btn-danger" ng-click="remove(source.source)"><?php echo _("Unpublish") ?></button>
|
||||
</div>
|
||||
<div ng-if="sources.published.length == 0">
|
||||
<?php echo _("You haven't published this track to any sources!") . "<br/>"
|
||||
. _("Check the boxes above and hit 'Publish' to publish this track to the marked sources.") ?>
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="btn-toolbar clearfix">
|
||||
<div class="btn-group pull-right">
|
||||
<button ng-click="discard()" class="btn" type="button" name="close">
|
||||
<?php echo _("Close") ?>
|
||||
</button>
|
||||
</div>
|
||||
<div class='btn-group pull-right'>
|
||||
<button disabled="disabled" ng-click="publish()" class="btn publish-btn" title='<?php echo _("Publish") ?>' type="button">
|
||||
<?php echo _("Publish") ?>
|
||||
</button>
|
||||
</div>
|
||||
<div class='success' style='display:none'></span></div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,20 @@
|
|||
<div class="media_type_selector dashboard_sub_nav" data-selection-id="<?php echo MediaType::FILE ?>">
|
||||
<a href="<?php echo $subnavPrefix; ?>#tracks">
|
||||
<span class="selector-name"><i class='icon-music icon-white'></i><?php echo _("Tracks") ?></span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="media_type_selector dashboard_sub_nav" data-selection-id="<?php echo MediaType::PLAYLIST ?>">
|
||||
<a href="<?php echo $subnavPrefix; ?>#playlists">
|
||||
<span class="selector-name"><i class='icon-list icon-white'></i><?php echo _("Playlists") ?></span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="media_type_selector dashboard_sub_nav" data-selection-id="<?php echo MediaType::BLOCK ?>">
|
||||
<a href="<?php echo $subnavPrefix; ?>#smart-blocks">
|
||||
<span class="selector-name"><i class='icon-time icon-white'></i><?php echo _("Smart Blocks") ?></span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="media_type_selector dashboard_sub_nav" data-selection-id="<?php echo MediaType::WEBSTREAM ?>">
|
||||
<a href="<?php echo $subnavPrefix; ?>#webstreams">
|
||||
<span class="selector-name"><i class='icon-random icon-white'></i><?php echo _("Webstreams") ?></span>
|
||||
</a>
|
||||
</div>
|
|
@ -0,0 +1,9 @@
|
|||
<div class="suspension_notice">
|
||||
<H2>Station Suspended</H2>
|
||||
<p>
|
||||
<?php echo(_pro(sprintf('Your free trial is now over. To restore your station, <a href="%s">please upgrade your plan now</a>.', '/billing/upgrade'))); ?>
|
||||
</p>
|
||||
<p>
|
||||
<?php echo(_pro(sprintf('Your station will be <b>removed</b> within 7 days if you do not upgrade. If you believe this suspension was in error, <a href="%s">please contact support</a>.', 'https://sourcefabricberlin.zendesk.com/anonymous_requests/new'))); ?>
|
||||
</p>
|
||||
</div>
|
|
@ -6,7 +6,7 @@
|
|||
<div class="trial-box-calendar-gray"><?php echo _("days") ?></div>
|
||||
</div>
|
||||
<div class="trial-box-button">
|
||||
<a title="<?php echo sprintf(_pro("Purchase an %s plan!"), SAAS_PRODUCT_BRANDING_NAME)?>" href="/billing/upgrade"><?php echo _pro("My Account") ?></a>
|
||||
<a title="<?php echo sprintf(_pro("Purchase an %s plan!"), SAAS_PRODUCT_BRANDING_NAME)?>" href="<?php echo Application_Common_OsPath::getBaseDir() . 'billing/upgrade' ?>"><?php echo _pro("My Account") ?></a>
|
||||
</div>
|
||||
</div>
|
||||
<?php }?>
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: asantoni
|
||||
* Date: 17/11/15
|
||||
* Time: 4:31 PM
|
||||
*/
|
||||
?>
|
||||
|
||||
<div class="content-pane" style="width: 100%">
|
||||
<?php require(__DIR__."/featureupgrade.phtml"); ?>
|
||||
|
||||
</div>
|
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: asantoni
|
||||
* Date: 17/11/15
|
||||
* Time: 4:31 PM
|
||||
*/
|
||||
?>
|
||||
|
||||
<?php require(__DIR__."/featureupgrade.phtml"); ?>
|
||||
|
||||
<div class="angular_wrapper" ng-controller="Publish">
|
||||
|
||||
<div class="btn-toolbar clearfix" style="position: absolute; bottom: 4px; right: 4px">
|
||||
<div class="btn-group pull-right">
|
||||
<button ng-click="discard()" class="btn" type="button" name="close">
|
||||
<?php echo _("Close") ?>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: asantoni
|
||||
* Date: 17/11/15
|
||||
* Time: 2:32 PM
|
||||
*/
|
||||
?>
|
||||
|
||||
<div id="upgrade-feature-locked">
|
||||
<h2>Get a built-in podcast for your radio station.</h2>
|
||||
<h3>Upgrade to unlock this feature today. Podcast hosting is included on all Starter, Plus, and Premium plans.</h3>
|
||||
|
||||
<p>With our built-in podcast, you can:
|
||||
<ul>
|
||||
<li>Share your own uploads through your podcast feed for on-demand listening.</li>
|
||||
<li>Invite your fans to listen to your podcast on your Radio Page.</li>
|
||||
<li>Publish tracks to both SoundCloud and your station podcast with one click.</li>
|
||||
<li>Reach more listeners, both offline and mobile with your radio podcast.</li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<a href="<?php echo(Application_Common_HTTPHelper::getStationUrl() . "billing/upgrade");?>" class="upgrade-cta-button">Upgrade today!</a>
|
||||
</div>
|
||||
|
||||
|
43
airtime_mvc/application/views/scripts/podcast/podcast.phtml
Normal file
43
airtime_mvc/application/views/scripts/podcast/podcast.phtml
Normal file
|
@ -0,0 +1,43 @@
|
|||
|
||||
|
||||
<div class="angular_wrapper" ng-controller="Podcast">
|
||||
<div class="inner_editor_title">
|
||||
<h2>
|
||||
<?php echo _("Editing ") ?>"<span ng-bind="podcast.title" class="title_obj_name"></span>"
|
||||
</h2>
|
||||
</div>
|
||||
<div class="inner_editor_wrapper">
|
||||
<form class="podcast-metadata">
|
||||
<input ng-value="podcast.id" class="obj_id" type="hidden"/>
|
||||
<div>
|
||||
<label for="podcast_name"><?php echo _("Podcast Name: ") ?></label>
|
||||
<span class="podcast-metadata-field">{{podcast.title}}</span>
|
||||
</div>
|
||||
<div>
|
||||
<label for="podcast_url"><?php echo _("Podcast URL: ") ?></label>
|
||||
<a href="{{podcast.url}}" target="_blank">
|
||||
<span class="podcast-metadata-field">{{podcast.url}}</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<label for="podcast_auto_ingest"><?php echo _("Automatically download latest episodes?") ?></label>
|
||||
<input name="podcast_auto_ingest" ng-model="podcast.auto_ingest" type="checkbox"/>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!-- <table class="datatable podcast_episodes" cellpadding="0" cellspacing="0"></table>-->
|
||||
|
||||
<div class="btn-toolbar clearfix">
|
||||
<div class="btn-group pull-right">
|
||||
<button ng-click="discard()" class="btn" type="button" name="cancel">
|
||||
<?php echo _("Cancel") ?>
|
||||
</button>
|
||||
</div>
|
||||
<div class='btn-group pull-right'>
|
||||
<button ng-click="savePodcast()" class="btn" title='<?php echo _("Save podcast") ?>' type="button">
|
||||
<?php echo _("Save") ?>
|
||||
</button>
|
||||
</div>
|
||||
<div class='success' style='display:none'></span></div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,22 @@
|
|||
<div id="podcast_url_dialog">
|
||||
<form id="podcast_url_form" name="podcast_url_form" style="margin-top: 10px;">
|
||||
<?php echo $this->csrf ?>
|
||||
<table style="padding: 0;">
|
||||
<tr>
|
||||
<td style="padding-top: 7px; vertical-align: top">
|
||||
<label for="podcast_url_field">
|
||||
<?php echo _("RSS Feed URL:"); ?>
|
||||
</label>
|
||||
</td>
|
||||
<td style="text-align: right">
|
||||
<input id="podcast_url_field" type="url" name="url" size="40" style="margin-left: 10px; margin-bottom: 10px;" placeholder="http://example.com/podcast.xml"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<button class="btn btn-new right-floated" type="submit">
|
||||
<?php echo _("Subscribe"); ?>
|
||||
</button>
|
||||
<span class="errors" style="display:none"></span>
|
||||
</form>
|
||||
<!-- <p style="clear: both; text-align: center; opacity: 0.7; margin-top: 20px;">Paste the URL of a podcast RSS feed above.</p> -->
|
||||
</div>
|
126
airtime_mvc/application/views/scripts/podcast/station.phtml
Normal file
126
airtime_mvc/application/views/scripts/podcast/station.phtml
Normal file
|
@ -0,0 +1,126 @@
|
|||
<div id="station_podcast">
|
||||
<div class="angular_wrapper" ng-controller="StationPodcast">
|
||||
<div class="station_podcast_wrapper">
|
||||
<div class="inner_editor_title">
|
||||
<h2>
|
||||
<span class="title_obj_name"><?php echo _("My Podcast") ?></span>
|
||||
</h2>
|
||||
<button ng-click="savePodcast()" class="btn" title='<?php echo _("Save station podcast") ?>' type="button">
|
||||
<?php echo _("Save") ?>
|
||||
</button>
|
||||
<a href="{{podcast.url}}" target="_blank">
|
||||
<button class="btn"><?php echo _("View Feed") ?></button>
|
||||
</a>
|
||||
<div class='success' style='display:none'></div>
|
||||
</div>
|
||||
<form class="podcast-metadata">
|
||||
<?php echo $this->form->getElement('csrf') ?>
|
||||
<input ng-value="podcast.id" class="obj_id" type="hidden"/>
|
||||
|
||||
<h3 class="collapsible-header"><span class="arrow-icon"></span><?php echo _("General Fields") ?></h3>
|
||||
<div class="collapsible-content">
|
||||
<fieldset class="padded">
|
||||
<label><?php echo _("Name") ?></label>
|
||||
<input name="podcast_name" ng-model="podcast.title" type="text"/>
|
||||
|
||||
<label><?php echo _("Creator") ?></label>
|
||||
<input name="podcast_creator" ng-model="podcast.creator" type="text"/>
|
||||
|
||||
<label><?php echo _("URL") ?></label>
|
||||
<input disabled name="podcast_url" ng-model="podcast.url" type="text"/>
|
||||
|
||||
<label><?php echo _("Description") ?></label>
|
||||
<textarea name="podcast_description" ng-model="podcast.description"></textarea>
|
||||
|
||||
<label><?php echo _("Language") ?></label>
|
||||
<select name="podcast_language" ng-model="podcast.language">
|
||||
<?php
|
||||
foreach(Application_Common_LocaleHelper::getISO6391LanguageCodes() as $code=>$lang) {
|
||||
echo "<option value='$code'>$lang</option>";
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
|
||||
<label><?php echo _("Copyright") ?></label>
|
||||
<input name="podcast_copyright" ng-model="podcast.copyright" type="text"/>
|
||||
|
||||
<label><?php echo _("Link") ?></label>
|
||||
<input name="podcast_link" ng-model="podcast.link" type="url"/>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<h3 class="collapsible-header"><span class="arrow-icon"></span><?php echo _("iTunes Fields") ?></h3>
|
||||
<div class="collapsible-content">
|
||||
<fieldset class="padded">
|
||||
<label><?php echo _("Author") ?></label>
|
||||
<input name="podcast_itunes_author" ng-model="podcast.itunes_author" type="text"/>
|
||||
|
||||
<label><?php echo _("Keywords") ?></label>
|
||||
<input name="podcast_itunes_keywords" ng-model="podcast.itunes_keywords" type="text"/>
|
||||
|
||||
<label><?php echo _("Summary") ?></label>
|
||||
<textarea name="podcast_itunes_summary" ng-model="podcast.itunes_summary"></textarea>
|
||||
|
||||
<label><?php echo _("Subtitle") ?></label>
|
||||
<textarea name="podcast_itunes_subtitle" ng-model="podcast.itunes_subtitle"></textarea>
|
||||
|
||||
<label><?php echo _("Category") ?></label>
|
||||
<input name="podcast_itunes_category" ng-model="podcast.itunes_category" type="text"/>
|
||||
|
||||
<label><?php echo _("Explicit") ?></label>
|
||||
<input name="podcast_itunes_explicit" ng-model="podcast.itunes_explicit" type="checkbox"/>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<h3 class="collapsible-header" id="podcast-heading"><span class="arrow-icon"></span><?php echo _("Privacy Settings"); ?></h3>
|
||||
<div class="collapsible-content" id="podcast-settings">
|
||||
<fieldset class="padded">
|
||||
<dl>
|
||||
<?php echo $this->form->getSubform('preferences_podcast')->getElement("stationPodcastPrivacy")->renderLabel() ?>
|
||||
<div id="podcast-privacy-options">
|
||||
<?php echo $this->form->getSubform('preferences_podcast')->getElement("stationPodcastPrivacy")->renderViewHelper() ?>
|
||||
</div>
|
||||
<div style="clear:both"></div>
|
||||
<?php echo $this->form->getSubform('preferences_podcast')->getElement("stationPodcastFeedUrl") ?>
|
||||
|
||||
</dl>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<p id="station_podcast_help_text">
|
||||
<?php echo(sprintf(_("For detailed information on what these metadata fields mean, please see the %sRSS specification%s
|
||||
or %sApple's podcasting documentation%s."),
|
||||
'<a href="http://cyber.law.harvard.edu/rss/rss.html#requiredChannelElements">', '</a>',
|
||||
'<a target="_blank" href="http://www.apple.com/ca/itunes/podcasts/specs.html">', "</a>")); ?>
|
||||
</p>
|
||||
</form>
|
||||
|
||||
<div class="btn-toolbar clearfix">
|
||||
<div class='btn-group pull-right'>
|
||||
<button ng-click="savePodcast()" class="btn" title='<?php echo _("Save station podcast") ?>' type="button">
|
||||
<?php echo _("Save") ?>
|
||||
</button>
|
||||
</div>
|
||||
<div class='success' style='display:none'></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<table class="datatable podcast_episodes" cellpadding="0" cellspacing="0"></table>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
<?php echo "var podcast = " . $this->podcast . ";" ?>
|
||||
AIRTIME.podcast.podcastApp.value('podcast', podcast);
|
||||
AIRTIME.podcast.podcastApp.value('tab', null);
|
||||
var wrapper = $(".angular_wrapper");
|
||||
angular.bootstrap(wrapper.get(0), ["podcast"]);
|
||||
});
|
||||
|
||||
$('.collapsible-header').click(function() {
|
||||
$(this).next().toggle('fast');
|
||||
$(this).toggleClass("closed");
|
||||
return false;
|
||||
});
|
||||
|
||||
</script>
|
|
@ -1,30 +1,7 @@
|
|||
<div><!-- jQuery UI changes the styling on the outermost div; use a blank div so as not to break the .wrapper styling-->
|
||||
<div class="wrapper">
|
||||
<div id="media_selector_wrapper">
|
||||
<div class="media_type_selector dashboard_sub_nav" data-selection-id="1">
|
||||
<a href="#tracks">
|
||||
<i class='icon-music icon-white'></i>
|
||||
<span class="selector-name"><?php echo _("Tracks") ?></span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="media_type_selector dashboard_sub_nav" data-selection-id="2">
|
||||
<a href="#playlists">
|
||||
<i class='icon-list icon-white'></i>
|
||||
<span class="selector-name"><?php echo _("Playlists") ?></span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="media_type_selector dashboard_sub_nav" data-selection-id="3">
|
||||
<a href="#smart-blocks">
|
||||
<i class='icon-time icon-white'></i>
|
||||
<span class="selector-name"><?php echo _("Smart Blocks") ?></span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="media_type_selector dashboard_sub_nav" data-selection-id="4">
|
||||
<a href="#webstreams">
|
||||
<i class='icon-random icon-white'></i>
|
||||
<span class="selector-name"><?php echo _("Webstreams") ?></span>
|
||||
</a>
|
||||
</div>
|
||||
<?php $subnavPrefix = ""; require_once APPLICATION_PATH . "views/scripts/partialviews/dashboard-sub-nav.php"; ?>
|
||||
</div>
|
||||
<?php echo $this->csrf ?>
|
||||
|
||||
|
@ -48,7 +25,11 @@
|
|||
<div id="show_builder" class="sb-content content-pane wide-panel">
|
||||
<div class="panel-header">
|
||||
<ul class="nav nav-tabs">
|
||||
<li id="schedule-tab" role="presentation" class="active"><a href="#">Scheduled Shows</a></li>
|
||||
<li id="schedule-tab" role="presentation" class="active">
|
||||
<a href="javascript:void(0)" class="tab-name" title="<?php echo _("Scheduled Shows") ?>">
|
||||
<?php echo _("Scheduled Shows") ?>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="outer-datatable-wrapper active-tab">
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<div class="panel-header">
|
||||
<div id="advanced-options" class="btn-group">
|
||||
<button class="btn btn-small dropdown-toggle" data-toggle="dropdown">
|
||||
<span id="filter_message"></span>
|
||||
<span id="lib-filter-message"></span>
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<div id="advanced_search" class="advanced_search form-horizontal dropdown-menu"></div>
|
||||
|
@ -15,13 +15,19 @@
|
|||
</div>
|
||||
<div class="outer-datatable-wrapper">
|
||||
<table id="library_display" cellpadding="0" cellspacing="0" class="datatable"></table>
|
||||
<table id="podcast_table" cellpadding="0" cellspacing="0" class="datatable"></table>
|
||||
<table id="podcast_episodes_table" cellpadding="0" cellspacing="0" class="datatable"></table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="show_builder" class="sb-content content-pane wide-panel">
|
||||
<div class="panel-header">
|
||||
<ul class="nav nav-tabs">
|
||||
<li id="schedule-tab" role="presentation" class="active"><a href="javascript:void(0)">Scheduled Shows</a></li>
|
||||
<li id="schedule-tab" role="presentation" class="active">
|
||||
<a href="javascript:void(0)" class="tab-name" title="<?php echo _("Scheduled Shows") ?>">
|
||||
<?php echo _("Scheduled Shows") ?>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="outer-datatable-wrapper active-tab">
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue