2013-02-26 16:20:02 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
class Application_Service_ShowService
|
|
|
|
{
|
2013-02-26 23:41:35 +01:00
|
|
|
const MAX_REBROADCAST_DATES = 10;
|
|
|
|
|
2013-02-26 16:20:02 +01:00
|
|
|
/**
|
2013-02-26 23:41:35 +01:00
|
|
|
*
|
2013-03-08 17:19:03 +01:00
|
|
|
* Sets the fields for a cc_show table row
|
2013-02-26 23:41:35 +01:00
|
|
|
* @param $ccShow
|
|
|
|
* @param $showData
|
2013-02-26 16:20:02 +01:00
|
|
|
*/
|
|
|
|
public function setShow($ccShow, $showData)
|
|
|
|
{
|
|
|
|
$ccShow->setDbName($showData['add_show_name']);
|
|
|
|
$ccShow->setDbDescription($showData['add_show_description']);
|
|
|
|
$ccShow->setDbUrl($showData['add_show_url']);
|
|
|
|
$ccShow->setDbGenre($showData['add_show_genre']);
|
|
|
|
$ccShow->setDbColor($showData['add_show_color']);
|
|
|
|
$ccShow->setDbBackgroundColor($showData['add_show_background_color']);
|
|
|
|
$ccShow->setDbLiveStreamUsingAirtimeAuth($showData['cb_airtime_auth'] == 1);
|
|
|
|
$ccShow->setDbLiveStreamUsingCustomAuth($showData['cb_custom_auth'] == 1);
|
|
|
|
$ccShow->setDbLiveStreamUser($showData['custom_username']);
|
|
|
|
$ccShow->setDbLiveStreamPass($showData['custom_password']);
|
|
|
|
|
|
|
|
$ccShow->save();
|
|
|
|
return $ccShow;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2013-02-26 23:41:35 +01:00
|
|
|
*
|
2013-03-08 17:19:03 +01:00
|
|
|
* Sets the fields for a cc_show_days table row
|
2013-02-26 23:41:35 +01:00
|
|
|
* @param $showData
|
|
|
|
* @param $showId
|
|
|
|
* @param $userId
|
|
|
|
* @param $repeatType
|
|
|
|
* @param $isRecorded
|
2013-02-26 16:20:02 +01:00
|
|
|
*/
|
|
|
|
public function createShowDays($showData, $showId, $userId, $repeatType, $isRecorded)
|
|
|
|
{
|
|
|
|
$startDateTime = new DateTime($showData['add_show_start_date']." ".$showData['add_show_start_time']);
|
|
|
|
|
|
|
|
if ($showData['add_show_no_end']) {
|
|
|
|
$endDate = NULL;
|
|
|
|
} elseif ($showData['add_show_repeats']) {
|
|
|
|
$endDateTime = new DateTime($showData['add_show_end_date']);
|
|
|
|
$endDateTime->add(new DateInterval("P1D"));
|
|
|
|
$endDate = $endDateTime->format("Y-m-d");
|
|
|
|
} else {
|
|
|
|
$endDateTime = new DateTime($showData['add_show_start_date']);
|
|
|
|
$endDateTime->add(new DateInterval("P1D"));
|
|
|
|
$endDate = $endDateTime->format("Y-m-d");
|
|
|
|
}
|
|
|
|
|
|
|
|
/* What we are doing here is checking if the show repeats or if
|
|
|
|
* any repeating days have been checked. If not, then by default
|
|
|
|
* the "selected" DOW is the initial day.
|
|
|
|
* DOW in local time.
|
|
|
|
*/
|
|
|
|
$startDow = date("w", $startDateTime->getTimestamp());
|
|
|
|
if (!$showData['add_show_repeats']) {
|
|
|
|
$showData['add_show_day_check'] = array($startDow);
|
|
|
|
} elseif ($showData['add_show_repeats'] && $showData['add_show_day_check'] == "") {
|
|
|
|
$showData['add_show_day_check'] = array($startDow);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Don't set day for monthly repeat type, it's invalid
|
|
|
|
if ($showData['add_show_repeats'] && $showData['add_show_repeat_type'] == 2) {
|
|
|
|
$showDay = new CcShowDays();
|
|
|
|
$showDay->setDbFirstShow($startDateTime->format("Y-m-d"));
|
|
|
|
$showDay->setDbLastShow($endDate);
|
|
|
|
$showDay->setDbStartTime($startDateTime->format("H:i:s"));
|
|
|
|
$showDay->setDbTimezone(Application_Model_Preference::GetUserTimezone($userId));
|
|
|
|
$showDay->setDbDuration($showData['add_show_duration']);
|
|
|
|
$showDay->setDbRepeatType($repeatType);
|
|
|
|
$showDay->setDbShowId($showId);
|
|
|
|
$showDay->setDbRecord($isRecorded);
|
|
|
|
$showDay->save();
|
|
|
|
} else {
|
|
|
|
foreach ($showData['add_show_day_check'] as $day) {
|
|
|
|
$daysAdd=0;
|
|
|
|
$startDateTimeClone = clone $startDateTime;
|
|
|
|
if ($startDow !== $day) {
|
|
|
|
if ($startDow > $day)
|
|
|
|
$daysAdd = 6 - $startDow + 1 + $day;
|
|
|
|
else
|
|
|
|
$daysAdd = $day - $startDow;
|
|
|
|
|
|
|
|
$startDateTimeClone->add(new DateInterval("P".$daysAdd."D"));
|
|
|
|
}
|
|
|
|
if (is_null($endDate) || $startDateTimeClone->getTimestamp() <= $endDateTime->getTimestamp()) {
|
|
|
|
$showDay = new CcShowDays();
|
|
|
|
$showDay->setDbFirstShow($startDateTimeClone->format("Y-m-d"));
|
|
|
|
$showDay->setDbLastShow($endDate);
|
|
|
|
$showDay->setDbStartTime($startDateTimeClone->format("H:i"));
|
|
|
|
$showDay->setDbTimezone(Application_Model_Preference::GetUserTimezone($userId));
|
|
|
|
$showDay->setDbDuration($showData['add_show_duration']);
|
|
|
|
$showDay->setDbDay($day);
|
|
|
|
$showDay->setDbRepeatType($repeatType);
|
|
|
|
$showDay->setDbShowId($showId);
|
|
|
|
$showDay->setDbRecord($isRecorded);
|
|
|
|
$showDay->save();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2013-02-26 23:41:35 +01:00
|
|
|
*
|
2013-03-08 17:19:03 +01:00
|
|
|
* Sets the fields for a cc_show_rebroadcast table row
|
2013-02-26 23:41:35 +01:00
|
|
|
* @param $showData
|
|
|
|
* @param $showId
|
|
|
|
* @param $repeatType
|
|
|
|
* @param $isRecorded
|
2013-02-26 16:20:02 +01:00
|
|
|
*/
|
2013-02-26 23:41:35 +01:00
|
|
|
public function createShowRebroadcasts($showData, $showId, $repeatType, $isRecorded)
|
2013-02-26 16:20:02 +01:00
|
|
|
{
|
|
|
|
if (($isRecorded && $showData['add_show_rebroadcast']) && ($repeatType != -1)) {
|
2013-02-26 23:41:35 +01:00
|
|
|
for ($i=1; $i<=self::MAX_REBROADCAST_DATES; $i++) {
|
2013-02-26 16:20:02 +01:00
|
|
|
if ($showData['add_show_rebroadcast_date_'.$i]) {
|
|
|
|
$showRebroad = new CcShowRebroadcast();
|
|
|
|
$showRebroad->setDbDayOffset($showData['add_show_rebroadcast_date_'.$i]);
|
|
|
|
$showRebroad->setDbStartTime($showData['add_show_rebroadcast_time_'.$i]);
|
|
|
|
$showRebroad->setDbShowId($showId);
|
|
|
|
$showRebroad->save();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} elseif ($isRecorded && $showData['add_show_rebroadcast'] && ($repeatType == -1)) {
|
2013-02-26 23:41:35 +01:00
|
|
|
for ($i=1; $i<=self::MAX_REBROADCAST_DATES; $i++) {
|
2013-02-26 16:20:02 +01:00
|
|
|
if ($showData['add_show_rebroadcast_date_absolute_'.$i]) {
|
|
|
|
$rebroadcastDate = new DateTime($showData["add_show_rebroadcast_date_absolute_$i"]);
|
|
|
|
$startDate = new DateTime($showData['add_show_start_date']);
|
|
|
|
$offsetDays = $startDate->diff($rebroadcastDate);
|
|
|
|
|
|
|
|
$showRebroad = new CcShowRebroadcast();
|
|
|
|
$showRebroad->setDbDayOffset($offsetDays->format("%a days"));
|
|
|
|
$showRebroad->setDbStartTime($showData['add_show_rebroadcast_time_absolute_'.$i]);
|
|
|
|
$showRebroad->setDbShowId($showId);
|
|
|
|
$showRebroad->save();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2013-02-26 23:41:35 +01:00
|
|
|
*
|
2013-03-08 17:19:03 +01:00
|
|
|
* Sets the fields for a cc_show_hosts table row
|
2013-02-26 23:41:35 +01:00
|
|
|
* @param $showData
|
|
|
|
* @param $showId
|
2013-02-26 16:20:02 +01:00
|
|
|
*/
|
|
|
|
public function createShowHosts($showData, $showId)
|
|
|
|
{
|
|
|
|
if (is_array($showData['add_show_hosts'])) {
|
|
|
|
foreach ($showData['add_show_hosts'] as $host) {
|
|
|
|
$showHost = new CcShowHosts();
|
|
|
|
$showHost->setDbShow($showId);
|
|
|
|
$showHost->setDbHost($host);
|
|
|
|
$showHost->save();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2013-02-26 19:21:39 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* Gets the date and time shows (particularly repeating shows)
|
|
|
|
* can be populated until.
|
|
|
|
*
|
|
|
|
* @return DateTime object
|
|
|
|
*/
|
|
|
|
public function getPopulateShowUntilDateTIme()
|
|
|
|
{
|
|
|
|
$populateUntil = Application_Model_Preference::GetShowsPopulatedUntil();
|
|
|
|
|
|
|
|
if (is_null($populateUntil)) {
|
|
|
|
$populateUntil = new DateTime("now", new DateTimeZone('UTC'));
|
|
|
|
Application_Model_Preference::SetShowsPopulatedUntil($populateUntil);
|
|
|
|
}
|
|
|
|
return $populateUntil;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* Gets the cc_show_days entries for a specific show
|
|
|
|
*
|
|
|
|
* @return array of ccShowDays objects
|
|
|
|
*/
|
|
|
|
public function getShowDays($showId)
|
|
|
|
{
|
|
|
|
$sql = "SELECT * FROM cc_show_days WHERE show_id = :show_id";
|
|
|
|
|
|
|
|
return Application_Common_Database::prepareAndExecute(
|
|
|
|
$sql, array(":show_id" => $showId), 'all');
|
|
|
|
}
|
2013-02-26 23:41:35 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* Enter description here ...
|
|
|
|
* @param $localStart timestring format "Y-m-d H:i:s" (not UTC)
|
|
|
|
* @param $duration string time interval (h)h:(m)m(:ss)
|
|
|
|
* @param $timezone string "Europe/Prague"
|
|
|
|
* @param $offset array (days, hours, mins) used for rebroadcast shows
|
|
|
|
*
|
|
|
|
* @return array of 2 DateTime objects, start/end time of the show in UTC
|
|
|
|
*/
|
|
|
|
public function createUTCStartEndDateTime($localStart, $duration, $timezone=null, $offset=null)
|
|
|
|
{
|
|
|
|
$userInfo = Zend_Auth::getInstance()->getStorage()->read();
|
|
|
|
$user = new Application_Model_User($userInfo->id);
|
|
|
|
$isAdminOrPM = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER));
|
|
|
|
|
|
|
|
if (!isset($timezone)) {
|
|
|
|
$timezone = Application_Model_Preference::GetUserTimezone($user->getId());
|
|
|
|
}
|
|
|
|
|
|
|
|
$startDateTime = new DateTime($localStart, new DateTimeZone($timezone));
|
|
|
|
if (isset($offset)) {
|
|
|
|
$startDateTime->add(new DateInterval("P{$offset["days"]}DT{$offset["hours"]}H{$offset["mins"]}M"));
|
|
|
|
}
|
|
|
|
//convert time to UTC
|
|
|
|
$startDateTime->setTimezone(new DateTimeZone('UTC'));
|
|
|
|
|
|
|
|
$endDateTime = clone $startDateTime;
|
|
|
|
$duration = explode(":", $duration);
|
|
|
|
list($hours, $mins) = array_slice($duration, 0, 2);
|
|
|
|
$endDateTime->add(new DateInterval("PT{$hours}H{$mins}M"));
|
|
|
|
|
|
|
|
return array($startDateTime, $endDateTime);
|
|
|
|
}
|
2013-02-26 16:20:02 +01:00
|
|
|
}
|