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 class ProgramController extends Controller
{ {
private static $SCHEDULE_SQL = <<<QUERY 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`.`startdate`, `schedule`.`startday`, `schedule`.`starttime`,
`schedule`.`enddate`, `schedule`.`endday`, `schedule`.`endtime`, `schedule`.`shortnamesuffix` AS `suffix` `schedule`.`enddate`, `schedule`.`endday`, `schedule`.`endtime`, `schedule`.`shortnamesuffix` AS `suffix`
FROM `programs_schedule` AS `schedule` LEFT JOIN `programs` ON `schedule`.`program` = `programs`.`id` 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` LEFT JOIN `user_emailaddresses` ON `user_emailaddresses`.`user` = `users`.`id`
WHERE `programs_users`.`program` = :program WHERE `programs_users`.`program` = :program
AND `user_emailaddresses`.`preference` = 0 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) { foreach($hosts as $host) {
$program->hosts[] = new \Model\ProgramHost($host); $program->hosts[] = new \Model\ProgramHost($host);
} }
@@ -129,7 +130,7 @@ QUERY
sort($next); sort($next);
rsort($recent); 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'); $startMaandag = $start->modify('Monday this week');
foreach($programmas as $programma) { foreach($programmas as $programma) {
if($programma->suffix) $programma->name .= ' ' . $programma->suffix; 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')); $programmaStart = $startMaandag->add(\DateInterval::createFromDateString(($programma->startday - 1) % 7 . ' days'));
$programmaEinde = $startMaandag->add(\DateInterval::createFromDateString(($programma->endday - 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))) && (($programma->enddate == null) || ($programmaStart <= (new \DateTimeImmutable($programma->enddate))->setTime(23,59,59)))
&& (($programmaEinde >= $start) && ($programmaStart <= $einde))) && (($programmaEinde >= $start) && ($programmaStart <= $einde)))
{ {
$startEinde[] = [$programmaStart, PROGRAMMA_START, $programma]; $startEinde[] = [$programmaStart, PROGRAMMA_START, $programma->scheduleid];
$startEinde[] = [$programmaEinde, PROGRAMMA_EINDE, $programma]; $startEinde[] = [$programmaEinde, PROGRAMMA_EINDE, $programma->scheduleid];
} }
$programmaStart = $programmaStart->add($oneWeek); $programmaStart = $programmaStart->add($oneWeek);
@@ -215,7 +216,8 @@ QUERY
$fouten = []; $fouten = [];
$index = -1; $index = -1;
foreach($startEinde as $programmaWissel) { foreach($startEinde as $programmaWissel) {
$programma = $programmaWissel[PW_PROGRAMMA]; $scheduleId = $programmaWissel[PW_PROGRAMMA];
$programma = $programmaInfo[$scheduleId];
$tijdstip = $programmaWissel[PW_TIJDSTIP]; $tijdstip = $programmaWissel[PW_TIJDSTIP];
if($programmaWissel[PW_TIJDSTIP] < $start) { $tijdstip = $start; } if($programmaWissel[PW_TIJDSTIP] < $start) { $tijdstip = $start; }
if($programmaWissel[PW_TIJDSTIP] > $einde) { $tijdstip = $einde; } 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."]; $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) { for($prio = $programma->priority; $prio >= 0; --$prio) {
if($actieveProgrammas[$prio] != null) { if($actieveProgrammas[$prio] != null) {
if(($index == -1) || ($schema[$index]['starttime'] != $tijdstip)) { $index++; } 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; break;
} }
} }
@@ -240,7 +242,7 @@ QUERY
$schema[$index] = ['starttime' => $tijdstip, 'program' => null]; $schema[$index] = ['starttime' => $tijdstip, 'program' => null];
for($prio = $programma->priority; $prio < count($actieveProgrammas); ++$prio) { for($prio = $programma->priority; $prio < count($actieveProgrammas); ++$prio) {
if($actieveProgrammas[$prio] != null) { 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; break;
} }
} }

View File

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