Merge branch 'cc-5709-airtime-analyzer' into cc-5709-airtime-analyzer-cloud-storage

Conflicts:
	airtime_mvc/application/models/StoredFile.php
	airtime_mvc/application/modules/rest/controllers/MediaController.php
	python_apps/airtime_analyzer/airtime_analyzer/analyzer_pipeline.py
This commit is contained in:
drigato 2014-11-26 11:42:40 -05:00
commit 884a4c493d
103 changed files with 30564 additions and 20054 deletions

View file

@ -51,8 +51,9 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
$view = $this->getResource('view');
$baseUrl = Application_Common_OsPath::getBaseDir();
$view->headScript()->appendScript("var baseUrl = '$baseUrl'");
$view->headScript()->appendScript("var baseUrl = '$baseUrl';");
$this->_initTranslationGlobals($view);
$user = Application_Model_User::GetCurrentUser();
if (!is_null($user)){
$userType = $user->getType();
@ -60,7 +61,17 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
$userType = "";
}
$view->headScript()->appendScript("var userType = '$userType';");
}
/**
* 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) {
$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()

View file

@ -1,5 +1,21 @@
<?php
define('PRODUCT_NAME' , 'Airtime');
define('PRODUCT_SITE_URL' , 'http://airtime.sourcefabric.org');
define('COMPANY_NAME' , 'Sourcefabric');
define('COMPANY_SUFFIX' , 'z.ú.');
define('COMPANY_SITE' , 'Sourcefabric.org');
define('COMPANY_SITE_URL' , 'http://sourcefabric.org/');
define('WHOS_USING_URL' , 'http://sourcefabric.org/en/airtime/whosusing');
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://www.sourcefabric.org/en/airtime/manuals/');
define('LICENSE_VERSION' , 'GNU AGPL v.3');
define('LICENSE_URL' , 'http://www.gnu.org/licenses/agpl-3.0-standalone.html');
define('AIRTIME_COPYRIGHT_DATE' , '2010-2012');
define('AIRTIME_REST_VERSION' , '1.1');
define('AIRTIME_API_VERSION' , '1.1');

View file

@ -757,7 +757,7 @@ class ApiController extends Zend_Controller_Action
//File is not in database anymore.
if (is_null($file)) {
$return_hash['error'] = _("File does not exist in Airtime.");
$return_hash['error'] = sprintf(_("File does not exist in %s"), PRODUCT_NAME);
}
//Updating a metadata change.
else {
@ -777,7 +777,7 @@ class ApiController extends Zend_Controller_Action
$md['MDATA_KEY_ORIGINAL_PATH'], $con);
if (is_null($file)) {
$return_hash['error'] = _('File does not exist in Airtime');
$return_hash['error'] = sprintf(_('File does not exist in %s'), PRODUCT_NAME);
} else {
$filepath = $md['MDATA_KEY_FILEPATH'];
//$filepath = str_replace("\\", "", $filepath);
@ -789,7 +789,7 @@ class ApiController extends Zend_Controller_Action
$file = Application_Model_StoredFile::RecallByFilepath($filepath, $con);
if (is_null($file)) {
$return_hash['error'] = _("File doesn't exist in Airtime.");
$return_hash['error'] = sprintf(_('File does not exist in %s'), PRODUCT_NAME);
Logging::warn("Attempt to delete file that doesn't exist.
Path: '$filepath'");
} else {

View file

@ -5,7 +5,7 @@ class LocaleController extends Zend_Controller_Action
public function init()
{
}
public function datatablesTranslationTableAction()
{
$this->view->layout()->disableLayout();

View file

@ -12,12 +12,12 @@ class LoginController extends Zend_Controller_Action
$CC_CONFIG = Config::getConfig();
$request = $this->getRequest();
$stationLocale = Application_Model_Preference::GetDefaultLocale();
Application_Model_Locale::configureLocalization($request->getcookie('airtime_locale', 'en_CA'));
Application_Model_Locale::configureLocalization($request->getcookie('airtime_locale', $stationLocale));
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity())
{
if ($auth->hasIdentity()) {
$this->_redirect('Showbuilder');
}
@ -110,7 +110,9 @@ class LoginController extends Zend_Controller_Action
$this->view->headScript()->appendFile($baseUrl.'js/airtime/login/password-restore.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$request = $this->getRequest();
Application_Model_Locale::configureLocalization($request->getcookie('airtime_locale', 'en_CA'));
$stationLocale = Application_Model_Preference::GetDefaultLocale();
Application_Model_Locale::configureLocalization($request->getcookie('airtime_locale', $stationLocale));
if (!Application_Model_Preference::GetEnableSystemEmail()) {
$this->_redirect('login');
@ -154,7 +156,9 @@ class LoginController extends Zend_Controller_Action
public function passwordRestoreAfterAction()
{
$request = $this->getRequest();
Application_Model_Locale::configureLocalization($request->getcookie('airtime_locale', 'en_CA'));
$stationLocale = Application_Model_Preference::GetDefaultLocale();
Application_Model_Locale::configureLocalization($request->getcookie('airtime_locale', $stationLocale));
//uses separate layout without a navigation.
$this->_helper->layout->setLayout('login');
@ -172,8 +176,10 @@ class LoginController extends Zend_Controller_Action
$form = new Application_Form_PasswordChange();
$auth = new Application_Model_Auth();
$user = CcSubjsQuery::create()->findPK($user_id);
$stationLocale = Application_Model_Preference::GetDefaultLocale();
Application_Model_Locale::configureLocalization($request->getcookie('airtime_locale', 'en_CA'));
Application_Model_Locale::configureLocalization($request->getcookie('airtime_locale', $stationLocale));
//check validity of token
if (!$auth->checkToken($user_id, $token, 'password.restore')) {

View file

@ -38,7 +38,7 @@ class PlaylistController extends Zend_Controller_Action
$obj = null;
$objInfo = Application_Model_Library::getObjInfo($p_type);
$obj_sess = new Zend_Session_Namespace( UI_PLAYLISTCONTROLLER_OBJ_SESSNAME);
$obj_sess = new Zend_Session_Namespace(UI_PLAYLISTCONTROLLER_OBJ_SESSNAME);
if (isset($obj_sess->id)) {
$obj = new $objInfo['className']($obj_sess->id);
@ -422,29 +422,29 @@ class PlaylistController extends Zend_Controller_Action
public function setCrossfadeAction()
{
$id1 = $this->_getParam('id1', null);
$id2 = $this->_getParam('id2', null);
$type = $this->_getParam('type');
$fadeIn = $this->_getParam('fadeIn', 0);
$fadeOut = $this->_getParam('fadeOut', 0);
$offset = $this->_getParam('offset', 0);
$id1 = $this->_getParam('id1', null);
$id2 = $this->_getParam('id2', null);
$type = $this->_getParam('type');
$fadeIn = $this->_getParam('fadeIn', 0);
$fadeOut = $this->_getParam('fadeOut', 0);
$offset = $this->_getParam('offset', 0);
try {
$obj = $this->getPlaylist($type);
$response = $obj->createCrossfade($id1, $fadeOut, $id2, $fadeIn, $offset);
try {
$obj = $this->getPlaylist($type);
$response = $obj->createCrossfade($id1, $fadeOut, $id2, $fadeIn, $offset);
if (!isset($response["error"])) {
$this->createUpdateResponse($obj);
} else {
$this->view->error = $response["error"];
}
} catch (PlaylistOutDatedException $e) {
$this->playlistOutdated($e);
} catch (PlaylistNotFoundException $e) {
$this->playlistNotFound($type);
} catch (Exception $e) {
$this->playlistUnknownError($e);
}
if (!isset($response["error"])) {
$this->createUpdateResponse($obj);
} else {
$this->view->error = $response["error"];
}
} catch (PlaylistOutDatedException $e) {
$this->playlistOutdated($e);
} catch (PlaylistNotFoundException $e) {
$this->playlistNotFound($type);
} catch (Exception $e) {
$this->playlistUnknownError($e);
}
}
public function getPlaylistFadesAction()

View file

@ -69,12 +69,6 @@ class UserController extends Zend_Controller_Action
$user->setJabber($formData['jabber']);
$user->save();
// Language and timezone settings are saved on a per-user basis
// By default, the default language, and timezone setting on
// preferences page is what gets assigned.
Application_Model_Preference::SetUserLocale();
Application_Model_Preference::SetUserTimezone();
$form->reset();
$this->view->form = $form;
@ -83,7 +77,7 @@ class UserController extends Zend_Controller_Action
} else {
$this->view->successMessage = "<div class='success'>"._("User updated successfully!")."</div>";
}
$this->_helper->json->sendJson(array("valid"=>"true", "html"=>$this->view->render('user/add-user.phtml')));
} else {
$this->view->form = $form;

View file

@ -7,7 +7,7 @@ class Application_Form_AddShowLiveStream extends Zend_Form_SubForm
public function init()
{
$cb_airtime_auth = new Zend_Form_Element_Checkbox("cb_airtime_auth");
$cb_airtime_auth->setLabel(_("Use Airtime Authentication:"))
$cb_airtime_auth->setLabel(sprintf(_("Use %s Authentication:"), PRODUCT_NAME))
->setRequired(false)
->setDecorators(array('ViewHelper'));
$this->addElement($cb_airtime_auth);

View file

@ -53,13 +53,11 @@ class Application_Form_Login extends Zend_Form
$locale->setMultiOptions(Application_Model_Locale::getLocales());
$locale->setDecorators(array('ViewHelper'));
$this->addElement($locale);
$this->setDefaults(array(
"locale" => Application_Model_Locale::getUserLocale()
));
$recaptchaNeeded = false;
if (Application_Model_LoginAttempts::getAttempts($_SERVER['REMOTE_ADDR']) >= 3) {
$recaptchaNeeded = true;
}
if ($recaptchaNeeded) {
// recaptcha
$this->addRecaptcha();
}

View file

@ -123,7 +123,7 @@ class Application_Form_RegisterAirtime extends Zend_Form
// checkbox for publicise
$checkboxPublicise = new Zend_Form_Element_Checkbox("Publicise");
$checkboxPublicise->setLabel(_('Promote my station on Sourcefabric.org'))
$checkboxPublicise->setLabel(sprintf(_('Promote my station on %s'), COMPANY_SITE))
->setRequired(false)
->setDecorators(array('ViewHelper'))
->setValue(Application_Model_Preference::GetPublicise());
@ -143,11 +143,14 @@ class Application_Form_RegisterAirtime extends Zend_Form
)
));
$privacyPolicyAnchorOpen = "<a id='link_to_privacy' href='" . PRIVACY_POLICY_URL
. "' onclick='window.open(this.href); return false;'>";
// checkbox for privacy policy
$checkboxPrivacy = new Zend_Form_Element_Checkbox("Privacy");
$checkboxPrivacy->setLabel(
sprintf(_("By checking this box, I agree to Sourcefabric's %sprivacy policy%s."),
"<a id='link_to_privacy' href='http://www.sourcefabric.org/en/about/policy/' onclick='window.open(this.href); return false;'>",
sprintf(_('By checking this box, I agree to %s\'s %sprivacy policy%s.'),
COMPANY_NAME,
$privacyPolicyAnchorOpen,
"</a>"))
->setDecorators(array('ViewHelper'));
$this->addElement($checkboxPrivacy);

View file

@ -119,7 +119,7 @@ class Application_Form_SupportSettings extends Zend_Form
// checkbox for publicise
$checkboxPublicise = new Zend_Form_Element_Checkbox("Publicise");
$checkboxPublicise->setLabel(_('Promote my station on Sourcefabric.org'))
$checkboxPublicise->setLabel(sprintf(_('Promote my station on %s'), COMPANY_SITE))
->setRequired(false)
->setDecorators(array('ViewHelper'))
->setValue(Application_Model_Preference::GetPublicise());
@ -142,11 +142,14 @@ class Application_Form_SupportSettings extends Zend_Form
)
));
$privacyPolicyAnchorOpen = "<a id='link_to_privacy' href='" . PRIVACY_POLICY_URL
. "' onclick='window.open(this.href); return false;'>";
// checkbox for privacy policy
$checkboxPrivacy = new Zend_Form_Element_Checkbox("Privacy");
$checkboxPrivacy->setLabel(
sprintf(_("By checking this box, I agree to Sourcefabric's %sprivacy policy%s."),
"<a id='link_to_privacy' href='http://www.sourcefabric.org/en/about/policy/' onclick='window.open(this.href); return false;'>",
sprintf(_('By checking this box, I agree to %s\'s %sprivacy policy%s.'),
COMPANY_NAME,
$privacyPolicyAnchorOpen,
"</a>"))
->setDecorators(array('ViewHelper'));
$this->addElement($checkboxPrivacy);

View file

@ -1,11 +1,11 @@
<?php echo $this->doctype() ?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php echo $this->headTitle() ?>
<?php echo $this->headLink() ?>
<?php echo $this->headScript() ?>
<?php echo isset($this->google_analytics)?$this->google_analytics:"" ?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php echo $this->headTitle() ?>
<?php echo $this->headLink() ?>
<?php echo $this->headScript() ?>
<?php echo isset($this->google_analytics)?$this->google_analytics:"" ?>
</head>
<body>
@ -13,9 +13,20 @@
<?php echo $this->layout()->content ?>
</div>
<div class="footer">
<?php echo sprintf(_("Airtime copyright &copy; Sourcefabric z.ú. All rights reserved.%s"
."Maintained and distributed under the GNU GPL v.3 by %sSourcefabric z.ú.%s"),
"<br>", "<a href='http://www.sourcefabric.org'>" ,"</a>");?>
<?php
$company = COMPANY_NAME . " " . COMPANY_SUFFIX;
$licenseSiteAnchor = "<a href='" . LICENSE_URL . "'>"
. LICENSE_VERSION
. "</a>";
$companySiteAnchor = "<a href='" . COMPANY_SITE_URL . "'>"
. $company
. "</a>";
echo sprintf(_('%1$s copyright &copy; %2$s All rights reserved.%3$s'
. 'Maintained and distributed under the %4$s by %5$s'),
PRODUCT_NAME, $company, "<br>",
$licenseSiteAnchor,
$companySiteAnchor);
?>
</div>
</body>

View file

@ -33,7 +33,8 @@ class Application_Model_Auth
$message = sprintf(_("Hi %s, \n\nClick this link to reset your password: "), $user->getDbLogin());
$message .= "{$e_link_protocol}://{$e_link_base}:{$e_link_port}{$e_link_path}";
$success = Application_Model_Email::send(_('Airtime Password Reset'), $message, $user->getDbEmail());
$str = sprintf(_('%s Password Reset'), PRODUCT_NAME);
$success = Application_Model_Email::send($str, $message, $user->getDbEmail());
return $success;
}

View file

@ -47,5 +47,22 @@ class Application_Model_Locale
textdomain($domain);
bind_textdomain_codeset($domain, $codeset);
}
/**
* We need this function for the case where a user has logged out, but
* has an airtime_locale cookie containing their locale setting.
*
* If the user does not have an airtime_locale cookie set, we default
* to the station locale.
*
* When the user logs in, the value set in the login form will be passed
* into the airtime_locale cookie. This cookie is also updated when
* a user updates their user settings.
*/
public static function getUserLocale() {
$request = Zend_Controller_Front::getInstance()->getRequest();
$locale = $request->getCookie('airtime_locale', Application_Model_Preference::GetLocale());
return $locale;
}
}

