diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php
index 1e9ea7313..296cfcdaf 100644
--- a/airtime_mvc/application/controllers/ApiController.php
+++ b/airtime_mvc/application/controllers/ApiController.php
@@ -814,6 +814,12 @@ class ApiController extends Zend_Controller_Action
Application_Model_Preference::SetSourceSwitchStatus($sourcename, "off");
Application_Model_LiveLog::SetEndTime($sourcename == 'scheduled_play'?'S':'L',
new DateTime("now", new DateTimeZone('UTC')));
+ }elseif($status == "true" && Application_Model_Preference::GetAutoSwitch()){
+ $data = array("sourcename"=>$sourcename, "status"=>"on");
+ Application_Model_RabbitMq::SendMessageToPypo("switch_source", $data);
+ Application_Model_Preference::SetSourceSwitchStatus($sourcename, "on");
+ Application_Model_LiveLog::SetNewLogTime($sourcename == 'scheduled_play'?'S':'L',
+ new DateTime("now", new DateTimeZone('UTC')));
}
Application_Model_Preference::SetSourceStatus($sourcename, $status);
}
diff --git a/airtime_mvc/application/controllers/PreferenceController.php b/airtime_mvc/application/controllers/PreferenceController.php
index bca1bb42d..376f5e142 100644
--- a/airtime_mvc/application/controllers/PreferenceController.php
+++ b/airtime_mvc/application/controllers/PreferenceController.php
@@ -225,6 +225,7 @@ class PreferenceController extends Zend_Controller_Action
Application_Model_Preference::SetLiveSteamMasterPassword($values["master_password"]);
Application_Model_Preference::SetDefaultTransitionFade($values["transition_fade"]);
Application_Model_Preference::SetAutoTransition($values["auto_transition"]);
+ Application_Model_Preference::SetAutoSwitch($values["auto_switch"]);
if (!$isSaas) {
if (!Application_Model_Preference::GetMasterDjConnectionUrlOverride()) {
@@ -275,7 +276,7 @@ class PreferenceController extends Zend_Controller_Action
}
$live_stream_subform->updateVariables();
- $this->view->confirm_pypo_restart_text = "If you change the username or password values for an enabled stream the playout engine will be rebooted and your listeners will hear silence for 5-10 seconds. Changing the following fields will NOT cause a reboot: Stream Label (Global Settings), and Switch Transition Fade(s), Master Username, and Master Password (Input Stream Settings).";
+ $this->view->confirm_pypo_restart_text = "If you change the username or password values for an enabled stream the playout engine will be rebooted and your listeners will hear silence for 5-10 seconds. Changing the following fields will NOT cause a reboot: Stream Label (Global Settings), and Switch Transition Fade(s), Master Username, and Master Password (Input Stream Settings). If Airtime is recording, and if the change causes a playout engine restart, the recording will be interrupted.";
$this->view->num_stream = $num_of_stream;
$this->view->enable_stream_conf = Application_Model_Preference::GetEnableStreamConf();
diff --git a/airtime_mvc/application/forms/AddUser.php b/airtime_mvc/application/forms/AddUser.php
index cc32dcdd8..c603ed371 100644
--- a/airtime_mvc/application/forms/AddUser.php
+++ b/airtime_mvc/application/forms/AddUser.php
@@ -49,6 +49,7 @@ class Application_Form_AddUser extends Zend_Form
$email->setLabel('Email:');
$email->setAttrib('class', 'input_text');
$email->addFilter('StringTrim');
+ $email->setRequired(true);
$email->addValidator('EmailAddress');
$this->addElement($email);
diff --git a/airtime_mvc/application/forms/LiveStreamingPreferences.php b/airtime_mvc/application/forms/LiveStreamingPreferences.php
index 2b0bb85b3..8a4e1a674 100644
--- a/airtime_mvc/application/forms/LiveStreamingPreferences.php
+++ b/airtime_mvc/application/forms/LiveStreamingPreferences.php
@@ -15,13 +15,20 @@ class Application_Form_LiveStreamingPreferences extends Zend_Form_SubForm
$defaultFade = '00.000000';
}
- // automatic switch off
+ // automatic trasition on source disconnection
$auto_transition = new Zend_Form_Element_Checkbox("auto_transition");
$auto_transition->setLabel("Auto Switch Off")
->setValue(Application_Model_Preference::GetAutoTransition())
->setDecorators(array('ViewHelper'));
$this->addElement($auto_transition);
+ // automatic switch on upon source connection
+ $auto_switch = new Zend_Form_Element_Checkbox("auto_switch");
+ $auto_switch->setLabel("Auto Switch On")
+ ->setValue(Application_Model_Preference::GetAutoSwitch())
+ ->setDecorators(array('ViewHelper'));
+ $this->addElement($auto_switch);
+
// Default transition fade
$transition_fade = new Zend_Form_Element_Text("transition_fade");
$transition_fade->setLabel("Switch Transition Fade (s)")
diff --git a/airtime_mvc/application/models/Preference.php b/airtime_mvc/application/models/Preference.php
index 88e3df29d..10b0febab 100644
--- a/airtime_mvc/application/models/Preference.php
+++ b/airtime_mvc/application/models/Preference.php
@@ -877,6 +877,14 @@ class Application_Model_Preference
return self::GetValue("auto_transition");
}
+ public static function SetAutoSwitch($value){
+ self::SetValue("auto_switch", $value, false);
+ }
+
+ public static function GetAutoSwitch(){
+ return self::GetValue("auto_switch");
+ }
+
public static function SetEnableSystemEmail($upload) {
self::SetValue("enable_system_email", $upload);
}
diff --git a/airtime_mvc/application/models/User.php b/airtime_mvc/application/models/User.php
index e246c4d8f..cb0e8fa00 100644
--- a/airtime_mvc/application/models/User.php
+++ b/airtime_mvc/application/models/User.php
@@ -117,7 +117,7 @@ class Application_Model_User {
public function setEmail($email){
$user = $this->_userInstance;
- $user->setDbEmail($email);
+ $user->setDbEmail(strtolower($email));
}
public function setCellPhone($cellPhone){
diff --git a/airtime_mvc/application/views/scripts/form/preferences_livestream.phtml b/airtime_mvc/application/views/scripts/form/preferences_livestream.phtml
index dcd56fee5..00221bf4e 100644
--- a/airtime_mvc/application/views/scripts/form/preferences_livestream.phtml
+++ b/airtime_mvc/application/views/scripts/form/preferences_livestream.phtml
@@ -17,6 +17,22 @@
+
+
+
+
+ element->getElement('auto_switch') ?>
+ element->getElement('auto_switch')->hasErrors()) : ?>
+
+ element->getElement('auto_switch')->getMessages() as $error): ?>
+
+
+
+
+
diff --git a/airtime_mvc/public/js/airtime/preferences/streamsetting.js b/airtime_mvc/public/js/airtime/preferences/streamsetting.js
index 43a1f8b86..8b65350cd 100644
--- a/airtime_mvc/public/js/airtime/preferences/streamsetting.js
+++ b/airtime_mvc/public/js/airtime/preferences/streamsetting.js
@@ -311,6 +311,27 @@ $(document).ready(function() {
},
})
+ $("#auto_switch_help").qtip({
+ content: {
+ text: "Check this box to automatically switch on Master/Show source upon source disconnection."
+ },
+ hide: {
+ delay: 500,
+ fixed: true
+ },
+ style: {
+ border: {
+ width: 0,
+ radius: 4
+ },
+ classes: "ui-tooltip-dark ui-tooltip-rounded"
+ },
+ position: {
+ my: "left bottom",
+ at: "right center"
+ },
+ })
+
$(".stream_username_help_icon").qtip({
content: {
text: "If your live streaming client does not ask for a username, this field should be 'source'."
diff --git a/airtime_mvc/public/js/airtime/schedule/add-show.js b/airtime_mvc/public/js/airtime/schedule/add-show.js
index e367aa2a3..5c161e097 100644
--- a/airtime_mvc/public/js/airtime/schedule/add-show.js
+++ b/airtime_mvc/public/js/airtime/schedule/add-show.js
@@ -12,7 +12,7 @@ function startDpSelect(dateText, inst) {
date = new Date(time[0], time[1] - 1, time[2]);
if (inst.input)
- inst.input.trigger('change');
+ inst.input.trigger('input');
}
function endDpSelect(dateText, inst) {
@@ -22,19 +22,19 @@ function endDpSelect(dateText, inst) {
date = new Date(time[0], time[1] - 1, time[2]);
if (inst.input)
- inst.input.trigger('change');
+ inst.input.trigger('input');
}
function createDateInput(el, onSelect) {
var date;
el.datepicker({
- minDate: adjustDateToServerDate(new Date(), timezoneOffset),
- onSelect: onSelect,
- dateFormat: 'yy-mm-dd',
- closeText: 'Close',
- showButtonPanel: true,
- firstDay: weekStart
+ minDate: adjustDateToServerDate(new Date(), timezoneOffset),
+ onSelect: onSelect,
+ dateFormat: 'yy-mm-dd',
+ closeText: 'Close',
+ showButtonPanel: true,
+ firstDay: weekStart
});
}
@@ -83,6 +83,14 @@ function beginEditShow(data){
openAddShowForm();
}
+function onStartTimeSelect(){
+ $("#add_show_start_time").trigger('input');
+}
+
+function onEndTimeSelect(){
+ $("#add_show_end_time").trigger('input');
+}
+
function setAddShowEvents() {
var form = $("#add-show-form");
@@ -255,12 +263,14 @@ function setAddShowEvents() {
createDateInput(form.find("#add_show_end_date_no_repeat"), endDpSelect);
createDateInput(form.find("#add_show_end_date"), endDpSelect);
- form.find("#add_show_start_time").timepicker({
+ $("#add_show_start_time").timepicker({
amPmText: ['', ''],
- defaultTime: '00:00'
+ defaultTime: '00:00',
+ onSelect: onStartTimeSelect
});
- form.find("#add_show_end_time").timepicker({
- amPmText: ['', '']
+ $("#add_show_end_time").timepicker({
+ amPmText: ['', ''],
+ onSelect: onEndTimeSelect
});
form.find('input[name^="add_show_rebroadcast_date_absolute"]').datepicker({
@@ -438,72 +448,81 @@ function setAddShowEvents() {
});
});
+ var regDate = new RegExp(/^[0-9]{4}-[0-1][0-9]-[0-3][0-9]/);
+ var regTime = new RegExp(/^[0-2][0-9]:[0-5][0-9]/);
+
// when start date/time changes, set end date/time to start date/time+1 hr
- $('#add_show_start_date, #add_show_start_time').change(function(){
+ $('#add_show_start_date, #add_show_start_time').bind('input', 'change', function(){
var startDateString = $('#add_show_start_date').val();
var startTimeString = $('#add_show_start_time').val();
- var startDate = startDateString.split('-');
- var startTime = startTimeString.split(':');
- var startDateTime = new Date(startDate[0], parseInt(startDate[1], 10)-1, startDate[2], startTime[0], startTime[1], 0, 0);
-
- var endDateString = $('#add_show_end_date_no_repeat').val();
- var endTimeString = $('#add_show_end_time').val()
- var endDate = endDateString.split('-');
- var endTime = endTimeString.split(':');
- var endDateTime = new Date(endDate[0], parseInt(endDate[1], 10)-1, endDate[2], endTime[0], endTime[1], 0, 0);
-
- if(startDateTime.getTime() >= endDateTime.getTime()){
- var duration = $('#add_show_duration').val();
- // parse duration
- var time = 0;
- var info = duration.split(' ');
- var h = parseInt(info[0], 10);
- time += h * 60 * 60* 1000;
- if(info.length >1 && $.trim(info[1]) !== ''){
- var m = parseInt(info[1], 10);
- time += m * 60 * 1000;
- }
- endDateTime = new Date(startDateTime.getTime() + time);
- }
-
- var endDateFormat = endDateTime.getFullYear() + '-' + pad(endDateTime.getMonth()+1,2) + '-' + pad(endDateTime.getDate(),2);
- var endTimeFormat = pad(endDateTime.getHours(),2) + ':' + pad(endDateTime.getMinutes(),2);
-
- $('#add_show_end_date_no_repeat').val(endDateFormat);
- $('#add_show_end_time').val(endTimeFormat);
-
- // calculate duration
- var startDateTimeString = startDateString + " " + startTimeString;
- var endDateTimeString = $('#add_show_end_date_no_repeat').val() + " " + $('#add_show_end_time').val();
- calculateDuration(startDateTimeString, endDateTimeString);
+
+ if(regDate.test(startDateString) && regTime.test(startTimeString)){
+ var startDate = startDateString.split('-');
+ var startTime = startTimeString.split(':');
+ var startDateTime = new Date(startDate[0], parseInt(startDate[1], 10)-1, startDate[2], startTime[0], startTime[1], 0, 0);
+
+ var endDateString = $('#add_show_end_date_no_repeat').val();
+ var endTimeString = $('#add_show_end_time').val()
+ var endDate = endDateString.split('-');
+ var endTime = endTimeString.split(':');
+ var endDateTime = new Date(endDate[0], parseInt(endDate[1], 10)-1, endDate[2], endTime[0], endTime[1], 0, 0);
+
+ if(startDateTime.getTime() >= endDateTime.getTime()){
+ var duration = $('#add_show_duration').val();
+ // parse duration
+ var time = 0;
+ var info = duration.split(' ');
+ var h = parseInt(info[0], 10);
+ time += h * 60 * 60* 1000;
+ if(info.length >1 && $.trim(info[1]) !== ''){
+ var m = parseInt(info[1], 10);
+ time += m * 60 * 1000;
+ }
+ endDateTime = new Date(startDateTime.getTime() + time);
+ }
+
+ var endDateFormat = endDateTime.getFullYear() + '-' + pad(endDateTime.getMonth()+1,2) + '-' + pad(endDateTime.getDate(),2);
+ var endTimeFormat = pad(endDateTime.getHours(),2) + ':' + pad(endDateTime.getMinutes(),2);
+
+ $('#add_show_end_date_no_repeat').val(endDateFormat);
+ $('#add_show_end_time').val(endTimeFormat);
+
+ // calculate duration
+ var startDateTimeString = startDateString + " " + startTimeString;
+ var endDateTimeString = $('#add_show_end_date_no_repeat').val() + " " + $('#add_show_end_time').val();
+ calculateDuration(startDateTimeString, endDateTimeString);
+ }
});
// when end date/time changes, check if the changed date is in past of start date/time
- $('#add_show_end_date_no_repeat, #add_show_end_time').change(function(){
- var startDateString = $('#add_show_start_date').val();
- var startTimeString = $('#add_show_start_time').val();
- var startDate = startDateString.split('-');
- var startTime = startTimeString.split(':');
- var startDateTime = new Date(startDate[0], parseInt(startDate[1], 10)-1, startDate[2], startTime[0], startTime[1], 0, 0);
-
- var endDateString = $('#add_show_end_date_no_repeat').val();
+ $('#add_show_end_date_no_repeat, #add_show_end_time').bind('input', 'change', function(){
+ var endDateString = $('#add_show_end_date_no_repeat').val();
var endTimeString = $('#add_show_end_time').val()
- var endDate = endDateString.split('-');
- var endTime = endTimeString.split(':');
- var endDateTime = new Date(endDate[0], parseInt(endDate[1], 10)-1, endDate[2], endTime[0], endTime[1], 0, 0);
+
+ if(regDate.test(endDateString) && regTime.test(endTimeString)){
+ var startDateString = $('#add_show_start_date').val();
+ var startTimeString = $('#add_show_start_time').val();
+ var startDate = startDateString.split('-');
+ var startTime = startTimeString.split(':');
+ var startDateTime = new Date(startDate[0], parseInt(startDate[1], 10)-1, startDate[2], startTime[0], startTime[1], 0, 0);
- if(startDateTime.getTime() > endDateTime.getTime()){
- $('#add_show_end_date_no_repeat').css('background-color', '#F49C9C');
- $('#add_show_end_time').css('background-color', '#F49C9C');
- }else{
- $('#add_show_end_date_no_repeat').css('background-color', '');
- $('#add_show_end_time').css('background-color', '');
- }
-
- // calculate duration
- var startDateTimeString = startDateString + " " + startTimeString;
- var endDateTimeString = endDateString + " " + endTimeString;
- calculateDuration(startDateTimeString, endDateTimeString);
+ var endDate = endDateString.split('-');
+ var endTime = endTimeString.split(':');
+ var endDateTime = new Date(endDate[0], parseInt(endDate[1], 10)-1, endDate[2], endTime[0], endTime[1], 0, 0);
+
+ if(startDateTime.getTime() > endDateTime.getTime()){
+ $('#add_show_end_date_no_repeat').css('background-color', '#F49C9C');
+ $('#add_show_end_time').css('background-color', '#F49C9C');
+ }else{
+ $('#add_show_end_date_no_repeat').css('background-color', '');
+ $('#add_show_end_time').css('background-color', '');
+ }
+
+ // calculate duration
+ var startDateTimeString = startDateString + " " + startTimeString;
+ var endDateTimeString = endDateString + " " + endTimeString;
+ calculateDuration(startDateTimeString, endDateTimeString);
+ }
});
if($('#cb_custom_auth').attr('checked')){