diff options
Diffstat (limited to 'app/frontend/dto/CalendarGroupDTO.php')
-rw-r--r-- | app/frontend/dto/CalendarGroupDTO.php | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/app/frontend/dto/CalendarGroupDTO.php b/app/frontend/dto/CalendarGroupDTO.php new file mode 100644 index 0000000..7b64c6e --- /dev/null +++ b/app/frontend/dto/CalendarGroupDTO.php @@ -0,0 +1,44 @@ +<?php + +Prado::using('Application.model.Category'); +Prado::using('Application.dto.CalendarDTO'); + +class CalendarGroupDTO { + + public $Name; + public $ID; + public $Priority; + public $Calendars = []; + + public function loadRecord(Category $categoryRecord, array $calendars) { + $this->Name = $categoryRecord->Name; + $this->ID = $categoryRecord->ID; + $this->Priority = $categoryRecord->Priority; + $this->Calendars = array_map( + function($calendarRecord) { + $dto = new CalendarDTO(); + $dto->loadRecord($calendarRecord); + return $dto; + }, + array_filter( + $calendars, + function($calendarRecord) use($categoryRecord) { + return $categoryRecord->ID == $calendarRecord->CategoryID; + } + ) + ); + usort($this->Calendars, ['CalendarDTO', '__compare']); + } + + public static function __compare(CalendarGroupDTO $cat1, + CalendarGroupDTO $cat2) { + $cmp = ($cat1->Priority ?: PHP_MAX_INT) - ($cat2->Priority ?: PHP_MAX_INT); + if ($cmp !== 0) { + return $cmp; + } + return strcmp($cat1->Name, $cat2->Name); + } + +} + +?> |