/** * Simply sets up the view to play the required audio track. * Gets the parameters from the request and sets them to the view. */ public function audioPreviewAction() { $CC_CONFIG = Config::getConfig(); $audioFileID = $this->_getParam('audioFileID'); $audioFileArtist = $this->_getParam('audioFileArtist'); $audioFileTitle = $this->_getParam('audioFileTitle'); $type = $this->_getParam('type'); $baseUrl = Application_Common_OsPath::getBaseDir(); $this->view->headScript()->appendFile($baseUrl . 'js/airtime/audiopreview/preview_jplayer.js?' . $CC_CONFIG['airtime_version'], 'text/javascript'); $this->view->headScript()->appendFile($baseUrl . 'js/jplayer/jplayer.playlist.min.js?' . $CC_CONFIG['airtime_version'], 'text/javascript'); $this->view->headLink()->appendStylesheet($baseUrl . 'js/jplayer/skin/jplayer.airtime.audio.preview.css?' . $CC_CONFIG['airtime_version']); $this->_helper->layout->setLayout('audioPlayer'); $logo = Application_Model_Preference::GetStationLogo(); if ($logo) { $this->view->logo = "data:image/png;base64,{$logo}"; } else { $this->view->logo = $baseUrl . "css/images/airtime_logo_jp.png"; } if ($type == "audioclip") { $uri = $baseUrl . "api/get-media/file/" . $audioFileID; $media = Application_Model_StoredFile::RecallById($audioFileID); $mime = $media->getPropelOrm()->getDbMime(); } elseif ($type == "stream") { $webstream = CcWebstreamQuery::create()->findPk($audioFileID); $uri = $webstream->getDbUrl(); $mime = $webstream->getDbMime(); } else { throw new Exception("Unknown type for audio preview!.Type={$type}"); } $this->view->uri = $uri; $this->view->mime = $mime; $this->view->audioFileID = $audioFileID; // We need to decode artist and title because it gets // encoded twice in js $this->view->audioFileArtist = htmlspecialchars(urldecode($audioFileArtist)); $this->view->audioFileTitle = htmlspecialchars(urldecode($audioFileTitle)); $this->view->type = $type; $this->_helper->viewRenderer->setRender('audio-preview'); }
public function updateCueValuesBySilanAction() { $request = $this->getRequest(); $data = json_decode($request->getParam('data'), $assoc = true); foreach ($data as $pair) { list($id, $info) = $pair; // TODO : move this code into model -- RG $file = Application_Model_StoredFile::RecallById($p_id = $id)->getPropelOrm(); //What we are doing here is setting a more accurate length that was //calculated with silan by actually scanning the entire file. This //process takes a really long time, and so we only do it in the background //after the file has already been imported -MK try { $length = $file->getDbLength(); if (isset($info['length'])) { $length = $info['length']; //length decimal number in seconds. Need to convert it to format //HH:mm:ss to get around silly PHP limitations. $length = Application_Common_DateHelper::secondsToPlaylistTime($length); $file->setDbLength($length); } $cuein = isset($info['cuein']) ? $info['cuein'] : 0; $cueout = isset($info['cueout']) ? $info['cueout'] : $length; $file->setDbCuein($cuein); $file->setDbCueout($cueout); $file->setDbSilanCheck(true); $file->save(); } catch (Exception $e) { Logging::info("Failed to update silan values for " . $file->getDbTrackTitle()); Logging::info("File length analyzed by Silan is: " . $length); //set silan_check to true so we don't attempt to re-anaylze again $file->setDbSilanCheck(true); $file->save(); } } $this->_helper->json->sendJson(array()); }
private function makeHeaderRow($p_item) { $row = $this->defaultRowArray; //$this->isAllowed($p_item, $row); $this->getRowTimestamp($p_item, $row); $this->getItemColor($p_item, $row); $showStartDT = new DateTime($p_item["si_starts"], new DateTimeZone("UTC")); $showStartDT->setTimezone(new DateTimeZone($this->timezone)); $startsEpoch = floatval($showStartDT->format("U.u")); $showEndDT = new DateTime($p_item["si_ends"], new DateTimeZone("UTC")); $showEndDT->setTimezone(new DateTimeZone($this->timezone)); $endsEpoch = floatval($showEndDT->format("U.u")); //is a rebroadcast show if (intval($p_item["si_rebroadcast"]) === 1) { $row["rebroadcast"] = true; $parentInstance = CcShowInstancesQuery::create()->findPk($p_item["parent_show"]); $name = $parentInstance->getCcShow()->getDbName(); $dt = $parentInstance->getDbStarts(null); $dt->setTimezone(new DateTimeZone($this->timezone)); $time = $dt->format("Y-m-d H:i"); $row["rebroadcast_title"] = sprintf(_("Rebroadcast of %s from %s"), $name, $time); } elseif (intval($p_item["si_record"]) === 1) { $row["record"] = true; // at the time of creating on show, the recorded file is not in the DB yet. // therefore, 'si_file_id' is null. So we need to check it. if (Application_Model_Preference::GetUploadToSoundcloudOption() && isset($p_item['si_file_id'])) { $file = Application_Model_StoredFile::RecallById($p_item['si_file_id']); if (isset($file)) { $sid = $file->getSoundCloudId(); $row['soundcloud_id'] = $sid; } } } if ($startsEpoch < $this->epoch_now && $endsEpoch > $this->epoch_now) { $row["currentShow"] = true; $this->currentShow = true; } else { $this->currentShow = false; } $this->isAllowed($p_item, $row); $row["header"] = true; $row["starts"] = $showStartDT->format("Y-m-d H:i"); $row["startDate"] = $showStartDT->format("Y-m-d"); $row["startTime"] = $showStartDT->format("H:i"); $row["refresh"] = floatval($showStartDT->format("U.u")) - $this->epoch_now; $row["ends"] = $showEndDT->format("Y-m-d H:i"); $row["endDate"] = $showEndDT->format("Y-m-d"); $row["endTime"] = $showEndDT->format("H:i"); $row["duration"] = floatval($showEndDT->format("U.u")) - floatval($showStartDT->format("U.u")); $row["title"] = htmlspecialchars($p_item["show_name"]); $row["instance"] = intval($p_item["si_id"]); $row["image"] = ''; $this->getScheduledStatus($startsEpoch, $endsEpoch, $row); $this->contentDT = $showStartDT; return $row; }
private static function createScheduledEvents(&$data, $range_start, $range_end) { $utcTimeZone = new DateTimeZone("UTC"); $items = self::getItems($range_start, $range_end); foreach ($items as $item) { $showEndDateTime = new DateTime($item["show_end"], $utcTimeZone); $trackStartDateTime = new DateTime($item["start"], $utcTimeZone); $trackEndDateTime = new DateTime($item["end"], $utcTimeZone); if ($trackStartDateTime->getTimestamp() > $showEndDateTime->getTimestamp()) { //do not send any tracks that start past their show's end time continue; } if ($trackEndDateTime->getTimestamp() > $showEndDateTime->getTimestamp()) { $di = $trackStartDateTime->diff($showEndDateTime); $item["cue_out"] = $di->format("%H:%i:%s") . ".000"; $item["end"] = $showEndDateTime->format("Y-m-d H:i:s"); } if (!is_null($item['file_id'])) { //row is from "file" $media_id = $item['file_id']; $storedFile = Application_Model_StoredFile::RecallById($media_id); $uri = $storedFile->getFilePath(); self::createFileScheduleEvent($data, $item, $media_id, $uri); } elseif (!is_null($item['stream_id'])) { //row is type "webstream" $media_id = $item['stream_id']; $uri = $item['url']; self::createStreamScheduleEvent($data, $item, $media_id, $uri); } else { throw new Exception("Unknown schedule type: " . print_r($item, true)); } } }
public function contentContextMenuAction() { $id = $this->_getParam('id'); $params = '/format/json/id/#id#/'; $paramsPop = str_replace('#id#', $id, $params); // added for downlaod $id = $this->_getParam('id'); $file_id = $this->_getParam('id', null); $file = Application_Model_StoredFile::RecallById($file_id); $baseUrl = $this->getRequest()->getBaseUrl(); $url = $file->getRelativeFileUrl($baseUrl) . 'download/true'; $menu = array(); $menu[] = array('action' => array('type' => 'gourl', 'url' => $url), 'title' => _('Download')); //returns format jjmenu is looking for. $this->_helper->json->sendJson($menu); }
public function populateTemplateFile($values, $id) { $this->con->beginTransaction(); try { $file = Application_Model_StoredFile::RecallById($id, $this->con); $prefix = Application_Form_EditHistoryFile::ID_PREFIX; $prefix_len = strlen($prefix); $templateValues = $values[$prefix . "template"]; $md = array(); foreach ($templateValues as $index => $value) { $key = substr($index, $prefix_len); $md[$key] = $value; } $file->setDbColMetadata($md); $this->con->commit(); } catch (Exception $e) { $this->con->rollback(); throw $e; } }
$CC_CONFIG['dsn']['password'] = $values['database']['dbpass']; $CC_CONFIG['dsn']['hostspec'] = $values['database']['host']; $CC_CONFIG['dsn']['phptype'] = 'pgsql'; $CC_CONFIG['dsn']['database'] = $values['database']['dbname']; $CC_CONFIG['soundcloud-connection-retries'] = $values['soundcloud']['connection_retries']; $CC_CONFIG['soundcloud-connection-wait'] = $values['soundcloud']['time_between_retries']; require_once $CC_CONFIG['phpDir'] . '/application/configs/constants.php'; require_once $CC_CONFIG['phpDir'] . '/application/configs/conf.php'; $CC_CONFIG['phpDir'] = $values['general']['airtime_dir']; // Ensure library/ is on include_path set_include_path(implode(PATH_SEPARATOR, array(get_include_path(), realpath($CC_CONFIG['phpDir'] . '/library')))); require_once $CC_CONFIG['phpDir'] . '/application/common/Database.php'; require_once $CC_CONFIG['phpDir'] . '/application/models/StoredFile.php'; require_once $CC_CONFIG['phpDir'] . '/application/models/Preference.php'; require_once $CC_CONFIG['phpDir'] . '/application/models/MusicDir.php'; require_once $CC_CONFIG['phpDir'] . '/application/common/OsPath.php'; set_include_path($CC_CONFIG['phpDir'] . '/library' . PATH_SEPARATOR . get_include_path()); require_once $CC_CONFIG['phpDir'] . '/application/models/Soundcloud.php'; set_include_path($CC_CONFIG['phpDir'] . "/application/models" . PATH_SEPARATOR . get_include_path()); require_once $CC_CONFIG['phpDir'] . "/library/propel/runtime/lib/Propel.php"; Propel::init($CC_CONFIG['phpDir'] . "/application/configs/airtime-conf.php"); require_once 'propel/runtime/lib/Propel.php'; Propel::init($CC_CONFIG['phpDir'] . "/application/configs/airtime-conf-production.php"); if (count($argv) != 2) { exit; } $id = $argv[1]; $file = Application_Model_StoredFile::RecallById($id); // set id with -2 which is indicator for processing $file->setSoundCloudFileId(SOUNDCLOUD_PROGRESS); $file->uploadToSoundCloud();
public static function searchLibraryFiles($datatables) { $baseUrl = Application_Common_OsPath::getBaseDir(); $con = Propel::getConnection(CcFilesPeer::DATABASE_NAME); $displayColumns = self::getLibraryColumns(); $plSelect = array(); $blSelect = array(); $fileSelect = array(); $streamSelect = array(); foreach ($displayColumns as $key) { if ($key === "id") { $plSelect[] = "PL.id AS " . $key; $blSelect[] = "BL.id AS " . $key; $fileSelect[] = "FILES.id AS {$key}"; $streamSelect[] = "ws.id AS " . $key; } elseif ($key === "track_title") { $plSelect[] = "name AS " . $key; $blSelect[] = "name AS " . $key; $fileSelect[] = $key; $streamSelect[] = "name AS " . $key; } elseif ($key === "ftype") { $plSelect[] = "'playlist'::varchar AS " . $key; $blSelect[] = "'block'::varchar AS " . $key; $fileSelect[] = $key; $streamSelect[] = "'stream'::varchar AS " . $key; } elseif ($key === "artist_name") { $plSelect[] = "login AS " . $key; $blSelect[] = "login AS " . $key; $fileSelect[] = $key; $streamSelect[] = "login AS " . $key; } elseif ($key === "owner_id") { $plSelect[] = "login AS " . $key; $blSelect[] = "login AS " . $key; $fileSelect[] = "sub.login AS {$key}"; $streamSelect[] = "login AS " . $key; } elseif ($key === "replay_gain") { $plSelect[] = "NULL::NUMERIC AS " . $key; $blSelect[] = "NULL::NUMERIC AS " . $key; $fileSelect[] = $key; $streamSelect[] = "NULL::NUMERIC AS " . $key; } elseif ($key === "lptime") { $plSelect[] = "NULL::TIMESTAMP AS " . $key; $blSelect[] = "NULL::TIMESTAMP AS " . $key; $fileSelect[] = $key; $streamSelect[] = $key; } elseif ($key === "is_scheduled" || $key === "is_playlist") { $plSelect[] = "NULL::boolean AS " . $key; $blSelect[] = "NULL::boolean AS " . $key; $fileSelect[] = $key; $streamSelect[] = "NULL::boolean AS " . $key; } elseif ($key === "cuein" || $key === "cueout") { $plSelect[] = "NULL::INTERVAL AS " . $key; $blSelect[] = "NULL::INTERVAL AS " . $key; $fileSelect[] = $key; $streamSelect[] = "NULL::INTERVAL AS " . $key; } else { if ($key === "length") { $plSelect[] = $key; $blSelect[] = $key; $fileSelect[] = "(cueout - cuein)::INTERVAL AS length"; $streamSelect[] = $key; } else { if (in_array($key, array("utime", "mtime"))) { $plSelect[] = $key; $blSelect[] = $key; $fileSelect[] = $key; $streamSelect[] = $key; } elseif ($key === "year") { $plSelect[] = "EXTRACT(YEAR FROM utime)::varchar AS " . $key; $blSelect[] = "EXTRACT(YEAR FROM utime)::varchar AS " . $key; $fileSelect[] = "year AS " . $key; $streamSelect[] = "EXTRACT(YEAR FROM utime)::varchar AS " . $key; } else { if (in_array($key, array("track_number", "bit_rate", "sample_rate", "bpm"))) { $plSelect[] = "NULL::int AS " . $key; $blSelect[] = "NULL::int AS " . $key; $fileSelect[] = $key; $streamSelect[] = "NULL::int AS " . $key; } elseif ($key === "filepath") { $plSelect[] = "NULL::VARCHAR AS " . $key; $blSelect[] = "NULL::VARCHAR AS " . $key; $fileSelect[] = $key; $streamSelect[] = "url AS " . $key; } else { if ($key == "mime") { $plSelect[] = "NULL::VARCHAR AS " . $key; $blSelect[] = "NULL::VARCHAR AS " . $key; $fileSelect[] = $key; $streamSelect[] = $key; } else { $plSelect[] = "NULL::text AS " . $key; $blSelect[] = "NULL::text AS " . $key; $fileSelect[] = $key; $streamSelect[] = "NULL::text AS " . $key; } } } } } } $plSelect = "SELECT " . join(",", $plSelect); $blSelect = "SELECT " . join(",", $blSelect); $fileSelect = "SELECT " . join(",", $fileSelect); $streamSelect = "SELECT " . join(",", $streamSelect); $type = intval($datatables["type"]); $plTable = "({$plSelect} FROM cc_playlist AS PL LEFT JOIN cc_subjs AS sub ON (sub.id = PL.creator_id))"; $blTable = "({$blSelect} FROM cc_block AS BL LEFT JOIN cc_subjs AS sub ON (sub.id = BL.creator_id))"; $fileTable = "({$fileSelect} FROM cc_files AS FILES LEFT JOIN cc_subjs AS sub ON (sub.id = FILES.owner_id) WHERE file_exists = 'TRUE' AND hidden='FALSE')"; //$fileTable = "({$fileSelect} FROM cc_files AS FILES WHERE file_exists = 'TRUE')"; $streamTable = "({$streamSelect} FROM cc_webstream AS ws LEFT JOIN cc_subjs AS sub ON (sub.id = ws.creator_id))"; $unionTable = "({$plTable} UNION {$blTable} UNION {$fileTable} UNION {$streamTable}) AS RESULTS"; //choose which table we need to select data from. // TODO : use constants instead of numbers -- RG switch ($type) { case 0: $fromTable = $unionTable; break; case 1: $fromTable = $fileTable . " AS File"; //need an alias for the table if it's standalone. break; case 2: $fromTable = $plTable . " AS Playlist"; //need an alias for the table if it's standalone. break; case 3: $fromTable = $blTable . " AS Block"; //need an alias for the table if it's standalone. break; case 4: $fromTable = $streamTable . " AS StreamTable"; //need an alias for the table if it's standalone. break; default: $fromTable = $unionTable; } // update is_scheduled to false for tracks that // have already played out self::updatePastFilesIsScheduled(); $results = Application_Model_Datatables::findEntries($con, $displayColumns, $fromTable, $datatables); $displayTimezone = new DateTimeZone(Application_Model_Preference::GetUserTimezone()); $utcTimezone = new DateTimeZone("UTC"); foreach ($results['aaData'] as &$row) { $row['id'] = intval($row['id']); //taken from Datatables.php, needs to be cleaned up there. if (isset($r['ftype'])) { if ($r['ftype'] == 'playlist') { $pl = new Application_Model_Playlist($r['id']); $r['length'] = $pl->getLength(); } elseif ($r['ftype'] == "block") { $bl = new Application_Model_Block($r['id']); $r['bl_type'] = $bl->isStatic() ? 'static' : 'dynamic'; $r['length'] = $bl->getLength(); } } if ($row['ftype'] === "audioclip") { $cuein_formatter = new LengthFormatter($row["cuein"]); $row["cuein"] = $cuein_formatter->format(); $cueout_formatter = new LengthFormatter($row["cueout"]); $row["cueout"] = $cueout_formatter->format(); $cuein = Application_Common_DateHelper::playlistTimeToSeconds($row["cuein"]); $cueout = Application_Common_DateHelper::playlistTimeToSeconds($row["cueout"]); $row_length = Application_Common_DateHelper::secondsToPlaylistTime($cueout - $cuein); $formatter = new SamplerateFormatter($row['sample_rate']); $row['sample_rate'] = $formatter->format(); $formatter = new BitrateFormatter($row['bit_rate']); $row['bit_rate'] = $formatter->format(); //soundcloud status $file = Application_Model_StoredFile::RecallById($row['id']); $row['soundcloud_id'] = $file->getSoundCloudId(); // for audio preview $row['audioFile'] = $row['id'] . "." . pathinfo($row['filepath'], PATHINFO_EXTENSION); } else { $row['audioFile'] = $row['id']; $row_length = $row['length']; } $len_formatter = new LengthFormatter($row_length); $row['length'] = $len_formatter->format(); //convert mtime and utime to localtime $row['mtime'] = new DateTime($row['mtime'], $utcTimezone); $row['mtime']->setTimeZone($displayTimezone); $row['mtime'] = $row['mtime']->format('Y-m-d H:i:s'); $row['utime'] = new DateTime($row['utime'], $utcTimezone); $row['utime']->setTimeZone($displayTimezone); $row['utime'] = $row['utime']->format('Y-m-d H:i:s'); //need to convert last played to localtime if it exists. if (isset($row['lptime'])) { $row['lptime'] = new DateTime($row['lptime'], $utcTimezone); $row['lptime']->setTimeZone($displayTimezone); $row['lptime'] = $row['lptime']->format('Y-m-d H:i:s'); } // we need to initalize the checkbox and image row because we do not retrieve // any data from the db for these and datatables will complain $row['checkbox'] = ""; $row['image'] = ""; $type = substr($row['ftype'], 0, 2); $row['tr_id'] = "{$type}_{$row['id']}"; } return $results; }
public function getUploadToSoundcloudStatusAction() { $id = $this->_getParam('id'); $type = $this->_getParam('type'); if ($type == "show") { $show_instance = new Application_Model_ShowInstance($id); $this->view->sc_id = $show_instance->getSoundCloudFileId(); $file = $show_instance->getRecordedFile(); $this->view->error_code = $file->getSoundCloudErrorCode(); $this->view->error_msg = $file->getSoundCloudErrorMsg(); } elseif ($type == "file") { $file = Application_Model_StoredFile::RecallById($id); $this->view->sc_id = $file->getSoundCloudId(); $this->view->error_code = $file->getSoundCloudErrorCode(); $this->view->error_msg = $file->getSoundCloudErrorMsg(); } else { Logging::warn("Trying to upload unknown type: {$type} with id: {$id}"); } }
public function getRecordedFile() { $file_id = $this->_showInstance->getDbRecordedFile(); if (isset($file_id)) { $file = Application_Model_StoredFile::RecallById($file_id); if (isset($file) && file_exists($file->getFilePath())) { return $file; } } return null; }