app->l11nManager, $request, $response); $view->setTemplate('/Modules/EventManagement/Theme/Backend/eventmanagement-list'); $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1004201001, $request, $response); $view->data['events'] = EventMapper::getAll() ->sort('id', OrderType::DESC) ->limit(25)->executeGetArray(); // Evaluate progress $view->data['progress'] = []; $taskProgress = []; $now = new \DateTime('now'); /** @var \Modules\EventManagement\Models\Event $event */ foreach ($view->data['events'] as $event) { if ($event->progressType === ProgressType::TASKS) { $taskProgress[] = $event->id; } elseif ($event->progressType === ProgressType::LINEAR) { $duration = (int) $event->start->diff($event->end)->format('%a'); $progress = (int) $event->start->diff($now)->format('%a'); $view->data['progress'][$event->id] = (int) \min(100, $duration / $progress * 100); } elseif ($event->progressType === ProgressType::EXPONENTIAL) { $duration = (int) $event->start->diff($event->end)->format('%a'); $progress = (int) $event->start->diff($now)->format('%a'); $view->data['progress'][$event->id] = (int) Numbers::remapRangeExponentially($progress, $duration); } elseif ($event->progressType === ProgressType::LOG) { $duration = (int) $event->start->diff($event->end)->format('%a'); $progress = (int) $event->start->diff($now)->format('%a'); $view->data['progress'][$event->id] = (int) Numbers::remapRangeLog($progress, $duration); } else { $view->data['progress'][$event->id] = $event->progress; } } // Count tasks per event where tasks are used as progress indication $eventIds = \implode(',', $taskProgress); if ($eventIds !== '') { $sql = <<app->dbPool->get()); $results = $query->raw($sql)->execute()?->fetchAll(\PDO::FETCH_ASSOC) ?? []; foreach ($results as $result) { $view->data['progress'][$result['id']] = (int) (($result['total_tasks'] - $result['open_tasks']) / $result['total_tasks']); } } return $view; } /** * Routing end-point for application behavior. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param array $data Generic data * * @return RenderableInterface * * @since 1.0.0 * @codeCoverageIgnore */ public function viewEventManagementCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface { $view = new View($this->app->l11nManager, $request, $response); $view->setTemplate('/Modules/EventManagement/Theme/Backend/eventmanagement-view'); $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1004201001, $request, $response); return $view; } /** * Routing end-point for application behavior. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param array $data Generic data * * @return RenderableInterface * * @since 1.0.0 * @codeCoverageIgnore */ public function viewEventManagementView(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface { /** @var \phpOMS\Model\Html\Head $head */ $head = $response->data['Content']->head; $head->addAsset(AssetType::CSS, '/Modules/Calendar/Theme/Backend/css/styles.css?v=' . self::VERSION); $view = new View($this->app->l11nManager, $request, $response); $view->setTemplate('/Modules/EventManagement/Theme/Backend/eventmanagement-view'); $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1004201001, $request, $response); $taskListView = new \Modules\Tasks\Theme\Backend\Components\Tasks\ListView($this->app->l11nManager, $request, $response); $taskListView->setTemplate('/Modules/Tasks/Theme/Backend/Components/Tasks/list'); $view->data['tasklist'] = $taskListView; $calendarView = new \Modules\Calendar\Theme\Backend\Components\Calendar\BaseView($this->app->l11nManager, $request, $response); $calendarView->setTemplate('/Modules/Calendar/Theme/Backend/Components/Calendar/mini'); $view->data['calendar'] = $calendarView; $mediaListView = new \Modules\Media\Views\MediaView($this->app->l11nManager, $request, $response); $mediaListView->setTemplate('/Modules/Media/Theme/Backend/Components/Media/list'); $view->data['medialist'] = $mediaListView; /** @var \Modules\EventManagement\Models\Event $event */ $event = EventMapper::get()->where('id', $request->getDataInt('id') ?? 0)->execute(); $view->data['event'] = $event; return $view; } }