removed wrong comments

This commit is contained in:
Rudi Grinberg 2012-07-16 10:31:00 -04:00
commit 3e24b71436
49 changed files with 2098 additions and 1978 deletions

View file

@ -5,6 +5,7 @@ class ApiController extends Zend_Controller_Action
public function init() public function init()
{ {
$this->checkAuth();
/* Initialize action controller here */ /* Initialize action controller here */
$context = $this->_helper->getHelper('contextSwitch'); $context = $this->_helper->getHelper('contextSwitch');
$context->addActionContext('version', 'json') $context->addActionContext('version', 'json')
@ -35,19 +36,19 @@ class ApiController extends Zend_Controller_Action
->addActionContext('reload-metadata-group', 'json') ->addActionContext('reload-metadata-group', 'json')
->initContext(); ->initContext();
} }
public function checkAuth() public function checkAuth()
{ {
global $CC_CONFIG; global $CC_CONFIG;
$api_key = $this->_getParam('api_key'); $api_key = $this->_getParam('api_key');
if (!in_array($api_key, $CC_CONFIG["apiKey"]) && if (!in_array($api_key, $CC_CONFIG["apiKey"]) &&
is_null(Zend_Auth::getInstance()->getStorage()->read())) { is_null(Zend_Auth::getInstance()->getStorage()->read())) {
header('HTTP/1.0 401 Unauthorized'); header('HTTP/1.0 401 Unauthorized');
print 'You are not allowed to access this resource.'; print 'You are not allowed to access this resource.';
exit; exit;
} }
} }
public function indexAction() public function indexAction()
@ -67,8 +68,6 @@ class ApiController extends Zend_Controller_Action
*/ */
public function versionAction() public function versionAction()
{ {
$this->checkAuth();
// disable the view and the layout // disable the view and the layout
$this->view->layout()->disableLayout(); $this->view->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true); $this->_helper->viewRenderer->setNoRender(true);
@ -81,13 +80,15 @@ class ApiController extends Zend_Controller_Action
* Sets up and send init values used in the Calendar. * Sets up and send init values used in the Calendar.
* This is only being used by schedule.js at the moment. * This is only being used by schedule.js at the moment.
*/ */
public function calendarInitAction(){ public function calendarInitAction()
{
$this->view->layout()->disableLayout(); $this->view->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true); $this->_helper->viewRenderer->setNoRender(true);
if(is_null(Zend_Auth::getInstance()->getStorage()->read())) { if (is_null(Zend_Auth::getInstance()->getStorage()->read())) {
header('HTTP/1.0 401 Unauthorized'); header('HTTP/1.0 401 Unauthorized');
print 'You are not allowed to access this resource.'; print 'You are not allowed to access this resource.';
return; return;
} }
@ -108,8 +109,6 @@ class ApiController extends Zend_Controller_Action
*/ */
public function getMediaAction() public function getMediaAction()
{ {
$this->checkAuth();
// disable the view and the layout // disable the view and the layout
$this->view->layout()->disableLayout(); $this->view->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true); $this->_helper->viewRenderer->setNoRender(true);
@ -117,14 +116,12 @@ class ApiController extends Zend_Controller_Action
$fileID = $this->_getParam("file"); $fileID = $this->_getParam("file");
$file_id = substr($fileID, 0, strpos($fileID, ".")); $file_id = substr($fileID, 0, strpos($fileID, "."));
if (ctype_alnum($file_id) && strlen($file_id) == 32) if (ctype_alnum($file_id) && strlen($file_id) == 32) {
{
$media = Application_Model_StoredFile::RecallByGunid($file_id); $media = Application_Model_StoredFile::RecallByGunid($file_id);
if ( $media != null ) if ($media != null) {
{
$filepath = $media->getFilePath(); $filepath = $media->getFilePath();
if(is_file($filepath)){ if (is_file($filepath)) {
$full_path = $media->getPropelOrm()->getDbFilepath(); $full_path = $media->getPropelOrm()->getDbFilepath();
$file_base_name = strrchr($full_path, '/'); $file_base_name = strrchr($full_path, '/');
@ -141,7 +138,7 @@ class ApiController extends Zend_Controller_Action
// http://www.php.net/manual/en/book.fileinfo.php // http://www.php.net/manual/en/book.fileinfo.php
$ext = pathinfo($fileID, PATHINFO_EXTENSION); $ext = pathinfo($fileID, PATHINFO_EXTENSION);
//Download user left clicks a track and selects Download. //Download user left clicks a track and selects Download.
if ("true" == $this->_getParam('download')){ if ("true" == $this->_getParam('download')) {
//path_info breaks up a file path into seperate pieces of informaiton. //path_info breaks up a file path into seperate pieces of informaiton.
//We just want the basename which is the file name with the path //We just want the basename which is the file name with the path
//information stripped away. We are using Content-Disposition to specify //information stripped away. We are using Content-Disposition to specify
@ -151,21 +148,22 @@ class ApiController extends Zend_Controller_Action
// I'm removing pathinfo() since it strips away UTF-8 characters. // I'm removing pathinfo() since it strips away UTF-8 characters.
// Using manualy parsing // Using manualy parsing
header('Content-Disposition: attachment; filename="'.$file_base_name.'"'); header('Content-Disposition: attachment; filename="'.$file_base_name.'"');
}else{ } else {
//user clicks play button for track and downloads it. //user clicks play button for track and downloads it.
header('Content-Disposition: inline; filename="'.$file_base_name.'"'); header('Content-Disposition: inline; filename="'.$file_base_name.'"');
} }
if (strtolower($ext) === 'mp3'){ if (strtolower($ext) === 'mp3') {
$this->smartReadFile($filepath, 'audio/mpeg'); $this->smartReadFile($filepath, 'audio/mpeg');
} else { } else {
$this->smartReadFile($filepath, 'audio/'.$ext); $this->smartReadFile($filepath, 'audio/'.$ext);
} }
exit; exit;
}else{ } else {
header ("HTTP/1.1 404 Not Found"); header ("HTTP/1.1 404 Not Found");
} }
} }
} }
return; return;
} }
@ -181,41 +179,33 @@ class ApiController extends Zend_Controller_Action
* @link https://groups.google.com/d/msg/jplayer/nSM2UmnSKKA/Hu76jDZS4xcJ * @link https://groups.google.com/d/msg/jplayer/nSM2UmnSKKA/Hu76jDZS4xcJ
* @link http://php.net/manual/en/function.readfile.php#86244 * @link http://php.net/manual/en/function.readfile.php#86244
*/ */
function smartReadFile($location, $mimeType = 'audio/mp3') public function smartReadFile($location, $mimeType = 'audio/mp3')
{ {
$this->checkAuth();
$size= filesize($location); $size= filesize($location);
$time= date('r', filemtime($location)); $time= date('r', filemtime($location));
$fm = @fopen($location, 'rb'); $fm = @fopen($location, 'rb');
if (!$fm) if (!$fm) {
{
header ("HTTP/1.1 505 Internal server error"); header ("HTTP/1.1 505 Internal server error");
return; return;
} }
$begin= 0; $begin= 0;
$end= $size - 1; $end= $size - 1;
if (isset($_SERVER['HTTP_RANGE'])) if (isset($_SERVER['HTTP_RANGE'])) {
{ if (preg_match('/bytes=\h*(\d+)-(\d*)[\D.*]?/i', $_SERVER['HTTP_RANGE'], $matches)) {
if (preg_match('/bytes=\h*(\d+)-(\d*)[\D.*]?/i', $_SERVER['HTTP_RANGE'], $matches))
{
$begin = intval($matches[1]); $begin = intval($matches[1]);
if (!empty($matches[2])) if (!empty($matches[2])) {
{
$end = intval($matches[2]); $end = intval($matches[2]);
} }
} }
} }
if (isset($_SERVER['HTTP_RANGE'])) if (isset($_SERVER['HTTP_RANGE'])) {
{
header('HTTP/1.1 206 Partial Content'); header('HTTP/1.1 206 Partial Content');
} } else {
else
{
header('HTTP/1.1 200 OK'); header('HTTP/1.1 200 OK');
} }
header("Content-Type: $mimeType"); header("Content-Type: $mimeType");
@ -223,8 +213,7 @@ class ApiController extends Zend_Controller_Action
header('Pragma: no-cache'); header('Pragma: no-cache');
header('Accept-Ranges: bytes'); header('Accept-Ranges: bytes');
header('Content-Length:' . (($end - $begin) + 1)); header('Content-Length:' . (($end - $begin) + 1));
if (isset($_SERVER['HTTP_RANGE'])) if (isset($_SERVER['HTTP_RANGE'])) {
{
header("Content-Range: bytes $begin-$end/$size"); header("Content-Range: bytes $begin-$end/$size");
} }
header("Content-Transfer-Encoding: binary"); header("Content-Transfer-Encoding: binary");
@ -238,8 +227,7 @@ class ApiController extends Zend_Controller_Action
$cur = $begin; $cur = $begin;
fseek($fm, $begin, 0); fseek($fm, $begin, 0);
while(!feof($fm) && $cur <= $end && (connection_status() == 0)) while (!feof($fm) && $cur <= $end && (connection_status() == 0)) {
{
echo fread($fm, min(1024 * 16, ($end - $cur) + 1)); echo fread($fm, min(1024 * 16, ($end - $cur) + 1));
$cur += 1024 * 16; $cur += 1024 * 16;
} }
@ -262,7 +250,7 @@ class ApiController extends Zend_Controller_Action
*/ */
public function liveInfoAction() public function liveInfoAction()
{ {
if (Application_Model_Preference::GetAllow3rdPartyApi()){ if (Application_Model_Preference::GetAllow3rdPartyApi()) {
// disable the view and the layout // disable the view and the layout
$this->view->layout()->disableLayout(); $this->view->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true); $this->_helper->viewRenderer->setNoRender(true);
@ -273,7 +261,7 @@ class ApiController extends Zend_Controller_Action
$request = $this->getRequest(); $request = $this->getRequest();
$type = $request->getParam('type'); $type = $request->getParam('type');
if($type == "endofday") { if ($type == "endofday") {
// make getNextShows use end of day // make getNextShows use end of day
$utcTimeEnd = Application_Common_DateHelper::GetDayEndTimestampInUtc(); $utcTimeEnd = Application_Common_DateHelper::GetDayEndTimestampInUtc();
$result = array("env"=>APPLICATION_ENV, $result = array("env"=>APPLICATION_ENV,
@ -281,10 +269,10 @@ class ApiController extends Zend_Controller_Action
"nextShow"=>Application_Model_Show::getNextShows($utcTimeNow, 5, $utcTimeEnd)); "nextShow"=>Application_Model_Show::getNextShows($utcTimeNow, 5, $utcTimeEnd));
Application_Model_Show::convertToLocalTimeZone($result["nextShow"], array("starts", "ends", "start_timestamp", "end_timestamp")); Application_Model_Show::convertToLocalTimeZone($result["nextShow"], array("starts", "ends", "start_timestamp", "end_timestamp"));
}else{ } else {
$limit = $request->getParam('limit'); $limit = $request->getParam('limit');
if($limit == "" || !is_numeric($limit)) { if ($limit == "" || !is_numeric($limit)) {
$limit = "5"; $limit = "5";
} }
@ -309,7 +297,7 @@ class ApiController extends Zend_Controller_Action
public function weekInfoAction() public function weekInfoAction()
{ {
if (Application_Model_Preference::GetAllow3rdPartyApi()){ if (Application_Model_Preference::GetAllow3rdPartyApi()) {
// disable the view and the layout // disable the view and the layout
$this->view->layout()->disableLayout(); $this->view->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true); $this->_helper->viewRenderer->setNoRender(true);
@ -321,7 +309,7 @@ class ApiController extends Zend_Controller_Action
$dow = array("monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"); $dow = array("monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday");
$result = array(); $result = array();
for ($i=0; $i<7; $i++){ for ($i=0; $i<7; $i++) {
$utcDayEnd = Application_Common_DateHelper::GetDayEndTimestamp($utcDayStart); $utcDayEnd = Application_Common_DateHelper::GetDayEndTimestamp($utcDayStart);
$shows = Application_Model_Show::getNextShows($utcDayStart, "0", $utcDayEnd); $shows = Application_Model_Show::getNextShows($utcDayStart, "0", $utcDayEnd);
$utcDayStart = $utcDayEnd; $utcDayStart = $utcDayEnd;
@ -342,8 +330,6 @@ class ApiController extends Zend_Controller_Action
public function scheduleAction() public function scheduleAction()
{ {
$this->checkAuth();
// disable the view and the layout // disable the view and the layout
$this->view->layout()->disableLayout(); $this->view->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true); $this->_helper->viewRenderer->setNoRender(true);
@ -354,8 +340,6 @@ class ApiController extends Zend_Controller_Action
public function notifyMediaItemStartPlayAction() public function notifyMediaItemStartPlayAction()
{ {
$this->checkAuth();
// disable the view and the layout // disable the view and the layout
$this->view->layout()->disableLayout(); $this->view->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true); $this->_helper->viewRenderer->setNoRender(true);
@ -368,8 +352,6 @@ class ApiController extends Zend_Controller_Action
public function recordedShowsAction() public function recordedShowsAction()
{ {
$this->checkAuth();
$today_timestamp = date("Y-m-d H:i:s"); $today_timestamp = date("Y-m-d H:i:s");
$now = new DateTime($today_timestamp); $now = new DateTime($today_timestamp);
$end_timestamp = $now->add(new DateInterval("PT2H")); $end_timestamp = $now->add(new DateInterval("PT2H"));
@ -386,15 +368,13 @@ class ApiController extends Zend_Controller_Action
$rows = Application_Model_Show::GetCurrentShow($today_timestamp); $rows = Application_Model_Show::GetCurrentShow($today_timestamp);
Application_Model_Show::convertToLocalTimeZone($rows, array("starts", "ends", "start_timestamp", "end_timestamp")); Application_Model_Show::convertToLocalTimeZone($rows, array("starts", "ends", "start_timestamp", "end_timestamp"));
if (count($rows) > 0){ if (count($rows) > 0) {
$this->view->is_recording = ($rows[0]['record'] == 1); $this->view->is_recording = ($rows[0]['record'] == 1);
} }
} }
public function uploadFileAction() public function uploadFileAction()
{ {
$this->checkAuth();
$upload_dir = ini_get("upload_tmp_dir"); $upload_dir = ini_get("upload_tmp_dir");
$tempFilePath = Application_Model_StoredFile::uploadFile($upload_dir); $tempFilePath = Application_Model_StoredFile::uploadFile($upload_dir);
$tempFileName = basename($tempFilePath); $tempFileName = basename($tempFilePath);
@ -402,15 +382,13 @@ class ApiController extends Zend_Controller_Action
$fileName = isset($_REQUEST["name"]) ? $_REQUEST["name"] : ''; $fileName = isset($_REQUEST["name"]) ? $_REQUEST["name"] : '';
$result = Application_Model_StoredFile::copyFileToStor($upload_dir, $fileName, $tempFileName); $result = Application_Model_StoredFile::copyFileToStor($upload_dir, $fileName, $tempFileName);
if (!is_null($result)){ if (!is_null($result)) {
die('{"jsonrpc" : "2.0", "error" : {"code": '.$result[code].', "message" : "'.$result[message].'"}}'); die('{"jsonrpc" : "2.0", "error" : {"code": '.$result[code].', "message" : "'.$result[message].'"}}');
} }
} }
public function uploadRecordedAction() public function uploadRecordedAction()
{ {
$this->checkAuth();
//this file id is the recording for this show instance. //this file id is the recording for this show instance.
$show_instance_id = $this->_getParam('showinstanceid'); $show_instance_id = $this->_getParam('showinstanceid');
$file_id = $this->_getParam('fileid'); $file_id = $this->_getParam('fileid');
@ -432,7 +410,7 @@ class ApiController extends Zend_Controller_Action
$show_genre = $show_inst->getGenre(); $show_genre = $show_inst->getGenre();
$show_start_time = Application_Common_DateHelper::ConvertToLocalDateTimeString($show_inst->getShowInstanceStart()); $show_start_time = Application_Common_DateHelper::ConvertToLocalDateTimeString($show_inst->getShowInstanceStart());
} catch (Exception $e){ } catch (Exception $e) {
//we've reached here probably because the show was //we've reached here probably because the show was
//cancelled, and therefore the show instance does not //cancelled, and therefore the show instance does not
//exist anymore (ShowInstance constructor threw this error). //exist anymore (ShowInstance constructor threw this error).
@ -456,8 +434,7 @@ class ApiController extends Zend_Controller_Action
$new_name[] = $filename_parts[count($filename_parts)-1]; $new_name[] = $filename_parts[count($filename_parts)-1];
$tmpTitle = implode("-", $new_name); $tmpTitle = implode("-", $new_name);
} } else {
else {
$tmpTitle = $file->getName(); $tmpTitle = $file->getName();
} }
@ -465,16 +442,14 @@ class ApiController extends Zend_Controller_Action
$file->setMetadataValue('MDATA_KEY_CREATOR', "Airtime Show Recorder"); $file->setMetadataValue('MDATA_KEY_CREATOR', "Airtime Show Recorder");
$file->setMetadataValue('MDATA_KEY_TRACKNUMBER', $show_instance_id); $file->setMetadataValue('MDATA_KEY_TRACKNUMBER', $show_instance_id);
if (!$showCanceled && Application_Model_Preference::GetAutoUploadRecordedShowToSoundcloud()) if (!$showCanceled && Application_Model_Preference::GetAutoUploadRecordedShowToSoundcloud()) {
{ $id = $file->getId();
$id = $file->getId();
$res = exec("/usr/lib/airtime/utils/soundcloud-uploader $id > /dev/null &"); $res = exec("/usr/lib/airtime/utils/soundcloud-uploader $id > /dev/null &");
} }
} }
public function mediaMonitorSetupAction() { public function mediaMonitorSetupAction()
$this->checkAuth(); {
// disable the view and the layout // disable the view and the layout
$this->view->layout()->disableLayout(); $this->view->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true); $this->_helper->viewRenderer->setNoRender(true);
@ -483,7 +458,7 @@ class ApiController extends Zend_Controller_Action
$watchedDirs = Application_Model_MusicDir::getWatchedDirs(); $watchedDirs = Application_Model_MusicDir::getWatchedDirs();
$watchedDirsPath = array(); $watchedDirsPath = array();
foreach($watchedDirs as $wd){ foreach ($watchedDirs as $wd) {
$watchedDirsPath[] = $wd->getDirectory(); $watchedDirsPath[] = $wd->getDirectory();
} }
$this->view->watched_dirs = $watchedDirsPath; $this->view->watched_dirs = $watchedDirsPath;
@ -491,9 +466,6 @@ class ApiController extends Zend_Controller_Action
public function dispatchMetaDataAction($md, $mode) public function dispatchMetaDataAction($md, $mode)
{ {
// NOTE : if you are using this method. Make sure you've checked authorization
// in its caller because this method does not do checkAuth
// update import timestamp
Application_Model_Preference::SetImportTimestamp(); Application_Model_Preference::SetImportTimestamp();
if ($mode == "create") { if ($mode == "create") {
$filepath = $md['MDATA_KEY_FILEPATH']; $filepath = $md['MDATA_KEY_FILEPATH'];
@ -568,9 +540,8 @@ class ApiController extends Zend_Controller_Action
return $file->getId(); return $file->getId();
} }
public function reloadMetadataGroupAction() { public function reloadMetadataGroupAction()
# reload-metadata-group {
$this->checkAuth();
$request = $this->getRequest(); $request = $this->getRequest();
//extract all file metadata params from the request. //extract all file metadata params from the request.
//The value is a json encoded hash that has all the information related to this action //The value is a json encoded hash that has all the information related to this action
@ -589,9 +560,8 @@ class ApiController extends Zend_Controller_Action
die(json_encode( array('successes' => 19, 'fails' => 123) )); die(json_encode( array('successes' => 19, 'fails' => 123) ));
} }
public function reloadMetadataAction() { public function reloadMetadataAction()
$this->checkAuth(); {
$request = $this->getRequest(); $request = $this->getRequest();
$mode = $request->getParam('mode'); $mode = $request->getParam('mode');
@ -616,21 +586,20 @@ class ApiController extends Zend_Controller_Action
$file = Application_Model_StoredFile::RecallByFilepath($filepath); $file = Application_Model_StoredFile::RecallByFilepath($filepath);
if (is_null($file)) { if (is_null($file)) {
$file = Application_Model_StoredFile::Insert($md); $file = Application_Model_StoredFile::Insert($md);
} } else {
else {
// path already exist // path already exist
if($file->getFileExistsFlag()){ if ($file->getFileExistsFlag()) {
// file marked as exists // file marked as exists
$this->view->error = "File already exists in Airtime."; $this->view->error = "File already exists in Airtime.";
return; return;
}else{ } else {
// file marked as not exists // file marked as not exists
$file->setFileExistsFlag(true); $file->setFileExistsFlag(true);
$file->setMetadata($md); $file->setMetadata($md);
} }
} }
} } else if ($mode == "modify") {
else if ($mode == "modify") {
$filepath = $md['MDATA_KEY_FILEPATH']; $filepath = $md['MDATA_KEY_FILEPATH'];
//$filepath = str_replace("\\", "", $filepath); //$filepath = str_replace("\\", "", $filepath);
$file = Application_Model_StoredFile::RecallByFilepath($filepath); $file = Application_Model_StoredFile::RecallByFilepath($filepath);
@ -638,65 +607,61 @@ class ApiController extends Zend_Controller_Action
//File is not in database anymore. //File is not in database anymore.
if (is_null($file)) { if (is_null($file)) {
$this->view->error = "File does not exist in Airtime."; $this->view->error = "File does not exist in Airtime.";
return; return;
} } else {
//Updating a metadata change. //Updating a metadata change.
else {
$file->setMetadata($md); $file->setMetadata($md);
} }
} } else if ($mode == "moved") {
else if ($mode == "moved") {
$md5 = $md['MDATA_KEY_MD5']; $md5 = $md['MDATA_KEY_MD5'];
$file = Application_Model_StoredFile::RecallByMd5($md5); $file = Application_Model_StoredFile::RecallByMd5($md5);
if (is_null($file)) { if (is_null($file)) {
$this->view->error = "File doesn't exist in Airtime."; $this->view->error = "File doesn't exist in Airtime.";
return; return;
} } else {
else {
$filepath = $md['MDATA_KEY_FILEPATH']; $filepath = $md['MDATA_KEY_FILEPATH'];
//$filepath = str_replace("\\", "", $filepath); //$filepath = str_replace("\\", "", $filepath);
$file->setFilePath($filepath); $file->setFilePath($filepath);
} }
} } else if ($mode == "delete") {
else if ($mode == "delete") {
$filepath = $md['MDATA_KEY_FILEPATH']; $filepath = $md['MDATA_KEY_FILEPATH'];
//$filepath = str_replace("\\", "", $filepath); //$filepath = str_replace("\\", "", $filepath);
$file = Application_Model_StoredFile::RecallByFilepath($filepath); $file = Application_Model_StoredFile::RecallByFilepath($filepath);
if (is_null($file)) { if (is_null($file)) {
$this->view->error = "File doesn't exist in Airtime."; $this->view->error = "File doesn't exist in Airtime.";
return; return;
} } else {
else {
$file->deleteByMediaMonitor(); $file->deleteByMediaMonitor();
} }
} } else if ($mode == "delete_dir") {
else if ($mode == "delete_dir") {
$filepath = $md['MDATA_KEY_FILEPATH']; $filepath = $md['MDATA_KEY_FILEPATH'];
//$filepath = str_replace("\\", "", $filepath); //$filepath = str_replace("\\", "", $filepath);
$files = Application_Model_StoredFile::RecallByPartialFilepath($filepath); $files = Application_Model_StoredFile::RecallByPartialFilepath($filepath);
foreach($files as $file){ foreach ($files as $file) {
$file->deleteByMediaMonitor(); $file->deleteByMediaMonitor();
} }
return; return;
} }
$this->view->id = $file->getId(); $this->view->id = $file->getId();
} }
public function listAllFilesAction() { public function listAllFilesAction()
$this->checkAuth(); {
$request = $this->getRequest(); $request = $this->getRequest();
$dir_id = $request->getParam('dir_id'); $dir_id = $request->getParam('dir_id');
$this->view->files = Application_Model_StoredFile::listAllFiles($dir_id); $this->view->files = Application_Model_StoredFile::listAllFiles($dir_id);
} }
public function listAllWatchedDirsAction() { public function listAllWatchedDirsAction()
$this->checkAuth(); {
$request = $this->getRequest(); $request = $this->getRequest();
$result = array(); $result = array();
@ -706,52 +671,47 @@ class ApiController extends Zend_Controller_Action
$result[$storDir->getId()] = $storDir->getDirectory(); $result[$storDir->getId()] = $storDir->getDirectory();
foreach ($arrWatchedDirs as $watchedDir){ foreach ($arrWatchedDirs as $watchedDir) {
$result[$watchedDir->getId()] = $watchedDir->getDirectory(); $result[$watchedDir->getId()] = $watchedDir->getDirectory();
} }
$this->view->dirs = $result; $this->view->dirs = $result;
} }
public function addWatchedDirAction() { public function addWatchedDirAction()
$this->checkAuth(); {
$request = $this->getRequest(); $request = $this->getRequest();
$path = base64_decode($request->getParam('path')); $path = base64_decode($request->getParam('path'));
$this->view->msg = Application_Model_MusicDir::addWatchedDir($path); $this->view->msg = Application_Model_MusicDir::addWatchedDir($path);
} }
public function removeWatchedDirAction() { public function removeWatchedDirAction()
$this->checkAuth(); {
$request = $this->getRequest(); $request = $this->getRequest();
$path = base64_decode($request->getParam('path')); $path = base64_decode($request->getParam('path'));
$this->view->msg = Application_Model_MusicDir::removeWatchedDir($path); $this->view->msg = Application_Model_MusicDir::removeWatchedDir($path);
} }
public function setStorageDirAction() { public function setStorageDirAction()
$this->checkAuth(); {
$request = $this->getRequest(); $request = $this->getRequest();
$path = base64_decode($request->getParam('path')); $path = base64_decode($request->getParam('path'));
$this->view->msg = Application_Model_MusicDir::setStorDir($path); $this->view->msg = Application_Model_MusicDir::setStorDir($path);
} }
public function getStreamSettingAction() { public function getStreamSettingAction()
$this->checkAuth(); {
$request = $this->getRequest(); $request = $this->getRequest();
$info = Application_Model_StreamSetting::getStreamSetting(); $info = Application_Model_StreamSetting::getStreamSetting();
$this->view->msg = $info; $this->view->msg = $info;
} }
public function statusAction() { public function statusAction()
$this->checkAuth(); {
$request = $this->getRequest(); $request = $this->getRequest();
$getDiskInfo = $request->getParam('diskinfo') == "true"; $getDiskInfo = $request->getParam('diskinfo') == "true";
@ -766,14 +726,15 @@ class ApiController extends Zend_Controller_Action
) )
); );
if ($getDiskInfo){ if ($getDiskInfo) {
$status["partitions"] = Application_Model_Systemstatus::GetDiskInfo(); $status["partitions"] = Application_Model_Systemstatus::GetDiskInfo();
} }
$this->view->status = $status; $this->view->status = $status;
} }
public function registerComponentAction(){ public function registerComponentAction()
{
$request = $this->getRequest(); $request = $this->getRequest();
$component = $request->getParam('component'); $component = $request->getParam('component');
@ -783,7 +744,8 @@ class ApiController extends Zend_Controller_Action
Application_Model_ServiceRegister::Register($component, $remoteAddr); Application_Model_ServiceRegister::Register($component, $remoteAddr);
} }
public function updateLiquidsoapStatusAction(){ public function updateLiquidsoapStatusAction()
{
$request = $this->getRequest(); $request = $this->getRequest();
$msg = $request->getParam('msg'); $msg = $request->getParam('msg');
@ -793,7 +755,8 @@ class ApiController extends Zend_Controller_Action
Application_Model_StreamSetting::setLiquidsoapError($stream_id, $msg, $boot_time); Application_Model_StreamSetting::setLiquidsoapError($stream_id, $msg, $boot_time);
} }
public function updateSourceStatusAction(){ public function updateSourceStatusAction()
{
$request = $this->getRequest(); $request = $this->getRequest();
$msg = $request->getParam('msg'); $msg = $request->getParam('msg');
@ -802,13 +765,13 @@ class ApiController extends Zend_Controller_Action
// on source disconnection sent msg to pypo to turn off the switch // on source disconnection sent msg to pypo to turn off the switch
// Added AutoTransition option // Added AutoTransition option
if($status == "false" && Application_Model_Preference::GetAutoTransition()){ if ($status == "false" && Application_Model_Preference::GetAutoTransition()) {
$data = array("sourcename"=>$sourcename, "status"=>"off"); $data = array("sourcename"=>$sourcename, "status"=>"off");
Application_Model_RabbitMq::SendMessageToPypo("switch_source", $data); Application_Model_RabbitMq::SendMessageToPypo("switch_source", $data);
Application_Model_Preference::SetSourceSwitchStatus($sourcename, "off"); Application_Model_Preference::SetSourceSwitchStatus($sourcename, "off");
Application_Model_LiveLog::SetEndTime($sourcename == 'scheduled_play'?'S':'L', Application_Model_LiveLog::SetEndTime($sourcename == 'scheduled_play'?'S':'L',
new DateTime("now", new DateTimeZone('UTC'))); new DateTime("now", new DateTimeZone('UTC')));
}elseif($status == "true" && Application_Model_Preference::GetAutoSwitch()){ } elseif ($status == "true" && Application_Model_Preference::GetAutoSwitch()) {
$data = array("sourcename"=>$sourcename, "status"=>"on"); $data = array("sourcename"=>$sourcename, "status"=>"on");
Application_Model_RabbitMq::SendMessageToPypo("switch_source", $data); Application_Model_RabbitMq::SendMessageToPypo("switch_source", $data);
Application_Model_Preference::SetSourceSwitchStatus($sourcename, "on"); Application_Model_Preference::SetSourceSwitchStatus($sourcename, "on");
@ -819,14 +782,13 @@ class ApiController extends Zend_Controller_Action
} }
// handles addition/deletion of mount point which watched dirs reside // handles addition/deletion of mount point which watched dirs reside
public function updateFileSystemMountAction(){ public function updateFileSystemMountAction()
$this->checkAuth(); {
$request = $this->getRequest(); $request = $this->getRequest();
$params = $request->getParams(); $params = $request->getParams();
$added_list = empty($params['added_dir'])?array():explode(',',$params['added_dir']); $added_list = empty($params['added_dir'])?array():explode(',', $params['added_dir']);
$removed_list = empty($params['removed_dir'])?array():explode(',',$params['removed_dir']); $removed_list = empty($params['removed_dir'])?array():explode(',', $params['removed_dir']);
// get all watched dirs // get all watched dirs
$watched_dirs = Application_Model_MusicDir::getWatchedDirs(null, null); $watched_dirs = Application_Model_MusicDir::getWatchedDirs(null, null);
@ -839,10 +801,10 @@ class ApiController extends Zend_Controller_Action
// if mount path itself was watched // if mount path itself was watched
if ($dirPath == $ad) { if ($dirPath == $ad) {
Application_Model_MusicDir::addWatchedDir($dirPath, false); Application_Model_MusicDir::addWatchedDir($dirPath, false);
} else if(substr($dirPath, 0, strlen($ad)) === $ad && $dir->getExistsFlag() == false) { } else if (substr($dirPath, 0, strlen($ad)) === $ad && $dir->getExistsFlag() == false) {
// if dir contains any dir in removed_list( if watched dir resides on new mounted path ) // if dir contains any dir in removed_list( if watched dir resides on new mounted path )
Application_Model_MusicDir::addWatchedDir($dirPath, false); Application_Model_MusicDir::addWatchedDir($dirPath, false);
} else if (substr($ad, 0, strlen($dirPath)) === $dirPath) { } elseif (substr($ad, 0, strlen($dirPath)) === $dirPath) {
// is new mount point within the watched dir? // is new mount point within the watched dir?
// pyinotify doesn't notify anyhing in this case, so we add this mount point as // pyinotify doesn't notify anyhing in this case, so we add this mount point as
// watched dir // watched dir
@ -851,32 +813,31 @@ class ApiController extends Zend_Controller_Action
} }
} }
} }
foreach( $removed_list as $rd) { foreach ($removed_list as $rd) {
$rd .= '/'; $rd .= '/';
foreach ($watched_dirs as $dir) { foreach ($watched_dirs as $dir) {
$dirPath = $dir->getDirectory(); $dirPath = $dir->getDirectory();
// if dir contains any dir in removed_list( if watched dir resides on new mounted path ) // if dir contains any dir in removed_list( if watched dir resides on new mounted path )
if (substr($dirPath, 0, strlen($rd)) === $rd && $dir->getExistsFlag() == true) { if (substr($dirPath, 0, strlen($rd)) === $rd && $dir->getExistsFlag() == true) {
Application_Model_MusicDir::removeWatchedDir($dirPath, false); Application_Model_MusicDir::removeWatchedDir($dirPath, false);
} else if (substr($rd, 0, strlen($dirPath)) === $dirPath) { } elseif (substr($rd, 0, strlen($dirPath)) === $dirPath) {
// is new mount point within the watched dir? // is new mount point within the watched dir?
// pyinotify doesn't notify anyhing in this case, so we walk through all files within // pyinotify doesn't notify anyhing in this case, so we walk through all files within
// this watched dir in DB and mark them deleted. // this watched dir in DB and mark them deleted.
// In case of h) of use cases, due to pyinotify behaviour of noticing mounted dir, we need to // In case of h) of use cases, due to pyinotify behaviour of noticing mounted dir, we need to
// compare agaisnt all files in cc_files table // compare agaisnt all files in cc_files table
$watchDir = Application_Model_MusicDir::getDirByPath($rd); $watchDir = Application_Model_MusicDir::getDirByPath($rd);
// get all the files that is under $dirPath // get all the files that is under $dirPath
$files = Application_Model_StoredFile::listAllFiles($dir->getId(), true); $files = Application_Model_StoredFile::listAllFiles($dir->getId(), true);
foreach ($files as $f) { foreach ($files as $f) {
// if the file is from this mount // if the file is from this mount
if (substr( $f->getFilePath(),0,strlen($rd) ) === $rd) { if (substr($f->getFilePath(), 0, strlen($rd)) === $rd) {
$f->delete(); $f->delete();
} }
} }
if ($watchDir) {
if($watchDir) {
Application_Model_MusicDir::removeWatchedDir($rd, false); Application_Model_MusicDir::removeWatchedDir($rd, false);
} }
} }
@ -887,8 +848,6 @@ class ApiController extends Zend_Controller_Action
// handles case where watched dir is missing // handles case where watched dir is missing
public function handleWatchedDirMissingAction() public function handleWatchedDirMissingAction()
{ {
$this->checkAuth();
$request = $this->getRequest(); $request = $this->getRequest();
$dir = base64_decode($request->getParam('dir')); $dir = base64_decode($request->getParam('dir'));
@ -900,8 +859,6 @@ class ApiController extends Zend_Controller_Action
* out a message to pypo that a potential change has been made. */ * out a message to pypo that a potential change has been made. */
public function rabbitmqDoPushAction() public function rabbitmqDoPushAction()
{ {
$this->checkAuth();
$request = $this->getRequest(); $request = $this->getRequest();
Logging::log("Notifying RabbitMQ to send message to pypo"); Logging::log("Notifying RabbitMQ to send message to pypo");
@ -924,8 +881,6 @@ class ApiController extends Zend_Controller_Action
/* This is used but Liquidsoap to check authentication of live streams*/ /* This is used but Liquidsoap to check authentication of live streams*/
public function checkLiveStreamAuthAction() public function checkLiveStreamAuthAction()
{ {
$this->checkAuth();
$request = $this->getRequest(); $request = $this->getRequest();
$username = $request->getParam('username'); $username = $request->getParam('username');
@ -934,7 +889,7 @@ class ApiController extends Zend_Controller_Action
if ($djtype == 'master') { if ($djtype == 'master') {
//check against master //check against master
if ($username == Application_Model_Preference::GetLiveSteamMasterUsername() if ($username == Application_Model_Preference::GetLiveSteamMasterUsername()
&& $password == Application_Model_Preference::GetLiveSteamMasterPassword()) { && $password == Application_Model_Preference::GetLiveSteamMasterPassword()) {
$this->view->msg = true; $this->view->msg = true;
} else { } else {
@ -960,8 +915,9 @@ class ApiController extends Zend_Controller_Action
if ($CcShow->getDbLiveStreamUsingAirtimeAuth()) { if ($CcShow->getDbLiveStreamUsingAirtimeAuth()) {
foreach ($hosts_ids as $host) { foreach ($hosts_ids as $host) {
$h = new Application_Model_User($host['subjs_id']); $h = new Application_Model_User($host['subjs_id']);
if($username == $h->getLogin() && md5($password) == $h->getPassword()) { if ($username == $h->getLogin() && md5($password) == $h->getPassword()) {
$this->view->msg = true; $this->view->msg = true;
return; return;
} }
} }
@ -982,21 +938,42 @@ class ApiController extends Zend_Controller_Action
} }
} }
} }
/* This action is for use by our dev scripts, that make /* This action is for use by our dev scripts, that make
* a change to the database and we want rabbitmq to send * a change to the database and we want rabbitmq to send
* out a message to pypo that a potential change has been made. */ * out a message to pypo that a potential change has been made. */
public function getFilesWithoutReplayGainAction() public function getFilesWithoutReplayGainAction()
{ {
$this->checkAuth();
// disable the view and the layout // disable the view and the layout
$this->view->layout()->disableLayout(); $this->view->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
$dir_id = $this->_getParam('dir_id'); $dir_id = $this->_getParam('dir_id');
//connect to db and get get sql //connect to db and get get sql
$this->view->rows = Application_Model_StoredFile::listAllFiles2($dir_id, 0); $rows = Application_Model_StoredFile::listAllFiles2($dir_id, 100);
echo json_encode($rows);
}
public function updateReplayGainValueAction()
{
$this->checkAuth();
// disable layout
$this->view->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
$request = $this->getRequest();
$data = json_decode($request->getParam('data'));
foreach ($data as $pair) {
list($id, $gain) = $pair;
$file = Application_Model_StoredFile::Recall($p_id = $id)->getPropelOrm();
Logging::log("Setting $gain for file id $id");
$file->setDbReplayGain($gain);
$file->save();
}
} }
} }

View file

@ -36,7 +36,7 @@ class AudiopreviewController extends Zend_Controller_Action
$this->_helper->layout->setLayout('audioPlayer'); $this->_helper->layout->setLayout('audioPlayer');
$logo = Application_Model_Preference::GetStationLogo(); $logo = Application_Model_Preference::GetStationLogo();
if($logo){ if ($logo) {
$this->view->logo = "data:image/png;base64,$logo"; $this->view->logo = "data:image/png;base64,$logo";
} else { } else {
$this->view->logo = "$baseUrl/css/images/airtime_logo_jp.png"; $this->view->logo = "$baseUrl/css/images/airtime_logo_jp.png";
@ -70,7 +70,7 @@ class AudiopreviewController extends Zend_Controller_Action
$this->_helper->layout->setLayout('audioPlayer'); $this->_helper->layout->setLayout('audioPlayer');
$logo = Application_Model_Preference::GetStationLogo(); $logo = Application_Model_Preference::GetStationLogo();
if($logo){ if ($logo) {
$this->view->logo = "data:image/png;base64,$logo"; $this->view->logo = "data:image/png;base64,$logo";
} else { } else {
$this->view->logo = "$baseUrl/css/images/airtime_logo_jp.png"; $this->view->logo = "$baseUrl/css/images/airtime_logo_jp.png";
@ -84,21 +84,22 @@ class AudiopreviewController extends Zend_Controller_Action
/** /**
*Function will load and return the contents of the requested playlist. *Function will load and return the contents of the requested playlist.
*/ */
public function getPlaylistAction(){ public function getPlaylistAction()
{
// disable the view and the layout // disable the view and the layout
$this->view->layout()->disableLayout(); $this->view->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true); $this->_helper->viewRenderer->setNoRender(true);
$playlistID = $this->_getParam('playlistID'); $playlistID = $this->_getParam('playlistID');
if (!isset($playlistID)){ if (!isset($playlistID)) {
return; return;
} }
$pl = new Application_Model_Playlist($playlistID); $pl = new Application_Model_Playlist($playlistID);
$result = Array(); $result = Array();
foreach ( $pl->getContents(true) as $track ){ foreach ( $pl->getContents(true) as $track ) {
$elementMap = array( 'element_title' => isset($track['CcFiles']['track_title'])?$track['CcFiles']['track_title']:"", $elementMap = array( 'element_title' => isset($track['CcFiles']['track_title'])?$track['CcFiles']['track_title']:"",
'element_artist' => isset($track['CcFiles']['artist_name'])?$track['CcFiles']['artist_name']:"", 'element_artist' => isset($track['CcFiles']['artist_name'])?$track['CcFiles']['artist_name']:"",
@ -106,9 +107,9 @@ class AudiopreviewController extends Zend_Controller_Action
'element_position' => isset($track['position'])?$track['position']:"", 'element_position' => isset($track['position'])?$track['position']:"",
); );
$fileExtension = pathinfo($track['CcFiles']['filepath'], PATHINFO_EXTENSION); $fileExtension = pathinfo($track['CcFiles']['filepath'], PATHINFO_EXTENSION);
if (strtolower($fileExtension) === 'mp3'){ if (strtolower($fileExtension) === 'mp3') {
$elementMap['element_mp3'] = $track['CcFiles']['gunid'].'.'.$fileExtension; $elementMap['element_mp3'] = $track['CcFiles']['gunid'].'.'.$fileExtension;
} else if(strtolower($fileExtension) === 'ogg') { } elseif (strtolower($fileExtension) === 'ogg') {
$elementMap['element_oga'] = $track['CcFiles']['gunid'].'.'.$fileExtension; $elementMap['element_oga'] = $track['CcFiles']['gunid'].'.'.$fileExtension;
} else { } else {
//the media was neither mp3 or ogg //the media was neither mp3 or ogg
@ -141,7 +142,7 @@ class AudiopreviewController extends Zend_Controller_Action
$this->_helper->layout->setLayout('audioPlayer'); $this->_helper->layout->setLayout('audioPlayer');
$logo = Application_Model_Preference::GetStationLogo(); $logo = Application_Model_Preference::GetStationLogo();
if ($logo){ if ($logo) {
$this->view->logo = "data:image/png;base64,$logo"; $this->view->logo = "data:image/png;base64,$logo";
} else { } else {
$this->view->logo = "$baseUrl/css/images/airtime_logo_jp.png"; $this->view->logo = "$baseUrl/css/images/airtime_logo_jp.png";
@ -164,14 +165,14 @@ class AudiopreviewController extends Zend_Controller_Action
$showID = $this->_getParam('showID'); $showID = $this->_getParam('showID');
if (!isset($showID)){ if (!isset($showID)) {
return; return;
} }
$showInstance = new Application_Model_ShowInstance($showID); $showInstance = new Application_Model_ShowInstance($showID);
$result = array(); $result = array();
$position = 0; $position = 0;
foreach ($showInstance->getShowListContent() as $track){ foreach ($showInstance->getShowListContent() as $track) {
$elementMap = array( $elementMap = array(
'element_title' => isset($track['track_title']) ? $track['track_title'] : "", 'element_title' => isset($track['track_title']) ? $track['track_title'] : "",
@ -181,9 +182,9 @@ class AudiopreviewController extends Zend_Controller_Action
); );
$fileExtension = pathinfo($track['filepath'], PATHINFO_EXTENSION); $fileExtension = pathinfo($track['filepath'], PATHINFO_EXTENSION);
if (strtolower($fileExtension) === 'mp3'){ if (strtolower($fileExtension) === 'mp3') {
$elementMap['element_mp3'] = $track['gunid'].'.'.$fileExtension; $elementMap['element_mp3'] = $track['gunid'].'.'.$fileExtension;
} else if(strtolower($fileExtension) === 'ogg') { } elseif (strtolower($fileExtension) === 'ogg') {
$elementMap['element_oga'] = $track['gunid'].'.'.$fileExtension; $elementMap['element_oga'] = $track['gunid'].'.'.$fileExtension;
} else { } else {
//the media was neither mp3 or ogg //the media was neither mp3 or ogg

View file

@ -16,7 +16,8 @@ class DashboardController extends Zend_Controller_Action
// action body // action body
} }
public function disconnectSourceAction(){ public function disconnectSourceAction()
{
$request = $this->getRequest(); $request = $this->getRequest();
$sourcename = $request->getParam('sourcename'); $sourcename = $request->getParam('sourcename');
@ -29,19 +30,20 @@ class DashboardController extends Zend_Controller_Action
$source_connected = Application_Model_Preference::GetSourceStatus($sourcename); $source_connected = Application_Model_Preference::GetSourceStatus($sourcename);
if($user->canSchedule($show_id) && $source_connected){ if ($user->canSchedule($show_id) && $source_connected) {
$data = array("sourcename"=>$sourcename); $data = array("sourcename"=>$sourcename);
Application_Model_RabbitMq::SendMessageToPypo("disconnect_source", $data); Application_Model_RabbitMq::SendMessageToPypo("disconnect_source", $data);
}else{ } else {
if($source_connected){ if ($source_connected) {
$this->view->error = "You don't have permission to disconnect source."; $this->view->error = "You don't have permission to disconnect source.";
}else{ } else {
$this->view->error = "There is no source connected to this input."; $this->view->error = "There is no source connected to this input.";
} }
} }
} }
public function switchSourceAction(){ public function switchSourceAction()
{
$request = $this->getRequest(); $request = $this->getRequest();
$sourcename = $this->_getParam('sourcename'); $sourcename = $this->_getParam('sourcename');
$current_status = $this->_getParam('status'); $current_status = $this->_getParam('status');
@ -53,24 +55,24 @@ class DashboardController extends Zend_Controller_Action
$show_id = isset($show[0]['id'])?$show[0]['id']:0; $show_id = isset($show[0]['id'])?$show[0]['id']:0;
$source_connected = Application_Model_Preference::GetSourceStatus($sourcename); $source_connected = Application_Model_Preference::GetSourceStatus($sourcename);
if($user->canSchedule($show_id) && ($source_connected || $sourcename == 'scheduled_play' || $current_status == "on")){ if ($user->canSchedule($show_id) && ($source_connected || $sourcename == 'scheduled_play' || $current_status == "on")) {
$change_status_to = "on"; $change_status_to = "on";
if(strtolower($current_status) == "on"){ if (strtolower($current_status) == "on") {
$change_status_to = "off"; $change_status_to = "off";
} }
$data = array("sourcename"=>$sourcename, "status"=>$change_status_to); $data = array("sourcename"=>$sourcename, "status"=>$change_status_to);
Application_Model_RabbitMq::SendMessageToPypo("switch_source", $data); Application_Model_RabbitMq::SendMessageToPypo("switch_source", $data);
if(strtolower($current_status) == "on"){ if (strtolower($current_status) == "on") {
Application_Model_Preference::SetSourceSwitchStatus($sourcename, "off"); Application_Model_Preference::SetSourceSwitchStatus($sourcename, "off");
$this->view->status = "OFF"; $this->view->status = "OFF";
//Log table updates //Log table updates
Application_Model_LiveLog::SetEndTime($sourcename == 'scheduled_play'?'S':'L', Application_Model_LiveLog::SetEndTime($sourcename == 'scheduled_play'?'S':'L',
new DateTime("now", new DateTimeZone('UTC'))); new DateTime("now", new DateTimeZone('UTC')));
}else{ } else {
Application_Model_Preference::SetSourceSwitchStatus($sourcename, "on"); Application_Model_Preference::SetSourceSwitchStatus($sourcename, "on");
$this->view->status = "ON"; $this->view->status = "ON";
@ -78,22 +80,21 @@ class DashboardController extends Zend_Controller_Action
Application_Model_LiveLog::SetNewLogTime($sourcename == 'scheduled_play'?'S':'L', Application_Model_LiveLog::SetNewLogTime($sourcename == 'scheduled_play'?'S':'L',
new DateTime("now", new DateTimeZone('UTC'))); new DateTime("now", new DateTimeZone('UTC')));
} }
} } else {
else{ if ($source_connected) {
if($source_connected){
$this->view->error = "You don't have permission to switch source."; $this->view->error = "You don't have permission to switch source.";
}else{ } else {
if($sourcename == 'scheduled_play'){ if ($sourcename == 'scheduled_play') {
$this->view->error = "You don't have permission to disconnect source."; $this->view->error = "You don't have permission to disconnect source.";
}else{ } else {
$this->view->error = "There is no source connected to this input."; $this->view->error = "There is no source connected to this input.";
} }
} }
} }
} }
public function switchOffSource(){ public function switchOffSource()
{
} }
public function streamPlayerAction() public function streamPlayerAction()
@ -107,7 +108,7 @@ class DashboardController extends Zend_Controller_Action
$this->_helper->layout->setLayout('bare'); $this->_helper->layout->setLayout('bare');
$logo = Application_Model_Preference::GetStationLogo(); $logo = Application_Model_Preference::GetStationLogo();
if($logo){ if ($logo) {
$this->view->logo = "data:image/png;base64,$logo"; $this->view->logo = "data:image/png;base64,$logo";
} else { } else {
$this->view->logo = "$baseUrl/css/images/airtime_logo_jp.png"; $this->view->logo = "$baseUrl/css/images/airtime_logo_jp.png";
@ -125,4 +126,3 @@ class DashboardController extends Zend_Controller_Action
} }
} }

View file

@ -43,6 +43,7 @@ class ErrorController extends Zend_Controller_Action
return false; return false;
} }
$log = $bootstrap->getResource('Log'); $log = $bootstrap->getResource('Log');
return $log; return $log;
} }
@ -51,8 +52,4 @@ class ErrorController extends Zend_Controller_Action
// action body // action body
} }
} }

View file

@ -19,10 +19,3 @@ class IndexController extends Zend_Controller_Action
} }
} }

View file

@ -40,7 +40,7 @@ class LibraryController extends Zend_Controller_Action
$userInfo = Zend_Auth::getInstance()->getStorage()->read(); $userInfo = Zend_Auth::getInstance()->getStorage()->read();
$user = new Application_Model_User($userInfo->id); $user = new Application_Model_User($userInfo->id);
//Open a jPlayer window and play the audio clip. //Open a jPlayer window and play the audio clip.
$menu["play"] = array("name"=> "Preview", "icon" => "play"); $menu["play"] = array("name"=> "Preview", "icon" => "play");
$isAdminOrPM = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER)); $isAdminOrPM = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER));
@ -52,7 +52,7 @@ class LibraryController extends Zend_Controller_Action
if (isset($this->pl_sess->id) && $screen == "playlist") { if (isset($this->pl_sess->id) && $screen == "playlist") {
// if the user is not admin or pm, check the creator and see if this person owns the playlist // if the user is not admin or pm, check the creator and see if this person owns the playlist
$playlist = new Application_Model_Playlist($this->pl_sess->id); $playlist = new Application_Model_Playlist($this->pl_sess->id);
if($isAdminOrPM || $playlist->getCreatorId() == $user->getId()){ if ($isAdminOrPM || $playlist->getCreatorId() == $user->getId()) {
$menu["pl_add"] = array("name"=> "Add to Playlist", "icon" => "add-playlist", "icon" => "copy"); $menu["pl_add"] = array("name"=> "Add to Playlist", "icon" => "add-playlist", "icon" => "copy");
} }
} }
@ -63,44 +63,41 @@ class LibraryController extends Zend_Controller_Action
$url = $file->getRelativeFileUrl($baseUrl).'/download/true'; $url = $file->getRelativeFileUrl($baseUrl).'/download/true';
$menu["download"] = array("name" => "Download", "icon" => "download", "url" => $url); $menu["download"] = array("name" => "Download", "icon" => "download", "url" => $url);
} } elseif ($type === "playlist") {
else if ($type === "playlist") {
$playlist = new Application_Model_Playlist($id); $playlist = new Application_Model_Playlist($id);
if ($this->pl_sess->id !== $id && $screen == "playlist") { if ($this->pl_sess->id !== $id && $screen == "playlist") {
if($isAdminOrPM || $playlist->getCreatorId() == $user->getId()){ if ($isAdminOrPM || $playlist->getCreatorId() == $user->getId()) {
$menu["edit"] = array("name"=> "Edit", "icon" => "edit"); $menu["edit"] = array("name"=> "Edit", "icon" => "edit");
} }
} }
if($isAdminOrPM || $playlist->getCreatorId() == $user->getId()){ if ($isAdminOrPM || $playlist->getCreatorId() == $user->getId()) {
$menu["del"] = array("name"=> "Delete", "icon" => "delete", "url" => "/library/delete"); $menu["del"] = array("name"=> "Delete", "icon" => "delete", "url" => "/library/delete");
} }
} }
//SOUNDCLOUD MENU OPTIONS //SOUNDCLOUD MENU OPTIONS
if ($type === "audioclip" && Application_Model_Preference::GetUploadToSoundcloudOption()) { if ($type === "audioclip" && Application_Model_Preference::GetUploadToSoundcloudOption()) {
//create a menu separator //create a menu separator
$menu["sep1"] = "-----------"; $menu["sep1"] = "-----------";
//create a sub menu for Soundcloud actions. //create a sub menu for Soundcloud actions.
$menu["soundcloud"] = array("name" => "Soundcloud", "icon" => "soundcloud", "items" => array()); $menu["soundcloud"] = array("name" => "Soundcloud", "icon" => "soundcloud", "items" => array());
$scid = $file->getSoundCloudId(); $scid = $file->getSoundCloudId();
if ($scid > 0){ if ($scid > 0) {
$url = $file->getSoundCloudLinkToFile(); $url = $file->getSoundCloudLinkToFile();
$menu["soundcloud"]["items"]["view"] = array("name" => "View on Soundcloud", "icon" => "soundcloud", "url" => $url); $menu["soundcloud"]["items"]["view"] = array("name" => "View on Soundcloud", "icon" => "soundcloud", "url" => $url);
} }
if (!is_null($scid)){ if (!is_null($scid)) {
$text = "Re-upload to SoundCloud"; $text = "Re-upload to SoundCloud";
} } else {
else { $text = "Upload to SoundCloud";
$text = "Upload to SoundCloud"; }
}
$menu["soundcloud"]["items"]["upload"] = array("name" => $text, "icon" => "soundcloud", "url" => "/library/upload-file-soundcloud/id/{$id}");
$menu["soundcloud"]["items"]["upload"] = array("name" => $text, "icon" => "soundcloud", "url" => "/library/upload-file-soundcloud/id/{$id}");
} }
$this->view->items = $menu; $this->view->items = $menu;
@ -123,8 +120,7 @@ class LibraryController extends Zend_Controller_Action
if ($media["type"] === "audioclip") { if ($media["type"] === "audioclip") {
$files[] = intval($media["id"]); $files[] = intval($media["id"]);
} } elseif ($media["type"] === "playlist") {
else if ($media["type"] === "playlist") {
$playlists[] = intval($media["id"]); $playlists[] = intval($media["id"]);
} }
} }
@ -132,10 +128,10 @@ class LibraryController extends Zend_Controller_Action
$hasPermission = true; $hasPermission = true;
if (count($playlists)) { if (count($playlists)) {
// make sure use has permission to delete all playslists in the list // make sure use has permission to delete all playslists in the list
if(!$isAdminOrPM){ if (!$isAdminOrPM) {
foreach($playlists as $pid){ foreach ($playlists as $pid) {
$pl = new Application_Model_Playlist($pid); $pl = new Application_Model_Playlist($pid);
if($pl->getCreatorId() != $user->getId()){ if ($pl->getCreatorId() != $user->getId()) {
$hasPermission = false; $hasPermission = false;
} }
} }
@ -145,10 +141,11 @@ class LibraryController extends Zend_Controller_Action
if (!$isAdminOrPM && count($files)) { if (!$isAdminOrPM && count($files)) {
$hasPermission = false; $hasPermission = false;
} }
if(!$hasPermission){ if (!$hasPermission) {
$this->view->message = "You don't have a permission to delete all playlists/files that are selected."; $this->view->message = "You don't have a permission to delete all playlists/files that are selected.";
return; return;
}else{ } else {
Application_Model_Playlist::DeletePlaylists($playlists); Application_Model_Playlist::DeletePlaylists($playlists);
} }
@ -180,25 +177,23 @@ class LibraryController extends Zend_Controller_Action
//TODO move this to the datatables row callback. //TODO move this to the datatables row callback.
foreach ($r["aaData"] as &$data) { foreach ($r["aaData"] as &$data) {
if ($data['ftype'] == 'audioclip'){ if ($data['ftype'] == 'audioclip') {
$file = Application_Model_StoredFile::Recall($data['id']); $file = Application_Model_StoredFile::Recall($data['id']);
$scid = $file->getSoundCloudId(); $scid = $file->getSoundCloudId();
if ($scid == "-2"){ if ($scid == "-2") {
$data['track_title'] .= '<span class="small-icon progress"/>'; $data['track_title'] .= '<span class="small-icon progress"/>';
} } elseif ($scid == "-3") {
else if ($scid == "-3"){
$data['track_title'] .= '<span class="small-icon sc-error"/>'; $data['track_title'] .= '<span class="small-icon sc-error"/>';
} } elseif (!is_null($scid)) {
else if (!is_null($scid)){
$data['track_title'] .= '<span class="small-icon soundcloud"/>'; $data['track_title'] .= '<span class="small-icon soundcloud"/>';
} }
} }
} }
$this->view->sEcho = $r["sEcho"]; $this->view->sEcho = $r["sEcho"];
$this->view->iTotalDisplayRecords = $r["iTotalDisplayRecords"]; $this->view->iTotalDisplayRecords = $r["iTotalDisplayRecords"];
$this->view->iTotalRecords = $r["iTotalRecords"]; $this->view->iTotalRecords = $r["iTotalRecords"];
$this->view->files = $r["aaData"]; $this->view->files = $r["aaData"];
} }
@ -206,7 +201,7 @@ class LibraryController extends Zend_Controller_Action
{ {
$user = Application_Model_User::getCurrentUser(); $user = Application_Model_User::getCurrentUser();
$isAdminOrPM = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER)); $isAdminOrPM = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER));
if(!$isAdminOrPM){ if (!$isAdminOrPM) {
return; return;
} }
@ -266,8 +261,7 @@ class LibraryController extends Zend_Controller_Action
$this->view->md = $md; $this->view->md = $md;
} } elseif ($type == "playlist") {
else if ($type == "playlist") {
$file = new Application_Model_Playlist($id); $file = new Application_Model_Playlist($id);
$this->view->type = $type; $this->view->type = $type;
@ -279,20 +273,21 @@ class LibraryController extends Zend_Controller_Action
$this->view->md = $md; $this->view->md = $md;
$this->view->contents = $file->getContents(); $this->view->contents = $file->getContents();
} }
} } catch (Exception $e) {
catch (Exception $e) {
Logging::log($e->getMessage()); Logging::log($e->getMessage());
} }
} }
public function uploadFileSoundcloudAction(){ public function uploadFileSoundcloudAction()
{
$id = $this->_getParam('id'); $id = $this->_getParam('id');
$res = exec("/usr/lib/airtime/utils/soundcloud-uploader $id > /dev/null &"); $res = exec("/usr/lib/airtime/utils/soundcloud-uploader $id > /dev/null &");
// we should die with ui info // we should die with ui info
die(); die();
} }
public function getUploadToSoundcloudStatusAction(){ public function getUploadToSoundcloudStatusAction()
{
$id = $this->_getParam('id'); $id = $this->_getParam('id');
$type = $this->_getParam('type'); $type = $this->_getParam('type');
@ -302,8 +297,7 @@ class LibraryController extends Zend_Controller_Action
$file = $show_instance->getRecordedFile(); $file = $show_instance->getRecordedFile();
$this->view->error_code = $file->getSoundCloudErrorCode(); $this->view->error_code = $file->getSoundCloudErrorCode();
$this->view->error_msg = $file->getSoundCloudErrorMsg(); $this->view->error_msg = $file->getSoundCloudErrorMsg();
} } elseif ($type == "file") {
else if ($type == "file") {
$file = Application_Model_StoredFile::Recall($id); $file = Application_Model_StoredFile::Recall($id);
$this->view->sc_id = $file->getSoundCloudId(); $this->view->sc_id = $file->getSoundCloudId();
$this->view->error_code = $file->getSoundCloudErrorCode(); $this->view->error_code = $file->getSoundCloudErrorCode();

View file

@ -12,8 +12,7 @@ class LoginController extends Zend_Controller_Action
{ {
global $CC_CONFIG; global $CC_CONFIG;
if (Zend_Auth::getInstance()->hasIdentity()) if (Zend_Auth::getInstance()->hasIdentity()) {
{
$this->_redirect('Showbuilder'); $this->_redirect('Showbuilder');
} }
@ -30,21 +29,19 @@ class LoginController extends Zend_Controller_Action
$message = "Please enter your user name and password"; $message = "Please enter your user name and password";
if($request->isPost()) if ($request->isPost()) {
{
// if the post contains recaptcha field, which means form had recaptcha field. // if the post contains recaptcha field, which means form had recaptcha field.
// Hence add the element for validation. // Hence add the element for validation.
if(array_key_exists('recaptcha_response_field', $request->getPost())){ if (array_key_exists('recaptcha_response_field', $request->getPost())) {
$form->addRecaptcha(); $form->addRecaptcha();
} }
if($form->isValid($request->getPost())) if ($form->isValid($request->getPost())) {
{
//get the username and password from the form //get the username and password from the form
$username = $form->getValue('username'); $username = $form->getValue('username');
$password = $form->getValue('password'); $password = $form->getValue('password');
if(Application_Model_Subjects::getLoginAttempts($username) >= 3 && $form->getElement('captcha') == NULL){ if (Application_Model_Subjects::getLoginAttempts($username) >= 3 && $form->getElement('captcha') == NULL) {
$form->addRecaptcha(); $form->addRecaptcha();
}else{ } else {
$authAdapter = Application_Model_Auth::getAuthAdapter(); $authAdapter = Application_Model_Auth::getAuthAdapter();
//pass to the adapter the submitted username and password //pass to the adapter the submitted username and password
@ -53,8 +50,7 @@ class LoginController extends Zend_Controller_Action
$auth = Zend_Auth::getInstance(); $auth = Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter); $result = $auth->authenticate($authAdapter);
if($result->isValid()) if ($result->isValid()) {
{
//all info about this user from the login table omit only the password //all info about this user from the login table omit only the password
$userInfo = $authAdapter->getResultRowObject(null, 'password'); $userInfo = $authAdapter->getResultRowObject(null, 'password');
@ -69,9 +65,7 @@ class LoginController extends Zend_Controller_Action
$tempSess->referrer = 'login'; $tempSess->referrer = 'login';
$this->_redirect('Showbuilder'); $this->_redirect('Showbuilder');
} } else {
else
{
$message = "Wrong username or password provided. Please try again."; $message = "Wrong username or password provided. Please try again.";
Application_Model_Subjects::increaseLoginAttempts($username); Application_Model_Subjects::increaseLoginAttempts($username);
Application_Model_LoginAttempts::increaseAttempts($_SERVER['REMOTE_ADDR']); Application_Model_LoginAttempts::increaseAttempts($_SERVER['REMOTE_ADDR']);
@ -87,7 +81,7 @@ class LoginController extends Zend_Controller_Action
$this->view->form = $form; $this->view->form = $form;
$this->view->airtimeVersion = Application_Model_Preference::GetAirtimeVersion(); $this->view->airtimeVersion = Application_Model_Preference::GetAirtimeVersion();
$this->view->airtimeCopyright = AIRTIME_COPYRIGHT_DATE; $this->view->airtimeCopyright = AIRTIME_COPYRIGHT_DATE;
if(isset($CC_CONFIG['demo'])){ if (isset($CC_CONFIG['demo'])) {
$this->view->demo = $CC_CONFIG['demo']; $this->view->demo = $CC_CONFIG['demo'];
} }
} }
@ -98,7 +92,7 @@ class LoginController extends Zend_Controller_Action
$this->_redirect('showbuilder/index'); $this->_redirect('showbuilder/index');
} }
public function passwordRestoreAction() public function passwordRestoreAction()
{ {
global $CC_CONFIG; global $CC_CONFIG;
@ -108,92 +102,87 @@ class LoginController extends Zend_Controller_Action
if (!Application_Model_Preference::GetEnableSystemEmail()) { if (!Application_Model_Preference::GetEnableSystemEmail()) {
$this->_redirect('login'); $this->_redirect('login');
} } else {
else { //uses separate layout without a navigation.
//uses separate layout without a navigation. $this->_helper->layout->setLayout('login');
$this->_helper->layout->setLayout('login');
$form = new Application_Form_PasswordRestore();
$form = new Application_Form_PasswordRestore();
$request = $this->getRequest();
$request = $this->getRequest(); if ($request->isPost() && $form->isValid($request->getPost())) {
if ($request->isPost() && $form->isValid($request->getPost())) { $user = CcSubjsQuery::create()
$user = CcSubjsQuery::create() ->filterByDbEmail($form->email->getValue())
->filterByDbEmail($form->email->getValue()) ->findOne();
->findOne();
if (!empty($user)) {
if (!empty($user)) { $auth = new Application_Model_Auth();
$auth = new Application_Model_Auth();
$success = $auth->sendPasswordRestoreLink($user, $this->view); $success = $auth->sendPasswordRestoreLink($user, $this->view);
if ($success) { if ($success) {
$this->_helper->redirector('password-restore-after', 'login'); $this->_helper->redirector('password-restore-after', 'login');
} else { } else {
$form->email->addError($this->view->translate("Email could not be sent. Check your mail server settings and ensure it has been configured properly.")); $form->email->addError($this->view->translate("Email could not be sent. Check your mail server settings and ensure it has been configured properly."));
} }
} } else {
else { $form->email->addError($this->view->translate("Given email not found."));
$form->email->addError($this->view->translate("Given email not found.")); }
}
} }
$this->view->form = $form; $this->view->form = $form;
} }
} }
public function passwordRestoreAfterAction() public function passwordRestoreAfterAction()
{ {
//uses separate layout without a navigation. //uses separate layout without a navigation.
$this->_helper->layout->setLayout('login'); $this->_helper->layout->setLayout('login');
} }
public function passwordChangeAction() public function passwordChangeAction()
{ {
//uses separate layout without a navigation. //uses separate layout without a navigation.
$this->_helper->layout->setLayout('login'); $this->_helper->layout->setLayout('login');
$request = $this->getRequest(); $request = $this->getRequest();
$token = $request->getParam("token", false); $token = $request->getParam("token", false);
$user_id = $request->getParam("user_id", 0); $user_id = $request->getParam("user_id", 0);
$form = new Application_Form_PasswordChange(); $form = new Application_Form_PasswordChange();
$auth = new Application_Model_Auth(); $auth = new Application_Model_Auth();
$user = CcSubjsQuery::create()->findPK($user_id); $user = CcSubjsQuery::create()->findPK($user_id);
//check validity of token //check validity of token
if (!$auth->checkToken($user_id, $token, 'password.restore')) { if (!$auth->checkToken($user_id, $token, 'password.restore')) {
Logging::debug("token not valid"); Logging::debug("token not valid");
$this->_helper->redirector('index', 'login'); $this->_helper->redirector('index', 'login');
} }
if ($request->isPost() && $form->isValid($request->getPost())) { if ($request->isPost() && $form->isValid($request->getPost())) {
$user->setDbPass(md5($form->password->getValue())); $user->setDbPass(md5($form->password->getValue()));
$user->save(); $user->save();
$auth->invalidateTokens($user, 'password.restore'); $auth->invalidateTokens($user, 'password.restore');
$zend_auth = Zend_Auth::getInstance(); $zend_auth = Zend_Auth::getInstance();
$zend_auth->clearIdentity(); $zend_auth->clearIdentity();
$authAdapter = Application_Model_Auth::getAuthAdapter(); $authAdapter = Application_Model_Auth::getAuthAdapter();
$authAdapter->setIdentity($user->getDbLogin()) $authAdapter->setIdentity($user->getDbLogin())
->setCredential($form->password->getValue()); ->setCredential($form->password->getValue());
$result = $zend_auth->authenticate($authAdapter); $result = $zend_auth->authenticate($authAdapter);
//all info about this user from the login table omit only the password //all info about this user from the login table omit only the password
$userInfo = $authAdapter->getResultRowObject(null, 'password'); $userInfo = $authAdapter->getResultRowObject(null, 'password');
//the default storage is a session with namespace Zend_Auth //the default storage is a session with namespace Zend_Auth
$authStorage = $zend_auth->getStorage(); $authStorage = $zend_auth->getStorage();
$authStorage->write($userInfo); $authStorage->write($userInfo);
$this->_helper->redirector('index', 'showbuilder'); $this->_helper->redirector('index', 'showbuilder');
} }
$this->view->form = $form; $this->view->form = $form;
} }
} }

View file

@ -40,6 +40,7 @@ class PlaylistController extends Zend_Controller_Action
throw new PlaylistOutDatedException("You are viewing an older version of {$pl->getName()}"); throw new PlaylistOutDatedException("You are viewing an older version of {$pl->getName()}");
} }
} }
return $pl; return $pl;
} }
@ -47,8 +48,7 @@ class PlaylistController extends Zend_Controller_Action
{ {
if (is_null($pl_id)) { if (is_null($pl_id)) {
unset($this->pl_sess->id); unset($this->pl_sess->id);
} } else {
else {
$this->pl_sess->id = intval($pl_id); $this->pl_sess->id = intval($pl_id);
} }
} }
@ -77,8 +77,7 @@ class PlaylistController extends Zend_Controller_Action
$this->view->id = $pl->getId(); $this->view->id = $pl->getId();
$this->view->html = $this->view->render('playlist/playlist.phtml'); $this->view->html = $this->view->render('playlist/playlist.phtml');
unset($this->view->pl); unset($this->view->pl);
} } else {
else {
$this->view->html = $this->view->render('playlist/playlist.phtml'); $this->view->html = $this->view->render('playlist/playlist.phtml');
} }
} }
@ -114,23 +113,23 @@ class PlaylistController extends Zend_Controller_Action
$baseUrl = $request->getBaseUrl(); $baseUrl = $request->getBaseUrl();
$this->view->headScript()->appendFile($baseUrl.'/js/blockui/jquery.blockUI.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/blockui/jquery.blockUI.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/contextmenu/jquery.contextMenu.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/contextmenu/jquery.contextMenu.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/js/jquery.dataTables.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/datatables/js/jquery.dataTables.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.pluginAPI.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.pluginAPI.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.fnSetFilteringDelay.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.fnSetFilteringDelay.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.ColVis.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.ColVis.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.ColReorder.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.ColReorder.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.FixedColumns.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.FixedColumns.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/airtime/buttons/buttons.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/airtime/buttons/buttons.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/airtime/utilities/utilities.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/airtime/utilities/utilities.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/airtime/library/library.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/airtime/library/library.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($this->view->baseUrl('/js/airtime/library/events/library_playlistbuilder.js'),'text/javascript'); $this->view->headScript()->appendFile($this->view->baseUrl('/js/airtime/library/events/library_playlistbuilder.js'),'text/javascript');
$this->view->headLink()->appendStylesheet($baseUrl.'/css/media_library.css?'.$CC_CONFIG['airtime_version']); $this->view->headLink()->appendStylesheet($baseUrl.'/css/media_library.css?'.$CC_CONFIG['airtime_version']);
$this->view->headLink()->appendStylesheet($baseUrl.'/css/jquery.contextMenu.css?'.$CC_CONFIG['airtime_version']); $this->view->headLink()->appendStylesheet($baseUrl.'/css/jquery.contextMenu.css?'.$CC_CONFIG['airtime_version']);
$this->view->headLink()->appendStylesheet($baseUrl.'/css/datatables/css/ColVis.css?'.$CC_CONFIG['airtime_version']); $this->view->headLink()->appendStylesheet($baseUrl.'/css/datatables/css/ColVis.css?'.$CC_CONFIG['airtime_version']);
$this->view->headLink()->appendStylesheet($baseUrl.'/css/datatables/css/ColReorder.css?'.$CC_CONFIG['airtime_version']); $this->view->headLink()->appendStylesheet($baseUrl.'/css/datatables/css/ColReorder.css?'.$CC_CONFIG['airtime_version']);
$this->view->headScript()->appendFile($baseUrl.'/js/airtime/library/spl.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/airtime/library/spl.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headLink()->appendStylesheet($baseUrl.'/css/playlist_builder.css?'.$CC_CONFIG['airtime_version']); $this->view->headLink()->appendStylesheet($baseUrl.'/css/playlist_builder.css?'.$CC_CONFIG['airtime_version']);
@ -143,11 +142,9 @@ class PlaylistController extends Zend_Controller_Action
$formatter = new LengthFormatter($pl->getLength()); $formatter = new LengthFormatter($pl->getLength());
$this->view->length = $formatter->format(); $this->view->length = $formatter->format();
} }
} } catch (PlaylistNotFoundException $e) {
catch (PlaylistNotFoundException $e) {
$this->playlistNotFound(); $this->playlistNotFound();
} } catch (Exception $e) {
catch (Exception $e) {
$this->playlistUnknownError($e); $this->playlistUnknownError($e);
} }
} }
@ -177,11 +174,9 @@ class PlaylistController extends Zend_Controller_Action
try { try {
$pl = new Application_Model_Playlist($id); $pl = new Application_Model_Playlist($id);
$this->createFullResponse($pl); $this->createFullResponse($pl);
} } catch (PlaylistNotFoundException $e) {
catch (PlaylistNotFoundException $e) {
$this->playlistNotFound(); $this->playlistNotFound();
} } catch (Exception $e) {
catch (Exception $e) {
$this->playlistUnknownError($e); $this->playlistUnknownError($e);
} }
} }
@ -198,19 +193,16 @@ class PlaylistController extends Zend_Controller_Action
if (in_array($this->pl_sess->id, $ids)) { if (in_array($this->pl_sess->id, $ids)) {
Logging::log("Deleting currently active playlist"); Logging::log("Deleting currently active playlist");
$this->changePlaylist(null); $this->changePlaylist(null);
} } else {
else {
Logging::log("Not deleting currently active playlist"); Logging::log("Not deleting currently active playlist");
$pl = new Application_Model_Playlist($this->pl_sess->id); $pl = new Application_Model_Playlist($this->pl_sess->id);
} }
Application_Model_Playlist::DeletePlaylists($ids); Application_Model_Playlist::DeletePlaylists($ids);
$this->createFullResponse($pl); $this->createFullResponse($pl);
} } catch (PlaylistNotFoundException $e) {
catch (PlaylistNotFoundException $e) {
$this->playlistNotFound(); $this->playlistNotFound();
} } catch (Exception $e) {
catch (Exception $e) {
$this->playlistUnknownError($e); $this->playlistUnknownError($e);
} }
} }
@ -226,14 +218,11 @@ class PlaylistController extends Zend_Controller_Action
$pl = $this->getPlaylist(); $pl = $this->getPlaylist();
$pl->addAudioClips($ids, $afterItem, $addType); $pl->addAudioClips($ids, $afterItem, $addType);
$this->createUpdateResponse($pl); $this->createUpdateResponse($pl);
} } catch (PlaylistOutDatedException $e) {
catch (PlaylistOutDatedException $e) {
$this->playlistOutdated($pl, $e); $this->playlistOutdated($pl, $e);
} } catch (PlaylistNotFoundException $e) {
catch (PlaylistNotFoundException $e) {
$this->playlistNotFound(); $this->playlistNotFound();
} } catch (Exception $e) {
catch (Exception $e) {
$this->playlistUnknownError($e); $this->playlistUnknownError($e);
} }
} }
@ -249,14 +238,11 @@ class PlaylistController extends Zend_Controller_Action
$pl = $this->getPlaylist(); $pl = $this->getPlaylist();
$pl->moveAudioClips($ids, $afterItem); $pl->moveAudioClips($ids, $afterItem);
$this->createUpdateResponse($pl); $this->createUpdateResponse($pl);
} } catch (PlaylistOutDatedException $e) {
catch (PlaylistOutDatedException $e) {
$this->playlistOutdated($pl, $e); $this->playlistOutdated($pl, $e);
} } catch (PlaylistNotFoundException $e) {
catch (PlaylistNotFoundException $e) {
$this->playlistNotFound(); $this->playlistNotFound();
} } catch (Exception $e) {
catch (Exception $e) {
$this->playlistUnknownError($e); $this->playlistUnknownError($e);
} }
} }
@ -271,14 +257,11 @@ class PlaylistController extends Zend_Controller_Action
$pl = $this->getPlaylist(); $pl = $this->getPlaylist();
$pl->delAudioClips($ids); $pl->delAudioClips($ids);
$this->createUpdateResponse($pl); $this->createUpdateResponse($pl);
} } catch (PlaylistOutDatedException $e) {
catch (PlaylistOutDatedException $e) {
$this->playlistOutdated($pl, $e); $this->playlistOutdated($pl, $e);
} } catch (PlaylistNotFoundException $e) {
catch (PlaylistNotFoundException $e) {
$this->playlistNotFound(); $this->playlistNotFound();
} } catch (Exception $e) {
catch (Exception $e) {
$this->playlistUnknownError($e); $this->playlistUnknownError($e);
} }
} }
@ -296,18 +279,14 @@ class PlaylistController extends Zend_Controller_Action
if (!isset($response["error"])) { if (!isset($response["error"])) {
$this->view->response = $response; $this->view->response = $response;
$this->createUpdateResponse($pl); $this->createUpdateResponse($pl);
} } else {
else {
$this->view->cue_error = $response["error"]; $this->view->cue_error = $response["error"];
} }
} } catch (PlaylistOutDatedException $e) {
catch (PlaylistOutDatedException $e) {
$this->playlistOutdated($pl, $e); $this->playlistOutdated($pl, $e);
} } catch (PlaylistNotFoundException $e) {
catch (PlaylistNotFoundException $e) {
$this->playlistNotFound(); $this->playlistNotFound();
} } catch (Exception $e) {
catch (Exception $e) {
$this->playlistUnknownError($e); $this->playlistUnknownError($e);
} }
} }
@ -325,18 +304,14 @@ class PlaylistController extends Zend_Controller_Action
if (!isset($response["error"])) { if (!isset($response["error"])) {
$this->createUpdateResponse($pl); $this->createUpdateResponse($pl);
$this->view->response = $response; $this->view->response = $response;
} } else {
else {
$this->view->fade_error = $response["error"]; $this->view->fade_error = $response["error"];
} }
} } catch (PlaylistOutDatedException $e) {
catch (PlaylistOutDatedException $e) {
$this->playlistOutdated($pl, $e); $this->playlistOutdated($pl, $e);
} } catch (PlaylistNotFoundException $e) {
catch (PlaylistNotFoundException $e) {
$this->playlistNotFound(); $this->playlistNotFound();
} } catch (Exception $e) {
catch (Exception $e) {
$this->playlistUnknownError($e); $this->playlistUnknownError($e);
} }
} }
@ -350,14 +325,11 @@ class PlaylistController extends Zend_Controller_Action
$fades = $pl->getFadeInfo($pl->getSize()-1); $fades = $pl->getFadeInfo($pl->getSize()-1);
$this->view->fadeOut = $fades[1]; $this->view->fadeOut = $fades[1];
} } catch (PlaylistOutDatedException $e) {
catch (PlaylistOutDatedException $e) {
$this->playlistOutdated($pl, $e); $this->playlistOutdated($pl, $e);
} } catch (PlaylistNotFoundException $e) {
catch (PlaylistNotFoundException $e) {
$this->playlistNotFound(); $this->playlistNotFound();
} } catch (Exception $e) {
catch (Exception $e) {
$this->playlistUnknownError($e); $this->playlistUnknownError($e);
} }
} }
@ -376,14 +348,11 @@ class PlaylistController extends Zend_Controller_Action
$pl = $this->getPlaylist(); $pl = $this->getPlaylist();
$pl->setPlaylistfades($fadeIn, $fadeOut); $pl->setPlaylistfades($fadeIn, $fadeOut);
$this->view->modified = $pl->getLastModified("U"); $this->view->modified = $pl->getLastModified("U");
} } catch (PlaylistOutDatedException $e) {
catch (PlaylistOutDatedException $e) {
$this->playlistOutdated($pl, $e); $this->playlistOutdated($pl, $e);
} } catch (PlaylistNotFoundException $e) {
catch (PlaylistNotFoundException $e) {
$this->playlistNotFound(); $this->playlistNotFound();
} } catch (Exception $e) {
catch (Exception $e) {
$this->playlistUnknownError($e); $this->playlistUnknownError($e);
} }
} }
@ -397,14 +366,11 @@ class PlaylistController extends Zend_Controller_Action
$pl->setName($name); $pl->setName($name);
$this->view->playlistName = $name; $this->view->playlistName = $name;
$this->view->modified = $pl->getLastModified("U"); $this->view->modified = $pl->getLastModified("U");
} } catch (PlaylistOutDatedException $e) {
catch (PlaylistOutDatedException $e) {
$this->playlistOutdated($pl, $e); $this->playlistOutdated($pl, $e);
} } catch (PlaylistNotFoundException $e) {
catch (PlaylistNotFoundException $e) {
$this->playlistNotFound(); $this->playlistNotFound();
} } catch (Exception $e) {
catch (Exception $e) {
$this->playlistUnknownError($e); $this->playlistUnknownError($e);
} }
} }
@ -418,16 +384,12 @@ class PlaylistController extends Zend_Controller_Action
$pl->setDescription($description); $pl->setDescription($description);
$this->view->description = $pl->getDescription(); $this->view->description = $pl->getDescription();
$this->view->modified = $pl->getLastModified("U"); $this->view->modified = $pl->getLastModified("U");
} } catch (PlaylistOutDatedException $e) {
catch (PlaylistOutDatedException $e) {
$this->playlistOutdated($pl, $e); $this->playlistOutdated($pl, $e);
} } catch (PlaylistNotFoundException $e) {
catch (PlaylistNotFoundException $e) {
$this->playlistNotFound(); $this->playlistNotFound();
} } catch (Exception $e) {
catch (Exception $e) {
$this->playlistUnknownError($e); $this->playlistUnknownError($e);
} }
} }
} }

View file

@ -1,19 +1,19 @@
<?php <?php
class PlayoutHistoryController extends Zend_Controller_Action class PlayouthistoryController extends Zend_Controller_Action
{ {
public function init() public function init()
{ {
$ajaxContext = $this->_helper->getHelper('AjaxContext'); $ajaxContext = $this->_helper->getHelper('AjaxContext');
$ajaxContext $ajaxContext
->addActionContext('playout-history-feed', 'json') ->addActionContext('playout-history-feed', 'json')
->initContext(); ->initContext();
} }
public function indexAction() public function indexAction()
{ {
global $CC_CONFIG; global $CC_CONFIG;
$request = $this->getRequest(); $request = $this->getRequest();
$baseUrl = $request->getBaseUrl(); $baseUrl = $request->getBaseUrl();
@ -35,50 +35,50 @@ class PlayoutHistoryController extends Zend_Controller_Action
'his_time_end' => $end->format("H:i") 'his_time_end' => $end->format("H:i")
)); ));
$this->view->date_form = $form; $this->view->date_form = $form;
$this->view->headScript()->appendFile($baseUrl.'/js/contextmenu/jquery.contextMenu.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/contextmenu/jquery.contextMenu.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/js/jquery.dataTables.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/datatables/js/jquery.dataTables.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.pluginAPI.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.pluginAPI.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.fnSetFilteringDelay.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.fnSetFilteringDelay.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/TableTools/js/ZeroClipboard.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/TableTools/js/ZeroClipboard.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/TableTools/js/TableTools.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/TableTools/js/TableTools.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$offset = date("Z") * -1; $offset = date("Z") * -1;
$this->view->headScript()->appendScript("var serverTimezoneOffset = {$offset}; //in seconds"); $this->view->headScript()->appendScript("var serverTimezoneOffset = {$offset}; //in seconds");
$this->view->headScript()->appendFile($baseUrl.'/js/timepicker/jquery.ui.timepicker.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/timepicker/jquery.ui.timepicker.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/airtime/buttons/buttons.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/airtime/buttons/buttons.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/airtime/utilities/utilities.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/airtime/utilities/utilities.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/airtime/playouthistory/historytable.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/airtime/playouthistory/historytable.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headLink()->appendStylesheet($baseUrl.'/js/datatables/plugin/TableTools/css/TableTools.css?'.$CC_CONFIG['airtime_version']); $this->view->headLink()->appendStylesheet($baseUrl.'/js/datatables/plugin/TableTools/css/TableTools.css?'.$CC_CONFIG['airtime_version']);
$this->view->headLink()->appendStylesheet($baseUrl.'/css/jquery.ui.timepicker.css?'.$CC_CONFIG['airtime_version']); $this->view->headLink()->appendStylesheet($baseUrl.'/css/jquery.ui.timepicker.css?'.$CC_CONFIG['airtime_version']);
$this->view->headLink()->appendStylesheet($baseUrl.'/css/playouthistory.css?'.$CC_CONFIG['airtime_version']); $this->view->headLink()->appendStylesheet($baseUrl.'/css/playouthistory.css?'.$CC_CONFIG['airtime_version']);
} }
public function playoutHistoryFeedAction() public function playoutHistoryFeedAction()
{ {
$request = $this->getRequest(); $request = $this->getRequest();
$current_time = time(); $current_time = time();
$params = $request->getParams(); $params = $request->getParams();
$starts_epoch = $request->getParam("start", $current_time - (60*60*24)); $starts_epoch = $request->getParam("start", $current_time - (60*60*24));
$ends_epoch = $request->getParam("end", $current_time); $ends_epoch = $request->getParam("end", $current_time);
$startsDT = DateTime::createFromFormat("U", $starts_epoch, new DateTimeZone("UTC")); $startsDT = DateTime::createFromFormat("U", $starts_epoch, new DateTimeZone("UTC"));
$endsDT = DateTime::createFromFormat("U", $ends_epoch, new DateTimeZone("UTC")); $endsDT = DateTime::createFromFormat("U", $ends_epoch, new DateTimeZone("UTC"));
Logging::log("history starts {$startsDT->format("Y-m-d H:i:s")}"); Logging::log("history starts {$startsDT->format("Y-m-d H:i:s")}");
Logging::log("history ends {$endsDT->format("Y-m-d H:i:s")}"); Logging::log("history ends {$endsDT->format("Y-m-d H:i:s")}");
$history = new Application_Model_PlayoutHistory($startsDT, $endsDT, $params); $history = new Application_Model_PlayoutHistory($startsDT, $endsDT, $params);
$r = $history->getItems(); $r = $history->getItems();
$this->view->sEcho = $r["sEcho"]; $this->view->sEcho = $r["sEcho"];
$this->view->iTotalDisplayRecords = $r["iTotalDisplayRecords"]; $this->view->iTotalDisplayRecords = $r["iTotalDisplayRecords"];
$this->view->iTotalRecords = $r["iTotalRecords"]; $this->view->iTotalRecords = $r["iTotalRecords"];
$this->view->history = $r["history"]; $this->view->history = $r["history"];
} }
} }

View file

@ -34,7 +34,8 @@ class PluploadController extends Zend_Controller_Action
die('{"jsonrpc" : "2.0", "tempfilepath" : "'.$tempFileName.'" }'); die('{"jsonrpc" : "2.0", "tempfilepath" : "'.$tempFileName.'" }');
} }
public function copyfileAction(){ public function copyfileAction()
{
$upload_dir = ini_get("upload_tmp_dir") . DIRECTORY_SEPARATOR . "plupload"; $upload_dir = ini_get("upload_tmp_dir") . DIRECTORY_SEPARATOR . "plupload";
$filename = $this->_getParam('name'); $filename = $this->_getParam('name');
$tempname = $this->_getParam('tempname'); $tempname = $this->_getParam('tempname');
@ -45,6 +46,3 @@ class PluploadController extends Zend_Controller_Action
die('{"jsonrpc" : "2.0"}'); die('{"jsonrpc" : "2.0"}');
} }
} }

View file

@ -84,18 +84,18 @@ class PreferenceController extends Zend_Controller_Action
if ($request->isPost()) { if ($request->isPost()) {
$values = $request->getPost(); $values = $request->getPost();
if ($form->isValid($values)) { if ($form->isValid($values)) {
if (!$isSass && $values["Publicise"] != 1){ if (!$isSass && $values["Publicise"] != 1) {
Application_Model_Preference::SetSupportFeedback($values["SupportFeedback"]); Application_Model_Preference::SetSupportFeedback($values["SupportFeedback"]);
Application_Model_Preference::SetPublicise($values["Publicise"]); Application_Model_Preference::SetPublicise($values["Publicise"]);
if(isset($values["Privacy"])){ if (isset($values["Privacy"])) {
Application_Model_Preference::SetPrivacyPolicyCheck($values["Privacy"]); Application_Model_Preference::SetPrivacyPolicyCheck($values["Privacy"]);
} }
}else{ } else {
Application_Model_Preference::SetHeadTitle($values["stationName"], $this->view); Application_Model_Preference::SetHeadTitle($values["stationName"], $this->view);
Application_Model_Preference::SetPhone($values["Phone"]); Application_Model_Preference::SetPhone($values["Phone"]);
Application_Model_Preference::SetEmail($values["Email"]); Application_Model_Preference::SetEmail($values["Email"]);
Application_Model_Preference::SetStationWebSite($values["StationWebSite"]); Application_Model_Preference::SetStationWebSite($values["StationWebSite"]);
if(!$isSass){ if (!$isSass) {
Application_Model_Preference::SetSupportFeedback($values["SupportFeedback"]); Application_Model_Preference::SetSupportFeedback($values["SupportFeedback"]);
Application_Model_Preference::SetPublicise($values["Publicise"]); Application_Model_Preference::SetPublicise($values["Publicise"]);
} }
@ -107,7 +107,7 @@ class PreferenceController extends Zend_Controller_Action
Application_Model_Preference::SetStationCity($values["City"]); Application_Model_Preference::SetStationCity($values["City"]);
Application_Model_Preference::SetStationDescription($values["Description"]); Application_Model_Preference::SetStationDescription($values["Description"]);
Application_Model_Preference::SetStationLogo($imagePath); Application_Model_Preference::SetStationLogo($imagePath);
if(!$isSass && isset($values["Privacy"])){ if (!$isSass && isset($values["Privacy"])) {
Application_Model_Preference::SetPrivacyPolicyCheck($values["Privacy"]); Application_Model_Preference::SetPrivacyPolicyCheck($values["Privacy"]);
} }
} }
@ -115,11 +115,11 @@ class PreferenceController extends Zend_Controller_Action
} }
} }
$logo = Application_Model_Preference::GetStationLogo(); $logo = Application_Model_Preference::GetStationLogo();
if($logo){ if ($logo) {
$this->view->logoImg = $logo; $this->view->logoImg = $logo;
} }
$privacyChecked = false; $privacyChecked = false;
if(Application_Model_Preference::GetPrivacyPolicyCheck() == 1){ if (Application_Model_Preference::GetPrivacyPolicyCheck() == 1) {
$privacyChecked = true; $privacyChecked = true;
} }
$this->view->privacyChecked = $privacyChecked; $this->view->privacyChecked = $privacyChecked;
@ -132,7 +132,7 @@ class PreferenceController extends Zend_Controller_Action
{ {
global $CC_CONFIG; global $CC_CONFIG;
if(Application_Model_Preference::GetPlanLevel() == 'disabled'){ if (Application_Model_Preference::GetPlanLevel() == 'disabled') {
$request = $this->getRequest(); $request = $this->getRequest();
$baseUrl = $request->getBaseUrl(); $baseUrl = $request->getBaseUrl();
@ -159,17 +159,17 @@ class PreferenceController extends Zend_Controller_Action
// get current settings // get current settings
$temp = Application_Model_StreamSetting::getStreamSetting(); $temp = Application_Model_StreamSetting::getStreamSetting();
$setting = array(); $setting = array();
foreach ($temp as $t){ foreach ($temp as $t) {
$setting[$t['keyname']] = $t['value']; $setting[$t['keyname']] = $t['value'];
} }
// get predefined type and bitrate from pref table // get predefined type and bitrate from pref table
$temp_types = Application_Model_Preference::GetStreamType(); $temp_types = Application_Model_Preference::GetStreamType();
$stream_types = array(); $stream_types = array();
foreach ($temp_types as $type){ foreach ($temp_types as $type) {
if(trim($type) == "ogg"){ if (trim($type) == "ogg") {
$temp = "OGG/VORBIS"; $temp = "OGG/VORBIS";
}else{ } else {
$temp = strtoupper(trim($type)); $temp = strtoupper(trim($type));
} }
$stream_types[trim($type)] = $temp; $stream_types[trim($type)] = $temp;
@ -178,8 +178,8 @@ class PreferenceController extends Zend_Controller_Action
$temp_bitrate = Application_Model_Preference::GetStreamBitrate(); $temp_bitrate = Application_Model_Preference::GetStreamBitrate();
$max_bitrate = intval(Application_Model_Preference::GetMaxBitrate()); $max_bitrate = intval(Application_Model_Preference::GetMaxBitrate());
$stream_bitrates = array(); $stream_bitrates = array();
foreach ($temp_bitrate as $type){ foreach ($temp_bitrate as $type) {
if(intval($type) <= $max_bitrate){ if (intval($type) <= $max_bitrate) {
$stream_bitrates[trim($type)] = strtoupper(trim($type))." Kbit/s"; $stream_bitrates[trim($type)] = strtoupper(trim($type))." Kbit/s";
} }
} }
@ -193,7 +193,7 @@ class PreferenceController extends Zend_Controller_Action
$live_stream_subform = new Application_Form_LiveStreamingPreferences(); $live_stream_subform = new Application_Form_LiveStreamingPreferences();
$form->addSubForm($live_stream_subform, "live_stream_subform"); $form->addSubForm($live_stream_subform, "live_stream_subform");
for($i=1; $i<=$num_of_stream; $i++){ for ($i=1; $i<=$num_of_stream; $i++) {
$subform = new Application_Form_StreamSettingSubForm(); $subform = new Application_Form_StreamSettingSubForm();
$subform->setPrefix($i); $subform->setPrefix($i);
$subform->setSetting($setting); $subform->setSetting($setting);
@ -208,7 +208,7 @@ class PreferenceController extends Zend_Controller_Action
$error = false; $error = false;
$values = $post_data; $values = $post_data;
if($form->isValid($post_data)){ if ($form->isValid($post_data)) {
if (!$isSaas) { if (!$isSaas) {
$values['output_sound_device'] = $form->getValue('output_sound_device'); $values['output_sound_device'] = $form->getValue('output_sound_device');
$values['output_sound_device_type'] = $form->getValue('output_sound_device_type'); $values['output_sound_device_type'] = $form->getValue('output_sound_device_type');
@ -232,8 +232,7 @@ class PreferenceController extends Zend_Controller_Action
$master_connection_url = "http://".$_SERVER['SERVER_NAME'].":".$values["master_harbor_input_port"]."/".$values["master_harbor_input_mount_point"]; $master_connection_url = "http://".$_SERVER['SERVER_NAME'].":".$values["master_harbor_input_port"]."/".$values["master_harbor_input_mount_point"];
if (empty($values["master_harbor_input_port"]) || empty($values["master_harbor_input_mount_point"])) { if (empty($values["master_harbor_input_port"]) || empty($values["master_harbor_input_mount_point"])) {
Application_Model_Preference::SetMasterDJSourceConnectionURL('N/A'); Application_Model_Preference::SetMasterDJSourceConnectionURL('N/A');
} } else {
else {
Application_Model_Preference::SetMasterDJSourceConnectionURL($master_connection_url); Application_Model_Preference::SetMasterDJSourceConnectionURL($master_connection_url);
} }
} else { } else {
@ -244,12 +243,10 @@ class PreferenceController extends Zend_Controller_Action
$live_connection_url = "http://".$_SERVER['SERVER_NAME'].":".$values["dj_harbor_input_port"]."/".$values["dj_harbor_input_mount_point"]; $live_connection_url = "http://".$_SERVER['SERVER_NAME'].":".$values["dj_harbor_input_port"]."/".$values["dj_harbor_input_mount_point"];
if (empty($values["dj_harbor_input_port"]) || empty($values["dj_harbor_input_mount_point"])) { if (empty($values["dj_harbor_input_port"]) || empty($values["dj_harbor_input_mount_point"])) {
Application_Model_Preference::SetLiveDJSourceConnectionURL('N/A'); Application_Model_Preference::SetLiveDJSourceConnectionURL('N/A');
} } else {
else {
Application_Model_Preference::SetLiveDJSourceConnectionURL($live_connection_url); Application_Model_Preference::SetLiveDJSourceConnectionURL($live_connection_url);
} }
} } else {
else {
Application_Model_Preference::SetLiveDJSourceConnectionURL($values["live_dj_connection_url"]); Application_Model_Preference::SetLiveDJSourceConnectionURL($values["live_dj_connection_url"]);
} }
@ -266,7 +263,7 @@ class PreferenceController extends Zend_Controller_Action
$data = array(); $data = array();
$info = Application_Model_StreamSetting::getStreamSetting(); $info = Application_Model_StreamSetting::getStreamSetting();
$data['setting'] = $info; $data['setting'] = $info;
for($i=1;$i<=$num_of_stream;$i++){ for ($i=1;$i<=$num_of_stream;$i++) {
Application_Model_StreamSetting::setLiquidsoapError($i, "waiting"); Application_Model_StreamSetting::setLiquidsoapError($i, "waiting");
} }
@ -290,19 +287,16 @@ class PreferenceController extends Zend_Controller_Action
$result = array(); $result = array();
if(is_null($path)) if (is_null($path)) {
{
$element = array(); $element = array();
$element["name"] = "path should be specified"; $element["name"] = "path should be specified";
$element["isFolder"] = false; $element["isFolder"] = false;
$element["isError"] = true; $element["isError"] = true;
$result[$path] = $element; $result[$path] = $element;
} } else {
else
{
$path = $path.'/'; $path = $path.'/';
$handle = opendir($path); $handle = opendir($path);
if ($handle !== false){ if ($handle !== false) {
while (false !== ($file = readdir($handle))) { while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") { if ($file != "." && $file != "..") {
//only show directories that aren't private. //only show directories that aren't private.
@ -329,7 +323,7 @@ class PreferenceController extends Zend_Controller_Action
$watched_dirs_form = new Application_Form_WatchedDirPreferences(); $watched_dirs_form = new Application_Form_WatchedDirPreferences();
$res = Application_Model_MusicDir::setStorDir($chosen); $res = Application_Model_MusicDir::setStorDir($chosen);
if($res['code'] != 0){ if ($res['code'] != 0) {
$watched_dirs_form->populate(array('storageFolder' => $chosen)); $watched_dirs_form->populate(array('storageFolder' => $chosen));
$watched_dirs_form->getElement($element)->setErrors(array($res['error'])); $watched_dirs_form->getElement($element)->setErrors(array($res['error']));
} }
@ -344,7 +338,7 @@ class PreferenceController extends Zend_Controller_Action
$watched_dirs_form = new Application_Form_WatchedDirPreferences(); $watched_dirs_form = new Application_Form_WatchedDirPreferences();
$res = Application_Model_MusicDir::addWatchedDir($chosen); $res = Application_Model_MusicDir::addWatchedDir($chosen);
if($res['code'] != 0){ if ($res['code'] != 0) {
$watched_dirs_form->populate(array('watchedFolder' => $chosen)); $watched_dirs_form->populate(array('watchedFolder' => $chosen));
$watched_dirs_form->getElement($element)->setErrors(array($res['error'])); $watched_dirs_form->getElement($element)->setErrors(array($res['error']));
} }
@ -373,22 +367,24 @@ class PreferenceController extends Zend_Controller_Action
$this->view->subform = $watched_dirs_form->render(); $this->view->subform = $watched_dirs_form->render();
} }
public function isImportInProgressAction(){ public function isImportInProgressAction()
{
$now = time(); $now = time();
$res = false; $res = false;
if(Application_Model_Preference::GetImportTimestamp()+10 > $now){ if (Application_Model_Preference::GetImportTimestamp()+10 > $now) {
$res = true; $res = true;
} }
die(json_encode($res)); die(json_encode($res));
} }
public function getLiquidsoapStatusAction(){ public function getLiquidsoapStatusAction()
{
$out = array(); $out = array();
$num_of_stream = intval(Application_Model_Preference::GetNumOfStreams()); $num_of_stream = intval(Application_Model_Preference::GetNumOfStreams());
for($i=1; $i<=$num_of_stream; $i++){ for ($i=1; $i<=$num_of_stream; $i++) {
$status = Application_Model_StreamSetting::getLiquidsoapError($i); $status = Application_Model_StreamSetting::getLiquidsoapError($i);
$status = $status == NULL?"Problem with Liquidsoap...":$status; $status = $status == NULL?"Problem with Liquidsoap...":$status;
if(!Application_Model_StreamSetting::getStreamEnabled($i)){ if (!Application_Model_StreamSetting::getStreamEnabled($i)) {
$status = "N/A"; $status = "N/A";
} }
$out[] = array("id"=>$i, "status"=>$status); $out[] = array("id"=>$i, "status"=>$status);
@ -396,16 +392,17 @@ class PreferenceController extends Zend_Controller_Action
die(json_encode($out)); die(json_encode($out));
} }
public function setSourceConnectionUrlAction(){ public function setSourceConnectionUrlAction()
{
$request = $this->getRequest(); $request = $this->getRequest();
$type = $request->getParam("type", null); $type = $request->getParam("type", null);
$url = urldecode($request->getParam("url", null)); $url = urldecode($request->getParam("url", null));
$override = $request->getParam("override", false); $override = $request->getParam("override", false);
if($type == 'masterdj'){ if ($type == 'masterdj') {
Application_Model_Preference::SetMasterDJSourceConnectionURL($url); Application_Model_Preference::SetMasterDJSourceConnectionURL($url);
Application_Model_Preference::SetMasterDjConnectionUrlOverride($override); Application_Model_Preference::SetMasterDjConnectionUrlOverride($override);
}elseif($type == 'livedj'){ } elseif ($type == 'livedj') {
Application_Model_Preference::SetLiveDJSourceConnectionURL($url); Application_Model_Preference::SetLiveDJSourceConnectionURL($url);
Application_Model_Preference::SetLiveDjConnectionUrlOverride($override); Application_Model_Preference::SetLiveDjConnectionUrlOverride($override);
} }
@ -413,6 +410,3 @@ class PreferenceController extends Zend_Controller_Action
die(); die();
} }
} }

View file

@ -92,7 +92,7 @@ class ScheduleController extends Zend_Controller_Action
$user = Application_Model_User::getCurrentUser(); $user = Application_Model_User::getCurrentUser();
if($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))){ if ($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) {
$this->view->preloadShowForm = true; $this->view->preloadShowForm = true;
} }
@ -110,15 +110,15 @@ class ScheduleController extends Zend_Controller_Action
$user = new Application_Model_User($userInfo->id); $user = new Application_Model_User($userInfo->id);
if ($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) { if ($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) {
$editable = true; $editable = true;
} } else {
else {
$editable = false; $editable = false;
} }
$this->view->events = Application_Model_Show::getFullCalendarEvents($start, $end, $editable); $this->view->events = Application_Model_Show::getFullCalendarEvents($start, $end, $editable);
} }
public function getCurrentShowAction() { public function getCurrentShowAction()
{
$currentShow = Application_Model_Show::GetCurrentShow(); $currentShow = Application_Model_Show::GetCurrentShow();
if (!empty($currentShow)) { if (!empty($currentShow)) {
$this->view->si_id = $currentShow[0]["instance_id"]; $this->view->si_id = $currentShow[0]["instance_id"];
@ -140,8 +140,9 @@ class ScheduleController extends Zend_Controller_Action
if ($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) { if ($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) {
try { try {
$showInstance = new Application_Model_ShowInstance($showInstanceId); $showInstance = new Application_Model_ShowInstance($showInstanceId);
} catch (Exception $e){ } catch (Exception $e) {
$this->view->show_error = true; $this->view->show_error = true;
return false; return false;
} }
$error = $showInstance->moveShow($deltaDay, $deltaMin); $error = $showInstance->moveShow($deltaDay, $deltaMin);
@ -162,10 +163,11 @@ class ScheduleController extends Zend_Controller_Action
$user = new Application_Model_User($userInfo->id); $user = new Application_Model_User($userInfo->id);
if ($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) { if ($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) {
try{ try {
$show = new Application_Model_Show($showId); $show = new Application_Model_Show($showId);
}catch(Exception $e){ } catch (Exception $e) {
$this->view->show_error = true; $this->view->show_error = true;
return false; return false;
} }
$error = $show->resizeShow($deltaDay, $deltaMin); $error = $show->resizeShow($deltaDay, $deltaMin);
@ -187,9 +189,9 @@ class ScheduleController extends Zend_Controller_Action
try { try {
$showInstance = new Application_Model_ShowInstance($showInstanceId); $showInstance = new Application_Model_ShowInstance($showInstanceId);
} } catch (Exception $e) {
catch(Exception $e){
$this->view->show_error = true; $this->view->show_error = true;
return false; return false;
} }
@ -203,10 +205,11 @@ class ScheduleController extends Zend_Controller_Action
{ {
global $CC_CONFIG; global $CC_CONFIG;
$show_instance = $this->_getParam('id'); $show_instance = $this->_getParam('id');
try{ try {
$show_inst = new Application_Model_ShowInstance($show_instance); $show_inst = new Application_Model_ShowInstance($show_instance);
}catch(Exception $e){ } catch (Exception $e) {
$this->view->show_error = true; $this->view->show_error = true;
return false; return false;
} }
@ -225,10 +228,11 @@ class ScheduleController extends Zend_Controller_Action
$userInfo = Zend_Auth::getInstance()->getStorage()->read(); $userInfo = Zend_Auth::getInstance()->getStorage()->read();
$user = new Application_Model_User($userInfo->id); $user = new Application_Model_User($userInfo->id);
try{ try {
$instance = new Application_Model_ShowInstance($id); $instance = new Application_Model_ShowInstance($id);
}catch(Exception $e){ } catch (Exception $e) {
$this->view->show_error = true; $this->view->show_error = true;
return false; return false;
} }
@ -243,7 +247,7 @@ class ScheduleController extends Zend_Controller_Action
$file = $instance->getRecordedFile(); $file = $instance->getRecordedFile();
$fileId = $file->getId(); $fileId = $file->getId();
$menu["view_recorded"] = array("name" => "View Recorded File Metadata", "icon" => "overview", $menu["view_recorded"] = array("name" => "View Recorded File Metadata", "icon" => "overview",
"url" => "/library/edit-file-md/id/".$fileId); "url" => "/library/edit-file-md/id/".$fileId);
} }
@ -269,13 +273,13 @@ class ScheduleController extends Zend_Controller_Action
&& $instance->isRecorded() && $instance->isRecorded()
&& Application_Model_Preference::GetUploadToSoundcloudOption()) { && Application_Model_Preference::GetUploadToSoundcloudOption()) {
$file = $instance->getRecordedFile(); $file = $instance->getRecordedFile();
$fileId = $file->getId(); $fileId = $file->getId();
$scid = $instance->getSoundCloudFileId(); $scid = $instance->getSoundCloudFileId();
if ($scid > 0){ if ($scid > 0) {
$url = $file->getSoundCloudLinkToFile(); $url = $file->getSoundCloudLinkToFile();
$menu["soundcloud_view"] = array("name" => "View on Soundcloud", "icon" => "soundcloud", "url" => $url); $menu["soundcloud_view"] = array("name" => "View on Soundcloud", "icon" => "soundcloud", "url" => $url);
} }
$text = is_null($scid) ? 'Upload to SoundCloud' : 'Re-upload to SoundCloud'; $text = is_null($scid) ? 'Upload to SoundCloud' : 'Re-upload to SoundCloud';
@ -287,8 +291,7 @@ class ScheduleController extends Zend_Controller_Action
if ($instance->isRecorded()) { if ($instance->isRecorded()) {
$menu["cancel_recorded"] = array("name"=> "Cancel Current Show", "icon" => "delete"); $menu["cancel_recorded"] = array("name"=> "Cancel Current Show", "icon" => "delete");
} } else {
else {
if (!$instance->isRebroadcast()) { if (!$instance->isRebroadcast()) {
$menu["edit"] = array("name"=> "Edit Show", "icon" => "edit", "_type"=>"all", "url" => "/Schedule/populate-show-form"); $menu["edit"] = array("name"=> "Edit Show", "icon" => "edit", "_type"=>"all", "url" => "/Schedule/populate-show-form");
@ -312,8 +315,7 @@ class ScheduleController extends Zend_Controller_Action
$menu["del"]["items"]["single"] = array("name"=> "Delete This Instance", "icon" => "delete", "url" => "/schedule/delete-show"); $menu["del"]["items"]["single"] = array("name"=> "Delete This Instance", "icon" => "delete", "url" => "/schedule/delete-show");
$menu["del"]["items"]["following"] = array("name"=> "Delete This Instance and All Following", "icon" => "delete", "url" => "/schedule/cancel-show"); $menu["del"]["items"]["following"] = array("name"=> "Delete This Instance and All Following", "icon" => "delete", "url" => "/schedule/cancel-show");
} } elseif ($isAdminOrPM) {
else if ($isAdminOrPM){
$menu["del"] = array("name"=> "Delete", "icon" => "delete", "url" => "/schedule/delete-show"); $menu["del"] = array("name"=> "Delete", "icon" => "delete", "url" => "/schedule/delete-show");
} }
@ -327,10 +329,11 @@ class ScheduleController extends Zend_Controller_Action
$showInstanceId = $this->_getParam('id'); $showInstanceId = $this->_getParam('id');
$userInfo = Zend_Auth::getInstance()->getStorage()->read(); $userInfo = Zend_Auth::getInstance()->getStorage()->read();
$user = new Application_Model_User($userInfo->id); $user = new Application_Model_User($userInfo->id);
try{ try {
$show = new Application_Model_ShowInstance($showInstanceId); $show = new Application_Model_ShowInstance($showInstanceId);
}catch(Exception $e){ } catch (Exception $e) {
$this->view->show_error = true; $this->view->show_error = true;
return false; return false;
} }
@ -344,15 +347,15 @@ class ScheduleController extends Zend_Controller_Action
$show = Application_Model_Show::GetCurrentShow(); $show = Application_Model_Show::GetCurrentShow();
/* Convert all UTC times to localtime before sending back to user. */ /* Convert all UTC times to localtime before sending back to user. */
if (isset($range["previous"])){ if (isset($range["previous"])) {
$range["previous"]["starts"] = Application_Common_DateHelper::ConvertToLocalDateTimeString($range["previous"]["starts"]); $range["previous"]["starts"] = Application_Common_DateHelper::ConvertToLocalDateTimeString($range["previous"]["starts"]);
$range["previous"]["ends"] = Application_Common_DateHelper::ConvertToLocalDateTimeString($range["previous"]["ends"]); $range["previous"]["ends"] = Application_Common_DateHelper::ConvertToLocalDateTimeString($range["previous"]["ends"]);
} }
if (isset($range["current"])){ if (isset($range["current"])) {
$range["current"]["starts"] = Application_Common_DateHelper::ConvertToLocalDateTimeString($range["current"]["starts"]); $range["current"]["starts"] = Application_Common_DateHelper::ConvertToLocalDateTimeString($range["current"]["starts"]);
$range["current"]["ends"] = Application_Common_DateHelper::ConvertToLocalDateTimeString($range["current"]["ends"]); $range["current"]["ends"] = Application_Common_DateHelper::ConvertToLocalDateTimeString($range["current"]["ends"]);
} }
if (isset($range["next"])){ if (isset($range["next"])) {
$range["next"]["starts"] = Application_Common_DateHelper::ConvertToLocalDateTimeString($range["next"]["starts"]); $range["next"]["starts"] = Application_Common_DateHelper::ConvertToLocalDateTimeString($range["next"]["starts"]);
$range["next"]["ends"] = Application_Common_DateHelper::ConvertToLocalDateTimeString($range["next"]["ends"]); $range["next"]["ends"] = Application_Common_DateHelper::ConvertToLocalDateTimeString($range["next"]["ends"]);
} }
@ -391,14 +394,15 @@ class ScheduleController extends Zend_Controller_Action
$userInfo = Zend_Auth::getInstance()->getStorage()->read(); $userInfo = Zend_Auth::getInstance()->getStorage()->read();
$user = new Application_Model_User($userInfo->id); $user = new Application_Model_User($userInfo->id);
try{ try {
$show = new Application_Model_ShowInstance($showInstanceId); $show = new Application_Model_ShowInstance($showInstanceId);
}catch(Exception $e){ } catch (Exception $e) {
$this->view->show_error = true; $this->view->show_error = true;
return false; return false;
} }
if($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER, UTYPE_HOST),$show->getShowId())) { if ($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER, UTYPE_HOST),$show->getShowId())) {
$show->removeGroupFromShow($group_id); $show->removeGroupFromShow($group_id);
} }
@ -412,19 +416,21 @@ class ScheduleController extends Zend_Controller_Action
public function showContentDialogAction() public function showContentDialogAction()
{ {
$showInstanceId = $this->_getParam('id'); $showInstanceId = $this->_getParam('id');
try{ try {
$show = new Application_Model_ShowInstance($showInstanceId); $show = new Application_Model_ShowInstance($showInstanceId);
}catch(Exception $e){ } catch (Exception $e) {
$this->view->show_error = true; $this->view->show_error = true;
return false; return false;
} }
$originalShowId = $show->isRebroadcast(); $originalShowId = $show->isRebroadcast();
if (!is_null($originalShowId)){ if (!is_null($originalShowId)) {
try{ try {
$originalShow = new Application_Model_ShowInstance($originalShowId); $originalShow = new Application_Model_ShowInstance($originalShowId);
}catch(Exception $e){ } catch (Exception $e) {
$this->view->show_error = true; $this->view->show_error = true;
return false; return false;
} }
$originalShowName = $originalShow->getName(); $originalShowName = $originalShow->getName();
@ -506,12 +512,10 @@ class ScheduleController extends Zend_Controller_Action
$formRepeats->disable(); $formRepeats->disable();
$formStyle->disable(); $formStyle->disable();
//$formRecord->disable(); //$formRecord->disable();
//$formAbsoluteRebroadcast->disable(); //$formAbsoluteRebroadcast->disable();
//$formRebroadcast->disable(); //$formRebroadcast->disable();
$this->view->action = "edit-show-instance"; $this->view->action = "edit-show-instance";
$this->view->newForm = $this->view->render('schedule/add-show-form.phtml'); $this->view->newForm = $this->view->render('schedule/add-show-form.phtml');
}*/ }*/
@ -529,21 +533,22 @@ class ScheduleController extends Zend_Controller_Action
$type = $this->_getParam('type'); $type = $this->_getParam('type');
$this->view->action = "edit-show"; $this->view->action = "edit-show";
try{ try {
$showInstance = new Application_Model_ShowInstance($showInstanceId); $showInstance = new Application_Model_ShowInstance($showInstanceId);
}catch(Exception $e){ } catch (Exception $e) {
$this->view->show_error = true; $this->view->show_error = true;
return false; return false;
} }
$isAdminOrPM = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER)); $isAdminOrPM = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER));
$isDJ = $user->isHost($showInstance->getShowId()); $isDJ = $user->isHost($showInstance->getShowId());
if(!($isAdminOrPM || $isDJ)) { if (!($isAdminOrPM || $isDJ)) {
return; return;
} }
if($isDJ){ if ($isDJ) {
$this->view->action = "dj-edit-show"; $this->view->action = "dj-edit-show";
} }
@ -590,12 +595,12 @@ class ScheduleController extends Zend_Controller_Action
'add_show_duration' => $show->getDuration(true), 'add_show_duration' => $show->getDuration(true),
'add_show_repeats' => $show->isRepeating() ? 1 : 0)); 'add_show_repeats' => $show->isRepeating() ? 1 : 0));
if ($show->isStartDateTimeInPast()){ if ($show->isStartDateTimeInPast()) {
// for a non-repeating show, we should never allow user to change the start time. // for a non-repeating show, we should never allow user to change the start time.
// for the repeating show, we should allow because the form works as repeating template form // for the repeating show, we should allow because the form works as repeating template form
if(!$showInstance->getShow()->isRepeating()){ if (!$showInstance->getShow()->isRepeating()) {
$formWhen->disableStartDateAndTime(); $formWhen->disableStartDateAndTime();
}else{ } else {
$formWhen->getElement('add_show_start_date')->setOptions(array('disabled' => true)); $formWhen->getElement('add_show_start_date')->setOptions(array('disabled' => true));
} }
} }
@ -603,7 +608,7 @@ class ScheduleController extends Zend_Controller_Action
//need to get the days of the week in the php timezone (for the front end). //need to get the days of the week in the php timezone (for the front end).
$days = array(); $days = array();
$showDays = CcShowDaysQuery::create()->filterByDbShowId($showInstance->getShowId())->find(); $showDays = CcShowDaysQuery::create()->filterByDbShowId($showInstance->getShowId())->find();
foreach($showDays as $showDay){ foreach ($showDays as $showDay) {
$showStartDay = new DateTime($showDay->getDbFirstShow(), new DateTimeZone($showDay->getDbTimezone())); $showStartDay = new DateTime($showDay->getDbFirstShow(), new DateTimeZone($showDay->getDbTimezone()));
$showStartDay->setTimezone(new DateTimeZone(date_default_timezone_get())); $showStartDay->setTimezone(new DateTimeZone(date_default_timezone_get()));
array_push($days, $showStartDay->format('w')); array_push($days, $showStartDay->format('w'));
@ -620,7 +625,7 @@ class ScheduleController extends Zend_Controller_Action
$hosts = array(); $hosts = array();
$showHosts = CcShowHostsQuery::create()->filterByDbShow($showInstance->getShowId())->find(); $showHosts = CcShowHostsQuery::create()->filterByDbShow($showInstance->getShowId())->find();
foreach($showHosts as $showHost){ foreach ($showHosts as $showHost) {
array_push($hosts, $showHost->getDbHost()); array_push($hosts, $showHost->getDbHost());
} }
$formWho->populate(array('add_show_hosts' => $hosts)); $formWho->populate(array('add_show_hosts' => $hosts));
@ -629,7 +634,7 @@ class ScheduleController extends Zend_Controller_Action
$formLive->populate($show->getLiveStreamInfo()); $formLive->populate($show->getLiveStreamInfo());
if(!$isSaas){ if (!$isSaas) {
$formRecord = new Application_Form_AddShowRR(); $formRecord = new Application_Form_AddShowRR();
$formAbsoluteRebroadcast = new Application_Form_AddShowAbsoluteRebroadcastDates(); $formAbsoluteRebroadcast = new Application_Form_AddShowAbsoluteRebroadcastDates();
$formRebroadcast = new Application_Form_AddShowRebroadcastDates(); $formRebroadcast = new Application_Form_AddShowRebroadcastDates();
@ -652,7 +657,7 @@ class ScheduleController extends Zend_Controller_Action
$rebroadcastsRelative = $show->getRebroadcastsRelative(); $rebroadcastsRelative = $show->getRebroadcastsRelative();
$rebroadcastFormValues = array(); $rebroadcastFormValues = array();
$i = 1; $i = 1;
foreach ($rebroadcastsRelative as $rebroadcast){ foreach ($rebroadcastsRelative as $rebroadcast) {
$rebroadcastFormValues["add_show_rebroadcast_date_$i"] = $rebroadcast['day_offset']; $rebroadcastFormValues["add_show_rebroadcast_date_$i"] = $rebroadcast['day_offset'];
$rebroadcastFormValues["add_show_rebroadcast_time_$i"] = Application_Common_DateHelper::removeSecondsFromTime($rebroadcast['start_time']); $rebroadcastFormValues["add_show_rebroadcast_time_$i"] = Application_Common_DateHelper::removeSecondsFromTime($rebroadcast['start_time']);
$i++; $i++;
@ -662,20 +667,20 @@ class ScheduleController extends Zend_Controller_Action
$rebroadcastsAbsolute = $show->getRebroadcastsAbsolute(); $rebroadcastsAbsolute = $show->getRebroadcastsAbsolute();
$rebroadcastAbsoluteFormValues = array(); $rebroadcastAbsoluteFormValues = array();
$i = 1; $i = 1;
foreach ($rebroadcastsAbsolute as $rebroadcast){ foreach ($rebroadcastsAbsolute as $rebroadcast) {
$rebroadcastAbsoluteFormValues["add_show_rebroadcast_date_absolute_$i"] = $rebroadcast['start_date']; $rebroadcastAbsoluteFormValues["add_show_rebroadcast_date_absolute_$i"] = $rebroadcast['start_date'];
$rebroadcastAbsoluteFormValues["add_show_rebroadcast_time_absolute_$i"] = $rebroadcast['start_time']; $rebroadcastAbsoluteFormValues["add_show_rebroadcast_time_absolute_$i"] = $rebroadcast['start_time'];
$i++; $i++;
} }
$formAbsoluteRebroadcast->populate($rebroadcastAbsoluteFormValues); $formAbsoluteRebroadcast->populate($rebroadcastAbsoluteFormValues);
if(!$isAdminOrPM){ if (!$isAdminOrPM) {
$formRecord->disable(); $formRecord->disable();
$formAbsoluteRebroadcast->disable(); $formAbsoluteRebroadcast->disable();
$formRebroadcast->disable(); $formRebroadcast->disable();
} }
} }
if(!$isAdminOrPM){ if (!$isAdminOrPM) {
$formWhat->disable(); $formWhat->disable();
$formWho->disable(); $formWho->disable();
$formWhen->disable(); $formWhen->disable();
@ -687,22 +692,23 @@ class ScheduleController extends Zend_Controller_Action
$this->view->entries = 5; $this->view->entries = 5;
} }
public function getFormAction() { public function getFormAction()
{
$user = Application_Model_User::getCurrentUser(); $user = Application_Model_User::getCurrentUser();
if($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))){ if ($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) {
Application_Model_Schedule::createNewFormSections($this->view); Application_Model_Schedule::createNewFormSections($this->view);
$this->view->form = $this->view->render('schedule/add-show-form.phtml'); $this->view->form = $this->view->render('schedule/add-show-form.phtml');
} }
} }
public function djEditShowAction(){ public function djEditShowAction()
{
$js = $this->_getParam('data'); $js = $this->_getParam('data');
$data = array(); $data = array();
//need to convert from serialized jQuery array. //need to convert from serialized jQuery array.
foreach($js as $j){ foreach ($js as $j) {
$data[$j["name"]] = $j["value"]; $data[$j["name"]] = $j["value"];
} }
@ -721,12 +727,12 @@ class ScheduleController extends Zend_Controller_Action
$data = array(); $data = array();
//need to convert from serialized jQuery array. //need to convert from serialized jQuery array.
foreach($js as $j){ foreach ($js as $j) {
$data[$j["name"]] = $j["value"]; $data[$j["name"]] = $j["value"];
} }
$success = Application_Model_Schedule::updateShowInstance($data, $this); $success = Application_Model_Schedule::updateShowInstance($data, $this);
if ($success){ if ($success) {
$this->view->addNewShow = true; $this->view->addNewShow = true;
$this->view->newForm = $this->view->render('schedule/add-show-form.phtml'); $this->view->newForm = $this->view->render('schedule/add-show-form.phtml');
} else { } else {
@ -735,21 +741,21 @@ class ScheduleController extends Zend_Controller_Action
} }
}*/ }*/
public function editShowAction(){ public function editShowAction()
{
//1) Get add_show_start_date since it might not have been sent //1) Get add_show_start_date since it might not have been sent
$js = $this->_getParam('data'); $js = $this->_getParam('data');
$data = array(); $data = array();
//need to convert from serialized jQuery array. //need to convert from serialized jQuery array.
foreach($js as $j){ foreach ($js as $j) {
$data[$j["name"]] = $j["value"]; $data[$j["name"]] = $j["value"];
} }
$data['add_show_hosts'] = $this->_getParam('hosts'); $data['add_show_hosts'] = $this->_getParam('hosts');
$data['add_show_day_check'] = $this->_getParam('days'); $data['add_show_day_check'] = $this->_getParam('days');
if($data['add_show_day_check'] == "") { if ($data['add_show_day_check'] == "") {
$data['add_show_day_check'] = null; $data['add_show_day_check'] = null;
} }
@ -757,14 +763,14 @@ class ScheduleController extends Zend_Controller_Action
$validateStartDate = true; $validateStartDate = true;
$validateStartTime = true; $validateStartTime = true;
if (!array_key_exists('add_show_start_date', $data)){ if (!array_key_exists('add_show_start_date', $data)) {
//Changing the start date was disabled, since the //Changing the start date was disabled, since the
//array key does not exist. We need to repopulate this entry from the db. //array key does not exist. We need to repopulate this entry from the db.
//The start date will be returned in UTC time, so lets convert it to local time. //The start date will be returned in UTC time, so lets convert it to local time.
$dt = Application_Common_DateHelper::ConvertToLocalDateTime($show->getStartDateAndTime()); $dt = Application_Common_DateHelper::ConvertToLocalDateTime($show->getStartDateAndTime());
$data['add_show_start_date'] = $dt->format("Y-m-d"); $data['add_show_start_date'] = $dt->format("Y-m-d");
if (!array_key_exists('add_show_start_time', $data)){ if (!array_key_exists('add_show_start_time', $data)) {
$data['add_show_start_time'] = $dt->format("H:i"); $data['add_show_start_time'] = $dt->format("H:i");
$validateStartTime = false; $validateStartTime = false;
} }
@ -775,14 +781,14 @@ class ScheduleController extends Zend_Controller_Action
$origianlShowStartDateTime = Application_Common_DateHelper::ConvertToLocalDateTime($show->getStartDateAndTime()); $origianlShowStartDateTime = Application_Common_DateHelper::ConvertToLocalDateTime($show->getStartDateAndTime());
$success = Application_Model_Schedule::addUpdateShow($data, $this, $validateStartDate, $origianlShowStartDateTime, true, $data['add_show_instance_id']); $success = Application_Model_Schedule::addUpdateShow($data, $this, $validateStartDate, $origianlShowStartDateTime, true, $data['add_show_instance_id']);
if ($success){ if ($success) {
$this->view->addNewShow = true; $this->view->addNewShow = true;
$this->view->newForm = $this->view->render('schedule/add-show-form.phtml'); $this->view->newForm = $this->view->render('schedule/add-show-form.phtml');
} else { } else {
if (!$validateStartDate){ if (!$validateStartDate) {
$this->view->when->getElement('add_show_start_date')->setOptions(array('disabled' => true)); $this->view->when->getElement('add_show_start_date')->setOptions(array('disabled' => true));
} }
if(!$validateStartTime){ if (!$validateStartTime) {
$this->view->when->getElement('add_show_start_time')->setOptions(array('disabled' => true)); $this->view->when->getElement('add_show_start_time')->setOptions(array('disabled' => true));
} }
$this->view->rr->getElement('add_show_record')->setOptions(array('disabled' => true)); $this->view->rr->getElement('add_show_record')->setOptions(array('disabled' => true));
@ -792,26 +798,27 @@ class ScheduleController extends Zend_Controller_Action
} }
} }
public function addShowAction(){ public function addShowAction()
{
$js = $this->_getParam('data'); $js = $this->_getParam('data');
$data = array(); $data = array();
//need to convert from serialized jQuery array. //need to convert from serialized jQuery array.
foreach($js as $j){ foreach ($js as $j) {
$data[$j["name"]] = $j["value"]; $data[$j["name"]] = $j["value"];
} }
$data['add_show_hosts'] = $this->_getParam('hosts'); $data['add_show_hosts'] = $this->_getParam('hosts');
$data['add_show_day_check'] = $this->_getParam('days'); $data['add_show_day_check'] = $this->_getParam('days');
if($data['add_show_day_check'] == "") { if ($data['add_show_day_check'] == "") {
$data['add_show_day_check'] = null; $data['add_show_day_check'] = null;
} }
$validateStartDate = true; $validateStartDate = true;
$success = Application_Model_Schedule::addUpdateShow($data, $this, $validateStartDate); $success = Application_Model_Schedule::addUpdateShow($data, $this, $validateStartDate);
if ($success){ if ($success) {
$this->view->addNewShow = true; $this->view->addNewShow = true;
$this->view->newForm = $this->view->render('schedule/add-show-form.phtml'); $this->view->newForm = $this->view->render('schedule/add-show-form.phtml');
} else { } else {
@ -829,8 +836,9 @@ class ScheduleController extends Zend_Controller_Action
try { try {
$showInstance = new Application_Model_ShowInstance($showInstanceId); $showInstance = new Application_Model_ShowInstance($showInstanceId);
} catch(Exception $e) { } catch (Exception $e) {
$this->view->show_error = true; $this->view->show_error = true;
return false; return false;
} }
$show = new Application_Model_Show($showInstance->getShowId()); $show = new Application_Model_Show($showInstance->getShowId());
@ -847,23 +855,23 @@ class ScheduleController extends Zend_Controller_Action
if ($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) { if ($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) {
$id = $this->_getParam('id'); $id = $this->_getParam('id');
try { try {
$scheduler = new Application_Model_Scheduler(); $scheduler = new Application_Model_Scheduler();
$scheduler->cancelShow($id); $scheduler->cancelShow($id);
// send kick out source stream signal to pypo // send kick out source stream signal to pypo
$data = array("sourcename"=>"live_dj"); $data = array("sourcename"=>"live_dj");
Application_Model_RabbitMq::SendMessageToPypo("disconnect_source", $data); Application_Model_RabbitMq::SendMessageToPypo("disconnect_source", $data);
} } catch (Exception $e) {
catch (Exception $e) { $this->view->error = $e->getMessage();
$this->view->error = $e->getMessage(); Logging::log($e->getMessage());
Logging::log($e->getMessage()); Logging::log("{$e->getFile()}");
Logging::log("{$e->getFile()}"); Logging::log("{$e->getLine()}");
Logging::log("{$e->getLine()}");
} }
} }
} }
public function contentContextMenuAction(){ public function contentContextMenuAction()
{
global $CC_CONFIG; global $CC_CONFIG;
$id = $this->_getParam('id'); $id = $this->_getParam('id');
@ -891,7 +899,8 @@ class ScheduleController extends Zend_Controller_Action
* Sets the user specific preference for which time scale to use in Calendar. * Sets the user specific preference for which time scale to use in Calendar.
* This is only being used by schedule.js at the moment. * This is only being used by schedule.js at the moment.
*/ */
public function setTimeScaleAction() { public function setTimeScaleAction()
{
Application_Model_Preference::SetCalendarTimeScale($this->_getParam('timeScale')); Application_Model_Preference::SetCalendarTimeScale($this->_getParam('timeScale'));
} }
@ -899,17 +908,19 @@ class ScheduleController extends Zend_Controller_Action
* Sets the user specific preference for which time interval to use in Calendar. * Sets the user specific preference for which time interval to use in Calendar.
* This is only being used by schedule.js at the moment. * This is only being used by schedule.js at the moment.
*/ */
public function setTimeIntervalAction() { public function setTimeIntervalAction()
{
Application_Model_Preference::SetCalendarTimeInterval($this->_getParam('timeInterval')); Application_Model_Preference::SetCalendarTimeInterval($this->_getParam('timeInterval'));
} }
public function calculateDurationAction() { public function calculateDurationAction()
{
global $CC_CONFIG; global $CC_CONFIG;
$startParam = $this->_getParam('startTime'); $startParam = $this->_getParam('startTime');
$endParam = $this->_getParam('endTime'); $endParam = $this->_getParam('endTime');
try{ try {
$startDateTime = new DateTime($startParam); $startDateTime = new DateTime($startParam);
$endDateTime = new DateTime($endParam); $endDateTime = new DateTime($endParam);
@ -919,17 +930,17 @@ class ScheduleController extends Zend_Controller_Action
$duration = $UTCEndDateTime->diff($UTCStartDateTime); $duration = $UTCEndDateTime->diff($UTCStartDateTime);
$day = intval($duration->format('%d')); $day = intval($duration->format('%d'));
if($day > 0){ if ($day > 0) {
$hour = intval($duration->format('%h')); $hour = intval($duration->format('%h'));
$min = intval($duration->format('%i')); $min = intval($duration->format('%i'));
$hour += $day * 24; $hour += $day * 24;
$hour = min($hour, 99); $hour = min($hour, 99);
$sign = $duration->format('%r'); $sign = $duration->format('%r');
$result = sprintf('%s%02dh %02dm', $sign, $hour, $min); $result = sprintf('%s%02dh %02dm', $sign, $hour, $min);
}else{ } else {
$result = $duration->format('%r%Hh %Im'); $result = $duration->format('%r%Hh %Im');
} }
}catch (Exception $e){ } catch (Exception $e) {
$result = "Invalid Date"; $result = "Invalid Date";
} }
@ -937,4 +948,3 @@ class ScheduleController extends Zend_Controller_Action
exit(); exit();
} }
} }

View file

@ -16,130 +16,125 @@ class ShowbuilderController extends Zend_Controller_Action
->initContext(); ->initContext();
} }
public function indexAction() { public function indexAction()
{
global $CC_CONFIG;
global $CC_CONFIG; $request = $this->getRequest();
$request = $this->getRequest();
$baseUrl = $request->getBaseUrl(); $baseUrl = $request->getBaseUrl();
$user = Application_Model_User::getCurrentUser(); $user = Application_Model_User::getCurrentUser();
$userType = $user->getType(); $userType = $user->getType();
$this->view->headScript()->appendScript("localStorage.setItem( 'user-type', '$userType' );"); $this->view->headScript()->appendScript("localStorage.setItem( 'user-type', '$userType' );");
$data = Application_Model_Preference::getValue("library_datatable", true); $data = Application_Model_Preference::getValue("library_datatable", true);
if ($data != "") { if ($data != "") {
$libraryTable = json_encode(unserialize($data)); $libraryTable = json_encode(unserialize($data));
$this->view->headScript()->appendScript("localStorage.setItem( 'datatables-library', JSON.stringify($libraryTable) );"); $this->view->headScript()->appendScript("localStorage.setItem( 'datatables-library', JSON.stringify($libraryTable) );");
} } else {
else {
$this->view->headScript()->appendScript("localStorage.setItem( 'datatables-library', '' );"); $this->view->headScript()->appendScript("localStorage.setItem( 'datatables-library', '' );");
} }
$data = Application_Model_Preference::getValue("timeline_datatable", true); $data = Application_Model_Preference::getValue("timeline_datatable", true);
if ($data != "") { if ($data != "") {
$timelineTable = json_encode(unserialize($data)); $timelineTable = json_encode(unserialize($data));
$this->view->headScript()->appendScript("localStorage.setItem( 'datatables-timeline', JSON.stringify($timelineTable) );"); $this->view->headScript()->appendScript("localStorage.setItem( 'datatables-timeline', JSON.stringify($timelineTable) );");
} } else {
else { $this->view->headScript()->appendScript("localStorage.setItem( 'datatables-timeline', '' );");
$this->view->headScript()->appendScript("localStorage.setItem( 'datatables-timeline', '' );");
} }
$this->view->headScript()->appendFile($baseUrl.'/js/contextmenu/jquery.contextMenu.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/contextmenu/jquery.contextMenu.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/js/jquery.dataTables.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/datatables/js/jquery.dataTables.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.pluginAPI.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.pluginAPI.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.fnSetFilteringDelay.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.fnSetFilteringDelay.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.ColVis.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.ColVis.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.ColReorder.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.ColReorder.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.FixedColumns.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.FixedColumns.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/blockui/jquery.blockUI.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/blockui/jquery.blockUI.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/airtime/buttons/buttons.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/airtime/buttons/buttons.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/airtime/utilities/utilities.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/airtime/utilities/utilities.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headScript()->appendFile($baseUrl.'/js/airtime/library/library.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/airtime/library/library.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$this->view->headLink()->appendStylesheet($baseUrl.'/css/media_library.css?'.$CC_CONFIG['airtime_version']); $this->view->headLink()->appendStylesheet($baseUrl.'/css/media_library.css?'.$CC_CONFIG['airtime_version']);
$this->view->headLink()->appendStylesheet($baseUrl.'/css/jquery.contextMenu.css?'.$CC_CONFIG['airtime_version']); $this->view->headLink()->appendStylesheet($baseUrl.'/css/jquery.contextMenu.css?'.$CC_CONFIG['airtime_version']);
$this->view->headLink()->appendStylesheet($baseUrl.'/css/datatables/css/ColVis.css?'.$CC_CONFIG['airtime_version']); $this->view->headLink()->appendStylesheet($baseUrl.'/css/datatables/css/ColVis.css?'.$CC_CONFIG['airtime_version']);
$this->view->headLink()->appendStylesheet($baseUrl.'/css/datatables/css/ColReorder.css?'.$CC_CONFIG['airtime_version']); $this->view->headLink()->appendStylesheet($baseUrl.'/css/datatables/css/ColReorder.css?'.$CC_CONFIG['airtime_version']);
$this->view->headScript()->appendFile($this->view->baseUrl('/js/airtime/library/events/library_showbuilder.js?'.$CC_CONFIG['airtime_version']),'text/javascript'); $this->view->headScript()->appendFile($this->view->baseUrl('/js/airtime/library/events/library_showbuilder.js?'.$CC_CONFIG['airtime_version']),'text/javascript');
$refer_sses = new Zend_Session_Namespace('referrer'); $refer_sses = new Zend_Session_Namespace('referrer');
if ($request->isPost()) { if ($request->isPost()) {
$form = new Application_Form_RegisterAirtime(); $form = new Application_Form_RegisterAirtime();
$values = $request->getPost(); $values = $request->getPost();
if ($values["Publicise"] != 1 && $form->isValid($values)) { if ($values["Publicise"] != 1 && $form->isValid($values)) {
Application_Model_Preference::SetSupportFeedback($values["SupportFeedback"]); Application_Model_Preference::SetSupportFeedback($values["SupportFeedback"]);
if (isset($values["Privacy"])) { if (isset($values["Privacy"])) {
Application_Model_Preference::SetPrivacyPolicyCheck($values["Privacy"]); Application_Model_Preference::SetPrivacyPolicyCheck($values["Privacy"]);
} }
// unset session // unset session
Zend_Session::namespaceUnset('referrer'); Zend_Session::namespaceUnset('referrer');
} } elseif ($values["Publicise"] == '1' && $form->isValid($values)) {
else if ($values["Publicise"] == '1' && $form->isValid($values)) { Application_Model_Preference::SetHeadTitle($values["stnName"], $this->view);
Application_Model_Preference::SetHeadTitle($values["stnName"], $this->view); Application_Model_Preference::SetPhone($values["Phone"]);
Application_Model_Preference::SetPhone($values["Phone"]); Application_Model_Preference::SetEmail($values["Email"]);
Application_Model_Preference::SetEmail($values["Email"]); Application_Model_Preference::SetStationWebSite($values["StationWebSite"]);
Application_Model_Preference::SetStationWebSite($values["StationWebSite"]); Application_Model_Preference::SetPublicise($values["Publicise"]);
Application_Model_Preference::SetPublicise($values["Publicise"]);
$form->Logo->receive();
$form->Logo->receive(); $imagePath = $form->Logo->getFileName();
$imagePath = $form->Logo->getFileName();
Application_Model_Preference::SetStationCountry($values["Country"]);
Application_Model_Preference::SetStationCountry($values["Country"]); Application_Model_Preference::SetStationCity($values["City"]);
Application_Model_Preference::SetStationCity($values["City"]); Application_Model_Preference::SetStationDescription($values["Description"]);
Application_Model_Preference::SetStationDescription($values["Description"]); Application_Model_Preference::SetStationLogo($imagePath);
Application_Model_Preference::SetStationLogo($imagePath);
Application_Model_Preference::SetSupportFeedback($values["SupportFeedback"]); Application_Model_Preference::SetSupportFeedback($values["SupportFeedback"]);
if (isset($values["Privacy"])){ if (isset($values["Privacy"])) {
Application_Model_Preference::SetPrivacyPolicyCheck($values["Privacy"]); Application_Model_Preference::SetPrivacyPolicyCheck($values["Privacy"]);
} }
// unset session // unset session
Zend_Session::namespaceUnset('referrer'); Zend_Session::namespaceUnset('referrer');
} else {
$logo = Application_Model_Preference::GetStationLogo();
if ($logo) {
$this->view->logoImg = $logo;
}
$this->view->dialog = $form;
$this->view->headScript()->appendFile($baseUrl.'/js/airtime/nowplaying/register.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
} }
else {
$logo = Application_Model_Preference::GetStationLogo();
if ($logo) {
$this->view->logoImg = $logo;
}
$this->view->dialog = $form;
$this->view->headScript()->appendFile($baseUrl.'/js/airtime/nowplaying/register.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
}
} }
//popup if previous page was login //popup if previous page was login
if ($refer_sses->referrer == 'login' && Application_Model_Preference::ShouldShowPopUp() if ($refer_sses->referrer == 'login' && Application_Model_Preference::ShouldShowPopUp()
&& !Application_Model_Preference::GetSupportFeedback() && $user->isAdmin()){ && !Application_Model_Preference::GetSupportFeedback() && $user->isAdmin()){
$form = new Application_Form_RegisterAirtime(); $form = new Application_Form_RegisterAirtime();
$logo = Application_Model_Preference::GetStationLogo(); $logo = Application_Model_Preference::GetStationLogo();
if ($logo) { if ($logo) {
$this->view->logoImg = $logo; $this->view->logoImg = $logo;
} }
$this->view->dialog = $form; $this->view->dialog = $form;
$this->view->headScript()->appendFile($baseUrl.'/js/airtime/nowplaying/register.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/airtime/nowplaying/register.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
} }
//determine whether to remove/hide/display the library. //determine whether to remove/hide/display the library.
$showLib = false; $showLib = false;
if (!$user->isGuest()) { if (!$user->isGuest()) {
$disableLib = false; $disableLib = false;
$data = Application_Model_Preference::getValue("nowplaying_screen", true); $data = Application_Model_Preference::getValue("nowplaying_screen", true);
if ($data != "") { if ($data != "") {
$settings = unserialize($data); $settings = unserialize($data);
if ($settings["library"] == "true") { if ($settings["library"] == "true") {
$showLib = true; $showLib = true;
} }
} }
} } else {
else {
$disableLib = true; $disableLib = true;
} }
$this->view->disableLib = $disableLib; $this->view->disableLib = $disableLib;
@ -175,36 +170,36 @@ class ShowbuilderController extends Zend_Controller_Action
$this->view->headLink()->appendStylesheet($baseUrl.'/css/showbuilder.css?'.$CC_CONFIG['airtime_version']); $this->view->headLink()->appendStylesheet($baseUrl.'/css/showbuilder.css?'.$CC_CONFIG['airtime_version']);
} }
public function contextMenuAction() public function contextMenuAction()
{ {
$id = $this->_getParam('id'); $id = $this->_getParam('id');
$now = floatval(microtime(true)); $now = floatval(microtime(true));
$request = $this->getRequest(); $request = $this->getRequest();
$baseUrl = $request->getBaseUrl(); $baseUrl = $request->getBaseUrl();
$menu = array(); $menu = array();
$user = Application_Model_User::getCurrentUser(); $user = Application_Model_User::getCurrentUser();
$item = CcScheduleQuery::create()->findPK($id); $item = CcScheduleQuery::create()->findPK($id);
$instance = $item->getCcShowInstances(); $instance = $item->getCcShowInstances();
$menu["preview"] = array("name"=> "Preview", "icon" => "play"); $menu["preview"] = array("name"=> "Preview", "icon" => "play");
//select the cursor //select the cursor
$menu["selCurs"] = array("name"=> "Select Cursor","icon" => "select-cursor"); $menu["selCurs"] = array("name"=> "Select Cursor","icon" => "select-cursor");
$menu["delCurs"] = array("name"=> "Remove Cursor","icon" => "select-cursor"); $menu["delCurs"] = array("name"=> "Remove Cursor","icon" => "select-cursor");
if ($now < floatval($item->getDbEnds("U.u")) && $user->canSchedule($instance->getDbShowId())) { if ($now < floatval($item->getDbEnds("U.u")) && $user->canSchedule($instance->getDbShowId())) {
//remove/truncate the item from the schedule //remove/truncate the item from the schedule
$menu["del"] = array("name"=> "Delete", "icon" => "delete", "url" => "/showbuilder/schedule-remove"); $menu["del"] = array("name"=> "Delete", "icon" => "delete", "url" => "/showbuilder/schedule-remove");
} }
$this->view->items = $menu; $this->view->items = $menu;
} }
public function builderDialogAction() { public function builderDialogAction()
{
$request = $this->getRequest(); $request = $this->getRequest();
$id = $request->getParam("id"); $id = $request->getParam("id");
@ -212,6 +207,7 @@ class ShowbuilderController extends Zend_Controller_Action
if (is_null($instance)) { if (is_null($instance)) {
$this->view->error = "show does not exist"; $this->view->error = "show does not exist";
return; return;
} }
@ -231,8 +227,8 @@ class ShowbuilderController extends Zend_Controller_Action
$this->view->dialog = $this->view->render('showbuilder/builderDialog.phtml'); $this->view->dialog = $this->view->render('showbuilder/builderDialog.phtml');
} }
public function checkBuilderFeedAction() { public function checkBuilderFeedAction()
{
$request = $this->getRequest(); $request = $this->getRequest();
$current_time = time(); $current_time = time();
@ -254,14 +250,13 @@ class ShowbuilderController extends Zend_Controller_Action
// -1 default will always call the schedule to be sent back if no timestamp is defined. // -1 default will always call the schedule to be sent back if no timestamp is defined.
if ($showBuilder->hasBeenUpdatedSince($timestamp, $instances)) { if ($showBuilder->hasBeenUpdatedSince($timestamp, $instances)) {
$this->view->update = true; $this->view->update = true;
} } else {
else {
$this->view->update = false; $this->view->update = false;
} }
} }
public function builderFeedAction() { public function builderFeedAction()
{
$start = microtime(true); $start = microtime(true);
$request = $this->getRequest(); $request = $this->getRequest();
@ -285,14 +280,14 @@ class ShowbuilderController extends Zend_Controller_Action
$this->view->instances = $data["showInstances"]; $this->view->instances = $data["showInstances"];
$this->view->timestamp = $current_time; $this->view->timestamp = $current_time;
$end = microtime(true); $end = microtime(true);
Logging::debug("getting builder feed info took:"); Logging::debug("getting builder feed info took:");
Logging::debug(floatval($end) - floatval($start)); Logging::debug(floatval($end) - floatval($start));
} }
public function scheduleAddAction() { public function scheduleAddAction()
{
$request = $this->getRequest(); $request = $this->getRequest();
$mediaItems = $request->getParam("mediaIds", array()); $mediaItems = $request->getParam("mediaIds", array());
$scheduledItems = $request->getParam("schedIds", array()); $scheduledItems = $request->getParam("schedIds", array());
@ -300,14 +295,12 @@ class ShowbuilderController extends Zend_Controller_Action
try { try {
$scheduler = new Application_Model_Scheduler(); $scheduler = new Application_Model_Scheduler();
$scheduler->scheduleAfter($scheduledItems, $mediaItems); $scheduler->scheduleAfter($scheduledItems, $mediaItems);
} } catch (OutDatedScheduleException $e) {
catch (OutDatedScheduleException $e) {
$this->view->error = $e->getMessage(); $this->view->error = $e->getMessage();
Logging::log($e->getMessage()); Logging::log($e->getMessage());
Logging::log("{$e->getFile()}"); Logging::log("{$e->getFile()}");
Logging::log("{$e->getLine()}"); Logging::log("{$e->getLine()}");
} } catch (Exception $e) {
catch (Exception $e) {
$this->view->error = $e->getMessage(); $this->view->error = $e->getMessage();
Logging::log($e->getMessage()); Logging::log($e->getMessage());
Logging::log("{$e->getFile()}"); Logging::log("{$e->getFile()}");
@ -323,14 +316,12 @@ class ShowbuilderController extends Zend_Controller_Action
try { try {
$scheduler = new Application_Model_Scheduler(); $scheduler = new Application_Model_Scheduler();
$scheduler->removeItems($items); $scheduler->removeItems($items);
} } catch (OutDatedScheduleException $e) {
catch (OutDatedScheduleException $e) {
$this->view->error = $e->getMessage(); $this->view->error = $e->getMessage();
Logging::log($e->getMessage()); Logging::log($e->getMessage());
Logging::log("{$e->getFile()}"); Logging::log("{$e->getFile()}");
Logging::log("{$e->getLine()}"); Logging::log("{$e->getLine()}");
} } catch (Exception $e) {
catch (Exception $e) {
$this->view->error = $e->getMessage(); $this->view->error = $e->getMessage();
Logging::log($e->getMessage()); Logging::log($e->getMessage());
Logging::log("{$e->getFile()}"); Logging::log("{$e->getFile()}");
@ -338,8 +329,8 @@ class ShowbuilderController extends Zend_Controller_Action
} }
} }
public function scheduleMoveAction() { public function scheduleMoveAction()
{
$request = $this->getRequest(); $request = $this->getRequest();
$selectedItems = $request->getParam("selectedItem"); $selectedItems = $request->getParam("selectedItem");
$afterItem = $request->getParam("afterItem"); $afterItem = $request->getParam("afterItem");
@ -347,14 +338,12 @@ class ShowbuilderController extends Zend_Controller_Action
try { try {
$scheduler = new Application_Model_Scheduler(); $scheduler = new Application_Model_Scheduler();
$scheduler->moveItem($selectedItems, $afterItem); $scheduler->moveItem($selectedItems, $afterItem);
} } catch (OutDatedScheduleException $e) {
catch (OutDatedScheduleException $e) {
$this->view->error = $e->getMessage(); $this->view->error = $e->getMessage();
Logging::log($e->getMessage()); Logging::log($e->getMessage());
Logging::log("{$e->getFile()}"); Logging::log("{$e->getFile()}");
Logging::log("{$e->getLine()}"); Logging::log("{$e->getLine()}");
} } catch (Exception $e) {
catch (Exception $e) {
$this->view->error = $e->getMessage(); $this->view->error = $e->getMessage();
Logging::log($e->getMessage()); Logging::log($e->getMessage());
Logging::log("{$e->getFile()}"); Logging::log("{$e->getFile()}");
@ -362,8 +351,8 @@ class ShowbuilderController extends Zend_Controller_Action
} }
} }
public function scheduleReorderAction() { public function scheduleReorderAction()
{
$request = $this->getRequest(); $request = $this->getRequest();
$showInstance = $request->getParam("instanceId"); $showInstance = $request->getParam("instanceId");

View file

@ -38,10 +38,9 @@ class UserController extends Zend_Controller_Action
if ($form->isValid($request->getPost())) { if ($form->isValid($request->getPost())) {
$formdata = $form->getValues(); $formdata = $form->getValues();
if(isset($CC_CONFIG['demo']) && $CC_CONFIG['demo'] == 1 && $formdata['login'] == 'admin' && $formdata['user_id'] != 0){ if (isset($CC_CONFIG['demo']) && $CC_CONFIG['demo'] == 1 && $formdata['login'] == 'admin' && $formdata['user_id'] != 0) {
$this->view->successMessage = "<div class='errors'>Specific action is not allowed in demo version!</div>"; $this->view->successMessage = "<div class='errors'>Specific action is not allowed in demo version!</div>";
} } elseif ($form->validateLogin($formdata)) {
else if ($form->validateLogin($formdata)){
$user = new Application_Model_User($formdata['user_id']); $user = new Application_Model_User($formdata['user_id']);
$user->setFirstName($formdata['first_name']); $user->setFirstName($formdata['first_name']);
$user->setLastName($formdata['last_name']); $user->setLastName($formdata['last_name']);
@ -57,7 +56,7 @@ class UserController extends Zend_Controller_Action
$form->reset(); $form->reset();
if (strlen($formdata['user_id']) == 0){ if (strlen($formdata['user_id']) == 0) {
$this->view->successMessage = "<div class='success'>User added successfully!</div>"; $this->view->successMessage = "<div class='success'>User added successfully!</div>";
} else { } else {
$this->view->successMessage = "<div class='success'>User updated successfully!</div>"; $this->view->successMessage = "<div class='success'>User updated successfully!</div>";
@ -98,23 +97,11 @@ class UserController extends Zend_Controller_Action
$userInfo = Zend_Auth::getInstance()->getStorage()->read(); $userInfo = Zend_Auth::getInstance()->getStorage()->read();
$userId = $userInfo->id; $userId = $userInfo->id;
if ($delId != $userId){ if ($delId != $userId) {
$user = new Application_Model_User($delId); $user = new Application_Model_User($delId);
$this->view->entries = $user->delete(); $this->view->entries = $user->delete();
} }
} }
} }

View file

@ -11,31 +11,31 @@ class UsersettingsController extends Zend_Controller_Action
->addActionContext('get-library-datatable', 'json') ->addActionContext('get-library-datatable', 'json')
->addActionContext('set-library-datatable', 'json') ->addActionContext('set-library-datatable', 'json')
->addActionContext('get-timeline-datatable', 'json') ->addActionContext('get-timeline-datatable', 'json')
->addActionContext('set-timeline-datatable', 'json') ->addActionContext('set-timeline-datatable', 'json')
->addActionContext('remindme', 'json') ->addActionContext('remindme', 'json')
->addActionContext('donotshowregistrationpopup', 'json') ->addActionContext('donotshowregistrationpopup', 'json')
->initContext(); ->initContext();
} }
public function setNowPlayingScreenSettingsAction() { public function setNowPlayingScreenSettingsAction()
{
$request = $this->getRequest();
$settings = $request->getParam("settings");
$request = $this->getRequest(); $data = serialize($settings);
$settings = $request->getParam("settings");
$data = serialize($settings);
Application_Model_Preference::setValue("nowplaying_screen", $data, true); Application_Model_Preference::setValue("nowplaying_screen", $data, true);
} }
public function getNowPlayingScreenSettingsAction() { public function getNowPlayingScreenSettingsAction()
{
$data = Application_Model_Preference::getValue("nowplaying_screen", true); $data = Application_Model_Preference::getValue("nowplaying_screen", true);
if ($data != "") { if ($data != "") {
$this->view->settings = unserialize($data); $this->view->settings = unserialize($data);
} }
} }
public function setLibraryDatatableAction() { public function setLibraryDatatableAction()
{
$request = $this->getRequest(); $request = $this->getRequest();
$settings = $request->getParam("settings"); $settings = $request->getParam("settings");
@ -43,16 +43,16 @@ class UsersettingsController extends Zend_Controller_Action
Application_Model_Preference::setValue("library_datatable", $data, true); Application_Model_Preference::setValue("library_datatable", $data, true);
} }
public function getLibraryDatatableAction() { public function getLibraryDatatableAction()
{
$data = Application_Model_Preference::getValue("library_datatable", true); $data = Application_Model_Preference::getValue("library_datatable", true);
if ($data != "") { if ($data != "") {
$this->view->settings = unserialize($data); $this->view->settings = unserialize($data);
} }
} }
public function setTimelineDatatableAction() { public function setTimelineDatatableAction()
{
$start = microtime(true); $start = microtime(true);
$request = $this->getRequest(); $request = $this->getRequest();
@ -67,8 +67,8 @@ class UsersettingsController extends Zend_Controller_Action
Logging::debug(floatval($end) - floatval($start)); Logging::debug(floatval($end) - floatval($start));
} }
public function getTimelineDatatableAction() { public function getTimelineDatatableAction()
{
$start = microtime(true); $start = microtime(true);
$data = Application_Model_Preference::getValue("timeline_datatable", true); $data = Application_Model_Preference::getValue("timeline_datatable", true);
@ -76,22 +76,22 @@ class UsersettingsController extends Zend_Controller_Action
$this->view->settings = unserialize($data); $this->view->settings = unserialize($data);
} }
$end = microtime(true); $end = microtime(true);
Logging::debug("getting timeline datatables info took:"); Logging::debug("getting timeline datatables info took:");
Logging::debug(floatval($end) - floatval($start)); Logging::debug(floatval($end) - floatval($start));
} }
public function remindmeAction() public function remindmeAction()
{ {
// unset session // unset session
Zend_Session::namespaceUnset('referrer'); Zend_Session::namespaceUnset('referrer');
Application_Model_Preference::SetRemindMeDate(); Application_Model_Preference::SetRemindMeDate();
}
public function donotshowregistrationpopupAction()
{
// unset session
Zend_Session::namespaceUnset('referrer');
} }
}
public function donotshowregistrationpopupAction()
{
// unset session
Zend_Session::namespaceUnset('referrer');
}
}

View file

@ -40,7 +40,7 @@ class Zend_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract
/** /**
* Sets the ACL object * Sets the ACL object
* *
* @param mixed $aclData * @param mixed $aclData
* @return void * @return void
**/ **/
public function setAcl(Zend_Acl $aclData) public function setAcl(Zend_Acl $aclData)
@ -77,9 +77,9 @@ class Zend_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract
/** /**
* Sets the error page * Sets the error page
* *
* @param string $action * @param string $action
* @param string $controller * @param string $controller
* @param string $module * @param string $module
* @return void * @return void
**/ **/
public function setErrorPage($action, $controller = 'error', $module = null) public function setErrorPage($action, $controller = 'error', $module = null)
@ -109,20 +109,19 @@ class Zend_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract
public function preDispatch(Zend_Controller_Request_Abstract $request) public function preDispatch(Zend_Controller_Request_Abstract $request)
{ {
$controller = strtolower($request->getControllerName()); $controller = strtolower($request->getControllerName());
if (in_array($controller, array("api", "auth"))){ if (in_array($controller, array("api", "auth"))) {
$this->setRoleName("G"); $this->setRoleName("G");
} } elseif (!Zend_Auth::getInstance()->hasIdentity()) {
else if (!Zend_Auth::getInstance()->hasIdentity()){
if ($controller !== 'login') { if ($controller !== 'login') {
if ($request->isXmlHttpRequest()) { if ($request->isXmlHttpRequest()) {
$url = 'http://'.$request->getHttpHost().'/login'; $url = 'http://'.$request->getHttpHost().'/login';
$json = Zend_Json::encode(array('auth' => false, 'url' => $url)); $json = Zend_Json::encode(array('auth' => false, 'url' => $url));
// Prepare response // Prepare response
$this->getResponse() $this->getResponse()
->setHttpResponseCode(401) ->setHttpResponseCode(401)
@ -131,14 +130,12 @@ class Zend_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract
//redirectAndExit() cleans up, sends the headers and stops the script //redirectAndExit() cleans up, sends the headers and stops the script
Zend_Controller_Action_HelperBroker::getStaticHelper('redirector')->redirectAndExit(); Zend_Controller_Action_HelperBroker::getStaticHelper('redirector')->redirectAndExit();
} } else {
else {
$r = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector'); $r = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
$r->gotoSimpleAndExit('index', 'login', $request->getModuleName()); $r->gotoSimpleAndExit('index', 'login', $request->getModuleName());
} }
} }
} } else {
else {
$userInfo = Zend_Auth::getInstance()->getStorage()->read(); $userInfo = Zend_Auth::getInstance()->getStorage()->read();
$this->setRoleName($userInfo->type); $this->setRoleName($userInfo->type);

View file

@ -7,7 +7,7 @@ class RabbitMqPlugin extends Zend_Controller_Plugin_Abstract
if (Application_Model_RabbitMq::$doPush) { if (Application_Model_RabbitMq::$doPush) {
$md = array('schedule' => Application_Model_Schedule::GetScheduledPlaylists()); $md = array('schedule' => Application_Model_Schedule::GetScheduledPlaylists());
Application_Model_RabbitMq::SendMessageToPypo("update_schedule", $md); Application_Model_RabbitMq::SendMessageToPypo("update_schedule", $md);
if (!isset($_SERVER['AIRTIME_SRV'])){ if (!isset($_SERVER['AIRTIME_SRV'])) {
Application_Model_RabbitMq::SendMessageToShowRecorder("update_recorder_schedule"); Application_Model_RabbitMq::SendMessageToShowRecorder("update_recorder_schedule");
} }
} }

View file

@ -1,7 +1,7 @@
<?php <?php
class Application_Model_Auth { class Application_Model_Auth
{
const TOKEN_LIFETIME = 'P2D'; // DateInterval syntax const TOKEN_LIFETIME = 'P2D'; // DateInterval syntax
private function generateToken($action, $user_id) private function generateToken($action, $user_id)
@ -86,8 +86,8 @@ class Application_Model_Auth {
/** /**
* Get random string * Get random string
* *
* @param int $length * @param int $length
* @param string $allowed_chars * @param string $allowed_chars
* @return string * @return string
*/ */
final public function generateRandomString($length = 12, $allowed_chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') final public function generateRandomString($length = 12, $allowed_chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')

View file

@ -3,7 +3,8 @@
class Application_Model_Dashboard class Application_Model_Dashboard
{ {
public static function GetPreviousItem($p_timeNow){ public static function GetPreviousItem($p_timeNow)
{
//get previous show and previous item in the schedule table. //get previous show and previous item in the schedule table.
//Compare the two and if the last show was recorded and started //Compare the two and if the last show was recorded and started
//after the last item in the schedule table, then return the show's //after the last item in the schedule table, then return the show's
@ -12,8 +13,8 @@ class Application_Model_Dashboard
$showInstance = Application_Model_ShowInstance::GetLastShowInstance($p_timeNow); $showInstance = Application_Model_ShowInstance::GetLastShowInstance($p_timeNow);
$row = Application_Model_Schedule::GetLastScheduleItem($p_timeNow); $row = Application_Model_Schedule::GetLastScheduleItem($p_timeNow);
if (is_null($showInstance)){ if (is_null($showInstance)) {
if (count($row) == 0){ if (count($row) == 0) {
return null; return null;
} else { } else {
return array("name"=>$row[0]["artist_name"]." - ".$row[0]["track_title"], return array("name"=>$row[0]["artist_name"]." - ".$row[0]["track_title"],
@ -22,8 +23,8 @@ class Application_Model_Dashboard
} }
} else { } else {
if (count($row) == 0){ if (count($row) == 0) {
if ($showInstance->isRecorded()){ if ($showInstance->isRecorded()) {
//last item is a show instance //last item is a show instance
return array("name"=>$showInstance->getName(), return array("name"=>$showInstance->getName(),
"starts"=>$showInstance->getShowInstanceStart(), "starts"=>$showInstance->getShowInstanceStart(),
@ -33,7 +34,7 @@ class Application_Model_Dashboard
} }
} else { } else {
//return the one that started later. //return the one that started later.
if ($row[0]["starts"] >= $showInstance->getShowInstanceStart()){ if ($row[0]["starts"] >= $showInstance->getShowInstanceStart()) {
return array("name"=>$row[0]["artist_name"]." - ".$row[0]["track_title"], return array("name"=>$row[0]["artist_name"]." - ".$row[0]["track_title"],
"starts"=>$row[0]["starts"], "starts"=>$row[0]["starts"],
"ends"=>$row[0]["ends"]); "ends"=>$row[0]["ends"]);
@ -46,7 +47,8 @@ class Application_Model_Dashboard
} }
} }
public static function GetCurrentItem($p_timeNow){ public static function GetCurrentItem($p_timeNow)
{
//get previous show and previous item in the schedule table. //get previous show and previous item in the schedule table.
//Compare the two and if the last show was recorded and started //Compare the two and if the last show was recorded and started
//after the last item in the schedule table, then return the show's //after the last item in the schedule table, then return the show's
@ -54,26 +56,27 @@ class Application_Model_Dashboard
$row = array(); $row = array();
$showInstance = Application_Model_ShowInstance::GetCurrentShowInstance($p_timeNow); $showInstance = Application_Model_ShowInstance::GetCurrentShowInstance($p_timeNow);
if (!is_null($showInstance)){ if (!is_null($showInstance)) {
$instanceId = $showInstance->getShowInstanceId(); $instanceId = $showInstance->getShowInstanceId();
$row = Application_Model_Schedule::GetCurrentScheduleItem($p_timeNow, $instanceId); $row = Application_Model_Schedule::GetCurrentScheduleItem($p_timeNow, $instanceId);
} }
if (is_null($showInstance)){ if (is_null($showInstance)) {
if (count($row) == 0){ if (count($row) == 0) {
return null; return null;
} else { } else {
/* Should never reach here, but lets return the track information /* Should never reach here, but lets return the track information
* just in case we allow tracks to be scheduled without a show * just in case we allow tracks to be scheduled without a show
* in the future. * in the future.
*/ */
return array("name"=>$row[0]["artist_name"]." - ".$row[0]["track_title"], return array("name"=>$row[0]["artist_name"]." - ".$row[0]["track_title"],
"starts"=>$row[0]["starts"], "starts"=>$row[0]["starts"],
"ends"=>$row[0]["ends"]); "ends"=>$row[0]["ends"]);
} }
} else { } else {
if (count($row) == 0){ if (count($row) == 0) {
//last item is a show instance //last item is a show instance
if ($showInstance->isRecorded()){ if ($showInstance->isRecorded()) {
return array("name"=>$showInstance->getName(), return array("name"=>$showInstance->getName(),
"starts"=>$showInstance->getShowInstanceStart(), "starts"=>$showInstance->getShowInstanceStart(),
"ends"=>$showInstance->getShowInstanceEnd(), "ends"=>$showInstance->getShowInstanceEnd(),
@ -92,7 +95,8 @@ class Application_Model_Dashboard
} }
} }
public static function GetNextItem($p_timeNow){ public static function GetNextItem($p_timeNow)
{
//get previous show and previous item in the schedule table. //get previous show and previous item in the schedule table.
//Compare the two and if the last show was recorded and started //Compare the two and if the last show was recorded and started
//after the last item in the schedule table, then return the show's //after the last item in the schedule table, then return the show's
@ -101,8 +105,8 @@ class Application_Model_Dashboard
$showInstance = Application_Model_ShowInstance::GetNextShowInstance($p_timeNow); $showInstance = Application_Model_ShowInstance::GetNextShowInstance($p_timeNow);
$row = Application_Model_Schedule::GetNextScheduleItem($p_timeNow); $row = Application_Model_Schedule::GetNextScheduleItem($p_timeNow);
if (is_null($showInstance)){ if (is_null($showInstance)) {
if (count($row) == 0){ if (count($row) == 0) {
return null; return null;
} else { } else {
return array("name"=>$row[0]["artist_name"]." - ".$row[0]["track_title"], return array("name"=>$row[0]["artist_name"]." - ".$row[0]["track_title"],
@ -110,8 +114,8 @@ class Application_Model_Dashboard
"ends"=>$row[0]["ends"]); "ends"=>$row[0]["ends"]);
} }
} else { } else {
if (count($row) == 0){ if (count($row) == 0) {
if ($showInstance->isRecorded()){ if ($showInstance->isRecorded()) {
//last item is a show instance //last item is a show instance
return array("name"=>$showInstance->getName(), return array("name"=>$showInstance->getName(),
"starts"=>$showInstance->getShowInstanceStart(), "starts"=>$showInstance->getShowInstanceStart(),
@ -122,7 +126,7 @@ class Application_Model_Dashboard
} else { } else {
//return the one that starts sooner. //return the one that starts sooner.
if ($row[0]["starts"] <= $showInstance->getShowInstanceStart()){ if ($row[0]["starts"] <= $showInstance->getShowInstanceStart()) {
return array("name"=>$row[0]["artist_name"]." - ".$row[0]["track_title"], return array("name"=>$row[0]["artist_name"]." - ".$row[0]["track_title"],
"starts"=>$row[0]["starts"], "starts"=>$row[0]["starts"],
"ends"=>$row[0]["ends"]); "ends"=>$row[0]["ends"]);

View file

@ -1,7 +1,7 @@
<?php <?php
class Application_Model_Datatables { class Application_Model_Datatables
{
/* /*
* query used to return data for a paginated/searchable datatable. * query used to return data for a paginated/searchable datatable.
*/ */
@ -44,7 +44,7 @@ class Application_Model_Datatables {
// Order By clause // Order By clause
$orderby = array(); $orderby = array();
for ($i = 0; $i < $data["iSortingCols"]; $i++){ for ($i = 0; $i < $data["iSortingCols"]; $i++) {
$num = $data["iSortCol_".$i]; $num = $data["iSortCol_".$i];
$orderby[] = $data["mDataProp_{$num}"]." ".$data["sSortDir_".$i]; $orderby[] = $data["mDataProp_{$num}"]." ".$data["sSortDir_".$i];
} }
@ -64,8 +64,7 @@ class Application_Model_Datatables {
if ($displayLength !== -1) { if ($displayLength !== -1) {
$sql .= " OFFSET ".$data["iDisplayStart"]." LIMIT ".$displayLength; $sql .= " OFFSET ".$data["iDisplayStart"]." LIMIT ".$displayLength;
} }
} } else {
else {
$sql = $selectorRows." FROM ".$fromTable." ORDER BY ".$orderby; $sql = $selectorRows." FROM ".$fromTable." ORDER BY ".$orderby;
//limit the results returned. //limit the results returned.
@ -81,16 +80,14 @@ class Application_Model_Datatables {
if (isset($sqlTotalDisplayRows)) { if (isset($sqlTotalDisplayRows)) {
$r = $con->query($sqlTotalDisplayRows); $r = $con->query($sqlTotalDisplayRows);
$totalDisplayRows = $r->fetchColumn(0); $totalDisplayRows = $r->fetchColumn(0);
} } else {
else {
$totalDisplayRows = $totalRows; $totalDisplayRows = $totalRows;
} }
$r = $con->query($sql); $r = $con->query($sql);
$r->setFetchMode(PDO::FETCH_ASSOC); $r->setFetchMode(PDO::FETCH_ASSOC);
$results = $r->fetchAll(); $results = $r->fetchAll();
} } catch (Exception $e) {
catch (Exception $e) {
Logging::debug($e->getMessage()); Logging::debug($e->getMessage());
} }

View file

@ -1,13 +1,13 @@
<?php <?php
class Application_Model_Email { class Application_Model_Email
{
/** /**
* Send email * Send email
* *
* @param string $subject * @param string $subject
* @param string $message * @param string $message
* @param mixed $tos * @param mixed $tos
* @return void * @return void
*/ */
public static function send($subject, $message, $tos, $from = null) public static function send($subject, $message, $tos, $from = null)

View file

@ -3,7 +3,8 @@
class Application_Model_LiveLog class Application_Model_LiveLog
{ {
public static function GetLiveShowDuration($p_keepData=false) { public static function GetLiveShowDuration($p_keepData=false)
{
try { try {
$con = Propel::getConnection(); $con = Propel::getConnection();
@ -86,12 +87,12 @@ class Application_Model_LiveLog
//Trim milliseconds //Trim milliseconds
$seconds = explode(".", $seconds); $seconds = explode(".", $seconds);
if (isset($seconds[0])) { if (isset($seconds[0])) {
$minutes = (double)(($hours*60)+$minutes . "." . $seconds[0]); $minutes = (double) (($hours*60)+$minutes . "." . $seconds[0]);
} } else {
else { $minutes = (double) (($hours*60)+$minutes);
$minutes = (double)(($hours*60)+$minutes);
} }
} }
return $minutes; return $minutes;
} catch (Exception $e) { } catch (Exception $e) {
header('HTTP/1.0 503 Service Unavailable'); header('HTTP/1.0 503 Service Unavailable');
@ -119,8 +120,7 @@ class Application_Model_LiveLog
$last_row = self::UpdateLastLogEndTime(array_pop($rows)); $last_row = self::UpdateLastLogEndTime(array_pop($rows));
array_push($rows, $last_row); array_push($rows, $last_row);
$skip = false; $skip = false;
} } else {
else {
$sql = "SELECT * FROM CC_LIVE_LOG" $sql = "SELECT * FROM CC_LIVE_LOG"
." WHERE state = 'S'" ." WHERE state = 'S'"
." ORDER BY id"; ." ORDER BY id";
@ -191,22 +191,19 @@ class Application_Model_LiveLog
if ($clip_length_seconds / 3600 >= 1) { if ($clip_length_seconds / 3600 >= 1) {
array_push($clip_length_arr, str_pad(floor($clip_length_seconds / 3600), 2, "0", STR_PAD_LEFT)); array_push($clip_length_arr, str_pad(floor($clip_length_seconds / 3600), 2, "0", STR_PAD_LEFT));
$clip_length_seconds -= floor($clip_length_seconds / 3600); $clip_length_seconds -= floor($clip_length_seconds / 3600);
} } else {
else {
array_push($clip_length_arr, "00"); array_push($clip_length_arr, "00");
} }
if ($clip_length_seconds / 60 >= 1) { if ($clip_length_seconds / 60 >= 1) {
array_push($clip_length_arr, str_pad(floor($clip_length_seconds / 60), 2, "0", STR_PAD_LEFT)); array_push($clip_length_arr, str_pad(floor($clip_length_seconds / 60), 2, "0", STR_PAD_LEFT));
$clip_length_seconds -= floor($clip_length_seconds / 60); $clip_length_seconds -= floor($clip_length_seconds / 60);
} } else {
else {
array_push($clip_length_arr, "00"); array_push($clip_length_arr, "00");
} }
array_push($clip_length_arr, str_pad($clip_length_seconds, 2, "0", STR_PAD_LEFT)); array_push($clip_length_arr, str_pad($clip_length_seconds, 2, "0", STR_PAD_LEFT));
$clip_length = implode(":", $clip_length_arr); $clip_length = implode(":", $clip_length_arr);
} } else {
else {
$clip_length = $track['clip_length']; $clip_length = $track['clip_length'];
} }
@ -248,12 +245,12 @@ class Application_Model_LiveLog
$seconds = explode(".", $seconds); $seconds = explode(".", $seconds);
if (isset($seconds[0])) { if (isset($seconds[0])) {
$minutes = (double)(($hours*60)+$minutes . "." . $seconds[0]); $minutes = (double) (($hours*60)+$minutes . "." . $seconds[0]);
} } else {
else { $minutes = (double) (($hours*60)+$minutes);
$minutes = (double)(($hours*60)+$minutes);
} }
} }
return $minutes; return $minutes;
} catch (Exception $e) { } catch (Exception $e) {
header('HTTP/1.0 503 Service Unavailable'); header('HTTP/1.0 503 Service Unavailable');
@ -262,7 +259,8 @@ class Application_Model_LiveLog
} }
} }
public static function UpdateLastLogEndTime($log) { public static function UpdateLastLogEndTime($log)
{
if ($log['end_time'] == null) { if ($log['end_time'] == null) {
$current_time = new DateTime("now", new DateTimeZone('UTC')); $current_time = new DateTime("now", new DateTimeZone('UTC'));
$log['end_time'] = $current_time; $log['end_time'] = $current_time;
@ -270,10 +268,12 @@ class Application_Model_LiveLog
self::SetEndTime($log['state'], $current_time, true); self::SetEndTime($log['state'], $current_time, true);
self::SetNewLogTime($log['state'], $current_time); self::SetNewLogTime($log['state'], $current_time);
} }
return $log; return $log;
} }
public static function SetNewLogTime($state, $dateTime){ public static function SetNewLogTime($state, $dateTime)
{
try { try {
$con = Propel::getConnection(); $con = Propel::getConnection();
@ -293,7 +293,7 @@ class Application_Model_LiveLog
$sql_insert = "INSERT INTO CC_LIVE_LOG (state, start_time)" $sql_insert = "INSERT INTO CC_LIVE_LOG (state, start_time)"
." VALUES ('$state', '{$dateTime->format("Y-m-d H:i:s")}')"; ." VALUES ('$state', '{$dateTime->format("Y-m-d H:i:s")}')";
$con->exec($sql_insert); $con->exec($sql_insert);
if($state == "S"){ if ($state == "S") {
// if scheduled play source is getting broadcasted // if scheduled play source is getting broadcasted
Application_Model_Schedule::UpdateBrodcastedStatus($dateTime, 1); Application_Model_Schedule::UpdateBrodcastedStatus($dateTime, 1);
} }
@ -306,7 +306,8 @@ class Application_Model_LiveLog
} }
} }
public static function SetEndTime($state, $dateTime, $override=false){ public static function SetEndTime($state, $dateTime, $override=false)
{
try { try {
$con = Propel::getConnection(); $con = Propel::getConnection();

View file

@ -1,10 +1,12 @@
<?php <?php
class Application_Model_LoginAttempts { class Application_Model_LoginAttempts
public function __construct(){ {
public function __construct()
{
} }
public static function increaseAttempts($ip){ public static function increaseAttempts($ip)
{
$con = Propel::getConnection(); $con = Propel::getConnection();
$sql = "select count(*) from cc_login_attempts WHERE ip='$ip'"; $sql = "select count(*) from cc_login_attempts WHERE ip='$ip'";
$res = $con->query($sql)->fetchColumn(0); $res = $con->query($sql)->fetchColumn(0);
@ -17,14 +19,17 @@ class Application_Model_LoginAttempts {
} }
} }
public static function getAttempts($ip){ public static function getAttempts($ip)
{
$con = Propel::getConnection(); $con = Propel::getConnection();
$sql = "select attempts from cc_login_attempts WHERE ip='$ip'"; $sql = "select attempts from cc_login_attempts WHERE ip='$ip'";
$res = $con->query($sql)->fetchColumn(0); $res = $con->query($sql)->fetchColumn(0);
return $res ? $res : 0; return $res ? $res : 0;
} }
public static function resetAttempts($ip){ public static function resetAttempts($ip)
{
$con = Propel::getConnection(); $con = Propel::getConnection();
$sql = "select count(*) from cc_login_attempts WHERE ip='$ip'"; $sql = "select count(*) from cc_login_attempts WHERE ip='$ip'";
$res = $con->query($sql)->fetchColumn(0); $res = $con->query($sql)->fetchColumn(0);
@ -33,4 +38,4 @@ class Application_Model_LoginAttempts {
$con->exec($sql); $con->exec($sql);
} }
} }
} }

View file

@ -2,8 +2,8 @@
class NestedDirectoryException extends Exception { } class NestedDirectoryException extends Exception { }
class Application_Model_MusicDir { class Application_Model_MusicDir
{
/** /**
* @holds propel database object * @holds propel database object
*/ */
@ -40,21 +40,25 @@ class Application_Model_MusicDir {
$this->_dir->save(); $this->_dir->save();
} }
public function setExistsFlag($flag){ public function setExistsFlag($flag)
{
$this->_dir->setExists($flag); $this->_dir->setExists($flag);
$this->_dir->save(); $this->_dir->save();
} }
public function setWatchedFlag($flag){ public function setWatchedFlag($flag)
{
$this->_dir->setWatched($flag); $this->_dir->setWatched($flag);
$this->_dir->save(); $this->_dir->save();
} }
public function getWatchedFlag(){ public function getWatchedFlag()
{
return $this->_dir->getWatched(); return $this->_dir->getWatched();
} }
public function getExistsFlag(){ public function getExistsFlag()
{
return $this->_dir->getExists(); return $this->_dir->getExists();
} }
@ -113,8 +117,9 @@ class Application_Model_MusicDir {
* @return boolean * @return boolean
* Returns true if it is the ancestor, false otherwise. * Returns true if it is the ancestor, false otherwise.
*/ */
private static function isAncestorDir($p_dir1, $p_dir2){ private static function isAncestorDir($p_dir1, $p_dir2)
if (strlen($p_dir1) > strlen($p_dir2)){ {
if (strlen($p_dir1) > strlen($p_dir2)) {
return false; return false;
} }
@ -130,23 +135,24 @@ class Application_Model_MusicDir {
* The path we want to validate * The path we want to validate
* @return void * @return void
*/ */
public static function isPathValid($p_path){ public static function isPathValid($p_path)
{
$dirs = self::getWatchedDirs(); $dirs = self::getWatchedDirs();
$dirs[] = self::getStorDir(); $dirs[] = self::getStorDir();
foreach ($dirs as $dirObj){ foreach ($dirs as $dirObj) {
$dir = $dirObj->getDirectory(); $dir = $dirObj->getDirectory();
$diff = strlen($dir) - strlen($p_path); $diff = strlen($dir) - strlen($p_path);
if ($diff == 0){ if ($diff == 0) {
if ($dir == $p_path){ if ($dir == $p_path) {
throw new NestedDirectoryException("'$p_path' is already watched."); throw new NestedDirectoryException("'$p_path' is already watched.");
} }
} else if ($diff > 0){ } elseif ($diff > 0) {
if (self::isAncestorDir($p_path, $dir)){ if (self::isAncestorDir($p_path, $dir)) {
throw new NestedDirectoryException("'$p_path' contains nested watched directory: '$dir'"); throw new NestedDirectoryException("'$p_path' contains nested watched directory: '$dir'");
} }
} else { /* diff < 0*/ } else { /* diff < 0*/
if (self::isAncestorDir($dir, $p_path)){ if (self::isAncestorDir($dir, $p_path)) {
throw new NestedDirectoryException("'$p_path' is nested within existing watched directory: '$dir'"); throw new NestedDirectoryException("'$p_path' is nested within existing watched directory: '$dir'");
} }
} }
@ -167,37 +173,36 @@ class Application_Model_MusicDir {
**/ **/
public static function addDir($p_path, $p_type, $userAddedWatchedDir=true, $nestedWatch=false) public static function addDir($p_path, $p_type, $userAddedWatchedDir=true, $nestedWatch=false)
{ {
if(!is_dir($p_path)){ if (!is_dir($p_path)) {
return array("code"=>2, "error"=>"'$p_path' is not a valid directory."); return array("code"=>2, "error"=>"'$p_path' is not a valid directory.");
} }
$real_path = Application_Common_OsPath::normpath($p_path)."/"; $real_path = Application_Common_OsPath::normpath($p_path)."/";
if($real_path != "/"){ if ($real_path != "/") {
$p_path = $real_path; $p_path = $real_path;
} }
$exist_dir = self::getDirByPath($p_path); $exist_dir = self::getDirByPath($p_path);
if( $exist_dir == NULL ){ if ($exist_dir == NULL) {
$temp_dir = new CcMusicDirs(); $temp_dir = new CcMusicDirs();
$dir = new Application_Model_MusicDir($temp_dir); $dir = new Application_Model_MusicDir($temp_dir);
}else{ } else {
$dir = $exist_dir; $dir = $exist_dir;
} }
$dir->setType($p_type); $dir->setType($p_type);
$p_path = Application_Common_OsPath::normpath($p_path)."/"; $p_path = Application_Common_OsPath::normpath($p_path)."/";
try { try {
/* isPathValid() checks if path is a substring or a superstring of an /* isPathValid() checks if path is a substring or a superstring of an
* existing dir and if not, throws NestedDirectoryException */ * existing dir and if not, throws NestedDirectoryException */
if(!$nestedWatch){ if (!$nestedWatch) {
self::isPathValid($p_path); self::isPathValid($p_path);
} }
if($userAddedWatchedDir){ if ($userAddedWatchedDir) {
$dir->setWatchedFlag(true); $dir->setWatchedFlag(true);
}else{ } else {
if($nestedWatch){ if ($nestedWatch) {
$dir->setWatchedFlag(false); $dir->setWatchedFlag(false);
} }
$dir->setExistsFlag(true); $dir->setExistsFlag(true);
@ -205,10 +210,11 @@ class Application_Model_MusicDir {
$dir->setDirectory($p_path); $dir->setDirectory($p_path);
return array("code"=>0); return array("code"=>0);
} catch (NestedDirectoryException $nde){ } catch (NestedDirectoryException $nde) {
$msg = $nde->getMessage(); $msg = $nde->getMessage();
return array("code"=>1, "error"=>"$msg"); return array("code"=>1, "error"=>"$msg");
} catch(Exception $e){ } catch (Exception $e) {
return array("code"=>1, "error"=>"'$p_path' is already set as the current storage dir or in the watched folders list"); return array("code"=>1, "error"=>"'$p_path' is already set as the current storage dir or in the watched folders list");
} }
@ -228,7 +234,7 @@ class Application_Model_MusicDir {
{ {
$res = self::addDir($p_path, "watched", $userAddedWatchedDir, $nestedWatch); $res = self::addDir($p_path, "watched", $userAddedWatchedDir, $nestedWatch);
if ($res['code'] == 0){ if ($res['code'] == 0) {
//convert "linked" files (Airtime <= 1.8.2) to watched files. //convert "linked" files (Airtime <= 1.8.2) to watched files.
$propel_link_dir = CcMusicDirsQuery::create() $propel_link_dir = CcMusicDirsQuery::create()
@ -271,6 +277,7 @@ class Application_Model_MusicDir {
$data["directory"] = $p_path; $data["directory"] = $p_path;
Application_Model_RabbitMq::SendMessageToMediaMonitor("new_watch", $data); Application_Model_RabbitMq::SendMessageToMediaMonitor("new_watch", $data);
} }
return $res; return $res;
} }
@ -288,11 +295,11 @@ class Application_Model_MusicDir {
$dir = CcMusicDirsQuery::create() $dir = CcMusicDirsQuery::create()
->filterByDirectory($p_path) ->filterByDirectory($p_path)
->findOne(); ->findOne();
if($dir == NULL){ if ($dir == NULL) {
return null; return null;
} } else {
else{
$mus_dir = new Application_Model_MusicDir($dir); $mus_dir = new Application_Model_MusicDir($dir);
return $mus_dir; return $mus_dir;
} }
} }
@ -309,15 +316,15 @@ class Application_Model_MusicDir {
$dirs = CcMusicDirsQuery::create() $dirs = CcMusicDirsQuery::create()
->filterByType("watched"); ->filterByType("watched");
if($exists !== null){ if ($exists !== null) {
$dirs = $dirs->filterByExists($exists); $dirs = $dirs->filterByExists($exists);
} }
if($watched !== null){ if ($watched !== null) {
$dirs = $dirs->filterByWatched($watched); $dirs = $dirs->filterByWatched($watched);
} }
$dirs = $dirs->find(); $dirs = $dirs->find();
foreach($dirs as $dir) { foreach ($dirs as $dir) {
$result[] = new Application_Model_MusicDir($dir); $result[] = new Application_Model_MusicDir($dir);
} }
@ -340,23 +347,24 @@ class Application_Model_MusicDir {
// we want to be consistent when storing dir path. // we want to be consistent when storing dir path.
// path should always ends with trailing '/' // path should always ends with trailing '/'
$p_dir = Application_Common_OsPath::normpath($p_dir)."/"; $p_dir = Application_Common_OsPath::normpath($p_dir)."/";
if(!is_dir($p_dir)){ if (!is_dir($p_dir)) {
return array("code"=>2, "error"=>"'$p_dir' is not a valid directory."); return array("code"=>2, "error"=>"'$p_dir' is not a valid directory.");
}else if(Application_Model_Preference::GetImportTimestamp()+10 > time()){ } elseif (Application_Model_Preference::GetImportTimestamp()+10 > time()) {
return array("code"=>3, "error"=>"Airtime is currently importing files. Please wait until this is complete before changing the storage directory."); return array("code"=>3, "error"=>"Airtime is currently importing files. Please wait until this is complete before changing the storage directory.");
} }
$dir = self::getStorDir(); $dir = self::getStorDir();
// if $p_dir doesn't exist in DB // if $p_dir doesn't exist in DB
$exist = $dir->getDirByPath($p_dir); $exist = $dir->getDirByPath($p_dir);
if($exist == NULL){ if ($exist == NULL) {
$dir->setDirectory($p_dir); $dir->setDirectory($p_dir);
$dirId = $dir->getId(); $dirId = $dir->getId();
$data = array(); $data = array();
$data["directory"] = $p_dir; $data["directory"] = $p_dir;
$data["dir_id"] = $dirId; $data["dir_id"] = $dirId;
Application_Model_RabbitMq::SendMessageToMediaMonitor("change_stor", $data); Application_Model_RabbitMq::SendMessageToMediaMonitor("change_stor", $data);
return array("code"=>0); return array("code"=>0);
}else{ } else {
return array("code"=>1, "error"=>"'$p_dir' is already set as the current storage dir or in the watched folders list."); return array("code"=>1, "error"=>"'$p_dir' is already set as the current storage dir or in the watched folders list.");
} }
} }
@ -369,10 +377,11 @@ class Application_Model_MusicDir {
->filterByWatched(true) ->filterByWatched(true)
->find(); ->find();
foreach($dirs as $dir) { foreach ($dirs as $dir) {
$directory = $dir->getDirectory(); $directory = $dir->getDirectory();
if (substr($p_filepath, 0, strlen($directory)) === $directory) { if (substr($p_filepath, 0, strlen($directory)) === $directory) {
$mus_dir = new Application_Model_MusicDir($dir); $mus_dir = new Application_Model_MusicDir($dir);
return $mus_dir; return $mus_dir;
} }
} }
@ -390,11 +399,11 @@ class Application_Model_MusicDir {
* When $userAddedWatchedDir is true, it will set "Watched" flag to false * When $userAddedWatchedDir is true, it will set "Watched" flag to false
* otherwise, it will set "Exists" flag to true * otherwise, it will set "Exists" flag to true
**/ **/
public static function removeWatchedDir($p_dir, $userAddedWatchedDir=true){ public static function removeWatchedDir($p_dir, $userAddedWatchedDir=true)
{
//make sure that $p_dir has a trailing "/" //make sure that $p_dir has a trailing "/"
$real_path = Application_Common_OsPath::normpath($p_dir)."/"; $real_path = Application_Common_OsPath::normpath($p_dir)."/";
if($real_path != "/"){ if ($real_path != "/") {
$p_dir = $real_path; $p_dir = $real_path;
} }
$dir = Application_Model_MusicDir::getDirByPath($p_dir); $dir = Application_Model_MusicDir::getDirByPath($p_dir);
@ -405,6 +414,7 @@ class Application_Model_MusicDir {
$data = array(); $data = array();
$data["directory"] = $p_dir; $data["directory"] = $p_dir;
Application_Model_RabbitMq::SendMessageToMediaMonitor("remove_watch", $data); Application_Model_RabbitMq::SendMessageToMediaMonitor("remove_watch", $data);
return array("code"=>0); return array("code"=>0);
} }
} }
@ -413,7 +423,7 @@ class Application_Model_MusicDir {
{ {
$mus_dir = self::getWatchedDirFromFilepath($p_filepath); $mus_dir = self::getWatchedDirFromFilepath($p_filepath);
if(is_null($mus_dir)) { if (is_null($mus_dir)) {
return null; return null;
} }

View file

@ -8,8 +8,8 @@ require_once 'formatters/LengthFormatter.php';
* @copyright 2010 Sourcefabric O.P.S. * @copyright 2010 Sourcefabric O.P.S.
* @license http://www.gnu.org/licenses/gpl.txt * @license http://www.gnu.org/licenses/gpl.txt
*/ */
class Application_Model_Playlist { class Application_Model_Playlist
{
/** /**
* propel connection object. * propel connection object.
*/ */
@ -55,8 +55,7 @@ class Application_Model_Playlist {
if (is_null($this->pl)) { if (is_null($this->pl)) {
throw new PlaylistNotFoundException(); throw new PlaylistNotFoundException();
} }
} } else {
else {
$this->pl = new CcPlaylist(); $this->pl = new CcPlaylist();
$this->pl->setDbUTime("now", new DateTimeZone("UTC")); $this->pl->setDbUTime("now", new DateTimeZone("UTC"));
$this->pl->save(); $this->pl->save();
@ -79,7 +78,8 @@ class Application_Model_Playlist {
* *
* @return int * @return int
*/ */
public function getId() { public function getId()
{
return $this->id; return $this->id;
} }
@ -117,28 +117,30 @@ class Application_Model_Playlist {
return $this->pl->getDbDescription(); return $this->pl->getDbDescription();
} }
public function getCreator() { public function getCreator()
{
return $this->pl->getCcSubjs()->getDbLogin(); return $this->pl->getCcSubjs()->getDbLogin();
} }
public function getCreatorId() { public function getCreatorId()
{
return $this->pl->getCcSubjs()->getDbId(); return $this->pl->getCcSubjs()->getDbId();
} }
public function setCreator($p_id) { public function setCreator($p_id)
{
$this->pl->setDbCreatorId($p_id); $this->pl->setDbCreatorId($p_id);
$this->pl->setDbMtime(new DateTime("now", new DateTimeZone("UTC"))); $this->pl->setDbMtime(new DateTime("now", new DateTimeZone("UTC")));
$this->pl->save($this->con); $this->pl->save($this->con);
} }
public function getLastModified($format = null) { public function getLastModified($format = null)
{
return $this->pl->getDbMtime($format); return $this->pl->getDbMtime($format);
} }
public function getSize() { public function getSize()
{
return $this->pl->countCcPlaylistcontentss(); return $this->pl->countCcPlaylistcontentss();
} }
@ -148,15 +150,15 @@ class Application_Model_Playlist {
* file_exists flag set to true * file_exists flag set to true
* @return array * @return array
*/ */
public function getContents($filterFiles=false) { public function getContents($filterFiles=false)
{
Logging::log("Getting contents for playlist {$this->id}"); Logging::log("Getting contents for playlist {$this->id}");
$files = array(); $files = array();
$query = CcPlaylistcontentsQuery::create() $query = CcPlaylistcontentsQuery::create()
->filterByDbPlaylistId($this->id); ->filterByDbPlaylistId($this->id);
if($filterFiles){ if ($filterFiles) {
$query->useCcFilesQuery() $query->useCcFilesQuery()
->filterByDbFileExists(true) ->filterByDbFileExists(true)
->endUse(); ->endUse();
@ -193,8 +195,8 @@ class Application_Model_Playlist {
* but this isn't practical since fades shouldn't be very long usuall 1 second or less. This function * but this isn't practical since fades shouldn't be very long usuall 1 second or less. This function
* will normalize the fade so that it looks like 00.000000 to the user. * will normalize the fade so that it looks like 00.000000 to the user.
**/ **/
public function normalizeFade($fade) { public function normalizeFade($fade)
{
//First get rid of the first six characters 00:00: which will be added back later for db update //First get rid of the first six characters 00:00: which will be added back later for db update
$fade = substr($fade, 6); $fade = substr($fade, 6);
@ -211,12 +213,11 @@ class Application_Model_Playlist {
} }
//aggregate column on playlistcontents cliplength column. //aggregate column on playlistcontents cliplength column.
public function getLength() { public function getLength()
{
return $this->pl->getDbLength(); return $this->pl->getDbLength();
} }
private function insertPlaylistElement($info) private function insertPlaylistElement($info)
{ {
$row = new CcPlaylistcontents(); $row = new CcPlaylistcontents();
@ -246,8 +247,7 @@ class Application_Model_Playlist {
$entry["cueout"] = $file->getDbLength(); $entry["cueout"] = $file->getDbLength();
return $entry; return $entry;
} } else {
else {
throw new Exception("trying to add a file that does not exist."); throw new Exception("trying to add a file that does not exist.");
} }
} }
@ -275,7 +275,6 @@ class Application_Model_Playlist {
Logging::log("index is {$index}"); Logging::log("index is {$index}");
$pos = ($addType == 'after') ? $index + 1 : $index; $pos = ($addType == 'after') ? $index + 1 : $index;
$contentsToUpdate = CcPlaylistcontentsQuery::create() $contentsToUpdate = CcPlaylistcontentsQuery::create()
->filterByDbPlaylistId($this->id) ->filterByDbPlaylistId($this->id)
->filterByDbPosition($pos, Criteria::GREATER_EQUAL) ->filterByDbPosition($pos, Criteria::GREATER_EQUAL)
@ -284,8 +283,7 @@ class Application_Model_Playlist {
Logging::log("Adding to playlist"); Logging::log("Adding to playlist");
Logging::log("at position {$pos}"); Logging::log("at position {$pos}");
} } else {
else {
//add to the end of the playlist //add to the end of the playlist
if ($addType == 'after') { if ($addType == 'after') {
@ -311,7 +309,7 @@ class Application_Model_Playlist {
Logging::log("at position {$pos}"); Logging::log("at position {$pos}");
} }
foreach($p_items as $ac) { foreach ($p_items as $ac) {
Logging::log("Adding audio file {$ac}"); Logging::log("Adding audio file {$ac}");
$res = $this->insertPlaylistElement($this->buildEntry($ac, $pos)); $res = $this->insertPlaylistElement($this->buildEntry($ac, $pos));
@ -329,8 +327,7 @@ class Application_Model_Playlist {
$this->pl->save($this->con); $this->pl->save($this->con);
$this->con->commit(); $this->con->commit();
} } catch (Exception $e) {
catch (Exception $e) {
$this->con->rollback(); $this->con->rollback();
throw $e; throw $e;
} }
@ -378,8 +375,7 @@ class Application_Model_Playlist {
$item->save($this->con); $item->save($this->con);
$pos = $pos + 1; $pos = $pos + 1;
} }
} } else {
else {
Logging::log("moving items after {$p_afterItem}"); Logging::log("moving items after {$p_afterItem}");
foreach ($otherContent as $item) { foreach ($otherContent as $item) {
@ -400,13 +396,11 @@ class Application_Model_Playlist {
} }
$this->con->commit(); $this->con->commit();
} } catch (Exception $e) {
catch (Exception $e) {
$this->con->rollback(); $this->con->rollback();
throw $e; throw $e;
} }
$this->pl = CcPlaylistQuery::create()->findPK($this->id); $this->pl = CcPlaylistQuery::create()->findPK($this->id);
$this->pl->setDbMtime(new DateTime("now", new DateTimeZone("UTC"))); $this->pl->setDbMtime(new DateTime("now", new DateTimeZone("UTC")));
$this->pl->save($this->con); $this->pl->save($this->con);
@ -444,16 +438,14 @@ class Application_Model_Playlist {
$this->pl->save($this->con); $this->pl->save($this->con);
$this->con->commit(); $this->con->commit();
} } catch (Exception $e) {
catch (Exception $e) {
$this->con->rollback(); $this->con->rollback();
throw $e; throw $e;
} }
} }
public function getFadeInfo($pos)
public function getFadeInfo($pos) { {
Logging::log("Getting fade info for pos {$pos}"); Logging::log("Getting fade info for pos {$pos}");
$row = CcPlaylistcontentsQuery::create() $row = CcPlaylistcontentsQuery::create()
@ -465,6 +457,7 @@ class Application_Model_Playlist {
#Propel returns values in form 00.000000 format which is for only seconds. #Propel returns values in form 00.000000 format which is for only seconds.
$fadeIn = $row->getDbFadein(); $fadeIn = $row->getDbFadein();
$fadeOut = $row->getDbFadeout(); $fadeOut = $row->getDbFadeout();
return array($fadeIn, $fadeOut); return array($fadeIn, $fadeOut);
} }
@ -510,7 +503,7 @@ class Application_Model_Playlist {
} }
$row->setDbFadein($fadeIn); $row->setDbFadein($fadeIn);
} }
if (!is_null($fadeOut)){ if (!is_null($fadeOut)) {
$sql = "SELECT INTERVAL '{$fadeOut}' > INTERVAL '{$clipLength}'"; $sql = "SELECT INTERVAL '{$fadeOut}' > INTERVAL '{$clipLength}'";
$r = $this->con->query($sql); $r = $this->con->query($sql);
@ -526,8 +519,7 @@ class Application_Model_Playlist {
$this->pl->save($this->con); $this->pl->save($this->con);
$this->con->commit(); $this->con->commit();
} } catch (Exception $e) {
catch (Exception $e) {
$this->con->rollback(); $this->con->rollback();
throw $e; throw $e;
} }
@ -535,8 +527,8 @@ class Application_Model_Playlist {
return array("fadeIn" => $fadeIn, "fadeOut" => $fadeOut); return array("fadeIn" => $fadeIn, "fadeOut" => $fadeOut);
} }
public function setPlaylistfades($fadein, $fadeout) { public function setPlaylistfades($fadein, $fadeout)
{
if (isset($fadein)) { if (isset($fadein)) {
Logging::log("Setting playlist fade in {$fadein}"); Logging::log("Setting playlist fade in {$fadein}");
$row = CcPlaylistcontentsQuery::create() $row = CcPlaylistcontentsQuery::create()
@ -578,6 +570,7 @@ class Application_Model_Playlist {
try { try {
if (is_null($cueIn) && is_null($cueOut)) { if (is_null($cueIn) && is_null($cueOut)) {
$errArray["error"] = "Cue in and cue out are null."; $errArray["error"] = "Cue in and cue out are null.";
return $errArray; return $errArray;
} }
@ -598,9 +591,9 @@ class Application_Model_Playlist {
$file = $row->getCcFiles($this->con); $file = $row->getCcFiles($this->con);
$origLength = $file->getDbLength(); $origLength = $file->getDbLength();
if (!is_null($cueIn) && !is_null($cueOut)){ if (!is_null($cueIn) && !is_null($cueOut)) {
if ($cueOut === ""){ if ($cueOut === "") {
$cueOut = $origLength; $cueOut = $origLength;
} }
@ -608,13 +601,15 @@ class Application_Model_Playlist {
$r = $this->con->query($sql); $r = $this->con->query($sql);
if ($r->fetchColumn(0)) { if ($r->fetchColumn(0)) {
$errArray["error"] = "Can't set cue in to be larger than cue out."; $errArray["error"] = "Can't set cue in to be larger than cue out.";
return $errArray; return $errArray;
} }
$sql = "SELECT INTERVAL '{$cueOut}' > INTERVAL '{$origLength}'"; $sql = "SELECT INTERVAL '{$cueOut}' > INTERVAL '{$origLength}'";
$r = $this->con->query($sql); $r = $this->con->query($sql);
if ($r->fetchColumn(0)){ if ($r->fetchColumn(0)) {
$errArray["error"] = "Can't set cue out to be greater than file length."; $errArray["error"] = "Can't set cue out to be greater than file length.";
return $errArray; return $errArray;
} }
@ -626,13 +621,13 @@ class Application_Model_Playlist {
$row->setDbCueout($cueOut); $row->setDbCueout($cueOut);
$row->setDBCliplength($cliplength); $row->setDBCliplength($cliplength);
} } elseif (!is_null($cueIn)) {
else if (!is_null($cueIn)) {
$sql = "SELECT INTERVAL '{$cueIn}' > INTERVAL '{$oldCueOut}'"; $sql = "SELECT INTERVAL '{$cueIn}' > INTERVAL '{$oldCueOut}'";
$r = $this->con->query($sql); $r = $this->con->query($sql);
if ($r->fetchColumn(0)) { if ($r->fetchColumn(0)) {
$errArray["error"] = "Can't set cue in to be larger than cue out."; $errArray["error"] = "Can't set cue in to be larger than cue out.";
return $errArray; return $errArray;
} }
@ -642,10 +637,9 @@ class Application_Model_Playlist {
$row->setDbCuein($cueIn); $row->setDbCuein($cueIn);
$row->setDBCliplength($cliplength); $row->setDBCliplength($cliplength);
} } elseif (!is_null($cueOut)) {
else if (!is_null($cueOut)) {
if ($cueOut === ""){ if ($cueOut === "") {
$cueOut = $origLength; $cueOut = $origLength;
} }
@ -653,13 +647,15 @@ class Application_Model_Playlist {
$r = $this->con->query($sql); $r = $this->con->query($sql);
if ($r->fetchColumn(0)) { if ($r->fetchColumn(0)) {
$errArray["error"] = "Can't set cue out to be smaller than cue in."; $errArray["error"] = "Can't set cue out to be smaller than cue in.";
return $errArray; return $errArray;
} }
$sql = "SELECT INTERVAL '{$cueOut}' > INTERVAL '{$origLength}'"; $sql = "SELECT INTERVAL '{$cueOut}' > INTERVAL '{$origLength}'";
$r = $this->con->query($sql); $r = $this->con->query($sql);
if ($r->fetchColumn(0)){ if ($r->fetchColumn(0)) {
$errArray["error"] = "Can't set cue out to be greater than file length."; $errArray["error"] = "Can't set cue out to be greater than file length.";
return $errArray; return $errArray;
} }
@ -675,14 +671,14 @@ class Application_Model_Playlist {
$sql = "SELECT INTERVAL '{$fadeIn}' > INTERVAL '{$cliplength}'"; $sql = "SELECT INTERVAL '{$fadeIn}' > INTERVAL '{$cliplength}'";
$r = $this->con->query($sql); $r = $this->con->query($sql);
if ($r->fetchColumn(0)){ if ($r->fetchColumn(0)) {
$fadeIn = $cliplength; $fadeIn = $cliplength;
$row->setDbFadein($fadeIn); $row->setDbFadein($fadeIn);
} }
$sql = "SELECT INTERVAL '{$fadeOut}' > INTERVAL '{$cliplength}'"; $sql = "SELECT INTERVAL '{$fadeOut}' > INTERVAL '{$cliplength}'";
$r = $this->con->query($sql); $r = $this->con->query($sql);
if ($r->fetchColumn(0)){ if ($r->fetchColumn(0)) {
$fadeOut = $cliplength; $fadeOut = $cliplength;
$row->setDbFadein($fadeOut); $row->setDbFadein($fadeOut);
} }
@ -692,8 +688,7 @@ class Application_Model_Playlist {
$this->pl->save($this->con); $this->pl->save($this->con);
$this->con->commit(); $this->con->commit();
} } catch (Exception $e) {
catch (Exception $e) {
$this->con->rollback(); $this->con->rollback();
throw $e; throw $e;
} }
@ -707,7 +702,7 @@ class Application_Model_Playlist {
$categories = $this->categories; $categories = $this->categories;
$md = array(); $md = array();
foreach($categories as $key => $val) { foreach ($categories as $key => $val) {
$method = 'get' . $val; $method = 'get' . $val;
$md[$key] = $this->$method(); $md[$key] = $this->$method();
} }
@ -719,6 +714,7 @@ class Application_Model_Playlist {
{ {
$cat = $this->categories[$category]; $cat = $this->categories[$category];
$method = 'get' . $cat; $method = 'get' . $cat;
return $this->$method(); return $this->$method();
} }
@ -749,6 +745,7 @@ class Application_Model_Playlist {
if (isset($arr[1])) { if (isset($arr[1])) {
return intval($arr[0])*60 + floatval($arr[1]); return intval($arr[0])*60 + floatval($arr[1]);
} }
return floatval($arr[0]); return floatval($arr[0]);
} }
@ -758,7 +755,7 @@ class Application_Model_Playlist {
* *
* Convert float seconds value to playlist time format * Convert float seconds value to playlist time format
* *
* @param float $seconds * @param float $seconds
* @return string * @return string
* interval in playlist time format (HH:mm:ss.d) * interval in playlist time format (HH:mm:ss.d)
*/ */
@ -766,9 +763,9 @@ class Application_Model_Playlist {
{ {
$info = explode('.', $p_seconds); $info = explode('.', $p_seconds);
$seconds = $info[0]; $seconds = $info[0];
if(!isset($info[1])){ if (!isset($info[1])) {
$milliStr = 0; $milliStr = 0;
}else{ } else {
$milliStr = $info[1]; $milliStr = $info[1];
} }
$hours = floor($seconds / 3600); $hours = floor($seconds / 3600);
@ -786,6 +783,7 @@ class Application_Model_Playlist {
global $CC_CONFIG; global $CC_CONFIG;
$con = Propel::getConnection(); $con = Propel::getConnection();
$sql = 'SELECT count(*) as cnt FROM '.$CC_CONFIG["playListTable"]; $sql = 'SELECT count(*) as cnt FROM '.$CC_CONFIG["playListTable"];
return $con->query($sql)->fetchColumn(0); return $con->query($sql)->fetchColumn(0);
} }

View file

@ -2,16 +2,16 @@
require_once 'formatters/LengthFormatter.php'; require_once 'formatters/LengthFormatter.php';
class Application_Model_PlayoutHistory { class Application_Model_PlayoutHistory
{
private $con; private $con;
private $timezone; private $timezone;
//in UTC timezone //in UTC timezone
private $startDT; private $startDT;
//in UTC timezone //in UTC timezone
private $endDT; private $endDT;
private $epoch_now; private $epoch_now;
private $opts; private $opts;
@ -24,12 +24,12 @@ class Application_Model_PlayoutHistory {
"copyright" => "file.copyright", "copyright" => "file.copyright",
); );
public function __construct($p_startDT, $p_endDT, $p_opts) { public function __construct($p_startDT, $p_endDT, $p_opts)
{
$this->con = Propel::getConnection(CcSchedulePeer::DATABASE_NAME); $this->con = Propel::getConnection(CcSchedulePeer::DATABASE_NAME);
$this->startDT = $p_startDT; $this->startDT = $p_startDT;
$this->endDT = $p_endDT; $this->endDT = $p_endDT;
$this->timezone = date_default_timezone_get(); $this->timezone = date_default_timezone_get();
$this->epoch_now = time(); $this->epoch_now = time();
$this->opts = $p_opts; $this->opts = $p_opts;
} }
@ -37,16 +37,16 @@ class Application_Model_PlayoutHistory {
/* /*
* map front end mDataProp labels to proper column names for searching etc. * map front end mDataProp labels to proper column names for searching etc.
*/ */
private function translateColumns() { private function translateColumns()
{
for ($i = 0; $i < $this->opts["iColumns"]; $i++) {
for ($i = 0; $i < $this->opts["iColumns"]; $i++){ $this->opts["mDataProp_{$i}"] = $this->mDataPropMap[$this->opts["mDataProp_{$i}"]];
$this->opts["mDataProp_{$i}"] = $this->mDataPropMap[$this->opts["mDataProp_{$i}"]];
} }
} }
public function getItems() { public function getItems()
{
$this->translateColumns(); $this->translateColumns();
$select = array( $select = array(
@ -61,20 +61,20 @@ class Application_Model_PlayoutHistory {
$start = $this->startDT->format("Y-m-d H:i:s"); $start = $this->startDT->format("Y-m-d H:i:s");
$end = $this->endDT->format("Y-m-d H:i:s"); $end = $this->endDT->format("Y-m-d H:i:s");
$historyTable = "( $historyTable = "(
select count(schedule.file_id) as played, schedule.file_id as file_id select count(schedule.file_id) as played, schedule.file_id as file_id
from cc_schedule as schedule from cc_schedule as schedule
where schedule.starts >= '{$start}' and schedule.starts < '{$end}' where schedule.starts >= '{$start}' and schedule.starts < '{$end}'
and schedule.playout_status > 0 and schedule.media_item_played != FALSE and schedule.broadcasted = 1 and schedule.playout_status > 0 and schedule.media_item_played != FALSE and schedule.broadcasted = 1
group by schedule.file_id group by schedule.file_id
) )
AS playout left join cc_files as file on (file.id = playout.file_id)"; AS playout left join cc_files as file on (file.id = playout.file_id)";
$results = Application_Model_Datatables::findEntries($this->con, $select, $historyTable, $this->opts, "history"); $results = Application_Model_Datatables::findEntries($this->con, $select, $historyTable, $this->opts, "history");
foreach ($results["history"] as &$row) { foreach ($results["history"] as &$row) {
$formatter = new LengthFormatter($row['length']); $formatter = new LengthFormatter($row['length']);
$row['length'] = $formatter->format(); $row['length'] = $formatter->format();
} }

File diff suppressed because it is too large Load diff

View file

@ -3,12 +3,13 @@ require_once 'php-amqplib/amqp.inc';
class Application_Model_RabbitMq class Application_Model_RabbitMq
{ {
static public $doPush = FALSE; public static $doPush = FALSE;
/** /**
* Sets a flag to push the schedule at the end of the request. * Sets a flag to push the schedule at the end of the request.
*/ */
public static function PushSchedule() { public static function PushSchedule()
{
Application_Model_RabbitMq::$doPush = TRUE; Application_Model_RabbitMq::$doPush = TRUE;
} }
@ -82,7 +83,7 @@ class Application_Model_RabbitMq
$temp['event_type'] = $event_type; $temp['event_type'] = $event_type;
$temp['server_timezone'] = Application_Model_Preference::GetTimezone(); $temp['server_timezone'] = Application_Model_Preference::GetTimezone();
if($event_type == "update_recorder_schedule"){ if ($event_type == "update_recorder_schedule") {
$temp['shows'] = Application_Model_Show::getShows($now, $end_timestamp, $excludeInstance=NULL, $onlyRecord=TRUE); $temp['shows'] = Application_Model_Show::getShows($now, $end_timestamp, $excludeInstance=NULL, $onlyRecord=TRUE);
} }
$data = json_encode($temp); $data = json_encode($temp);
@ -93,4 +94,3 @@ class Application_Model_RabbitMq
$conn->close(); $conn->close();
} }
} }

View file

@ -1,7 +1,7 @@
<?php <?php
class Application_Model_Schedule { class Application_Model_Schedule
{
/** /**
* Return TRUE if file is going to be played in the future. * Return TRUE if file is going to be played in the future.
* *
@ -24,13 +24,13 @@ class Application_Model_Schedule {
/** /**
* Returns data related to the scheduled items. * Returns data related to the scheduled items.
* *
* @param int $p_prev * @param int $p_prev
* @param int $p_next * @param int $p_next
* @return date * @return date
*/ */
public static function GetPlayOrderRange($p_prev = 1, $p_next = 1) public static function GetPlayOrderRange($p_prev = 1, $p_next = 1)
{ {
if (!is_int($p_prev) || !is_int($p_next)){ if (!is_int($p_prev) || !is_int($p_next)) {
//must enter integers to specify ranges //must enter integers to specify ranges
return array(); return array();
} }
@ -70,8 +70,8 @@ class Application_Model_Schedule {
public static function GetPrevCurrentNext($p_previousShowID, $p_currentShowID, $p_nextShowID, $p_timeNow) public static function GetPrevCurrentNext($p_previousShowID, $p_currentShowID, $p_nextShowID, $p_timeNow)
{ {
if ($p_previousShowID == null && $p_currentShowID == null && $p_nextShowID == null) if ($p_previousShowID == null && $p_currentShowID == null && $p_nextShowID == null)
return;
return;
global $CC_CONFIG; global $CC_CONFIG;
$con = Propel::getConnection(); $con = Propel::getConnection();
@ -85,12 +85,12 @@ class Application_Model_Schedule {
WHERE '; WHERE ';
*/ */
if (isset($p_previousShowID)){ if (isset($p_previousShowID)) {
if (isset($p_nextShowID) || isset($p_currentShowID)) if (isset($p_nextShowID) || isset($p_currentShowID))
$sql .= '('; $sql .= '(';
$sql .= 'st.instance_id = '.$p_previousShowID; $sql .= 'st.instance_id = '.$p_previousShowID;
} }
if ($p_currentShowID != null){ if ($p_currentShowID != null) {
if ($p_previousShowID != null) if ($p_previousShowID != null)
$sql .= ' OR '; $sql .= ' OR ';
else if($p_nextShowID != null) else if($p_nextShowID != null)
@ -117,13 +117,13 @@ class Application_Model_Schedule {
$results['next'] = null; $results['next'] = null;
$timeNowAsMillis = strtotime($p_timeNow); $timeNowAsMillis = strtotime($p_timeNow);
for( $i = 0; $i < $numberOfRows; ++$i ){ for ($i = 0; $i < $numberOfRows; ++$i) {
// if the show is overbooked, then update the track end time to the end of the show time. // if the show is overbooked, then update the track end time to the end of the show time.
if($rows[$i]['ends'] > $rows[$i]["show_ends"]){ if ($rows[$i]['ends'] > $rows[$i]["show_ends"]) {
$rows[$i]['ends'] = $rows[$i]["show_ends"]; $rows[$i]['ends'] = $rows[$i]["show_ends"];
} }
if ((strtotime($rows[$i]['starts']) <= $timeNowAsMillis) && (strtotime($rows[$i]['ends']) >= $timeNowAsMillis)){ if ((strtotime($rows[$i]['starts']) <= $timeNowAsMillis) && (strtotime($rows[$i]['ends']) >= $timeNowAsMillis)) {
if ( $i - 1 >= 0){ if ($i - 1 >= 0) {
$results['previous'] = array("name"=>$rows[$i-1]["artist_name"]." - ".$rows[$i-1]["track_title"], $results['previous'] = array("name"=>$rows[$i-1]["artist_name"]." - ".$rows[$i-1]["track_title"],
"starts"=>$rows[$i-1]["starts"], "starts"=>$rows[$i-1]["starts"],
"ends"=>$rows[$i-1]["ends"], "ends"=>$rows[$i-1]["ends"],
@ -135,7 +135,7 @@ class Application_Model_Schedule {
"media_item_played"=>$rows[$i]["media_item_played"], "media_item_played"=>$rows[$i]["media_item_played"],
"record"=>0, "record"=>0,
"type"=>'track'); "type"=>'track');
if ( isset($rows[$i+1])){ if ( isset($rows[$i+1])) {
$results['next'] = array("name"=>$rows[$i+1]["artist_name"]." - ".$rows[$i+1]["track_title"], $results['next'] = array("name"=>$rows[$i+1]["artist_name"]." - ".$rows[$i+1]["track_title"],
"starts"=>$rows[$i+1]["starts"], "starts"=>$rows[$i+1]["starts"],
"ends"=>$rows[$i+1]["ends"], "ends"=>$rows[$i+1]["ends"],
@ -161,10 +161,12 @@ class Application_Model_Schedule {
"starts"=>$rows[$previousIndex]["starts"], "starts"=>$rows[$previousIndex]["starts"],
"ends"=>$rows[$previousIndex]["ends"]);; "ends"=>$rows[$previousIndex]["ends"]);;
} }
return $results; return $results;
} }
public static function GetLastScheduleItem($p_timeNow){ public static function GetLastScheduleItem($p_timeNow)
{
global $CC_CONFIG; global $CC_CONFIG;
$con = Propel::getConnection(); $con = Propel::getConnection();
$sql = "SELECT" $sql = "SELECT"
@ -182,11 +184,13 @@ class Application_Model_Schedule {
." LIMIT 1"; ." LIMIT 1";
$row = $con->query($sql)->fetchAll(); $row = $con->query($sql)->fetchAll();
return $row; return $row;
} }
public static function GetCurrentScheduleItem($p_timeNow, $p_instanceId){ public static function GetCurrentScheduleItem($p_timeNow, $p_instanceId)
{
global $CC_CONFIG; global $CC_CONFIG;
$con = Propel::getConnection(); $con = Propel::getConnection();
/* Note that usually there will be one result returned. In some /* Note that usually there will be one result returned. In some
@ -207,10 +211,12 @@ class Application_Model_Schedule {
." LIMIT 1"; ." LIMIT 1";
$row = $con->query($sql)->fetchAll(); $row = $con->query($sql)->fetchAll();
return $row; return $row;
} }
public static function GetNextScheduleItem($p_timeNow){ public static function GetNextScheduleItem($p_timeNow)
{
global $CC_CONFIG; global $CC_CONFIG;
$con = Propel::getConnection(); $con = Propel::getConnection();
$sql = "SELECT" $sql = "SELECT"
@ -228,6 +234,7 @@ class Application_Model_Schedule {
." LIMIT 1"; ." LIMIT 1";
$row = $con->query($sql)->fetchAll(); $row = $con->query($sql)->fetchAll();
return $row; return $row;
} }
@ -273,7 +280,6 @@ class Application_Model_Schedule {
OR (si.ends > '{$p_start}' AND si.ends <= '{$p_end}') OR (si.ends > '{$p_start}' AND si.ends <= '{$p_end}')
OR (si.starts <= '{$p_start}' AND si.ends >= '{$p_end}'))"; OR (si.starts <= '{$p_start}' AND si.ends >= '{$p_end}'))";
if (count($p_shows) > 0) { if (count($p_shows) > 0) {
$sql .= " AND show_id IN (".implode(",", $p_shows).")"; $sql .= " AND show_id IN (".implode(",", $p_shows).")";
} }
@ -283,6 +289,7 @@ class Application_Model_Schedule {
Logging::debug($sql); Logging::debug($sql);
$rows = $con->query($sql)->fetchAll(); $rows = $con->query($sql)->fetchAll();
return $rows; return $rows;
} }
@ -298,17 +305,19 @@ class Application_Model_Schedule {
$master_dj = Application_Model_Preference::GetSourceSwitchStatus('master_dj') == 'on'?true:false; $master_dj = Application_Model_Preference::GetSourceSwitchStatus('master_dj') == 'on'?true:false;
$scheduled_play = Application_Model_Preference::GetSourceSwitchStatus('scheduled_play') == 'on'?true:false; $scheduled_play = Application_Model_Preference::GetSourceSwitchStatus('scheduled_play') == 'on'?true:false;
if(!$live_dj && !$master_dj && $scheduled_play){ if (!$live_dj && !$master_dj && $scheduled_play) {
$sql .= ", broadcasted=1"; $sql .= ", broadcasted=1";
} }
$sql .= " WHERE id=$p_id"; $sql .= " WHERE id=$p_id";
$retVal = $con->exec($sql); $retVal = $con->exec($sql);
return $retVal; return $retVal;
} }
public static function UpdateBrodcastedStatus($dateTime, $value){ public static function UpdateBrodcastedStatus($dateTime, $value)
{
global $CC_CONFIG; global $CC_CONFIG;
$con = Propel::getConnection(); $con = Propel::getConnection();
$now = $dateTime->format("Y-m-d H:i:s"); $now = $dateTime->format("Y-m-d H:i:s");
@ -316,6 +325,7 @@ class Application_Model_Schedule {
." SET broadcasted=$value" ." SET broadcasted=$value"
." WHERE starts <= '$now' AND ends >= '$now'"; ." WHERE starts <= '$now' AND ends >= '$now'";
$retVal = $con->exec($sql); $retVal = $con->exec($sql);
return $retVal; return $retVal;
} }
@ -324,15 +334,15 @@ class Application_Model_Schedule {
global $CC_CONFIG; global $CC_CONFIG;
$con = Propel::getConnection(); $con = Propel::getConnection();
$sql = "SELECT count(*) as cnt FROM ".$CC_CONFIG['scheduleTable']; $sql = "SELECT count(*) as cnt FROM ".$CC_CONFIG['scheduleTable'];
return $con->query($sql)->fetchColumn(0); return $con->query($sql)->fetchColumn(0);
} }
/** /**
* Convert a time string in the format "YYYY-MM-DD HH:mm:SS" * Convert a time string in the format "YYYY-MM-DD HH:mm:SS"
* to "YYYY-MM-DD-HH-mm-SS". * to "YYYY-MM-DD-HH-mm-SS".
* *
* @param string $p_time * @param string $p_time
* @return string * @return string
*/ */
private static function AirtimeTimeToPypoTime($p_time) private static function AirtimeTimeToPypoTime($p_time)
@ -340,6 +350,7 @@ class Application_Model_Schedule {
$p_time = substr($p_time, 0, 19); $p_time = substr($p_time, 0, 19);
$p_time = str_replace(" ", "-", $p_time); $p_time = str_replace(" ", "-", $p_time);
$p_time = str_replace(":", "-", $p_time); $p_time = str_replace(":", "-", $p_time);
return $p_time; return $p_time;
} }
@ -347,19 +358,20 @@ class Application_Model_Schedule {
* Convert a time string in the format "YYYY-MM-DD-HH-mm-SS" to * Convert a time string in the format "YYYY-MM-DD-HH-mm-SS" to
* "YYYY-MM-DD HH:mm:SS". * "YYYY-MM-DD HH:mm:SS".
* *
* @param string $p_time * @param string $p_time
* @return string * @return string
*/ */
private static function PypoTimeToAirtimeTime($p_time) private static function PypoTimeToAirtimeTime($p_time)
{ {
$t = explode("-", $p_time); $t = explode("-", $p_time);
return $t[0]."-".$t[1]."-".$t[2]." ".$t[3].":".$t[4].":00"; return $t[0]."-".$t[1]."-".$t[2]." ".$t[3].":".$t[4].":00";
} }
/** /**
* Return true if the input string is in the format YYYY-MM-DD-HH-mm * Return true if the input string is in the format YYYY-MM-DD-HH-mm
* *
* @param string $p_time * @param string $p_time
* @return boolean * @return boolean
*/ */
public static function ValidPypoTimeFormat($p_time) public static function ValidPypoTimeFormat($p_time)
@ -373,6 +385,7 @@ class Application_Model_Schedule {
return false; return false;
} }
} }
return true; return true;
} }
@ -380,7 +393,7 @@ class Application_Model_Schedule {
* Converts a time value as a string (with format HH:MM:SS.mmmmmm) to * Converts a time value as a string (with format HH:MM:SS.mmmmmm) to
* millisecs. * millisecs.
* *
* @param string $p_time * @param string $p_time
* @return int * @return int
*/ */
public static function WallTimeToMillisecs($p_time) public static function WallTimeToMillisecs($p_time)
@ -397,16 +410,16 @@ class Application_Model_Schedule {
$seconds = intval($t[2]); $seconds = intval($t[2]);
} }
$ret = $millisecs + ($seconds * 1000) + ($t[1] * 60 * 1000) + ($t[0] * 60 * 60 * 1000); $ret = $millisecs + ($seconds * 1000) + ($t[1] * 60 * 1000) + ($t[0] * 60 * 60 * 1000);
return $ret; return $ret;
} }
/** /**
* Compute the difference between two times in the format "HH:MM:SS.mmmmmm". * Compute the difference between two times in the format "HH:MM:SS.mmmmmm".
* Note: currently only supports calculating millisec differences. * Note: currently only supports calculating millisec differences.
* *
* @param string $p_time1 * @param string $p_time1
* @param string $p_time2 * @param string $p_time2
* @return double * @return double
*/ */
private static function TimeDiff($p_time1, $p_time2) private static function TimeDiff($p_time1, $p_time2)
@ -423,6 +436,7 @@ class Application_Model_Schedule {
$millisec2 = intval($millisec2); $millisec2 = intval($millisec2);
$diff = abs($millisec1 - $millisec2)/1000; $diff = abs($millisec1 - $millisec2)/1000;
} }
return $diff; return $diff;
} }
@ -442,7 +456,8 @@ class Application_Model_Schedule {
* Returns null if nothing found, else an array of associative * Returns null if nothing found, else an array of associative
* arrays representing each row. * arrays representing each row.
*/ */
public static function GetItems($p_startTime, $p_endTime) { public static function GetItems($p_startTime, $p_endTime)
{
global $CC_CONFIG; global $CC_CONFIG;
$con = Propel::getConnection(); $con = Propel::getConnection();
@ -464,7 +479,6 @@ class Application_Model_Schedule {
." LEFT JOIN $CC_CONFIG[filesTable] AS f" ." LEFT JOIN $CC_CONFIG[filesTable] AS f"
." ON st.file_id = f.id"; ." ON st.file_id = f.id";
$predicates = " WHERE st.ends > '$p_startTime'" $predicates = " WHERE st.ends > '$p_startTime'"
." AND st.starts < '$p_endTime'" ." AND st.starts < '$p_endTime'"
." AND st.playout_status > 0" ." AND st.playout_status > 0"
@ -475,7 +489,7 @@ class Application_Model_Schedule {
$rows = $con->query($sql)->fetchAll(); $rows = $con->query($sql)->fetchAll();
if (count($rows) < 3){ if (count($rows) < 3) {
Logging::debug("Get Schedule: Less than 3 results returned. Doing another query since we need a minimum of 3 results."); Logging::debug("Get Schedule: Less than 3 results returned. Doing another query since we need a minimum of 3 results.");
$dt = new DateTime("@".time()); $dt = new DateTime("@".time());
@ -496,8 +510,8 @@ class Application_Model_Schedule {
return $rows; return $rows;
} }
public static function GetScheduledPlaylists($p_fromDateTime = null, $p_toDateTime = null){ public static function GetScheduledPlaylists($p_fromDateTime = null, $p_toDateTime = null)
{
global $CC_CONFIG; global $CC_CONFIG;
/* if $p_fromDateTime and $p_toDateTime function parameters are null, then set range /* if $p_fromDateTime and $p_toDateTime function parameters are null, then set range
@ -513,7 +527,7 @@ class Application_Model_Schedule {
$cache_ahead_hours = $CC_CONFIG["cache_ahead_hours"]; $cache_ahead_hours = $CC_CONFIG["cache_ahead_hours"];
if (is_numeric($cache_ahead_hours)){ if (is_numeric($cache_ahead_hours)) {
//make sure we are not dealing with a float //make sure we are not dealing with a float
$cache_ahead_hours = intval($cache_ahead_hours); $cache_ahead_hours = intval($cache_ahead_hours);
} else { } else {
@ -536,7 +550,7 @@ class Application_Model_Schedule {
$data["media"] = array(); $data["media"] = array();
$kick_times = Application_Model_ShowInstance::GetEndTimeOfNextShowWithLiveDJ($range_start, $range_end); $kick_times = Application_Model_ShowInstance::GetEndTimeOfNextShowWithLiveDJ($range_start, $range_end);
foreach($kick_times as $kick_time_info){ foreach ($kick_times as $kick_time_info) {
$kick_time = $kick_time_info['ends']; $kick_time = $kick_time_info['ends'];
$temp = explode('.', Application_Model_Preference::GetDefaultTransitionFade()); $temp = explode('.', Application_Model_Preference::GetDefaultTransitionFade());
// we round down transition time since PHP cannot handle millisecond. We need to // we round down transition time since PHP cannot handle millisecond. We need to
@ -552,7 +566,7 @@ class Application_Model_Schedule {
$data["media"][$kick_start]['event_type'] = "kick_out"; $data["media"][$kick_start]['event_type'] = "kick_out";
$data["media"][$kick_start]['type'] = "event"; $data["media"][$kick_start]['type'] = "event";
if($kick_time !== $switch_off_time){ if ($kick_time !== $switch_off_time) {
$switch_start = Application_Model_Schedule::AirtimeTimeToPypoTime($switch_off_time); $switch_start = Application_Model_Schedule::AirtimeTimeToPypoTime($switch_off_time);
$data["media"][$switch_start]['start'] = $switch_start; $data["media"][$switch_start]['start'] = $switch_start;
$data["media"][$switch_start]['end'] = $switch_start; $data["media"][$switch_start]['end'] = $switch_start;
@ -561,7 +575,7 @@ class Application_Model_Schedule {
} }
} }
foreach ($items as $item){ foreach ($items as $item) {
$showInstance = CcShowInstancesQuery::create()->findPK($item["instance_id"]); $showInstance = CcShowInstancesQuery::create()->findPK($item["instance_id"]);
$showId = $showInstance->getDbShowId(); $showId = $showInstance->getDbShowId();
@ -572,13 +586,13 @@ class Application_Model_Schedule {
$trackStartDateTime = new DateTime($item["start"], $utcTimeZone); $trackStartDateTime = new DateTime($item["start"], $utcTimeZone);
$trackEndDateTime = new DateTime($item["end"], $utcTimeZone); $trackEndDateTime = new DateTime($item["end"], $utcTimeZone);
if ($trackStartDateTime->getTimestamp() > $showEndDateTime->getTimestamp()){ if ($trackStartDateTime->getTimestamp() > $showEndDateTime->getTimestamp()) {
continue; continue;
} }
/* Note: cue_out and end are always the same. */ /* Note: cue_out and end are always the same. */
/* TODO: Not all tracks will have "show_end" */ /* TODO: Not all tracks will have "show_end" */
if ($trackEndDateTime->getTimestamp() > $showEndDateTime->getTimestamp()){ if ($trackEndDateTime->getTimestamp() > $showEndDateTime->getTimestamp()) {
$di = $trackStartDateTime->diff($showEndDateTime); $di = $trackStartDateTime->diff($showEndDateTime);
$item["cue_out"] = $di->format("%H:%i:%s").".000"; $item["cue_out"] = $di->format("%H:%i:%s").".000";
@ -601,7 +615,7 @@ class Application_Model_Schedule {
'start' => $start, 'start' => $start,
'end' => Application_Model_Schedule::AirtimeTimeToPypoTime($item["end"]), 'end' => Application_Model_Schedule::AirtimeTimeToPypoTime($item["end"]),
'show_name' => $showName, 'show_name' => $showName,
'replay_gain' => $item["replay_gain"] 'replay_gain' => is_null($item["replay_gain"]) ? "0": $item["replay_gain"]
); );
} }
@ -615,14 +629,16 @@ class Application_Model_Schedule {
$con->exec("TRUNCATE TABLE ".$CC_CONFIG["scheduleTable"]); $con->exec("TRUNCATE TABLE ".$CC_CONFIG["scheduleTable"]);
} }
public static function deleteWithFileId($fileId){ public static function deleteWithFileId($fileId)
{
global $CC_CONFIG; global $CC_CONFIG;
$con = Propel::getConnection(); $con = Propel::getConnection();
$sql = "DELETE FROM ".$CC_CONFIG["scheduleTable"]." WHERE file_id=$fileId"; $sql = "DELETE FROM ".$CC_CONFIG["scheduleTable"]." WHERE file_id=$fileId";
$res = $con->query($sql); $res = $con->query($sql);
} }
public static function createNewFormSections($p_view){ public static function createNewFormSections($p_view)
{
$isSaas = Application_Model_Preference::GetPlanLevel() == 'disabled'?false:true; $isSaas = Application_Model_Preference::GetPlanLevel() == 'disabled'?false:true;
$formWhat = new Application_Form_AddShowWhat(); $formWhat = new Application_Form_AddShowWhat();
@ -656,7 +672,7 @@ class Application_Model_Schedule {
$formRepeats->populate(array('add_show_end_date' => date("Y-m-d"))); $formRepeats->populate(array('add_show_end_date' => date("Y-m-d")));
if(!$isSaas){ if (!$isSaas) {
$formRecord = new Application_Form_AddShowRR(); $formRecord = new Application_Form_AddShowRR();
$formAbsoluteRebroadcast = new Application_Form_AddShowAbsoluteRebroadcastDates(); $formAbsoluteRebroadcast = new Application_Form_AddShowAbsoluteRebroadcastDates();
$formRebroadcast = new Application_Form_AddShowRebroadcastDates(); $formRebroadcast = new Application_Form_AddShowRebroadcastDates();
@ -677,7 +693,8 @@ class Application_Model_Schedule {
* There is still lots of clean-up to do. For example we shouldn't be passing $controller into * There is still lots of clean-up to do. For example we shouldn't be passing $controller into
* this method to manipulate the view (this should be done inside the controller function). With * this method to manipulate the view (this should be done inside the controller function). With
* 2.1 deadline looming, this is OK for now. -Martin */ * 2.1 deadline looming, this is OK for now. -Martin */
public static function updateShowInstance($data, $controller){ public static function updateShowInstance($data, $controller)
{
$isSaas = (Application_Model_Preference::GetPlanLevel() != 'disabled'); $isSaas = (Application_Model_Preference::GetPlanLevel() != 'disabled');
$formWhat = new Application_Form_AddShowWhat(); $formWhat = new Application_Form_AddShowWhat();
@ -694,7 +711,7 @@ class Application_Model_Schedule {
$formStyle->removeDecorator('DtDdWrapper'); $formStyle->removeDecorator('DtDdWrapper');
$formLive->removeDecorator('DtDdWrapper'); $formLive->removeDecorator('DtDdWrapper');
if(!$isSaas){ if (!$isSaas) {
$formRecord = new Application_Form_AddShowRR(); $formRecord = new Application_Form_AddShowRR();
$formAbsoluteRebroadcast = new Application_Form_AddShowAbsoluteRebroadcastDates(); $formAbsoluteRebroadcast = new Application_Form_AddShowAbsoluteRebroadcastDates();
$formRebroadcast = new Application_Form_AddShowRebroadcastDates(); $formRebroadcast = new Application_Form_AddShowRebroadcastDates();
@ -705,7 +722,7 @@ class Application_Model_Schedule {
} }
$when = $formWhen->isValid($data); $when = $formWhen->isValid($data);
if($when && $formWhen->checkReliantFields($data, true, null, true)) { if ($when && $formWhen->checkReliantFields($data, true, null, true)) {
$start_dt = new DateTime($data['add_show_start_date']." ".$data['add_show_start_time'], new DateTimeZone(date_default_timezone_get())); $start_dt = new DateTime($data['add_show_start_date']." ".$data['add_show_start_time'], new DateTimeZone(date_default_timezone_get()));
$start_dt->setTimezone(new DateTimeZone('UTC')); $start_dt->setTimezone(new DateTimeZone('UTC'));
@ -734,7 +751,7 @@ class Application_Model_Schedule {
$controller->view->who = $formWho; $controller->view->who = $formWho;
$controller->view->style = $formStyle; $controller->view->style = $formStyle;
$controller->view->live = $formLive; $controller->view->live = $formLive;
if(!$isSaas){ if (!$isSaas) {
$controller->view->rr = $formRecord; $controller->view->rr = $formRecord;
$controller->view->absoluteRebroadcast = $formAbsoluteRebroadcast; $controller->view->absoluteRebroadcast = $formAbsoluteRebroadcast;
$controller->view->rebroadcast = $formRebroadcast; $controller->view->rebroadcast = $formRebroadcast;
@ -743,6 +760,7 @@ class Application_Model_Schedule {
//$formAbsoluteRebroadcast->disable(); //$formAbsoluteRebroadcast->disable();
//$formRebroadcast->disable(); //$formRebroadcast->disable();
} }
return false; return false;
} }
} }
@ -755,8 +773,8 @@ class Application_Model_Schedule {
* Another clean-up is to move all the form manipulation to the proper form class..... * Another clean-up is to move all the form manipulation to the proper form class.....
* -Martin * -Martin
*/ */
public static function addUpdateShow($data, $controller, $validateStartDate, $originalStartDate=null, $update=false, $instanceId=null){ public static function addUpdateShow($data, $controller, $validateStartDate, $originalStartDate=null, $update=false, $instanceId=null)
{
$userInfo = Zend_Auth::getInstance()->getStorage()->read(); $userInfo = Zend_Auth::getInstance()->getStorage()->read();
$user = new Application_Model_User($userInfo->id); $user = new Application_Model_User($userInfo->id);
$isAdminOrPM = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER)); $isAdminOrPM = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER));
@ -781,7 +799,7 @@ class Application_Model_Schedule {
$what = $formWhat->isValid($data); $what = $formWhat->isValid($data);
$when = $formWhen->isValid($data); $when = $formWhen->isValid($data);
$live = $formLive->isValid($data); $live = $formLive->isValid($data);
if($when) { if ($when) {
$when = $formWhen->checkReliantFields($data, $validateStartDate, $originalStartDate, $update, $instanceId); $when = $formWhen->checkReliantFields($data, $validateStartDate, $originalStartDate, $update, $instanceId);
} }
@ -797,17 +815,17 @@ class Application_Model_Schedule {
$hValue = 0; $hValue = 0;
$mValue = 0; $mValue = 0;
if($hPos !== false){ if ($hPos !== false) {
$hValue = trim(substr($data["add_show_duration"], 0, $hPos)); $hValue = trim(substr($data["add_show_duration"], 0, $hPos));
} }
if($mPos !== false){ if ($mPos !== false) {
$hPos = $hPos === FALSE ? 0 : $hPos+1; $hPos = $hPos === FALSE ? 0 : $hPos+1;
$mValue = trim(substr($data["add_show_duration"], $hPos, -1 )); $mValue = trim(substr($data["add_show_duration"], $hPos, -1 ));
} }
$data["add_show_duration"] = $hValue.":".$mValue; $data["add_show_duration"] = $hValue.":".$mValue;
if(!$isSaas){ if (!$isSaas) {
$formRecord = new Application_Form_AddShowRR(); $formRecord = new Application_Form_AddShowRR();
$formAbsoluteRebroadcast = new Application_Form_AddShowAbsoluteRebroadcastDates(); $formAbsoluteRebroadcast = new Application_Form_AddShowAbsoluteRebroadcastDates();
$formRebroadcast = new Application_Form_AddShowRebroadcastDates(); $formRebroadcast = new Application_Form_AddShowRebroadcastDates();
@ -820,19 +838,19 @@ class Application_Model_Schedule {
$record = $formRecord->isValid($data); $record = $formRecord->isValid($data);
} }
if($data["add_show_repeats"]) { if ($data["add_show_repeats"]) {
$repeats = $formRepeats->isValid($data); $repeats = $formRepeats->isValid($data);
if($repeats) { if ($repeats) {
$repeats = $formRepeats->checkReliantFields($data); $repeats = $formRepeats->checkReliantFields($data);
} }
if(!$isSaas){ if (!$isSaas) {
$formAbsoluteRebroadcast->reset(); $formAbsoluteRebroadcast->reset();
//make it valid, results don't matter anyways. //make it valid, results don't matter anyways.
$rebroadAb = 1; $rebroadAb = 1;
if ($data["add_show_rebroadcast"]) { if ($data["add_show_rebroadcast"]) {
$rebroad = $formRebroadcast->isValid($data); $rebroad = $formRebroadcast->isValid($data);
if($rebroad) { if ($rebroad) {
$rebroad = $formRebroadcast->checkReliantFields($data); $rebroad = $formRebroadcast->checkReliantFields($data);
} }
} else { } else {
@ -841,14 +859,14 @@ class Application_Model_Schedule {
} }
} else { } else {
$repeats = 1; $repeats = 1;
if(!$isSaas){ if (!$isSaas) {
$formRebroadcast->reset(); $formRebroadcast->reset();
//make it valid, results don't matter anyways. //make it valid, results don't matter anyways.
$rebroad = 1; $rebroad = 1;
if ($data["add_show_rebroadcast"]) { if ($data["add_show_rebroadcast"]) {
$rebroadAb = $formAbsoluteRebroadcast->isValid($data); $rebroadAb = $formAbsoluteRebroadcast->isValid($data);
if($rebroadAb) { if ($rebroadAb) {
$rebroadAb = $formAbsoluteRebroadcast->checkReliantFields($data); $rebroadAb = $formAbsoluteRebroadcast->checkReliantFields($data);
} }
} else { } else {
@ -860,8 +878,8 @@ class Application_Model_Schedule {
$who = $formWho->isValid($data); $who = $formWho->isValid($data);
$style = $formStyle->isValid($data); $style = $formStyle->isValid($data);
if ($what && $when && $repeats && $who && $style && $live) { if ($what && $when && $repeats && $who && $style && $live) {
if(!$isSaas){ if (!$isSaas) {
if($record && $rebroadAb && $rebroad){ if ($record && $rebroadAb && $rebroad) {
if ($isAdminOrPM) { if ($isAdminOrPM) {
Application_Model_Show::create($data); Application_Model_Show::create($data);
} }
@ -906,7 +924,7 @@ class Application_Model_Schedule {
$controller->view->style = $formStyle; $controller->view->style = $formStyle;
$controller->view->live = $formLive; $controller->view->live = $formLive;
if(!$isSaas){ if (!$isSaas) {
$controller->view->rr = $formRecord; $controller->view->rr = $formRecord;
$controller->view->absoluteRebroadcast = $formAbsoluteRebroadcast; $controller->view->absoluteRebroadcast = $formAbsoluteRebroadcast;
$controller->view->rebroadcast = $formRebroadcast; $controller->view->rebroadcast = $formRebroadcast;
@ -917,7 +935,8 @@ class Application_Model_Schedule {
} }
} }
public static function checkOverlappingShows($show_start, $show_end, $update=false, $instanceId=null) { public static function checkOverlappingShows($show_start, $show_end, $update=false, $instanceId=null)
{
global $CC_CONFIG; global $CC_CONFIG;
$overlapping = false; $overlapping = false;
@ -934,7 +953,7 @@ class Application_Model_Schedule {
} }
$rows = $con->query($sql); $rows = $con->query($sql);
foreach($rows as $row) { foreach ($rows as $row) {
$start = new DateTime($row["starts"], new DateTimeZone('UTC')); $start = new DateTime($row["starts"], new DateTimeZone('UTC'));
$end = new DateTime($row["ends"], new DateTimeZone('UTC')); $end = new DateTime($row["ends"], new DateTimeZone('UTC'));
@ -944,6 +963,7 @@ class Application_Model_Schedule {
break; break;
} }
} }
return $overlapping; return $overlapping;
} }
} }

View file

@ -1,7 +1,7 @@
<?php <?php
class Application_Model_Scheduler { class Application_Model_Scheduler
{
private $con; private $con;
private $fileInfo = array( private $fileInfo = array(
"id" => "", "id" => "",
@ -19,14 +19,14 @@ class Application_Model_Scheduler {
private $checkUserPermissions = true; private $checkUserPermissions = true;
public function __construct() { public function __construct()
{
$this->con = Propel::getConnection(CcSchedulePeer::DATABASE_NAME); $this->con = Propel::getConnection(CcSchedulePeer::DATABASE_NAME);
$this->epochNow = microtime(true); $this->epochNow = microtime(true);
$this->nowDT = DateTime::createFromFormat("U.u", $this->epochNow, new DateTimeZone("UTC")); $this->nowDT = DateTime::createFromFormat("U.u", $this->epochNow, new DateTimeZone("UTC"));
if ($this->nowDT === false){ if ($this->nowDT === false) {
// DateTime::createFromFormat does not support millisecond string formatting in PHP 5.3.2 (Ubuntu 10.04). // DateTime::createFromFormat does not support millisecond string formatting in PHP 5.3.2 (Ubuntu 10.04).
// In PHP 5.3.3 (Ubuntu 10.10), this has been fixed. // In PHP 5.3.3 (Ubuntu 10.10), this has been fixed.
$this->nowDT = DateTime::createFromFormat("U", time(), new DateTimeZone("UTC")); $this->nowDT = DateTime::createFromFormat("U", time(), new DateTimeZone("UTC"));
@ -35,18 +35,18 @@ class Application_Model_Scheduler {
$this->user = Application_Model_User::getCurrentUser(); $this->user = Application_Model_User::getCurrentUser();
} }
public function setCheckUserPermissions($value) { public function setCheckUserPermissions($value)
{
$this->checkUserPermissions = $value; $this->checkUserPermissions = $value;
} }
/*
/* * make sure any incoming requests for scheduling are ligit.
* make sure any incoming requests for scheduling are ligit. *
* * @param array $items, an array containing pks of cc_schedule items.
* @param array $items, an array containing pks of cc_schedule items. */
*/ private function validateRequest($items)
private function validateRequest($items) { {
$nowEpoch = floatval($this->nowDT->format("U.u")); $nowEpoch = floatval($this->nowDT->format("U.u"));
for ($i = 0; $i < count($items); $i++) { for ($i = 0; $i < count($items); $i++) {
@ -57,7 +57,7 @@ class Application_Model_Scheduler {
$schedInfo[$id] = $items[$i]["instance"]; $schedInfo[$id] = $items[$i]["instance"];
} }
$instanceInfo[$items[$i]["instance"]] = $items[$i]["timestamp"]; $instanceInfo[$items[$i]["instance"]] = $items[$i]["timestamp"];
} }
if (count($instanceInfo) === 0) { if (count($instanceInfo) === 0) {
@ -73,21 +73,21 @@ class Application_Model_Scheduler {
$showInstances = CcShowInstancesQuery::create()->findPKs($instanceIds, $this->con); $showInstances = CcShowInstancesQuery::create()->findPKs($instanceIds, $this->con);
//an item has been deleted //an item has been deleted
if (count($schedIds) !== count($schedItems)) { if (count($schedIds) !== count($schedItems)) {
throw new OutDatedScheduleException("The schedule you're viewing is out of date! (sched mismatch)"); throw new OutDatedScheduleException("The schedule you're viewing is out of date! (sched mismatch)");
} }
//a show has been deleted //a show has been deleted
if (count($instanceIds) !== count($showInstances)) { if (count($instanceIds) !== count($showInstances)) {
throw new OutDatedScheduleException("The schedule you're viewing is out of date! (instance mismatch)"); throw new OutDatedScheduleException("The schedule you're viewing is out of date! (instance mismatch)");
} }
foreach ($schedItems as $schedItem) { foreach ($schedItems as $schedItem) {
$id = $schedItem->getDbId(); $id = $schedItem->getDbId();
$instance = $schedItem->getCcShowInstances($this->con); $instance = $schedItem->getCcShowInstances($this->con);
if (intval($schedInfo[$id]) !== $instance->getDbId()) { if (intval($schedInfo[$id]) !== $instance->getDbId()) {
throw new OutDatedScheduleException("The schedule you're viewing is out of date!"); throw new OutDatedScheduleException("The schedule you're viewing is out of date!");
} }
} }
@ -96,23 +96,23 @@ class Application_Model_Scheduler {
$id = $instance->getDbId(); $id = $instance->getDbId();
$show = $instance->getCcShow($this->con); $show = $instance->getCcShow($this->con);
if ($this->checkUserPermissions && $this->user->canSchedule($show->getDbId()) === false) { if ($this->checkUserPermissions && $this->user->canSchedule($show->getDbId()) === false) {
throw new Exception("You are not allowed to schedule show {$show->getDbName()}."); throw new Exception("You are not allowed to schedule show {$show->getDbName()}.");
} }
$showEndEpoch = floatval($instance->getDbEnds("U.u")); $showEndEpoch = floatval($instance->getDbEnds("U.u"));
if ($showEndEpoch < $nowEpoch) { if ($showEndEpoch < $nowEpoch) {
throw new OutDatedScheduleException("The show {$show->getDbName()} is over and cannot be scheduled."); throw new OutDatedScheduleException("The show {$show->getDbName()} is over and cannot be scheduled.");
} }
$ts = intval($instanceInfo[$id]); $ts = intval($instanceInfo[$id]);
$lastSchedTs = intval($instance->getDbLastScheduled("U")) ? : 0; $lastSchedTs = intval($instance->getDbLastScheduled("U")) ? : 0;
if ($ts < $lastSchedTs) { if ($ts < $lastSchedTs) {
Logging::log("ts {$ts} last sched {$lastSchedTs}"); Logging::log("ts {$ts} last sched {$lastSchedTs}");
throw new OutDatedScheduleException("The show {$show->getDbName()} has been previously updated!"); throw new OutDatedScheduleException("The show {$show->getDbName()} has been previously updated!");
} }
} }
} }
/* /*
@ -121,8 +121,8 @@ class Application_Model_Scheduler {
* *
* @return $files * @return $files
*/ */
private function retrieveMediaFiles($id, $type) { private function retrieveMediaFiles($id, $type)
{
$files = array(); $files = array();
if ($type === "audioclip") { if ($type === "audioclip") {
@ -130,8 +130,7 @@ class Application_Model_Scheduler {
if (is_null($file) || !$file->getDbFileExists()) { if (is_null($file) || !$file->getDbFileExists()) {
throw new Exception("A selected File does not exist!"); throw new Exception("A selected File does not exist!");
} } else {
else {
$data = $this->fileInfo; $data = $this->fileInfo;
$data["id"] = $id; $data["id"] = $id;
$data["cliplength"] = $file->getDbLength(); $data["cliplength"] = $file->getDbLength();
@ -146,8 +145,7 @@ class Application_Model_Scheduler {
$files[] = $data; $files[] = $data;
} }
} } elseif ($type === "playlist") {
else if ($type === "playlist") {
$contents = CcPlaylistcontentsQuery::create() $contents = CcPlaylistcontentsQuery::create()
->orderByDbPosition() ->orderByDbPosition()
@ -186,8 +184,8 @@ class Application_Model_Scheduler {
* *
* @return DateTime endDT in UTC * @return DateTime endDT in UTC
*/ */
private function findEndTime($p_startDT, $p_duration) { private function findEndTime($p_startDT, $p_duration)
{
$startEpoch = $p_startDT->format("U.u"); $startEpoch = $p_startDT->format("U.u");
$durationSeconds = Application_Model_Playlist::playlistTimeToSeconds($p_duration); $durationSeconds = Application_Model_Playlist::playlistTimeToSeconds($p_duration);
@ -205,70 +203,68 @@ class Application_Model_Scheduler {
return $dt; return $dt;
} }
private function findNextStartTime($DT, $instance) { private function findNextStartTime($DT, $instance)
{
$sEpoch = $DT->format("U.u"); $sEpoch = $DT->format("U.u");
$nEpoch = $this->epochNow; $nEpoch = $this->epochNow;
//check for if the show has started. //check for if the show has started.
if (bccomp( $nEpoch , $sEpoch , 6) === 1) { if (bccomp( $nEpoch , $sEpoch , 6) === 1) {
//need some kind of placeholder for cc_schedule. //need some kind of placeholder for cc_schedule.
//playout_status will be -1. //playout_status will be -1.
$nextDT = $this->nowDT; $nextDT = $this->nowDT;
$length = bcsub($nEpoch , $sEpoch , 6); $length = bcsub($nEpoch , $sEpoch , 6);
$cliplength = Application_Model_Playlist::secondsToPlaylistTime($length); $cliplength = Application_Model_Playlist::secondsToPlaylistTime($length);
//fillers are for only storing a chunk of time space that has already passed. //fillers are for only storing a chunk of time space that has already passed.
$filler = new CcSchedule(); $filler = new CcSchedule();
$filler->setDbStarts($DT) $filler->setDbStarts($DT)
->setDbEnds($this->nowDT) ->setDbEnds($this->nowDT)
->setDbClipLength($cliplength) ->setDbClipLength($cliplength)
->setDbPlayoutStatus(-1) ->setDbPlayoutStatus(-1)
->setDbInstanceId($instance->getDbId()) ->setDbInstanceId($instance->getDbId())
->save($this->con); ->save($this->con);
} } else {
else { $nextDT = $DT;
$nextDT = $DT;
} }
return $nextDT; return $nextDT;
} }
/* /*
* @param int $showInstance * @param int $showInstance
* @param array $exclude * @param array $exclude
* ids of sched items to remove from the calulation. * ids of sched items to remove from the calulation.
*/ */
private function removeGaps($showInstance, $exclude=null) { private function removeGaps($showInstance, $exclude=null)
{
Logging::log("removing gaps from show instance #".$showInstance); Logging::log("removing gaps from show instance #".$showInstance);
$instance = CcShowInstancesQuery::create()->findPK($showInstance, $this->con); $instance = CcShowInstancesQuery::create()->findPK($showInstance, $this->con);
if (is_null($instance)) { if (is_null($instance)) {
throw new OutDatedScheduleException("The schedule you're viewing is out of date!"); throw new OutDatedScheduleException("The schedule you're viewing is out of date!");
}
$itemStartDT = $instance->getDbStarts(null);
$schedule = CcScheduleQuery::create()
->filterByDbInstanceId($showInstance)
->filterByDbId($exclude, Criteria::NOT_IN)
->orderByDbStarts()
->find($this->con);
foreach ($schedule as $item) {
$itemEndDT = $this->findEndTime($itemStartDT, $item->getDbClipLength());
$item->setDbStarts($itemStartDT)
->setDbEnds($itemEndDT);
$itemStartDT = $itemEndDT;
} }
$schedule->save($this->con); $itemStartDT = $instance->getDbStarts(null);
$schedule = CcScheduleQuery::create()
->filterByDbInstanceId($showInstance)
->filterByDbId($exclude, Criteria::NOT_IN)
->orderByDbStarts()
->find($this->con);
foreach ($schedule as $item) {
$itemEndDT = $this->findEndTime($itemStartDT, $item->getDbClipLength());
$item->setDbStarts($itemStartDT)
->setDbEnds($itemEndDT);
$itemStartDT = $itemEndDT;
}
$schedule->save($this->con);
} }
/* /*
@ -276,8 +272,8 @@ class Application_Model_Scheduler {
* @param array $fileIds * @param array $fileIds
* @param array $playlistIds * @param array $playlistIds
*/ */
private function insertAfter($scheduleItems, $schedFiles, $adjustSched = true) { private function insertAfter($scheduleItems, $schedFiles, $adjustSched = true)
{
try { try {
$affectedShowInstances = array(); $affectedShowInstances = array();
@ -326,12 +322,12 @@ class Application_Model_Scheduler {
->orderByDbStarts() ->orderByDbStarts()
->find($this->con); ->find($this->con);
$pend = microtime(true); $pend = microtime(true);
Logging::debug("finding all following items."); Logging::debug("finding all following items.");
Logging::debug(floatval($pend) - floatval($pstart)); Logging::debug(floatval($pend) - floatval($pstart));
} }
foreach($schedFiles as $file) { foreach ($schedFiles as $file) {
$endTimeDT = $this->findEndTime($nextStartDT, $file['cliplength']); $endTimeDT = $this->findEndTime($nextStartDT, $file['cliplength']);
@ -339,8 +335,7 @@ class Application_Model_Scheduler {
//need to keep same id for resources if we want REST. //need to keep same id for resources if we want REST.
if (isset($file['sched_id'])) { if (isset($file['sched_id'])) {
$sched = CcScheduleQuery::create()->findPK($file['sched_id'], $this->con); $sched = CcScheduleQuery::create()->findPK($file['sched_id'], $this->con);
} } else {
else {
$sched = new CcSchedule(); $sched = new CcSchedule();
} }
Logging::log(print_r($file,true)); Logging::log(print_r($file,true));
@ -374,13 +369,13 @@ class Application_Model_Scheduler {
} }
$pend = microtime(true); $pend = microtime(true);
Logging::debug("adjusting all following items."); Logging::debug("adjusting all following items.");
Logging::debug(floatval($pend) - floatval($pstart)); Logging::debug(floatval($pend) - floatval($pstart));
} }
} }
$endProfile = microtime(true); $endProfile = microtime(true);
Logging::debug("finished adding scheduled items."); Logging::debug("finished adding scheduled items.");
Logging::debug(floatval($endProfile) - floatval($startProfile)); Logging::debug(floatval($endProfile) - floatval($startProfile));
//update the status flag in cc_schedule. //update the status flag in cc_schedule.
@ -394,8 +389,8 @@ class Application_Model_Scheduler {
$instance->updateScheduleStatus($this->con); $instance->updateScheduleStatus($this->con);
} }
$endProfile = microtime(true); $endProfile = microtime(true);
Logging::debug("updating show instances status."); Logging::debug("updating show instances status.");
Logging::debug(floatval($endProfile) - floatval($startProfile)); Logging::debug(floatval($endProfile) - floatval($startProfile));
$startProfile = microtime(true); $startProfile = microtime(true);
@ -405,11 +400,10 @@ class Application_Model_Scheduler {
->filterByPrimaryKeys($affectedShowInstances) ->filterByPrimaryKeys($affectedShowInstances)
->update(array('DbLastScheduled' => new DateTime("now", new DateTimeZone("UTC"))), $this->con); ->update(array('DbLastScheduled' => new DateTime("now", new DateTimeZone("UTC"))), $this->con);
$endProfile = microtime(true); $endProfile = microtime(true);
Logging::debug("updating last scheduled timestamp."); Logging::debug("updating last scheduled timestamp.");
Logging::debug(floatval($endProfile) - floatval($startProfile)); Logging::debug(floatval($endProfile) - floatval($startProfile));
} } catch (Exception $e) {
catch (Exception $e) {
Logging::debug($e->getMessage()); Logging::debug($e->getMessage());
throw $e; throw $e;
} }
@ -419,8 +413,8 @@ class Application_Model_Scheduler {
* @param array $scheduleItems * @param array $scheduleItems
* @param array $mediaItems * @param array $mediaItems
*/ */
public function scheduleAfter($scheduleItems, $mediaItems, $adjustSched = true) { public function scheduleAfter($scheduleItems, $mediaItems, $adjustSched = true)
{
$this->con->beginTransaction(); $this->con->beginTransaction();
$schedFiles = array(); $schedFiles = array();
@ -437,8 +431,7 @@ class Application_Model_Scheduler {
$this->con->commit(); $this->con->commit();
Application_Model_RabbitMq::PushSchedule(); Application_Model_RabbitMq::PushSchedule();
} } catch (Exception $e) {
catch (Exception $e) {
$this->con->rollback(); $this->con->rollback();
throw $e; throw $e;
} }
@ -448,8 +441,8 @@ class Application_Model_Scheduler {
* @param array $selectedItem * @param array $selectedItem
* @param array $afterItem * @param array $afterItem
*/ */
public function moveItem($selectedItems, $afterItems, $adjustSched = true) { public function moveItem($selectedItems, $afterItems, $adjustSched = true)
{
$startProfile = microtime(true); $startProfile = microtime(true);
$this->con->beginTransaction(); $this->con->beginTransaction();
@ -460,11 +453,11 @@ class Application_Model_Scheduler {
$this->validateRequest($selectedItems); $this->validateRequest($selectedItems);
$this->validateRequest($afterItems); $this->validateRequest($afterItems);
$endProfile = microtime(true); $endProfile = microtime(true);
Logging::debug("validating move request took:"); Logging::debug("validating move request took:");
Logging::debug(floatval($endProfile) - floatval($startProfile)); Logging::debug(floatval($endProfile) - floatval($startProfile));
$afterInstance = CcShowInstancesQuery::create()->findPK($afterItems[0]["instance"], $this->con); $afterInstance = CcShowInstancesQuery::create()->findPK($afterItems[0]["instance"], $this->con);
//map show instances to cc_schedule primary keys. //map show instances to cc_schedule primary keys.
$modifiedMap = array(); $modifiedMap = array();
@ -473,16 +466,16 @@ class Application_Model_Scheduler {
//prepare each of the selected items. //prepare each of the selected items.
for ($i = 0; $i < count($selectedItems); $i++) { for ($i = 0; $i < count($selectedItems); $i++) {
$selected = CcScheduleQuery::create()->findPk($selectedItems[$i]["id"], $this->con); $selected = CcScheduleQuery::create()->findPk($selectedItems[$i]["id"], $this->con);
$selectedInstance = $selected->getCcShowInstances($this->con); $selectedInstance = $selected->getCcShowInstances($this->con);
$data = $this->fileInfo; $data = $this->fileInfo;
$data["id"] = $selected->getDbFileId(); $data["id"] = $selected->getDbFileId();
$data["cliplength"] = $selected->getDbClipLength(); $data["cliplength"] = $selected->getDbClipLength();
$data["cuein"] = $selected->getDbCueIn(); $data["cuein"] = $selected->getDbCueIn();
$data["cueout"] = $selected->getDbCueOut(); $data["cueout"] = $selected->getDbCueOut();
$data["fadein"] = $selected->getDbFadeIn(); $data["fadein"] = $selected->getDbFadeIn();
$data["fadeout"] = $selected->getDbFadeOut(); $data["fadeout"] = $selected->getDbFadeOut();
$data["sched_id"] = $selected->getDbId(); $data["sched_id"] = $selected->getDbId();
$movedData[] = $data; $movedData[] = $data;
@ -492,8 +485,7 @@ class Application_Model_Scheduler {
$schedId = $selected->getDbId(); $schedId = $selected->getDbId();
if (isset($modifiedMap[$showInstanceId])) { if (isset($modifiedMap[$showInstanceId])) {
array_push($modifiedMap[$showInstanceId], $schedId); array_push($modifiedMap[$showInstanceId], $schedId);
} } else {
else {
$modifiedMap[$showInstanceId] = array($schedId); $modifiedMap[$showInstanceId] = array($schedId);
} }
} }
@ -504,8 +496,8 @@ class Application_Model_Scheduler {
$this->removeGaps($instance, $schedIds); $this->removeGaps($instance, $schedIds);
$endProfile = microtime(true); $endProfile = microtime(true);
Logging::debug("removing gaps from instance $instance:"); Logging::debug("removing gaps from instance $instance:");
Logging::debug(floatval($endProfile) - floatval($startProfile)); Logging::debug(floatval($endProfile) - floatval($startProfile));
} }
@ -513,14 +505,14 @@ class Application_Model_Scheduler {
$this->insertAfter($afterItems, $movedData, $adjustSched); $this->insertAfter($afterItems, $movedData, $adjustSched);
$endProfile = microtime(true); $endProfile = microtime(true);
Logging::debug("inserting after removing gaps."); Logging::debug("inserting after removing gaps.");
Logging::debug(floatval($endProfile) - floatval($startProfile)); Logging::debug(floatval($endProfile) - floatval($startProfile));
$afterInstanceId = $afterInstance->getDbId(); $afterInstanceId = $afterInstance->getDbId();
$modified = array_keys($modifiedMap); $modified = array_keys($modifiedMap);
//need to adjust shows we have moved items from. //need to adjust shows we have moved items from.
foreach($modified as $instanceId) { foreach ($modified as $instanceId) {
$instance = CcShowInstancesQuery::create()->findPK($instanceId, $this->con); $instance = CcShowInstancesQuery::create()->findPK($instanceId, $this->con);
$instance->updateScheduleStatus($this->con); $instance->updateScheduleStatus($this->con);
@ -530,15 +522,14 @@ class Application_Model_Scheduler {
$this->con->commit(); $this->con->commit();
Application_Model_RabbitMq::PushSchedule(); Application_Model_RabbitMq::PushSchedule();
} } catch (Exception $e) {
catch (Exception $e) {
$this->con->rollback(); $this->con->rollback();
throw $e; throw $e;
} }
} }
public function removeItems($scheduledItems, $adjustSched = true) { public function removeItems($scheduledItems, $adjustSched = true)
{
$showInstances = array(); $showInstances = array();
$this->con->beginTransaction(); $this->con->beginTransaction();
@ -564,7 +555,7 @@ class Application_Model_Scheduler {
$nEpoch = $this->epochNow; $nEpoch = $this->epochNow;
$sEpoch = $removedItem->getDbStarts('U.u'); $sEpoch = $removedItem->getDbStarts('U.u');
$length = bcsub($nEpoch , $sEpoch , 6); $length = bcsub($nEpoch , $sEpoch , 6);
$cliplength = Application_Model_Playlist::secondsToPlaylistTime($length); $cliplength = Application_Model_Playlist::secondsToPlaylistTime($length);
$cueinSec = Application_Model_Playlist::playlistTimeToSeconds($removedItem->getDbCueIn()); $cueinSec = Application_Model_Playlist::playlistTimeToSeconds($removedItem->getDbCueIn());
@ -575,8 +566,7 @@ class Application_Model_Scheduler {
->setDbClipLength($cliplength) ->setDbClipLength($cliplength)
->setDbEnds($this->nowDT) ->setDbEnds($this->nowDT)
->save($this->con); ->save($this->con);
} } else {
else {
$removedItem->delete($this->con); $removedItem->delete($this->con);
} }
} }
@ -613,8 +603,7 @@ class Application_Model_Scheduler {
$this->con->commit(); $this->con->commit();
Application_Model_RabbitMq::PushSchedule(); Application_Model_RabbitMq::PushSchedule();
} } catch (Exception $e) {
catch (Exception $e) {
$this->con->rollback(); $this->con->rollback();
throw $e; throw $e;
} }
@ -625,8 +614,8 @@ class Application_Model_Scheduler {
* *
* @param $p_id id of the show instance to cancel. * @param $p_id id of the show instance to cancel.
*/ */
public function cancelShow($p_id) { public function cancelShow($p_id)
{
$this->con->beginTransaction(); $this->con->beginTransaction();
try { try {
@ -635,28 +624,27 @@ class Application_Model_Scheduler {
if (!$instance->getDbRecord()) { if (!$instance->getDbRecord()) {
$items = CcScheduleQuery::create() $items = CcScheduleQuery::create()
->filterByDbInstanceId($p_id) ->filterByDbInstanceId($p_id)
->filterByDbEnds($this->nowDT, Criteria::GREATER_THAN) ->filterByDbEnds($this->nowDT, Criteria::GREATER_THAN)
->find($this->con); ->find($this->con);
if (count($items) > 0) { if (count($items) > 0) {
$remove = array(); $remove = array();
$ts = $this->nowDT->format('U'); $ts = $this->nowDT->format('U');
for($i = 0; $i < count($items); $i++) { for ($i = 0; $i < count($items); $i++) {
$remove[$i]["instance"] = $p_id; $remove[$i]["instance"] = $p_id;
$remove[$i]["timestamp"] = $ts; $remove[$i]["timestamp"] = $ts;
$remove[$i]["id"] = $items[$i]->getDbId(); $remove[$i]["id"] = $items[$i]->getDbId();
} }
$this->removeItems($remove, false); $this->removeItems($remove, false);
} }
} } else {
else {
$rebroadcasts = $instance->getCcShowInstancessRelatedByDbId(null, $this->con); $rebroadcasts = $instance->getCcShowInstancessRelatedByDbId(null, $this->con);
$rebroadcasts->delete($this->con); $rebroadcasts->delete($this->con);
} }
$instance->setDbEnds($this->nowDT); $instance->setDbEnds($this->nowDT);
$instance->save($this->con); $instance->save($this->con);
@ -666,10 +654,9 @@ class Application_Model_Scheduler {
if ($instance->getDbRecord()) { if ($instance->getDbRecord()) {
Application_Model_RabbitMq::SendMessageToShowRecorder("cancel_recording"); Application_Model_RabbitMq::SendMessageToShowRecorder("cancel_recording");
} }
} } catch (Exception $e) {
catch (Exception $e) { $this->con->rollback();
$this->con->rollback(); throw $e;
throw $e;
} }
} }
} }

View file

@ -1,11 +1,11 @@
<?php <?php
class Application_Model_ServiceRegister { class Application_Model_ServiceRegister
{
public static function Register($p_componentName, $p_ipAddress){ public static function Register($p_componentName, $p_ipAddress)
{
$component = CcServiceRegisterQuery::create()->findOneByDbName($p_componentName); $component = CcServiceRegisterQuery::create()->findOneByDbName($p_componentName);
if ($component == NULL){ if ($component == NULL) {
$component = new CcServiceRegister(); $component = new CcServiceRegister();
$component->setDbName($p_componentName); $component->setDbName($p_componentName);
} }
@ -14,7 +14,7 @@ class Application_Model_ServiceRegister {
// to allow access via an ipv6 address. // to allow access via an ipv6 address.
// http://[::1]:2812 does not respond. // http://[::1]:2812 does not respond.
// Bug: http://savannah.nongnu.org/bugs/?27608 // Bug: http://savannah.nongnu.org/bugs/?27608
if ($p_ipAddress == "::1"){ if ($p_ipAddress == "::1") {
$p_ipAddress = "127.0.0.1"; $p_ipAddress = "127.0.0.1";
} }

File diff suppressed because it is too large Load diff

View file

@ -3,8 +3,8 @@
require_once 'formatters/LengthFormatter.php'; require_once 'formatters/LengthFormatter.php';
require_once 'formatters/TimeFilledFormatter.php'; require_once 'formatters/TimeFilledFormatter.php';
class Application_Model_ShowBuilder { class Application_Model_ShowBuilder
{
private $timezone; private $timezone;
//in UTC timezone //in UTC timezone
@ -49,8 +49,8 @@ class Application_Model_ShowBuilder {
* @param DateTime $p_startsDT * @param DateTime $p_startsDT
* @param DateTime $p_endsDT * @param DateTime $p_endsDT
*/ */
public function __construct($p_startDT, $p_endDT, $p_opts) { public function __construct($p_startDT, $p_endDT, $p_opts)
{
$this->startDT = $p_startDT; $this->startDT = $p_startDT;
$this->endDT = $p_endDT; $this->endDT = $p_endDT;
$this->timezone = date_default_timezone_get(); $this->timezone = date_default_timezone_get();
@ -60,25 +60,25 @@ class Application_Model_ShowBuilder {
$this->currentShow = false; $this->currentShow = false;
} }
private function getUsersShows() { private function getUsersShows()
{
$shows = array(); $shows = array();
$host_shows = CcShowHostsQuery::create() $host_shows = CcShowHostsQuery::create()
->setFormatter(ModelCriteria::FORMAT_ON_DEMAND) ->setFormatter(ModelCriteria::FORMAT_ON_DEMAND)
->filterByDbHost($this->user->getId()) ->filterByDbHost($this->user->getId())
->find(); ->find();
foreach ($host_shows as $host_show) { foreach ($host_shows as $host_show) {
$shows[] = $host_show->getDbShow(); $shows[] = $host_show->getDbShow();
} }
return $shows; return $shows;
} }
//check to see if this row should be editable by the user. //check to see if this row should be editable by the user.
private function isAllowed($p_item, &$row) { private function isAllowed($p_item, &$row)
{
//cannot schedule in a recorded show. //cannot schedule in a recorded show.
if (intval($p_item["si_record"]) === 1) { if (intval($p_item["si_record"]) === 1) {
return; return;
@ -89,7 +89,8 @@ class Application_Model_ShowBuilder {
} }
} }
private function getItemColor($p_item, &$row) { private function getItemColor($p_item, &$row)
{
$defaultColor = "ffffff"; $defaultColor = "ffffff";
$defaultBackground = "3366cc"; $defaultBackground = "3366cc";
@ -107,17 +108,16 @@ class Application_Model_ShowBuilder {
} }
//information about whether a track is inside|boundary|outside a show. //information about whether a track is inside|boundary|outside a show.
private function getItemStatus($p_item, &$row) { private function getItemStatus($p_item, &$row)
{
$row["status"] = intval($p_item["playout_status"]); $row["status"] = intval($p_item["playout_status"]);
} }
private function getRowTimestamp($p_item, &$row) { private function getRowTimestamp($p_item, &$row)
{
if (is_null($p_item["si_last_scheduled"])) { if (is_null($p_item["si_last_scheduled"])) {
$ts = 0; $ts = 0;
} } else {
else {
$dt = new DateTime($p_item["si_last_scheduled"], new DateTimeZone("UTC")); $dt = new DateTime($p_item["si_last_scheduled"], new DateTimeZone("UTC"));
$ts = intval($dt->format("U")); $ts = intval($dt->format("U"));
} }
@ -130,41 +130,38 @@ class Application_Model_ShowBuilder {
* 1 = current * 1 = current
* 2 = future * 2 = future
*/ */
private function getScheduledStatus($p_epochItemStart, $p_epochItemEnd, &$row) { private function getScheduledStatus($p_epochItemStart, $p_epochItemEnd, &$row)
{
if ($row["footer"] === true && $this->epoch_now > $p_epochItemStart && $this->epoch_now > $p_epochItemEnd) { if ($row["footer"] === true && $this->epoch_now > $p_epochItemStart && $this->epoch_now > $p_epochItemEnd) {
$row["scheduled"] = 0; $row["scheduled"] = 0;
} } elseif ($row["footer"] === true && $this->epoch_now < $p_epochItemEnd) {
else if ($row["footer"] === true && $this->epoch_now < $p_epochItemEnd) { $row["scheduled"] = 2;
$row["scheduled"] = 2; } elseif ($row["header"] === true && $this->epoch_now >= $p_epochItemStart) {
}
else if ($row["header"] === true && $this->epoch_now >= $p_epochItemStart) {
$row["scheduled"] = 0; $row["scheduled"] = 0;
} } elseif ($row["header"] === true && $this->epoch_now < $p_epochItemEnd) {
else if ($row["header"] === true && $this->epoch_now < $p_epochItemEnd) { $row["scheduled"] = 2;
$row["scheduled"] = 2;
} }
//item is in the past. //item is in the past.
else if ($this->epoch_now > $p_epochItemEnd) { else if ($this->epoch_now > $p_epochItemEnd) {
$row["scheduled"] = 0; $row["scheduled"] = 0;
}
//item is the currently scheduled item.
else if ($this->epoch_now >= $p_epochItemStart && $this->epoch_now < $p_epochItemEnd) {
$row["scheduled"] = 1;
//how many seconds the view should wait to redraw itself.
$row["refresh"] = $p_epochItemEnd - $this->epoch_now;
} }
//item is in the future. //item is the currently scheduled item.
else if ($this->epoch_now < $p_epochItemStart) { else if ($this->epoch_now >= $p_epochItemStart && $this->epoch_now < $p_epochItemEnd) {
$row["scheduled"] = 2; $row["scheduled"] = 1;
} //how many seconds the view should wait to redraw itself.
$row["refresh"] = $p_epochItemEnd - $this->epoch_now;
}
//item is in the future.
else if ($this->epoch_now < $p_epochItemStart) {
$row["scheduled"] = 2;
}
} }
private function makeHeaderRow($p_item) { private function makeHeaderRow($p_item)
{
$row = $this->defaultRowArray; $row = $this->defaultRowArray;
$this->isAllowed($p_item, $row); $this->isAllowed($p_item, $row);
$this->getRowTimestamp($p_item, $row); $this->getRowTimestamp($p_item, $row);
@ -177,8 +174,8 @@ class Application_Model_ShowBuilder {
$showEndDT->setTimezone(new DateTimeZone($this->timezone)); $showEndDT->setTimezone(new DateTimeZone($this->timezone));
$endsEpoch = floatval($showEndDT->format("U.u")); $endsEpoch = floatval($showEndDT->format("U.u"));
//is a rebroadcast show //is a rebroadcast show
if (intval($p_item["si_rebroadcast"]) === 1) { if (intval($p_item["si_rebroadcast"]) === 1) {
$row["rebroadcast"] = true; $row["rebroadcast"] = true;
$parentInstance = CcShowInstancesQuery::create()->findPk($p_item["parent_show"]); $parentInstance = CcShowInstancesQuery::create()->findPk($p_item["parent_show"]);
@ -187,15 +184,14 @@ class Application_Model_ShowBuilder {
$dt->setTimezone(new DateTimeZone($this->timezone)); $dt->setTimezone(new DateTimeZone($this->timezone));
$time = $dt->format("Y-m-d H:i"); $time = $dt->format("Y-m-d H:i");
$row["rebroadcast_title"] = "Rebroadcast of {$name} from {$time}"; $row["rebroadcast_title"] = "Rebroadcast of {$name} from {$time}";
} } elseif (intval($p_item["si_record"]) === 1) {
else if (intval($p_item["si_record"]) === 1) {
$row["record"] = true; $row["record"] = true;
if (Application_Model_Preference::GetUploadToSoundcloudOption()) { if (Application_Model_Preference::GetUploadToSoundcloudOption()) {
$file = Application_Model_StoredFile::Recall($p_item["si_file_id"]); $file = Application_Model_StoredFile::Recall($p_item["si_file_id"]);
if (isset($file)) { if (isset($file)) {
$sid = $file->getSoundCloudId(); $sid = $file->getSoundCloudId();
$row["soundcloud_id"] = $sid; $row["soundcloud_id"] = $sid;
} }
} }
@ -204,8 +200,7 @@ class Application_Model_ShowBuilder {
if ($startsEpoch < $this->epoch_now && $endsEpoch > $this->epoch_now) { if ($startsEpoch < $this->epoch_now && $endsEpoch > $this->epoch_now) {
$row["currentShow"] = true; $row["currentShow"] = true;
$this->currentShow = true; $this->currentShow = true;
} } else {
else {
$this->currentShow = false; $this->currentShow = false;
} }
@ -229,7 +224,8 @@ class Application_Model_ShowBuilder {
return $row; return $row;
} }
private function makeScheduledItemRow($p_item) { private function makeScheduledItemRow($p_item)
{
$row = $this->defaultRowArray; $row = $this->defaultRowArray;
if (isset($p_item["sched_starts"])) { if (isset($p_item["sched_starts"])) {
@ -279,34 +275,33 @@ class Application_Model_ShowBuilder {
$showStartDT = new DateTime($p_item["si_starts"], new DateTimeZone("UTC")); $showStartDT = new DateTime($p_item["si_starts"], new DateTimeZone("UTC"));
$showEndDT = new DateTime($p_item["si_ends"], new DateTimeZone("UTC")); $showEndDT = new DateTime($p_item["si_ends"], new DateTimeZone("UTC"));
$startsEpoch = floatval($showStartDT->format("U.u")); $startsEpoch = floatval($showStartDT->format("U.u"));
$endsEpoch = floatval($showEndDT->format("U.u")); $endsEpoch = floatval($showEndDT->format("U.u"));
$this->getScheduledStatus($startsEpoch, $endsEpoch, $row); $this->getScheduledStatus($startsEpoch, $endsEpoch, $row);
} } else {
else {
$row["empty"] = true; $row["empty"] = true;
$row["id"] = 0 ; $row["id"] = 0 ;
$row["instance"] = intval($p_item["si_id"]); $row["instance"] = intval($p_item["si_id"]);
} }
if (intval($p_item["si_rebroadcast"]) === 1) { if (intval($p_item["si_rebroadcast"]) === 1) {
$row["rebroadcast"] = true; $row["rebroadcast"] = true;
} }
if ($this->currentShow === true) { if ($this->currentShow === true) {
$row["currentShow"] = true; $row["currentShow"] = true;
} }
$this->getItemColor($p_item, $row); $this->getItemColor($p_item, $row);
$this->getRowTimestamp($p_item, $row); $this->getRowTimestamp($p_item, $row);
$this->isAllowed($p_item, $row); $this->isAllowed($p_item, $row);
return $row; return $row;
} }
private function makeFooterRow($p_item) { private function makeFooterRow($p_item)
{
$row = $this->defaultRowArray; $row = $this->defaultRowArray;
$row["footer"] = true; $row["footer"] = true;
$row["instance"] = intval($p_item["si_id"]); $row["instance"] = intval($p_item["si_id"]);
@ -321,21 +316,21 @@ class Application_Model_ShowBuilder {
$timeFilled = new TimeFilledFormatter($runtime); $timeFilled = new TimeFilledFormatter($runtime);
$row["fRuntime"] = $timeFilled->format(); $row["fRuntime"] = $timeFilled->format();
$showStartDT = new DateTime($p_item["si_starts"], new DateTimeZone("UTC")); $showStartDT = new DateTime($p_item["si_starts"], new DateTimeZone("UTC"));
$showStartDT->setTimezone(new DateTimeZone($this->timezone)); $showStartDT->setTimezone(new DateTimeZone($this->timezone));
$startsEpoch = floatval($showStartDT->format("U.u")); $startsEpoch = floatval($showStartDT->format("U.u"));
$showEndDT = new DateTime($p_item["si_ends"], new DateTimeZone("UTC")); $showEndDT = new DateTime($p_item["si_ends"], new DateTimeZone("UTC"));
$showEndDT->setTimezone(new DateTimeZone($this->timezone)); $showEndDT->setTimezone(new DateTimeZone($this->timezone));
$endsEpoch = floatval($showEndDT->format("U.u")); $endsEpoch = floatval($showEndDT->format("U.u"));
$row["refresh"] = floatval($showEndDT->format("U.u")) - $this->epoch_now; $row["refresh"] = floatval($showEndDT->format("U.u")) - $this->epoch_now;
if ($this->currentShow === true) { if ($this->currentShow === true) {
$row["currentShow"] = true; $row["currentShow"] = true;
} }
$this->getScheduledStatus($startsEpoch, $endsEpoch, $row); $this->getScheduledStatus($startsEpoch, $endsEpoch, $row);
$this->isAllowed($p_item, $row); $this->isAllowed($p_item, $row);
return $row; return $row;
} }
@ -346,14 +341,14 @@ class Application_Model_ShowBuilder {
* @return boolean whether the schedule in the show builder's range has been updated. * @return boolean whether the schedule in the show builder's range has been updated.
* *
*/ */
public function hasBeenUpdatedSince($timestamp, $instances) { public function hasBeenUpdatedSince($timestamp, $instances)
{
$outdated = false; $outdated = false;
$shows = Application_Model_Show::getShows($this->startDT, $this->endDT); $shows = Application_Model_Show::getShows($this->startDT, $this->endDT);
if ($this->opts["showFilter"] !== 0) { if ($this->opts["showFilter"] !== 0) {
$include[] = $this->opts["showFilter"]; $include[] = $this->opts["showFilter"];
} } elseif ($this->opts["myShows"] === 1) {
else if ($this->opts["myShows"] === 1) {
$include = $this->getUsersShows(); $include = $this->getUsersShows();
} }
@ -368,17 +363,16 @@ class Application_Model_ShowBuilder {
if (isset($show["last_scheduled"])) { if (isset($show["last_scheduled"])) {
$dt = new DateTime($show["last_scheduled"], new DateTimeZone("UTC")); $dt = new DateTime($show["last_scheduled"], new DateTimeZone("UTC"));
} } else {
else {
$dt = new DateTime($show["created"], new DateTimeZone("UTC")); $dt = new DateTime($show["created"], new DateTimeZone("UTC"));
} }
//check if any of the shows have a more recent timestamp. //check if any of the shows have a more recent timestamp.
$showTimeStamp = intval($dt->format("U")); $showTimeStamp = intval($dt->format("U"));
if ($timestamp < $showTimeStamp) { if ($timestamp < $showTimeStamp) {
Logging::debug("timestamp is {$timestamp} show timestamp is {$showTimeStamp}"); Logging::debug("timestamp is {$timestamp} show timestamp is {$showTimeStamp}");
$outdated = true; $outdated = true;
break; break;
} }
} }
} }
@ -392,8 +386,8 @@ class Application_Model_ShowBuilder {
return $outdated; return $outdated;
} }
public function GetItems() { public function GetItems()
{
$current_id = -1; $current_id = -1;
$display_items = array(); $display_items = array();
@ -401,8 +395,7 @@ class Application_Model_ShowBuilder {
if ($this->opts["myShows"] === 1) { if ($this->opts["myShows"] === 1) {
$shows = $this->getUsersShows(); $shows = $this->getUsersShows();
} } elseif ($this->opts["showFilter"] !== 0) {
else if ($this->opts["showFilter"] !== 0) {
$shows[] = $this->opts["showFilter"]; $shows[] = $this->opts["showFilter"];
} }
@ -439,9 +432,9 @@ class Application_Model_ShowBuilder {
if (isset($row)) { if (isset($row)) {
$display_items[] = $row; $display_items[] = $row;
} }
if ($current_id !== -1 && !in_array($current_id, $this->showInstances)) { if ($current_id !== -1 && !in_array($current_id, $this->showInstances)) {
$this->showInstances[] = $current_id; $this->showInstances[] = $current_id;
} }
} }

View file

@ -2,8 +2,8 @@
require_once 'formatters/LengthFormatter.php'; require_once 'formatters/LengthFormatter.php';
class Application_Model_ShowInstance { class Application_Model_ShowInstance
{
private $_instanceId; private $_instanceId;
private $_showInstance; private $_showInstance;
@ -12,7 +12,7 @@ class Application_Model_ShowInstance {
$this->_instanceId = $instanceId; $this->_instanceId = $instanceId;
$this->_showInstance = CcShowInstancesQuery::create()->findPK($instanceId); $this->_showInstance = CcShowInstancesQuery::create()->findPK($instanceId);
if (is_null($this->_showInstance)){ if (is_null($this->_showInstance)) {
throw new Exception(); throw new Exception();
} }
} }
@ -27,11 +27,13 @@ class Application_Model_ShowInstance {
return $this->_instanceId; return $this->_instanceId;
} }
public function getShow(){ public function getShow()
{
return new Application_Model_Show($this->getShowId()); return new Application_Model_Show($this->getShowId());
} }
public function deleteRebroadcasts(){ public function deleteRebroadcasts()
{
$con = Propel::getConnection(); $con = Propel::getConnection();
$timestamp = gmdate("Y-m-d H:i:s"); $timestamp = gmdate("Y-m-d H:i:s");
@ -62,12 +64,14 @@ class Application_Model_ShowInstance {
public function getName() public function getName()
{ {
$show = CcShowQuery::create()->findPK($this->getShowId()); $show = CcShowQuery::create()->findPK($this->getShowId());
return $show->getDbName(); return $show->getDbName();
} }
public function getGenre() public function getGenre()
{ {
$show = CcShowQuery::create()->findPK($this->getShowId()); $show = CcShowQuery::create()->findPK($this->getShowId());
return $show->getDbGenre(); return $show->getDbGenre();
} }
@ -93,6 +97,7 @@ class Application_Model_ShowInstance {
{ {
$showStart = $this->getShowInstanceStart(); $showStart = $this->getShowInstanceStart();
$showStartExplode = explode(" ", $showStart); $showStartExplode = explode(" ", $showStart);
return $showStartExplode[0]; return $showStartExplode[0];
} }
@ -113,6 +118,7 @@ class Application_Model_ShowInstance {
public function getSoundCloudFileId() public function getSoundCloudFileId()
{ {
$file = Application_Model_StoredFile::Recall($this->_showInstance->getDbRecordedFile()); $file = Application_Model_StoredFile::Recall($this->_showInstance->getDbRecordedFile());
return $file->getSoundCloudId(); return $file->getSoundCloudId();
} }
@ -174,7 +180,7 @@ class Application_Model_ShowInstance {
$diff = $showStartsEpoch - $scheduleStartsEpoch; $diff = $showStartsEpoch - $scheduleStartsEpoch;
if ($diff != 0){ if ($diff != 0) {
$sql = "UPDATE cc_schedule" $sql = "UPDATE cc_schedule"
." SET starts = starts + INTERVAL '$diff' second," ." SET starts = starts + INTERVAL '$diff' second,"
." ends = ends + INTERVAL '$diff' second" ." ends = ends + INTERVAL '$diff' second"
@ -199,8 +205,8 @@ class Application_Model_ShowInstance {
* @return $newDateTime * @return $newDateTime
* php DateTime, $dateTime with the added time deltas. * php DateTime, $dateTime with the added time deltas.
*/ */
private static function addDeltas($dateTime, $deltaDay, $deltaMin) { private static function addDeltas($dateTime, $deltaDay, $deltaMin)
{
$newDateTime = clone $dateTime; $newDateTime = clone $dateTime;
$days = abs($deltaDay); $days = abs($deltaDay);
@ -211,15 +217,13 @@ class Application_Model_ShowInstance {
if ($deltaDay > 0) { if ($deltaDay > 0) {
$newDateTime->add($dayInterval); $newDateTime->add($dayInterval);
} } elseif ($deltaDay < 0) {
else if ($deltaDay < 0){
$newDateTime->sub($dayInterval); $newDateTime->sub($dayInterval);
} }
if ($deltaMin > 0) { if ($deltaMin > 0) {
$newDateTime->add($minInterval); $newDateTime->add($minInterval);
} } elseif ($deltaMin < 0) {
else if ($deltaMin < 0) {
$newDateTime->sub($minInterval); $newDateTime->sub($minInterval);
} }
@ -228,7 +232,7 @@ class Application_Model_ShowInstance {
public function moveShow($deltaDay, $deltaMin) public function moveShow($deltaDay, $deltaMin)
{ {
if ($this->getShow()->isRepeating()){ if ($this->getShow()->isRepeating()) {
return "Can't drag and drop repeating shows"; return "Can't drag and drop repeating shows";
} }
@ -286,6 +290,7 @@ class Application_Model_ShowInstance {
//recorded show doesn't exist. //recorded show doesn't exist.
catch (Exception $e) { catch (Exception $e) {
$this->_showInstance->delete(); $this->_showInstance->delete();
return "Show was deleted because recorded show does not exist!"; return "Show was deleted because recorded show does not exist!";
} }
@ -302,7 +307,7 @@ class Application_Model_ShowInstance {
$this->correctScheduleStartTimes(); $this->correctScheduleStartTimes();
$show = new Application_Model_Show($this->getShowId()); $show = new Application_Model_Show($this->getShowId());
if(!$show->isRepeating() && is_null($this->isRebroadcast())){ if (!$show->isRepeating() && is_null($this->isRebroadcast())) {
$show->setShowFirstShow($newStartsDateTime); $show->setShowFirstShow($newStartsDateTime);
$show->setShowLastShow($newEndsDateTime); $show->setShowLastShow($newEndsDateTime);
} }
@ -317,7 +322,7 @@ class Application_Model_ShowInstance {
*/ */
public function resizeShow($deltaDay, $deltaMin) public function resizeShow($deltaDay, $deltaMin)
{ {
$con = Propel::getConnection(); $con = Propel::getConnection();
$hours = $deltaMin/60; $hours = $deltaMin/60;
if($hours > 0) if($hours > 0)
@ -331,7 +336,7 @@ class Application_Model_ShowInstance {
$starts = $this->getShowInstanceStart(); $starts = $this->getShowInstanceStart();
$ends = $this->getShowInstanceEnd(); $ends = $this->getShowInstanceEnd();
if(strtotime($today_timestamp) > strtotime($starts)) { if (strtotime($today_timestamp) > strtotime($starts)) {
return "can't resize a past show"; return "can't resize a past show";
} }
@ -346,14 +351,14 @@ class Application_Model_ShowInstance {
$overlap = Application_Model_Show::getShows($utcStartDateTime, $utcEndDateTime); $overlap = Application_Model_Show::getShows($utcStartDateTime, $utcEndDateTime);
if(count($overlap) > 0) { if (count($overlap) > 0) {
return "Should not overlap shows"; return "Should not overlap shows";
} }
} }
//with overbooking no longer need to check already scheduled content still fits. //with overbooking no longer need to check already scheduled content still fits.
//must update length of all rebroadcast instances. //must update length of all rebroadcast instances.
if($this->isRecorded()) { if ($this->isRecorded()) {
$sql = "UPDATE cc_show_instances SET ends = (ends + interval '{$deltaDay} days' + interval '{$hours}:{$mins}') $sql = "UPDATE cc_show_instances SET ends = (ends + interval '{$deltaDay} days' + interval '{$hours}:{$mins}')
WHERE rebroadcast = 1 AND instance_id = {$this->_instanceId}"; WHERE rebroadcast = 1 AND instance_id = {$this->_instanceId}";
$con->exec($sql); $con->exec($sql);
@ -453,7 +458,7 @@ class Application_Model_ShowInstance {
->filterByDbRebroadcast(0) ->filterByDbRebroadcast(0)
->find(); ->find();
if (is_null($showInstances)){ if (is_null($showInstances)) {
return true; return true;
} }
//only 1 show instance left of the show, make it non repeating. //only 1 show instance left of the show, make it non repeating.
@ -532,17 +537,15 @@ class Application_Model_ShowInstance {
->delete(); ->delete();
if ($this->checkToDeleteShow($showId)){ if ($this->checkToDeleteShow($showId)) {
CcShowQuery::create() CcShowQuery::create()
->filterByDbId($showId) ->filterByDbId($showId)
->delete(); ->delete();
} }
} } else {
else {
if ($this->isRebroadcast()) { if ($this->isRebroadcast()) {
$this->_showInstance->delete(); $this->_showInstance->delete();
} } else {
else {
$show->delete(); $show->delete();
} }
} }
@ -567,8 +570,7 @@ class Application_Model_ShowInstance {
try { try {
$rebroad = new Application_Model_ShowInstance($rebroadcast->getDbId()); $rebroad = new Application_Model_ShowInstance($rebroadcast->getDbId());
$rebroad->addFileToShow($file_id, false); $rebroad->addFileToShow($file_id, false);
} } catch (Exception $e) {
catch (Exception $e) {
Logging::log("{$e->getFile()}"); Logging::log("{$e->getFile()}");
Logging::log("{$e->getLine()}"); Logging::log("{$e->getLine()}");
Logging::log("{$e->getMessage()}"); Logging::log("{$e->getMessage()}");
@ -586,8 +588,7 @@ class Application_Model_ShowInstance {
$time_arr[1] = "." . $time_arr[1]; $time_arr[1] = "." . $time_arr[1];
$milliseconds = number_format(round($time_arr[1], 2), 2); $milliseconds = number_format(round($time_arr[1], 2), 2);
$time = $time_arr[0] . substr($milliseconds, 1); $time = $time_arr[0] . substr($milliseconds, 1);
} } else {
else {
$time = $time_arr[0] . ".00"; $time = $time_arr[0] . ".00";
} }
} else { } else {
@ -601,6 +602,7 @@ class Application_Model_ShowInstance {
public function getTimeScheduledSecs() public function getTimeScheduledSecs()
{ {
$time_filled = $this->getTimeScheduled(); $time_filled = $this->getTimeScheduled();
return Application_Model_Playlist::playlistTimeToSeconds($time_filled); return Application_Model_Playlist::playlistTimeToSeconds($time_filled);
} }
@ -608,6 +610,7 @@ class Application_Model_ShowInstance {
{ {
$ends = $this->getShowInstanceEnd(null); $ends = $this->getShowInstanceEnd(null);
$starts = $this->getShowInstanceStart(null); $starts = $this->getShowInstanceStart(null);
return intval($ends->format('U')) - intval($starts->format('U')); return intval($ends->format('U')) - intval($starts->format('U'));
} }
@ -643,7 +646,7 @@ class Application_Model_ShowInstance {
public function getShowListContent() public function getShowListContent()
{ {
$con = Propel::getConnection(); $con = Propel::getConnection();
$sql = "SELECT * $sql = "SELECT *
FROM (cc_schedule AS s LEFT JOIN cc_files AS f ON f.id = s.file_id) FROM (cc_schedule AS s LEFT JOIN cc_files AS f ON f.id = s.file_id)
@ -670,7 +673,7 @@ class Application_Model_ShowInstance {
public function getLastAudioItemEnd() public function getLastAudioItemEnd()
{ {
$con = Propel::getConnection(); $con = Propel::getConnection();
$sql = "SELECT ends FROM cc_schedule " $sql = "SELECT ends FROM cc_schedule "
."WHERE instance_id = {$this->_instanceId} " ."WHERE instance_id = {$this->_instanceId} "
@ -678,14 +681,16 @@ class Application_Model_ShowInstance {
."LIMIT 1"; ."LIMIT 1";
$query = $con->query($sql)->fetchColumn(0); $query = $con->query($sql)->fetchColumn(0);
return ($query !== false) ? $query : NULL; return ($query !== false) ? $query : NULL;
} }
public function getShowEndGapTime(){ public function getShowEndGapTime()
{
$showEnd = $this->getShowInstanceEnd(); $showEnd = $this->getShowInstanceEnd();
$lastItemEnd = $this->getLastAudioItemEnd(); $lastItemEnd = $this->getLastAudioItemEnd();
if (is_null($lastItemEnd)){ if (is_null($lastItemEnd)) {
$lastItemEnd = $this->getShowInstanceStart(); $lastItemEnd = $this->getShowInstanceStart();
} }
@ -695,9 +700,10 @@ class Application_Model_ShowInstance {
return ($diff < 0) ? 0 : $diff; return ($diff < 0) ? 0 : $diff;
} }
public static function GetLastShowInstance($p_timeNow){ public static function GetLastShowInstance($p_timeNow)
{
global $CC_CONFIG; global $CC_CONFIG;
$con = Propel::getConnection(); $con = Propel::getConnection();
$sql = "SELECT si.id" $sql = "SELECT si.id"
." FROM $CC_CONFIG[showInstances] si" ." FROM $CC_CONFIG[showInstances] si"
@ -717,7 +723,7 @@ class Application_Model_ShowInstance {
public static function GetCurrentShowInstance($p_timeNow) public static function GetCurrentShowInstance($p_timeNow)
{ {
global $CC_CONFIG; global $CC_CONFIG;
$con = Propel::getConnection(); $con = Propel::getConnection();
/* Orderby si.starts descending, because in some cases /* Orderby si.starts descending, because in some cases
* we can have multiple shows overlapping each other. In * we can have multiple shows overlapping each other. In
@ -744,7 +750,7 @@ class Application_Model_ShowInstance {
public static function GetNextShowInstance($p_timeNow) public static function GetNextShowInstance($p_timeNow)
{ {
global $CC_CONFIG; global $CC_CONFIG;
$con = Propel::getConnection(); $con = Propel::getConnection();
$sql = "SELECT si.id" $sql = "SELECT si.id"
." FROM $CC_CONFIG[showInstances] si" ." FROM $CC_CONFIG[showInstances] si"
@ -767,6 +773,7 @@ class Application_Model_ShowInstance {
global $CC_CONFIG; global $CC_CONFIG;
$con = Propel::getConnection(); $con = Propel::getConnection();
$sql = "SELECT count(*) as cnt FROM $CC_CONFIG[showInstances] WHERE ends < '$day'"; $sql = "SELECT count(*) as cnt FROM $CC_CONFIG[showInstances] WHERE ends < '$day'";
return $con->query($sql)->fetchColumn(0); return $con->query($sql)->fetchColumn(0);
} }
@ -774,7 +781,7 @@ class Application_Model_ShowInstance {
public static function GetEndTimeOfNextShowWithLiveDJ($p_startTime, $p_endTime) public static function GetEndTimeOfNextShowWithLiveDJ($p_startTime, $p_endTime)
{ {
global $CC_CONFIG; global $CC_CONFIG;
$con = Propel::getConnection(); $con = Propel::getConnection();
$sql = "SELECT ends $sql = "SELECT ends
FROM cc_show_instances as si FROM cc_show_instances as si
@ -785,10 +792,11 @@ class Application_Model_ShowInstance {
return $con->query($sql)->fetchAll(); return $con->query($sql)->fetchAll();
} }
function isRepeating(){ public function isRepeating()
if ($this->getShow()->isRepeating()){ {
if ($this->getShow()->isRepeating()) {
return true; return true;
}else{ } else {
return false; return false;
} }
} }

View file

@ -1,8 +1,8 @@
<?php <?php
require_once 'soundcloud-api/Services/Soundcloud.php'; require_once 'soundcloud-api/Services/Soundcloud.php';
class Application_Model_Soundcloud { class Application_Model_Soundcloud
{
private $_soundcloud; private $_soundcloud;
public function __construct() public function __construct()
@ -24,13 +24,11 @@ class Application_Model_Soundcloud {
public function uploadTrack($filepath, $filename, $description, $tags=array(), $release=null, $genre=null) public function uploadTrack($filepath, $filename, $description, $tags=array(), $release=null, $genre=null)
{ {
if($this->getToken()) if ($this->getToken()) {
{ if (count($tags)) {
if(count($tags)) {
$tags = join(" ", $tags); $tags = join(" ", $tags);
$tags = $tags." ".Application_Model_Preference::GetSoundCloudTags(); $tags = $tags." ".Application_Model_Preference::GetSoundCloudTags();
} } else {
else {
$tags = Application_Model_Preference::GetSoundCloudTags(); $tags = Application_Model_Preference::GetSoundCloudTags();
} }
@ -46,7 +44,7 @@ class Application_Model_Soundcloud {
); );
if(isset($release)) { if (isset($release)) {
$release = str_replace(" ", "-", $release); $release = str_replace(" ", "-", $release);
$release = str_replace(":", "-", $release); $release = str_replace(":", "-", $release);
@ -60,8 +58,7 @@ class Application_Model_Soundcloud {
if (isset($genre) && $genre != "") { if (isset($genre) && $genre != "") {
$track_data['track[genre]'] = $genre; $track_data['track[genre]'] = $genre;
} } else {
else {
$default_genre = Application_Model_Preference::GetSoundCloudGenre(); $default_genre = Application_Model_Preference::GetSoundCloudGenre();
if ($default_genre != "") { if ($default_genre != "") {
$track_data['track[genre]'] = $default_genre; $track_data['track[genre]'] = $default_genre;

View file

@ -13,8 +13,8 @@ require_once 'formatters/BitrateFormatter.php';
* @license http://www.gnu.org/licenses/gpl.txt * @license http://www.gnu.org/licenses/gpl.txt
* @see MetaData * @see MetaData
*/ */
class Application_Model_StoredFile { class Application_Model_StoredFile
{
/** /**
* @holds propel database object * @holds propel database object
*/ */
@ -60,7 +60,8 @@ class Application_Model_StoredFile {
return $this->_file->getDbId(); return $this->_file->getDbId();
} }
public function getGunId() { public function getGunId()
{
return $this->_file->getDbGunid(); return $this->_file->getDbGunid();
} }
@ -69,7 +70,8 @@ class Application_Model_StoredFile {
return $this->_file->getDbFtype(); return $this->_file->getDbFtype();
} }
public function getPropelOrm(){ public function getPropelOrm()
{
return $this->_file; return $this->_file;
} }
@ -88,11 +90,10 @@ class Application_Model_StoredFile {
{ {
if (is_null($p_md)) { if (is_null($p_md)) {
$this->setDbColMetadata(); $this->setDbColMetadata();
} } else {
else {
$dbMd = array(); $dbMd = array();
if (isset($p_md["MDATA_KEY_YEAR"])){ if (isset($p_md["MDATA_KEY_YEAR"])) {
// We need to make sure to clean this value before inserting into database. // We need to make sure to clean this value before inserting into database.
// If value is outside of range [-2^31, 2^31-1] then postgresl will throw error // If value is outside of range [-2^31, 2^31-1] then postgresl will throw error
// when trying to retrieve this value. We could make sure number is within these bounds, // when trying to retrieve this value. We could make sure number is within these bounds,
@ -103,17 +104,17 @@ class Application_Model_StoredFile {
$year = $p_md["MDATA_KEY_YEAR"]; $year = $p_md["MDATA_KEY_YEAR"];
if (strlen($year) > 4){ if (strlen($year) > 4) {
$year = substr($year, 0, 4); $year = substr($year, 0, 4);
} }
if (!is_numeric($year)){ if (!is_numeric($year)) {
$year = 0; $year = 0;
} }
$p_md["MDATA_KEY_YEAR"] = $year; $p_md["MDATA_KEY_YEAR"] = $year;
} }
foreach ($p_md as $mdConst => $mdValue) { foreach ($p_md as $mdConst => $mdValue) {
if (defined($mdConst)){ if (defined($mdConst)) {
$dbMd[constant($mdConst)] = $mdValue; $dbMd[constant($mdConst)] = $mdValue;
} }
} }
@ -137,11 +138,10 @@ class Application_Model_StoredFile {
$method = "set$propelColumn"; $method = "set$propelColumn";
$this->_file->$method(null); $this->_file->$method(null);
} }
} } else {
else {
foreach ($p_md as $dbColumn => $mdValue) { foreach ($p_md as $dbColumn => $mdValue) {
//don't blank out name, defaults to original filename on first insertion to database. //don't blank out name, defaults to original filename on first insertion to database.
if($dbColumn == "track_title" && (is_null($mdValue) || $mdValue == "")) { if ($dbColumn == "track_title" && (is_null($mdValue) || $mdValue == "")) {
continue; continue;
} }
if (isset($this->_dbMD[$dbColumn])) { if (isset($this->_dbMD[$dbColumn])) {
@ -183,7 +183,7 @@ class Application_Model_StoredFile {
public function setDbColMetadataValue($p_category, $p_value) public function setDbColMetadataValue($p_category, $p_value)
{ {
//don't blank out name, defaults to original filename on first insertion to database. //don't blank out name, defaults to original filename on first insertion to database.
if($p_category == "track_title" && (is_null($p_value) || $p_value == "")) { if ($p_category == "track_title" && (is_null($p_value) || $p_value == "")) {
return; return;
} }
if (isset($this->_dbMD[$p_category])) { if (isset($this->_dbMD[$p_category])) {
@ -197,7 +197,7 @@ class Application_Model_StoredFile {
/** /**
* Get one metadata value. * Get one metadata value.
* *
* @param string $p_category (MDATA_KEY_URL) * @param string $p_category (MDATA_KEY_URL)
* @return string * @return string
*/ */
public function getMetadataValue($p_category) public function getMetadataValue($p_category)
@ -210,13 +210,14 @@ class Application_Model_StoredFile {
/** /**
* Get one metadata value. * Get one metadata value.
* *
* @param string $p_category (url) * @param string $p_category (url)
* @return string * @return string
*/ */
public function getDbColMetadataValue($p_category) public function getDbColMetadataValue($p_category)
{ {
$propelColumn = $this->_dbMD[$p_category]; $propelColumn = $this->_dbMD[$p_category];
$method = "get$propelColumn"; $method = "get$propelColumn";
return $this->_file->$method(); return $this->_file->$method();
} }
@ -290,6 +291,7 @@ class Application_Model_StoredFile {
$res = $con->exec($sql); $res = $con->exec($sql);
$this->state = $p_state; $this->state = $p_state;
$this->editedby = $p_editedby; $this->editedby = $p_editedby;
return TRUE; return TRUE;
} }
@ -297,7 +299,8 @@ class Application_Model_StoredFile {
* Returns an array of playlist objects that this file is a part of. * Returns an array of playlist objects that this file is a part of.
* @return array * @return array
*/ */
public function getPlaylists() { public function getPlaylists()
{
global $CC_CONFIG; global $CC_CONFIG;
$con = Propel::getConnection(); $con = Propel::getConnection();
$sql = "SELECT playlist_id " $sql = "SELECT playlist_id "
@ -310,6 +313,7 @@ class Application_Model_StoredFile {
$playlists[] = Application_Model_Playlist::Recall($id); $playlists[] = Application_Model_Playlist::Recall($id);
} }
} }
return $playlists; return $playlists;
} }
@ -336,7 +340,7 @@ class Application_Model_StoredFile {
Application_Model_RabbitMq::SendMessageToMediaMonitor("file_delete", $data); Application_Model_RabbitMq::SendMessageToMediaMonitor("file_delete", $data);
} }
if ($deleteFromPlaylist){ if ($deleteFromPlaylist) {
Application_Model_Playlist::DeleteFileFromAllPlaylists($this->getId()); Application_Model_Playlist::DeleteFileFromAllPlaylists($this->getId());
} }
// set file_exists falg to false // set file_exists falg to false
@ -355,7 +359,7 @@ class Application_Model_StoredFile {
{ {
$filepath = $this->getFilePath(); $filepath = $this->getFilePath();
if ($deleteFromPlaylist){ if ($deleteFromPlaylist) {
Application_Model_Playlist::DeleteFileFromAllPlaylists($this->getId()); Application_Model_Playlist::DeleteFileFromAllPlaylists($this->getId());
} }
// set file_exists falg to false // set file_exists falg to false
@ -375,8 +379,7 @@ class Application_Model_StoredFile {
if ($mime == "audio/vorbis" || $mime == "application/ogg") { if ($mime == "audio/vorbis" || $mime == "application/ogg") {
return "ogg"; return "ogg";
} } elseif ($mime == "audio/mp3" || $mime == "audio/mpeg") {
else if ($mime == "audio/mp3" || $mime == "audio/mpeg") {
return "mp3"; return "mp3";
} }
} }
@ -432,16 +435,17 @@ class Application_Model_StoredFile {
* is specified in the airtime.conf config file. If either of these is * is specified in the airtime.conf config file. If either of these is
* not specified, then use values provided by the $_SERVER global variable. * not specified, then use values provided by the $_SERVER global variable.
*/ */
public function getFileUrlUsingConfigAddress(){ public function getFileUrlUsingConfigAddress()
{
global $CC_CONFIG; global $CC_CONFIG;
if (isset($CC_CONFIG['baseUrl'])){ if (isset($CC_CONFIG['baseUrl'])) {
$serverName = $CC_CONFIG['baseUrl']; $serverName = $CC_CONFIG['baseUrl'];
} else { } else {
$serverName = $_SERVER['SERVER_NAME']; $serverName = $_SERVER['SERVER_NAME'];
} }
if (isset($CC_CONFIG['basePort'])){ if (isset($CC_CONFIG['basePort'])) {
$serverPort = $CC_CONFIG['basePort']; $serverPort = $CC_CONFIG['basePort'];
} else { } else {
$serverPort = $_SERVER['SERVER_PORT']; $serverPort = $_SERVER['SERVER_PORT'];
@ -450,8 +454,10 @@ class Application_Model_StoredFile {
return $this->constructGetFileUrl($serverName, $serverPort); return $this->constructGetFileUrl($serverName, $serverPort);
} }
private function constructGetFileUrl($p_serverName, $p_serverPort){ private function constructGetFileUrl($p_serverName, $p_serverPort)
{
Logging::log("getting media! - 2"); Logging::log("getting media! - 2");
return "http://$p_serverName:$p_serverPort/api/get-media/file/".$this->getGunId().".".$this->getFileExtension(); return "http://$p_serverName:$p_serverPort/api/get-media/file/".$this->getGunId().".".$this->getFileExtension();
} }
@ -462,6 +468,7 @@ Logging::log("getting media! - 2");
public function getRelativeFileUrl($baseUrl) public function getRelativeFileUrl($baseUrl)
{ {
Logging::log("getting media!"); Logging::log("getting media!");
return $baseUrl."/api/get-media/file/".$this->getGunId().".".$this->getFileExtension(); return $baseUrl."/api/get-media/file/".$this->getGunId().".".$this->getFileExtension();
} }
@ -475,19 +482,18 @@ Logging::log("getting media! - 2");
$storedFile = new Application_Model_StoredFile(); $storedFile = new Application_Model_StoredFile();
$storedFile->_file = $file; $storedFile->_file = $file;
if(isset($md['MDATA_KEY_FILEPATH'])) { if (isset($md['MDATA_KEY_FILEPATH'])) {
// removed "//" in the path. Always use '/' for path separator // removed "//" in the path. Always use '/' for path separator
$filepath = str_replace("//", "/", $md['MDATA_KEY_FILEPATH']); $filepath = str_replace("//", "/", $md['MDATA_KEY_FILEPATH']);
$res = $storedFile->setFilePath($filepath); $res = $storedFile->setFilePath($filepath);
if ($res === -1) { if ($res === -1) {
return null; return null;
} }
} } else {
else {
return null; return null;
} }
if(isset($md)) { if (isset($md)) {
$storedFile->setMetadata($md); $storedFile->setMetadata($md);
} }
@ -514,25 +520,22 @@ Logging::log("getting media! - 2");
{ {
if (isset($p_id)) { if (isset($p_id)) {
$file = CcFilesQuery::create()->findPK(intval($p_id)); $file = CcFilesQuery::create()->findPK(intval($p_id));
} } elseif (isset($p_gunid)) {
else if (isset($p_gunid)) {
$file = CcFilesQuery::create() $file = CcFilesQuery::create()
->filterByDbGunid($p_gunid) ->filterByDbGunid($p_gunid)
->findOne(); ->findOne();
} } elseif (isset($p_md5sum)) {
else if (isset($p_md5sum)) { if ($exist) {
if($exist){
$file = CcFilesQuery::create() $file = CcFilesQuery::create()
->filterByDbMd5($p_md5sum) ->filterByDbMd5($p_md5sum)
->filterByDbFileExists(true) ->filterByDbFileExists(true)
->findOne(); ->findOne();
}else{ } else {
$file = CcFilesQuery::create() $file = CcFilesQuery::create()
->filterByDbMd5($p_md5sum) ->filterByDbMd5($p_md5sum)
->findOne(); ->findOne();
} }
} } elseif (isset($p_filepath)) {
else if (isset($p_filepath)) {
$path_info = Application_Model_MusicDir::splitFilePath($p_filepath); $path_info = Application_Model_MusicDir::splitFilePath($p_filepath);
if (is_null($path_info)) { if (is_null($path_info)) {
@ -544,8 +547,7 @@ Logging::log("getting media! - 2");
->filterByDbDirectory($music_dir->getId()) ->filterByDbDirectory($music_dir->getId())
->filterByDbFilepath($path_info[1]) ->filterByDbFilepath($path_info[1])
->findOne(); ->findOne();
} } else {
else {
return null; return null;
} }
@ -554,14 +556,15 @@ Logging::log("getting media! - 2");
$storedFile->_file = $file; $storedFile->_file = $file;
return $storedFile; return $storedFile;
} } else {
else {
return null; return null;
} }
} }
public function getName(){ public function getName()
{
$info = pathinfo($this->getFilePath()); $info = pathinfo($this->getFilePath());
return $info['filename']; return $info['filename'];
} }
@ -582,7 +585,7 @@ Logging::log("getting media! - 2");
/** /**
* Fetch the Application_Model_StoredFile by looking up the MD5 value. * Fetch the Application_Model_StoredFile by looking up the MD5 value.
* *
* @param string $p_md5sum * @param string $p_md5sum
* @return Application_Model_StoredFile|NULL * @return Application_Model_StoredFile|NULL
*/ */
public static function RecallByMd5($p_md5sum, $exist=false) public static function RecallByMd5($p_md5sum, $exist=false)
@ -593,7 +596,7 @@ Logging::log("getting media! - 2");
/** /**
* Fetch the Application_Model_StoredFile by looking up its filepath. * Fetch the Application_Model_StoredFile by looking up its filepath.
* *
* @param string $p_filepath path of file stored in Airtime. * @param string $p_filepath path of file stored in Airtime.
* @return Application_Model_StoredFile|NULL * @return Application_Model_StoredFile|NULL
*/ */
public static function RecallByFilepath($p_filepath) public static function RecallByFilepath($p_filepath)
@ -601,7 +604,8 @@ Logging::log("getting media! - 2");
return Application_Model_StoredFile::Recall(null, null, null, $p_filepath); return Application_Model_StoredFile::Recall(null, null, null, $p_filepath);
} }
public static function RecallByPartialFilepath($partial_path){ public static function RecallByPartialFilepath($partial_path)
{
$path_info = Application_Model_MusicDir::splitFilePath($partial_path); $path_info = Application_Model_MusicDir::splitFilePath($partial_path);
if (is_null($path_info)) { if (is_null($path_info)) {
@ -614,16 +618,17 @@ Logging::log("getting media! - 2");
->filterByDbFilepath("$path_info[1]%") ->filterByDbFilepath("$path_info[1]%")
->find(); ->find();
$res = array(); $res = array();
foreach ($files as $file){ foreach ($files as $file) {
$storedFile = new Application_Model_StoredFile(); $storedFile = new Application_Model_StoredFile();
$storedFile->_file = $file; $storedFile->_file = $file;
$res[] = $storedFile; $res[] = $storedFile;
} }
return $res; return $res;
} }
public static function searchLibraryFiles($datatables) { public static function searchLibraryFiles($datatables)
{
$con = Propel::getConnection(CcFilesPeer::DATABASE_NAME); $con = Propel::getConnection(CcFilesPeer::DATABASE_NAME);
$displayColumns = array("id", "track_title", "artist_name", "album_title", "genre", "length", $displayColumns = array("id", "track_title", "artist_name", "album_title", "genre", "length",
@ -639,35 +644,30 @@ Logging::log("getting media! - 2");
if ($key === "id") { if ($key === "id") {
$plSelect[] = "PL.id AS ".$key; $plSelect[] = "PL.id AS ".$key;
$fileSelect[] = $key; $fileSelect[] = $key;
} } elseif ($key === "track_title") {
else if ($key === "track_title") {
$plSelect[] = "name AS ".$key; $plSelect[] = "name AS ".$key;
$fileSelect[] = $key; $fileSelect[] = $key;
} } elseif ($key === "ftype") {
else if ($key === "ftype") {
$plSelect[] = "'playlist'::varchar AS ".$key; $plSelect[] = "'playlist'::varchar AS ".$key;
$fileSelect[] = $key; $fileSelect[] = $key;
} } elseif ($key === "artist_name") {
else if ($key === "artist_name") {
$plSelect[] = "login AS ".$key; $plSelect[] = "login AS ".$key;
$fileSelect[] = $key; $fileSelect[] = $key;
} }
//same columns in each table. //same columns in each table.
else if(in_array($key, array("length", "utime", "mtime"))) { else if (in_array($key, array("length", "utime", "mtime"))) {
$plSelect[] = $key; $plSelect[] = $key;
$fileSelect[] = $key; $fileSelect[] = $key;
} } elseif ($key === "year") {
else if ($key === "year") {
$plSelect[] = "EXTRACT(YEAR FROM utime)::varchar AS ".$key; $plSelect[] = "EXTRACT(YEAR FROM utime)::varchar AS ".$key;
$fileSelect[] = "year AS ".$key; $fileSelect[] = "year AS ".$key;
} }
//need to cast certain data as ints for the union to search on. //need to cast certain data as ints for the union to search on.
else if (in_array($key, array("track_number", "bit_rate", "sample_rate"))){ else if (in_array($key, array("track_number", "bit_rate", "sample_rate"))) {
$plSelect[] = "NULL::int AS ".$key; $plSelect[] = "NULL::int AS ".$key;
$fileSelect[] = $key; $fileSelect[] = $key;
} } else {
else {
$plSelect[] = "NULL::text AS ".$key; $plSelect[] = "NULL::text AS ".$key;
$fileSelect[] = $key; $fileSelect[] = $key;
} }
@ -725,11 +725,10 @@ Logging::log("getting media! - 2");
//datatable stuff really needs to be pulled out and generalized within the project //datatable stuff really needs to be pulled out and generalized within the project
//access to zend view methods to access url helpers is needed. //access to zend view methods to access url helpers is needed.
if($type == "au"){//&& isset( $audioResults )) { if ($type == "au") {//&& isset( $audioResults )) {
$row['audioFile'] = $row['gunid'].".".pathinfo($row['filepath'], PATHINFO_EXTENSION); $row['audioFile'] = $row['gunid'].".".pathinfo($row['filepath'], PATHINFO_EXTENSION);
$row['image'] = '<img title="Track preview" src="/css/images/icon_audioclip.png">'; $row['image'] = '<img title="Track preview" src="/css/images/icon_audioclip.png">';
} } else {
else {
$row['image'] = '<img title="Playlist preview" src="/css/images/icon_playlist.png">'; $row['image'] = '<img title="Playlist preview" src="/css/images/icon_playlist.png">';
} }
} }
@ -839,7 +838,8 @@ Logging::log("getting media! - 2");
* Check, using disk_free_space, the space available in the $destination_folder folder to see if it has * Check, using disk_free_space, the space available in the $destination_folder folder to see if it has
* enough space to move the $audio_file into and report back to the user if not. * enough space to move the $audio_file into and report back to the user if not.
**/ **/
public static function isEnoughDiskSpaceToCopy($destination_folder, $audio_file){ public static function isEnoughDiskSpaceToCopy($destination_folder, $audio_file)
{
//check to see if we have enough space in the /organize directory to copy the file //check to see if we have enough space in the /organize directory to copy the file
$freeSpace = disk_free_space($destination_folder); $freeSpace = disk_free_space($destination_folder);
$fileSize = filesize($audio_file); $fileSize = filesize($audio_file);
@ -847,7 +847,8 @@ Logging::log("getting media! - 2");
return $freeSpace >= $fileSize; return $freeSpace >= $fileSize;
} }
public static function copyFileToStor($p_targetDir, $fileName, $tempname){ public static function copyFileToStor($p_targetDir, $fileName, $tempname)
{
$audio_file = $p_targetDir . DIRECTORY_SEPARATOR . $tempname; $audio_file = $p_targetDir . DIRECTORY_SEPARATOR . $tempname;
Logging::log('copyFileToStor: moving file '.$audio_file); Logging::log('copyFileToStor: moving file '.$audio_file);
$md5 = md5_file($audio_file); $md5 = md5_file($audio_file);
@ -861,26 +862,27 @@ Logging::log("getting media! - 2");
} }
} }
if (!isset($result)){//The file has no duplicate, so proceed to copy. if (!isset($result)) {//The file has no duplicate, so proceed to copy.
$storDir = Application_Model_MusicDir::getStorDir(); $storDir = Application_Model_MusicDir::getStorDir();
$stor = $storDir->getDirectory(); $stor = $storDir->getDirectory();
// check if "organize" dir exists and if not create one // check if "organize" dir exists and if not create one
if(!file_exists($stor."/organize")){ if (!file_exists($stor."/organize")) {
if(!mkdir($stor."/organize", 0777)){ if (!mkdir($stor."/organize", 0777)) {
$result = array("code" => 109, "message" => "Failed to create 'organize' directory."); $result = array("code" => 109, "message" => "Failed to create 'organize' directory.");
return $result; return $result;
} }
} }
if (chmod($audio_file, 0644) === false){ if (chmod($audio_file, 0644) === false) {
Logging::log("Warning: couldn't change permissions of $audio_file to 0644"); Logging::log("Warning: couldn't change permissions of $audio_file to 0644");
} }
//check to see if there is enough space in $stor to continue. //check to see if there is enough space in $stor to continue.
if (self::isEnoughDiskSpaceToCopy($stor, $audio_file)){ if (self::isEnoughDiskSpaceToCopy($stor, $audio_file)) {
$audio_stor = Application_Common_OsPath::join($stor, "organize", $fileName); $audio_stor = Application_Common_OsPath::join($stor, "organize", $fileName);
if (self::liquidsoapFilePlayabilityTest($audio_file)){ if (self::liquidsoapFilePlayabilityTest($audio_file)) {
Logging::log("copyFileToStor: moving file $audio_file to $audio_stor"); Logging::log("copyFileToStor: moving file $audio_file to $audio_stor");
@ -899,14 +901,15 @@ Logging::log("getting media! - 2");
$result = array("code" => 107, "message" => "The file was not uploaded, there is ".$freeSpace."MB of disk space left and the file you are uploading has a size of ".$fileSize."MB."); $result = array("code" => 107, "message" => "The file was not uploaded, there is ".$freeSpace."MB of disk space left and the file you are uploading has a size of ".$fileSize."MB.");
} }
} }
return $result; return $result;
} }
/* /*
* Pass the file through Liquidsoap and test if it is readable. Return True if readable, and False otherwise. * Pass the file through Liquidsoap and test if it is readable. Return True if readable, and False otherwise.
*/ */
public static function liquidsoapFilePlayabilityTest($audio_file){ public static function liquidsoapFilePlayabilityTest($audio_file)
{
$LIQUIDSOAP_ERRORS = array('TagLib: MPEG::Properties::read() -- Could not find a valid last MPEG frame in the stream.'); $LIQUIDSOAP_ERRORS = array('TagLib: MPEG::Properties::read() -- Could not find a valid last MPEG frame in the stream.');
// Ask Liquidsoap if file is playable // Ask Liquidsoap if file is playable
@ -915,15 +918,17 @@ Logging::log("getting media! - 2");
exec($command, $output, $rv); exec($command, $output, $rv);
$isError = count($output) > 0 && in_array($output[0], $LIQUIDSOAP_ERRORS); $isError = count($output) > 0 && in_array($output[0], $LIQUIDSOAP_ERRORS);
return ($rv == 0 && !$isError); return ($rv == 0 && !$isError);
} }
public static function getFileCount() public static function getFileCount()
{ {
global $CC_CONFIG; global $CC_CONFIG;
$con = Propel::getConnection(); $con = Propel::getConnection();
$sql = "SELECT count(*) as cnt FROM ".$CC_CONFIG["filesTable"]." WHERE file_exists"; $sql = "SELECT count(*) as cnt FROM ".$CC_CONFIG["filesTable"]." WHERE file_exists";
return $con->query($sql)->fetchColumn(0); return $con->query($sql)->fetchColumn(0);
} }
@ -935,7 +940,7 @@ Logging::log("getting media! - 2");
*/ */
public static function listAllFiles($dir_id=null, $propelObj=false) public static function listAllFiles($dir_id=null, $propelObj=false)
{ {
$con = Propel::getConnection(); $con = Propel::getConnection();
if ($propelObj) { if ($propelObj) {
$sql = "SELECT m.directory || f.filepath as fp" $sql = "SELECT m.directory || f.filepath as fp"
@ -960,7 +965,7 @@ Logging::log("getting media! - 2");
return $results; return $results;
} }
//TODO: MERGE THIS FUNCTION AND "listAllFiles" -MK //TODO: MERGE THIS FUNCTION AND "listAllFiles" -MK
public static function listAllFiles2($dir_id=null, $limit=null) public static function listAllFiles2($dir_id=null, $limit=null)
{ {
@ -969,13 +974,13 @@ Logging::log("getting media! - 2");
$sql = "SELECT id, filepath as fp" $sql = "SELECT id, filepath as fp"
." FROM CC_FILES" ." FROM CC_FILES"
." WHERE directory = $dir_id" ." WHERE directory = $dir_id"
." AND file_exists = 'TRUE'"; ." AND file_exists = 'TRUE'"
." AND replay_gain is NULL";
if (!is_null($limit) && is_int($limit)){ if (!is_null($limit) && is_int($limit)) {
$sql .= " LIMIT $limit"; $sql .= " LIMIT $limit";
} }
$rows = $con->query($sql, PDO::FETCH_ASSOC); $rows = $con->query($sql, PDO::FETCH_ASSOC)->fetchAll();
return $rows; return $rows;
} }
@ -993,6 +998,7 @@ Logging::log("getting media! - 2");
." (soundcloud_upload_time >= (now() - (INTERVAL '1 day')))"; ." (soundcloud_upload_time >= (now() - (INTERVAL '1 day')))";
$rows = $con->query($sql)->fetchAll(); $rows = $con->query($sql)->fetchAll();
return count($rows); return count($rows);
} catch (Exception $e) { } catch (Exception $e) {
header('HTTP/1.0 503 Service Unavailable'); header('HTTP/1.0 503 Service Unavailable');
@ -1008,7 +1014,8 @@ Logging::log("getting media! - 2");
->save(); ->save();
} }
public function getSoundCloudLinkToFile(){ public function getSoundCloudLinkToFile()
{
return $this->_file->getDbSoundCloudLinkToFile(); return $this->_file->getDbSoundCloudLinkToFile();
} }
@ -1018,42 +1025,51 @@ Logging::log("getting media! - 2");
->save(); ->save();
} }
public function getSoundCloudId(){ public function getSoundCloudId()
{
return $this->_file->getDbSoundCloudId(); return $this->_file->getDbSoundCloudId();
} }
public function setSoundCloudErrorCode($code){ public function setSoundCloudErrorCode($code)
{
$this->_file->setDbSoundCloudErrorCode($code) $this->_file->setDbSoundCloudErrorCode($code)
->save(); ->save();
} }
public function getSoundCloudErrorCode(){ public function getSoundCloudErrorCode()
{
return $this->_file->getDbSoundCloudErrorCode(); return $this->_file->getDbSoundCloudErrorCode();
} }
public function setSoundCloudErrorMsg($msg){ public function setSoundCloudErrorMsg($msg)
{
$this->_file->setDbSoundCloudErrorMsg($msg) $this->_file->setDbSoundCloudErrorMsg($msg)
->save(); ->save();
} }
public function getSoundCloudErrorMsg(){ public function getSoundCloudErrorMsg()
{
return $this->_file->getDbSoundCloudErrorMsg(); return $this->_file->getDbSoundCloudErrorMsg();
} }
public function getDirectory(){ public function getDirectory()
{
return $this->_file->getDbDirectory(); return $this->_file->getDbDirectory();
} }
public function setFileExistsFlag($flag){ public function setFileExistsFlag($flag)
{
$this->_file->setDbFileExists($flag) $this->_file->setDbFileExists($flag)
->save(); ->save();
} }
public function setSoundCloudUploadTime($time){ public function setSoundCloudUploadTime($time)
{
$this->_file->setDbSoundCloundUploadTime($time) $this->_file->setDbSoundCloundUploadTime($time)
->save(); ->save();
} }
public function getFileExistsFlag(){ public function getFileExistsFlag()
{
return $this->_file->getDbFileExists(); return $this->_file->getDbFileExists();
} }
@ -1062,12 +1078,11 @@ Logging::log("getting media! - 2");
global $CC_CONFIG; global $CC_CONFIG;
$file = $this->_file; $file = $this->_file;
if(is_null($file)) { if (is_null($file)) {
return "File does not exist"; return "File does not exist";
} }
if(Application_Model_Preference::GetUploadToSoundcloudOption()) if (Application_Model_Preference::GetUploadToSoundcloudOption()) {
{ for ($i=0; $i<$CC_CONFIG['soundcloud-connection-retries']; $i++) {
for($i=0; $i<$CC_CONFIG['soundcloud-connection-retries']; $i++) {
$description = $file->getDbTrackTitle(); $description = $file->getDbTrackTitle();
$tag = array(); $tag = array();
$genre = $file->getDbGenre(); $genre = $file->getDbGenre();
@ -1079,8 +1094,7 @@ Logging::log("getting media! - 2");
$this->setSoundCloudLinkToFile($soundcloud_res['permalink_url']); $this->setSoundCloudLinkToFile($soundcloud_res['permalink_url']);
$this->setSoundCloudUploadTime(new DateTime("now"), new DateTimeZone("UTC")); $this->setSoundCloudUploadTime(new DateTime("now"), new DateTimeZone("UTC"));
break; break;
} } catch (Services_Soundcloud_Invalid_Http_Response_Code_Exception $e) {
catch (Services_Soundcloud_Invalid_Http_Response_Code_Exception $e) {
$code = $e->getHttpCode(); $code = $e->getHttpCode();
$msg = $e->getHttpBody(); $msg = $e->getHttpBody();
$temp = explode('"error":',$msg); $temp = explode('"error":',$msg);
@ -1089,7 +1103,7 @@ Logging::log("getting media! - 2");
$this->setSoundCloudErrorMsg($msg); $this->setSoundCloudErrorMsg($msg);
// setting sc id to -3 which indicates error // setting sc id to -3 which indicates error
$this->setSoundCloudFileId(SOUNDCLOUD_ERROR); $this->setSoundCloudFileId(SOUNDCLOUD_ERROR);
if(!in_array($code, array(0, 100))) { if (!in_array($code, array(0, 100))) {
break; break;
} }
} }

View file

@ -1,6 +1,6 @@
<?php <?php
class Application_Model_StreamSetting { class Application_Model_StreamSetting
{
public static function setValue($key, $value, $type) public static function setValue($key, $value, $type)
{ {
global $CC_CONFIG; global $CC_CONFIG;
@ -30,7 +30,7 @@ class Application_Model_StreamSetting {
public static function getValue($key) public static function getValue($key)
{ {
global $CC_CONFIG; global $CC_CONFIG;
$con = Propel::getConnection(); $con = Propel::getConnection();
//Check if key already exists //Check if key already exists
$sql = "SELECT COUNT(*) FROM cc_stream_setting" $sql = "SELECT COUNT(*) FROM cc_stream_setting"
@ -44,6 +44,7 @@ class Application_Model_StreamSetting {
." WHERE keyname = '$key'"; ." WHERE keyname = '$key'";
$result = $con->query($sql)->fetchColumn(0); $result = $con->query($sql)->fetchColumn(0);
return ($result !== false) ? $result : null; return ($result !== false) ? $result : null;
} }
} }
@ -120,11 +121,11 @@ class Application_Model_StreamSetting {
foreach ($rows as $r) { foreach ($rows as $r) {
if ($r['keyname'] == 'master_live_stream_port') { if ($r['keyname'] == 'master_live_stream_port') {
$exists['master_live_stream_port'] = true; $exists['master_live_stream_port'] = true;
} elseif($r['keyname'] == 'master_live_stream_mp') { } elseif ($r['keyname'] == 'master_live_stream_mp') {
$exists['master_live_stream_mp'] = true; $exists['master_live_stream_mp'] = true;
} elseif($r['keyname'] == 'dj_live_stream_port') { } elseif ($r['keyname'] == 'dj_live_stream_port') {
$exists['dj_live_stream_port'] = true; $exists['dj_live_stream_port'] = true;
} elseif($r['keyname'] == 'dj_live_stream_mp') { } elseif ($r['keyname'] == 'dj_live_stream_mp') {
$exists['dj_live_stream_mp'] = true; $exists['dj_live_stream_mp'] = true;
} }
} }
@ -149,6 +150,7 @@ class Application_Model_StreamSetting {
"value"=>self::getDjLiveStreamMountPoint(), "value"=>self::getDjLiveStreamMountPoint(),
"type"=>"string"); "type"=>"string");
} }
return $rows; return $rows;
} }
@ -168,10 +170,10 @@ class Application_Model_StreamSetting {
$v = $d == 1?"true":"false"; $v = $d == 1?"true":"false";
$sql = "UPDATE cc_stream_setting SET value='$v' WHERE keyname='$key'"; $sql = "UPDATE cc_stream_setting SET value='$v' WHERE keyname='$key'";
$con->exec($sql); $con->exec($sql);
} else if ($key == "output_sound_device_type") { } elseif ($key == "output_sound_device_type") {
$sql = "UPDATE cc_stream_setting SET value='$d' WHERE keyname='$key'"; $sql = "UPDATE cc_stream_setting SET value='$d' WHERE keyname='$key'";
$con->exec($sql); $con->exec($sql);
} else if (is_array($d)) { } elseif (is_array($d)) {
$temp = explode('_', $key); $temp = explode('_', $key);
$prefix = $temp[0]; $prefix = $temp[0];
foreach ($d as $k => $v) { foreach ($d as $k => $v) {
@ -198,7 +200,7 @@ class Application_Model_StreamSetting {
*/ */
public static function setIndivisualStreamSetting($data) public static function setIndivisualStreamSetting($data)
{ {
$con = Propel::getConnection(); $con = Propel::getConnection();
foreach ($data as $keyname => $v) { foreach ($data as $keyname => $v) {
$sql = "UPDATE cc_stream_setting SET value='$v' WHERE keyname='$keyname'"; $sql = "UPDATE cc_stream_setting SET value='$v' WHERE keyname='$keyname'";
@ -212,7 +214,7 @@ class Application_Model_StreamSetting {
*/ */
public static function setLiquidsoapError($stream_id, $msg, $boot_time=null) public static function setLiquidsoapError($stream_id, $msg, $boot_time=null)
{ {
$con = Propel::getConnection(); $con = Propel::getConnection();
$update_time = Application_Model_Preference::GetStreamUpdateTimestemp(); $update_time = Application_Model_Preference::GetStreamUpdateTimestemp();
if ($boot_time == null || $boot_time > $update_time) { if ($boot_time == null || $boot_time > $update_time) {
@ -234,7 +236,7 @@ class Application_Model_StreamSetting {
public static function getLiquidsoapError($stream_id) public static function getLiquidsoapError($stream_id)
{ {
$con = Propel::getConnection(); $con = Propel::getConnection();
$keyname = "s".$stream_id."_liquidsoap_error"; $keyname = "s".$stream_id."_liquidsoap_error";
$sql = "SELECT value FROM cc_stream_setting" $sql = "SELECT value FROM cc_stream_setting"
@ -246,7 +248,7 @@ class Application_Model_StreamSetting {
public static function getStreamEnabled($stream_id) public static function getStreamEnabled($stream_id)
{ {
$con = Propel::getConnection(); $con = Propel::getConnection();
$keyname = "s" . $stream_id . "_enable"; $keyname = "s" . $stream_id . "_enable";
$sql = "SELECT value FROM cc_stream_setting" $sql = "SELECT value FROM cc_stream_setting"
@ -257,6 +259,7 @@ class Application_Model_StreamSetting {
} else { } else {
$result = true; $result = true;
} }
return $result; return $result;
} }
@ -266,7 +269,7 @@ class Application_Model_StreamSetting {
*/ */
public static function getStreamInfoForDataCollection() public static function getStreamInfoForDataCollection()
{ {
$con = Propel::getConnection(); $con = Propel::getConnection();
$out = array(); $out = array();
$enabled_stream = self::getEnabledStreamIds(); $enabled_stream = self::getEnabledStreamIds();
@ -286,6 +289,7 @@ class Application_Model_StreamSetting {
$out[$stream] = $info; $out[$stream] = $info;
} }
} }
return $out; return $out;
} }

View file

@ -14,8 +14,8 @@ define('ALIBERR_BADSMEMB', 21);
* @copyright 2010 Sourcefabric O.P.S. * @copyright 2010 Sourcefabric O.P.S.
* @license http://www.gnu.org/licenses/gpl.txt * @license http://www.gnu.org/licenses/gpl.txt
*/ */
class Application_Model_Subjects { class Application_Model_Subjects
{
/* ======================================================= public methods */ /* ======================================================= public methods */
public static function increaseLoginAttempts($login) public static function increaseLoginAttempts($login)
@ -25,6 +25,7 @@ class Application_Model_Subjects {
$sql = "UPDATE ".$CC_CONFIG['subjTable']." SET login_attempts = login_attempts+1" $sql = "UPDATE ".$CC_CONFIG['subjTable']." SET login_attempts = login_attempts+1"
." WHERE login='$login'"; ." WHERE login='$login'";
$res = $con->exec($sql); $res = $con->exec($sql);
return (intval($res) > 0); return (intval($res) > 0);
} }
@ -35,6 +36,7 @@ class Application_Model_Subjects {
$sql = "UPDATE ".$CC_CONFIG['subjTable']." SET login_attempts = '0'" $sql = "UPDATE ".$CC_CONFIG['subjTable']." SET login_attempts = '0'"
." WHERE login='$login'"; ." WHERE login='$login'";
$res = $con->exec($sql); $res = $con->exec($sql);
return true; return true;
} }
@ -44,8 +46,8 @@ class Application_Model_Subjects {
$con = Propel::getConnection(); $con = Propel::getConnection();
$sql = "SELECT login_attempts FROM ".$CC_CONFIG['subjTable']." WHERE login='$login'"; $sql = "SELECT login_attempts FROM ".$CC_CONFIG['subjTable']." WHERE login='$login'";
$res = $con->query($sql)->fetchColumn(0); $res = $con->query($sql)->fetchColumn(0);
return ($res !== false) ? $res : 0; return ($res !== false) ? $res : 0;
} }
} // class Subjects } // class Subjects

View file

@ -3,7 +3,8 @@
class Application_Model_Systemstatus class Application_Model_Systemstatus
{ {
public static function GetMonitStatus($p_ip){ public static function GetMonitStatus($p_ip)
{
global $CC_CONFIG; global $CC_CONFIG;
$monit_user = $CC_CONFIG['monit_user']; $monit_user = $CC_CONFIG['monit_user'];
$monit_password = $CC_CONFIG['monit_password']; $monit_password = $CC_CONFIG['monit_password'];
@ -22,8 +23,8 @@ class Application_Model_Systemstatus
curl_close($ch); curl_close($ch);
$docRoot = null; $docRoot = null;
if ($result !== FALSE && $info["http_code"] === 200){ if ($result !== FALSE && $info["http_code"] === 200) {
if ($result != ""){ if ($result != "") {
$xmlDoc = new DOMDocument(); $xmlDoc = new DOMDocument();
$xmlDoc->loadXML($result); $xmlDoc->loadXML($result);
$docRoot = $xmlDoc->documentElement; $docRoot = $xmlDoc->documentElement;
@ -33,8 +34,8 @@ class Application_Model_Systemstatus
return $docRoot; return $docRoot;
} }
public static function ExtractServiceInformation($p_docRoot, $p_serviceName){ public static function ExtractServiceInformation($p_docRoot, $p_serviceName)
{
$starting = array( $starting = array(
"name"=>"", "name"=>"",
"process_id"=>"STARTING...", "process_id"=>"STARTING...",
@ -65,76 +66,75 @@ class Application_Model_Systemstatus
); );
$data = $notRunning; $data = $notRunning;
if (!is_null($p_docRoot)) {
if (!is_null($p_docRoot)){ foreach ($p_docRoot->getElementsByTagName("service") AS $item) {
foreach ($p_docRoot->getElementsByTagName("service") AS $item) if ($item->getElementsByTagName("name")->item(0)->nodeValue == $p_serviceName) {
{
if ($item->getElementsByTagName("name")->item(0)->nodeValue == $p_serviceName){
$monitor = $item->getElementsByTagName("monitor"); $monitor = $item->getElementsByTagName("monitor");
if ($monitor->length > 0){ if ($monitor->length > 0) {
$status = $monitor->item(0)->nodeValue; $status = $monitor->item(0)->nodeValue;
if ($status == "2"){ if ($status == "2") {
$data = $starting; $data = $starting;
} else if ($status == 1){ } elseif ($status == 1) {
//is monitored, but is it running? //is monitored, but is it running?
$pid = $item->getElementsByTagName("pid"); $pid = $item->getElementsByTagName("pid");
if ($pid->length == 0){ if ($pid->length == 0) {
$data = $notRunning; $data = $notRunning;
} else { } else {
//running! //running!
} }
} else if ($status == 0){ } elseif ($status == 0) {
$data = $notMonitored; $data = $notMonitored;
} }
} }
$process_id = $item->getElementsByTagName("name"); $process_id = $item->getElementsByTagName("name");
if ($process_id->length > 0){ if ($process_id->length > 0) {
$data["name"] = $process_id->item(0)->nodeValue; $data["name"] = $process_id->item(0)->nodeValue;
} }
$process_id = $item->getElementsByTagName("pid"); $process_id = $item->getElementsByTagName("pid");
if ($process_id->length > 0){ if ($process_id->length > 0) {
$data["process_id"] = $process_id->item(0)->nodeValue; $data["process_id"] = $process_id->item(0)->nodeValue;
$data["status"] = 0; $data["status"] = 0;
} }
$uptime = $item->getElementsByTagName("uptime"); $uptime = $item->getElementsByTagName("uptime");
if ($uptime->length > 0){ if ($uptime->length > 0) {
$data["uptime_seconds"] = $uptime->item(0)->nodeValue; $data["uptime_seconds"] = $uptime->item(0)->nodeValue;
} }
$memory = $item->getElementsByTagName("memory"); $memory = $item->getElementsByTagName("memory");
if ($memory->length > 0){ if ($memory->length > 0) {
$data["memory_perc"] = $memory->item(0)->getElementsByTagName("percenttotal")->item(0)->nodeValue."%"; $data["memory_perc"] = $memory->item(0)->getElementsByTagName("percenttotal")->item(0)->nodeValue."%";
$data["memory_kb"] = $memory->item(0)->getElementsByTagName("kilobytetotal")->item(0)->nodeValue; $data["memory_kb"] = $memory->item(0)->getElementsByTagName("kilobytetotal")->item(0)->nodeValue;
} }
$cpu = $item->getElementsByTagName("cpu"); $cpu = $item->getElementsByTagName("cpu");
if ($cpu->length > 0){ if ($cpu->length > 0) {
$data["cpu_perc"] = $cpu->item(0)->getElementsByTagName("percent")->item(0)->nodeValue."%"; $data["cpu_perc"] = $cpu->item(0)->getElementsByTagName("percent")->item(0)->nodeValue."%";
} }
break; break;
} }
} }
} }
return $data; return $data;
} }
public static function GetPlatformInfo(){ public static function GetPlatformInfo()
{
$keys = array("release", "machine", "memory", "swap"); $keys = array("release", "machine", "memory", "swap");
foreach($keys as $key) { foreach ($keys as $key) {
$data[$key] = "UNKNOWN"; $data[$key] = "UNKNOWN";
} }
$docRoot = self::GetMonitStatus("localhost"); $docRoot = self::GetMonitStatus("localhost");
if (!is_null($docRoot)){ if (!is_null($docRoot)) {
foreach ($docRoot->getElementsByTagName("platform") AS $item) foreach ($docRoot->getElementsByTagName("platform") AS $item) {
{ foreach ($keys as $key) {
foreach($keys as $key) {
$keyElement = $item->getElementsByTagName($key); $keyElement = $item->getElementsByTagName($key);
if($keyElement->length > 0) { if ($keyElement->length > 0) {
$data[$key] = $keyElement->item(0)->nodeValue; $data[$key] = $keyElement->item(0)->nodeValue;
} }
} }
@ -144,10 +144,10 @@ class Application_Model_Systemstatus
return $data; return $data;
} }
public static function GetPypoStatus(){ public static function GetPypoStatus()
{
$component = CcServiceRegisterQuery::create()->findOneByDbName("pypo"); $component = CcServiceRegisterQuery::create()->findOneByDbName("pypo");
if (is_null($component)){ if (is_null($component)) {
return null; return null;
} else { } else {
$ip = $component->getDbIp(); $ip = $component->getDbIp();
@ -159,10 +159,10 @@ class Application_Model_Systemstatus
} }
} }
public static function GetLiquidsoapStatus(){ public static function GetLiquidsoapStatus()
{
$component = CcServiceRegisterQuery::create()->findOneByDbName("pypo"); $component = CcServiceRegisterQuery::create()->findOneByDbName("pypo");
if (is_null($component)){ if (is_null($component)) {
return null; return null;
} else { } else {
$ip = $component->getDbIp(); $ip = $component->getDbIp();
@ -174,10 +174,10 @@ class Application_Model_Systemstatus
} }
} }
public static function GetMediaMonitorStatus(){ public static function GetMediaMonitorStatus()
{
$component = CcServiceRegisterQuery::create()->findOneByDbName("media-monitor"); $component = CcServiceRegisterQuery::create()->findOneByDbName("media-monitor");
if (is_null($component)){ if (is_null($component)) {
return null; return null;
} else { } else {
$ip = $component->getDbIp(); $ip = $component->getDbIp();
@ -189,16 +189,17 @@ class Application_Model_Systemstatus
} }
} }
public static function GetIcecastStatus(){ public static function GetIcecastStatus()
{
$docRoot = self::GetMonitStatus("localhost"); $docRoot = self::GetMonitStatus("localhost");
$data = self::ExtractServiceInformation($docRoot, "icecast2"); $data = self::ExtractServiceInformation($docRoot, "icecast2");
return $data; return $data;
} }
public static function GetRabbitMqStatus(){ public static function GetRabbitMqStatus()
{
if (isset($_SERVER["RABBITMQ_HOST"])){ if (isset($_SERVER["RABBITMQ_HOST"])) {
$rabbitmq_host = $_SERVER["RABBITMQ_HOST"]; $rabbitmq_host = $_SERVER["RABBITMQ_HOST"];
} else { } else {
$rabbitmq_host = "localhost"; $rabbitmq_host = "localhost";
@ -209,10 +210,11 @@ class Application_Model_Systemstatus
return $data; return $data;
} }
public static function GetDiskInfo(){ public static function GetDiskInfo()
{
$partions = array(); $partions = array();
if (isset($_SERVER['AIRTIME_SRV'])){ if (isset($_SERVER['AIRTIME_SRV'])) {
//connect to DB and find how much total space user has allocated. //connect to DB and find how much total space user has allocated.
$totalSpace = Application_Model_Preference::GetDiskQuota(); $totalSpace = Application_Model_Preference::GetDiskQuota();
@ -229,10 +231,10 @@ class Application_Model_Systemstatus
$musicDirs = Application_Model_MusicDir::getWatchedDirs(); $musicDirs = Application_Model_MusicDir::getWatchedDirs();
$musicDirs[] = Application_Model_MusicDir::getStorDir(); $musicDirs[] = Application_Model_MusicDir::getStorDir();
foreach($musicDirs as $md){ foreach ($musicDirs as $md) {
$totalSpace = disk_total_space($md->getDirectory()); $totalSpace = disk_total_space($md->getDirectory());
if (!isset($partitions[$totalSpace])){ if (!isset($partitions[$totalSpace])) {
$partitions[$totalSpace] = new StdClass; $partitions[$totalSpace] = new StdClass;
$partitions[$totalSpace]->totalSpace = $totalSpace; $partitions[$totalSpace]->totalSpace = $totalSpace;
$partitions[$totalSpace]->totalFreeSpace = disk_free_space($md->getDirectory()); $partitions[$totalSpace]->totalFreeSpace = disk_free_space($md->getDirectory());

View file

@ -5,8 +5,8 @@ define('UTYPE_ADMIN', 'A');
define('UTYPE_GUEST', 'G'); define('UTYPE_GUEST', 'G');
define('UTYPE_PROGRAM_MANAGER', 'P'); define('UTYPE_PROGRAM_MANAGER', 'P');
class Application_Model_User { class Application_Model_User
{
private $_userInstance; private $_userInstance;
public function __construct($userId) public function __construct($userId)
@ -28,8 +28,8 @@ class Application_Model_User {
} }
public function isGuest() public function isGuest()
{ {
return $this->getType() == UTYPE_GUEST; return $this->getType() == UTYPE_GUEST;
} }
public function isHost($showId) public function isHost($showId)
@ -66,7 +66,7 @@ class Application_Model_User {
if (is_array($type)) { if (is_array($type)) {
$result = false; $result = false;
foreach ($type as $t) { foreach ($type as $t) {
switch($t){ switch ($t) {
case UTYPE_ADMIN: case UTYPE_ADMIN:
$result = $this->_userInstance->getDbType() === 'A'; $result = $this->_userInstance->getDbType() === 'A';
break; break;
@ -85,11 +85,12 @@ class Application_Model_User {
} }
} }
} else { } else {
switch($type) { switch ($type) {
case UTYPE_ADMIN: case UTYPE_ADMIN:
return $this->_userInstance->getDbType() === 'A'; return $this->_userInstance->getDbType() === 'A';
case UTYPE_HOST: case UTYPE_HOST:
$userId = $this->_userInstance->getDbId(); $userId = $this->_userInstance->getDbId();
return CcShowHostsQuery::create()->filterByDbShow($showId)->filterByDbHost($userId)->count() > 0; return CcShowHostsQuery::create()->filterByDbShow($showId)->filterByDbHost($userId)->count() > 0;
case UTYPE_PROGRAM_MANAGER: case UTYPE_PROGRAM_MANAGER:
return $this->_userInstance->getDbType() === 'P'; return $this->_userInstance->getDbType() === 'P';
@ -154,54 +155,63 @@ class Application_Model_User {
public function getLogin() public function getLogin()
{ {
$user = $this->_userInstance; $user = $this->_userInstance;
return $user->getDbLogin(); return $user->getDbLogin();
} }
public function getPassword() public function getPassword()
{ {
$user = $this->_userInstance; $user = $this->_userInstance;
return $user->getDbPass(); return $user->getDbPass();
} }
public function getFirstName() public function getFirstName()
{ {
$user = $this->_userInstance; $user = $this->_userInstance;
return $user->getDbFirstName(); return $user->getDbFirstName();
} }
public function getLastName() public function getLastName()
{ {
$user = $this->_userInstance; $user = $this->_userInstance;
return $user->getDbLastName(); return $user->getDbLastName();
} }
public function getType() public function getType()
{ {
$user = $this->_userInstance; $user = $this->_userInstance;
return $user->getDbType(); return $user->getDbType();
} }
public function getEmail() public function getEmail()
{ {
$user = $this->_userInstance; $user = $this->_userInstance;
return $user->getDbEmail(); return $user->getDbEmail();
} }
public function getCellPhone() public function getCellPhone()
{ {
$user = $this->_userInstance; $user = $this->_userInstance;
return $user->getDbCellPhone(); return $user->getDbCellPhone();
} }
public function getSkype() public function getSkype()
{ {
$user = $this->_userInstance; $user = $this->_userInstance;
return $user->getDbSkypeContact(); return $user->getDbSkypeContact();
} }
public function getJabber() public function getJabber()
{ {
$user = $this->_userInstance; $user = $this->_userInstance;
return $user->getDbJabberContact(); return $user->getDbJabberContact();
} }
@ -221,6 +231,7 @@ class Application_Model_User {
private function createUser() private function createUser()
{ {
$user = new CcSubjs(); $user = new CcSubjs();
return $user; return $user;
} }
@ -275,6 +286,7 @@ class Application_Model_User {
} }
$query = $con->query($sql)->fetchColumn(0); $query = $con->query($sql)->fetchColumn(0);
return ($query !== false) ? $query : null; return ($query !== false) ? $query : null;
} }
@ -337,6 +349,7 @@ class Application_Model_User {
//we get here if $userinfo->id is defined, but doesn't exist //we get here if $userinfo->id is defined, but doesn't exist
//in the database anymore. //in the database anymore.
Zend_Auth::getInstance()->clearIdentity(); Zend_Auth::getInstance()->clearIdentity();
return null; return null;
} }
} }

View file

@ -1,8 +0,0 @@
<?php
//disable buffering so that data is sent as we retrieve it from the database
while (@ob_end_flush());
foreach($this->rows as $row) {
echo json_encode($row)."\n";
}

View file

@ -98,7 +98,7 @@
<column name="soundcloud_error_msg" phpName="DbSoundcloudErrorMsg" type="VARCHAR" size="512" required="false"/> <column name="soundcloud_error_msg" phpName="DbSoundcloudErrorMsg" type="VARCHAR" size="512" required="false"/>
<column name="soundcloud_link_to_file" phpName="DbSoundcloudLinkToFile" type="VARCHAR" size="4096" required="false"/> <column name="soundcloud_link_to_file" phpName="DbSoundcloudLinkToFile" type="VARCHAR" size="4096" required="false"/>
<column name="soundcloud_upload_time" phpName="DbSoundCloundUploadTime" type="TIMESTAMP" size="6" required="false"/> <column name="soundcloud_upload_time" phpName="DbSoundCloundUploadTime" type="TIMESTAMP" size="6" required="false"/>
<column name="replay_gain" phpName="DbReplayGain" type="VARCHAR" size="16" required="false" defaultValue="0"/> <column name="replay_gain" phpName="DbReplayGain" type="VARCHAR" size="16" required="false"/>
<foreign-key foreignTable="cc_subjs" name="cc_files_editedby_fkey"> <foreign-key foreignTable="cc_subjs" name="cc_files_editedby_fkey">
<reference local="editedby" foreign="id"/> <reference local="editedby" foreign="id"/>
</foreign-key> </foreign-key>

View file

@ -6,4 +6,4 @@ flac
vorbis-tools vorbis-tools
calculate Replay Gain dB on upgrade. calculate Replay Gain dB on upgrade: the default value should be NULL.

View file

@ -96,9 +96,6 @@ update_item_url = 'notify-schedule-group-play/api_key/%%api_key%%/schedule_id/%%
# Update whether an audio clip is currently playing. # Update whether an audio clip is currently playing.
update_start_playing_url = 'notify-media-item-start-play/api_key/%%api_key%%/media_id/%%media_id%%/schedule_id/%%schedule_id%%' update_start_playing_url = 'notify-media-item-start-play/api_key/%%api_key%%/media_id/%%media_id%%/schedule_id/%%schedule_id%%'
# ???
generate_range_url = 'generate_range_dp.php'
# URL to tell Airtime we want to get stream setting # URL to tell Airtime we want to get stream setting
get_stream_setting = 'get-stream-setting/format/json/api_key/%%api_key%%/' get_stream_setting = 'get-stream-setting/format/json/api_key/%%api_key%%/'
@ -113,5 +110,6 @@ update_source_status = 'update-source-status/format/json/api_key/%%api_key%%/sou
get_bootstrap_info = 'get-bootstrap-info/format/json/api_key/%%api_key%%' get_bootstrap_info = 'get-bootstrap-info/format/json/api_key/%%api_key%%'
get-files-without-replay-gain = 'get-files-without-replay-gain/api_key/%%api_key%%/dir_id/%%dir_id%%'' get_files_without_replay_gain = 'get-files-without-replay-gain/api_key/%%api_key%%/dir_id/%%dir_id%%'
update_replay_gain_value = 'update-replay-gain-value/api_key/%%api_key%%'

View file

@ -381,7 +381,9 @@ class AirTimeApiClient():
self.logger.debug("Warning: Sending a request element without a 'mode'") self.logger.debug("Warning: Sending a request element without a 'mode'")
self.logger.debug("Here is the the request: '%s'" % str(action) ) self.logger.debug("Here is the the request: '%s'" % str(action) )
else: valid_actions.append(action) else: valid_actions.append(action)
md_list = { i : json.dumps(convert_dict_value_to_utf8(md)) for i,md in enumerate(valid_actions) }
md_list = dict((i, json.dumps(convert_dict_value_to_utf8(md))) for i,md in enumerate(valid_actions))
data = urllib.urlencode(md_list) data = urllib.urlencode(md_list)
req = urllib2.Request(url, data) req = urllib2.Request(url, data)
response = self.get_response_from_server(req) response = self.get_response_from_server(req)
@ -621,15 +623,35 @@ class AirTimeApiClient():
logger = self.logger logger = self.logger
try: try:
url = "http://%(base_url)s:%(base_port)s/%(api_base)s/%(get-files-without-replay-gain)s/" % (self.config) url = "http://%(base_url)s:%(base_port)s/%(api_base)s/%(get_files_without_replay_gain)s/" % (self.config)
url = url.replace("%%api_key%%", self.config["api_key"]) url = url.replace("%%api_key%%", self.config["api_key"])
url = url.replace("%%dir_id%%", dir_id) url = url.replace("%%dir_id%%", dir_id)
response = self.get_response_from_server(url)
file_path = self.get_response_into_file(url) logger.info("update file system mount: %s", response)
response = json.loads(response)
#file_path = self.get_response_into_file(url)
except Exception, e: except Exception, e:
file_path = None response = None
logger.error('Exception: %s', e) logger.error('Exception: %s', e)
logger.error("traceback: %s", traceback.format_exc()) logger.error("traceback: %s", traceback.format_exc())
return file_path return response
def update_replay_gain_values(self, pairs):
"""
'pairs' is a list of pairs in (x, y), where x is the file's database row id
and y is the file's replay_gain value in dB
"""
#http://localhost/api/update-replay-gain-value/
try:
url = "http://%(base_url)s:%(base_port)s/%(api_base)s/%(update_replay_gain_value)s/" % (self.config)
url = url.replace("%%api_key%%", self.config["api_key"])
data = urllib.urlencode({'data': json.dumps(pairs)})
request = urllib2.Request(url, data)
self.get_response_from_server(request)
except Exception, e:
self.logger.error("Exception: %s", e)
raise

View file

@ -10,5 +10,6 @@ class Loggable(object):
# TODO : replace this boilerplate with LazyProperty # TODO : replace this boilerplate with LazyProperty
@LazyProperty @LazyProperty
def logger(self): def logger(self):
# TODO : Clean this up
if not hasattr(self,"_logger"): self._logger = logging.getLogger('mediamonitor2') if not hasattr(self,"_logger"): self._logger = logging.getLogger('mediamonitor2')
return self._logger return self._logger

View file

@ -6,16 +6,16 @@ import logging
import json import json
from api_clients import api_client from api_clients import api_client
import replaygain from media.update import replaygain
class ReplayGainUpdater(Thread): class ReplayGainUpdater(Thread):
""" """
The purpose of the class is to query the server for a list of files which do not have a ReplayGain The purpose of the class is to query the server for a list of files which do not have a ReplayGain
value calculated. This class will iterate over the list calculate the values, update the server and value calculated. This class will iterate over the list calculate the values, update the server and
repeat the process until the the server reports there are no files left. repeat the process until the server reports there are no files left.
This class will see heavy activity right after a 2.1->2.2 upgrade since 2.2 introduces ReplayGain This class will see heavy activity right after a 2.1->2.2 upgrade since 2.2 introduces ReplayGain
normalization. A fresh install of Airtime 2.2 will see this class not used at all since a file normalization. A fresh install of Airtime 2.2 will see this class not used at all since a file
imported in 2.2 will automatically have its ReplayGain value calculated. imported in 2.2 will automatically have its ReplayGain value calculated.
""" """
@ -27,42 +27,32 @@ class ReplayGainUpdater(Thread):
def main(self): def main(self):
#TODO #TODO make sure object has 'dirs' attr
directories = self.api_client.list_all_watched_dirs()['dirs'] directories = self.api_client.list_all_watched_dirs()['dirs']
for dir_id, dir_path in directories.iteritems(): for dir_id, dir_path in directories.iteritems():
try: try:
processed_data = [] processed_data = []
#keep getting 100 rows at a time for current music_dir (stor or watched folder). #keep getting few rows at a time for current music_dir (stor or watched folder).
#When we get a response with 0 rows, then we will set response to True. #When we get a response with 0 rows, then we will set 'finished' to True.
finished = False finished = False
while not finished: while not finished:
# return a list of pairs where the first value is the file's database row id # return a list of pairs where the first value is the file's database row id
# and the second value is the filepath # and the second value is the filepath
file_path = self.api_client.get_files_without_replay_gain_value(dir_id) files = self.api_client.get_files_without_replay_gain_value(dir_id)
print "temp file saved to %s" % file_path
num_lines = 0 for f in files:
full_path = os.path.join(dir_path, f['fp'])
processed_data.append((f['id'], replaygain.calculate_replay_gain(full_path)))
with open(file_path) as f: self.api_client.update_replay_gain_values(processed_data)
for line in f: finished = (len(files) == 0)
num_lines += 1
data = json.loads(line.strip())
track_path = os.path.join(dir_path, data['fp'])
processed_data.append((data['id'], replaygain.calculate_replay_gain(track_path)))
if num_lines == 0:
finished = True
os.remove(file_path)
#send data here
pass
except Exception, e: except Exception, e:
print e self.logger.error(e)
self.logger.debug(traceback.format_exc())
def run(self): def run(self):
try: self.main() try: self.main()
except Exception, e: except Exception, e:
@ -72,7 +62,7 @@ class ReplayGainUpdater(Thread):
if __name__ == "__main__": if __name__ == "__main__":
try: try:
rgu = ReplayGainUpdater(logging) rgu = ReplayGainUpdater(logging)
print rgu.main() rgu.main()
except Exception, e: except Exception, e:
print e print e
print traceback.format_exc() print traceback.format_exc()