showId = $id; } /** * * Determines what the show end date should be based on * the form data * * @param $showData add/edit show form data * @return DateTime object in user's local timezone */ public function calculateEndDate($showData) { 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"); } return $endDate; } /** * * Sets the fields for a cc_show_days table row * @param $showData * @param $showId * @param $userId * @param $repeatType * @param $isRecorded */ public function setShowDays($showData, $userId, $repeatType, $isRecorded) { $startDateTime = new DateTime($showData['add_show_start_date']." ".$showData['add_show_start_time']); $endDate = $this->calculateEndDate($showData); /* 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($this->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($this->showId); $showDay->setDbRecord($isRecorded); $showDay->save(); } } } } /** * * Gets the cc_show_days entries for a specific show * * @return array of ccShowDays objects */ public function getShowDays() { /*$sql = "SELECT * FROM cc_show_days WHERE show_id = :show_id"; return Application_Common_Database::prepareAndExecute( $sql, array(":show_id" => $this->showId), 'all');*/ return CcShowDaysQuery::create()->filterByDbShowId( $this->showId)->find(); } public function getStartDateAndTime() { //CcShowDays object $showDay = $this->getCurrentShowDay(); $dt = new DateTime($showDay->getDbFirstShow()." ".$showDay->getDbStartTime(), new DateTimeZone($showDay->getDbTimezone())); $dt->setTimezone(new DateTimeZone("UTC")); return $dt->format("Y-m-d H:i"); } /** * * Returns a CcShowDays object of the show that * is currently being edited. */ public function getCurrentShowDay() { return CcShowDaysQuery::create()->filterByDbShowId($this->showId) ->findOne(); } }