View file

@ -4,45 +4,44 @@ require_once 'Cache.php';
class Application_Model_Preference
{
private static function getUserId()
{
//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()) {
$userId = null;
}
else {
$auth = Zend_Auth::getInstance();
$userId = $auth->getIdentity()->id;
}
return $userId;
}
private static function getUserId()
{
//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()) {
$userId = null;
} else {
$auth = Zend_Auth::getInstance();
$userId = $auth->getIdentity()->id;
}
return $userId;
}
/**
*
* @param boolean $isUserValue is true when we are setting a value for the current user
*/
private static function setValue($key, $value, $isUserValue = false)
{
$cache = new Cache();
$cache = new Cache();
try {
$con = Propel::getConnection(CcPrefPeer::DATABASE_NAME);
$con->beginTransaction();
$userId = self::getUserId();
if ($isUserValue && is_null($userId)) {
throw new Exception("User id can't be null for a user preference {$key}.");
}
if ($isUserValue && is_null($userId))
throw new Exception("User id can't be null for a user preference {$key}.");
Application_Common_Database::prepareAndExecute("LOCK TABLE cc_pref");
//Check if key already exists
$sql = "SELECT COUNT(*) FROM cc_pref"
." WHERE keystr = :key";
." WHERE keystr = :key";
$paramMap = array();
$paramMap[':key'] = $key;
@ -64,37 +63,33 @@ class Application_Model_Preference
//this case should not happen.
throw new Exception("Invalid number of results returned. Should be ".
"0 or 1, but is '$result' instead");
}
elseif ($result == 1) {
} else if ($result == 1) {
// result found
if (!$isUserValue) {
// system pref
$sql = "UPDATE cc_pref"
." SET subjid = NULL, valstr = :value"
." WHERE keystr = :key";
}
else {
." SET subjid = NULL, valstr = :value"
." WHERE keystr = :key";
} else {
// user pref
$sql = "UPDATE cc_pref"
. " SET valstr = :value"
. " WHERE keystr = :key AND subjid = :id";
. " SET valstr = :value"
. " WHERE keystr = :key AND subjid = :id";
$paramMap[':id'] = $userId;
}
}
else {
} else {
// result not found
if (!$isUserValue) {
// system pref
$sql = "INSERT INTO cc_pref (keystr, valstr)"
." VALUES (:key, :value)";
}
else {
." VALUES (:key, :value)";
} else {
// user pref
$sql = "INSERT INTO cc_pref (subjid, keystr, valstr)"
." VALUES (:id, :key, :value)";
." VALUES (:id, :key, :value)";
$paramMap[':id'] = $userId;
}
@ -109,8 +104,7 @@ class Application_Model_Preference
$con);
$con->commit();
}
catch (Exception $e) {
} catch (Exception $e) {
$con->rollback();
header('HTTP/1.0 503 Service Unavailable');
Logging::info("Database error: ".$e->getMessage());
@ -118,26 +112,22 @@ class Application_Model_Preference
}
$cache->store($key, $value, $isUserValue, $userId);
//Logging::info("SAVING {$key} {$userId} into cache. = {$value}");
}
private static function getValue($key, $isUserValue = false)
{
$cache = new Cache();
$cache = new Cache();
try {
$userId = self::getUserId();
if ($isUserValue && is_null($userId)) {
throw new Exception("User id can't be null for a user preference.");
}
$userId = self::getUserId();
if ($isUserValue && is_null($userId))
throw new Exception("User id can't be null for a user preference.");
$res = $cache->fetch($key, $isUserValue, $userId);
if ($res !== false) {
//Logging::info("returning {$key} {$userId} from cache. = {$res}");
return $res;
}
// If the value is already cached, return it
$res = $cache->fetch($key, $isUserValue, $userId);
if ($res !== false) return $res;
//Check if key already exists
$sql = "SELECT COUNT(*) FROM cc_pref"
@ -147,7 +137,7 @@ class Application_Model_Preference
$paramMap[':key'] = $key;
//For user specific preference, check if id matches as well
if ($isUserValue) {
if ($isUserValue) {
$sql .= " AND subjid = :id";
$paramMap[':id'] = $userId;
}
@ -157,8 +147,7 @@ class Application_Model_Preference
//return an empty string if the result doesn't exist.
if ($result == 0) {
$res = "";
}
else {
} else {
$sql = "SELECT valstr FROM cc_pref"
." WHERE keystr = :key";
@ -248,53 +237,53 @@ class Application_Model_Preference
public static function SetDefaultCrossfadeDuration($duration)
{
self::setValue("default_crossfade_duration", $duration);
self::setValue("default_crossfade_duration", $duration);
}
public static function GetDefaultCrossfadeDuration()
{
$duration = self::getValue("default_crossfade_duration");
$duration = self::getValue("default_crossfade_duration");
if ($duration === "") {
// the default value of the fade is 00.5
return "0";
}
if ($duration === "") {
// the default value of the fade is 00.5
return "0";
}
return $duration;
return $duration;
}
public static function SetDefaultFadeIn($fade)
{
self::setValue("default_fade_in", $fade);
self::setValue("default_fade_in", $fade);
}
public static function GetDefaultFadeIn()
{
$fade = self::getValue("default_fade_in");
$fade = self::getValue("default_fade_in");
if ($fade === "") {
// the default value of the fade is 00.5
return "00.5";
}
if ($fade === "") {
// the default value of the fade is 00.5
return "00.5";
}
return $fade;
return $fade;
}
public static function SetDefaultFadeOut($fade)
{
self::setValue("default_fade_out", $fade);
self::setValue("default_fade_out", $fade);
}
public static function GetDefaultFadeOut()
{
$fade = self::getValue("default_fade_out");
$fade = self::getValue("default_fade_out");
if ($fade === "") {
// the default value of the fade is 00.5
return "00.5";
}
if ($fade === "") {
// the default value of the fade is 00.5
return "00.5";
}
return $fade;
return $fade;
}
public static function SetDefaultFade($fade)
@ -556,9 +545,8 @@ class Application_Model_Preference
{
// When a new user is created they will get the default timezone
// setting which the admin sets on preferences page
if (is_null($timezone)) {
if (is_null($timezone))
$timezone = self::GetDefaultTimezone();
}
self::setValue("user_timezone", $timezone, true);
}
@ -567,8 +555,7 @@ class Application_Model_Preference
$timezone = self::getValue("user_timezone", true);
if (!$timezone) {
return self::GetDefaultTimezone();
}
else {
} else {
return $timezone;
}
}
@ -580,8 +567,7 @@ class Application_Model_Preference
if (!is_null($userId)) {
return self::GetUserTimezone();
}
else {
} else {
return self::GetDefaultTimezone();
}
}
@ -612,9 +598,8 @@ class Application_Model_Preference
{
// When a new user is created they will get the default locale
// setting which the admin sets on preferences page
if (is_null($locale)) {
if (is_null($locale))
$locale = self::GetDefaultLocale();
}
self::setValue("user_locale", $locale, true);
}
@ -624,8 +609,7 @@ class Application_Model_Preference
if (!is_null($userId)) {
return self::GetUserLocale();
}
else {
} else {
return self::GetDefaultLocale();
}
}
@ -648,7 +632,7 @@ class Application_Model_Preference
public static function SetUniqueId($id)
{
self::setValue("uniqueId", $id);
self::setValue("uniqueId", $id);
}
public static function GetUniqueId()
@ -908,7 +892,7 @@ class Application_Model_Preference
public static function SetAirtimeVersion($version)
{
self::setValue("system_version", $version);
self::setValue("system_version", $version);
}
public static function GetAirtimeVersion()
@ -1404,12 +1388,11 @@ class Application_Model_Preference
return self::getValue("enable_replay_gain", false);
}
public static function getReplayGainModifier(){
public static function getReplayGainModifier() {
$rg_modifier = self::getValue("replay_gain_modifier");
if ($rg_modifier === "") {
if ($rg_modifier === "")
return "0";
}
return $rg_modifier;
}
@ -1420,19 +1403,19 @@ class Application_Model_Preference
}
public static function SetHistoryItemTemplate($value) {
self::setValue("history_item_template", $value);
self::setValue("history_item_template", $value);
}
public static function GetHistoryItemTemplate() {
return self::getValue("history_item_template");
return self::getValue("history_item_template");
}
public static function SetHistoryFileTemplate($value) {
self::setValue("history_file_template", $value);
self::setValue("history_file_template", $value);
}
public static function GetHistoryFileTemplate() {
return self::getValue("history_file_template");
return self::getValue("history_file_template");
}
public static function getDiskUsage()

