diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index 590edb35e..7a4e81f4d 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -202,32 +202,6 @@ class ApiController extends Zend_Controller_Action exit; } } - - public function todayInfoAction() - { - if (Application_Model_Preference::GetAllow3rdPartyApi()){ - // disable the view and the layout - $this->view->layout()->disableLayout(); - $this->_helper->viewRenderer->setNoRender(true); - - $date = new Application_Model_DateHelper; - $utcTimeNow = $date->getUtcTimestamp(); - $utctimeEnd = Application_Model_DateHelper::GetDayEndTimestampInUtc(); - - $result = array("env"=>APPLICATION_ENV, - "schedulerTime"=>gmdate("Y-m-d H:i:s"), - "nextShow"=>Application_Model_Show::GetNextShows($utcTimeNow, 5, $utcTimeEnd)); - - Application_Model_Show::ConvertToLocalTimeZone($result["nextShow"], array("starts", "ends", "start_timestamp", "end_timestamp")); - - header("Content-type: text/javascript"); - echo $_GET['callback'].'('.json_encode($result).')'; - } else { - header('HTTP/1.0 401 Unauthorized'); - print 'You are not allowed to access this resource. '; - exit; - } - } public function weekInfoAction() { @@ -397,9 +371,11 @@ class ApiController extends Zend_Controller_Action } $upload_dir = ini_get("upload_tmp_dir"); - Application_Model_StoredFile::uploadFile($upload_dir); + $tempFilePath = Application_Model_StoredFile::uploadFile($upload_dir); + $tempFileName = basename($tempFilePath); + $fileName = isset($_REQUEST["name"]) ? $_REQUEST["name"] : ''; - Application_Model_StoredFile::copyFileToStor($upload_dir, $fileName); + Application_Model_StoredFile::copyFileToStor($upload_dir, $fileName, $tempFileName); } public function uploadRecordedAction() diff --git a/airtime_mvc/application/controllers/PluploadController.php b/airtime_mvc/application/controllers/PluploadController.php index 6003374f7..df893ce0e 100644 --- a/airtime_mvc/application/controllers/PluploadController.php +++ b/airtime_mvc/application/controllers/PluploadController.php @@ -26,15 +26,17 @@ class PluploadController extends Zend_Controller_Action public function uploadAction() { $upload_dir = ini_get("upload_tmp_dir") . DIRECTORY_SEPARATOR . "plupload"; - Application_Model_StoredFile::uploadFile($upload_dir); + $tempFilePath = Application_Model_StoredFile::uploadFile($upload_dir); + $tempFileName = basename($tempFilePath); - die('{"jsonrpc" : "2.0"}'); + die('{"jsonrpc" : "2.0", "tempfilepath" : "'.$tempFileName.'" }'); } public function copyfileAction(){ $upload_dir = ini_get("upload_tmp_dir") . DIRECTORY_SEPARATOR . "plupload"; $filename = $this->_getParam('name'); - Application_Model_StoredFile::copyFileToStor($upload_dir, $filename); + $tempname = $this->_getParam('tempname'); + Application_Model_StoredFile::copyFileToStor($upload_dir, $filename, $tempname); die('{"jsonrpc" : "2.0"}'); } diff --git a/airtime_mvc/application/forms/SoundcloudPreferences.php b/airtime_mvc/application/forms/SoundcloudPreferences.php index ad85b22b1..8fe460c15 100644 --- a/airtime_mvc/application/forms/SoundcloudPreferences.php +++ b/airtime_mvc/application/forms/SoundcloudPreferences.php @@ -1,4 +1,5 @@ addElement('text', 'SoundCloudUser', array( 'class' => 'input_text', - 'label' => 'SoundCloud Email:', - 'required' => false, + 'label' => 'SoundCloud Email', 'filters' => array('StringTrim'), + 'autocomplete' => 'off', 'value' => Application_Model_Preference::GetSoundCloudUser(), 'decorators' => array( 'ViewHelper' + ), + + // By default, 'allowEmpty' is true. This means that our custom + // validators are going to be skipped if this field is empty, + // which is something we don't want + 'allowEmpty' => false, + 'validators' => array( + new ConditionalNotEmpty(array('UploadToSoundcloudOption'=>'1')) ) )); //SoundCloud Password $this->addElement('password', 'SoundCloudPassword', array( 'class' => 'input_text', - 'label' => 'SoundCloud Password:', - 'required' => false, + 'label' => 'SoundCloud Password', 'filters' => array('StringTrim'), + 'autocomplete' => 'off', 'value' => Application_Model_Preference::GetSoundCloudPassword(), 'decorators' => array( 'ViewHelper' + ), + + // By default, 'allowEmpty' is true. This means that our custom + // validators are going to be skipped if this field is empty, + // which is something we don't want + 'allowEmpty' => false, + 'validators' => array( + new ConditionalNotEmpty(array('UploadToSoundcloudOption'=>'1')) ) )); diff --git a/airtime_mvc/application/forms/customfilters/ImageSize.php b/airtime_mvc/application/forms/customfilters/ImageSize.php index 9dcfffffe..69db3cb82 100644 --- a/airtime_mvc/application/forms/customfilters/ImageSize.php +++ b/airtime_mvc/application/forms/customfilters/ImageSize.php @@ -1,42 +1,42 @@ 1) { + // img too big! create a scaled down image + $newWidth = round($origWidth / $ratio); + $newHeight = round($origHeight / $ratio); + $resized = imagecreatetruecolor($newWidth, $newHeight); + imagecopyresampled($resized, $image, 0, 0, 0, 0, $newWidth, $newHeight, $origWidth, $origHeight); + + // determine type and store to disk + $explodeResult = explode(".", $value); + $type = strtolower($explodeResult[count($explodeResult) - 1]); + $writeFunc = 'image' . $type; + if ($type == 'jpeg' || $type == 'jpg') { + imagejpeg($resized, $value, 100); + } else { + $writeFunc($resized, $value); + } } - // create a scaled down image - $newWidth = round($origWidth / $ratio); - $newHeight = round($origHeight / $ratio); - $resized = imagecreatetruecolor($newWidth, $newHeight); - imagecopyresampled($resized, $image, 0, 0, 0, 0, $newWidth, $newHeight, $origWidth, $origHeight); - - // determine type and store to disk - $explodeResult = explode(".", $value); - $type = $explodeResult[count($explodeResult) - 1]; - $writeFunc = 'image' . $type; - if($type == 'jpeg' || $type == 'jpg') { - imagejpeg($resized, $value, 100); - } else { - $writeFunc($resized, $value); - } - } + return $value; + } } ?> diff --git a/airtime_mvc/application/forms/customvalidators/ConditionalNotEmpty.php b/airtime_mvc/application/forms/customvalidators/ConditionalNotEmpty.php new file mode 100644 index 000000000..2f89fe667 --- /dev/null +++ b/airtime_mvc/application/forms/customvalidators/ConditionalNotEmpty.php @@ -0,0 +1,62 @@ + 'Value is required and can\'t be empty' + ); + + protected $_fieldValues; + + /** + * Constructs a new ConditionalNotEmpty validator. + * + * @param array $fieldValues - the names and expected values of the fields we're depending on; + * E.g., if we have a field that should only be validated when two other + * fields PARENT_1 and PARENT_2 have values of '1' and '0' respectively, then + * $fieldValues should contain ('PARENT_1'=>'1', 'PARENT_2'=>'0') + */ + public function __construct($fieldValues) + { + $this->_fieldValues = $fieldValues; + } + + /** + * Implements Zend_Validate_Abstract. + * Given names and expected values of the fields we're depending on ($_fieldValues), + * this function returns true if the expected values doesn't match the actual user input, + * or if $value is not empty. Returns false otherwise. + * + * @param String $value - this field's value + * @param array $context - names and values of the rest of the fields in this form + * @return boolean - true if valid; false otherwise + */ + public function isValid($value, $context = null) + { + if ($value != "") { + return true; + } + + if (is_array($context)) { + foreach($this->_fieldValues as $fieldName=>$fieldValue) { + if (!isset($context[$fieldName]) || $context[$fieldName] != $fieldValue) { + return true; + } + } + } elseif (is_string($context)) { + if (!isset($context) || $context != $fieldValue) { + return true; + } + } + + $this->_error(self::KEY_IS_EMPTY); + return false; + } +} + +?> diff --git a/airtime_mvc/application/models/Show.php b/airtime_mvc/application/models/Show.php index 85373d13a..799c98e08 100644 --- a/airtime_mvc/application/models/Show.php +++ b/airtime_mvc/application/models/Show.php @@ -468,13 +468,13 @@ class Application_Model_Show { return ""; } else { $row = $rows[0]; - + $dt = new DateTime($row["first_show"]." ".$row["start_time"], new DateTimeZone($row["timezone"])); $dt->setTimezone(new DateTimeZone("UTC")); return $dt->format("Y-m-d"); } } - + /** * Get the start time of the current show in UTC timezone. * @@ -673,34 +673,34 @@ class Application_Model_Show { return $days; } - /* 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. */ public function hasInstance(){ return (!is_null($this->getInstance())); } - /* Only used for shows that aren't repeating. - * - * @return CcShowInstancesQuery: An propel object representing a + /* Only used for shows that aren't repeating. + * + * @return CcShowInstancesQuery: An propel object representing a * row in the cc_show_instances table. */ public function getInstance(){ $showInstance = CcShowInstancesQuery::create() ->filterByDbShowId($this->getId()) ->findOne(); - + return $showInstance; } /* Only used for shows that are repeating. Note that this will return - * true even for dates that only have a "modified" show instance (does not + * true even for dates that only have a "modified" show instance (does not * check if the "modified_instance" column is set to true). This is intended - * behaviour. - * - * @param $p_dateTime: Date for which we are checking if instance + * behaviour. + * + * @param $p_dateTime: Date for which we are checking if instance * exists. - * - * @return Boolean: true if show has an instance on $p_dateTime, + * + * @return Boolean: true if show has an instance on $p_dateTime, * otherwise false. */ public function hasInstanceOnDate($p_dateTime){ return (!is_null($this->getInstanceOnDate($p_dateTime))); @@ -710,10 +710,10 @@ class Application_Model_Show { /* Only used for shows that are repeating. Note that this will return * shows that have been "modified" (does not check if the "modified_instance" * column is set to true). This is intended behaviour. - * + * * @param $p_dateTime: Date for which we are getting an instance. - * - * @return CcShowInstancesQuery: An propel object representing a + * + * @return CcShowInstancesQuery: An propel object representing a * row in the cc_show_instances table. */ public function getInstanceOnDate($p_dateTime){ global $CC_DBC; @@ -1071,16 +1071,13 @@ class Application_Model_Show { $timezone = $p_showRow["timezone"]; $start = $first_show." ".$start_time; - $utcStartDateTime = Application_Model_DateHelper::ConvertToUtcDateTime($start, $timezone); + + //start & end UTC DateTimes for the show. + list($utcStartDateTime, $utcEndDateTime) = Application_Model_Show::createUTCStartEndDateTime($start, $duration, $timezone); if ($utcStartDateTime->getTimestamp() < $p_dateTime->getTimestamp()) { - $utcStart = $utcStartDateTime->format("Y-m-d H:i:s"); - $sql = "SELECT timestamp '{$utcStart}' + interval '{$duration}'"; - $utcEndDateTime = new DateTime($CC_DBC->GetOne($sql), new DateTimeZone("UTC")); - - $date = new Application_Model_DateHelper(); - $currentUtcTimestamp = $date->getUtcTimestamp(); + $currentUtcTimestamp = gmdate("Y-m-d H:i:s"); $show = new Application_Model_Show($show_id); if ($show->hasInstance()){ @@ -1141,8 +1138,7 @@ class Application_Model_Show { $record = $p_showRow["record"]; $timezone = $p_showRow["timezone"]; - $date = new Application_Model_DateHelper(); - $currentUtcTimestamp = $date->getUtcTimestamp(); + $currentUtcTimestamp = gmdate("Y-m-d H:i:s"); if(isset($next_pop_date)) { $start = $next_pop_date." ".$start_time; @@ -1162,9 +1158,7 @@ class Application_Model_Show { while($utcStartDateTime->getTimestamp() <= $p_dateTime->getTimestamp() && (is_null($utcLastShowDateTime) || $utcStartDateTime->getTimestamp() < $utcLastShowDateTime->getTimestamp())){ - $utcStart = $utcStartDateTime->format("Y-m-d H:i:s"); - $sql = "SELECT timestamp '{$utcStart}' + interval '{$duration}'"; - $utcEndDateTime = new DateTime($CC_DBC->GetOne($sql), new DateTimeZone("UTC")); + list($utcStartDateTime, $utcEndDateTime) = Application_Model_Show::createUTCStartEndDateTime($start, $duration, $timezone); if ($show->hasInstanceOnDate($utcStartDateTime)){ $ccShowInstance = $show->getInstanceOnDate($utcStartDateTime); @@ -1199,25 +1193,25 @@ class Application_Model_Show { 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 * March 3rd. For now let's ignore the day and assume we are always working with the * first of each month, and use PHP to add 1 month to this (this will take care of rolling - * over the years 2011->2012, etc.). Then let's append the actual day, and use the php + * over the years 2011->2012, etc.). Then let's append the actual day, and use the php * checkdate() function, to see if it is valid. If not, then we'll just skip this month. */ - + $startDt = new DateTime($start, new DateTimeZone($timezone)); - + /* pass in only the year and month (not the day) */ $dt = new DateTime($startDt->format("Y-m"), new DateTimeZone($timezone)); - + /* Keep adding 1 month, until we find the next month that contains the day * we are looking for (31st day for example) */ do { $dt->add(new DateInterval($p_interval)); } while(!checkdate($dt->format("m"), $startDt->format("d"), $dt->format("Y"))); $dt->setDate($dt->format("Y"), $dt->format("m"), $startDt->format("d")); - + $start = $dt->format("Y-m-d H:i:s"); $dt->setTimezone(new DateTimeZone('UTC')); @@ -1236,49 +1230,78 @@ class Application_Model_Show { Application_Model_Show::setNextPop($start, $show_id, $day); } + /* + * @param $p_start + * timestring format "Y-m-d H:i:s" (not UTC) + * @param $p_duration + * string time interval (h)h:(m)m(:ss) + * @param $p_timezone + * string "Europe/Prague" + * @param $p_offset + * array (days, hours, mins) used for rebroadcast shows. + * + * @return + * array of 2 DateTime objects, start/end time of the show in UTC. + */ + private static function createUTCStartEndDateTime($p_start, $p_duration, $p_timezone=null, $p_offset=null) + { + $timezone = $p_timezone ? $p_timezone : date_default_timezone_get(); + + $startDateTime = new DateTime($p_start, new DateTimeZone($timezone)); + if (isset($p_offset)) { + $startDateTime->add(new DateInterval("P{$p_offset["days"]}DT{$p_offset["hours"]}H{$p_offset["mins"]}M")); + } + //convert time to UTC + $startDateTime->setTimezone(new DateTimeZone('UTC')); + + $endDateTime = clone $startDateTime; + $duration = explode(":", $p_duration); + list($hours, $mins) = array_slice($duration, 0, 2); + $endDateTime->add(new DateInterval("PT{$hours}H{$mins}M")); + + return array($startDateTime, $endDateTime); + } + /* Create rebroadcast instances for a created show marked for recording * - * @param $p_rebroadcasts rows gotten from the db table cc_show_rebroadcasts, tells airtime when to schedule the rebroadcasts. - * @param $p_currentUtcTimestamp a timestring in format "Y-m-d H:i:s", current UTC time. - * @param $p_showId int of the show it belongs to (from cc_show) - * @param $p_showInstanceId the instance id of the created recorded show instance + * @param $p_rebroadcasts + * rows gotten from the db table cc_show_rebroadcasts, tells airtime when to schedule the rebroadcasts. + * @param $p_currentUtcTimestamp + * a timestring in format "Y-m-d H:i:s", current UTC time. + * @param $p_showId + * int of the show it belongs to (from cc_show) + * @param $p_showInstanceId + * the instance id of the created recorded show instance * (from cc_show_instances), used to associate rebroadcasts to this show. - * @param $p_startTime a timestring in format "Y-m-d H:i:s" in the timezone, not UTC of the rebroadcasts' parent recorded show. - * @param $p_duration duration of the show in format 1:0 - * @param $p_timezone string of user's timezone "Europe/Prague" + * @param $p_startTime + * a timestring in format "Y-m-d H:i:s" in the timezone, not UTC of the rebroadcasts' parent recorded show. + * @param $p_duration + * string time interval (h)h:(m)m:(ss) length of the show. + * @param $p_timezone + * 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){ - global $CC_DBC; - Logging::log('Count of rebroadcasts '. count($p_rebroadcasts)); + //Y-m-d + //use only the date part of the show start time stamp for the offsets to work properly. + $date = explode(" ", $p_startTime); + $start_date = $date[0]; foreach($p_rebroadcasts as $rebroadcast) { - //use only the date part of the show start time stamp for the offsets to work properly. - $sql = "SELECT date '{$p_startTime}' + interval '{$rebroadcast["day_offset"]}' + interval '{$rebroadcast["start_time"]}'"; - $rebroadcast_start_time = $CC_DBC->GetOne($sql); - Logging::log('rebroadcast start '.$rebroadcast_start_time); + $days = explode(" ", $rebroadcast["day_offset"]); + $time = explode(":", $rebroadcast["start_time"]); + $offset = array("days"=>$days[0], "hours"=>$time[0], "mins"=>$time[1]); - $sql = "SELECT timestamp '{$rebroadcast_start_time}' + interval '{$p_duration}'"; - $rebroadcast_end_time = $CC_DBC->GetOne($sql); - Logging::log('rebroadcast end '.$rebroadcast_end_time); + list($utcStartDateTime, $utcEndDateTime) = Application_Model_Show::createUTCStartEndDateTime($start_date, $p_duration, $p_timezone, $offset); - //convert to UTC, after we have used the defined offsets to calculate rebroadcasts. - $utc_rebroadcast_start_time = Application_Model_DateHelper::ConvertToUtcDateTime($rebroadcast_start_time, $p_timezone); - $utc_rebroadcast_end_time = Application_Model_DateHelper::ConvertToUtcDateTime($rebroadcast_end_time, $p_timezone); - - Logging::log('UTC rebroadcast start '.$utc_rebroadcast_start_time->format("Y-m-d H:i:s")); - Logging::log('UTC rebroadcast end '.$utc_rebroadcast_end_time->format("Y-m-d H:i:s")); - Logging::log('Current UTC timestamp '.$p_currentUtcTimestamp); - - if ($utc_rebroadcast_start_time->format("Y-m-d H:i:s") > $p_currentUtcTimestamp){ - Logging::log('Creating rebroadcast show starting at UTC '.$utc_rebroadcast_start_time->format("Y-m-d H:i:s")); + if ($utcStartDateTime->format("Y-m-d H:i:s") > $p_currentUtcTimestamp){ $newRebroadcastInstance = new CcShowInstances(); $newRebroadcastInstance->setDbShowId($p_showId); - $newRebroadcastInstance->setDbStarts($utc_rebroadcast_start_time->format("Y-m-d H:i:s")); - $newRebroadcastInstance->setDbEnds($utc_rebroadcast_end_time->format("Y-m-d H:i:s")); + $newRebroadcastInstance->setDbStarts($utcStartDateTime); + $newRebroadcastInstance->setDbEnds($utcEndDateTime); $newRebroadcastInstance->setDbRecord(0); $newRebroadcastInstance->setDbRebroadcast(1); $newRebroadcastInstance->setDbOriginalShow($p_showInstanceId); @@ -1552,7 +1575,7 @@ class Application_Model_Show { ." AND si.starts >= TIMESTAMP '$timeStart'" ." AND si.starts < TIMESTAMP $timeEnd" ." ORDER BY si.starts"; - + // defaults to retrieve all shows within the interval if $limit not set if($limit != 0) { $sql = $sql . " LIMIT $limit"; diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index 8e6ecee57..0f336555a 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -809,10 +809,18 @@ class Application_Model_StoredFile { if (isset($_SERVER["CONTENT_TYPE"])) $contentType = $_SERVER["CONTENT_TYPE"]; + // create temp file name (CC-3086) + $command = "mktemp --tmpdir=".$p_targetDir; + $tempFilePath= exec($command); + + if($tempFilePath == ""){ + die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Unable to create tmp file."}, "id" : "id"}'); + } + if (strpos($contentType, "multipart") !== false) { if (isset($_FILES['file']['tmp_name']) && is_uploaded_file($_FILES['file']['tmp_name'])) { // Open temp file - $out = fopen($p_targetDir . DIRECTORY_SEPARATOR . $fileName, $chunk == 0 ? "wb" : "ab"); + $out = fopen($tempFilePath, $chunk == 0 ? "wb" : "ab"); if ($out) { // Read binary input stream and append it to temp file $in = fopen($_FILES['file']['tmp_name'], "rb"); @@ -831,7 +839,7 @@ class Application_Model_StoredFile { die('{"jsonrpc" : "2.0", "error" : {"code": 103, "message": "Failed to move uploaded file."}, "id" : "id"}'); } else { // Open temp file - $out = fopen($p_targetDir . DIRECTORY_SEPARATOR . $fileName, $chunk == 0 ? "wb" : "ab"); + $out = fopen($tempFilePath, $chunk == 0 ? "wb" : "ab"); if ($out) { // Read binary input stream and append it to temp file $in = fopen("php://input", "rb"); @@ -846,34 +854,12 @@ class Application_Model_StoredFile { } else die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}'); } - - /*$audio_file = $p_targetDir . DIRECTORY_SEPARATOR . $fileName; - - $md5 = md5_file($audio_file); - $duplicate = Application_Model_StoredFile::RecallByMd5($md5); - if ($duplicate) { - if (PEAR::isError($duplicate)) { - die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": ' . $duplicate->getMessage() .'}}'); - } - if (file_exists($duplicate->getFilePath())) { - $duplicateName = $duplicate->getMetadataValue('MDATA_KEY_TITLE'); - die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "An identical audioclip named ' . $duplicateName . ' already exists in the storage server."}}'); - } - } - - $storDir = Application_Model_MusicDir::getStorDir(); - $stor = $storDir->getDirectory(); - - $stor .= "/organize"; - - $audio_stor = $stor . DIRECTORY_SEPARATOR . $fileName; - - $r = @copy($audio_file, $audio_stor);*/ - + + return $tempFilePath; } - public static function copyFileToStor($p_targetDir, $fileName){ - $audio_file = $p_targetDir . DIRECTORY_SEPARATOR . $fileName; + public static function copyFileToStor($p_targetDir, $fileName, $tempname){ + $audio_file = $p_targetDir . DIRECTORY_SEPARATOR . $tempname; Logging::log('copyFileToStor: moving file '.$audio_file); $md5 = md5_file($audio_file); $duplicate = Application_Model_StoredFile::RecallByMd5($md5); @@ -895,7 +881,7 @@ class Application_Model_StoredFile { $audio_stor = $stor . DIRECTORY_SEPARATOR . $fileName; $r = @copy($audio_file, $audio_stor); - //$r = @unlink($audio_file); + $r = @unlink($audio_file); } public static function getFileCount() diff --git a/airtime_mvc/application/views/scripts/form/preferences_soundcloud.phtml b/airtime_mvc/application/views/scripts/form/preferences_soundcloud.phtml index 99456616a..20bcc92c9 100644 --- a/airtime_mvc/application/views/scripts/form/preferences_soundcloud.phtml +++ b/airtime_mvc/application/views/scripts/form/preferences_soundcloud.phtml @@ -40,7 +40,9 @@
- +
element->getElement('SoundCloudUser') ?> @@ -53,7 +55,9 @@
- +
element->getElement('SoundCloudPassword') ?> diff --git a/airtime_mvc/public/js/airtime/library/plupload.js b/airtime_mvc/public/js/airtime/library/plupload.js index 3fac56d6a..326fe8f8c 100644 --- a/airtime_mvc/public/js/airtime/library/plupload.js +++ b/airtime_mvc/public/js/airtime/library/plupload.js @@ -16,16 +16,16 @@ $(document).ready(function() { uploader.bind('FileUploaded', function(up, file, json) { var j = jQuery.parseJSON(json.response); - - if(j.error !== undefined) { - + + if(j.error !== undefined) { var row = $("") .append('' + file.name +'') .append('' + j.error.message + ''); $("#plupload_error").find("table").append(row); }else{ - $.get('/Plupload/copyfile/format/json/name/'+encodeURIComponent(file.name), function(json){ + var tempFileName = j.tempfilepath; + $.get('/Plupload/copyfile/format/json/name/'+encodeURIComponent(file.name)+'/tempname/'+encodeURIComponent(tempFileName), function(json){ var jr = jQuery.parseJSON(json); if(jr.error !== undefined) { var row = $("") diff --git a/widgets/js/jquery.showinfo.js b/widgets/js/jquery.showinfo.js index b57f8d7c4..1c75b7918 100644 --- a/widgets/js/jquery.showinfo.js +++ b/widgets/js/jquery.showinfo.js @@ -16,7 +16,9 @@ getServerData(); function updateWidget(){ - var shows = sd.getNextShows(); + var currentShow = sd.getCurrentShow(); + var nextShows = sd.getNextShows(); + var shows = currentShow.length == 0 ? nextShows : currentShow.concat(nextShows); tableString = ""; tableString += "

" + options.text.onAirToday + "

"; @@ -50,7 +52,7 @@ } function getServerData(){ - $.ajax({ url: options.sourceDomain + "api/today-info/", dataType:"jsonp", success:function(data){ + $.ajax({ url: options.sourceDomain + "api/live-info/", dataType:"jsonp", success:function(data){ processData(data); }, error:airtimeScheduleJsonpError}); setTimeout(getServerData, options.updatePeriod*1000);