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')
@ -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
@ -852,14 +814,14 @@ 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.
@ -871,12 +833,11 @@ class ApiController extends Zend_Controller_Action
$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');
@ -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;
} }
} }
@ -988,15 +944,36 @@ 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 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

@ -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,20 +63,18 @@ 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()) {
@ -88,15 +86,14 @@ class LibraryController extends Zend_Controller_Action
$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";
} }
@ -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,17 +177,15 @@ 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"/>';
} }
} }
@ -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'];
} }
} }
@ -108,8 +102,7 @@ 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');
@ -130,8 +123,7 @@ class LoginController extends Zend_Controller_Action
} 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."));
} }
} }
@ -194,6 +186,3 @@ class LoginController extends Zend_Controller_Action
$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');
} }
} }
@ -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,6 +1,6 @@
<?php <?php
class PlayoutHistoryController extends Zend_Controller_Action class PlayouthistoryController extends Zend_Controller_Action
{ {
public function init() public function init()
{ {

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;
} }
@ -273,7 +277,7 @@ class ScheduleController extends Zend_Controller_Action
$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);
} }
@ -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());
@ -853,8 +861,7 @@ class ScheduleController extends Zend_Controller_Action
// 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()}");
@ -863,7 +870,8 @@ class ScheduleController extends Zend_Controller_Action
} }
} }
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,8 +16,8 @@ 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();
@ -31,8 +31,7 @@ class ShowbuilderController extends Zend_Controller_Action
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', '' );");
} }
@ -40,8 +39,7 @@ class ShowbuilderController extends Zend_Controller_Action
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', '' );");
} }
@ -79,8 +77,7 @@ class ShowbuilderController extends Zend_Controller_Action
} }
// 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"]);
@ -96,13 +93,12 @@ class ShowbuilderController extends Zend_Controller_Action
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 {
else {
$logo = Application_Model_Preference::GetStationLogo(); $logo = Application_Model_Preference::GetStationLogo();
if ($logo) { if ($logo) {
$this->view->logoImg = $logo; $this->view->logoImg = $logo;
@ -138,8 +134,7 @@ class ShowbuilderController extends Zend_Controller_Action
$showLib = true; $showLib = true;
} }
} }
} } else {
else {
$disableLib = true; $disableLib = true;
} }
$this->view->disableLib = $disableLib; $this->view->disableLib = $disableLib;
@ -203,8 +198,8 @@ class ShowbuilderController extends Zend_Controller_Action
$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();
@ -291,8 +286,8 @@ class ShowbuilderController extends Zend_Controller_Action
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

@ -17,8 +17,8 @@ class UsersettingsController extends Zend_Controller_Action
->initContext(); ->initContext();
} }
public function setNowPlayingScreenSettingsAction() { public function setNowPlayingScreenSettingsAction()
{
$request = $this->getRequest(); $request = $this->getRequest();
$settings = $request->getParam("settings"); $settings = $request->getParam("settings");
@ -26,16 +26,16 @@ class UsersettingsController extends Zend_Controller_Action
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);

View file

@ -110,11 +110,10 @@ class Zend_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract
{ {
$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') {
@ -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)

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,7 +1,7 @@
<?php <?php
class Application_Model_Email { class Application_Model_Email
{
/** /**
* Send email * Send email
* *

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);

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]);
} }
@ -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,8 +2,8 @@
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;
@ -24,8 +24,8 @@ 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;
@ -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(

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.
* *
@ -30,7 +30,7 @@ class Application_Model_Schedule {
*/ */
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,10 +334,10 @@ 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".
@ -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;
} }
@ -353,6 +364,7 @@ class Application_Model_Schedule {
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";
} }
@ -373,6 +385,7 @@ class Application_Model_Schedule {
return false; return false;
} }
} }
return true; return true;
} }
@ -397,10 +410,10 @@ 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.
@ -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++) {
@ -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,8 +203,8 @@ 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;
@ -227,8 +225,7 @@ class Application_Model_Scheduler {
->setDbPlayoutStatus(-1) ->setDbPlayoutStatus(-1)
->setDbInstanceId($instance->getDbId()) ->setDbInstanceId($instance->getDbId())
->save($this->con); ->save($this->con);
} } else {
else {
$nextDT = $DT; $nextDT = $DT;
} }
@ -240,8 +237,8 @@ class Application_Model_Scheduler {
* @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);
@ -257,7 +254,6 @@ class Application_Model_Scheduler {
->orderByDbStarts() ->orderByDbStarts()
->find($this->con); ->find($this->con);
foreach ($schedule as $item) { foreach ($schedule as $item) {
$itemEndDT = $this->findEndTime($itemStartDT, $item->getDbClipLength()); $itemEndDT = $this->findEndTime($itemStartDT, $item->getDbClipLength());
@ -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();
@ -331,7 +327,7 @@ class Application_Model_Scheduler {
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));
@ -408,8 +403,7 @@ class Application_Model_Scheduler {
$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();
@ -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);
} }
} }
@ -520,7 +512,7 @@ class Application_Model_Scheduler {
$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();
@ -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 {
@ -644,7 +633,7 @@ class Application_Model_Scheduler {
$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();
@ -652,8 +641,7 @@ class Application_Model_Scheduler {
$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);
} }
@ -666,8 +654,7 @@ 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";
} }

View file