View file

@ -1112,35 +1112,36 @@ class Application_Model_Scheduler
$removedItems = CcScheduleQuery::create()->findPks($scheduledIds);
//check to make sure all items selected are up to date
foreach ($removedItems as $removedItem) {
// This array is used to keep track of every show instance that was
// effected by the track deletion. It will be used later on to
// remove gaps in the schedule and adjust crossfade times.
$effectedInstanceIds = array();
foreach ($removedItems as $removedItem) {
$instance = $removedItem->getCcShowInstances($this->con);
$effectedInstanceIds[] = $instance->getDbId();
//check if instance is linked and if so get the schedule items
//for all linked instances so we can delete them too
if (!$cancelShow && $instance->getCcShow()->isLinked()) {
//returns all linked instances if linked
$ccShowInstances = $this->getInstances($instance->getDbId());
$instanceIds = array();
foreach ($ccShowInstances as $ccShowInstance) {
$instanceIds[] = $ccShowInstance->getDbId();
}
/*
* Find all the schedule items that are in the same position
* as the selected item by the user.
* The position of each track is the same across each linked instance
*/
$effectedInstanceIds = array_merge($effectedInstanceIds, $instanceIds);
// Delete the same track, represented by $removedItem, in
// each linked show instance.
$itemsToDelete = CcScheduleQuery::create()
->filterByDbPosition($removedItem->getDbPosition())
->filterByDbInstanceId($instanceIds, Criteria::IN)
->find();
foreach ($itemsToDelete as $item) {
if (!$removedItems->contains($item)) {
$removedItems->append($item);
}
}
->filterByDbId($removedItem->getDbId(), Criteria::NOT_EQUAL)
->delete($this->con);
}
//check to truncate the currently playing item instead of deleting it.
if ($removedItem->isCurrentItem($this->epochNow)) {
@ -1165,29 +1166,11 @@ class Application_Model_Scheduler
} else {
$removedItem->delete($this->con);
}
// update is_scheduled in cc_files but only if
// the file is not scheduled somewhere else
$fileId = $removedItem->getDbFileId();
// check if the removed item is scheduled somewhere else
$futureScheduledFiles = Application_Model_Schedule::getAllFutureScheduledFiles();
if (!is_null($fileId) && !in_array($fileId, $futureScheduledFiles)) {
$db_file = CcFilesQuery::create()->findPk($fileId, $this->con);
$db_file->setDbIsScheduled(false)->save($this->con);
}
}
Application_Model_StoredFile::updatePastFilesIsScheduled();
if ($adjustSched === true) {
//get the show instances of the shows we must adjust times for.
foreach ($removedItems as $item) {
$instance = $item->getDBInstanceId();
if (!in_array($instance, $showInstances)) {
$showInstances[] = $instance;
}
}
foreach ($showInstances as $instance) {
foreach ($effectedInstanceIds as $instance) {
$this->removeGaps($instance);
$this->calculateCrossfades($instance);
}
@ -1195,7 +1178,7 @@ class Application_Model_Scheduler
//update the status flag in cc_schedule.
$instances = CcShowInstancesQuery::create()
->filterByPrimaryKeys($showInstances)
->filterByPrimaryKeys($effectedInstanceIds)
->find($this->con);
foreach ($instances as $instance) {

View file

@ -1131,7 +1131,6 @@ SELECT s.name,
s.genre,
s.id,
si.id AS instance_id,
si.description AS instance_description,
si.record,
s.url,
s.image_path,
@ -1220,7 +1219,6 @@ SELECT si.starts AS start_timestamp,
s.description,
s.id,
si.id AS instance_id,
si.description AS instance_description,
si.record,
s.url,
s.image_path,
@ -1267,7 +1265,6 @@ SQL;
$results['previousShow'][0] = array(
"id" => $rows[$i-1]['id'],
"instance_id" => $rows[$i-1]['instance_id'],
"instance_description" => $rows[$i-1]['instance_description'],
"name" => $rows[$i-1]['name'],
"description" => $rows[$i-1]['description'],
"url" => $rows[$i-1]['url'],
@ -1286,7 +1283,6 @@ SQL;
$results['nextShow'][0] = array(
"id" => $rows[$i+1]['id'],
"instance_id" => $rows[$i+1]['instance_id'],
"instance_description" => $rows[$i+1]['instance_description'],
"name" => $rows[$i+1]['name'],
"description" => $rows[$i+1]['description'],
"url" => $rows[$i+1]['url'],
@ -1309,7 +1305,6 @@ SQL;
$results['nextShow'][0] = array(
"id" => $rows[$i]['id'],
"instance_id" => $rows[$i]['instance_id'],
"instance_description" => $rows[$i]['instance_description'],
"name" => $rows[$i]['name'],
"description" => $rows[$i]['description'],
"url" => $rows[$i]['url'],
@ -1329,7 +1324,6 @@ SQL;
$results['previousShow'][0] = array(
"id" => $rows[$previousShowIndex]['id'],
"instance_id" => $rows[$previousShowIndex]['instance_id'],
"instance_description" => $rows[$previousShowIndex]['instance_description'],
"name" => $rows[$previousShowIndex]['name'],
"description" => $rows[$previousShowIndex]['description'],
"start_timestamp" => $rows[$previousShowIndex]['start_timestamp'],

View file

@ -362,7 +362,8 @@ SQL;
{
$exists = false;
try {
$exists = file_exists($this->getFilePath());
$filePath = $this->getFilePath();
$exists = (file_exists($this->getFilePath()) && !is_dir($filePath));
} catch (Exception $e) {
return false;
}

View file

@ -1,8 +1,13 @@
<?php
class Rest_MediaController extends Zend_Rest_Controller
{
const MUSIC_DIRS_STOR_PK = 1;
const IMPORT_STATUS_SUCCESS = 0;
const IMPORT_STATUS_PENDING = 1;
const IMPORT_STATUS_FAILED = 2;
//fields that are not modifiable via our RESTful API
private static $blackList = array(
'id',
@ -72,42 +77,6 @@ class Rest_MediaController extends Zend_Rest_Controller
$this->fileNotFoundResponse();
}
}
public function clearAction()
{
if (!$this->verifyAuth(true, true))
{
return;
}
//set file_exists flag to false for every file
$con = Propel::getConnection(CcFilesPeer::DATABASE_NAME);
$selectCriteria = new Criteria();
$selectCriteria->add(CcFilesPeer::FILE_EXISTS, true);
$updateCriteria = new Criteria();
$updateCriteria->add(CcFilesPeer::FILE_EXISTS, false);
BasePeer::doUpdate($selectCriteria, $updateCriteria, $con);
//delete all files and directories under .../imported
$path = isset($_SERVER['AIRTIME_BASE']) ? $_SERVER['AIRTIME_BASE']."/srv/airtime/stor/imported/*" : "/srv/airtime/stor/imported/*";
exec("rm -rf $path");
//update disk_usage value in cc_pref
$musicDir = CcMusicDirsQuery::create()
->filterByType('stor')
->filterByExists(true)
->findOne();
$storPath = $musicDir->getDirectory();
$freeSpace = disk_free_space($storPath);
$totalSpace = disk_total_space($storPath);
Application_Model_Preference::setDiskUsage($totalSpace - $freeSpace);
$this->getResponse()
->setHttpResponseCode(200)
->appendBody("Library has been cleared");
}
public function getAction()
{
@ -210,6 +179,8 @@ class Rest_MediaController extends Zend_Rest_Controller
}
$file = CcFilesQuery::create()->findPk($id);
// Since we check for this value when deleting files, set it first
$file->setDbDirectory(self::MUSIC_DIRS_STOR_PK);
$requestData = json_decode($this->getRequest()->getRawBody(), true);
$whiteList = $this->removeBlacklistedFieldsFromRequestData($requestData);
@ -246,7 +217,7 @@ class Rest_MediaController extends Zend_Rest_Controller
->setHttpResponseCode(200)
->appendBody(json_encode(CcFiles::sanitizeResponse($file)));
} else {
$file->setDbImportStatus(2)->save();
$file->setDbImportStatus(self::IMPORT_STATUS_FAILED)->save();
$this->fileNotFoundResponse();
}
}
@ -257,7 +228,7 @@ class Rest_MediaController extends Zend_Rest_Controller
{
return;
}
$id = $this->getId();
if (!$id) {
return;

View file

@ -362,33 +362,22 @@ class Application_Service_ShowFormService
}
/**
*
* Before we send the form data in for validation, there
* are a few fields we may need to adjust first
*
* @param $formData
*/
public function preEditShowValidationCheck($formData)
{
$validateStartDate = true;
$validateStartTime = true;
// If the start date or time were disabled, don't validate them
$validateStartDate = $formData['start_date_disabled'] === "false";
$validateStartTime = $formData['start_time_disabled'] === "false";
//CcShowDays object of the show currently being edited
$currentShowDay = $this->ccShow->getFirstCcShowDay();
//DateTime object
$dt = $currentShowDay->getLocalStartDateAndTime();
if (!array_key_exists('add_show_start_date', $formData)) {
//Changing the start date was disabled, since the
//array key does not exist. We need to repopulate this entry from the db.
$formData['add_show_start_date'] = $dt->format("Y-m-d");
if (!array_key_exists('add_show_start_time', $formData)) {
$formData['add_show_start_time'] = $dt->format("H:i");
$validateStartTime = false;
}
$validateStartDate = false;
}
$formData['add_show_record'] = $currentShowDay->getDbRecord();
//if the show is repeating, set the start date to the next
@ -412,11 +401,9 @@ class Application_Service_ShowFormService
$ccShowInstance = CcShowInstancesQuery::create()
->filterByDbShowId($this->ccShow->getDbId())
->filterByDbModifiedInstance(false)
->filterByDbEnds(gmdate("Y-m-d H:i:s"), Criteria::GREATER_THAN)
->orderByDbStarts()
->limit(1)
->filterByDbStarts(gmdate("Y-m-d H:i:s"), Criteria::GREATER_THAN)
->findOne();
$starts = new DateTime($ccShowInstance->getDbStarts(), new DateTimeZone("UTC"));
$ends = new DateTime($ccShowInstance->getDbEnds(), new DateTimeZone("UTC"));
$showTimezone = $this->ccShow->getFirstCcShowDay()->getDbTimezone();
@ -427,6 +414,7 @@ class Application_Service_ShowFormService
return array($starts, $ends);
}
/**
*
* Validates show forms

View file

@ -2,19 +2,25 @@
<h2><?php echo _("About") ?></h2>
<p>
<?php
echo sprintf(_("%sAirtime%s %s, the open radio software for scheduling and remote station management. %s"),
"<a href='http://airtime.sourcefabric.org' target='_blank'>",
"</a>",
$this->airtime_version,
"<br />")
$productSiteAnchor = "<a href='" . PRODUCT_SITE_URL . "' target='_blank'>"
. PRODUCT_NAME
. "</a>";
echo sprintf(_('%1$s %2$s, the open radio software for scheduling and remote station management.'),
$productSiteAnchor,
$this->airtime_version)
?>
<br>© 2013
<br />
<br />© 2013
<?php
echo sprintf(_("%sSourcefabric%s z.ú Airtime is distributed under the %sGNU GPL v.3%s"),
"<a href='http://www.sourcefabric.org' target='_blank'>",
"</a>",
"<a href='http://www.gnu.org/licenses/gpl-3.0-standalone.html' target='_blank'>",
"</a>")
$companySiteAnchor = "<a href='" . COMPANY_SITE_URL . "' target='_blank'>"
. COMPANY_NAME . " " . COMPANY_SUFFIX
. "</a>";
$licenseAnchor = "<a href='" . LICENSE_URL . "' target='_blank'>"
. LICENSE_VERSION
. "</a>";
echo sprintf(_('%1$s %2$s is distributed under the %3$s'),
$companySiteAnchor, PRODUCT_NAME, $licenseAnchor)
?>
</p>
</div>

View file

@ -1,7 +1,7 @@
<div class="gray-logo"></div>
<div class="text-content">
<h2><?php echo _("Welcome to Airtime!") ?></h2>
<p><?php echo _("Here's how you can get started using Airtime to automate your broadcasts: ")?></p>
<h2><?php echo sprintf(_("Welcome to %s!"), PRODUCT_NAME) ?></h2>
<p><?php echo sprintf(_("Here's how you can get started using %s to automate your broadcasts: "), PRODUCT_NAME)?></p>
<ol>
<li><?php echo _("Begin by adding your files to the library using the 'Add Media' menu button. You can drag and drop your files to this window too.")?></li>
@ -10,8 +10,12 @@
<li><?php echo _("Select your media from the left pane and drag them to your show in the right pane."); ?></li>
</ol>
<p><strong><?php echo _("Then you're good to go!")?></strong><br />
<?php echo sprintf(_("For more detailed help, read the %suser manual%s."),
"<a href='http://www.sourcefabric.org/en/airtime/manuals/' target='_blank'>",
"</a>") ?></p>
<?php
$userManualAnchorOpen = "<a href='" . USER_MANUAL_URL . "' target='_blank'>";
echo sprintf(_("For more detailed help, read the %suser manual%s."),
$userManualAnchorOpen, "</a>")
?>
</p>
</div>

View file

@ -40,9 +40,8 @@
<?php foreach($watched_dirs as $watched_dir): ?>
<dd class="block-display selected-item">
<?php echo ($watched_dir->getExistsFlag())?"":"<span class='ui-icon-alert'><img src='/css/images/warning-icon.png'></span>"?><span id="folderPath" style="display:block; width:350px"><?php echo htmlspecialchars($watched_dir->getDirectory());?></span></span>
<span title="<?php echo _("Rescan watched directory (This is useful if it is network mount and may be out of sync with Airtime)")?>" class="ui-icon ui-icon-refresh"></span>
<span title="<?php echo sprintf(_("Rescan watched directory (This is useful if it is network mount and may be out of sync with %s)"), PRODUCT_NAME)?>" class="ui-icon ui-icon-refresh"></span>
<span title="<?php echo _("Remove watched directory")?>" class="ui-icon ui-icon-close"></span>
</dd>
<?php endforeach; ?>
<?php else: ?>

View file

@ -3,10 +3,10 @@
<fieldset>
<dl class="zend_form">
<dt class="block-display info-text">
<?php echo sprintf(_("Help Airtime improve by letting us know how you are using it. This info "
."will be collected regularly in order to enhance your user experience.%s"
."Click 'Yes, help Airtime' and we'll make sure the features you use are "
."constantly improving."), "<br /><br />") ?>
<?php echo sprintf(_('Help %1$s improve by letting us know how you are using it. This info '
.'will be collected regularly in order to enhance your user experience.%2$s'
.'Click \'Yes, help %1$s\' and we\'ll make sure the features you use are '
.'constantly improving.'), PRODUCT_NAME, "<br /><br />") ?>
</dt>
<dd id="SupportFeedback-element" class="block-display">
<label class="optional" for="SupportFeedback">
@ -22,10 +22,12 @@
<?php endif; ?>
</dd>
<dt class="block-display info-text">
<?php echo sprintf(_("Click the box below to advertise your station on %sSourcefabric.org%s."
." In order to promote your station, 'Send support feedback' must be enabled. This data will be collected in addition to the support feedback."),
"<a id='link_to_whos_using' href='http://sourcefabric.org/en/airtime/whosusing' onclick='window.open(this.href); return false'>",
"</a>")?>
<?php
$whosUsingAnchor = "<a id='link_to_whos_using' href='" . WHOS_USING_URL . "' onclick='window.open(this.href); return false'>"
. COMPANY_SITE
. "</a>";
echo sprintf(_("Click the box below to promote your station on %s."), $whosUsingAnchor)
?>
</dt>
<dd id="publicize-element" class="block-display">
<label class="optional" for="Publicise">
@ -175,7 +177,7 @@
<?php echo $this->element->getElement('Privacy')->getLabel() ?>
</label>
<?php }else{?>
<a id="link_to_terms_and_condition" href="http://www.sourcefabric.org/en/about/policy/" onclick="window.open(this.href); return false;"><?php echo _("Terms and Conditions") ?></a>
<a id="link_to_terms_and_condition" href="<?php echo TERMS_AND_CONDITIONS_URL ?>" onclick="window.open(this.href); return false;"><?php echo _("Terms and Conditions") ?></a>
<?php }?>
</div>
</form>

View file

@ -2,9 +2,10 @@
<dl class="zend_form">
<dd id="SupportFeedback-element" style="width:90%;">
<div class="info-text">
<?php echo sprintf(_("Help Airtime improve by letting Sourcefabric know how you are using it. This information"
<?php echo sprintf(_("Help %s improve by letting %s know how you are using it. This information"
." will be collected regularly in order to enhance your user experience.%s"
."Click the 'Send support feedback' box and we'll make sure the features you use are constantly improving."), "<br />")?>
."Click the 'Send support feedback' box and we'll make sure the features you use are constantly improving."),
PRODUCT_NAME, COMPANY_NAME, "<br />")?>
</div>
<label class="optional" for="SupportFeedback">
<?php echo $this->element->getElement('SupportFeedback') ?>
@ -20,9 +21,13 @@
</dd>
<dd id="publicize-element" style="width:90%;">
<div class="info-text">
<?php echo sprintf(_("Click the box below to promote your station on %sSourcefabric.org%s."),
"<a id='link_to_whos_using' href='http://www.sourcefabric.org/en/airtime/whosusing/' onclick='window.open(this.href); return false'>",
"</a>")?>
<?php
$whosUsingAnchor = "<a id='link_to_whos_using' href='" . WHOS_USING_URL . "' onclick='window.open(this.href); return false'>"
. COMPANY_SITE
. "</a>";
echo sprintf(_("Click the box below to promote your station on %s."), $whosUsingAnchor)
?>
</div>
<label class="optional" for="Publicise">
<?php echo $this->element->getElement('Publicise') ?>
@ -183,7 +188,7 @@
</ul>
<?php endif; ?>
<?php }else{?>
<a id="link_to_terms_and_condition" href="http://www.sourcefabric.org/en/about/policy/" onclick="window.open(this.href); return false;"><?php echo _("Sourcefabric Privacy Policy") ?></a>
<a id="link_to_terms_and_condition" href="<?php echo PRIVACY_POLICY_URL ?>" onclick="window.open(this.href); return false;"><?php echo _("Sourcefabric Privacy Policy") ?></a>
<?php }?>
</div>
</fieldset>

View file

@ -4,7 +4,7 @@
<div id="login" class="login-content clearfix">
<?php if(isset($this->demo) && $this->demo == 1){?>
<p style="font-weight:bold">
<?php echo _("Welcome to the Airtime demo! You can log in using the username 'admin' and the password 'admin'.")?>
<?php echo sprintf(_("Welcome to the %s demo! You can log in using the username 'admin' and the password 'admin'."), PRODUCT_NAME)?>
</p>
<?php }?>
<p class="light" style='<?php echo $this->error?"color:#902d2d;font-size:11px;padding:2px 4px;background:#c6b4b4;margin-bottom:2px;border:1px solid #c83f3f;":""?>'><?php echo $this->message; ?></p>

View file

@ -6,7 +6,7 @@
<div class="trial-box-calendar-gray"><?php echo _("days") ?></div>
</div>
<div class="trial-box-button">
<a title="<?php echo _("Purchase your copy of Airtime")?> href="https://account.sourcefabric.com/clientarea.php" target="_blank"><?php echo _("My Account") ?></a>
<a title="<?php echo sprintf(_("Purchase your copy of %s"), PRODUCT_NAME)?> href="https://account.sourcefabric.com/clientarea.php" target="_blank"><?php echo _("My Account") ?></a>
</div>
</div>
<?php }?>

View file

@ -1,19 +1,19 @@
<table width="60%" cellpadding="0" cellspacing="0" border="0" class="statustable">
<thead>
<tr class="ui-state-default strong">
<td><?php echo _("Service") ?></td>
<td><?php echo _("Status") ?></td>
<td><?php echo _("Uptime") ?></td>
<td><?php echo _("CPU") ?></td>
<td><?php echo _("Memory") ?></td>
<thead>
<tr class="ui-state-default strong">
<td><?php echo _("Service") ?></td>
<td><?php echo _("Status") ?></td>
<td><?php echo _("Uptime") ?></td>
<td><?php echo _("CPU") ?></td>
<td><?php echo _("Memory") ?></td>
</tr>
</thead>
<tbody>
<!--
<tr class="odd">
<td><?php echo _("Airtime Version") ?></td>
<td>1.9.3</td>
<td>&nbsp;</td>
<tr class="odd">
<td><?php echo sprintf(_("%s Version"), PRODUCT_NAME) ?></td>
<td>1.9.3</td>
<td>&nbsp;</td>
</tr>
-->
<?php $i=0; ?>
@ -26,8 +26,8 @@
<td></td>
</tr>
<?php endforeach; ?>
<tr id="partitions" class="even">
<th colspan="5"><?php echo _("Disk Space") ?></th>
<tr id="partitions" class="even">
<th colspan="5"><?php echo _("Disk Space") ?></th>
</tr>
</tbody>
</table>