/**
  * @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);
 }
示例#3
0
 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;
 }