starts === null) { return null; } try { $dt = new DateTime($this->starts, new DateTimeZone("UTC")); } catch (Exception $x) { throw new PropelException("Internally stored date/time/timestamp value could not be converted to DateTime: " . var_export($this->starts, true), $x); } if ($format === null) { // Because propel.useDateTimeClass is TRUE, we return a DateTime object. return $dt; } elseif (strpos($format, '%') !== false) { return strftime($format, $dt->format('U')); } else { return $dt->format($format); } } /** * Get the [optionally formatted] temporal [ends] column value. * * * @param string $format The date/time format string (either date()-style or strftime()-style). * If format is NULL, then the raw DateTime object will be returned. * @return mixed Formatted date/time value as string or DateTime object (if format is NULL), NULL if column is NULL * @throws PropelException - if unable to parse/validate the date/time value. */ public function getDbEnds($format = 'Y-m-d H:i:s') { if ($this->ends === null) { return null; } try { $dt = new DateTime($this->ends, new DateTimeZone("UTC")); } catch (Exception $x) { throw new PropelException("Internally stored date/time/timestamp value could not be converted to DateTime: " . var_export($this->ends, true), $x); } if ($format === null) { // Because propel.useDateTimeClass is TRUE, we return a DateTime object. return $dt; } elseif (strpos($format, '%') !== false) { return strftime($format, $dt->format('U')); } else { return $dt->format($format); } } /** * Get the [optionally formatted] temporal [last_scheduled] column value. * * * @param string $format The date/time format string (either date()-style or strftime()-style). * If format is NULL, then the raw DateTime object will be returned. * @return mixed Formatted date/time value as string or DateTime object (if format is NULL), NULL if column is NULL * @throws PropelException - if unable to parse/validate the date/time value. */ public function getDbLastScheduled($format = 'Y-m-d H:i:s') { if ($this->last_scheduled === null) { return null; } try { $dt = new DateTime($this->last_scheduled, new DateTimeZone("UTC")); } catch (Exception $x) { throw new PropelException("Internally stored date/time/timestamp value could not be converted to DateTime: " . var_export($this->last_scheduled, true), $x); } if ($format === null) { // Because propel.useDateTimeClass is TRUE, we return a DateTime object. return $dt; } elseif (strpos($format, '%') !== false) { return strftime($format, $dt->format('U')); } else { return $dt->format($format); } } //post save hook to update the cc_schedule status column for the tracks in the show. public function updateScheduleStatus(PropelPDO $con) { $this->updateDbTimeFilled($con); //scheduled track is in the show CcScheduleQuery::create() ->filterByDbInstanceId($this->id) ->filterByDbPlayoutStatus(0, Criteria::GREATER_EQUAL) ->filterByDbEnds($this->ends, Criteria::LESS_EQUAL) ->update(array('DbPlayoutStatus' => 1), $con); //scheduled track is a boundary track CcScheduleQuery::create() ->filterByDbInstanceId($this->id) ->filterByDbPlayoutStatus(0, Criteria::GREATER_EQUAL) ->filterByDbStarts($this->ends, Criteria::LESS_THAN) ->filterByDbEnds($this->ends, Criteria::GREATER_THAN) ->update(array('DbPlayoutStatus' => 2), $con); //scheduled track is overbooked. CcScheduleQuery::create() ->filterByDbInstanceId($this->id) ->filterByDbPlayoutStatus(0, Criteria::GREATER_EQUAL) ->filterByDbStarts($this->ends, Criteria::GREATER_THAN) ->update(array('DbPlayoutStatus' => 0), $con); $this->setDbLastScheduled(gmdate("Y-m-d H:i:s")); $this->save($con); } /** * * This function resets the cc_schedule table's position numbers so that * tracks for each cc_show_instances start at position 1 * * The position numbers can become out of sync when the user deletes items * from linekd shows filled with dyanmic smart blocks, where each instance * has a different amount of scheduled items */ public function correctSchedulePositions() { $schedule = CcScheduleQuery::create() ->filterByDbInstanceId($this->id) ->orderByDbStarts() ->find(); $pos = 0; foreach ($schedule as $item) { $item->setDbPosition($pos)->save(); $pos++; } } /** * Computes the value of the aggregate column time_filled * * @param PropelPDO $con A connection object * * @return mixed The scalar result from the aggregate query */ public function computeDbTimeFilled(PropelPDO $con) { $stmt = $con->prepare('SELECT SUM(clip_length) FROM "cc_schedule" WHERE cc_schedule.INSTANCE_ID = :p1'); $stmt->bindValue(':p1', $this->getDbId()); $stmt->execute(); return $stmt->fetchColumn(); } /** * Updates the aggregate column time_filled * * @param PropelPDO $con A connection object */ public function updateDbTimeFilled(PropelPDO $con) { $timefilled = $this->computeDbTimeFilled($con); if(is_null($timefilled)){ $timefilled = "00:00:00"; } $this->setDbTimeFilled($timefilled); $this->save($con); } public function preInsert(PropelPDO $con = null) { $now = new DateTime("now", new DateTimeZone("UTC")); $this->setDbCreated($now); return true; } public function isRecorded() { return $this->getDbRecord() == 1 ? true : false; } public function isRebroadcast() { return $this->getDbRebroadcast() == 1 ? true : false; } public function getLocalStartDateTime() { $startDT = $this->getDbStarts(null); return $startDT->setTimezone(new DateTimeZone(Application_Model_Preference::GetTimezone())); } } // CcShowInstances