/** * @EXT\Route( * "/api/admin/home/tab/type/{homeTabType}/create", * name="api_post_admin_home_tab_creation", * options = {"expose"=true} * ) * @EXT\ParamConverter("user", options={"authenticatedUser" = true}) * * Creates a desktop home tab * * @return \Symfony\Component\HttpFoundation\JsonResponse */ public function postAdminHomeTabCreationAction($homeTabType = 'desktop') { $isDesktop = $homeTabType === 'desktop'; $type = $isDesktop ? 'admin_desktop' : 'admin_workspace'; $formType = new HomeTabType('admin'); $formType->enableApi(); $form = $this->createForm($formType); $form->submit($this->request); if ($form->isValid()) { $formDatas = $form->getData(); $color = $form->get('color')->getData(); $locked = $form->get('locked')->getData(); $visible = $form->get('visible')->getData(); $roles = $formDatas['roles']; $homeTab = new HomeTab(); $homeTab->setName($formDatas['name']); $homeTab->setType($type); foreach ($roles as $role) { $homeTab->addRole($role); } $homeTabConfig = new HomeTabConfig(); $homeTabConfig->setHomeTab($homeTab); $homeTabConfig->setType($type); $homeTabConfig->setLocked($locked); $homeTabConfig->setVisible($visible); $homeTabConfig->setDetails(['color' => $color]); $lastOrder = $isDesktop ? $this->homeTabManager->getOrderOfLastAdminDesktopHomeTabConfig() : $this->homeTabManager->getOrderOfLastAdminWorkspaceHomeTabConfig(); if (is_null($lastOrder['order_max'])) { $homeTabConfig->setTabOrder(1); } else { $homeTabConfig->setTabOrder($lastOrder['order_max'] + 1); } $this->homeTabManager->persistHomeTabConfigs($homeTab, $homeTabConfig); $event = new LogHomeTabAdminCreateEvent($homeTabConfig); $this->eventDispatcher->dispatch('log', $event); return new JsonResponse($this->serializer->serialize($homeTabConfig, 'json', SerializationContext::create()->setGroups(['api_home_tab'])), 200); } else { $options = ['http_code' => 400, 'extra_parameters' => null, 'serializer_group' => 'api_home_tab']; return $this->apiManager->handleFormView('ClarolineCoreBundle:API:HomeTab\\adminHomeTabCreateForm.html.twig', $form, $options); } }
/** * @EXT\Route( * "/api/workspace/home/tab/{homeTabConfig}/bookmark", * name="api_post_workspace_home_tab_bookmark", * options = {"expose"=true} * ) * @EXT\ParamConverter("user", options={"authenticatedUser" = true}) * * Bookmark the given workspace homeTab. * * @return Response */ public function postWorkspaceHomeTabBookmarkAction(User $user, HomeTabConfig $homeTabConfig) { $homeTab = $homeTabConfig->getHomeTab(); $this->checkRoleAccessToHomeTab($homeTab); $userHTC = $this->homeTabManager->getOneVisibleWorkspaceUserHTC($homeTab, $user); if (is_null($userHTC)) { $workspace = $homeTab->getWorkspace(); $userHTC = new HomeTabConfig(); $userHTC->setHomeTab($homeTab); $userHTC->setUser($user); $userHTC->setWorkspace($workspace); $userHTC->setType('workspace_user'); $lastOrder = $this->homeTabManager->getOrderOfLastWorkspaceUserHomeTabByUser($user); if (is_null($lastOrder['order_max'])) { $userHTC->setTabOrder(1); } else { $userHTC->setTabOrder($lastOrder['order_max'] + 1); } $userHTC->setDetails($homeTabConfig->getDetails()); $this->homeTabManager->insertHomeTabConfig($userHTC); $event = new LogHomeTabWorkspacePinEvent($homeTabConfig); $this->eventDispatcher->dispatch('log', $event); } return new JsonResponse('success', 200); }
public function createUserVersion(HomeTabConfig $homeTabConfig, User $user) { $newHomeTabConfig = new HomeTabConfig(); $newHomeTabConfig->setHomeTab($homeTabConfig->getHomeTab()); $newHomeTabConfig->setType($homeTabConfig->getType()); $newHomeTabConfig->setUser($user); $newHomeTabConfig->setVisible($homeTabConfig->isVisible()); $newHomeTabConfig->setLocked($homeTabConfig->isLocked()); $newHomeTabConfig->setTabOrder($homeTabConfig->getTabOrder()); $newHomeTabConfig->setDetails($homeTabConfig->getDetails()); $this->om->persist($newHomeTabConfig); $this->om->flush(); return $newHomeTabConfig; }
/** * @EXT\Route( * "/api/desktop/home/tab/{homeTab}/edit", * name="api_put_user_home_tab_edition", * options = {"expose"=true} * ) * @EXT\ParamConverter("user", options={"authenticatedUser" = true}) * * Edits a home tab * * @return \Symfony\Component\HttpFoundation\JsonResponse */ public function putUserHomeTabEditionAction(User $user, HomeTab $homeTab) { $this->checkHomeLocked(); $this->checkHomeTabEdition($homeTab, $user); $formType = new HomeTabType(); $formType->enableApi(); $form = $this->createForm($formType); $form->submit($this->request); if ($form->isValid()) { $homeTabConfig = $this->homeTabManager->getHomeTabConfigByHomeTabAndUser($homeTab, $user); if (is_null($homeTabConfig)) { $homeTabConfig = new HomeTabConfig(); $homeTabConfig->setHomeTab($homeTab); $homeTabConfig->setType('desktop'); $homeTabConfig->setUser($user); $homeTabConfig->setLocked(false); $homeTabConfig->setVisible(true); $lastOrder = $this->homeTabManager->getOrderOfLastDesktopHomeTabConfigByUser($user); if (is_null($lastOrder['order_max'])) { $homeTabConfig->setTabOrder(1); } else { $homeTabConfig->setTabOrder($lastOrder['order_max'] + 1); } } $formDatas = $form->getData(); $homeTab->setName($formDatas['name']); $color = $form->get('color')->getData(); $details = $homeTabConfig->getDetails(); if (is_null($details)) { $details = []; } $details['color'] = $color; $homeTabConfig->setDetails($details); $this->homeTabManager->persistHomeTabConfigs($homeTab, $homeTabConfig); $event = new LogHomeTabUserEditEvent($homeTabConfig); $this->eventDispatcher->dispatch('log', $event); return new JsonResponse($this->serializer->serialize($homeTabConfig, 'json', SerializationContext::create()->setGroups(['api_home_tab'])), 200); } else { $options = ['http_code' => 400, 'extra_parameters' => null, 'serializer_group' => 'api_home_tab']; return $this->apiManager->handleFormView('ClarolineCoreBundle:API:HomeTab\\userHomeTabEditForm.html.twig', $form, $options); } }
/** * @param \Claroline\CoreBundle\Entity\Workspace\Workspace $source * @param \Claroline\CoreBundle\Entity\Workspace\Workspace $workspace * @param array $homeTabs */ private function duplicateHomeTabs(Workspace $source, Workspace $workspace, array $homeTabs, $resourceInfos, &$tabsInfos = []) { $this->log('Duplicating home tabs...'); $this->om->startFlushSuite(); $homeTabConfigs = $this->homeTabManager->getHomeTabConfigsByWorkspaceAndHomeTabs($source, $homeTabs); $order = 1; $widgetCongigErrors = []; $widgetDisplayConfigs = []; $widgets = []; foreach ($homeTabConfigs as $homeTabConfig) { $homeTab = $homeTabConfig->getHomeTab(); $widgetHomeTabConfigs = $homeTab->getWidgetHomeTabConfigs(); $wdcs = $this->widgetManager->getWidgetDisplayConfigsByWorkspaceAndWidgetHTCs($source, $widgetHomeTabConfigs->toArray()); foreach ($wdcs as $wdc) { $widgetInstanceId = $wdc->getWidgetInstance()->getId(); $widgetDisplayConfigs[$widgetInstanceId] = $wdc; } $newHomeTab = new HomeTab(); $newHomeTab->setType('workspace'); $newHomeTab->setWorkspace($workspace); $newHomeTab->setName($homeTab->getName()); $this->om->persist($newHomeTab); $tabsInfos[] = ['original' => $homeTab, 'copy' => $newHomeTab]; $newHomeTabConfig = new HomeTabConfig(); $newHomeTabConfig->setHomeTab($newHomeTab); $newHomeTabConfig->setWorkspace($workspace); $newHomeTabConfig->setType('workspace'); $newHomeTabConfig->setVisible($homeTabConfig->isVisible()); $newHomeTabConfig->setLocked($homeTabConfig->isLocked()); $newHomeTabConfig->setTabOrder($order); $newHomeTabConfig->setDetails($homeTabConfig->getDetails()); $this->om->persist($newHomeTabConfig); ++$order; foreach ($widgetHomeTabConfigs as $widgetConfig) { $widgetInstance = $widgetConfig->getWidgetInstance(); $widgetInstanceId = $widgetInstance->getId(); $widget = $widgetInstance->getWidget(); $newWidgetInstance = new WidgetInstance(); $newWidgetInstance->setIsAdmin(false); $newWidgetInstance->setIsDesktop(false); $newWidgetInstance->setWorkspace($workspace); $newWidgetInstance->setWidget($widget); $newWidgetInstance->setName($widgetInstance->getName()); $this->om->persist($newWidgetInstance); $newWidgetConfig = new WidgetHomeTabConfig(); $newWidgetConfig->setType('workspace'); $newWidgetConfig->setWorkspace($workspace); $newWidgetConfig->setHomeTab($newHomeTab); $newWidgetConfig->setWidgetInstance($newWidgetInstance); $newWidgetConfig->setVisible($widgetConfig->isVisible()); $newWidgetConfig->setLocked($widgetConfig->isLocked()); $newWidgetConfig->setWidgetOrder($widgetConfig->getWidgetOrder()); $this->om->persist($newWidgetConfig); $newWidgetDisplayConfig = new WidgetDisplayConfig(); $newWidgetDisplayConfig->setWorkspace($workspace); $newWidgetDisplayConfig->setWidgetInstance($newWidgetInstance); if (isset($widgetDisplayConfigs[$widgetInstanceId])) { $newWidgetDisplayConfig->setColor($widgetDisplayConfigs[$widgetInstanceId]->getColor()); $newWidgetDisplayConfig->setRow($widgetDisplayConfigs[$widgetInstanceId]->getRow()); $newWidgetDisplayConfig->setColumn($widgetDisplayConfigs[$widgetInstanceId]->getColumn()); $newWidgetDisplayConfig->setWidth($widgetDisplayConfigs[$widgetInstanceId]->getWidth()); $newWidgetDisplayConfig->setHeight($widgetDisplayConfigs[$widgetInstanceId]->getHeight()); $newWidgetDisplayConfig->setDetails($widgetDisplayConfigs[$widgetInstanceId]->getDetails()); } else { $newWidgetDisplayConfig->setWidth($widget->getDefaultWidth()); $newWidgetDisplayConfig->setHeight($widget->getDefaultHeight()); } $widgets[] = ['widget' => $widget, 'original' => $widgetInstance, 'copy' => $newWidgetInstance]; $this->om->persist($newWidgetDisplayConfig); } } $this->om->endFlushSuite(); $this->om->forceFlush(); foreach ($widgets as $widget) { if ($widget['widget']->isConfigurable()) { try { $this->dispatcher->dispatch('copy_widget_config_' . $widget['widget']->getName(), 'CopyWidgetConfiguration', [$widget['original'], $widget['copy'], $resourceInfos, $tabsInfos]); } catch (NotPopulatedEventException $e) { $widgetCongigErrors[] = ['widgetName' => $widget['widget']->getName(), 'widgetInstanceName' => $widget['original']->getName(), 'error' => $e->getMessage()]; } } } return $widgetCongigErrors; }