/** * Render upcoming episode HTML * * @param bool $wrap Whether to output the wrapper elements * * @return string */ static function getSidebarUpcoming($wrap = WRAP) { global $Database, $PREFIX_REGEX; /** @var $Upcoming Episode[] */ $Upcoming = $Database->where('airs > NOW()')->orderBy('airs', 'ASC')->get('episodes'); if (empty($Upcoming)) { return; } $HTML = ''; foreach ($Upcoming as $Episode) { $airtime = strtotime($Episode->airs); $airs = date('c', $airtime); $month = date('M', $airtime); $day = date('j', $airtime); $diff = Time::difference(time(), $airtime); $time = 'in '; if ($diff['time'] < Time::$IN_SECONDS['month']) { $tz = "(" . date('T', $airtime) . ")"; if (!empty($diff['day'])) { $time .= "{$diff['day']} day" . ($diff['day'] !== 1 ? 's' : '') . ' & '; } if (!empty($diff['hour'])) { $time .= "{$diff['hour']}:"; } foreach (array('minute', 'second') as $k) { $diff[$k] = CoreUtils::pad($diff[$k]); } $time = "<time datetime='{$airs}'>{$time}{$diff['minute']}:{$diff['second']} {$tz}</time>"; } else { $time = Time::tag($Episode->airs); } $title = !$Episode->isMovie ? $Episode->title : ($PREFIX_REGEX->match($Episode->title) ? Episodes::shortenTitlePrefix($Episode->title) : "Movie: {$Episode->title}"); $HTML .= "<li><div class='calendar'><span class='top'>{$month}</span><span class='bottom'>{$day}</span></div>" . "<div class='meta'><span class='title'>{$title}</span><span class='time'>Airs {$time}</span></div></li>"; } return $wrap ? "<section id='upcoming'><h2>Upcoming episodes</h2><ul>{$HTML}</ul></section>" : $HTML; }