Program ID instead of Schedule ID, convert next and recent to DateTime

This commit is contained in:
2017-07-29 20:45:58 +02:00
parent 4ff0d7acc2
commit decdc7abd7
2 changed files with 20 additions and 13 deletions

View File

@@ -10,7 +10,7 @@ ini_set('display_errors', true);
class ProgramController extends Controller
{
private static $SCHEDULE_SQL = <<<QUERY
SELECT `schedule`.`id`, `programs`.`longname` AS `name`, `programs`.`description` AS `description`, `programs`.`email`, `schedule`.`priority`,
SELECT `schedule`.`id` AS `scheduleid`, `programs`.`id` AS `id`, `programs`.`longname` AS `name`, `programs`.`description` AS `description`, `programs`.`email`, `schedule`.`priority`,
`schedule`.`startdate`, `schedule`.`startday`, `schedule`.`starttime`,
`schedule`.`enddate`, `schedule`.`endday`, `schedule`.`endtime`, `schedule`.`shortnamesuffix` AS `suffix`
FROM `programs_schedule` AS `schedule` LEFT JOIN `programs` ON `schedule`.`program` = `programs`.`id`
@@ -49,7 +49,8 @@ QUERY;
LEFT JOIN `user_emailaddresses` ON `user_emailaddresses`.`user` = `users`.`id`
WHERE `programs_users`.`program` = :program
AND `user_emailaddresses`.`preference` = 0
AND `programs_users`.`active` = 1", ['program' => $program->id]);
AND `programs_users`.`active` = 1
ORDER BY `name`", ['program' => $program->id]);
foreach($hosts as $host) {
$program->hosts[] = new \Model\ProgramHost($host);
}
@@ -129,7 +130,7 @@ QUERY
sort($next);
rsort($recent);
return ['recent' => array_reverse(array_splice($recent, 0, 2)), 'next' => $next, 'iscurrent' => $isCurrent];
return ['recent' => array_reverse(array_splice($recent, 0, 2)), 'next' => count($next) ? $next[0] : null, 'iscurrent' => $isCurrent];
}
/**
@@ -174,7 +175,7 @@ QUERY
$startMaandag = $start->modify('Monday this week');
foreach($programmas as $programma) {
if($programma->suffix) $programma->name .= ' ' . $programma->suffix;
$programmaInfo[$programma->id] = new \Model\Program($programma);
$programmaInfo[$programma->scheduleid] = new \Model\Program($programma);
$programmaStart = $startMaandag->add(\DateInterval::createFromDateString(($programma->startday - 1) % 7 . ' days'));
$programmaEinde = $startMaandag->add(\DateInterval::createFromDateString(($programma->endday - 1) % 7 . ' days'));
@@ -199,8 +200,8 @@ QUERY
&& (($programma->enddate == null) || ($programmaStart <= (new \DateTimeImmutable($programma->enddate))->setTime(23,59,59)))
&& (($programmaEinde >= $start) && ($programmaStart <= $einde)))
{
$startEinde[] = [$programmaStart, PROGRAMMA_START, $programma];
$startEinde[] = [$programmaEinde, PROGRAMMA_EINDE, $programma];
$startEinde[] = [$programmaStart, PROGRAMMA_START, $programma->scheduleid];
$startEinde[] = [$programmaEinde, PROGRAMMA_EINDE, $programma->scheduleid];
}
$programmaStart = $programmaStart->add($oneWeek);
@@ -215,7 +216,8 @@ QUERY
$fouten = [];
$index = -1;
foreach($startEinde as $programmaWissel) {
$programma = $programmaWissel[PW_PROGRAMMA];
$scheduleId = $programmaWissel[PW_PROGRAMMA];
$programma = $programmaInfo[$scheduleId];
$tijdstip = $programmaWissel[PW_TIJDSTIP];
if($programmaWissel[PW_TIJDSTIP] < $start) { $tijdstip = $start; }
if($programmaWissel[PW_TIJDSTIP] > $einde) { $tijdstip = $einde; }
@@ -226,11 +228,11 @@ QUERY
$fouten[] = [$tijdstip, "Begin van {$programma->name} maar {$actieveProgrammas[$programma->priority]->name} is nog actief."];
}
$actieveProgrammas[$programma->priority] = $programma;
$actieveProgrammas[$programma->priority] = $scheduleId;
for($prio = $programma->priority; $prio >= 0; --$prio) {
if($actieveProgrammas[$prio] != null) {
if(($index == -1) || ($schema[$index]['starttime'] != $tijdstip)) { $index++; }
$schema[$index] = ['starttime' => $tijdstip, 'endtime' => null, 'program' => $programmaInfo[$actieveProgrammas[$prio]->id]];
$schema[$index] = ['starttime' => $tijdstip, 'endtime' => null, 'program' => $programmaInfo[$actieveProgrammas[$prio]]];
break;
}
}
@@ -240,7 +242,7 @@ QUERY
$schema[$index] = ['starttime' => $tijdstip, 'program' => null];
for($prio = $programma->priority; $prio < count($actieveProgrammas); ++$prio) {
if($actieveProgrammas[$prio] != null) {
$schema[$index] = ['starttime' => $tijdstip, 'endtime' => null, 'program' => $programmaInfo[$actieveProgrammas[$prio]->id]];
$schema[$index] = ['starttime' => $tijdstip, 'endtime' => null, 'program' => $programmaInfo[$actieveProgrammas[$prio]]];
break;
}
}

View File

@@ -7,7 +7,7 @@ class Program extends Model {
public $name;
public $description;
public $email;
public $isSpecial;
public $priority;
// TODO: Implementeren
public $hosts;
@@ -15,9 +15,14 @@ class Program extends Model {
public function __construct($data) {
parent::__construct($data);
if($this->schedule && $this->schedule->next && $this->schedule->next->time) {
parent::ConvertToDateTime($this->schedule->next->time);
}
if(!isset($data->isSpecial) && isset($data->priority)) {
$this->isSpecial = ($data->priority < 2);
if($this->schedule && $this->schedule->recent) {
foreach($this->schedule->recent as &$recent) {
parent::ConvertToDateTime($recent->time);
}
}
if(($mailComma = strpos($data->email, ',')) !== false) {