@ -1,7 +1,7 @@
<?php <?php
class Application_Model_Show { class Application_Model_Show
{
private $_showId; private $_showId;
public function __construct($showId=NULL) public function __construct($showId=NULL)
@ -12,6 +12,7 @@ class Application_Model_Show {
public function getName() public function getName()
{ {
$show = CcShowQuery::create()->findPK($this->_showId); $show = CcShowQuery::create()->findPK($this->_showId);
return $show->getDbName(); return $show->getDbName();
} }
@ -22,25 +23,29 @@ class Application_Model_Show {
Application_Model_RabbitMq::PushSchedule(); Application_Model_RabbitMq::PushSchedule();
} }
public function setAirtimeAuthFlag($flag){ public function setAirtimeAuthFlag($flag)
{
$show = CcShowQuery::create()->findPK($this->_showId); $show = CcShowQuery::create()->findPK($this->_showId);
$show->setDbLiveStreamUsingAirtimeAuth($flag); $show->setDbLiveStreamUsingAirtimeAuth($flag);
$show->save(); $show->save();
} }
public function setCustomAuthFlag($flag){ public function setCustomAuthFlag($flag)
{
$show = CcShowQuery::create()->findPK($this->_showId); $show = CcShowQuery::create()->findPK($this->_showId);
$show->setDbLiveStreamUsingCustomAuth($flag); $show->setDbLiveStreamUsingCustomAuth($flag);
$show->save(); $show->save();
} }
public function setCustomUsername($username){ public function setCustomUsername($username)
{
$show = CcShowQuery::create()->findPK($this->_showId); $show = CcShowQuery::create()->findPK($this->_showId);
$show->setDbLiveStreamUser($username); $show->setDbLiveStreamUser($username);
$show->save(); $show->save();
} }
public function setCustomPassword($password){ public function setCustomPassword($password)
{
$show = CcShowQuery::create()->findPK($this->_showId); $show = CcShowQuery::create()->findPK($this->_showId);
$show->setDbLiveStreamPass($password); $show->setDbLiveStreamPass($password);
$show->save(); $show->save();
@ -49,6 +54,7 @@ class Application_Model_Show {
public function getDescription() public function getDescription()
{ {
$show = CcShowQuery::create()->findPK($this->_showId); $show = CcShowQuery::create()->findPK($this->_showId);
return $show->getDbDescription(); return $show->getDbDescription();
} }
@ -61,6 +67,7 @@ class Application_Model_Show {
public function getColor() public function getColor()
{ {
$show = CcShowQuery::create()->findPK($this->_showId); $show = CcShowQuery::create()->findPK($this->_showId);
return $show->getDbColor(); return $show->getDbColor();
} }
@ -73,6 +80,7 @@ class Application_Model_Show {
public function getUrl() public function getUrl()
{ {
$show = CcShowQuery::create()->findPK($this->_showId); $show = CcShowQuery::create()->findPK($this->_showId);
return $show->getDbUrl(); return $show->getDbUrl();
} }
@ -85,6 +93,7 @@ class Application_Model_Show {
public function getGenre() public function getGenre()
{ {
$show = CcShowQuery::create()->findPK($this->_showId); $show = CcShowQuery::create()->findPK($this->_showId);
return $show->getDbGenre(); return $show->getDbGenre();
} }
@ -97,6 +106,7 @@ class Application_Model_Show {
public function getBackgroundColor() public function getBackgroundColor()
{ {
$show = CcShowQuery::create()->findPK($this->_showId); $show = CcShowQuery::create()->findPK($this->_showId);
return $show->getDbBackgroundColor(); return $show->getDbBackgroundColor();
} }
@ -166,8 +176,7 @@ class Application_Model_Show {
$hours = $deltaMin/60; $hours = $deltaMin/60;
if ($hours > 0) { if ($hours > 0) {
$hours = floor($hours); $hours = floor($hours);
} } else {
else {
$hours = ceil($hours); $hours = ceil($hours);
} }
@ -205,8 +214,7 @@ class Application_Model_Show {
} }
$con->commit(); $con->commit();
} } catch (Exception $e) {
catch (Exception $e) {
$con->rollback(); $con->rollback();
Logging::log("Couldn't update schedule status."); Logging::log("Couldn't update schedule status.");
Logging::log($e->getMessage()); Logging::log($e->getMessage());
@ -237,7 +245,7 @@ class Application_Model_Show {
->filterByDbModifiedInstance(false) ->filterByDbModifiedInstance(false)
->findOne(); ->findOne();
if(is_null($showInstancesRow)){ if (is_null($showInstancesRow)) {
$sql = "DELETE FROM cc_show WHERE id = {$this->_showId}"; $sql = "DELETE FROM cc_show WHERE id = {$this->_showId}";
$con->exec($sql); $con->exec($sql);
} }
@ -270,11 +278,11 @@ class Application_Model_Show {
->find(); ->find();
Logging::log("Unchecked days:"); Logging::log("Unchecked days:");
foreach($p_uncheckedDays as $day) { foreach ($p_uncheckedDays as $day) {
Logging::log($day); Logging::log($day);
} }
foreach($showDays as $showDay) { foreach ($showDays as $showDay) {
//Logging::log("Local show day is: {$showDay->getDbDay()}"); //Logging::log("Local show day is: {$showDay->getDbDay()}");
//Logging::log("First show day is: {$showDay->getDbFirstShow()}"); //Logging::log("First show day is: {$showDay->getDbFirstShow()}");
//Logging::log("Id show days is: {$showDay->getDbId()}"); //Logging::log("Id show days is: {$showDay->getDbId()}");
@ -313,7 +321,8 @@ class Application_Model_Show {
* @return boolean * @return boolean
* true if originated from recording, otherwise false. * true if originated from recording, otherwise false.
*/ */
public function isRecorded(){ public function isRecorded()
{
$showInstancesRow = CcShowInstancesQuery::create() $showInstancesRow = CcShowInstancesQuery::create()
->filterByDbShowId($this->getId()) ->filterByDbShowId($this->getId())
->filterByDbRecord(1) ->filterByDbRecord(1)
@ -412,10 +421,9 @@ class Application_Model_Show {
->filterByDbShowId($this->_showId) ->filterByDbShowId($this->_showId)
->findOne(); ->findOne();
if (!is_null($showDaysRow)){ if (!is_null($showDaysRow)) {
return ($showDaysRow->getDbRepeatType() != -1); return ($showDaysRow->getDbRepeatType() != -1);
} } else {
else {
return false; return false;
} }
} }
@ -434,9 +442,10 @@ class Application_Model_Show {
->filterByDbShowId($this->_showId) ->filterByDbShowId($this->_showId)
->findOne(); ->findOne();
if (!is_null($showDaysRow)){ if (!is_null($showDaysRow)) {
return $showDaysRow->getDbRepeatType(); return $showDaysRow->getDbRepeatType();
} else } else
return -1; return -1;
} }
@ -457,6 +466,7 @@ class Application_Model_Show {
." ORDER BY last_show DESC"; ." ORDER BY last_show DESC";
$query = $con->query($sql)->fetchColumn(0); $query = $con->query($sql)->fetchColumn(0);
return ($query !== false) ? $query : ""; return ($query !== false) ? $query : "";
} }
@ -470,7 +480,8 @@ class Application_Model_Show {
* it cause any scheduled playlists within those show instances to * it cause any scheduled playlists within those show instances to
* be gone for good. * be gone for good.
*/ */
public function deleteAllInstances(){ public function deleteAllInstances()
{
$con = Propel::getConnection(); $con = Propel::getConnection();
$timestamp = gmdate("Y-m-d H:i:s"); $timestamp = gmdate("Y-m-d H:i:s");
@ -487,7 +498,8 @@ class Application_Model_Show {
* Deletes all future rebroadcast instances of the current * Deletes all future rebroadcast instances of the current
* show object from the show_instances table. * show object from the show_instances table.
*/ */
public function deleteAllRebroadcasts(){ public function deleteAllRebroadcasts()
{
$con = Propel::getConnection(); $con = Propel::getConnection();
$timestamp = gmdate("Y-m-d H:i:s"); $timestamp = gmdate("Y-m-d H:i:s");
@ -510,12 +522,13 @@ class Application_Model_Show {
* @param string $p_date * @param string $p_date
* The date which to delete after, if null deletes from the current timestamp. * The date which to delete after, if null deletes from the current timestamp.
*/ */
public function removeAllInstancesFromDate($p_date=null){ public function removeAllInstancesFromDate($p_date=null)
{
$con = Propel::getConnection(); $con = Propel::getConnection();
$timestamp = gmdate("Y-m-d H:i:s"); $timestamp = gmdate("Y-m-d H:i:s");
if(is_null($p_date)) { if (is_null($p_date)) {
$date = new Application_Common_DateHelper; $date = new Application_Common_DateHelper;
$p_date = $date->getDate(); $p_date = $date->getDate();
} }
@ -542,7 +555,8 @@ class Application_Model_Show {
* @param string $p_date * @param string $p_date
* The date which to delete before * The date which to delete before
*/ */
public function removeAllInstancesBeforeDate($p_date){ public function removeAllInstancesBeforeDate($p_date)
{
$con = Propel::getConnection(); $con = Propel::getConnection();
$timestamp = gmdate("Y-m-d H:i:s"); $timestamp = gmdate("Y-m-d H:i:s");
@ -562,7 +576,8 @@ class Application_Model_Show {
* @return string * @return string
* The start date in the format YYYY-MM-DD * The start date in the format YYYY-MM-DD
*/ */
public function getStartDateAndTime(){ public function getStartDateAndTime()
{
$con = Propel::getConnection(); $con = Propel::getConnection();
$showId = $this->getId(); $showId = $this->getId();
@ -573,7 +588,7 @@ class Application_Model_Show {
$query = $con->query($sql); $query = $con->query($sql);
if ($query->rowCount() == 0){ if ($query->rowCount() == 0) {
return ""; return "";
} else { } else {
$rows = $query->fetchAll(); $rows = $query->fetchAll();
@ -581,6 +596,7 @@ class Application_Model_Show {
$dt = new DateTime($row["first_show"]." ".$row["start_time"], new DateTimeZone($row["timezone"])); $dt = new DateTime($row["first_show"]." ".$row["start_time"], new DateTimeZone($row["timezone"]));
$dt->setTimezone(new DateTimeZone("UTC")); $dt->setTimezone(new DateTimeZone("UTC"));
return $dt->format("Y-m-d H:i"); return $dt->format("Y-m-d H:i");
} }
} }
@ -591,8 +607,10 @@ class Application_Model_Show {
* @return string * @return string
* The start date in the format YYYY-MM-DD * The start date in the format YYYY-MM-DD
*/ */
public function getStartDate(){ public function getStartDate()
{
list($date,) = explode(" ", $this->getStartDateAndTime()); list($date,) = explode(" ", $this->getStartDateAndTime());
return $date; return $date;
} }
@ -603,8 +621,10 @@ class Application_Model_Show {
* The start time in the format HH:MM * The start time in the format HH:MM
*/ */
public function getStartTime(){ public function getStartTime()
{
list(,$time) = explode(" ", $this->getStartDateAndTime()); list(,$time) = explode(" ", $this->getStartDateAndTime());
return $time; return $time;
} }
@ -615,7 +635,8 @@ class Application_Model_Show {
* @return string * @return string
* The end date in the format YYYY-MM-DD * The end date in the format YYYY-MM-DD
*/ */
public function getEndDate(){ public function getEndDate()
{
$startDate = $this->getStartDate(); $startDate = $this->getStartDate();
$startTime = $this->getStartTime(); $startTime = $this->getStartTime();
$duration = $this->getDuration(); $duration = $this->getDuration();
@ -634,7 +655,8 @@ class Application_Model_Show {
* @return string * @return string
* The start time in the format HH:MM:SS * The start time in the format HH:MM:SS
*/ */
public function getEndTime(){ public function getEndTime()
{
$startDate = $this->getStartDate(); $startDate = $this->getStartDate();
$startTime = $this->getStartTime(); $startTime = $this->getStartTime();
$duration = $this->getDuration(); $duration = $this->getDuration();
@ -654,9 +676,11 @@ class Application_Model_Show {
* @return boolean * @return boolean
* true if the StartDate is in the past, false otherwise * true if the StartDate is in the past, false otherwise
*/ */
public function isStartDateTimeInPast(){ public function isStartDateTimeInPast()
{
$date = new Application_Common_DateHelper; $date = new Application_Common_DateHelper;
$current_timestamp = $date->getUtcTimestamp(); $current_timestamp = $date->getUtcTimestamp();
return ($current_timestamp > ($this->getStartDate()." ".$this->getStartTime())); return ($current_timestamp > ($this->getStartDate()." ".$this->getStartTime()));
} }
@ -667,7 +691,8 @@ class Application_Model_Show {
* A simple array containing all ID's of show instance * A simple array containing all ID's of show instance
* scheduled in the future. * scheduled in the future.
*/ */
public function getAllFutureInstanceIds(){ public function getAllFutureInstanceIds()
{
$con = Propel::getConnection(); $con = Propel::getConnection();
$date = new Application_Common_DateHelper; $date = new Application_Common_DateHelper;
@ -685,6 +710,7 @@ class Application_Model_Show {
foreach ($rows as $row) { foreach ($rows as $row) {
$instance_ids[] = $row["id"]; $instance_ids[] = $row["id"];
} }
return $instance_ids; return $instance_ids;
} }
@ -695,7 +721,8 @@ class Application_Model_Show {
* browser. * browser.
* *
*/ */
private function updateDurationTime($p_data){ private function updateDurationTime($p_data)
{
//need to update cc_show_instances, cc_show_days //need to update cc_show_instances, cc_show_days
$con = Propel::getConnection(); $con = Propel::getConnection();
@ -713,10 +740,10 @@ class Application_Model_Show {
."AND ends > TIMESTAMP '$timestamp'"; ."AND ends > TIMESTAMP '$timestamp'";
$con->exec($sql); $con->exec($sql);
} }
private function updateStartDateTime($p_data, $p_endDate){ private function updateStartDateTime($p_data, $p_endDate)
{
//need to update cc_schedule, cc_show_instances, cc_show_days //need to update cc_schedule, cc_show_instances, cc_show_days
$con = Propel::getConnection(); $con = Propel::getConnection();
@ -727,7 +754,7 @@ class Application_Model_Show {
$sql = "UPDATE cc_show_days " $sql = "UPDATE cc_show_days "
."SET start_time = TIME '$p_data[add_show_start_time]', " ."SET start_time = TIME '$p_data[add_show_start_time]', "
."first_show = DATE '$p_data[add_show_start_date]', "; ."first_show = DATE '$p_data[add_show_start_date]', ";
if (strlen ($p_endDate) == 0){ if (strlen ($p_endDate) == 0) {
$sql .= "last_show = NULL "; $sql .= "last_show = NULL ";
} else { } else {
$sql .= "last_show = DATE '$p_endDate' "; $sql .= "last_show = DATE '$p_endDate' ";
@ -747,7 +774,7 @@ class Application_Model_Show {
$con->exec($sql); $con->exec($sql);
$showInstanceIds = $this->getAllFutureInstanceIds(); $showInstanceIds = $this->getAllFutureInstanceIds();
if (count($showInstanceIds) > 0 && $diff != 0){ if (count($showInstanceIds) > 0 && $diff != 0) {
$showIdsImploded = implode(",", $showInstanceIds); $showIdsImploded = implode(",", $showInstanceIds);
$sql = "UPDATE cc_schedule " $sql = "UPDATE cc_schedule "
."SET starts = starts + INTERVAL '$diff sec', " ."SET starts = starts + INTERVAL '$diff sec', "
@ -757,21 +784,24 @@ class Application_Model_Show {
} }
} }
public function getDuration($format=false){ public function getDuration($format=false)
{
$showDay = CcShowDaysQuery::create()->filterByDbShowId($this->getId())->findOne(); $showDay = CcShowDaysQuery::create()->filterByDbShowId($this->getId())->findOne();
if(!$format){ if (!$format) {
return $showDay->getDbDuration(); return $showDay->getDbDuration();
}else{ } else {
$info = explode(':',$showDay->getDbDuration()); $info = explode(':',$showDay->getDbDuration());
return str_pad(intval($info[0]),2,'0',STR_PAD_LEFT).'h '.str_pad(intval($info[1]),2,'0',STR_PAD_LEFT).'m'; return str_pad(intval($info[0]),2,'0',STR_PAD_LEFT).'h '.str_pad(intval($info[1]),2,'0',STR_PAD_LEFT).'m';
} }
} }
public function getShowDays(){ public function getShowDays()
{
$showDays = CcShowDaysQuery::create()->filterByDbShowId($this->getId())->find(); $showDays = CcShowDaysQuery::create()->filterByDbShowId($this->getId())->find();
$days = array(); $days = array();
foreach ($showDays as $showDay){ foreach ($showDays as $showDay) {
array_push($days, $showDay->getDbDay()); array_push($days, $showDay->getDbDay());
} }
@ -781,7 +811,8 @@ class Application_Model_Show {
/* Only used for shows that aren't repeating. /* Only used for shows that aren't repeating.
* *
* @return Boolean: true if show has an instance, otherwise false. */ * @return Boolean: true if show has an instance, otherwise false. */
public function hasInstance(){ public function hasInstance()
{
return (!is_null($this->getInstance())); return (!is_null($this->getInstance()));
} }
@ -789,7 +820,8 @@ class Application_Model_Show {
* *
* @return CcShowInstancesQuery: An propel object representing a * @return CcShowInstancesQuery: An propel object representing a
* row in the cc_show_instances table. */ * row in the cc_show_instances table. */
public function getInstance(){ public function getInstance()
{
$showInstance = CcShowInstancesQuery::create() $showInstance = CcShowInstancesQuery::create()
->filterByDbShowId($this->getId()) ->filterByDbShowId($this->getId())
->findOne(); ->findOne();
@ -800,17 +832,19 @@ class Application_Model_Show {
/** /**
* returns info about live stream override info * returns info about live stream override info
*/ */
public function getLiveStreamInfo(){ public function getLiveStreamInfo()
{
$info = array(); $info = array();
if($this->_showId == null){ if ($this->_showId == null) {
return $info; return $info;
}else{ } else {
$ccShow = CcShowQuery::create()->findPK($this->_showId); $ccShow = CcShowQuery::create()->findPK($this->_showId);
$info['custom_username'] = $ccShow->getDbLiveStreamUser(); $info['custom_username'] = $ccShow->getDbLiveStreamUser();
$info['cb_airtime_auth'] = $ccShow->getDbLiveStreamUsingAirtimeAuth(); $info['cb_airtime_auth'] = $ccShow->getDbLiveStreamUsingAirtimeAuth();
$info['cb_custom_auth'] = $ccShow->getDbLiveStreamUsingCustomAuth(); $info['cb_custom_auth'] = $ccShow->getDbLiveStreamUsingCustomAuth();
$info['custom_username'] = $ccShow->getDbLiveStreamUser(); $info['custom_username'] = $ccShow->getDbLiveStreamUser();
$info['custom_password'] = $ccShow->getDbLiveStreamPass(); $info['custom_password'] = $ccShow->getDbLiveStreamPass();
return $info; return $info;
} }
} }
@ -825,11 +859,11 @@ class Application_Model_Show {
* *
* @return Boolean: true if show has an instance on $p_dateTime, * @return Boolean: true if show has an instance on $p_dateTime,
* otherwise false. */ * otherwise false. */
public function hasInstanceOnDate($p_dateTime){ public function hasInstanceOnDate($p_dateTime)
{
return (!is_null($this->getInstanceOnDate($p_dateTime))); return (!is_null($this->getInstanceOnDate($p_dateTime)));
} }
/* Only used for shows that are repeating. Note that this will return /* Only used for shows that are repeating. Note that this will return
* shows that have been "modified" (does not check if the "modified_instance" * shows that have been "modified" (does not check if the "modified_instance"
* column is set to true). This is intended behaviour. * column is set to true). This is intended behaviour.
@ -838,7 +872,8 @@ class Application_Model_Show {
* *
* @return CcShowInstancesQuery: An propel object representing a * @return CcShowInstancesQuery: An propel object representing a
* row in the cc_show_instances table. */ * row in the cc_show_instances table. */
public function getInstanceOnDate($p_dateTime){ public function getInstanceOnDate($p_dateTime)
{
$con = Propel::getConnection(); $con = Propel::getConnection();
$timestamp = $p_dateTime->format("Y-m-d H:i:s"); $timestamp = $p_dateTime->format("Y-m-d H:i:s");
@ -850,23 +885,24 @@ class Application_Model_Show {
$query = $con->query($sql); $query = $con->query($sql);
$row = ($query !== false) ? $query->fetchColumn(0) : null; $row = ($query !== false) ? $query->fetchColumn(0) : null;
return CcShowInstancesQuery::create() return CcShowInstancesQuery::create()
->findPk($row); ->findPk($row);
} }
public function deletePossiblyInvalidInstances($p_data, $p_endDate, $isRecorded, $repeatType) public function deletePossiblyInvalidInstances($p_data, $p_endDate, $isRecorded, $repeatType)
{ {
if ($p_data['add_show_repeats'] != $this->isRepeating()){ if ($p_data['add_show_repeats'] != $this->isRepeating()) {
//repeat option was toggled //repeat option was toggled
$this->deleteAllInstances(); $this->deleteAllInstances();
} }
if ($p_data['add_show_duration'] != $this->getDuration()){ if ($p_data['add_show_duration'] != $this->getDuration()) {
//duration has changed //duration has changed
$this->updateDurationTime($p_data); $this->updateDurationTime($p_data);
} }
if ($p_data['add_show_repeats']){ if ($p_data['add_show_repeats']) {
if (($repeatType == 1 || $repeatType == 2) && if (($repeatType == 1 || $repeatType == 2) &&
$p_data['add_show_start_date'] != $this->getStartDate()){ $p_data['add_show_start_date'] != $this->getStartDate()){
@ -877,28 +913,27 @@ class Application_Model_Show {
$this->deleteAllInstances(); $this->deleteAllInstances();
} }
if ($repeatType != $this->getRepeatType()){ if ($repeatType != $this->getRepeatType()) {
//repeat type changed. //repeat type changed.
$this->deleteAllInstances(); $this->deleteAllInstances();
} else { } else {
//repeat type is the same, check if the days of the week are the same //repeat type is the same, check if the days of the week are the same
$repeatingDaysChanged = false; $repeatingDaysChanged = false;
$showDaysArray = $this->getShowDays(); $showDaysArray = $this->getShowDays();
if (count($p_data['add_show_day_check']) == count($showDaysArray)){ if (count($p_data['add_show_day_check']) == count($showDaysArray)) {
//same number of days checked, lets see if they are the same numbers //same number of days checked, lets see if they are the same numbers
$intersect = array_intersect($p_data['add_show_day_check'], $showDaysArray); $intersect = array_intersect($p_data['add_show_day_check'], $showDaysArray);
if (count($intersect) != count($p_data['add_show_day_check'])){ if (count($intersect) != count($p_data['add_show_day_check'])) {
$repeatingDaysChanged = true; $repeatingDaysChanged = true;
} }
} } else {
else {
$repeatingDaysChanged = true; $repeatingDaysChanged = true;
} }
if ($repeatingDaysChanged){ if ($repeatingDaysChanged) {
$daysRemoved = array_diff($showDaysArray, $p_data['add_show_day_check']); $daysRemoved = array_diff($showDaysArray, $p_data['add_show_day_check']);
if (count($daysRemoved) > 0){ if (count($daysRemoved) > 0) {
$this->removeUncheckedDaysInstances($daysRemoved); $this->removeUncheckedDaysInstances($daysRemoved);
} }
@ -910,7 +945,7 @@ class Application_Model_Show {
$newDate = strtotime($p_data['add_show_start_date']); $newDate = strtotime($p_data['add_show_start_date']);
$oldDate = strtotime($this->getStartDate()); $oldDate = strtotime($this->getStartDate());
if ($newDate > $oldDate){ if ($newDate > $oldDate) {
$this->removeAllInstancesBeforeDate($p_data['add_show_start_date']); $this->removeAllInstancesBeforeDate($p_data['add_show_start_date']);
} }
@ -920,20 +955,19 @@ class Application_Model_Show {
//Check if end date for the repeat option has changed. If so, need to take care //Check if end date for the repeat option has changed. If so, need to take care
//of deleting possible invalid Show Instances. //of deleting possible invalid Show Instances.
if ((strlen($this->getRepeatingEndDate()) == 0) == $p_data['add_show_no_end']){ if ((strlen($this->getRepeatingEndDate()) == 0) == $p_data['add_show_no_end']) {
//show "Never Ends" option was toggled. //show "Never Ends" option was toggled.
if ($p_data['add_show_no_end']){ if ($p_data['add_show_no_end']) {
} } else {
else {
$this->removeAllInstancesFromDate($p_endDate); $this->removeAllInstancesFromDate($p_endDate);
} }
} }
if ($this->getRepeatingEndDate() != $p_data['add_show_end_date']){ if ($this->getRepeatingEndDate() != $p_data['add_show_end_date']) {
//end date was changed. //end date was changed.
$newDate = strtotime($p_data['add_show_end_date']); $newDate = strtotime($p_data['add_show_end_date']);
$oldDate = strtotime($this->getRepeatingEndDate()); $oldDate = strtotime($this->getRepeatingEndDate());
if ($newDate < $oldDate){ if ($newDate < $oldDate) {
$this->removeAllInstancesFromDate($p_endDate); $this->removeAllInstancesFromDate($p_endDate);
} }
} }
@ -957,14 +991,12 @@ class Application_Model_Show {
if ($data['add_show_no_end']) { if ($data['add_show_no_end']) {
$endDate = NULL; $endDate = NULL;
} } elseif ($data['add_show_repeats']) {
else if ($data['add_show_repeats']) {
$endDateTime = new DateTime($data['add_show_end_date']); $endDateTime = new DateTime($data['add_show_end_date']);
//$endDateTime->setTimezone(new DateTimeZone('UTC')); //$endDateTime->setTimezone(new DateTimeZone('UTC'));
$endDateTime->add(new DateInterval("P1D")); $endDateTime->add(new DateInterval("P1D"));
$endDate = $endDateTime->format("Y-m-d"); $endDate = $endDateTime->format("Y-m-d");
} } else {
else {
$endDateTime = new DateTime($data['add_show_start_date']); $endDateTime = new DateTime($data['add_show_start_date']);
//$endDateTime->setTimezone(new DateTimeZone('UTC')); //$endDateTime->setTimezone(new DateTimeZone('UTC'));
$endDateTime->add(new DateInterval("P1D")); $endDateTime->add(new DateInterval("P1D"));
@ -978,14 +1010,14 @@ class Application_Model_Show {
$startDow = date("w", $startDateTime->getTimestamp()); $startDow = date("w", $startDateTime->getTimestamp());
if (!$data['add_show_repeats']) { if (!$data['add_show_repeats']) {
$data['add_show_day_check'] = array($startDow); $data['add_show_day_check'] = array($startDow);
} else if ($data['add_show_repeats'] && $data['add_show_day_check'] == "") { } elseif ($data['add_show_repeats'] && $data['add_show_day_check'] == "") {
$data['add_show_day_check'] = array($startDow); $data['add_show_day_check'] = array($startDow);
} }
//find repeat type or set to a non repeating show. //find repeat type or set to a non repeating show.
$repeatType = ($data['add_show_repeats']) ? $data['add_show_repeat_type'] : -1; $repeatType = ($data['add_show_repeats']) ? $data['add_show_repeat_type'] : -1;
if ($data['add_show_id'] == -1){ if ($data['add_show_id'] == -1) {
$ccShow = new CcShow(); $ccShow = new CcShow();
} else { } else {
$ccShow = CcShowQuery::create()->findPK($data['add_show_id']); $ccShow = CcShowQuery::create()->findPK($data['add_show_id']);
@ -1006,19 +1038,19 @@ class Application_Model_Show {
$isRecorded = (isset($data['add_show_record']) && $data['add_show_record']) ? 1 : 0; $isRecorded = (isset($data['add_show_record']) && $data['add_show_record']) ? 1 : 0;
if ($data['add_show_id'] != -1){ if ($data['add_show_id'] != -1) {
$show = new Application_Model_Show($showId); $show = new Application_Model_Show($showId);
$show->deletePossiblyInvalidInstances($data, $endDate, $isRecorded, $repeatType); $show->deletePossiblyInvalidInstances($data, $endDate, $isRecorded, $repeatType);
} }
//check if we are adding or updating a show, and if updating //check if we are adding or updating a show, and if updating
//erase all the show's show_days information first. //erase all the show's show_days information first.
if ($data['add_show_id'] != -1){ if ($data['add_show_id'] != -1) {
CcShowDaysQuery::create()->filterByDbShowId($data['add_show_id'])->delete(); CcShowDaysQuery::create()->filterByDbShowId($data['add_show_id'])->delete();
} }
//don't set day for monthly repeat type, it's invalid. //don't set day for monthly repeat type, it's invalid.
if ($data['add_show_repeats'] && $data['add_show_repeat_type'] == 2){ if ($data['add_show_repeats'] && $data['add_show_repeat_type'] == 2) {
$showDay = new CcShowDays(); $showDay = new CcShowDays();
$showDay->setDbFirstShow($startDateTime->format("Y-m-d")); $showDay->setDbFirstShow($startDateTime->format("Y-m-d"));
$showDay->setDbLastShow($endDate); $showDay->setDbLastShow($endDate);
@ -1033,7 +1065,7 @@ class Application_Model_Show {
foreach ($data['add_show_day_check'] as $day) { foreach ($data['add_show_day_check'] as $day) {
$daysAdd=0; $daysAdd=0;
$startDateTimeClone = clone $startDateTime; $startDateTimeClone = clone $startDateTime;
if ($startDow !== $day){ if ($startDow !== $day) {
if ($startDow > $day) if ($startDow > $day)
$daysAdd = 6 - $startDow + 1 + $day; $daysAdd = 6 - $startDow + 1 + $day;
else else
@ -1059,7 +1091,7 @@ class Application_Model_Show {
//check if we are adding or updating a show, and if updating //check if we are adding or updating a show, and if updating
//erase all the show's future show_rebroadcast information first. //erase all the show's future show_rebroadcast information first.
if (($data['add_show_id'] != -1) && isset($data['add_show_rebroadcast']) && $data['add_show_rebroadcast']){ if (($data['add_show_id'] != -1) && isset($data['add_show_rebroadcast']) && $data['add_show_rebroadcast']) {
CcShowRebroadcastQuery::create() CcShowRebroadcastQuery::create()
->filterByDbShowId($data['add_show_id']) ->filterByDbShowId($data['add_show_id'])
->delete(); ->delete();
@ -1075,8 +1107,7 @@ class Application_Model_Show {
$showRebroad->save(); $showRebroad->save();
} }
} }
} } elseif ($isRecorded && $data['add_show_rebroadcast'] && ($repeatType == -1)) {
else if ($isRecorded && $data['add_show_rebroadcast'] && ($repeatType == -1)){
for ($i=1; $i<=10; $i++) { for ($i=1; $i<=10; $i++) {
if ($data['add_show_rebroadcast_date_absolute_'.$i]) { if ($data['add_show_rebroadcast_date_absolute_'.$i]) {
$con = Propel::getConnection(CcShowPeer::DATABASE_NAME); $con = Propel::getConnection(CcShowPeer::DATABASE_NAME);
@ -1095,7 +1126,7 @@ class Application_Model_Show {
//check if we are adding or updating a show, and if updating //check if we are adding or updating a show, and if updating
//erase all the show's show_rebroadcast information first. //erase all the show's show_rebroadcast information first.
if ($data['add_show_id'] != -1){ if ($data['add_show_id'] != -1) {
CcShowHostsQuery::create()->filterByDbShow($data['add_show_id'])->delete(); CcShowHostsQuery::create()->filterByDbShow($data['add_show_id'])->delete();
} }
if (is_array($data['add_show_hosts'])) { if (is_array($data['add_show_hosts'])) {
@ -1127,8 +1158,7 @@ class Application_Model_Show {
} }
$con->commit(); $con->commit();
} } catch (Exception $e) {
catch (Exception $e) {
$con->rollback(); $con->rollback();
Logging::log("Couldn't update schedule status."); Logging::log("Couldn't update schedule status.");
Logging::log($e->getMessage()); Logging::log($e->getMessage());
@ -1137,6 +1167,7 @@ class Application_Model_Show {
Application_Model_Show::populateShowUntil($showId); Application_Model_Show::populateShowUntil($showId);
Application_Model_RabbitMq::PushSchedule(); Application_Model_RabbitMq::PushSchedule();
return $showId; return $showId;
} }
@ -1178,17 +1209,15 @@ class Application_Model_Show {
* @param DateTime $p_populateUntilDateTime * @param DateTime $p_populateUntilDateTime
* DateTime object in UTC time. * DateTime object in UTC time.
*/ */
private static function populateShow($p_showDaysRow, $p_populateUntilDateTime) { private static function populateShow($p_showDaysRow, $p_populateUntilDateTime)
if($p_showDaysRow["repeat_type"] == -1) { {
if ($p_showDaysRow["repeat_type"] == -1) {
Application_Model_Show::populateNonRepeatingShow($p_showDaysRow, $p_populateUntilDateTime); Application_Model_Show::populateNonRepeatingShow($p_showDaysRow, $p_populateUntilDateTime);
} } elseif ($p_showDaysRow["repeat_type"] == 0) {
else if($p_showDaysRow["repeat_type"] == 0) {
Application_Model_Show::populateRepeatingShow($p_showDaysRow, $p_populateUntilDateTime, 'P7D'); Application_Model_Show::populateRepeatingShow($p_showDaysRow, $p_populateUntilDateTime, 'P7D');
} } elseif ($p_showDaysRow["repeat_type"] == 1) {
else if($p_showDaysRow["repeat_type"] == 1) {
Application_Model_Show::populateRepeatingShow($p_showDaysRow, $p_populateUntilDateTime, 'P14D'); Application_Model_Show::populateRepeatingShow($p_showDaysRow, $p_populateUntilDateTime, 'P14D');
} } elseif ($p_showDaysRow["repeat_type"] == 2) {
else if($p_showDaysRow["repeat_type"] == 2) {
Application_Model_Show::populateRepeatingShow($p_showDaysRow, $p_populateUntilDateTime, 'P1M'); Application_Model_Show::populateRepeatingShow($p_showDaysRow, $p_populateUntilDateTime, 'P1M');
} }
Application_Model_RabbitMq::PushSchedule(); Application_Model_RabbitMq::PushSchedule();
@ -1222,7 +1251,7 @@ class Application_Model_Show {
$currentUtcTimestamp = gmdate("Y-m-d H:i:s"); $currentUtcTimestamp = gmdate("Y-m-d H:i:s");
$show = new Application_Model_Show($show_id); $show = new Application_Model_Show($show_id);
if ($show->hasInstance()){ if ($show->hasInstance()) {
$ccShowInstance = $show->getInstance(); $ccShowInstance = $show->getInstance();
$newInstance = false; $newInstance = false;
} else { } else {
@ -1230,7 +1259,7 @@ class Application_Model_Show {
$newInstance = true; $newInstance = true;
} }
if ($newInstance || $ccShowInstance->getDbStarts() > $currentUtcTimestamp){ if ($newInstance || $ccShowInstance->getDbStarts() > $currentUtcTimestamp) {
$ccShowInstance->setDbShowId($show_id); $ccShowInstance->setDbShowId($show_id);
$ccShowInstance->setDbStarts($utcStartDateTime); $ccShowInstance->setDbStarts($utcStartDateTime);
$ccShowInstance->setDbEnds($utcEndDateTime); $ccShowInstance->setDbEnds($utcEndDateTime);
@ -1241,14 +1270,14 @@ class Application_Model_Show {
$show_instance_id = $ccShowInstance->getDbId(); $show_instance_id = $ccShowInstance->getDbId();
$showInstance = new Application_Model_ShowInstance($show_instance_id); $showInstance = new Application_Model_ShowInstance($show_instance_id);
if (!$newInstance){ if (!$newInstance) {
$showInstance->correctScheduleStartTimes(); $showInstance->correctScheduleStartTimes();
} }
$sql = "SELECT * FROM cc_show_rebroadcast WHERE show_id={$show_id}"; $sql = "SELECT * FROM cc_show_rebroadcast WHERE show_id={$show_id}";
$rebroadcasts = $con->query($sql)->fetchAll(); $rebroadcasts = $con->query($sql)->fetchAll();
if ($showInstance->isRecorded()){ if ($showInstance->isRecorded()) {
$showInstance->deleteRebroadcasts(); $showInstance->deleteRebroadcasts();
self::createRebroadcastInstances($rebroadcasts, $currentUtcTimestamp, $show_id, $show_instance_id, $start, $duration, $timezone); self::createRebroadcastInstances($rebroadcasts, $currentUtcTimestamp, $show_id, $show_instance_id, $start, $duration, $timezone);
} }
@ -1283,7 +1312,7 @@ class Application_Model_Show {
$currentUtcTimestamp = gmdate("Y-m-d H:i:s"); $currentUtcTimestamp = gmdate("Y-m-d H:i:s");
if(isset($next_pop_date)) { if (isset($next_pop_date)) {
$start = $next_pop_date." ".$start_time; $start = $next_pop_date." ".$start_time;
} else { } else {
$start = $first_show." ".$start_time; $start = $first_show." ".$start_time;
@ -1303,10 +1332,10 @@ class Application_Model_Show {
list($utcStartDateTime, $utcEndDateTime) = self::createUTCStartEndDateTime($start, $duration, $timezone); list($utcStartDateTime, $utcEndDateTime) = self::createUTCStartEndDateTime($start, $duration, $timezone);
if ($show->hasInstanceOnDate($utcStartDateTime)){ if ($show->hasInstanceOnDate($utcStartDateTime)) {
$ccShowInstance = $show->getInstanceOnDate($utcStartDateTime); $ccShowInstance = $show->getInstanceOnDate($utcStartDateTime);
if ($ccShowInstance->getDbModifiedInstance()){ if ($ccShowInstance->getDbModifiedInstance()) {
//show instance on this date has been deleted. //show instance on this date has been deleted.
list($start, $utcStartDateTime) = self::advanceRepeatingDate($p_interval, $start, $timezone); list($start, $utcStartDateTime) = self::advanceRepeatingDate($p_interval, $start, $timezone);
continue; continue;
@ -1321,7 +1350,7 @@ class Application_Model_Show {
/* When editing the start/end time of a repeating show, we don't want to /* When editing the start/end time of a repeating show, we don't want to
* change shows that started in the past. So check the start time. * change shows that started in the past. So check the start time.
*/ */
if ($newInstance || $ccShowInstance->getDbStarts() > $currentUtcTimestamp){ if ($newInstance || $ccShowInstance->getDbStarts() > $currentUtcTimestamp) {
$ccShowInstance->setDbShowId($show_id); $ccShowInstance->setDbShowId($show_id);
$ccShowInstance->setDbStarts($utcStartDateTime); $ccShowInstance->setDbStarts($utcStartDateTime);
$ccShowInstance->setDbEnds($utcEndDateTime); $ccShowInstance->setDbEnds($utcEndDateTime);
@ -1335,7 +1364,7 @@ class Application_Model_Show {
/* If we are updating a show then make sure that the scheduled content within /* If we are updating a show then make sure that the scheduled content within
* the show is updated to the correct time. */ * the show is updated to the correct time. */
if (!$newInstance){ if (!$newInstance) {
$showInstance->correctScheduleStartTimes(); $showInstance->correctScheduleStartTimes();
} }
@ -1348,9 +1377,10 @@ class Application_Model_Show {
Application_Model_Show::setNextPop($start, $show_id, $day); Application_Model_Show::setNextPop($start, $show_id, $day);
} }
private static function advanceRepeatingDate($p_interval, $start, $timezone){ private static function advanceRepeatingDate($p_interval, $start, $timezone)
{
$startDt = new DateTime($start, new DateTimeZone($timezone)); $startDt = new DateTime($start, new DateTimeZone($timezone));
if ($p_interval == 'P1M'){ if ($p_interval == 'P1M') {
/* When adding months, there is a problem if we are on January 31st and add one month with PHP. /* When adding months, there is a problem if we are on January 31st and add one month with PHP.
* What ends up happening is that since February 31st doesn't exist, the date returned is * What ends up happening is that since February 31st doesn't exist, the date returned is
* March 3rd. For now let's ignore the day and assume we are always working with the * March 3rd. For now let's ignore the day and assume we are always working with the
@ -1366,7 +1396,7 @@ class Application_Model_Show {
* we are looking for (31st day for example) */ * we are looking for (31st day for example) */
do { do {
$dt->add(new DateInterval($p_interval)); $dt->add(new DateInterval($p_interval));
} while(!checkdate($dt->format("m"), $startDt->format("d"), $dt->format("Y"))); } while (!checkdate($dt->format("m"), $startDt->format("d"), $dt->format("Y")));
$dt->setDate($dt->format("Y"), $dt->format("m"), $startDt->format("d")); $dt->setDate($dt->format("Y"), $dt->format("m"), $startDt->format("d"));
@ -1411,6 +1441,7 @@ class Application_Model_Show {
$duration = explode(":", $p_duration); $duration = explode(":", $p_duration);
list($hours, $mins) = array_slice($duration, 0, 2); list($hours, $mins) = array_slice($duration, 0, 2);
$endDateTime->add(new DateInterval("PT{$hours}H{$mins}M")); $endDateTime->add(new DateInterval("PT{$hours}H{$mins}M"));
return array($startDateTime, $endDateTime); return array($startDateTime, $endDateTime);
} }
@ -1433,14 +1464,14 @@ class Application_Model_Show {
* string of user's timezone "Europe/Prague" * string of user's timezone "Europe/Prague"
* *
*/ */
private static function createRebroadcastInstances($p_rebroadcasts, $p_currentUtcTimestamp, $p_showId, $p_showInstanceId, $p_startTime, $p_duration, $p_timezone=null){ private static function createRebroadcastInstances($p_rebroadcasts, $p_currentUtcTimestamp, $p_showId, $p_showInstanceId, $p_startTime, $p_duration, $p_timezone=null)
{
//Y-m-d //Y-m-d
//use only the date part of the show start time stamp for the offsets to work properly. //use only the date part of the show start time stamp for the offsets to work properly.
$date = explode(" ", $p_startTime); $date = explode(" ", $p_startTime);
$start_date = $date[0]; $start_date = $date[0];
foreach($p_rebroadcasts as $rebroadcast) { foreach ($p_rebroadcasts as $rebroadcast) {
$days = explode(" ", $rebroadcast["day_offset"]); $days = explode(" ", $rebroadcast["day_offset"]);
$time = explode(":", $rebroadcast["start_time"]); $time = explode(":", $rebroadcast["start_time"]);
@ -1448,7 +1479,7 @@ class Application_Model_Show {
list($utcStartDateTime, $utcEndDateTime) = Application_Model_Show::createUTCStartEndDateTime($start_date, $p_duration, $p_timezone, $offset); list($utcStartDateTime, $utcEndDateTime) = Application_Model_Show::createUTCStartEndDateTime($start_date, $p_duration, $p_timezone, $offset);
if ($utcStartDateTime->format("Y-m-d H:i:s") > $p_currentUtcTimestamp){ if ($utcStartDateTime->format("Y-m-d H:i:s") > $p_currentUtcTimestamp) {
$newRebroadcastInstance = new CcShowInstances(); $newRebroadcastInstance = new CcShowInstances();
$newRebroadcastInstance->setDbShowId($p_showId); $newRebroadcastInstance->setDbShowId($p_showId);
@ -1500,8 +1531,7 @@ class Application_Model_Show {
$sql = $sql." AND (si1.starts >= '{$start_string}' AND si1.starts < timestamp '{$end_string}')"; $sql = $sql." AND (si1.starts >= '{$start_string}' AND si1.starts < timestamp '{$end_string}')";
$sql = $sql." AND (si1.record = 1)"; $sql = $sql." AND (si1.record = 1)";
} } else {
else {
$sql = $sql." AND ((si1.starts >= '{$start_string}' AND si1.starts < '{$end_string}') $sql = $sql." AND ((si1.starts >= '{$start_string}' AND si1.starts < '{$end_string}')
OR (si1.ends > '{$start_string}' AND si1.ends <= '{$end_string}') OR (si1.ends > '{$start_string}' AND si1.ends <= '{$end_string}')
@ -1510,7 +1540,7 @@ class Application_Model_Show {
if (isset($excludeInstance)) { if (isset($excludeInstance)) {
foreach($excludeInstance as $instance) { foreach ($excludeInstance as $instance) {
$sql_exclude[] = "si1.id != {$instance}"; $sql_exclude[] = "si1.id != {$instance}";
} }
@ -1520,6 +1550,7 @@ class Application_Model_Show {
} }
$result = $con->query($sql)->fetchAll(); $result = $con->query($sql)->fetchAll();
return $result; return $result;
} }
@ -1551,8 +1582,7 @@ class Application_Model_Show {
$endTimeString = $p_endTimestamp->format("Y-m-d H:i:s"); $endTimeString = $p_endTimestamp->format("Y-m-d H:i:s");
if (!is_null($p_startTimestamp)) { if (!is_null($p_startTimestamp)) {
$startTimeString = $p_startTimestamp->format("Y-m-d H:i:s"); $startTimeString = $p_startTimestamp->format("Y-m-d H:i:s");
} } else {
else {
$today_timestamp = new DateTime("now", new DateTimeZone("UTC")); $today_timestamp = new DateTime("now", new DateTimeZone("UTC"));
$startTimeString = $today_timestamp->format("Y-m-d H:i:s"); $startTimeString = $today_timestamp->format("Y-m-d H:i:s");
} }
@ -1605,11 +1635,9 @@ class Application_Model_Show {
if ($p_editable && $show["record"] && $nowEpoch > $startsEpoch) { if ($p_editable && $show["record"] && $nowEpoch > $startsEpoch) {
$options["editable"] = false; $options["editable"] = false;
} } elseif ($p_editable && $show["rebroadcast"] && $nowEpoch > $parentStartsEpoch) {
else if ($p_editable && $show["rebroadcast"] && $nowEpoch > $parentStartsEpoch) {
$options["editable"] = false; $options["editable"] = false;
} } elseif ($p_editable && $nowEpoch < $endsEpoch) {
else if ($p_editable && $nowEpoch < $endsEpoch) {
$options["editable"] = true; $options["editable"] = true;
} }
$events[] = Application_Model_Show::makeFullCalendarEvent($show, $options); $events[] = Application_Model_Show::makeFullCalendarEvent($show, $options);
@ -1622,7 +1650,8 @@ class Application_Model_Show {
* Calculates the percentage of a show scheduled given the start and end times in date/time format * Calculates the percentage of a show scheduled given the start and end times in date/time format
* and the time_filled as the total time the schow is scheduled for in time format. * and the time_filled as the total time the schow is scheduled for in time format.
**/ **/
private static function getPercentScheduled($p_starts, $p_ends, $p_time_filled){ private static function getPercentScheduled($p_starts, $p_ends, $p_time_filled)
{
$durationSeconds = (strtotime($p_ends) - strtotime($p_starts)); $durationSeconds = (strtotime($p_ends) - strtotime($p_starts));
$time_filled = Application_Model_Schedule::WallTimeToMillisecs($p_time_filled) / 1000; $time_filled = Application_Model_Schedule::WallTimeToMillisecs($p_time_filled) / 1000;
$percent = ceil(( $time_filled / $durationSeconds) * 100); $percent = ceil(( $time_filled / $durationSeconds) * 100);
@ -1652,7 +1681,7 @@ class Application_Model_Show {
$event["rebroadcast"] = intval($show["rebroadcast"]); $event["rebroadcast"] = intval($show["rebroadcast"]);
// get soundcloud_id // get soundcloud_id
if (!is_null($show["file_id"])){ if (!is_null($show["file_id"])) {
$file = Application_Model_StoredFile::Recall($show["file_id"]); $file = Application_Model_StoredFile::Recall($show["file_id"]);
$soundcloud_id = $file->getSoundCloudId(); $soundcloud_id = $file->getSoundCloudId();
} }
@ -1677,8 +1706,8 @@ class Application_Model_Show {
/* Takes in a UTC DateTime object. /* Takes in a UTC DateTime object.
* Converts this to local time, since cc_show days * Converts this to local time, since cc_show days
* requires local time. */ * requires local time. */
public function setShowFirstShow($p_dt){ public function setShowFirstShow($p_dt)
{
//clone object since we are modifying it and it was passed by reference. //clone object since we are modifying it and it was passed by reference.
$dt = clone $p_dt; $dt = clone $p_dt;
@ -1697,8 +1726,8 @@ class Application_Model_Show {
/* Takes in a UTC DateTime object /* Takes in a UTC DateTime object
* Converts this to local time, since cc_show days * Converts this to local time, since cc_show days
* requires local time. */ * requires local time. */
public function setShowLastShow($p_dt){ public function setShowLastShow($p_dt)
{
//clone object since we are modifying it and it was passed by reference. //clone object since we are modifying it and it was passed by reference.
$dt = clone $p_dt; $dt = clone $p_dt;
@ -1726,7 +1755,7 @@ class Application_Model_Show {
{ {
global $CC_CONFIG; global $CC_CONFIG;
$con = Propel::getConnection(); $con = Propel::getConnection();
if($timeNow == null){ if ($timeNow == null) {
$date = new Application_Common_DateHelper; $date = new Application_Common_DateHelper;
$timeNow = $date->getUtcTimestamp(); $timeNow = $date->getUtcTimestamp();
} }
@ -1741,6 +1770,7 @@ class Application_Model_Show {
// Convert back to local timezone // Convert back to local timezone
$rows = $con->query($sql)->fetchAll(); $rows = $con->query($sql)->fetchAll();
return $rows; return $rows;
} }
@ -1884,6 +1914,7 @@ class Application_Model_Show {
} }
$rows = $con->query($sql)->fetchAll(); $rows = $con->query($sql)->fetchAll();
return $rows; return $rows;
} }

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,8 +60,8 @@ 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()
@ -77,8 +77,8 @@ class Application_Model_ShowBuilder {
} }
//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,18 +130,15 @@ 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;
} }
@ -163,8 +160,8 @@ class Application_Model_ShowBuilder {
} }
} }
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);
@ -188,8 +185,7 @@ class Application_Model_ShowBuilder {
$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()) {
@ -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"])) {
@ -283,8 +279,7 @@ class Application_Model_ShowBuilder {
$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"]);
@ -305,8 +300,8 @@ class Application_Model_ShowBuilder {
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"]);
@ -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,8 +363,7 @@ 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"));
} }
@ -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"];
} }

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);
} }
@ -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'));
} }
@ -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,7 +700,8 @@ 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();
@ -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);
} }
@ -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])) {
@ -217,6 +217,7 @@ class Application_Model_StoredFile {
{ {
$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'];
} }
@ -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,6 +918,7 @@ 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);
} }
@ -924,6 +928,7 @@ Logging::log("getting media! - 2");
$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);
} }
@ -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;
@ -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) {
@ -257,6 +259,7 @@ class Application_Model_StreamSetting {
} else { } else {
$result = true; $result = true;
} }
return $result; return $result;
} }
@ -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)
@ -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,14 +6,14 @@ 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
@ -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()