From ad2e26a1c3e8de8de3a538c58013ae1a4d9de499 Mon Sep 17 00:00:00 2001 From: Daniel James Date: Mon, 21 Sep 2015 17:44:00 +0100 Subject: [PATCH 01/18] IN-1956 Update Transifex project link --- airtime_mvc/application/configs/constants.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/application/configs/constants.php b/airtime_mvc/application/configs/constants.php index 6fec39088..ff166b982 100644 --- a/airtime_mvc/application/configs/constants.php +++ b/airtime_mvc/application/configs/constants.php @@ -17,7 +17,7 @@ define('WHOS_USING_URL' , 'http://sourcefabric.org/en/airtime/whosus define('TERMS_AND_CONDITIONS_URL' , 'http://www.sourcefabric.org/en/about/policy/'); define('PRIVACY_POLICY_URL' , 'http://www.sourcefabric.org/en/about/policy/'); define('USER_MANUAL_URL' , 'http://sourcefabric.booktype.pro/airtime-pro-for-broadcasters'); -define('AIRTIME_TRANSIFEX_URL' , 'https://www.transifex.com/projects/p/airtime/'); +define('AIRTIME_TRANSIFEX_URL' , 'https://www.transifex.com/sourcefabric/airtime/'); define('WHMCS_PASSWORD_RESET_URL' , 'https://account.sourcefabric.com/pwreset.php'); define('LICENSE_VERSION' , 'GNU AGPL v.3'); From a86e3ed4a8f3dba26bcb044c1863e8d9c23cbf38 Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Wed, 23 Sep 2015 18:21:30 -0400 Subject: [PATCH 02/18] Improvements to the preferences screen --- airtime_mvc/application/common/SecurityHelper.php | 13 +++++++++++++ .../controllers/PreferenceController.php | 12 ++++++++++++ .../public/js/airtime/preferences/preferences.js | 11 +++++++---- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/airtime_mvc/application/common/SecurityHelper.php b/airtime_mvc/application/common/SecurityHelper.php index 95353407e..baf4ca46b 100644 --- a/airtime_mvc/application/common/SecurityHelper.php +++ b/airtime_mvc/application/common/SecurityHelper.php @@ -12,4 +12,17 @@ class SecurityHelper { } return $arr; } + + public static function verifyAjaxCSRFToken($observedToken) { + $current_namespace = new Zend_Session_Namespace('csrf_namespace'); + $observed_csrf_token = $observedToken; + $expected_csrf_token = $current_namespace->authtoken; + + if ($observed_csrf_token == $expected_csrf_token){ + return true; + }else{ + return false; + } + + } } \ No newline at end of file diff --git a/airtime_mvc/application/controllers/PreferenceController.php b/airtime_mvc/application/controllers/PreferenceController.php index 7eee7afbe..478d1d332 100644 --- a/airtime_mvc/application/controllers/PreferenceController.php +++ b/airtime_mvc/application/controllers/PreferenceController.php @@ -134,6 +134,12 @@ class PreferenceController extends Zend_Controller_Action // Remove reliance on .phtml files to render requests $this->_helper->viewRenderer->setNoRender(true); + if (!SecurityHelper::verifyAjaxCSRFToken($this->_getParam('csrf_token'))) { + Logging::error(__FILE__ . ': Invalid CSRF token'); + $this->_helper->json->sendJson(array("jsonrpc" => "2.0", "valid" => false, "error" => "CSRF token did not match.")); + return; + } + Application_Model_Preference::SetStationLogo(""); } @@ -479,6 +485,12 @@ class PreferenceController extends Zend_Controller_Action { $this->view->layout()->disableLayout(); $this->_helper->viewRenderer->setNoRender(true); + + if (!SecurityHelper::verifyAjaxCSRFToken($this->_getParam('csrf_token'))) { + Logging::error(__FILE__ . ': Invalid CSRF token'); + $this->_helper->json->sendJson(array("jsonrpc" => "2.0", "valid" => false, "error" => "CSRF token did not match.")); + return; + } // Only admin users should get here through ACL permissioning // Only allow POST requests diff --git a/airtime_mvc/public/js/airtime/preferences/preferences.js b/airtime_mvc/public/js/airtime/preferences/preferences.js index 91a9bef3a..a03f0094e 100644 --- a/airtime_mvc/public/js/airtime/preferences/preferences.js +++ b/airtime_mvc/public/js/airtime/preferences/preferences.js @@ -114,15 +114,18 @@ function setMsAuthenticationFieldsReadonly(ele) { } function removeLogo() { - $.post(baseUrl+'Preference/remove-logo', function(json){}); - location.reload(); + $.post(baseUrl+'preference/remove-logo', {'csrf_token' : $('#csrf').val()}, function(json){ + // Reload without resubmitting the form + location.href = location.href.replace(location.hash,""); + }); } function deleteAllFiles() { var resp = confirm($.i18n._("Are you sure you want to delete all the tracks in your library?")) if (resp) { - $.post(baseUrl+'Preference/delete-all-files', function(json){}); - location.reload(); + $.post(baseUrl+'preference/delete-all-files', {'csrf_token' : $('#csrf').val()}, function(json){ + location.reload(); + }); } } From c03e9cbe9ae3b88cce7678e8b4fee2d99caaec6e Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Fri, 25 Sep 2015 10:41:51 -0400 Subject: [PATCH 03/18] SAAS-1085: Optimization - Don't start sessions unless we actually need them. --- airtime_mvc/application/Bootstrap.php | 167 +------------ .../application/common/SecurityHelper.php | 9 +- .../application/common/TaskManager.php | 3 + .../application/controllers/ApiController.php | 29 ++- .../controllers/BillingController.php | 10 +- .../controllers/LoginController.php | 34 ++- .../controllers/PreferenceController.php | 4 +- .../controllers/plugins/Acl_plugin.php | 15 +- .../plugins/ConversionTracking.php | 4 + .../plugins/PageLayoutInitPlugin.php | 232 ++++++++++++++++++ .../application/forms/BillingClient.php | 4 + .../forms/BillingUpgradeDowngrade.php | 4 + airtime_mvc/application/models/Preference.php | 16 +- 13 files changed, 334 insertions(+), 197 deletions(-) create mode 100644 airtime_mvc/application/controllers/plugins/PageLayoutInitPlugin.php diff --git a/airtime_mvc/application/Bootstrap.php b/airtime_mvc/application/Bootstrap.php index 97719079a..274d38981 100644 --- a/airtime_mvc/application/Bootstrap.php +++ b/airtime_mvc/application/Bootstrap.php @@ -35,6 +35,7 @@ require_once __DIR__.'/services/CeleryService.php'; require_once __DIR__.'/services/SoundcloudService.php'; require_once __DIR__.'/forms/helpers/ValidationTypes.php'; require_once __DIR__.'/forms/helpers/CustomDecorators.php'; +require_once __DIR__.'/controllers/plugins/PageLayoutInitPlugin.php'; require_once __DIR__.'/controllers/plugins/RabbitMqPlugin.php'; require_once __DIR__.'/controllers/plugins/Maintenance.php'; require_once __DIR__.'/controllers/plugins/ConversionTracking.php'; @@ -52,20 +53,21 @@ if (array_key_exists("REQUEST_URI", $_SERVER) && (stripos($_SERVER["REQUEST_URI" die(); } +Zend_Session::setOptions(array('strict' => true)); + + Config::setAirtimeVersion(); require_once (CONFIG_PATH . 'navigation.php'); Zend_Validate::setDefaultNamespaces("Zend"); -Application_Model_Auth::pinSessionToClient(Zend_Auth::getInstance()); - $front = Zend_Controller_Front::getInstance(); $front->registerPlugin(new RabbitMqPlugin()); $front->registerPlugin(new Zend_Controller_Plugin_ConversionTracking()); $front->throwExceptions(false); -//localization configuration -Application_Model_Locale::configureLocalization(); + + /* The bootstrap class should only be used to initialize actions that return a view. Actions that return JSON will not use the bootstrap class! */ @@ -78,55 +80,7 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap $view->doctype('XHTML1_STRICT'); } - protected function _initGlobals() - { - $view = $this->getResource('view'); - $baseUrl = Application_Common_OsPath::getBaseDir(); - $view->headScript()->appendScript("var baseUrl = '$baseUrl';"); - $this->_initTranslationGlobals($view); - - $user = Application_Model_User::GetCurrentUser(); - if (!is_null($user)) { - $userType = $user->getType(); - } else { - $userType = ""; - } - $view->headScript()->appendScript("var userType = '$userType';"); - } - - /** - * Create a global namespace to hold a session token for CSRF prevention - */ - protected function _initCsrfNamespace() - { - $csrf_namespace = new Zend_Session_Namespace('csrf_namespace'); - // Check if the token exists - if (!$csrf_namespace->authtoken) { - // If we don't have a token, regenerate it and set a 1 week timeout - // Should we log the user out here if the token is expired? - $csrf_namespace->authtoken = sha1(uniqid(rand(), 1)); - $csrf_namespace->setExpirationSeconds(168 * 60 * 60); - } - - //Here we are closing the session for writing because otherwise no requests - //in this session will be handled in parallel. This gives a major boost to the perceived performance - //of the application (page load times are more consistent, no lock contention). - session_write_close(); - } - - /** - * Ideally, globals should be written to a single js file once - * from a php init function. This will save us from having to - * reinitialize them every request - */ - private function _initTranslationGlobals() - { - $view = $this->getResource('view'); - $view->headScript()->appendScript("var PRODUCT_NAME = '" . PRODUCT_NAME . "';"); - $view->headScript()->appendScript("var USER_MANUAL_URL = '" . USER_MANUAL_URL . "';"); - $view->headScript()->appendScript("var COMPANY_NAME = '" . COMPANY_NAME . "';"); - } protected function _initTasks() { /* We need to wrap this here so that we aren't checking when we're running the unit test suite @@ -139,115 +93,7 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap } } - protected function _initHeadLink() - { - $CC_CONFIG = Config::getConfig(); - $view = $this->getResource('view'); - - $baseUrl = Application_Common_OsPath::getBaseDir(); - - $view->headLink(array('rel' => 'icon', 'href' => $baseUrl . 'favicon.ico?' . $CC_CONFIG['airtime_version'], 'type' => 'image/x-icon'), 'PREPEND') - ->appendStylesheet($baseUrl . 'css/bootstrap.css?' . $CC_CONFIG['airtime_version']) - ->appendStylesheet($baseUrl . 'css/redmond/jquery-ui-1.8.8.custom.css?' . $CC_CONFIG['airtime_version']) - ->appendStylesheet($baseUrl . 'css/pro_dropdown_3.css?' . $CC_CONFIG['airtime_version']) - ->appendStylesheet($baseUrl . 'css/qtip/jquery.qtip.min.css?' . $CC_CONFIG['airtime_version']) - ->appendStylesheet($baseUrl . 'css/styles.css?' . $CC_CONFIG['airtime_version']) - ->appendStylesheet($baseUrl . 'css/masterpanel.css?' . $CC_CONFIG['airtime_version']) - ->appendStylesheet($baseUrl . 'css/tipsy/jquery.tipsy.css?' . $CC_CONFIG['airtime_version']); - } - - protected function _initHeadScript() - { - $CC_CONFIG = Config::getConfig(); - - $view = $this->getResource('view'); - - $baseUrl = Application_Common_OsPath::getBaseDir(); - - $view->headScript()->appendFile($baseUrl . 'js/libs/jquery-1.8.3.min.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') - ->appendFile($baseUrl . 'js/libs/jquery-ui-1.8.24.min.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') - ->appendFile($baseUrl . 'js/bootstrap/bootstrap.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') - ->appendFile($baseUrl . 'js/libs/underscore-min.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') - - // ->appendFile($baseUrl . 'js/libs/jquery.stickyPanel.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') - ->appendFile($baseUrl . 'js/qtip/jquery.qtip.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') - ->appendFile($baseUrl . 'js/jplayer/jquery.jplayer.min.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') - ->appendFile($baseUrl . 'js/sprintf/sprintf-0.7-beta1.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') - ->appendFile($baseUrl . 'js/cookie/jquery.cookie.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') - ->appendFile($baseUrl . 'js/i18n/jquery.i18n.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') - ->appendFile($baseUrl . 'locale/general-translation-table?' . $CC_CONFIG['airtime_version'], 'text/javascript') - ->appendFile($baseUrl . 'locale/datatables-translation-table?' . $CC_CONFIG['airtime_version'], 'text/javascript') - - ->appendScript("$.i18n.setDictionary(general_dict)") - ->appendScript("var baseUrl='$baseUrl'"); - - //These timezones are needed to adjust javascript Date objects on the client to make sense to the user's set timezone - //or the server's set timezone. - $serverTimeZone = new DateTimeZone(Application_Model_Preference::GetDefaultTimezone()); - $now = new DateTime("now", $serverTimeZone); - $offset = $now->format("Z") * -1; - $view->headScript()->appendScript("var serverTimezoneOffset = {$offset}; //in seconds"); - - if (class_exists("Zend_Auth", false) && Zend_Auth::getInstance()->hasIdentity()) { - $userTimeZone = new DateTimeZone(Application_Model_Preference::GetUserTimezone()); - $now = new DateTime("now", $userTimeZone); - $offset = $now->format("Z") * -1; - $view->headScript()->appendScript("var userTimezoneOffset = {$offset}; //in seconds"); - } - - //scripts for now playing bar - $view->headScript()->appendFile($baseUrl . 'js/airtime/airtime_bootstrap.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') - ->appendFile($baseUrl . 'js/airtime/dashboard/helperfunctions.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') - ->appendFile($baseUrl . 'js/airtime/dashboard/dashboard.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') - ->appendFile($baseUrl . 'js/airtime/dashboard/versiontooltip.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') - ->appendFile($baseUrl . 'js/tipsy/jquery.tipsy.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') - - ->appendFile($baseUrl . 'js/airtime/common/common.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') - ->appendFile($baseUrl . 'js/airtime/common/audioplaytest.js?' . $CC_CONFIG['airtime_version'], 'text/javascript'); - - $user = Application_Model_User::getCurrentUser(); - if (!is_null($user)) { - $userType = $user->getType(); - } else { - $userType = ""; - } - - $view->headScript()->appendScript("var userType = '$userType';"); - if (array_key_exists('REQUEST_URI', $_SERVER) //Doesn't exist for unit tests - && strpos($_SERVER['REQUEST_URI'], 'Dashboard/stream-player') === false - && strpos($_SERVER['REQUEST_URI'], 'audiopreview') === false - && $_SERVER['REQUEST_URI'] != "/") { - $plan_level = strval(Application_Model_Preference::GetPlanLevel()); - // Since the Hobbyist plan doesn't come with Live Chat support, don't enable it - if (Application_Model_Preference::GetLiveChatEnabled() && $plan_level !== 'hobbyist') { - $client_id = strval(Application_Model_Preference::GetClientId()); - $station_url = $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; - $view->headScript()->appendScript("var livechat_client_id = '$client_id';\n" . - "var livechat_plan_type = '$plan_level';\n" . - "var livechat_station_url = 'http://$station_url';"); - $view->headScript()->appendFile($baseUrl . 'js/airtime/common/livechat.js?' . $CC_CONFIG['airtime_version'], 'text/javascript'); - } - } - - /* - if (isset($CC_CONFIG['demo']) && $CC_CONFIG['demo'] == 1) { - $view->headScript()->appendFile($baseUrl.'js/libs/google-analytics.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); - }*/ - } - - protected function _initViewHelpers() - { - $view = $this->getResource('view'); - $view->addHelperPath(APPLICATION_PATH . 'views/helpers', 'Airtime_View_Helper'); - $view->assign('suspended', (Application_Model_Preference::getProvisioningStatus() == PROVISIONING_STATUS_SUSPENDED)); - } - - protected function _initTitle() - { - $view = $this->getResource('view'); - $view->headTitle(Application_Model_Preference::GetHeadTitle()); - } protected function _initZFDebug() { @@ -293,6 +139,7 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { $front = Zend_Controller_Front::getInstance(); $front->registerPlugin(new Zend_Controller_Plugin_Maintenance()); + $front->registerPlugin(new PageLayoutInitPlugin($this)); } } diff --git a/airtime_mvc/application/common/SecurityHelper.php b/airtime_mvc/application/common/SecurityHelper.php index baf4ca46b..f36ae638a 100644 --- a/airtime_mvc/application/common/SecurityHelper.php +++ b/airtime_mvc/application/common/SecurityHelper.php @@ -13,16 +13,11 @@ class SecurityHelper { return $arr; } - public static function verifyAjaxCSRFToken($observedToken) { + public static function verifyCSRFToken($observedToken) { $current_namespace = new Zend_Session_Namespace('csrf_namespace'); $observed_csrf_token = $observedToken; $expected_csrf_token = $current_namespace->authtoken; - if ($observed_csrf_token == $expected_csrf_token){ - return true; - }else{ - return false; - } - + return ($observed_csrf_token == $expected_csrf_token); } } \ No newline at end of file diff --git a/airtime_mvc/application/common/TaskManager.php b/airtime_mvc/application/common/TaskManager.php index c1687defa..c44be2552 100644 --- a/airtime_mvc/application/common/TaskManager.php +++ b/airtime_mvc/application/common/TaskManager.php @@ -114,6 +114,9 @@ final class TaskManager { * otherwise false */ private function _isUserSessionRequest() { + if (!Zend_Session::isStarted()) { + return false; + } $auth = Zend_Auth::getInstance(); $data = $auth->getStorage()->read(); return !empty($data); diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index d30013d8d..ca0d182ef 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -11,6 +11,8 @@ class ApiController extends Zend_Controller_Action public function init() { + + //Ignore API key and session authentication for these APIs: $ignoreAuth = array("live-info", "live-info-v2", "week-info", @@ -25,6 +27,11 @@ class ApiController extends Zend_Controller_Action "show-logo" ); + if (Zend_Session::isStarted()) { + Logging::error("Session already started for an API request. Check your code because + this will negatively impact performance."); + } + $params = $this->getRequest()->getParams(); if (!in_array($params['action'], $ignoreAuth)) { $this->checkAuth(); @@ -73,13 +80,23 @@ class ApiController extends Zend_Controller_Action $CC_CONFIG = Config::getConfig(); $api_key = $this->_getParam('api_key'); - if (!in_array($api_key, $CC_CONFIG["apiKey"]) && - is_null(Zend_Auth::getInstance()->getStorage()->read())) { - header('HTTP/1.0 401 Unauthorized'); - print _('You are not allowed to access this resource.'); - exit; + if (in_array($api_key, $CC_CONFIG["apiKey"])) { + return true; } - return true; + + //Start the session so the authentication is + //enforced by the ACL plugin. + Zend_Session::start(); + $authAdapter = Zend_Auth::getInstance(); + Application_Model_Auth::pinSessionToClient($authAdapter); + + if ((Zend_Auth::getInstance()->hasIdentity())) { + return true; + } + + header('HTTP/1.0 401 Unauthorized'); + print _('You are not allowed to access this resource.'); + exit(); } public function versionAction() diff --git a/airtime_mvc/application/controllers/BillingController.php b/airtime_mvc/application/controllers/BillingController.php index 2be8bc7e4..eb8cd5e88 100644 --- a/airtime_mvc/application/controllers/BillingController.php +++ b/airtime_mvc/application/controllers/BillingController.php @@ -25,7 +25,10 @@ class BillingController extends Zend_Controller_Action { $baseUrl = Application_Common_OsPath::getBaseDir(); $this->view->headLink()->appendStylesheet($baseUrl.'css/billing.css?'.$CC_CONFIG['airtime_version']); Billing::ensureClientIdIsValid(); - + + //Zend's CSRF token element requires the session to be open for writing + session_start(); + $request = $this->getRequest(); $form = new Application_Form_BillingUpgradeDowngrade(); @@ -219,7 +222,10 @@ class BillingController extends Zend_Controller_Action { $CC_CONFIG = Config::getConfig(); $baseUrl = Application_Common_OsPath::getBaseDir(); $this->view->headLink()->appendStylesheet($baseUrl.'css/billing.css?'.$CC_CONFIG['airtime_version']); - + + //Zend's CSRF token element requires the session to be open for writing + session_start(); + $request = $this->getRequest(); $form = new Application_Form_BillingClient(); Billing::ensureClientIdIsValid(); diff --git a/airtime_mvc/application/controllers/LoginController.php b/airtime_mvc/application/controllers/LoginController.php index b40178526..60c9b27be 100644 --- a/airtime_mvc/application/controllers/LoginController.php +++ b/airtime_mvc/application/controllers/LoginController.php @@ -8,8 +8,14 @@ class LoginController extends Zend_Controller_Action public function init() { - //Open the session for writing, because we close it for writing by default in Bootstrap.php as an optimization. - session_start(); + $CC_CONFIG = Config::getConfig(); + $baseUrl = Application_Common_OsPath::getBaseDir(); + + $this->view->headLink(array('rel' => 'icon', 'href' => $baseUrl . 'favicon.ico?' . $CC_CONFIG['airtime_version'], 'type' => 'image/x-icon'), 'PREPEND') + ->appendStylesheet($baseUrl . 'css/bootstrap.css?' . $CC_CONFIG['airtime_version']) + ->appendStylesheet($baseUrl . 'css/redmond/jquery-ui-1.8.8.custom.css?' . $CC_CONFIG['airtime_version']) + ->appendStylesheet($baseUrl . 'css/styles.css?' . $CC_CONFIG['airtime_version']); + } public function indexAction() @@ -22,13 +28,20 @@ class LoginController extends Zend_Controller_Action //Enable AJAX requests from www.airtime.pro for the sign-in process. CORSHelper::enableATProCrossOriginRequests($request, $response); - + Application_Model_Locale::configureLocalization($request->getcookie('airtime_locale', $stationLocale)); - $auth = Zend_Auth::getInstance(); - - if ($auth->hasIdentity()) { - $this->_redirect('Showbuilder'); + + if (Zend_Session::isStarted()) { + //Open the session for writing, because we close it for writing by default in Bootstrap.php as an optimization. + session_start(); + + $auth = Zend_Auth::getInstance(); + $auth->getStorage(); + + if ($auth->hasIdentity()) { + $this->_redirect('Showbuilder'); + } } //uses separate layout without a navigation. @@ -43,6 +56,10 @@ class LoginController extends Zend_Controller_Action $message = _("Please enter your username and password."); if ($request->isPost()) { + + //Open the session for writing, because we close it for writing by default in Bootstrap.php as an optimization. + //session_start(); + // if the post contains recaptcha field, which means form had recaptcha field. // Hence add the element for validation. if (array_key_exists('recaptcha_response_field', $request->getPost())) { @@ -117,6 +134,9 @@ class LoginController extends Zend_Controller_Action public function logoutAction() { + //Open the session for writing, because we close it for writing by default in Bootstrap.php as an optimization. + session_start(); + $auth = Zend_Auth::getInstance(); $auth->clearIdentity(); // Unset all session variables relating to CSRF prevention on logout diff --git a/airtime_mvc/application/controllers/PreferenceController.php b/airtime_mvc/application/controllers/PreferenceController.php index 478d1d332..6e991ba24 100644 --- a/airtime_mvc/application/controllers/PreferenceController.php +++ b/airtime_mvc/application/controllers/PreferenceController.php @@ -134,7 +134,7 @@ class PreferenceController extends Zend_Controller_Action // Remove reliance on .phtml files to render requests $this->_helper->viewRenderer->setNoRender(true); - if (!SecurityHelper::verifyAjaxCSRFToken($this->_getParam('csrf_token'))) { + if (!SecurityHelper::verifyCSRFToken($this->_getParam('csrf_token'))) { Logging::error(__FILE__ . ': Invalid CSRF token'); $this->_helper->json->sendJson(array("jsonrpc" => "2.0", "valid" => false, "error" => "CSRF token did not match.")); return; @@ -486,7 +486,7 @@ class PreferenceController extends Zend_Controller_Action $this->view->layout()->disableLayout(); $this->_helper->viewRenderer->setNoRender(true); - if (!SecurityHelper::verifyAjaxCSRFToken($this->_getParam('csrf_token'))) { + if (!SecurityHelper::verifyCSRFToken($this->_getParam('csrf_token'))) { Logging::error(__FILE__ . ': Invalid CSRF token'); $this->_helper->json->sendJson(array("jsonrpc" => "2.0", "valid" => false, "error" => "CSRF token did not match.")); return; diff --git a/airtime_mvc/application/controllers/plugins/Acl_plugin.php b/airtime_mvc/application/controllers/plugins/Acl_plugin.php index c08533ab9..35df192d6 100644 --- a/airtime_mvc/application/controllers/plugins/Acl_plugin.php +++ b/airtime_mvc/application/controllers/plugins/Acl_plugin.php @@ -109,9 +109,10 @@ class Zend_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract public function preDispatch(Zend_Controller_Request_Abstract $request) { $controller = strtolower($request->getControllerName()); - Application_Model_Auth::pinSessionToClient(Zend_Auth::getInstance()); if (in_array($controller, array( + "index", + "login", "api", "auth", "error", @@ -123,7 +124,10 @@ class Zend_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract ))) { $this->setRoleName("G"); - } elseif (!Zend_Auth::getInstance()->hasIdentity()) { + } + elseif (Zend_Session::isStarted() && !Zend_Auth::getInstance()->hasIdentity()) { + + //The controller uses sessions but we don't have an identity yet. // If we don't have an identity and we're making a RESTful request, // we need to do API key verification @@ -165,6 +169,7 @@ class Zend_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract } } } else { //We have a session/identity. + // If we have an identity and we're making a RESTful request, // we need to check the CSRF token if ($_SERVER['REQUEST_METHOD'] != "GET" && $request->getModuleName() == "rest") { @@ -222,11 +227,7 @@ class Zend_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract } private function verifyCSRFToken($token) { - $current_namespace = new Zend_Session_Namespace('csrf_namespace'); - $observed_csrf_token = $token; - $expected_csrf_token = $current_namespace->authtoken; - - return ($observed_csrf_token == $expected_csrf_token); + SecurityHelper::verifyCSRFToken($token); } private function verifyAPIKey() { diff --git a/airtime_mvc/application/controllers/plugins/ConversionTracking.php b/airtime_mvc/application/controllers/plugins/ConversionTracking.php index 09904828d..ae0fc2781 100644 --- a/airtime_mvc/application/controllers/plugins/ConversionTracking.php +++ b/airtime_mvc/application/controllers/plugins/ConversionTracking.php @@ -4,6 +4,10 @@ class Zend_Controller_Plugin_ConversionTracking extends Zend_Controller_Plugin_A { public function preDispatch(Zend_Controller_Request_Abstract $request) { + if (!Zend_Session::isStarted()) { + return; + } + //If user is a super admin and old plan level is set to trial.... if (Application_Common_GoogleAnalytics::didPaidConversionOccur($request)) { diff --git a/airtime_mvc/application/controllers/plugins/PageLayoutInitPlugin.php b/airtime_mvc/application/controllers/plugins/PageLayoutInitPlugin.php new file mode 100644 index 000000000..091bdcfcd --- /dev/null +++ b/airtime_mvc/application/controllers/plugins/PageLayoutInitPlugin.php @@ -0,0 +1,232 @@ +_bootstrap = $boostrap; + } + + /** + * Start the session depending on which controller your request is going to. + * We start the session explicitly here so that we can avoid starting sessions + * needlessly for (stateless) requests to the API. + * @param Zend_Controller_Request_Abstract $request + * @throws Zend_Session_Exception + */ + public function routeShutdown(Zend_Controller_Request_Abstract $request) + { + $controller = strtolower($request->getControllerName()); + $action = strtolower($request->getActionName()); + + //List of controllers where we don't need a session, and we don't need + //all the standard HTML / JS boilerplate. + if (!in_array($controller, array( + "index", //Radio Page + "api", + "auth", + "error", + "locale", + "upgrade", + 'whmcs-login', + "provisioning", + "embed" + )) + ) { + //Start the session + Zend_Session::start(); + Application_Model_Auth::pinSessionToClient(Zend_Auth::getInstance()); + + //localization configuration + Application_Model_Locale::configureLocalization(); + + $this->_initGlobals(); + $this->_initCsrfNamespace(); + $this->_initHeadLink(); + $this->_initHeadScript(); + $this->_initTitle(); + $this->_initTranslationGlobals(); + $this->_initViewHelpers(); + } + } + + protected function _initGlobals() + { + if (!Zend_Session::isStarted()) { + return; + } + + $view = $this->_bootstrap->getResource('view'); + $baseUrl = Application_Common_OsPath::getBaseDir(); + + $view->headScript()->appendScript("var baseUrl = '$baseUrl';"); + $this->_initTranslationGlobals($view); + + $user = Application_Model_User::GetCurrentUser(); + if (!is_null($user)) { + $userType = $user->getType(); + } else { + $userType = ""; + } + $view->headScript()->appendScript("var userType = '$userType';"); + } + + /** + * Create a global namespace to hold a session token for CSRF prevention + */ + protected function _initCsrfNamespace() + { + /* + if (!Zend_Session::isStarted()) { + return; + }*/ + + $csrf_namespace = new Zend_Session_Namespace('csrf_namespace'); + // Check if the token exists + if (!$csrf_namespace->authtoken) { + // If we don't have a token, regenerate it and set a 1 week timeout + // Should we log the user out here if the token is expired? + $csrf_namespace->authtoken = sha1(uniqid(rand(), 1)); + $csrf_namespace->setExpirationSeconds(168 * 60 * 60); + } + + //Here we are closing the session for writing because otherwise no requests + //in this session will be handled in parallel. This gives a major boost to the perceived performance + //of the application (page load times are more consistent, no lock contention). + session_write_close(); + //Zend_Session::writeClose(true); + } + + /** + * Ideally, globals should be written to a single js file once + * from a php init function. This will save us from having to + * reinitialize them every request + */ + private function _initTranslationGlobals() + { + $view = $this->_bootstrap->getResource('view'); + $view->headScript()->appendScript("var PRODUCT_NAME = '" . PRODUCT_NAME . "';"); + $view->headScript()->appendScript("var USER_MANUAL_URL = '" . USER_MANUAL_URL . "';"); + $view->headScript()->appendScript("var COMPANY_NAME = '" . COMPANY_NAME . "';"); + } + + protected function _initHeadLink() + { + $CC_CONFIG = Config::getConfig(); + + $view = $this->_bootstrap->getResource('view'); + + $baseUrl = Application_Common_OsPath::getBaseDir(); + + $view->headLink(array('rel' => 'icon', 'href' => $baseUrl . 'favicon.ico?' . $CC_CONFIG['airtime_version'], 'type' => 'image/x-icon'), 'PREPEND') + ->appendStylesheet($baseUrl . 'css/bootstrap.css?' . $CC_CONFIG['airtime_version']) + ->appendStylesheet($baseUrl . 'css/redmond/jquery-ui-1.8.8.custom.css?' . $CC_CONFIG['airtime_version']) + ->appendStylesheet($baseUrl . 'css/pro_dropdown_3.css?' . $CC_CONFIG['airtime_version']) + ->appendStylesheet($baseUrl . 'css/qtip/jquery.qtip.min.css?' . $CC_CONFIG['airtime_version']) + ->appendStylesheet($baseUrl . 'css/styles.css?' . $CC_CONFIG['airtime_version']) + ->appendStylesheet($baseUrl . 'css/masterpanel.css?' . $CC_CONFIG['airtime_version']) + ->appendStylesheet($baseUrl . 'css/tipsy/jquery.tipsy.css?' . $CC_CONFIG['airtime_version']); + } + + protected function _initHeadScript() + { + if (!Zend_Session::isStarted()) { + return; + } + + $CC_CONFIG = Config::getConfig(); + + $view = $this->_bootstrap->getResource('view'); + + $baseUrl = Application_Common_OsPath::getBaseDir(); + + $view->headScript()->appendFile($baseUrl . 'js/libs/jquery-1.8.3.min.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') + ->appendFile($baseUrl . 'js/libs/jquery-ui-1.8.24.min.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') + ->appendFile($baseUrl . 'js/bootstrap/bootstrap.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') + ->appendFile($baseUrl . 'js/libs/underscore-min.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') + + // ->appendFile($baseUrl . 'js/libs/jquery.stickyPanel.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') + ->appendFile($baseUrl . 'js/qtip/jquery.qtip.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') + ->appendFile($baseUrl . 'js/jplayer/jquery.jplayer.min.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') + ->appendFile($baseUrl . 'js/sprintf/sprintf-0.7-beta1.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') + ->appendFile($baseUrl . 'js/cookie/jquery.cookie.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') + ->appendFile($baseUrl . 'js/i18n/jquery.i18n.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') + ->appendFile($baseUrl . 'locale/general-translation-table?' . $CC_CONFIG['airtime_version'], 'text/javascript') + ->appendFile($baseUrl . 'locale/datatables-translation-table?' . $CC_CONFIG['airtime_version'], 'text/javascript') + + ->appendScript("$.i18n.setDictionary(general_dict)") + ->appendScript("var baseUrl='$baseUrl'"); + + //These timezones are needed to adjust javascript Date objects on the client to make sense to the user's set timezone + //or the server's set timezone. + $serverTimeZone = new DateTimeZone(Application_Model_Preference::GetDefaultTimezone()); + $now = new DateTime("now", $serverTimeZone); + $offset = $now->format("Z") * -1; + $view->headScript()->appendScript("var serverTimezoneOffset = {$offset}; //in seconds"); + + if (class_exists("Zend_Auth", false) && Zend_Auth::getInstance()->hasIdentity()) { + $userTimeZone = new DateTimeZone(Application_Model_Preference::GetUserTimezone()); + $now = new DateTime("now", $userTimeZone); + $offset = $now->format("Z") * -1; + $view->headScript()->appendScript("var userTimezoneOffset = {$offset}; //in seconds"); + } + + //scripts for now playing bar + $view->headScript()->appendFile($baseUrl . 'js/airtime/airtime_bootstrap.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') + ->appendFile($baseUrl . 'js/airtime/dashboard/helperfunctions.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') + ->appendFile($baseUrl . 'js/airtime/dashboard/dashboard.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') + ->appendFile($baseUrl . 'js/airtime/dashboard/versiontooltip.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') + ->appendFile($baseUrl . 'js/tipsy/jquery.tipsy.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') + + ->appendFile($baseUrl . 'js/airtime/common/common.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') + ->appendFile($baseUrl . 'js/airtime/common/audioplaytest.js?' . $CC_CONFIG['airtime_version'], 'text/javascript'); + + $user = Application_Model_User::getCurrentUser(); + if (!is_null($user)) { + $userType = $user->getType(); + } else { + $userType = ""; + } + + $view->headScript()->appendScript("var userType = '$userType';"); + if (array_key_exists('REQUEST_URI', $_SERVER) //Doesn't exist for unit tests + && strpos($_SERVER['REQUEST_URI'], 'Dashboard/stream-player') === false + && strpos($_SERVER['REQUEST_URI'], 'audiopreview') === false + && $_SERVER['REQUEST_URI'] != "/") { + $plan_level = strval(Application_Model_Preference::GetPlanLevel()); + // Since the Hobbyist plan doesn't come with Live Chat support, don't enable it + if (Application_Model_Preference::GetLiveChatEnabled() && $plan_level !== 'hobbyist') { + $client_id = strval(Application_Model_Preference::GetClientId()); + $station_url = $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; + $view->headScript()->appendScript("var livechat_client_id = '$client_id';\n" . + "var livechat_plan_type = '$plan_level';\n" . + "var livechat_station_url = 'http://$station_url';"); + $view->headScript()->appendFile($baseUrl . 'js/airtime/common/livechat.js?' . $CC_CONFIG['airtime_version'], 'text/javascript'); + } + } + + /* + if (isset($CC_CONFIG['demo']) && $CC_CONFIG['demo'] == 1) { + $view->headScript()->appendFile($baseUrl.'js/libs/google-analytics.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); + }*/ + } + + protected function _initViewHelpers() + { + $view = $this->_bootstrap->getResource('view'); + $view->addHelperPath(APPLICATION_PATH . 'views/helpers', 'Airtime_View_Helper'); + $view->assign('suspended', (Application_Model_Preference::getProvisioningStatus() == PROVISIONING_STATUS_SUSPENDED)); + } + + protected function _initTitle() + { + $view = $this->_bootstrap->getResource('view'); + $view->headTitle(Application_Model_Preference::GetHeadTitle()); + } +} \ No newline at end of file diff --git a/airtime_mvc/application/forms/BillingClient.php b/airtime_mvc/application/forms/BillingClient.php index 891cd4a95..7d604cad2 100644 --- a/airtime_mvc/application/forms/BillingClient.php +++ b/airtime_mvc/application/forms/BillingClient.php @@ -188,6 +188,10 @@ class Application_Form_BillingClient extends Zend_Form $passwordVerify->addValidator($notEmptyValidator); $this->addElement($passwordVerify); + $this->addElement('hash', 'csrf', array( + 'salt' => 'unique' + )); + $submit = new Zend_Form_Element_Submit("submit"); $submit->setIgnore(true) ->setLabel(_("Save")); diff --git a/airtime_mvc/application/forms/BillingUpgradeDowngrade.php b/airtime_mvc/application/forms/BillingUpgradeDowngrade.php index ecf9b4f50..5ff4ff4de 100644 --- a/airtime_mvc/application/forms/BillingUpgradeDowngrade.php +++ b/airtime_mvc/application/forms/BillingUpgradeDowngrade.php @@ -8,6 +8,10 @@ class Application_Form_BillingUpgradeDowngrade extends Zend_Form $csrf_element->setValue($csrf_namespace->authtoken)->setRequired('true')->removeDecorator('HtmlTag')->removeDecorator('Label'); $this->addElement($csrf_element); + $this->addElement('hash', 'csrf', array( + 'salt' => 'unique' + )); + $productPrices = array(); $productTypes = array(); list($productPrices, $productTypes) = Billing::getProductPricesAndTypes(); diff --git a/airtime_mvc/application/models/Preference.php b/airtime_mvc/application/models/Preference.php index c6e6fff49..cd439ddbe 100644 --- a/airtime_mvc/application/models/Preference.php +++ b/airtime_mvc/application/models/Preference.php @@ -10,7 +10,7 @@ class Application_Model_Preference { //pass in true so the check is made with the autoloader //we need this check because saas calls this function from outside Zend - if (!class_exists("Zend_Auth", true) || !Zend_Auth::getInstance()->hasIdentity()) { + if (!Zend_Session::isStarted() || !class_exists("Zend_Auth", true) || !Zend_Auth::getInstance()->hasIdentity()) { $userId = null; } else { $auth = Zend_Auth::getInstance(); @@ -142,10 +142,14 @@ class Application_Model_Preference try { - $userId = self::getUserId(); - - if ($isUserValue && is_null($userId)) - throw new Exception("User id can't be null for a user preference."); + $userId = null; + if ($isUserValue) { + //This is nested in here because so we can still use getValue() when the session hasn't started yet. + $userId = self::getUserId(); + if (is_null($userId)) { + throw new Exception("User id can't be null for a user preference."); + } + } // If the value is already cached, return it $res = $cache->fetch($key, $isUserValue, $userId); @@ -192,7 +196,7 @@ class Application_Model_Preference } catch (Exception $e) { header('HTTP/1.0 503 Service Unavailable'); - Logging::info("Could not connect to database: ".$e->getMessage()); + Logging::info("Could not connect to database: ".$e); exit; } } From 91c584ba164a06cd21075944986bb51cc3f975bc Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Fri, 25 Sep 2015 11:37:36 -0400 Subject: [PATCH 04/18] Test alternate session reopening code to alleviate double Set-Cookie header --- airtime_mvc/application/controllers/LoginController.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/airtime_mvc/application/controllers/LoginController.php b/airtime_mvc/application/controllers/LoginController.php index 60c9b27be..1090c312c 100644 --- a/airtime_mvc/application/controllers/LoginController.php +++ b/airtime_mvc/application/controllers/LoginController.php @@ -33,8 +33,15 @@ class LoginController extends Zend_Controller_Action Application_Model_Locale::configureLocalization($request->getcookie('airtime_locale', $stationLocale)); if (Zend_Session::isStarted()) { + + ini_set('session.use_only_cookies', false); + ini_set('session.use_cookies', false); + ini_set('session.use_trans_sid', false); + ini_set('session.cache_limiter', null); + session_start(); // second session_start + //Open the session for writing, because we close it for writing by default in Bootstrap.php as an optimization. - session_start(); + //session_start(); $auth = Zend_Auth::getInstance(); $auth->getStorage(); From 8b6833180d8a11b943044a8bc694f2bb901d1cb1 Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Fri, 25 Sep 2015 12:03:10 -0400 Subject: [PATCH 05/18] Refactored double Set-Cookie prevention code, and session reopening code --- airtime_mvc/application/Bootstrap.php | 1 + airtime_mvc/application/common/SessionHelper.php | 13 +++++++++++++ .../application/controllers/BillingController.php | 4 ++-- .../application/controllers/LoginController.php | 10 ++-------- .../application/controllers/PlaylistController.php | 2 +- .../controllers/PreferenceController.php | 12 ++++++------ .../application/controllers/UserController.php | 4 ++-- .../controllers/UsersettingsController.php | 6 +++--- 8 files changed, 30 insertions(+), 22 deletions(-) create mode 100644 airtime_mvc/application/common/SessionHelper.php diff --git a/airtime_mvc/application/Bootstrap.php b/airtime_mvc/application/Bootstrap.php index 274d38981..e6b23f947 100644 --- a/airtime_mvc/application/Bootstrap.php +++ b/airtime_mvc/application/Bootstrap.php @@ -25,6 +25,7 @@ require_once "OsPath.php"; require_once "Database.php"; require_once "ProvisioningHelper.php"; require_once "SecurityHelper.php"; +require_once "SessionHelper.php"; require_once "GoogleAnalytics.php"; require_once "Timezone.php"; require_once "Auth.php"; diff --git a/airtime_mvc/application/common/SessionHelper.php b/airtime_mvc/application/common/SessionHelper.php new file mode 100644 index 000000000..badfa1924 --- /dev/null +++ b/airtime_mvc/application/common/SessionHelper.php @@ -0,0 +1,13 @@ +getRequest(); $form = new Application_Form_BillingUpgradeDowngrade(); @@ -224,7 +224,7 @@ class BillingController extends Zend_Controller_Action { $this->view->headLink()->appendStylesheet($baseUrl.'css/billing.css?'.$CC_CONFIG['airtime_version']); //Zend's CSRF token element requires the session to be open for writing - session_start(); + SessionHelper::reopenSessionForWriting(); $request = $this->getRequest(); $form = new Application_Form_BillingClient(); diff --git a/airtime_mvc/application/controllers/LoginController.php b/airtime_mvc/application/controllers/LoginController.php index 1090c312c..af530a330 100644 --- a/airtime_mvc/application/controllers/LoginController.php +++ b/airtime_mvc/application/controllers/LoginController.php @@ -34,14 +34,8 @@ class LoginController extends Zend_Controller_Action if (Zend_Session::isStarted()) { - ini_set('session.use_only_cookies', false); - ini_set('session.use_cookies', false); - ini_set('session.use_trans_sid', false); - ini_set('session.cache_limiter', null); - session_start(); // second session_start - //Open the session for writing, because we close it for writing by default in Bootstrap.php as an optimization. - //session_start(); + SessionHelper::reopenSessionForWriting(); $auth = Zend_Auth::getInstance(); $auth->getStorage(); @@ -142,7 +136,7 @@ class LoginController extends Zend_Controller_Action public function logoutAction() { //Open the session for writing, because we close it for writing by default in Bootstrap.php as an optimization. - session_start(); + SessionHelper::reopenSessionForWriting(); $auth = Zend_Auth::getInstance(); $auth->clearIdentity(); diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php index 2bbe691e1..59572e440 100644 --- a/airtime_mvc/application/controllers/PlaylistController.php +++ b/airtime_mvc/application/controllers/PlaylistController.php @@ -32,7 +32,7 @@ class PlaylistController extends Zend_Controller_Action ->initContext(); //This controller writes to the session all over the place, so we're going to reopen it for writing here. - session_start(); //Reopen the session for writing + SessionHelper::reopenSessionForWriting(); } private function getPlaylist($p_type) diff --git a/airtime_mvc/application/controllers/PreferenceController.php b/airtime_mvc/application/controllers/PreferenceController.php index 6e991ba24..d156d0490 100644 --- a/airtime_mvc/application/controllers/PreferenceController.php +++ b/airtime_mvc/application/controllers/PreferenceController.php @@ -32,7 +32,7 @@ class PreferenceController extends Zend_Controller_Action $form = new Application_Form_Preferences(); $values = array(); - session_start(); //Open session for writing. + SessionHelper::reopenSessionForWriting(); if ($request->isPost()) { $values = $request->getPost(); @@ -92,7 +92,7 @@ class PreferenceController extends Zend_Controller_Action $this->view->headScript()->appendFile($baseUrl.'js/airtime/preferences/support-setting.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->statusMsg = ""; - session_start(); //Open session for writing. + SessionHelper::reopenSessionForWriting(); $form = new Application_Form_SupportSettings(); if ($request->isPost()) { @@ -128,7 +128,7 @@ class PreferenceController extends Zend_Controller_Action public function removeLogoAction() { - session_start(); //Open session for writing. + SessionHelper::reopenSessionForWriting(); $this->view->layout()->disableLayout(); // Remove reliance on .phtml files to render requests @@ -153,7 +153,7 @@ class PreferenceController extends Zend_Controller_Action $this->view->headScript()->appendFile($baseUrl.'js/airtime/preferences/streamsetting.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); - session_start(); //Open session for writing. + SessionHelper::reopenSessionForWriting(); $name_map = array( 'ogg' => 'Ogg Vorbis', @@ -447,7 +447,7 @@ class PreferenceController extends Zend_Controller_Action public function setSourceConnectionUrlAction() { - session_start(); //Open session for writing. + SessionHelper::reopenSessionForWriting(); $request = $this->getRequest(); $type = $request->getParam("type", null); @@ -467,7 +467,7 @@ class PreferenceController extends Zend_Controller_Action public function getAdminPasswordStatusAction() { - session_start(); //Open session for writing. + SessionHelper::reopenSessionForWriting(); $out = array(); $num_of_stream = intval(Application_Model_Preference::GetNumOfStreams()); diff --git a/airtime_mvc/application/controllers/UserController.php b/airtime_mvc/application/controllers/UserController.php index 264444562..10f86b73e 100644 --- a/airtime_mvc/application/controllers/UserController.php +++ b/airtime_mvc/application/controllers/UserController.php @@ -18,7 +18,7 @@ class UserController extends Zend_Controller_Action { // Start the session to re-open write permission to the session so we can // create the namespace for our csrf token verification - session_start(); + SessionHelper::reopenSessionForWriting(); $CC_CONFIG = Config::getConfig(); $request = $this->getRequest(); @@ -121,7 +121,7 @@ class UserController extends Zend_Controller_Action public function editUserAction() { - session_start(); //Reopen session for writing. + SessionHelper::reopenSessionForWriting(); $request = $this->getRequest(); $form = new Application_Form_EditUser(); if ($request->isPost()) { diff --git a/airtime_mvc/application/controllers/UsersettingsController.php b/airtime_mvc/application/controllers/UsersettingsController.php index 35fbb19e1..519e854b8 100644 --- a/airtime_mvc/application/controllers/UsersettingsController.php +++ b/airtime_mvc/application/controllers/UsersettingsController.php @@ -70,14 +70,14 @@ class UsersettingsController extends Zend_Controller_Action public function remindmeAction() { // unset session - session_start(); //open session for writing again + SessionHelper::reopenSessionForWriting(); Zend_Session::namespaceUnset('referrer'); Application_Model_Preference::SetRemindMeDate(); } public function remindmeNeverAction() { - session_start(); //open session for writing again + SessionHelper::reopenSessionForWriting(); Zend_Session::namespaceUnset('referrer'); //pass in true to indicate 'Remind me never' was clicked Application_Model_Preference::SetRemindMeDate(true); @@ -86,7 +86,7 @@ class UsersettingsController extends Zend_Controller_Action public function donotshowregistrationpopupAction() { // unset session - session_start(); //open session for writing again + SessionHelper::reopenSessionForWriting(); Zend_Session::namespaceUnset('referrer'); } From e03428327cf2a72e348d68c4483cc09ce3321dd5 Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Fri, 25 Sep 2015 15:54:26 -0400 Subject: [PATCH 06/18] Fixed missing return statement --- airtime_mvc/application/controllers/plugins/Acl_plugin.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/application/controllers/plugins/Acl_plugin.php b/airtime_mvc/application/controllers/plugins/Acl_plugin.php index 35df192d6..693363c7c 100644 --- a/airtime_mvc/application/controllers/plugins/Acl_plugin.php +++ b/airtime_mvc/application/controllers/plugins/Acl_plugin.php @@ -227,7 +227,7 @@ class Zend_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract } private function verifyCSRFToken($token) { - SecurityHelper::verifyCSRFToken($token); + return SecurityHelper::verifyCSRFToken($token); } private function verifyAPIKey() { From 943048dd878799163e4a86f15e0af2a0241931ba Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Mon, 28 Sep 2015 17:48:04 -0400 Subject: [PATCH 07/18] Hacky fix for SAAS-1090 - Allow airtime-system to work with session optimizations --- airtime_mvc/application/models/Preference.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/application/models/Preference.php b/airtime_mvc/application/models/Preference.php index cd439ddbe..d51c74c8f 100644 --- a/airtime_mvc/application/models/Preference.php +++ b/airtime_mvc/application/models/Preference.php @@ -10,7 +10,7 @@ class Application_Model_Preference { //pass in true so the check is made with the autoloader //we need this check because saas calls this function from outside Zend - if (!Zend_Session::isStarted() || !class_exists("Zend_Auth", true) || !Zend_Auth::getInstance()->hasIdentity()) { + if (!class_exists("Zend_Session", true) || !Zend_Session::isStarted() || !class_exists("Zend_Auth", true) || !Zend_Auth::getInstance()->hasIdentity()) { $userId = null; } else { $auth = Zend_Auth::getInstance(); From 7f64edafff9ebb1dabd4b7062c0f1e3fe84d1104 Mon Sep 17 00:00:00 2001 From: drigato Date: Tue, 13 Oct 2015 11:08:17 -0400 Subject: [PATCH 08/18] SAAS-1121: New link show instances don't get created sometimes if there is no show content Fixed by checking if the linked show is empty before trying to copy its tracks into new show instances --- .../application/services/SchedulerService.php | 114 +++++++++--------- 1 file changed, 58 insertions(+), 56 deletions(-) diff --git a/airtime_mvc/application/services/SchedulerService.php b/airtime_mvc/application/services/SchedulerService.php index 48901f330..36dcd0231 100644 --- a/airtime_mvc/application/services/SchedulerService.php +++ b/airtime_mvc/application/services/SchedulerService.php @@ -234,63 +234,65 @@ class Application_Service_SchedulerService //with content from $linkedShowSchedule. try { $con->beginTransaction(); - foreach ($instanceIdsToFill as $id) - { - //Start by clearing the show instance that needs to be filling. This ensure - //we're not going to get in trouble in case there's an programming error somewhere else. - self::clearShowInstanceContents($id); - - // Now fill the show instance with the same content that $linkedShowSchedule has. - $instanceStart_sql = "SELECT starts FROM cc_show_instances " . - "WHERE id = {$id} " . "ORDER BY starts"; - - //What's tricky here is that when we copy the content, we have to adjust - //the start and end times of each track so they're inside the new show instance's time slot. - $nextStartDT = new DateTime( - Application_Common_Database::prepareAndExecute( - $instanceStart_sql, array(), - Application_Common_Database::COLUMN), - new DateTimeZone("UTC")); - - $defaultCrossfadeDuration = Application_Model_Preference::GetDefaultCrossfadeDuration(); - unset($values); - $values = array(); - foreach ($linkedShowSchedule as $item) { - $endTimeDT = self::findEndTime($nextStartDT, - $item["clip_length"]); - - if (is_null($item["file_id"])) { - $item["file_id"] = "null"; - } - if (is_null($item["stream_id"])) { - $item["stream_id"] = "null"; - } - - $values[] = "(" . "'{$nextStartDT->format(DEFAULT_TIMESTAMP_FORMAT)}', " . - "'{$endTimeDT->format(DEFAULT_TIMESTAMP_FORMAT)}', " . - "'{$item["clip_length"]}', " . - "'{$item["fade_in"]}', " . "'{$item["fade_out"]}', " . - "'{$item["cue_in"]}', " . "'{$item["cue_out"]}', " . - "{$item["file_id"]}, " . "{$item["stream_id"]}, " . - "{$id}, " . "{$item["position"]})"; - - $nextStartDT = self::findTimeDifference($endTimeDT, - $defaultCrossfadeDuration); - } //foreach show item - if (!empty($values)) { - $insert_sql = "INSERT INTO cc_schedule (starts, ends, ". - "clip_length, fade_in, fade_out, cue_in, cue_out, ". - "file_id, stream_id, instance_id, position) VALUES ". - implode($values, ","); - Application_Common_Database::prepareAndExecute( - $insert_sql, array(), Application_Common_Database::EXECUTE); - } - - //update cc_schedule status column - $instance = CcShowInstancesQuery::create()->findPk($id); - $instance->updateScheduleStatus($con); - } //foreach linked instance + if (!empty($linkedShowSchedule)) { + foreach ($instanceIdsToFill as $id) { + //Start by clearing the show instance that needs to be filling. This ensure + //we're not going to get in trouble in case there's an programming error somewhere else. + self::clearShowInstanceContents($id); + + // Now fill the show instance with the same content that $linkedShowSchedule has. + $instanceStart_sql = "SELECT starts FROM cc_show_instances " . + "WHERE id = {$id} " . "ORDER BY starts"; + + //What's tricky here is that when we copy the content, we have to adjust + //the start and end times of each track so they're inside the new show instance's time slot. + $nextStartDT = new DateTime( + Application_Common_Database::prepareAndExecute( + $instanceStart_sql, array(), + Application_Common_Database::COLUMN), + new DateTimeZone("UTC")); + + $defaultCrossfadeDuration = Application_Model_Preference::GetDefaultCrossfadeDuration(); + unset($values); + $values = array(); + foreach ($linkedShowSchedule as $item) { + $endTimeDT = self::findEndTime($nextStartDT, + $item["clip_length"]); + + if (is_null($item["file_id"])) { + $item["file_id"] = "null"; + } + if (is_null($item["stream_id"])) { + $item["stream_id"] = "null"; + } + + $values[] = "(" . "'{$nextStartDT->format(DEFAULT_TIMESTAMP_FORMAT)}', " . + "'{$endTimeDT->format(DEFAULT_TIMESTAMP_FORMAT)}', " . + "'{$item["clip_length"]}', " . + "'{$item["fade_in"]}', " . "'{$item["fade_out"]}', " . + "'{$item["cue_in"]}', " . "'{$item["cue_out"]}', " . + "{$item["file_id"]}, " . "{$item["stream_id"]}, " . + "{$id}, " . "{$item["position"]})"; + + $nextStartDT = self::findTimeDifference($endTimeDT, + $defaultCrossfadeDuration); + } //foreach show item + + if (!empty($values)) { + $insert_sql = "INSERT INTO cc_schedule (starts, ends, " . + "clip_length, fade_in, fade_out, cue_in, cue_out, " . + "file_id, stream_id, instance_id, position) VALUES " . + implode($values, ","); + Application_Common_Database::prepareAndExecute( + $insert_sql, array(), Application_Common_Database::EXECUTE); + } + + //update cc_schedule status column + $instance = CcShowInstancesQuery::create()->findPk($id); + $instance->updateScheduleStatus($con); + } //foreach linked instance + } //update time_filled and last_scheduled in cc_show_instances $now = gmdate(DEFAULT_TIMESTAMP_FORMAT); From 96e6038d87258b1b383321c50e9d4d86957940f0 Mon Sep 17 00:00:00 2001 From: Localizer Date: Wed, 14 Oct 2015 15:49:16 +0000 Subject: [PATCH 09/18] updated translation resources --- airtime_mvc/locale/ast/LC_MESSAGES/airtime.mo | Bin 0 -> 466 bytes airtime_mvc/locale/ast/LC_MESSAGES/airtime.po | 4154 +++++++++++++++++ .../locale/hu_HU/LC_MESSAGES/airtime.mo | Bin 54154 -> 55367 bytes .../locale/hu_HU/LC_MESSAGES/airtime.po | 58 +- 4 files changed, 4183 insertions(+), 29 deletions(-) create mode 100644 airtime_mvc/locale/ast/LC_MESSAGES/airtime.mo create mode 100644 airtime_mvc/locale/ast/LC_MESSAGES/airtime.po diff --git a/airtime_mvc/locale/ast/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/ast/LC_MESSAGES/airtime.mo new file mode 100644 index 0000000000000000000000000000000000000000..8a3871c17fb74561844cbddfab142740cedc2d12 GIT binary patch literal 466 zcmYLE!A=4(6vXIhkDfi$!~;Yh+a(yFh!J5)NLVGXcrQy?YL<4>b_GAg#IN&Pd@BYf zne@GMGH>SR^5Uz4I740`Z;4v1Y`ZzQ!;xf;$w$kUPOhg9i6NJ3yNx2w2d%4XbY!^mhcnUI%$6q1K9>W?Q+{o!yH&gYLPRcXOf0kPm) zOlnswuzM6CJJ$i(M|W`6c>KrTf`%1pLFHTwJ;E>M6aYu8EG%2JLY8sFL~3f eFg$~iHe1Vx%Kui|YjnwB>{S)H?vbF@^(w#obB6E$ literal 0 HcmV?d00001 diff --git a/airtime_mvc/locale/ast/LC_MESSAGES/airtime.po b/airtime_mvc/locale/ast/LC_MESSAGES/airtime.po new file mode 100644 index 000000000..82848fd71 --- /dev/null +++ b/airtime_mvc/locale/ast/LC_MESSAGES/airtime.po @@ -0,0 +1,4154 @@ +# LANGUAGE (xx_XX) translation for Airtime. +# Copyright (C) 2012 Sourcefabric +# This file is distributed under the same license as the Airtime package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Airtime\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-09-04 11:17-0400\n" +"PO-Revision-Date: 2014-01-27 10:20+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Asturian (http://www.transifex.com/sourcefabric/airtime/language/ast/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ast\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: airtime_mvc/application/services/CalendarService.php:50 +msgid "Record file doesn't exist" +msgstr "" + +#: airtime_mvc/application/services/CalendarService.php:54 +msgid "View Recorded File Metadata" +msgstr "" + +#: airtime_mvc/application/services/CalendarService.php:61 +#: airtime_mvc/application/services/CalendarService.php:93 +msgid "View" +msgstr "" + +#: airtime_mvc/application/services/CalendarService.php:81 +msgid "Schedule Tracks" +msgstr "" + +#: airtime_mvc/application/services/CalendarService.php:106 +msgid "Clear Show" +msgstr "" + +#: airtime_mvc/application/services/CalendarService.php:120 +#: airtime_mvc/application/services/CalendarService.php:125 +msgid "Cancel Show" +msgstr "" + +#: airtime_mvc/application/services/CalendarService.php:146 +#: airtime_mvc/application/services/CalendarService.php:165 +msgid "Edit Instance" +msgstr "" + +#: airtime_mvc/application/services/CalendarService.php:152 +#: airtime_mvc/application/controllers/LibraryController.php:184 +#: airtime_mvc/application/controllers/LibraryController.php:206 +msgid "Edit" +msgstr "" + +#: airtime_mvc/application/services/CalendarService.php:158 +#: airtime_mvc/application/services/CalendarService.php:172 +msgid "Edit Show" +msgstr "" + +#: airtime_mvc/application/services/CalendarService.php:188 +#: airtime_mvc/application/services/CalendarService.php:205 +#: airtime_mvc/application/services/CalendarService.php:210 +#: airtime_mvc/application/controllers/LibraryController.php:122 +#: airtime_mvc/application/controllers/LibraryController.php:189 +#: airtime_mvc/application/controllers/LibraryController.php:208 +#: airtime_mvc/application/controllers/ShowbuilderController.php:144 +msgid "Delete" +msgstr "" + +#: airtime_mvc/application/services/CalendarService.php:194 +msgid "Delete Instance" +msgstr "" + +#: airtime_mvc/application/services/CalendarService.php:200 +msgid "Delete Instance and All Following" +msgstr "" + +#: airtime_mvc/application/services/CalendarService.php:254 +msgid "Permission denied" +msgstr "" + +#: airtime_mvc/application/services/CalendarService.php:258 +msgid "Can't drag and drop repeating shows" +msgstr "" + +#: airtime_mvc/application/services/CalendarService.php:267 +msgid "Can't move a past show" +msgstr "" + +#: airtime_mvc/application/services/CalendarService.php:302 +msgid "Can't move show into past" +msgstr "" + +#: airtime_mvc/application/services/CalendarService.php:309 +#: airtime_mvc/application/forms/AddShowWhen.php:293 +#: airtime_mvc/application/forms/AddShowWhen.php:321 +#: airtime_mvc/application/forms/AddShowWhen.php:327 +msgid "Cannot schedule overlapping shows" +msgstr "" + +#: airtime_mvc/application/services/CalendarService.php:322 +msgid "Can't move a recorded show less than 1 hour before its rebroadcasts." +msgstr "" + +#: airtime_mvc/application/services/CalendarService.php:332 +msgid "Show was deleted because recorded show does not exist!" +msgstr "" + +#: airtime_mvc/application/services/CalendarService.php:339 +msgid "Must wait 1 hour to rebroadcast." +msgstr "" + +#: airtime_mvc/application/services/HistoryService.php:1117 +#: airtime_mvc/application/services/HistoryService.php:1157 +#: airtime_mvc/application/services/HistoryService.php:1174 +#: airtime_mvc/application/controllers/LocaleController.php:76 +#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:6 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:72 +#: airtime_mvc/application/models/Block.php:1375 +msgid "Title" +msgstr "" + +#: airtime_mvc/application/services/HistoryService.php:1118 +#: airtime_mvc/application/services/HistoryService.php:1158 +#: airtime_mvc/application/services/HistoryService.php:1175 +#: airtime_mvc/application/controllers/LocaleController.php:77 +#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:7 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:58 +#: airtime_mvc/application/models/Block.php:1360 +msgid "Creator" +msgstr "" + +#: airtime_mvc/application/services/HistoryService.php:1119 +#: airtime_mvc/application/controllers/LocaleController.php:78 +#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:8 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:50 +#: airtime_mvc/application/models/Block.php:1352 +msgid "Album" +msgstr "" + +#: airtime_mvc/application/services/HistoryService.php:1120 +#: airtime_mvc/application/services/HistoryService.php:1177 +#: airtime_mvc/application/controllers/LocaleController.php:91 +#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:9 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:66 +#: airtime_mvc/application/models/Block.php:1369 +msgid "Length" +msgstr "" + +#: airtime_mvc/application/services/HistoryService.php:1121 +#: airtime_mvc/application/controllers/LocaleController.php:85 +#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:10 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:60 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:127 +#: airtime_mvc/application/models/Block.php:1362 +msgid "Genre" +msgstr "" + +#: airtime_mvc/application/services/HistoryService.php:1122 +#: airtime_mvc/application/controllers/LocaleController.php:93 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:68 +#: airtime_mvc/application/models/Block.php:1371 +msgid "Mood" +msgstr "" + +#: airtime_mvc/application/services/HistoryService.php:1123 +#: airtime_mvc/application/controllers/LocaleController.php:87 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:62 +#: airtime_mvc/application/models/Block.php:1364 +msgid "Label" +msgstr "" + +#: airtime_mvc/application/services/HistoryService.php:1124 +#: airtime_mvc/application/services/HistoryService.php:1178 +#: airtime_mvc/application/controllers/LocaleController.php:81 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:53 +#: airtime_mvc/application/models/Block.php:1355 +msgid "Composer" +msgstr "" + +#: airtime_mvc/application/services/HistoryService.php:1125 +#: airtime_mvc/application/controllers/LocaleController.php:86 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:61 +#: airtime_mvc/application/models/Block.php:1363 +msgid "ISRC" +msgstr "" + +#: airtime_mvc/application/services/HistoryService.php:1126 +#: airtime_mvc/application/services/HistoryService.php:1179 +#: airtime_mvc/application/controllers/LocaleController.php:83 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:55 +#: airtime_mvc/application/models/Block.php:1357 +msgid "Copyright" +msgstr "" + +#: airtime_mvc/application/services/HistoryService.php:1127 +#: airtime_mvc/application/controllers/LocaleController.php:100 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:76 +#: airtime_mvc/application/models/Block.php:1379 +msgid "Year" +msgstr "" + +#: airtime_mvc/application/services/HistoryService.php:1128 +msgid "Track" +msgstr "" + +#: airtime_mvc/application/services/HistoryService.php:1129 +#: airtime_mvc/application/controllers/LocaleController.php:82 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:54 +#: airtime_mvc/application/models/Block.php:1356 +msgid "Conductor" +msgstr "" + +#: airtime_mvc/application/services/HistoryService.php:1130 +#: airtime_mvc/application/controllers/LocaleController.php:88 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:63 +#: airtime_mvc/application/models/Block.php:1365 +msgid "Language" +msgstr "" + +#: airtime_mvc/application/services/HistoryService.php:1155 +#: airtime_mvc/application/forms/EditHistoryItem.php:32 +msgid "Start Time" +msgstr "" + +#: airtime_mvc/application/services/HistoryService.php:1156 +#: airtime_mvc/application/forms/EditHistoryItem.php:44 +msgid "End Time" +msgstr "" + +#: airtime_mvc/application/services/HistoryService.php:1176 +msgid "Played" +msgstr "" + +#: airtime_mvc/application/controllers/LibraryController.php:31 +#: airtime_mvc/application/controllers/PlaylistController.php:147 +#, php-format +msgid "%s not found" +msgstr "" + +#: airtime_mvc/application/controllers/LibraryController.php:40 +#: airtime_mvc/application/controllers/PlaylistController.php:168 +msgid "Something went wrong." +msgstr "" + +#: airtime_mvc/application/controllers/LibraryController.php:95 +#: airtime_mvc/application/controllers/ShowbuilderController.php:136 +msgid "Preview" +msgstr "" + +#: airtime_mvc/application/controllers/LibraryController.php:115 +#: airtime_mvc/application/controllers/LibraryController.php:177 +#: airtime_mvc/application/controllers/LibraryController.php:200 +msgid "Add to Playlist" +msgstr "" + +#: airtime_mvc/application/controllers/LibraryController.php:117 +msgid "Add to Smart Block" +msgstr "" + +#: airtime_mvc/application/controllers/LibraryController.php:123 +#: airtime_mvc/application/controllers/LocaleController.php:66 +msgid "Edit Metadata" +msgstr "" + +#: airtime_mvc/application/controllers/LibraryController.php:131 +#: airtime_mvc/application/controllers/ScheduleController.php:712 +msgid "Download" +msgstr "" + +#: airtime_mvc/application/controllers/LibraryController.php:147 +msgid "View track" +msgstr "" + +#: airtime_mvc/application/controllers/LibraryController.php:148 +msgid "Remove track" +msgstr "" + +#: airtime_mvc/application/controllers/LibraryController.php:154 +#: airtime_mvc/application/controllers/LibraryController.php:159 +msgid "Upload track" +msgstr "" + +#: airtime_mvc/application/controllers/LibraryController.php:169 +msgid "Duplicate Playlist" +msgstr "" + +#: airtime_mvc/application/controllers/LibraryController.php:213 +msgid "No action available" +msgstr "" + +#: airtime_mvc/application/controllers/LibraryController.php:233 +msgid "You don't have permission to delete selected items." +msgstr "" + +#: airtime_mvc/application/controllers/LibraryController.php:279 +msgid "Could not delete file because it is scheduled in the future." +msgstr "" + +#: airtime_mvc/application/controllers/LibraryController.php:282 +msgid "Could not delete file(s)." +msgstr "" + +#: airtime_mvc/application/controllers/LibraryController.php:322 +#, php-format +msgid "Copy of %s" +msgstr "" + +#: airtime_mvc/application/controllers/WebstreamController.php:28 +#: airtime_mvc/application/controllers/WebstreamController.php:32 +msgid "Untitled Webstream" +msgstr "" + +#: airtime_mvc/application/controllers/WebstreamController.php:150 +msgid "Webstream saved." +msgstr "" + +#: airtime_mvc/application/controllers/WebstreamController.php:158 +msgid "Invalid form values." +msgstr "" + +#: airtime_mvc/application/controllers/EmbeddablewidgetsController.php:28 +msgid "" +"To configure and use the embeddable player you must:

\n" +" 1. Enable at least one MP3, AAC, or OGG stream under System -> Streams
\n" +" 2. Enable the Public Airtime API under System -> Preferences" +msgstr "" + +#: airtime_mvc/application/controllers/EmbeddablewidgetsController.php:41 +msgid "" +"To use the embeddable weekly schedule widget you must:

\n" +" Enable the Public Airtime API under System -> Preferences" +msgstr "" + +#: airtime_mvc/application/controllers/ListenerstatController.php:51 +msgid "" +"Please make sure admin user/password is correct on System->Streams page." +msgstr "" + +#: airtime_mvc/application/controllers/UserController.php:86 +msgid "User added successfully!" +msgstr "" + +#: airtime_mvc/application/controllers/UserController.php:88 +msgid "User updated successfully!" +msgstr "" + +#: airtime_mvc/application/controllers/UserController.php:187 +msgid "Settings updated successfully!" +msgstr "" + +#: airtime_mvc/application/controllers/PlaylistController.php:53 +#, php-format +msgid "You are viewing an older version of %s" +msgstr "" + +#: airtime_mvc/application/controllers/PlaylistController.php:140 +msgid "You cannot add tracks to dynamic blocks." +msgstr "" + +#: airtime_mvc/application/controllers/PlaylistController.php:161 +#, php-format +msgid "You don't have permission to delete selected %s(s)." +msgstr "" + +#: airtime_mvc/application/controllers/PlaylistController.php:174 +msgid "You can only add tracks to smart block." +msgstr "" + +#: airtime_mvc/application/controllers/PlaylistController.php:180 +#: airtime_mvc/application/controllers/LocaleController.php:50 +msgid "You can only add tracks, smart blocks, and webstreams to playlists." +msgstr "" + +#: airtime_mvc/application/controllers/PlaylistController.php:192 +msgid "Untitled Playlist" +msgstr "" + +#: airtime_mvc/application/controllers/PlaylistController.php:194 +msgid "Untitled Smart Block" +msgstr "" + +#: airtime_mvc/application/controllers/PlaylistController.php:522 +msgid "Unknown Playlist" +msgstr "" + +#: airtime_mvc/application/controllers/ErrorController.php:78 +msgid "Page not found." +msgstr "" + +#: airtime_mvc/application/controllers/ErrorController.php:87 +msgid "The requested action is not supported." +msgstr "" + +#: airtime_mvc/application/controllers/ErrorController.php:98 +msgid "You do not have permission to access this resource." +msgstr "" + +#: airtime_mvc/application/controllers/ErrorController.php:109 +msgid "An internal application error has occurred." +msgstr "" + +#: airtime_mvc/application/controllers/Apiv2Controller.php:77 +#: airtime_mvc/application/controllers/ApiController.php:79 +msgid "You are not allowed to access this resource." +msgstr "" + +#: airtime_mvc/application/controllers/PreferenceController.php:72 +msgid "Preferences updated." +msgstr "" + +#: airtime_mvc/application/controllers/PreferenceController.php:115 +msgid "Support setting updated." +msgstr "" + +#: airtime_mvc/application/controllers/PreferenceController.php:123 +msgid "Support Feedback" +msgstr "" + +#: airtime_mvc/application/controllers/PreferenceController.php:251 +msgid "Stream Setting Updated." +msgstr "" + +#: airtime_mvc/application/controllers/PreferenceController.php:342 +msgid "path should be specified" +msgstr "" + +#: airtime_mvc/application/controllers/PreferenceController.php:437 +msgid "Problem with Liquidsoap..." +msgstr "" + +#: airtime_mvc/application/controllers/PreferenceController.php:493 +msgid "Request method not accepted" +msgstr "" + +#: airtime_mvc/application/controllers/DashboardController.php:35 +#: airtime_mvc/application/controllers/DashboardController.php:84 +msgid "You don't have permission to disconnect source." +msgstr "" + +#: airtime_mvc/application/controllers/DashboardController.php:37 +#: airtime_mvc/application/controllers/DashboardController.php:86 +msgid "There is no source connected to this input." +msgstr "" + +#: airtime_mvc/application/controllers/DashboardController.php:81 +msgid "You don't have permission to switch source." +msgstr "" + +#: airtime_mvc/application/controllers/LoginController.php:43 +msgid "Please enter your username and password." +msgstr "" + +#: airtime_mvc/application/controllers/LoginController.php:93 +msgid "Wrong username or password provided. Please try again." +msgstr "" + +#: airtime_mvc/application/controllers/LoginController.php:167 +msgid "" +"Email could not be sent. Check your mail server settings and ensure it has " +"been configured properly." +msgstr "" + +#: airtime_mvc/application/controllers/LoginController.php:173 +msgid "There was a problem with the username or email address you entered." +msgstr "" + +#: airtime_mvc/application/controllers/ApiController.php:244 +#: airtime_mvc/application/controllers/ApiController.php:317 +#: airtime_mvc/application/controllers/ApiController.php:392 +#: airtime_mvc/application/controllers/ApiController.php:435 +#: airtime_mvc/application/controllers/ApiController.php:474 +#: airtime_mvc/application/controllers/ApiController.php:507 +msgid "You are not allowed to access this resource. " +msgstr "" + +#: airtime_mvc/application/controllers/ApiController.php:698 +#: airtime_mvc/application/controllers/ApiController.php:718 +#: airtime_mvc/application/controllers/ApiController.php:730 +#, php-format +msgid "File does not exist in %s" +msgstr "" + +#: airtime_mvc/application/controllers/ApiController.php:781 +msgid "Bad request. no 'mode' parameter passed." +msgstr "" + +#: airtime_mvc/application/controllers/ApiController.php:791 +msgid "Bad request. 'mode' parameter is invalid" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:30 +#: airtime_mvc/application/layouts/scripts/audio-player.phtml:5 +msgid "Audio Player" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:32 +msgid "Recording:" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:33 +msgid "Master Stream" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:34 +msgid "Live Stream" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:35 +msgid "Nothing Scheduled" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:36 +msgid "Current Show:" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:37 +msgid "Current" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:39 +msgid "You are running the latest version" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:40 +msgid "New version available: " +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:41 +msgid "This version will soon be obsolete." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:42 +msgid "This version is no longer supported." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:43 +msgid "Please upgrade to " +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:45 +msgid "Add to current playlist" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:46 +msgid "Add to current smart block" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:47 +msgid "Adding 1 Item" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:48 +#, php-format +msgid "Adding %s Items" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:49 +msgid "You can only add tracks to smart blocks." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:53 +msgid "Please select a cursor position on timeline." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:54 +msgid "You haven't added any tracks" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:55 +msgid "You haven't added any playlists" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:56 +msgid "You haven't added any smart blocks" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:57 +msgid "You haven't added any webstreams" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:58 +msgid "Learn about tracks" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:59 +msgid "Learn about playlists" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:60 +msgid "Learn about smart blocks" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:61 +msgid "Learn about webstreams" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:62 +msgid "Click 'New' to create one." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:67 +msgid "Add to selected show" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:68 +msgid "Select" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:69 +msgid "Select this page" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:70 +msgid "Deselect this page" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:71 +msgid "Deselect all" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:72 +msgid "Are you sure you want to delete the selected item(s)?" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:73 +msgid "Scheduled" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:74 +#: airtime_mvc/application/layouts/scripts/layout.phtml:78 +#: airtime_mvc/application/views/scripts/showbuilder/builderDialog.phtml:7 +msgid "Tracks" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:75 +#: airtime_mvc/application/layouts/scripts/layout.phtml:60 +msgid "Playlist" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:79 +msgid "Bit Rate" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:80 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:52 +#: airtime_mvc/application/models/Block.php:1354 +msgid "BPM" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:84 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:59 +#: airtime_mvc/application/models/Block.php:1361 +msgid "Encoded By" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:89 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:64 +#: airtime_mvc/application/models/Block.php:1367 +msgid "Last Modified" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:90 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:65 +#: airtime_mvc/application/models/Block.php:1368 +msgid "Last Played" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:92 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:67 +#: airtime_mvc/application/models/Block.php:1370 +msgid "Mime" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:94 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:69 +#: airtime_mvc/application/models/Block.php:1372 +msgid "Owner" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:95 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:70 +#: airtime_mvc/application/models/Block.php:1373 +msgid "Replay Gain" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:96 +msgid "Sample Rate" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:97 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:73 +#: airtime_mvc/application/models/Block.php:1376 +msgid "Track Number" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:98 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:74 +#: airtime_mvc/application/models/Block.php:1377 +msgid "Uploaded" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:99 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:75 +#: airtime_mvc/application/models/Block.php:1378 +msgid "Website" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:101 +msgid "Loading..." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:102 +#: airtime_mvc/application/controllers/LocaleController.php:404 +#: airtime_mvc/application/views/scripts/plupload/index.phtml:65 +msgid "All" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:103 +msgid "Files" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:104 +#: airtime_mvc/application/layouts/scripts/layout.phtml:80 +#: airtime_mvc/application/views/scripts/showbuilder/builderDialog.phtml:13 +msgid "Playlists" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:105 +#: airtime_mvc/application/layouts/scripts/layout.phtml:82 +#: airtime_mvc/application/views/scripts/showbuilder/builderDialog.phtml:19 +msgid "Smart Blocks" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:106 +msgid "Web Streams" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:107 +msgid "Unknown type: " +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:108 +msgid "Are you sure you want to delete the selected item?" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:109 +#: airtime_mvc/application/controllers/LocaleController.php:209 +msgid "Uploading in progress..." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:110 +msgid "Retrieving data from the server..." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:111 +msgid "The soundcloud id for this file is: " +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:112 +msgid "There was an error while uploading to soundcloud." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:113 +msgid "Error code: " +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:114 +msgid "Error msg: " +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:115 +msgid "Input must be a positive number" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:116 +msgid "Input must be a number" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:117 +msgid "Input must be in the format: yyyy-mm-dd" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:118 +msgid "Input must be in the format: hh:mm:ss.t" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:121 +#, php-format +msgid "" +"You are currently uploading files. %sGoing to another screen will cancel the" +" upload process. %sAre you sure you want to leave the page?" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:123 +msgid "Open Media Builder" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:124 +msgid "please put in a time '00:00:00 (.0)'" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:125 +msgid "please put in a time in seconds '00 (.0)'" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:126 +msgid "Your browser does not support playing this file type: " +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:127 +msgid "Dynamic block is not previewable" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:128 +msgid "Limit to: " +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:129 +msgid "Playlist saved" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:130 +msgid "Playlist shuffled" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:132 +msgid "" +"Airtime is unsure about the status of this file. This can happen when the " +"file is on a remote drive that is unaccessible or the file is in a directory" +" that isn't 'watched' anymore." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:134 +#, php-format +msgid "Listener Count on %s: %s" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:136 +msgid "Remind me in 1 week" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:137 +msgid "Remind me never" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:138 +msgid "Yes, help Airtime" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:139 +#: airtime_mvc/application/controllers/LocaleController.php:187 +msgid "Image must be one of jpg, jpeg, png, or gif" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:142 +msgid "" +"A static smart block will save the criteria and generate the block content " +"immediately. This allows you to edit and view it in the Library before " +"adding it to a show." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:144 +msgid "" +"A dynamic smart block will only save the criteria. The block content will " +"get generated upon adding it to a show. You will not be able to view and " +"edit the content in the Library." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:146 +msgid "" +"The desired block length will not be reached if Airtime cannot find enough " +"unique tracks to match your criteria. Enable this option if you wish to " +"allow tracks to be added multiple times to the smart block." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:147 +msgid "Smart block shuffled" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:148 +msgid "Smart block generated and criteria saved" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:149 +msgid "Smart block saved" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:150 +msgid "Processing..." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:151 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:88 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:104 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:263 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:392 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:430 +#: airtime_mvc/application/models/Block.php:1383 +msgid "Select modifier" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:152 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:89 +#: airtime_mvc/application/models/Block.php:1384 +msgid "contains" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:153 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:90 +#: airtime_mvc/application/models/Block.php:1385 +msgid "does not contain" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:154 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:91 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:105 +#: airtime_mvc/application/models/Block.php:1386 +#: airtime_mvc/application/models/Block.php:1390 +msgid "is" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:155 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:92 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:106 +#: airtime_mvc/application/models/Block.php:1387 +#: airtime_mvc/application/models/Block.php:1391 +msgid "is not" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:156 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:93 +#: airtime_mvc/application/models/Block.php:1388 +msgid "starts with" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:157 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:94 +#: airtime_mvc/application/models/Block.php:1389 +msgid "ends with" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:158 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:107 +#: airtime_mvc/application/models/Block.php:1392 +msgid "is greater than" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:159 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:108 +#: airtime_mvc/application/models/Block.php:1393 +msgid "is less than" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:160 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:109 +#: airtime_mvc/application/models/Block.php:1394 +msgid "is in the range" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:162 +msgid "Choose Storage Folder" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:163 +msgid "Choose Folder to Watch" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:165 +msgid "" +"Are you sure you want to change the storage folder?\n" +"This will remove the files from your Airtime library!" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:166 +#: airtime_mvc/application/views/scripts/preference/directory-config.phtml:2 +msgid "Manage Media Folders" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:167 +msgid "Are you sure you want to remove the watched folder?" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:168 +msgid "This path is currently not accessible." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:170 +#, php-format +msgid "" +"Some stream types require extra configuration. Details about enabling %sAAC+" +" Support%s or %sOpus Support%s are provided." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:171 +msgid "Connected to the streaming server" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:172 +msgid "The stream is disabled" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:173 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:191 +msgid "Getting information from the server..." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:174 +msgid "Can not connect to the streaming server" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:176 +msgid "" +"If Airtime is behind a router or firewall, you may need to configure port " +"forwarding and this field information will be incorrect. In this case you " +"will need to manually update this field so it shows the correct " +"host/port/mount that your DJ's need to connect to. The allowed range is " +"between 1024 and 49151." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:177 +#, php-format +msgid "For more details, please read the %sAirtime Manual%s" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:179 +msgid "" +"Check this option to enable metadata for OGG streams (stream metadata is the" +" track title, artist, and show name that is displayed in an audio player). " +"VLC and mplayer have a serious bug when playing an OGG/VORBIS stream that " +"has metadata information enabled: they will disconnect from the stream after" +" every song. If you are using an OGG stream and your listeners do not " +"require support for these audio players, then feel free to enable this " +"option." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:180 +msgid "" +"Check this box to automatically switch off Master/Show source upon source " +"disconnection." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:181 +msgid "" +"Check this box to automatically switch on Master/Show source upon source " +"connection." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:182 +msgid "" +"If your Icecast server expects a username of 'source', this field can be " +"left blank." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:183 +#: airtime_mvc/application/controllers/LocaleController.php:193 +msgid "" +"If your live streaming client does not ask for a username, this field should" +" be 'source'." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:184 +msgid "" +"WARNING: This will restart your stream and may cause a short dropout for " +"your listeners!" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:185 +msgid "" +"This is the admin username and password for Icecast/SHOUTcast to get " +"listener statistics." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:189 +msgid "" +"Warning: You cannot change this field while the show is currently playing" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:190 +msgid "No result found" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:191 +msgid "" +"This follows the same security pattern for the shows: only users assigned to" +" the show can connect." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:192 +msgid "Specify custom authentication which will work only for this show." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:194 +msgid "The show instance doesn't exist anymore!" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:195 +msgid "Warning: Shows cannot be re-linked" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:196 +msgid "" +"By linking your repeating shows any media items scheduled in any repeat show" +" will also get scheduled in the other repeat shows" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:197 +msgid "" +"Timezone is set to the station timezone by default. Shows in the calendar " +"will be displayed in your local time defined by the Interface Timezone in " +"your user settings." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:201 +msgid "Show" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:202 +msgid "Show is empty" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:203 +msgid "1m" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:204 +msgid "5m" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:205 +msgid "10m" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:206 +msgid "15m" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:207 +msgid "30m" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:208 +msgid "60m" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:210 +msgid "Retreiving data from the server..." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:216 +msgid "This show has no scheduled content." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:217 +msgid "This show is not completely filled with content." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:221 +msgid "January" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:222 +msgid "February" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:223 +msgid "March" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:224 +msgid "April" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:225 +#: airtime_mvc/application/controllers/LocaleController.php:237 +msgid "May" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:226 +msgid "June" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:227 +msgid "July" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:228 +msgid "August" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:229 +msgid "September" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:230 +msgid "October" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:231 +msgid "November" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:232 +msgid "December" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:233 +msgid "Jan" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:234 +msgid "Feb" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:235 +msgid "Mar" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:236 +msgid "Apr" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:238 +msgid "Jun" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:239 +msgid "Jul" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:240 +msgid "Aug" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:241 +msgid "Sep" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:242 +msgid "Oct" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:243 +msgid "Nov" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:244 +msgid "Dec" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:245 +msgid "Today" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:246 +msgid "Day" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:247 +msgid "Week" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:248 +msgid "Month" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:249 +#: airtime_mvc/application/forms/GeneralPreferences.php:158 +msgid "Sunday" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:250 +#: airtime_mvc/application/forms/GeneralPreferences.php:159 +msgid "Monday" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:251 +#: airtime_mvc/application/forms/GeneralPreferences.php:160 +msgid "Tuesday" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:252 +#: airtime_mvc/application/forms/GeneralPreferences.php:161 +msgid "Wednesday" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:253 +#: airtime_mvc/application/forms/GeneralPreferences.php:162 +msgid "Thursday" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:254 +#: airtime_mvc/application/forms/GeneralPreferences.php:163 +msgid "Friday" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:255 +#: airtime_mvc/application/forms/GeneralPreferences.php:164 +msgid "Saturday" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:256 +#: airtime_mvc/application/forms/AddShowRepeats.php:35 +msgid "Sun" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:257 +#: airtime_mvc/application/forms/AddShowRepeats.php:36 +msgid "Mon" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:258 +#: airtime_mvc/application/forms/AddShowRepeats.php:37 +msgid "Tue" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:259 +#: airtime_mvc/application/forms/AddShowRepeats.php:38 +msgid "Wed" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:260 +#: airtime_mvc/application/forms/AddShowRepeats.php:39 +msgid "Thu" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:261 +#: airtime_mvc/application/forms/AddShowRepeats.php:40 +msgid "Fri" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:262 +#: airtime_mvc/application/forms/AddShowRepeats.php:41 +msgid "Sat" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:263 +msgid "" +"Shows longer than their scheduled time will be cut off by a following show." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:264 +msgid "Cancel Current Show?" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:265 +#: airtime_mvc/application/controllers/LocaleController.php:312 +msgid "Stop recording current show?" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:266 +msgid "Ok" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:267 +msgid "Contents of Show" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:270 +msgid "Remove all content?" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:272 +msgid "Delete selected item(s)?" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:273 +#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:5 +msgid "Start" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:274 +msgid "End" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:275 +msgid "Duration" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:276 +msgid "Filtering out " +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:277 +msgid " of " +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:278 +msgid " records" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:284 +#: airtime_mvc/application/layouts/scripts/layout.phtml:140 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:56 +#: airtime_mvc/application/models/Block.php:1358 +msgid "Cue In" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:285 +#: airtime_mvc/application/layouts/scripts/layout.phtml:147 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:57 +#: airtime_mvc/application/models/Block.php:1359 +msgid "Cue Out" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:286 +#: airtime_mvc/application/layouts/scripts/layout.phtml:167 +msgid "Fade In" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:287 +#: airtime_mvc/application/layouts/scripts/layout.phtml:168 +msgid "Fade Out" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:288 +msgid "Show Empty" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:289 +msgid "Recording From Line In" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:290 +msgid "Track preview" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:294 +msgid "Cannot schedule outside a show." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:295 +msgid "Moving 1 Item" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:296 +#, php-format +msgid "Moving %s Items" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:297 +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:78 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:86 +#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:5 +#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:118 +#: airtime_mvc/application/views/scripts/form/edit-user.phtml:173 +#: airtime_mvc/application/views/scripts/playouthistorytemplate/template-contents.phtml:85 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:48 +#: airtime_mvc/application/forms/Preferences.php:40 +#: airtime_mvc/application/forms/EditHistory.php:131 +#: airtime_mvc/application/forms/AddUser.php:110 +#: airtime_mvc/application/forms/PasswordChange.php:43 +#: airtime_mvc/application/forms/SupportSettings.php:131 +msgid "Save" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:298 +#: airtime_mvc/application/controllers/LocaleController.php:321 +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:75 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:83 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:45 +#: airtime_mvc/application/forms/EditHistory.php:141 +#: airtime_mvc/application/forms/EditAudioMD.php:186 +msgid "Cancel" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:299 +msgid "Fade Editor" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:300 +msgid "Cue Editor" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:301 +msgid "" +"Waveform features are available in a browser supporting the Web Audio API" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:304 +msgid "Select all" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:305 +msgid "Select none" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:306 +msgid "Trim overbooked shows" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:307 +msgid "Remove selected scheduled items" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:308 +msgid "Jump to the current playing track" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:309 +msgid "Cancel current show" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:314 +msgid "Open library to add or remove content" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:315 +msgid "Add / Remove Content" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:317 +#: airtime_mvc/application/views/scripts/plupload/index.phtml:49 +#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:203 +msgid "in use" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:318 +#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:189 +msgid "Disk" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:320 +msgid "Look in" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:322 +msgid "Open" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:324 +#: airtime_mvc/application/forms/AddUser.php:102 +msgid "Admin" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:325 +#: airtime_mvc/application/forms/AddUser.php:100 +msgid "DJ" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:326 +#: airtime_mvc/application/forms/AddUser.php:101 +msgid "Program Manager" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:327 +#: airtime_mvc/application/forms/AddUser.php:99 +msgid "Guest" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:328 +msgid "Guests can do the following:" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:329 +msgid "View schedule" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:330 +msgid "View show content" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:331 +msgid "DJs can do the following:" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:332 +msgid "Manage assigned show content" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:333 +msgid "Import media files" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:334 +msgid "Create playlists, smart blocks, and webstreams" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:335 +msgid "Manage their own library content" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:336 +msgid "Progam Managers can do the following:" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:337 +msgid "View and manage show content" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:338 +msgid "Schedule shows" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:339 +msgid "Manage all library content" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:340 +msgid "Admins can do the following:" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:341 +msgid "Manage preferences" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:342 +msgid "Manage users" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:343 +msgid "Manage watched folders" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:344 +#: airtime_mvc/application/forms/RegisterAirtime.php:116 +#: airtime_mvc/application/forms/SupportSettings.php:98 +msgid "Send support feedback" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:345 +msgid "View system status" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:346 +msgid "Access playout history" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:347 +msgid "View listener stats" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:349 +msgid "Show / hide columns" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:351 +msgid "From {from} to {to}" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:352 +msgid "kbps" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:353 +msgid "yyyy-mm-dd" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:354 +msgid "hh:mm:ss.t" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:355 +msgid "kHz" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:358 +msgid "Su" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:359 +msgid "Mo" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:360 +msgid "Tu" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:361 +msgid "We" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:362 +msgid "Th" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:363 +msgid "Fr" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:364 +msgid "Sa" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:365 +#: airtime_mvc/application/controllers/LocaleController.php:393 +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:3 +msgid "Close" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:367 +msgid "Hour" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:368 +msgid "Minute" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:369 +msgid "Done" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:372 +msgid "Select files" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:373 +#: airtime_mvc/application/controllers/LocaleController.php:374 +msgid "Add files to the upload queue and click the start button." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:375 +#: airtime_mvc/application/controllers/LocaleController.php:376 +msgid "Status" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:377 +msgid "Add Files" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:378 +msgid "Stop Upload" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:379 +msgid "Start upload" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:380 +msgid "Add files" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:381 +#, php-format +msgid "Uploaded %d/%d files" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:382 +msgid "N/A" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:383 +msgid "Drag files here." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:384 +msgid "File extension error." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:385 +msgid "File size error." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:386 +msgid "File count error." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:387 +msgid "Init error." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:388 +msgid "HTTP Error." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:389 +msgid "Security error." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:390 +msgid "Generic error." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:391 +msgid "IO error." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:392 +#, php-format +msgid "File: %s" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:394 +#, php-format +msgid "%d files queued" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:395 +msgid "File: %f, size: %s, max file size: %m" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:396 +msgid "Upload URL might be wrong or doesn't exist" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:397 +msgid "Error: File too large: " +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:398 +msgid "Error: Invalid file extension: " +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:400 +#: airtime_mvc/application/views/scripts/playouthistorytemplate/index.phtml:27 +#: airtime_mvc/application/views/scripts/playouthistorytemplate/index.phtml:58 +msgid "Set Default" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:401 +msgid "Create Entry" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:402 +msgid "Edit History Record" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:403 +#: airtime_mvc/application/views/scripts/form/edit-history-item.phtml:53 +#: airtime_mvc/application/forms/EditHistoryItem.php:57 +msgid "No Show" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:405 +#, php-format +msgid "Copied %s row%s to the clipboard" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:406 +#, php-format +msgid "" +"%sPrint view%sPlease use your browser's print function to print this table. " +"Press escape when finished." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:407 +msgid "New Show" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:408 +msgid "New Log Entry" +msgstr "" + +#: airtime_mvc/application/controllers/ShowbuilderController.php:138 +msgid "Select cursor" +msgstr "" + +#: airtime_mvc/application/controllers/ShowbuilderController.php:139 +msgid "Remove cursor" +msgstr "" + +#: airtime_mvc/application/controllers/ShowbuilderController.php:158 +msgid "show does not exist" +msgstr "" + +#: airtime_mvc/application/controllers/ScheduleController.php:389 +#, php-format +msgid "Rebroadcast of show %s from %s at %s" +msgstr "" + +#: airtime_mvc/application/common/UsabilityHints.php:55 +msgid "Upload some tracks below to add them to your library!" +msgstr "" + +#: airtime_mvc/application/common/UsabilityHints.php:57 +#, php-format +msgid "" +"It looks like you haven't uploaded any audio files yet. %sUpload a file " +"now%s." +msgstr "" + +#: airtime_mvc/application/common/UsabilityHints.php:63 +msgid "Click the 'New Show' button and fill out the required fields." +msgstr "" + +#: airtime_mvc/application/common/UsabilityHints.php:65 +#, php-format +msgid "" +"It looks like you don't have any shows scheduled. %sCreate a show now%s." +msgstr "" + +#: airtime_mvc/application/common/UsabilityHints.php:73 +msgid "" +"To start broadcasting, cancel the current linked show by clicking on it and " +"selecting 'Cancel Show'." +msgstr "" + +#: airtime_mvc/application/common/UsabilityHints.php:75 +#, php-format +msgid "" +"Linked shows need to be filled with tracks before it starts. To start broadcasting cancel the current linked show and schedule an unlinked show.\n" +" %sCreate an unlinked show now%s." +msgstr "" + +#: airtime_mvc/application/common/UsabilityHints.php:80 +msgid "" +"To start broadcasting, click on the current show and select 'Schedule " +"Tracks'" +msgstr "" + +#: airtime_mvc/application/common/UsabilityHints.php:82 +#, php-format +msgid "" +"It looks like the current show needs more tracks. %sAdd tracks to your show " +"now%s." +msgstr "" + +#: airtime_mvc/application/common/UsabilityHints.php:89 +msgid "Click on the show starting next and select 'Schedule Tracks'" +msgstr "" + +#: airtime_mvc/application/common/UsabilityHints.php:91 +#, php-format +msgid "It looks like the next show is empty. %sAdd tracks to your show now%s." +msgstr "" + +#: airtime_mvc/application/common/DateHelper.php:213 +#, php-format +msgid "The year %s must be within the range of 1753 - 9999" +msgstr "" + +#: airtime_mvc/application/common/DateHelper.php:216 +#, php-format +msgid "%s-%s-%s is not a valid date" +msgstr "" + +#: airtime_mvc/application/common/DateHelper.php:240 +#, php-format +msgid "%s:%s:%s is not a valid time" +msgstr "" + +#: airtime_mvc/application/layouts/scripts/livestream.phtml:9 +#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:2 +msgid "Live stream" +msgstr "" + +#: airtime_mvc/application/layouts/scripts/layout.phtml:63 +msgid "Smart Block" +msgstr "" + +#: airtime_mvc/application/layouts/scripts/layout.phtml:66 +msgid "Webstream" +msgstr "" + +#: airtime_mvc/application/layouts/scripts/layout.phtml:71 +msgid "Upload" +msgstr "" + +#: airtime_mvc/application/layouts/scripts/layout.phtml:76 +#: airtime_mvc/application/views/scripts/showbuilder/index.phtml:5 +#: airtime_mvc/application/views/scripts/showbuilder/builderDialog.phtml:33 +msgid "Dashboard" +msgstr "" + +#: airtime_mvc/application/layouts/scripts/layout.phtml:84 +#: airtime_mvc/application/views/scripts/showbuilder/builderDialog.phtml:25 +msgid "Webstreams" +msgstr "" + +#: airtime_mvc/application/layouts/scripts/layout.phtml:135 +#: airtime_mvc/application/layouts/scripts/layout.phtml:161 +msgid "Play" +msgstr "" + +#: airtime_mvc/application/layouts/scripts/layout.phtml:136 +#: airtime_mvc/application/layouts/scripts/layout.phtml:162 +msgid "Stop" +msgstr "" + +#: airtime_mvc/application/layouts/scripts/layout.phtml:142 +msgid "Set Cue In" +msgstr "" + +#: airtime_mvc/application/layouts/scripts/layout.phtml:149 +msgid "Set Cue Out" +msgstr "" + +#: airtime_mvc/application/layouts/scripts/layout.phtml:166 +msgid "Cursor" +msgstr "" + +#: airtime_mvc/application/layouts/scripts/login.phtml:24 +#, php-format +msgid "" +"%1$s copyright © %2$s All rights reserved.
Maintained and " +"distributed under the %3$s by %4$s" +msgstr "" + +#: airtime_mvc/application/views/scripts/plupload/index.phtml:34 +msgid "Drop files here or click to browse your computer." +msgstr "" + +#: airtime_mvc/application/views/scripts/plupload/index.phtml:66 +msgid "Failed" +msgstr "" + +#: airtime_mvc/application/views/scripts/plupload/index.phtml:67 +msgid "Pending" +msgstr "" + +#: airtime_mvc/application/views/scripts/plupload/index.phtml:70 +msgid "Recent Uploads" +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:3 +msgid "Share" +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:64 +msgid "Select stream:" +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:90 +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:60 +msgid "mute" +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:91 +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:63 +msgid "unmute" +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/about.phtml:2 +msgid "About" +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/about.phtml:9 +#, php-format +msgid "" +"%1$s %2$s, the open radio software for scheduling and remote station " +"management." +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/about.phtml:22 +#, php-format +msgid "%1$s %2$s is distributed under the %3$s" +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:2 +#: airtime_mvc/application/views/scripts/form/setup-lang-timezone.phtml:1 +#, php-format +msgid "Welcome to %s!" +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:3 +#, php-format +msgid "Here's how you can get started using %s to automate your broadcasts: " +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:6 +msgid "Upload audio tracks" +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:7 +msgid "" +"Click the 'Upload' button in the left corner to upload tracks to your " +"library." +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:8 +msgid "Schedule a show" +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:9 +msgid "" +"Click on 'Calendar' in the navigation bar on the left. From there click the " +"'+ New Show' button and fill out the required fields." +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:10 +msgid "Add tracks to your show" +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:11 +msgid "" +"Click on your show in the calendar and select 'Schedule Show'. In the popup " +"window drag tracks into your show." +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:16 +msgid "Now you're good to go!" +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:19 +#, php-format +msgid "For more detailed help, read the %suser manual%s." +msgstr "" + +#: airtime_mvc/application/views/scripts/embeddablewidgets/schedule.phtml:5 +#: airtime_mvc/application/configs/navigation.php:40 +msgid "Weekly Schedule" +msgstr "" + +#: airtime_mvc/application/views/scripts/embeddablewidgets/schedule.phtml:14 +#: airtime_mvc/application/forms/Player.php:77 +msgid "Preview:" +msgstr "" + +#: airtime_mvc/application/views/scripts/embeddablewidgets/player.phtml:6 +#: airtime_mvc/application/configs/navigation.php:34 +msgid "Player" +msgstr "" + +#: airtime_mvc/application/views/scripts/playouthistory/index.phtml:2 +#: airtime_mvc/application/configs/navigation.php:97 +msgid "Playout History" +msgstr "" + +#: airtime_mvc/application/views/scripts/playouthistory/index.phtml:8 +msgid "Log Sheet" +msgstr "" + +#: airtime_mvc/application/views/scripts/playouthistory/index.phtml:9 +msgid "File Summary" +msgstr "" + +#: airtime_mvc/application/views/scripts/playouthistory/index.phtml:11 +msgid "Show Summary" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/update.phtml:56 +msgid "Expand Static Block" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/update.phtml:61 +msgid "Expand Dynamic Block" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/update.phtml:138 +msgid "" +"Choose some search criteria above and click Generate to create this " +"playlist." +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/update.phtml:140 +msgid "" +"A track list will be generated when you schedule this smart block into a " +"show." +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/update.phtml:143 +msgid "Drag tracks here from your library to add them to the playlist" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:10 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:10 +#: airtime_mvc/application/views/scripts/library/edit-file-md.phtml:8 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:8 +msgid "Editing " +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:20 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:20 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:33 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:146 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:17 +#: airtime_mvc/application/forms/AddShowWhat.php:26 +msgid "Name:" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:25 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:28 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:40 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:149 +#: airtime_mvc/application/forms/AddShowWhat.php:54 +msgid "Description:" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:37 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:43 +#: airtime_mvc/application/forms/AddShowWhen.php:89 +msgid "Duration:" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:40 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:46 +msgid "Toggle Details" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:44 +msgid "Shuffle playlist" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:44 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:356 +msgid "Shuffle" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:48 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:56 +msgid "Playlist crossfade" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:52 +msgid "Empty playlist content" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:52 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:60 +msgid "Clear" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:60 +#: airtime_mvc/application/views/scripts/playlist/set-fade.phtml:19 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:68 +msgid "Fade in: " +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:63 +#: airtime_mvc/application/views/scripts/playlist/set-fade.phtml:6 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:71 +msgid "Fade out: " +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:78 +msgid "Save playlist" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:86 +msgid "No open playlist" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/set-fade.phtml:3 +#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:3 +msgid "Show Waveform" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/set-fade.phtml:6 +#: airtime_mvc/application/views/scripts/playlist/set-fade.phtml:19 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:68 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:71 +msgid "(ss.t)" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:60 +msgid "Remove all content from this smart block" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:92 +msgid "No smart block currently open" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:5 +msgid "Cue In: " +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:5 +#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:12 +msgid "(hh:mm:ss.t)" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:12 +msgid "Cue Out: " +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:19 +msgid "Original Length:" +msgstr "" + +#: airtime_mvc/application/views/scripts/preference/index.phtml:2 +#: airtime_mvc/application/configs/navigation.php:56 +msgid "General" +msgstr "" + +#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:2 +msgid "Stream Settings" +msgstr "" + +#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:11 +msgid "Global" +msgstr "" + +#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:88 +msgid "dB" +msgstr "" + +#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:106 +msgid "Output Streams" +msgstr "" + +#: airtime_mvc/application/views/scripts/login/index.phtml:3 +#: airtime_mvc/application/forms/Login.php:83 +msgid "Login" +msgstr "" + +#: airtime_mvc/application/views/scripts/login/index.phtml:7 +#, php-format +msgid "" +"Welcome to the %s demo! You can log in using the username 'admin' and the " +"password 'admin'." +msgstr "" + +#: airtime_mvc/application/views/scripts/login/password-restore-after.phtml:3 +msgid "Email Sent!" +msgstr "" + +#: airtime_mvc/application/views/scripts/login/password-restore-after.phtml:6 +msgid "" +"A password reset link has been sent to your email address. Please check your" +" email and follow the instructions inside to reset your password. If you " +"don't see the email, please check your spam folder!" +msgstr "" + +#: airtime_mvc/application/views/scripts/login/password-restore-after.phtml:11 +#: airtime_mvc/application/views/scripts/form/password-restore.phtml:48 +msgid "Back" +msgstr "" + +#: airtime_mvc/application/views/scripts/login/password-restore.phtml:3 +msgid "Password Reset" +msgstr "" + +#: airtime_mvc/application/views/scripts/login/password-change.phtml:3 +msgid "New password" +msgstr "" + +#: airtime_mvc/application/views/scripts/login/password-change.phtml:6 +msgid "Please enter and confirm your new password in the fields below." +msgstr "" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:3 +msgid "Manage Users" +msgstr "" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:10 +msgid "New User" +msgstr "" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:17 +msgid "id" +msgstr "" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:18 +#: airtime_mvc/application/forms/PasswordRestore.php:25 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:164 +msgid "Username" +msgstr "" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:19 +msgid "First Name" +msgstr "" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:20 +msgid "Last Name" +msgstr "" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:21 +msgid "User Type" +msgstr "" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:30 +#, php-format +msgid "" +"Super Admin details can be changed in your Billing " +"Settings." +msgstr "" + +#: airtime_mvc/application/views/scripts/form/showbuilder.phtml:7 +msgid "Find Shows" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/edit-history-item.phtml:45 +msgid "Choose Show Instance" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/edit-history-item.phtml:56 +msgid "Find" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/edit-user.phtml:1 +#: airtime_mvc/application/configs/navigation.php:61 +msgid "My Profile" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/edit-user.phtml:7 +#, php-format +msgid "" +"Note: Since you're the station owner, your account information can be" +" edited in Billing Settings instead." +msgstr "" + +#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast.phtml:4 +msgid "Repeat Days:" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast.phtml:18 +#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast-absolute.phtml:18 +#: airtime_mvc/application/forms/GeneralPreferences.php:53 +#: airtime_mvc/application/forms/AddShowStyle.php:64 +msgid "Remove" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast.phtml:41 +#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast-absolute.phtml:40 +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:28 +#: airtime_mvc/application/views/scripts/playouthistorytemplate/template-contents.phtml:75 +msgid "Add" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/add-show-live-stream.phtml:10 +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:25 +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:39 +msgid "Show Source" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/add-show-live-stream.phtml:12 +msgid "" +"DJs can use these settings to connect with compatible software and broadcast" +" live during this show. Assign a DJ below." +msgstr "" + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:1 +msgid "Register Airtime" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:6 +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:5 +#, php-format +msgid "" +"Help improve %s by letting us know how you're using it. This information " +"will be collected regularly in order to enhance your user experience.
Click the box below and we'll make sure the features you use are " +"constantly improving." +msgstr "" + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:29 +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:29 +#, php-format +msgid "Click the box below to promote your station on %s." +msgstr "" + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:49 +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:51 +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:41 +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:55 +msgid "(Required)" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:67 +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:81 +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:66 +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:81 +msgid "(for verification purposes only, will not be published)" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:152 +#: airtime_mvc/application/forms/GeneralPreferences.php:43 +msgid "Note: Anything larger than 600x600 will be resized." +msgstr "" + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:166 +msgid "Show me what I am sending " +msgstr "" + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:180 +msgid "Terms and Conditions" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast-absolute.phtml:4 +msgid "Choose Days:" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:66 +msgid "Search Criteria:" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:68 +msgid "New Criteria" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:77 +msgid "or" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:78 +msgid "and" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:99 +msgid "New Modifier" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:102 +msgid " to " +msgstr "" + +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:130 +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:143 +msgid "files meet the criteria" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:137 +msgid "file meets the criteria" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/daterange.phtml:6 +#: airtime_mvc/application/views/scripts/form/daterange.phtml:7 +msgid "Filter History" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/login.phtml:41 +msgid "Forgot your password?" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:46 +msgid "" +"(In order to promote your station, 'Send support feedback' must be enabled)." +msgstr "" + +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:4 +msgid "Stream " +msgstr "" + +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:84 +msgid "Additional Options" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:144 +msgid "" +"The following info will be displayed to listeners in their media player:" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:177 +msgid "(Your radio station website)" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:215 +msgid "Stream URL: " +msgstr "" + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:9 +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:27 +msgid "Choose folder" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:10 +msgid "Set" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:19 +msgid "Current Import Folder:" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:43 +#, php-format +msgid "" +"Rescan watched directory (This is useful if it is network mount and may be " +"out of sync with %s)" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:44 +msgid "Remove watched directory" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:49 +msgid "You are not watching any media folders." +msgstr "" + +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:1 +msgid "Live Broadcasting" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:11 +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:30 +msgid "Master Source" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:13 +msgid "" +"Use these settings in your broadcasting software to stream live at any time." +msgstr "" + +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:27 +msgid "" +"DJs can use these settings in their broadcasting software to broadcast live " +"only during shows assigned to them." +msgstr "" + +#: airtime_mvc/application/views/scripts/form/preferences.phtml:6 +msgid "TuneIn Settings" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/preferences.phtml:11 +msgid "SoundCloud Settings" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/preferences.phtml:17 +msgid "Dangerous Options" +msgstr "" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:6 +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:43 +msgid "Add this show" +msgstr "" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:6 +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:43 +msgid "Update show" +msgstr "" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:10 +msgid "What" +msgstr "" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:14 +msgid "When" +msgstr "" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:28 +msgid "Live Stream Input" +msgstr "" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:32 +msgid "Who" +msgstr "" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:36 +msgid "Style" +msgstr "" + +#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:186 +msgid "Disk Space" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/library.phtml:3 +msgid "File import in progress..." +msgstr "" + +#: airtime_mvc/application/views/scripts/library/library.phtml:10 +#: airtime_mvc/application/views/scripts/widgets/lib-table.phtml:4 +msgid "Advanced Search Options" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:9 +#: airtime_mvc/application/forms/EditAudioMD.php:24 +#: airtime_mvc/application/forms/Player.php:15 +msgid "Title:" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:10 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:34 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:148 +#: airtime_mvc/application/forms/EditAudioMD.php:34 +msgid "Creator:" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:11 +#: airtime_mvc/application/forms/EditAudioMD.php:44 +msgid "Album:" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:12 +msgid "Track:" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:13 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:36 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:38 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:147 +msgid "Length:" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:14 +msgid "Sample Rate:" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:15 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:74 +msgid "Bit Rate:" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:16 +#: airtime_mvc/application/forms/EditAudioMD.php:115 +msgid "Mood:" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:17 +#: airtime_mvc/application/forms/AddShowWhat.php:45 +#: airtime_mvc/application/forms/EditAudioMD.php:62 +msgid "Genre:" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:18 +#: airtime_mvc/application/forms/EditAudioMD.php:72 +msgid "Year:" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:19 +#: airtime_mvc/application/forms/EditAudioMD.php:85 +msgid "Label:" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:20 +#: airtime_mvc/application/forms/EditAudioMD.php:125 +msgid "BPM:" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:21 +#: airtime_mvc/application/forms/EditAudioMD.php:95 +msgid "Composer:" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:22 +#: airtime_mvc/application/forms/EditAudioMD.php:105 +msgid "Conductor:" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:23 +#: airtime_mvc/application/forms/EditAudioMD.php:135 +msgid "Copyright:" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:24 +msgid "Isrc Number:" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:25 +#: airtime_mvc/application/forms/EditAudioMD.php:155 +msgid "Website:" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:26 +#: airtime_mvc/application/forms/EditAudioMD.php:165 +#: airtime_mvc/application/forms/EditUser.php:119 +#: airtime_mvc/application/forms/Login.php:68 +msgid "Language:" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:27 +msgid "File Path:" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:45 +msgid "Web Stream" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:46 +msgid "Dynamic Smart Block" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:47 +msgid "Static Smart Block" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:48 +msgid "Audio Track" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:63 +msgid "Playlist Contents: " +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:65 +msgid "Static Smart Block Contents: " +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:104 +msgid "Dynamic Smart Block Criteria: " +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:137 +msgid "Limit to " +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:150 +#: airtime_mvc/application/forms/AddShowWhat.php:36 +msgid "URL:" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/edit-file-md.phtml:6 +msgid "Viewing " +msgstr "" + +#: airtime_mvc/application/views/scripts/listenerstat/index.phtml:2 +msgid "Listeners" +msgstr "" + +#: airtime_mvc/application/views/scripts/listenerstat/index.phtml:10 +msgid "Stream Data Collection Status" +msgstr "" + +#: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:3 +msgid "Your trial expires in" +msgstr "" + +#: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:6 +#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:15 +msgid "days" +msgstr "" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:4 +msgid "Previous:" +msgstr "" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:11 +msgid "Next:" +msgstr "" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:25 +msgid "Source Streams" +msgstr "" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:49 +msgid "ON AIR" +msgstr "" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:50 +msgid "Listen" +msgstr "" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:61 +msgid "Logout" +msgstr "" + +#: airtime_mvc/application/views/scripts/playouthistorytemplate/index.phtml:3 +msgid "Playout History Templates" +msgstr "" + +#: airtime_mvc/application/views/scripts/playouthistorytemplate/index.phtml:5 +msgid "Log Sheet Templates" +msgstr "" + +#: airtime_mvc/application/views/scripts/playouthistorytemplate/index.phtml:6 +msgid "New Log Sheet Template" +msgstr "" + +#: airtime_mvc/application/views/scripts/playouthistorytemplate/index.phtml:9 +msgid "No Log Sheet Templates" +msgstr "" + +#: airtime_mvc/application/views/scripts/playouthistorytemplate/index.phtml:36 +msgid "File Summary Templates" +msgstr "" + +#: airtime_mvc/application/views/scripts/playouthistorytemplate/index.phtml:37 +msgid "New File Summary Template" +msgstr "" + +#: airtime_mvc/application/views/scripts/playouthistorytemplate/index.phtml:40 +msgid "No File Summary Templates" +msgstr "" + +#: airtime_mvc/application/views/scripts/playouthistorytemplate/template-contents.phtml:2 +msgid "Creating File Summary Template" +msgstr "" + +#: airtime_mvc/application/views/scripts/playouthistorytemplate/template-contents.phtml:4 +msgid "Creating Log Sheet Template" +msgstr "" + +#: airtime_mvc/application/views/scripts/playouthistorytemplate/template-contents.phtml:9 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:142 +msgid "Name" +msgstr "" + +#: airtime_mvc/application/views/scripts/playouthistorytemplate/template-contents.phtml:46 +msgid "Add more elements" +msgstr "" + +#: airtime_mvc/application/views/scripts/playouthistorytemplate/template-contents.phtml:67 +msgid "Add New Field" +msgstr "" + +#: airtime_mvc/application/views/scripts/playouthistorytemplate/template-contents.phtml:83 +msgid "Set Default Template" +msgstr "" + +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:24 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:148 +msgid "Description" +msgstr "" + +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:30 +msgid "Stream URL:" +msgstr "" + +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:35 +msgid "Default Length:" +msgstr "" + +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:53 +msgid "No webstream" +msgstr "" + +#: airtime_mvc/application/views/scripts/error/error-403.phtml:6 +#: airtime_mvc/application/views/scripts/error/error-500.phtml:6 +#: airtime_mvc/application/views/scripts/error/error-400.phtml:6 +#: airtime_mvc/application/views/scripts/error/error-404.phtml:6 +#: airtime_mvc/application/views/scripts/error/error.phtml:6 +msgid "An error has occurred." +msgstr "" + +#: airtime_mvc/application/views/scripts/error/error-403.phtml:11 +msgid "Access Denied!" +msgstr "" + +#: airtime_mvc/application/views/scripts/error/error-403.phtml:12 +msgid "You do not have permission to access this page!" +msgstr "" + +#: airtime_mvc/application/views/scripts/error/error-403.phtml:14 +#: airtime_mvc/application/views/scripts/error/error-500.phtml:14 +#: airtime_mvc/application/views/scripts/error/error-400.phtml:14 +#: airtime_mvc/application/views/scripts/error/error-404.phtml:14 +#: airtime_mvc/application/views/scripts/error/error.phtml:14 +#: airtime_mvc/application/configs/navigation.php:143 +msgid "Help" +msgstr "" + +#: airtime_mvc/application/views/scripts/error/error-500.phtml:11 +msgid "Oops!" +msgstr "" + +#: airtime_mvc/application/views/scripts/error/error-500.phtml:12 +msgid "Something went wrong!" +msgstr "" + +#: airtime_mvc/application/views/scripts/error/error-400.phtml:11 +msgid "Bad Request!" +msgstr "" + +#: airtime_mvc/application/views/scripts/error/error-400.phtml:12 +msgid "The requested action is not supported!" +msgstr "" + +#: airtime_mvc/application/views/scripts/error/error-404.phtml:11 +msgid "Page not found!" +msgstr "" + +#: airtime_mvc/application/views/scripts/error/error-404.phtml:12 +msgid "We couldn't find the page you were looking for." +msgstr "" + +#: airtime_mvc/application/views/scripts/error/error.phtml:12 +msgid "Looks like the page you were looking for doesn't exist!" +msgstr "" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:23 +msgid "previous" +msgstr "" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:28 +msgid "play" +msgstr "" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:32 +msgid "pause" +msgstr "" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:37 +msgid "next" +msgstr "" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:42 +msgid "stop" +msgstr "" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:69 +msgid "max volume" +msgstr "" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:79 +msgid "Update Required" +msgstr "" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:80 +#, php-format +msgid "" +"To play the media you will need to either update your browser to a recent " +"version or update your %sFlash plugin%s." +msgstr "" + +#: airtime_mvc/application/forms/BillingUpgradeDowngrade.php:20 +msgid "Plan type:" +msgstr "" + +#: airtime_mvc/application/forms/BillingUpgradeDowngrade.php:32 +msgid "Billing cycle:" +msgstr "" + +#: airtime_mvc/application/forms/BillingUpgradeDowngrade.php:40 +msgid "Payment method:" +msgstr "" + +#: airtime_mvc/application/forms/BillingUpgradeDowngrade.php:43 +msgid "PayPal" +msgstr "" + +#: airtime_mvc/application/forms/BillingUpgradeDowngrade.php:44 +msgid "Credit Card via 2Checkout" +msgstr "" + +#: airtime_mvc/application/forms/DateRange.php:16 +#: airtime_mvc/application/forms/ShowBuilder.php:18 +msgid "Date Start:" +msgstr "" + +#: airtime_mvc/application/forms/DateRange.php:35 +#: airtime_mvc/application/forms/DateRange.php:63 +#: airtime_mvc/application/forms/ShowBuilder.php:37 +#: airtime_mvc/application/forms/ShowBuilder.php:65 +#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:26 +#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:31 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:102 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:121 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:136 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:158 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:168 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:177 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:186 +msgid "Invalid character entered" +msgstr "" + +#: airtime_mvc/application/forms/DateRange.php:44 +#: airtime_mvc/application/forms/ShowBuilder.php:46 +#: airtime_mvc/application/forms/AddShowRepeats.php:56 +msgid "Date End:" +msgstr "" + +#: airtime_mvc/application/forms/ShowBuilder.php:72 +#: airtime_mvc/application/forms/ShowBuilder.php:88 +msgid "Filter by Show" +msgstr "" + +#: airtime_mvc/application/forms/ShowBuilder.php:80 +msgid "All My Shows:" +msgstr "" + +#: airtime_mvc/application/forms/AddShowWho.php:10 +msgid "Search Users:" +msgstr "" + +#: airtime_mvc/application/forms/AddShowWho.php:24 +msgid "DJs:" +msgstr "" + +#: airtime_mvc/application/forms/RegisterAirtime.php:30 +#: airtime_mvc/application/forms/GeneralPreferences.php:25 +#: airtime_mvc/application/forms/SupportSettings.php:18 +msgid "Station Name" +msgstr "" + +#: airtime_mvc/application/forms/RegisterAirtime.php:39 +#: airtime_mvc/application/forms/SupportSettings.php:31 +msgid "Phone:" +msgstr "" + +#: airtime_mvc/application/forms/RegisterAirtime.php:51 +#: airtime_mvc/application/forms/AddUser.php:67 +#: airtime_mvc/application/forms/EditUser.php:83 +#: airtime_mvc/application/forms/SupportSettings.php:43 +msgid "Email:" +msgstr "" + +#: airtime_mvc/application/forms/RegisterAirtime.php:62 +#: airtime_mvc/application/forms/SupportSettings.php:54 +msgid "Station Web Site:" +msgstr "" + +#: airtime_mvc/application/forms/RegisterAirtime.php:73 +#: airtime_mvc/application/forms/SupportSettings.php:65 +msgid "Country:" +msgstr "" + +#: airtime_mvc/application/forms/RegisterAirtime.php:84 +#: airtime_mvc/application/forms/SupportSettings.php:76 +msgid "City:" +msgstr "" + +#: airtime_mvc/application/forms/RegisterAirtime.php:96 +#: airtime_mvc/application/forms/SupportSettings.php:88 +msgid "Station Description:" +msgstr "" + +#: airtime_mvc/application/forms/RegisterAirtime.php:106 +#: airtime_mvc/application/forms/GeneralPreferences.php:42 +msgid "Station Logo:" +msgstr "" + +#: airtime_mvc/application/forms/RegisterAirtime.php:126 +#: airtime_mvc/application/forms/SupportSettings.php:108 +#, php-format +msgid "Promote my station on %s" +msgstr "" + +#: airtime_mvc/application/forms/RegisterAirtime.php:151 +#: airtime_mvc/application/forms/SupportSettings.php:120 +#, php-format +msgid "By checking this box, I agree to %s's %sprivacy policy%s." +msgstr "" + +#: airtime_mvc/application/forms/RegisterAirtime.php:169 +#: airtime_mvc/application/forms/SupportSettings.php:143 +msgid "You have to agree to privacy policy." +msgstr "" + +#: airtime_mvc/application/forms/AddShowRR.php:10 +msgid "Record from Line In?" +msgstr "" + +#: airtime_mvc/application/forms/AddShowRR.php:16 +msgid "Rebroadcast?" +msgstr "" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:8 +#: airtime_mvc/application/forms/customvalidators/ConditionalNotEmpty.php:26 +msgid "Value is required and can't be empty" +msgstr "" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:19 +msgid "" +"'%value%' is no valid email address in the basic format local-part@hostname" +msgstr "" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:33 +msgid "'%value%' does not fit the date format '%format%'" +msgstr "" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:59 +msgid "'%value%' is less than %min% characters long" +msgstr "" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:64 +msgid "'%value%' is more than %max% characters long" +msgstr "" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:76 +msgid "'%value%' is not between '%min%' and '%max%', inclusively" +msgstr "" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:89 +msgid "Passwords do not match" +msgstr "" + +#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:66 +#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:71 +msgid "Day must be specified" +msgstr "" + +#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:71 +#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:76 +msgid "Time must be specified" +msgstr "" + +#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:94 +#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:103 +msgid "Must wait at least 1 hour to rebroadcast" +msgstr "" + +#: airtime_mvc/application/forms/PasswordRestore.php:14 +msgid "Email" +msgstr "" + +#: airtime_mvc/application/forms/PasswordRestore.php:36 +msgid "Reset password" +msgstr "" + +#: airtime_mvc/application/forms/AddShowWhat.php:30 +msgid "Untitled Show" +msgstr "" + +#: airtime_mvc/application/forms/AddShowWhat.php:69 +msgid "Instance Description:" +msgstr "" + +#: airtime_mvc/application/forms/DangerousPreferences.php:12 +msgid "Delete All Tracks in Library" +msgstr "" + +#: airtime_mvc/application/forms/EditAudioMD.php:145 +msgid "ISRC Number:" +msgstr "" + +#: airtime_mvc/application/forms/EditAudioMD.php:176 +msgid "OK" +msgstr "" + +#: airtime_mvc/application/forms/GeneralPreferences.php:33 +msgid "Station Description" +msgstr "" + +#: airtime_mvc/application/forms/GeneralPreferences.php:62 +msgid "Default Crossfade Duration (s):" +msgstr "" + +#: airtime_mvc/application/forms/GeneralPreferences.php:68 +#: airtime_mvc/application/forms/GeneralPreferences.php:82 +#: airtime_mvc/application/forms/GeneralPreferences.php:96 +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:34 +msgid "Please enter a time in seconds (eg. 0.5)" +msgstr "" + +#: airtime_mvc/application/forms/GeneralPreferences.php:76 +msgid "Default Fade In (s):" +msgstr "" + +#: airtime_mvc/application/forms/GeneralPreferences.php:90 +msgid "Default Fade Out (s):" +msgstr "" + +#: airtime_mvc/application/forms/GeneralPreferences.php:102 +msgid "Public Airtime API" +msgstr "" + +#: airtime_mvc/application/forms/GeneralPreferences.php:103 +msgid "Required for embeddable schedule widget." +msgstr "" + +#: airtime_mvc/application/forms/GeneralPreferences.php:105 +msgid "Disabled" +msgstr "" + +#: airtime_mvc/application/forms/GeneralPreferences.php:106 +msgid "Enabled" +msgstr "" + +#: airtime_mvc/application/forms/GeneralPreferences.php:109 +msgid "" +"Enabling this feature will allow Airtime to provide schedule data\n" +" to external widgets that can be embedded in your website." +msgstr "" + +#: airtime_mvc/application/forms/GeneralPreferences.php:120 +msgid "Default Language" +msgstr "" + +#: airtime_mvc/application/forms/GeneralPreferences.php:127 +#: airtime_mvc/application/forms/SetupLanguageTimezone.php:23 +msgid "Station Timezone" +msgstr "" + +#: airtime_mvc/application/forms/GeneralPreferences.php:134 +msgid "Week Starts On" +msgstr "" + +#: airtime_mvc/application/forms/GeneralPreferences.php:150 +msgid "Display login button on your Radio Page?" +msgstr "" + +#: airtime_mvc/application/forms/AddUser.php:29 +#: airtime_mvc/application/forms/EditUser.php:37 +#: airtime_mvc/application/forms/Login.php:41 +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:42 +msgid "Username:" +msgstr "" + +#: airtime_mvc/application/forms/AddUser.php:38 +#: airtime_mvc/application/forms/EditUser.php:48 +#: airtime_mvc/application/forms/Login.php:54 +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:58 +msgid "Password:" +msgstr "" + +#: airtime_mvc/application/forms/AddUser.php:46 +#: airtime_mvc/application/forms/EditUser.php:57 +msgid "Verify Password:" +msgstr "" + +#: airtime_mvc/application/forms/AddUser.php:55 +#: airtime_mvc/application/forms/EditUser.php:67 +msgid "Firstname:" +msgstr "" + +#: airtime_mvc/application/forms/AddUser.php:61 +#: airtime_mvc/application/forms/EditUser.php:75 +msgid "Lastname:" +msgstr "" + +#: airtime_mvc/application/forms/AddUser.php:76 +#: airtime_mvc/application/forms/EditUser.php:94 +msgid "Mobile Phone:" +msgstr "" + +#: airtime_mvc/application/forms/AddUser.php:82 +#: airtime_mvc/application/forms/EditUser.php:102 +msgid "Skype:" +msgstr "" + +#: airtime_mvc/application/forms/AddUser.php:88 +#: airtime_mvc/application/forms/EditUser.php:110 +msgid "Jabber:" +msgstr "" + +#: airtime_mvc/application/forms/AddUser.php:95 +msgid "User Type:" +msgstr "" + +#: airtime_mvc/application/forms/AddUser.php:120 +#: airtime_mvc/application/forms/EditUser.php:155 +msgid "Login name is not unique." +msgstr "" + +#: airtime_mvc/application/forms/WatchedDirPreferences.php:14 +msgid "Import Folder:" +msgstr "" + +#: airtime_mvc/application/forms/WatchedDirPreferences.php:25 +msgid "Watched Folders:" +msgstr "" + +#: airtime_mvc/application/forms/WatchedDirPreferences.php:40 +msgid "Not a valid Directory" +msgstr "" + +#: airtime_mvc/application/forms/BillingClient.php:126 +msgid "What is the name of your favorite childhood friend?" +msgstr "" + +#: airtime_mvc/application/forms/BillingClient.php:127 +msgid "What school did you attend for sixth grade?" +msgstr "" + +#: airtime_mvc/application/forms/BillingClient.php:128 +msgid "In what city did you meet your spouse/significant other?" +msgstr "" + +#: airtime_mvc/application/forms/BillingClient.php:129 +msgid "What street did you live on in third grade?" +msgstr "" + +#: airtime_mvc/application/forms/BillingClient.php:130 +msgid "What is the first name of the boy or girl that you first kissed?" +msgstr "" + +#: airtime_mvc/application/forms/BillingClient.php:131 +msgid "In what city or town was your first job?" +msgstr "" + +#: airtime_mvc/application/forms/SoundCloudPreferences.php:14 +msgid "Default License:" +msgstr "" + +#: airtime_mvc/application/forms/SoundCloudPreferences.php:17 +msgid "All rights are reserved" +msgstr "" + +#: airtime_mvc/application/forms/SoundCloudPreferences.php:18 +msgid "The work is in the public domain" +msgstr "" + +#: airtime_mvc/application/forms/SoundCloudPreferences.php:19 +msgid "Creative Commons Attribution" +msgstr "" + +#: airtime_mvc/application/forms/SoundCloudPreferences.php:20 +msgid "Creative Commons Attribution Noncommercial" +msgstr "" + +#: airtime_mvc/application/forms/SoundCloudPreferences.php:21 +msgid "Creative Commons Attribution No Derivative Works" +msgstr "" + +#: airtime_mvc/application/forms/SoundCloudPreferences.php:22 +msgid "Creative Commons Attribution Share Alike" +msgstr "" + +#: airtime_mvc/application/forms/SoundCloudPreferences.php:23 +msgid "Creative Commons Attribution Noncommercial Non Derivate Works" +msgstr "" + +#: airtime_mvc/application/forms/SoundCloudPreferences.php:24 +msgid "Creative Commons Attribution Noncommercial Share Alike" +msgstr "" + +#: airtime_mvc/application/forms/SoundCloudPreferences.php:31 +msgid "Default Sharing Type:" +msgstr "" + +#: airtime_mvc/application/forms/SoundCloudPreferences.php:34 +msgid "Public" +msgstr "" + +#: airtime_mvc/application/forms/SoundCloudPreferences.php:35 +msgid "Private" +msgstr "" + +#: airtime_mvc/application/forms/EditUser.php:129 +msgid "Interface Timezone:" +msgstr "" + +#: airtime_mvc/application/forms/Player.php:14 +msgid "Now Playing" +msgstr "" + +#: airtime_mvc/application/forms/Player.php:25 +msgid "Select Stream:" +msgstr "" + +#: airtime_mvc/application/forms/Player.php:28 +msgid "Auto detect the most appropriate stream to use." +msgstr "" + +#: airtime_mvc/application/forms/Player.php:29 +msgid "Select a stream:" +msgstr "" + +#: airtime_mvc/application/forms/Player.php:41 +msgid " - Mobile friendly" +msgstr "" + +#: airtime_mvc/application/forms/Player.php:45 +msgid " - The player does not support Opus streams." +msgstr "" + +#: airtime_mvc/application/forms/Player.php:71 +msgid "Embeddable code:" +msgstr "" + +#: airtime_mvc/application/forms/Player.php:72 +msgid "" +"Copy this code and paste it into your website's HTML to embed the player in " +"your site." +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:49 +#: airtime_mvc/application/models/Block.php:1351 +msgid "Select criteria" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:51 +#: airtime_mvc/application/models/Block.php:1353 +msgid "Bit Rate (Kbps)" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:71 +#: airtime_mvc/application/models/Block.php:1374 +msgid "Sample Rate (kHz)" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:119 +msgid "hours" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:120 +msgid "minutes" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:121 +#: airtime_mvc/application/models/Block.php:333 +msgid "items" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:130 +msgid "Randomly" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:131 +msgid "Newest" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:132 +msgid "Oldest" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:179 +msgid "Type:" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:182 +msgid "Static" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:183 +msgid "Dynamic" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:297 +msgid "Allow Repeated Tracks:" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:306 +msgid "Sort Tracks:" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:324 +msgid "Limit to:" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:346 +msgid "Generate playlist content and save criteria" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:348 +msgid "Generate" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:354 +msgid "Shuffle playlist content" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:526 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:538 +msgid "Limit cannot be empty or smaller than 0" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:531 +msgid "Limit cannot be more than 24 hrs" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:541 +msgid "The value should be an integer" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:544 +msgid "500 is the max item limit value you can set" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:555 +msgid "You must select Criteria and Modifier" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:562 +msgid "'Length' should be in '00:00:00' format" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:567 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:580 +msgid "" +"The value should be in timestamp format (e.g. 0000-00-00 or 0000-00-00 " +"00:00:00)" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:594 +msgid "The value has to be numeric" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:599 +msgid "The value should be less then 2147483648" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:604 +#, php-format +msgid "The value should be less than %s characters" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:611 +msgid "Value cannot be empty" +msgstr "" + +#: airtime_mvc/application/forms/StreamSetting.php:26 +msgid "Icecast Vorbis Metadata" +msgstr "" + +#: airtime_mvc/application/forms/StreamSetting.php:36 +msgid "Stream Label:" +msgstr "" + +#: airtime_mvc/application/forms/StreamSetting.php:37 +msgid "Artist - Title" +msgstr "" + +#: airtime_mvc/application/forms/StreamSetting.php:38 +msgid "Show - Artist - Title" +msgstr "" + +#: airtime_mvc/application/forms/StreamSetting.php:39 +msgid "Station name - Show name" +msgstr "" + +#: airtime_mvc/application/forms/StreamSetting.php:45 +msgid "Off Air Metadata" +msgstr "" + +#: airtime_mvc/application/forms/StreamSetting.php:51 +msgid "Enable Replay Gain" +msgstr "" + +#: airtime_mvc/application/forms/StreamSetting.php:57 +msgid "Replay Gain Modifier" +msgstr "" + +#: airtime_mvc/application/forms/StreamSetting.php:65 +msgid "Streaming Server:" +msgstr "" + +#: airtime_mvc/application/forms/StreamSetting.php:66 +msgid "Airtime Pro Streaming" +msgstr "" + +#: airtime_mvc/application/forms/StreamSetting.php:66 +msgid "Custom / 3rd Party Streaming" +msgstr "" + +#: airtime_mvc/application/forms/PasswordChange.php:17 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:117 +msgid "Password" +msgstr "" + +#: airtime_mvc/application/forms/PasswordChange.php:28 +msgid "Confirm new password" +msgstr "" + +#: airtime_mvc/application/forms/PasswordChange.php:36 +msgid "Password confirmation does not match your password." +msgstr "" + +#: airtime_mvc/application/forms/SetupLanguageTimezone.php:18 +msgid "Station Language" +msgstr "" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:52 +msgid "Enabled:" +msgstr "" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:59 +msgid "Mobile:" +msgstr "" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:66 +msgid "Stream Type:" +msgstr "" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:82 +msgid "Service Type:" +msgstr "" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:90 +msgid "Channels:" +msgstr "" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:91 +msgid "1 - Mono" +msgstr "" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:91 +msgid "2 - Stereo" +msgstr "" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:98 +msgid "Server" +msgstr "" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:108 +msgid "Port" +msgstr "" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:112 +msgid "Only numbers are allowed." +msgstr "" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:133 +msgid "URL" +msgstr "" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:154 +msgid "Mount Point" +msgstr "" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:174 +msgid "Admin User" +msgstr "" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:183 +msgid "Admin Password" +msgstr "" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:211 +msgid "Server cannot be empty." +msgstr "" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:216 +msgid "Port cannot be empty." +msgstr "" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:222 +msgid "Mount cannot be empty with Icecast server." +msgstr "" + +#: airtime_mvc/application/forms/AddShowWhen.php:16 +msgid "'%value%' does not fit the time format 'HH:mm'" +msgstr "" + +#: airtime_mvc/application/forms/AddShowWhen.php:22 +msgid "Start Time:" +msgstr "" + +#: airtime_mvc/application/forms/AddShowWhen.php:37 +msgid "In the Future:" +msgstr "" + +#: airtime_mvc/application/forms/AddShowWhen.php:64 +msgid "End Time:" +msgstr "" + +#: airtime_mvc/application/forms/AddShowWhen.php:98 +msgid "Timezone:" +msgstr "" + +#: airtime_mvc/application/forms/AddShowWhen.php:107 +msgid "Repeats?" +msgstr "" + +#: airtime_mvc/application/forms/AddShowWhen.php:139 +msgid "Cannot create show in the past" +msgstr "" + +#: airtime_mvc/application/forms/AddShowWhen.php:147 +msgid "Cannot modify start date/time of the show that is already started" +msgstr "" + +#: airtime_mvc/application/forms/AddShowWhen.php:156 +#: airtime_mvc/application/models/Show.php:282 +msgid "End date/time cannot be in the past" +msgstr "" + +#: airtime_mvc/application/forms/AddShowWhen.php:164 +msgid "Cannot have duration < 0m" +msgstr "" + +#: airtime_mvc/application/forms/AddShowWhen.php:168 +msgid "Cannot have duration 00h 00m" +msgstr "" + +#: airtime_mvc/application/forms/AddShowWhen.php:175 +msgid "Cannot have duration greater than 24h" +msgstr "" + +#: airtime_mvc/application/forms/TuneInPreferences.php:19 +msgid "Push metadata to your station on TuneIn?" +msgstr "" + +#: airtime_mvc/application/forms/TuneInPreferences.php:24 +msgid "Station ID:" +msgstr "" + +#: airtime_mvc/application/forms/TuneInPreferences.php:30 +msgid "Partner Key:" +msgstr "" + +#: airtime_mvc/application/forms/TuneInPreferences.php:36 +msgid "Partner Id:" +msgstr "" + +#: airtime_mvc/application/forms/TuneInPreferences.php:77 +#: airtime_mvc/application/forms/TuneInPreferences.php:86 +msgid "" +"Invalid TuneIn Settings. Please ensure your TuneIn settings are correct and " +"try again." +msgstr "" + +#: airtime_mvc/application/forms/AddShowLiveStream.php:10 +#, php-format +msgid "Use %s Authentication:" +msgstr "" + +#: airtime_mvc/application/forms/AddShowLiveStream.php:16 +msgid "Use Custom Authentication:" +msgstr "" + +#: airtime_mvc/application/forms/AddShowLiveStream.php:25 +msgid "Custom Username" +msgstr "" + +#: airtime_mvc/application/forms/AddShowLiveStream.php:37 +msgid "Custom Password" +msgstr "" + +#: airtime_mvc/application/forms/AddShowLiveStream.php:48 +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:67 +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:88 +msgid "Host:" +msgstr "" + +#: airtime_mvc/application/forms/AddShowLiveStream.php:54 +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:73 +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:94 +msgid "Port:" +msgstr "" + +#: airtime_mvc/application/forms/AddShowLiveStream.php:60 +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:79 +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:100 +msgid "Mount:" +msgstr "" + +#: airtime_mvc/application/forms/AddShowLiveStream.php:77 +msgid "Username field cannot be empty." +msgstr "" + +#: airtime_mvc/application/forms/AddShowLiveStream.php:82 +msgid "Password field cannot be empty." +msgstr "" + +#: airtime_mvc/application/forms/AddShowStyle.php:12 +msgid "Background Colour:" +msgstr "" + +#: airtime_mvc/application/forms/AddShowStyle.php:31 +msgid "Text Colour:" +msgstr "" + +#: airtime_mvc/application/forms/AddShowStyle.php:49 +msgid "Current Logo:" +msgstr "" + +#: airtime_mvc/application/forms/AddShowStyle.php:72 +msgid "Show Logo:" +msgstr "" + +#: airtime_mvc/application/forms/AddShowStyle.php:87 +msgid "Logo Preview:" +msgstr "" + +#: airtime_mvc/application/forms/Login.php:102 +msgid "Type the characters you see in the picture below." +msgstr "" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:19 +msgid "Auto Switch Off:" +msgstr "" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:25 +msgid "Auto Switch On:" +msgstr "" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:31 +msgid "Switch Transition Fade (s):" +msgstr "" + +#: airtime_mvc/application/forms/AddShowRepeats.php:10 +msgid "Link:" +msgstr "" + +#: airtime_mvc/application/forms/AddShowRepeats.php:16 +msgid "Repeat Type:" +msgstr "" + +#: airtime_mvc/application/forms/AddShowRepeats.php:19 +msgid "weekly" +msgstr "" + +#: airtime_mvc/application/forms/AddShowRepeats.php:20 +msgid "every 2 weeks" +msgstr "" + +#: airtime_mvc/application/forms/AddShowRepeats.php:21 +msgid "every 3 weeks" +msgstr "" + +#: airtime_mvc/application/forms/AddShowRepeats.php:22 +msgid "every 4 weeks" +msgstr "" + +#: airtime_mvc/application/forms/AddShowRepeats.php:23 +msgid "monthly" +msgstr "" + +#: airtime_mvc/application/forms/AddShowRepeats.php:32 +msgid "Select Days:" +msgstr "" + +#: airtime_mvc/application/forms/AddShowRepeats.php:47 +msgid "Repeat By:" +msgstr "" + +#: airtime_mvc/application/forms/AddShowRepeats.php:50 +msgid "day of the month" +msgstr "" + +#: airtime_mvc/application/forms/AddShowRepeats.php:50 +msgid "day of the week" +msgstr "" + +#: airtime_mvc/application/forms/AddShowRepeats.php:69 +msgid "No End?" +msgstr "" + +#: airtime_mvc/application/forms/AddShowRepeats.php:106 +msgid "End date must be after start date" +msgstr "" + +#: airtime_mvc/application/forms/AddShowRepeats.php:113 +msgid "Please select a repeat day" +msgstr "" + +#: airtime_mvc/application/configs/navigation.php:12 +msgid "Radio Page" +msgstr "" + +#: airtime_mvc/application/configs/navigation.php:19 +msgid "Calendar" +msgstr "" + +#: airtime_mvc/application/configs/navigation.php:26 +msgid "Widgets" +msgstr "" + +#: airtime_mvc/application/configs/navigation.php:48 +msgid "Settings" +msgstr "" + +#: airtime_mvc/application/configs/navigation.php:67 +msgid "Users" +msgstr "" + +#: airtime_mvc/application/configs/navigation.php:74 +msgid "Streams" +msgstr "" + +#: airtime_mvc/application/configs/navigation.php:82 +msgid "Analytics" +msgstr "" + +#: airtime_mvc/application/configs/navigation.php:90 +msgid "Listener Stats" +msgstr "" + +#: airtime_mvc/application/configs/navigation.php:104 +msgid "History Templates" +msgstr "" + +#: airtime_mvc/application/configs/navigation.php:113 +msgid "Billing" +msgstr "" + +#: airtime_mvc/application/configs/navigation.php:120 +msgid "Account Plans" +msgstr "" + +#: airtime_mvc/application/configs/navigation.php:127 +msgid "Account Details" +msgstr "" + +#: airtime_mvc/application/configs/navigation.php:134 +msgid "View Invoices" +msgstr "" + +#: airtime_mvc/application/configs/navigation.php:150 +msgid "Getting Started" +msgstr "" + +#: airtime_mvc/application/configs/navigation.php:157 +msgid "FAQ" +msgstr "" + +#: airtime_mvc/application/configs/navigation.php:162 +msgid "User Manual" +msgstr "" + +#: airtime_mvc/application/configs/navigation.php:167 +msgid "File a Support Ticket" +msgstr "" + +#: airtime_mvc/application/models/Block.php:833 +#: airtime_mvc/application/models/Playlist.php:812 +msgid "Cue in and cue out are null." +msgstr "" + +#: airtime_mvc/application/models/Block.php:868 +#: airtime_mvc/application/models/Block.php:924 +#: airtime_mvc/application/models/Playlist.php:851 +#: airtime_mvc/application/models/Playlist.php:895 +msgid "Can't set cue out to be greater than file length." +msgstr "" + +#: airtime_mvc/application/models/Block.php:879 +#: airtime_mvc/application/models/Block.php:900 +#: airtime_mvc/application/models/Playlist.php:843 +#: airtime_mvc/application/models/Playlist.php:868 +msgid "Can't set cue in to be larger than cue out." +msgstr "" + +#: airtime_mvc/application/models/Block.php:935 +#: airtime_mvc/application/models/Playlist.php:887 +msgid "Can't set cue out to be smaller than cue in." +msgstr "" + +#: airtime_mvc/application/models/Block.php:1366 +msgid "Upload Time" +msgstr "" + +#: airtime_mvc/application/models/ShowBuilder.php:212 +#, php-format +msgid "Rebroadcast of %s from %s" +msgstr "" + +#: airtime_mvc/application/models/Preference.php:460 +#, php-format +msgid "Powered by %s" +msgstr "" + +#: airtime_mvc/application/models/Preference.php:588 +msgid "Select Country" +msgstr "" + +#: airtime_mvc/application/models/MusicDir.php:160 +#, php-format +msgid "%s is already watched." +msgstr "" + +#: airtime_mvc/application/models/MusicDir.php:164 +#, php-format +msgid "%s contains nested watched directory: %s" +msgstr "" + +#: airtime_mvc/application/models/MusicDir.php:168 +#, php-format +msgid "%s is nested within existing watched directory: %s" +msgstr "" + +#: airtime_mvc/application/models/MusicDir.php:189 +#: airtime_mvc/application/models/MusicDir.php:370 +#, php-format +msgid "%s is not a valid directory." +msgstr "" + +#: airtime_mvc/application/models/MusicDir.php:232 +#, php-format +msgid "" +"%s is already set as the current storage dir or in the watched folders list" +msgstr "" + +#: airtime_mvc/application/models/MusicDir.php:388 +#, php-format +msgid "" +"%s is already set as the current storage dir or in the watched folders list." +msgstr "" + +#: airtime_mvc/application/models/MusicDir.php:431 +#, php-format +msgid "%s doesn't exist in the watched list." +msgstr "" + +#: airtime_mvc/application/models/Auth.php:33 +#, php-format +msgid "" +"Hi %s, \n" +"\n" +"Please click this link to reset your password: " +msgstr "" + +#: airtime_mvc/application/models/Auth.php:38 +#, php-format +msgid "%s Password Reset" +msgstr "" + +#: airtime_mvc/application/models/Show.php:184 +msgid "Shows can have a max length of 24 hours." +msgstr "" + +#: airtime_mvc/application/models/Show.php:293 +msgid "" +"Cannot schedule overlapping shows.\n" +"Note: Resizing a repeating show affects all of its repeats." +msgstr "" + +#: airtime_mvc/application/models/Scheduler.php:73 +msgid "Cannot move items out of linked shows" +msgstr "" + +#: airtime_mvc/application/models/Scheduler.php:119 +msgid "The schedule you're viewing is out of date! (sched mismatch)" +msgstr "" + +#: airtime_mvc/application/models/Scheduler.php:124 +msgid "The schedule you're viewing is out of date! (instance mismatch)" +msgstr "" + +#: airtime_mvc/application/models/Scheduler.php:132 +#: airtime_mvc/application/models/Scheduler.php:458 +#: airtime_mvc/application/models/Scheduler.php:490 +msgid "The schedule you're viewing is out of date!" +msgstr "" + +#: airtime_mvc/application/models/Scheduler.php:142 +#, php-format +msgid "You are not allowed to schedule show %s." +msgstr "" + +#: airtime_mvc/application/models/Scheduler.php:146 +msgid "You cannot add files to recording shows." +msgstr "" + +#: airtime_mvc/application/models/Scheduler.php:152 +#, php-format +msgid "The show %s is over and cannot be scheduled." +msgstr "" + +#: airtime_mvc/application/models/Scheduler.php:159 +#, php-format +msgid "The show %s has been previously updated!" +msgstr "" + +#: airtime_mvc/application/models/Scheduler.php:178 +msgid "" +"Content in linked shows must be scheduled before or after any one is " +"broadcasted" +msgstr "" + +#: airtime_mvc/application/models/Scheduler.php:195 +msgid "Cannot schedule a playlist that contains missing files." +msgstr "" + +#: airtime_mvc/application/models/Scheduler.php:216 +#: airtime_mvc/application/models/Scheduler.php:305 +msgid "A selected File does not exist!" +msgstr "" + +#: airtime_mvc/application/models/Schedule.php:206 +msgid "livestream" +msgstr "" + +#: airtime_mvc/application/models/Webstream.php:166 +msgid "Length needs to be greater than 0 minutes" +msgstr "" + +#: airtime_mvc/application/models/Webstream.php:171 +msgid "Length should be of form \"00h 00m\"" +msgstr "" + +#: airtime_mvc/application/models/Webstream.php:184 +msgid "URL should be of form \"http://domain\"" +msgstr "" + +#: airtime_mvc/application/models/Webstream.php:187 +msgid "URL should be 512 characters or less" +msgstr "" + +#: airtime_mvc/application/models/Webstream.php:193 +msgid "No MIME type found for webstream." +msgstr "" + +#: airtime_mvc/application/models/Webstream.php:209 +msgid "Webstream name cannot be empty" +msgstr "" + +#: airtime_mvc/application/models/Webstream.php:278 +msgid "Could not parse XSPF playlist" +msgstr "" + +#: airtime_mvc/application/models/Webstream.php:298 +msgid "Could not parse PLS playlist" +msgstr "" + +#: airtime_mvc/application/models/Webstream.php:318 +msgid "Could not parse M3U playlist" +msgstr "" + +#: airtime_mvc/application/models/Webstream.php:332 +msgid "Invalid webstream - This appears to be a file download." +msgstr "" + +#: airtime_mvc/application/models/Webstream.php:336 +#, php-format +msgid "Unrecognized stream type: %s" +msgstr "" + +#: airtime_mvc/public/setup/rabbitmq-setup.php:78 +msgid "" +"Couldn't connect to RabbitMQ server! Please check if the server is running " +"and your credentials are correct." +msgstr "" diff --git a/airtime_mvc/locale/hu_HU/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/hu_HU/LC_MESSAGES/airtime.mo index 04401001db64ff5193141ed851086ee166c8a617..b42985f43ec1251bfe124253fbe55a76b523e991 100644 GIT binary patch delta 16417 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 dAhgN(1WI^?&H$RImU5 delta 15379 zcmZA72YioL|NrqTi6kHNM9OrB~MIC2oO~=WB!!R00VG_QNA^01H;!BLd&{~dD8f#(;OvRSC1qpG4ffy$T@Yak2YG_W>C7RPChYN(ZscS0>vS9^b!jlYc^;`1>Q z6YDw7I_!}~U5r`&}56fWy*27%b+?G3`X4VU})GO@$ZKy3ch+%jZ3*s#- zj89PQhBYwtqEYQuL)CADE{&)YncUbNHN!!ur5b~3a53)2t*H9F63vRGqgHANs^JV& z{Y)EQhN_>1{c$x`#as=|8Axo%`o|L(ML+}CggOiRFbGee4_-oT(G^?%26IsU7B!Q5 zsKfWvTB4EJ$`+^QEMIVh&>x`ca;UTJmX_7nfl%+=^P!v#56NV`=npHRVK;DT@jWM4irssKfIa7RUS8 z9fO*gnGC>Alt*BDJcmcU9H&Hcvx49AN@xPVqXv|dSAjR%DT>;vc=SbAeVb{5dM{hq z@?^|Oc?JgHeCsmQ8Ci{LcpGYf$57veyO;+PS~*S>HbK=-N41k-%M+0maXGV0##xI+ zsqiVP8u#xJ3k_B!Um-%-!M#1Qmj8Ds(U#xkfqFN--a5!G%} z4AT3bOh$Xt9d+7Aphh?bbp|p~OT7|RZ!fBYvzP~Opa$>&3*jTw+moxUS;25?8PwYn zk7~a$x-_CTWVA=^QRN=CLK>=rL8u2O+4w@#43?u-Y7OeNZ$WL*5sboHsP>#>bKe)W zV&SOgqmxrj`hz=W(5IN+=1%wAgaUTsF9vSb$k`o@ptzAJsbZGby%OFCg9)R ze5#9~_P!Eo>zboJ&8euB9q%He_kIql!(FKN@&M+>qo^gkfEvJ;*4x&fF^>3Stb#Ee z%%SUs8fYqNWz#S(4n+0i!g6vJ8FjQ9)$uXZ1D~M|*##_vx9xrZj^=I1g<7##)BqE( z5!S*`%(QVgY6X|t@+#Cytw*-RkJ+EylI5nQ3L!M!|*3m$Ir0< z22fdh8imnV&zg>!@d6CTHJA?%qrR}0G5hC#P#3f3g-}ZtWy_^(xjbryl~9MQs*R`E z_#3E|OGT|*U(^y0Ld|>>>eNrR<$0(HELEBF=d2;42e)Ba+=C_X7V0p1zhPz;h*6X) zqZ)39IuqSc14u`;GZ+iuNYu*BLv@&i+M12Fd;nc);3OF}cnP&+H&6{eL@nK8RKt0? zngJC=Eny^TNmEdJ`X&~}u~-Bbp|)%%M&WT(y}PKb`=cxSuO$!YW;)D;TB^L(;;8!- zQCkp?8c222r?oDsegjm!BzwO-s{R|8y)~#6=!>y99Cf&}y0QLhU@L(rJb*EH1J$4} zKXcVk0IH$fs1?bFnn4BBUN=I`tTpOG^9HJZ25Jk(qMpk{J@+2!EbVgH3SVIM(xW~M z4^boZ>R}oV#r%|uVLVnr?PWS@pyN;jnS`3@Ow!e z9zxCdDr)a;U}^jf^+5hqGqWQDtj>Q#PWC=bqJrJ+6n7rCR7@=g0ZMWTMzx| z-|0X`4R=F5*bj9krl4lN0M+4M)N6GDwNkgR6h1}meX-sqUJlhkBh<{hpx&}!s1=-m zn&?~%p?_y387;|9d*fr&0M4S8@;a*HXQ+nqrr8dym$|&UajK-GzNwe`T@=XvsEWF+7aE_zh~tcTgSvh}ydssD{G&ndgh5W>yx}VS=?G z>P#hL0uI6$T!Ss}oQsSn zgIe-rtdBiW6IzWL_(oK_uH9tR(NWavate#$*QgGjqGptPfO((@Y75Gu22v9>;FhR% z`k+?qP1MQ`!y-5lHPPj$_EsTVPz{9?$f^$F~s~1*97^NIAgIh-oP@L zFx323+YKvG&O{AhmyKUVt;9c=6JMeRmU9@tW?>`-;7Qa9UPP_fRdfv}bJN~vOCgwY z3g*HzRK?+_r5lUtXaZ_WCSx4Vvhn?>fgQ%ucn5VB0y50jibY9a$sD>MYP zl4DRSG#+)9=Ac$!MRuJ1Ur9zwwhOgq2d$^A*RUY*d#EjWfm)e>38sS()LRl}%i*Yw zidf5|-m2QDdd*PJC!vqt|BhrdqAsWodZ6}tfOWXNKhEkx&1@PL!kMTBKeYGPp;l@$ zmcMe@E zSy&azM1GR^Bz8;eqIgONB0*=A=hR>PcA%wM_n zP={$Gs-yR@GM>OX_|)F7KGi(m6SW05Q0?DG)$^am2=$sYo@Q2{1L`bvMIY>I9f01H z2csGqX5*7Eit-eDf3=OT!@a~eVM**cor8fAS z<)1K>@=FZI)S1R{Sc>u@EQb5A0$#&t^q*x0P!ZK`JJgn?quO^(AfvN~L)wa2G02j0Y-cn5iLoL?{w(`RRYKU~goGPMbu zLcKP=Z<~hlqgEywwH5IgfYofdKB|L8s4Z-cI#ivpI?hFPd;-<(dDQc_unFGB9s2nn zH^a{q9S}Om=rlU~QsV|C($J%%mRD<U{(A8HJ~psAKt_U_$TUACoC~5(jALX zc40+afv@3NtcTCA8rE8B+Rwl|ls8}~?pwi!8^zK`0nKTz%e7j=lk-!t`HiDWdQmZ&{Rw&hgR3iL&F zGz_)GZ`t@h)QTNPb#MW-lGjlKeTbDX-wJcT5f-N01`FW;WNTf{R5D!%EJYp0KT)sE zKNx{Uv&_J1pq8u&YNjcufv2KYurJoekyrtDp$7IXYD<4cb^JHRVCeh$VzU1=$rL5f z88y?c1@Jnmqu)^tKEv$S=|eNn!q|X#47S37r~&S?9zwNu6g9BVP|x2* zS0b4|$mkR&tTd;%De8eXs3lLqIP7QR%dj-%m8dgv(s~KoQvL?@+E!d;KG6+P6KH13 z$*8lFvWoTBlJq9f--}R5{ZUId%$7%D4$2d4c?y=KJln>%*|-P&h##=! zPtlk1X&b+QdONP7X8r*6WB93yO!i)`HxCrXTHJ_2&8#c>;Uv^gx9Oc<*uP*blRt&I$D5QvL&cfzXjFM0bBk8wdZ$G1Nzn8 zFR{^VO)b<`bhKuoI^2RWcmlPBzafXwf68M~?PX#B&PJV~MX2w@8Z4;y|64Me@l&jUxi_0XESjP^aG^S!irUjz zsPDx*)a$tgwUoy&2){(F*te(&JhS?5F>g&iEJnO0R-k{UGnrtVg<7h`s6)0L)$nEO zT~xzQunp$fY7SK@YM`S~GaiRp!Kvtt@7VZaRK53Yc@?_!LD)=26;Gn}<}?Q4UDW-D z*b;-cnT9)~?x&*$oPk>MxmX4lquM!$8qihLYj+#9($8%?Y&+|(C5zZ@8jMCQZDrKy zPeOGt+{Wji8rWpxpI|G>U*Tws-eI=x1B|771@+o_?KE3h5cP>Kf*N3zovgoR(uROW z+67~MX((Paa^ z9@9Y)RKw*^6_fBa?1z!K7(;OnY9&r$Uc7<1@F8kNU!Z0hxZC{cRRXn@^ROIlLamVN z3K<;=uRZ2LU(_KBMKv6YIvaIRdtBez4Ao#;)IbNJW;hMCW%E%3-G~~{0aU${m>+K< z19Ul$OvVY`Yi^W6Rji3>s4Z$B12Gs~Ha-WnQtMC?ID;C%dDK9!qxSeaREN(|&*%Nf zv>Szm^#0c*lZPAaupp+P_ILuS!Bwaa&{ovS>_(mPbEpO%q0WZa$7aTPumI%}sCW(3 zS!jw4u`gD^&6uY5|27#NwnqERF9sb@do%{s@fy_LZpMnZ5A)%DR7Wpx3FhB#%3Cp< z@^LJLH?a*qK^^iY2TXfO=u!jS$>_#NRKt@{hs}*~=s~T}UDS*oqn6b7py@CI3sbI) zYNr)yWjfk;Z%m*(33V3speA(mAnUKCJWn7BA7dC6JY+hIwbnvC&=R$`T~LRzm$eV- z8=sCE$Z(9txfp?aP|sgPJ$DPg!tV~T{;6aR9yafJ(ND}D49zi~_!QJu?8Qp>9hSws zN6dHPb&RCk7d4R?SOT|VKfHidvHDT-x(!CvTZXmqh>J`GGS5*8LGUjV1N|?)ZO|HcAenZ0#&cv1=CSa)Z4NUo8l?d z3_~xPftSYs%9T(vt%g}=j4`CU~pJ5C>wD-d=o7cKHYCx`L zq<5$@ne;AcgKcOv`B~I!in_drPb5Dbi{Knm8B%-7m5`lrUfO5tQqD!nqxZiKnS3Pe z(@&&nPX_Wg+3E0eNpyce-p@`0oe)ClPT`8D_@_jIL@*MZdaI`@{5 zbZsZT3b&AU5=+PTi0Nvs{jW`MDuu4t(%v{hUjN}?7pW#mS8ML&C9SY!y#@P}C-t?@ z{icds!NlTl0;Y4%U-h{9kY8i6&OH1``>*RWDy*@URPJf>U3g$2ITpO7Mmbs}vc|LW>Y zCYG44Fj8aky}ADlX)om%%pw*`elTe*DUtLiX%qLFaBl_qE93)6+4H|iM%Q-hd*o-^ zP8Jc{LwPc(B(XPboqKqKn0{Z>Rg!el-aA0vk2He%V~G{RW9Wr*i0dj$Ioivve@|}g zB;_DDf}6jht||BysTud$*qGvT$+shxK-x#@MEPyv14+M<*8Z#R8{A(?If{5c^55Be zbFyXrb;(4MGDvNx^dHnG^FGOkd}Y-29(i5k4bD~652;`p-H5I2{p;jg5W9m@a0cp)%N)@-SRZ+C@Ie-XrT&wE00im!H&AL9W3z zKFd1VdJWH-D*yY}rT^J&4Cyf`j7D@dAisiqKGf9;1F^XB#D|bRB>#jojeBD;oTO_U z>5J?fe^1~en->eH+l8cSl+nC@k0>OQmT;pap2GK4iz^T1|B^b`!HpoVD~<9z8~ci~ zet4bY-ZFfP_#|8Juyqo#pUH2*rqmfv{zEVNA7C3v#%)b-z8Vw)>E)N zsU7JbTXzHb+N4gTDTL<@Ht7p#_9Tqm@e0FDjgzokU&e) zR?1cEP5q9iYY{1vSSTi-n>r;(^+{p2ZUywFtg9$~V6xf&w*FVX1NHRLt48dmzCWK6 zs7K)qtY90cPyV%kJ(NiK)%6FN^3N%CjCPF z`0SY0-`+ez(3`Y?@^3htw3xJ>aulYM-XZBqC1nzyiHB^=hw?VkL}IV5@45Gol#@U* zsXO;|RUxfZUi~+uLMVmDLly~Dy%DVJSVNyk6e<{G#hWtAw>&&?A#snTJ!}Tr6L#5ors^SmXQS*P9dW-xr+o-}*NNKh) zm32jv1`wN`UEY&l<3iJp%ehYFk4X&(ti)Q})OCPzlF2$Ju`a0u_cO5^ z_by{2(yQx;%@o2S)YCQJbdvo?iOQF4T=`_~9oPH+>e~9Ro3CQ8Y)_^T4+K%?+N+@T zd+g0U4~`<0CA~|%vc%#s0|Q8}u5M&@6W>IvlwO5F6h0=nk^C&uYRWTF*CMO(waHK9 z-v57fCbrhr+se&iq!3#vm3Tq>%otmz8usA+8RGiy4^B-2^(Y)8?@N9o`Jv=jlRl>W zDdo-NTVP?zOG)L)>nf(Yq<-X|+Sms;k~$4Zx|U!UeAAZal8+%jT<5R4eMl7#lcrMk zkouB7QP5sxDgQ{S%!AFb74cQ5t1bRcdQK`uYDU^-ZaFW=`;b41ZPA~UMk+;mqW#ZB zMpt(#oWuE~_H^Qlfp)}w$m>d>j;;v&$>y6=9&PJQz+E=4dUdGNlvIOsfz*SvlX!ny zrXnpmu&WJ8a_?FqdK8(DBdOAA-%fdY(AR% zuahcpL;X9sDU7zY{)-F$_0SC)7w=PV7^wvL?`(Vm&anAs*7MeTIL+q!*)}g?Bht?% z-aDHH{M(s^UtJMoetcEH;ykcVQYQ=lCiNnA26fdZeND^!L&>D3kK?O9iQLZBzQ zNl1{pVRE`>NAj0mp10eN_wodG-0I~ymr~!)6Wjf;m;2Wq8{8{X8@hi@E$=DbvzeEB zSg*pKg}s8j+^c)9^$bhvR>xmrqgI{2!8n0EV8da%!&3Jd7%tA#Q_8i>5&zn)rdk*T8 z5mh@ayHqcsO2&whY5j+I5;IeBc~;Jg%=)+rHp5InB@b)xbv(Vr3 zcyo1cchzmr-LV*of|q;c&Ir%(ogKa0r9F>5$-B>adE)jy@$sbXKjP!5 vbokF8cbU`G-2+Zn_iQ@d+-uj_mp<;G3)KVKjdR+K>oYv9r>Dn-AN~Ii=vW@6 diff --git a/airtime_mvc/locale/hu_HU/LC_MESSAGES/airtime.po b/airtime_mvc/locale/hu_HU/LC_MESSAGES/airtime.po index c7827683c..e4f6867cb 100644 --- a/airtime_mvc/locale/hu_HU/LC_MESSAGES/airtime.po +++ b/airtime_mvc/locale/hu_HU/LC_MESSAGES/airtime.po @@ -12,8 +12,8 @@ msgstr "" "Project-Id-Version: Airtime\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-04 11:17-0400\n" -"PO-Revision-Date: 2015-09-05 08:33+0000\n" -"Last-Translator: Daniel James \n" +"PO-Revision-Date: 2015-10-07 18:13+0000\n" +"Last-Translator: Zsolt Magyar \n" "Language-Team: Hungarian (Hungary) (http://www.transifex.com/sourcefabric/airtime/language/hu_HU/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -455,7 +455,7 @@ msgstr "Nincs jogosúltsága a forrás megváltoztatásához." #: airtime_mvc/application/controllers/LoginController.php:43 msgid "Please enter your username and password." -msgstr "" +msgstr "Kérjük, adja meg felhasználónevét és jelszavát." #: airtime_mvc/application/controllers/LoginController.php:93 msgid "Wrong username or password provided. Please try again." @@ -637,7 +637,7 @@ msgstr "Ütemezett" #: airtime_mvc/application/layouts/scripts/layout.phtml:78 #: airtime_mvc/application/views/scripts/showbuilder/builderDialog.phtml:7 msgid "Tracks" -msgstr "" +msgstr "Zeneszámok" #: airtime_mvc/application/controllers/LocaleController.php:75 #: airtime_mvc/application/layouts/scripts/layout.phtml:60 @@ -1256,19 +1256,19 @@ msgstr "Dec" #: airtime_mvc/application/controllers/LocaleController.php:245 msgid "Today" -msgstr "" +msgstr "Ma" #: airtime_mvc/application/controllers/LocaleController.php:246 msgid "Day" -msgstr "" +msgstr "Nap" #: airtime_mvc/application/controllers/LocaleController.php:247 msgid "Week" -msgstr "" +msgstr "Hét" #: airtime_mvc/application/controllers/LocaleController.php:248 msgid "Month" -msgstr "" +msgstr "Hónap" #: airtime_mvc/application/controllers/LocaleController.php:249 #: airtime_mvc/application/forms/GeneralPreferences.php:158 @@ -1841,7 +1841,7 @@ msgstr "%sNyomtatási előnézet%sKérjük, használja böngészője nyomtatási #: airtime_mvc/application/controllers/LocaleController.php:407 msgid "New Show" -msgstr "" +msgstr "Új Műsor" #: airtime_mvc/application/controllers/LocaleController.php:408 msgid "New Log Entry" @@ -1942,15 +1942,15 @@ msgstr "Élő adásfolyam" #: airtime_mvc/application/layouts/scripts/layout.phtml:63 msgid "Smart Block" -msgstr "" +msgstr "Okos Tábla" #: airtime_mvc/application/layouts/scripts/layout.phtml:66 msgid "Webstream" -msgstr "" +msgstr "Adásfolyam" #: airtime_mvc/application/layouts/scripts/layout.phtml:71 msgid "Upload" -msgstr "" +msgstr "Feltöltés" #: airtime_mvc/application/layouts/scripts/layout.phtml:76 #: airtime_mvc/application/views/scripts/showbuilder/index.phtml:5 @@ -1961,7 +1961,7 @@ msgstr "" #: airtime_mvc/application/layouts/scripts/layout.phtml:84 #: airtime_mvc/application/views/scripts/showbuilder/builderDialog.phtml:25 msgid "Webstreams" -msgstr "" +msgstr "Adásfolyamok" #: airtime_mvc/application/layouts/scripts/layout.phtml:135 #: airtime_mvc/application/layouts/scripts/layout.phtml:161 @@ -2105,7 +2105,7 @@ msgstr "" #: airtime_mvc/application/views/scripts/embeddablewidgets/player.phtml:6 #: airtime_mvc/application/configs/navigation.php:34 msgid "Player" -msgstr "" +msgstr "Lejátszó" #: airtime_mvc/application/views/scripts/playouthistory/index.phtml:2 #: airtime_mvc/application/configs/navigation.php:97 @@ -2310,7 +2310,7 @@ msgstr "" #: airtime_mvc/application/views/scripts/login/password-restore-after.phtml:11 #: airtime_mvc/application/views/scripts/form/password-restore.phtml:48 msgid "Back" -msgstr "" +msgstr "Vissza" #: airtime_mvc/application/views/scripts/login/password-restore.phtml:3 msgid "Password Reset" @@ -2376,7 +2376,7 @@ msgstr "Találat" #: airtime_mvc/application/views/scripts/form/edit-user.phtml:1 #: airtime_mvc/application/configs/navigation.php:61 msgid "My Profile" -msgstr "" +msgstr "Profilom" #: airtime_mvc/application/views/scripts/form/edit-user.phtml:7 #, php-format @@ -2506,7 +2506,7 @@ msgstr "Előzmények Szűrése" #: airtime_mvc/application/views/scripts/form/login.phtml:41 msgid "Forgot your password?" -msgstr "" +msgstr "Elfelejtett jelszó?" #: airtime_mvc/application/views/scripts/form/support-setting.phtml:46 msgid "" @@ -2564,7 +2564,7 @@ msgstr "Ön nem figyel minden média mappát." #: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:1 msgid "Live Broadcasting" -msgstr "" +msgstr "Élő Közvetítés" #: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:11 #: airtime_mvc/application/views/scripts/partialviews/header.phtml:30 @@ -2779,7 +2779,7 @@ msgstr "" #: airtime_mvc/application/views/scripts/listenerstat/index.phtml:2 msgid "Listeners" -msgstr "" +msgstr "Hallgatók" #: airtime_mvc/application/views/scripts/listenerstat/index.phtml:10 msgid "Stream Data Collection Status" @@ -2915,7 +2915,7 @@ msgstr "Segítség" #: airtime_mvc/application/views/scripts/error/error-500.phtml:11 msgid "Oops!" -msgstr "" +msgstr "Hoppá!" #: airtime_mvc/application/views/scripts/error/error-500.phtml:12 msgid "Something went wrong!" @@ -3155,7 +3155,7 @@ msgstr "Az újraközvetítésre legalább 1 órát kell várni" #: airtime_mvc/application/forms/PasswordRestore.php:14 msgid "Email" -msgstr "" +msgstr "E-mail" #: airtime_mvc/application/forms/PasswordRestore.php:36 msgid "Reset password" @@ -3390,7 +3390,7 @@ msgstr "Most Játszott" #: airtime_mvc/application/forms/Player.php:25 msgid "Select Stream:" -msgstr "" +msgstr "Adásfolyam Kiválasztása:" #: airtime_mvc/application/forms/Player.php:28 msgid "Auto detect the most appropriate stream to use." @@ -3398,7 +3398,7 @@ msgstr "" #: airtime_mvc/application/forms/Player.php:29 msgid "Select a stream:" -msgstr "" +msgstr "Egy adásfolyam kiválasztása:" #: airtime_mvc/application/forms/Player.php:41 msgid " - Mobile friendly" @@ -3448,19 +3448,19 @@ msgstr "elemek" #: airtime_mvc/application/forms/SmartBlockCriteria.php:130 msgid "Randomly" -msgstr "" +msgstr "Véletlenszerűen" #: airtime_mvc/application/forms/SmartBlockCriteria.php:131 msgid "Newest" -msgstr "" +msgstr "Újabb" #: airtime_mvc/application/forms/SmartBlockCriteria.php:132 msgid "Oldest" -msgstr "" +msgstr "Régebbi" #: airtime_mvc/application/forms/SmartBlockCriteria.php:179 msgid "Type:" -msgstr "" +msgstr "Típus:" #: airtime_mvc/application/forms/SmartBlockCriteria.php:182 msgid "Static" @@ -3797,7 +3797,7 @@ msgstr "Szövegszín:" #: airtime_mvc/application/forms/AddShowStyle.php:49 msgid "Current Logo:" -msgstr "" +msgstr "Jelenlegi Logó:" #: airtime_mvc/application/forms/AddShowStyle.php:72 msgid "Show Logo:" @@ -3937,7 +3937,7 @@ msgstr "Első Lépések" #: airtime_mvc/application/configs/navigation.php:157 msgid "FAQ" -msgstr "" +msgstr "GYIK" #: airtime_mvc/application/configs/navigation.php:162 msgid "User Manual" From 9a03b1b50aa62cca56681610a3efc731081180b5 Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Wed, 14 Oct 2015 11:58:44 -0400 Subject: [PATCH 10/18] Force users to click OK in the language/timezone popup --- .../application/views/scripts/form/setup-lang-timezone.phtml | 2 +- airtime_mvc/public/css/styles.css | 3 +++ .../public/js/airtime/nowplaying/lang-timezone-setup.js | 5 ++++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/application/views/scripts/form/setup-lang-timezone.phtml b/airtime_mvc/application/views/scripts/form/setup-lang-timezone.phtml index 1c9e31ed5..9fb120a0d 100644 --- a/airtime_mvc/application/views/scripts/form/setup-lang-timezone.phtml +++ b/airtime_mvc/application/views/scripts/form/setup-lang-timezone.phtml @@ -9,7 +9,7 @@ element->getElement('setup_timezone')->render(); ?> -

You can change these later in your preferences and user settings.

+

diff --git a/airtime_mvc/public/css/styles.css b/airtime_mvc/public/css/styles.css index 9749d7b9f..8929a33f0 100644 --- a/airtime_mvc/public/css/styles.css +++ b/airtime_mvc/public/css/styles.css @@ -3960,3 +3960,6 @@ li .ui-state-hover { #whatsnew li { margin-top: 20px; } + +/* jQuery dialog */ +.no-close .ui-dialog-titlebar-close {display: none } \ No newline at end of file diff --git a/airtime_mvc/public/js/airtime/nowplaying/lang-timezone-setup.js b/airtime_mvc/public/js/airtime/nowplaying/lang-timezone-setup.js index af1529f46..9048fe926 100644 --- a/airtime_mvc/public/js/airtime/nowplaying/lang-timezone-setup.js +++ b/airtime_mvc/public/js/airtime/nowplaying/lang-timezone-setup.js @@ -7,8 +7,11 @@ $(document).ready(function() { width: 500, resizable: false, modal: true, + closeOnEscape: false, position:['center','center'], + dialogClass: 'no-close', buttons: [ + /* Testing removing the Not Now button for higher engagement { id: "setup-later", text: $.i18n._("Not Now"), @@ -16,7 +19,7 @@ $(document).ready(function() { click: function() { $(this).dialog("close"); } - }, + },*/ { id: "help_airtime", text: $.i18n._("OK"), From a90b97fb5511674137ca11986ec210bdd458d49f Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Wed, 14 Oct 2015 14:28:39 -0400 Subject: [PATCH 11/18] SAAS-1128: Logging in from www.airtime.pro doesn't trigger lang/timezone setup dialog --- airtime_mvc/application/configs/constants.php | 1 + .../application/controllers/ShowbuilderController.php | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/application/configs/constants.php b/airtime_mvc/application/configs/constants.php index dd421a9d9..7f6b585bb 100644 --- a/airtime_mvc/application/configs/constants.php +++ b/airtime_mvc/application/configs/constants.php @@ -4,6 +4,7 @@ define('PRODUCT_NAME' , 'Airtime'); define('PRODUCT_SITE_URL' , 'http://airtime.sourcefabric.org'); define('SAAS_PRODUCT_BRANDING_NAME', 'Airtime Pro'); +define('SAAS_LOGIN_REFERRER', 'https://www.airtime.pro/'); define('COMPANY_NAME' , 'Sourcefabric'); define('COMPANY_SUFFIX' , 'z.ú.'); diff --git a/airtime_mvc/application/controllers/ShowbuilderController.php b/airtime_mvc/application/controllers/ShowbuilderController.php index 02db188e7..77f4cfa75 100644 --- a/airtime_mvc/application/controllers/ShowbuilderController.php +++ b/airtime_mvc/application/controllers/ShowbuilderController.php @@ -107,10 +107,11 @@ class ShowbuilderController extends Zend_Controller_Action $CC_CONFIG = Config::getConfig(); $baseUrl = Application_Common_OsPath::getBaseDir(); $setupComplete = Application_Model_Preference::getLangTimezoneSetupComplete(); - $previousPage = $request->getHeader('Referer'); + $previousPage = strtolower($request->getHeader('Referer')); $userService = new Application_Service_UserService(); $currentUser = $userService->getCurrentUser(); - $previousPageWasLoginScreen = strpos(strtolower($previousPage), 'login') !== false; + $previousPageWasLoginScreen = (strpos($previousPage, 'login') !== false) || + ($previousPage == SAAS_LOGIN_REFERRER); // If current user is Super Admin, and they came from the login page, // and they have not seen the setup popup before From 591b3d1539c75edd762502aa7121ac1c8f0ebc0c Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Wed, 14 Oct 2015 14:40:23 -0400 Subject: [PATCH 12/18] Fix SAAS-1128 more robustly to fix timezone/lang popup for sign up too --- airtime_mvc/application/controllers/ShowbuilderController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/application/controllers/ShowbuilderController.php b/airtime_mvc/application/controllers/ShowbuilderController.php index 77f4cfa75..b43e65a8c 100644 --- a/airtime_mvc/application/controllers/ShowbuilderController.php +++ b/airtime_mvc/application/controllers/ShowbuilderController.php @@ -111,7 +111,7 @@ class ShowbuilderController extends Zend_Controller_Action $userService = new Application_Service_UserService(); $currentUser = $userService->getCurrentUser(); $previousPageWasLoginScreen = (strpos($previousPage, 'login') !== false) || - ($previousPage == SAAS_LOGIN_REFERRER); + (strpos($previousPage, SAAS_LOGIN_REFERRER) !== false); // If current user is Super Admin, and they came from the login page, // and they have not seen the setup popup before From eea5fff1fa57523fdef49202e14ec43333899379 Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Wed, 14 Oct 2015 15:15:25 -0400 Subject: [PATCH 13/18] Fixed jQuery being broken on Radio Page --- airtime_mvc/application/controllers/IndexController.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/airtime_mvc/application/controllers/IndexController.php b/airtime_mvc/application/controllers/IndexController.php index 08c17b186..48ff2f8e7 100644 --- a/airtime_mvc/application/controllers/IndexController.php +++ b/airtime_mvc/application/controllers/IndexController.php @@ -12,6 +12,12 @@ class IndexController extends Zend_Controller_Action { $CC_CONFIG = Config::getConfig(); $baseUrl = Application_Common_OsPath::getBaseDir(); + $this->view->headScript()->appendFile($baseUrl . 'js/libs/jquery-1.8.3.min.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') + ->appendFile($baseUrl . 'js/i18n/jquery.i18n.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') + ->appendFile($baseUrl . 'locale/general-translation-table?' . $CC_CONFIG['airtime_version'], 'text/javascript') + ->appendScript("$.i18n.setDictionary(general_dict)") + ->appendScript("var baseUrl='$baseUrl'"); + $this->view->headLink()->setStylesheet($baseUrl.'css/radio-page/radio-page.css?'.$CC_CONFIG['airtime_version']); $this->view->headLink()->appendStylesheet($baseUrl.'css/embed/weekly-schedule-widget.css?'.$CC_CONFIG['airtime_version']); From d98459a55d33fa573311653dbabf365a0293eea0 Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Wed, 14 Oct 2015 15:20:49 -0400 Subject: [PATCH 14/18] Fix head title on Radio Page --- airtime_mvc/application/controllers/IndexController.php | 1 + 1 file changed, 1 insertion(+) diff --git a/airtime_mvc/application/controllers/IndexController.php b/airtime_mvc/application/controllers/IndexController.php index 48ff2f8e7..d0070ca18 100644 --- a/airtime_mvc/application/controllers/IndexController.php +++ b/airtime_mvc/application/controllers/IndexController.php @@ -12,6 +12,7 @@ class IndexController extends Zend_Controller_Action { $CC_CONFIG = Config::getConfig(); $baseUrl = Application_Common_OsPath::getBaseDir(); + $this->view->headTitle(Application_Model_Preference::GetHeadTitle()); $this->view->headScript()->appendFile($baseUrl . 'js/libs/jquery-1.8.3.min.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') ->appendFile($baseUrl . 'js/i18n/jquery.i18n.js?' . $CC_CONFIG['airtime_version'], 'text/javascript') ->appendFile($baseUrl . 'locale/general-translation-table?' . $CC_CONFIG['airtime_version'], 'text/javascript') From 97cc4050a4e565dfc3facab7b4bc2c4a58328920 Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Mon, 19 Oct 2015 12:37:34 -0400 Subject: [PATCH 15/18] CC-6139: User timezone setting displays incorrectly in user settings --- airtime_mvc/application/forms/EditUser.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/airtime_mvc/application/forms/EditUser.php b/airtime_mvc/application/forms/EditUser.php index cbb2ec22f..f49ea0340 100644 --- a/airtime_mvc/application/forms/EditUser.php +++ b/airtime_mvc/application/forms/EditUser.php @@ -118,12 +118,12 @@ class Application_Form_EditUser extends Zend_Form $locale = new Zend_Form_Element_Select("cu_locale"); $locale->setLabel(_("Language:")); $locale->setMultiOptions(Application_Model_Locale::getLocales()); - $locale->setValue(Application_Model_Preference::GetUserLocale($currentUserId)); + $locale->setValue(Application_Model_Preference::GetUserLocale()); $locale->setDecorators(array('ViewHelper')); $this->addElement($locale); - $stationTz = Application_Model_Preference::GetTimezone($currentUserId); - $userTz = Application_Model_Preference::GetUserTimezone($currentUserId); + $stationTz = Application_Model_Preference::GetDefaultTimezone(); + $userTz = Application_Model_Preference::GetUserTimezone(); $timezone = new Zend_Form_Element_Select("cu_timezone"); $timezone->setLabel(_("Interface Timezone:")); From 9d0beabd3f5fec28818ef0a1f94beb573560fa28 Mon Sep 17 00:00:00 2001 From: Duncan Sommerville Date: Mon, 19 Oct 2015 14:09:42 -0400 Subject: [PATCH 16/18] Make playout history page visible for Program Managers --- .../application/configs/navigation.php | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/airtime_mvc/application/configs/navigation.php b/airtime_mvc/application/configs/navigation.php index 631833343..7dc0466a0 100644 --- a/airtime_mvc/application/configs/navigation.php +++ b/airtime_mvc/application/configs/navigation.php @@ -81,18 +81,11 @@ $pages = array( array( 'label' => ""._("Analytics"), 'module' => 'default', - 'controller' => 'listenerstat', + 'controller' => 'playouthistory', 'action' => 'index', - 'resource' => 'listenerstat', + 'resource' => 'playouthistory', 'title' => 'Analytics', 'pages' => array( - array( - 'label' => _('Listener Stats'), - 'module' => 'default', - 'controller' => 'listenerstat', - 'action' => 'index', - 'resource' => 'listenerstat' - ), array( 'label' => _('Playout History'), 'module' => 'default', @@ -106,7 +99,14 @@ $pages = array( 'controller' => 'playouthistorytemplate', 'action' => 'index', 'resource' => 'playouthistorytemplate' - ) + ), + array( + 'label' => _('Listener Stats'), + 'module' => 'default', + 'controller' => 'listenerstat', + 'action' => 'index', + 'resource' => 'listenerstat' + ), ) ), array( From fb4aef405cf46364cbfd7785ce4fcc3fee6e1e89 Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Mon, 19 Oct 2015 15:23:50 -0400 Subject: [PATCH 17/18] Increase transaction isolation level to avoid duplicate shows, SAAS-1111 --- airtime_mvc/application/models/Show.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/airtime_mvc/application/models/Show.php b/airtime_mvc/application/models/Show.php index 2653fe848..504a53418 100644 --- a/airtime_mvc/application/models/Show.php +++ b/airtime_mvc/application/models/Show.php @@ -850,6 +850,9 @@ SQL; $con = Propel::getConnection(CcPrefPeer::DATABASE_NAME); try { $con->beginTransaction(); + //It is extremely important that we increase the transaction isolation level, so that if two + //requests cause the show schedule to be generated at the same time, one will be rolled back. + $con->exec("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE"); //UTC DateTime object $showsPopUntil = Application_Model_Preference::GetShowsPopulatedUntil(); @@ -862,7 +865,9 @@ SQL; $con->commit(); } catch (Exception $e) { $con->rollBack(); - throw $e; + //throw $e; + Logging::warn("Did not create show instances due to transaction error. This is usually safe + and caused by two concurrent transactions. " . $e->getMessage()); } } From bd3a16ae7bdbdcd637398d3d795cf066044f47e1 Mon Sep 17 00:00:00 2001 From: Duncan Sommerville Date: Mon, 19 Oct 2015 16:10:20 -0400 Subject: [PATCH 18/18] SAAS-1110 - Fix header sizing at most screen resolutions --- airtime_mvc/public/css/styles.css | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/airtime_mvc/public/css/styles.css b/airtime_mvc/public/css/styles.css index 8929a33f0..3f9381aed 100644 --- a/airtime_mvc/public/css/styles.css +++ b/airtime_mvc/public/css/styles.css @@ -288,15 +288,13 @@ select { color:#ff5d1a; } .now-playing-block { - /*width:35%;*/ - flex: 1 auto; + flex: 1 0; background: url(images/masterpanel_spacer.png) no-repeat 0 0; margin-left: 152px; padding-left: 14px; } .show-block { - /*width:30%;*/ - flex: 1 auto; + flex: 1 0; } .text-row { height:30px; @@ -3962,4 +3960,4 @@ li .ui-state-hover { } /* jQuery dialog */ -.no-close .ui-dialog-titlebar-close {display: none } \ No newline at end of file +.no-close .ui-dialog-titlebar-close {display: none }