*/ class DashboardTemplate extends Record { protected function applyLayout(Entity $preferences, Entity $template, bool $append): void { if (!$append) { $preferences->set([ 'dashboardLayout' => $template->get('layout'), 'dashletsOptions' => $template->get('dashletsOptions'), ]); } else { $dashletsOptions = $preferences->get('dashletsOptions'); if (!$dashletsOptions) { $dashletsOptions = (object) []; } $dashboardLayout = $preferences->get('dashboardLayout'); if (!$dashboardLayout) { $dashboardLayout = []; } foreach ($template->get('layout') as $item) { $exists = false; foreach ($dashboardLayout as $k => $item2) { if (isset($item->id) && isset($item2->id)) { if ($item->id === $item2->id) { $exists = true; $dashboardLayout[$k] = $item; } } } if (!$exists) { $dashboardLayout[] = $item; } } foreach ($template->get('dashletsOptions') as $id => $item) { $dashletsOptions->$id = $item; } $preferences->set([ 'dashboardLayout' => $dashboardLayout, 'dashletsOptions' => $dashletsOptions, ]); } } /** * @param string[] $userIdList * @throws NotFound * @throws Forbidden */ public function deployToUsers(string $id, array $userIdList, bool $append = false): void { $template = $this->getEntityManager()->getEntity('DashboardTemplate', $id); if (!$template) { throw new NotFound(); } foreach ($userIdList as $userId) { /** @var User|null $user */ $user = $this->getEntityManager()->getEntity('User', $userId); if ($user) { if ($user->isPortal() || $user->isApi()) { throw new Forbidden("Not allowed user type."); } } } foreach ($userIdList as $userId) { $preferences = $this->getEntityManager()->getEntity('Preferences', $userId); if (!$preferences) { continue; } $this->applyLayout($preferences, $template, $append); $this->getEntityManager()->saveEntity($preferences); } } public function deployToTeam(string $id, string $teamId, bool $append = false): void { $template = $this->getEntityManager()->getEntity('DashboardTemplate', $id); if (!$template) { throw new NotFound(); } $team = $this->getEntityManager()->getEntity('Team', $teamId); if (!$team) { throw new NotFound(); } $userList = $this->getEntityManager() ->getRDBRepository('User') ->join('teams') ->distinct() ->where([ 'teams.id' => $teamId, ]) ->find(); foreach ($userList as $user) { $preferences = $this->getEntityManager()->getEntity('Preferences', $user->getId()); if (!$preferences) { continue; } $this->applyLayout($preferences, $template, $append); $this->getEntityManager()->saveEntity($preferences); } } }