public function generateCopyOfAdminWorkspaceHomeTabs(Workspace $workspace) { $adminHomeTabConfigs = $this->homeTabConfigRepo->findAdminWorkspaceHomeTabConfigs(); foreach ($adminHomeTabConfigs as $adminHomeTabConfig) { // Create HomeTab $adminHomeTab = $adminHomeTabConfig->getHomeTab(); $homeTab = new HomeTab(); $homeTab->setName($adminHomeTab->getName()); $homeTab->setType('workspace'); $homeTab->setWorkspace($workspace); $this->om->persist($homeTab); $this->om->flush(); // Create HomeTabConfig $homeTabConfig = new HomeTabConfig(); $homeTabConfig->setHomeTab($homeTab); $homeTabConfig->setWorkspace($workspace); $homeTabConfig->setType('workspace'); $homeTabConfig->setVisible($adminHomeTabConfig->isVisible()); $homeTabConfig->setLocked(false); $homeTabConfig->setTabOrder($adminHomeTabConfig->getTabOrder()); $this->om->persist($homeTabConfig); // Create WidgetHomeTabConfig $adminWidgetHomeTabConfigs = $this->widgetHomeTabConfigRepo->findAdminWidgetConfigs($adminHomeTab); foreach ($adminWidgetHomeTabConfigs as $adminWidgetHomeTabConfig) { $widgetHomeTabConfig = new WidgetHomeTabConfig(); $widgetHomeTabConfig->setHomeTab($homeTab); $adminWidgetInstance = $adminWidgetHomeTabConfig->getWidgetInstance(); $workspaceWidgetInstance = new WidgetInstance(); $workspaceWidgetInstance->setIsAdmin(false); $workspaceWidgetInstance->setIsDesktop(false); $workspaceWidgetInstance->setName($adminWidgetInstance->getName()); $workspaceWidgetInstance->setWidget($adminWidgetInstance->getWidget()); $workspaceWidgetInstance->setWorkspace($workspace); $this->om->persist($workspaceWidgetInstance); $widgetHomeTabConfig->setWidgetInstance($workspaceWidgetInstance); $widgetHomeTabConfig->setWorkspace($workspace); $widgetHomeTabConfig->setType('workspace'); $widgetHomeTabConfig->setVisible($adminWidgetHomeTabConfig->isVisible()); $widgetHomeTabConfig->setLocked(false); $widgetHomeTabConfig->setWidgetOrder($adminWidgetHomeTabConfig->getWidgetOrder()); $this->om->persist($widgetHomeTabConfig); } $this->om->flush(); } }
public function import(array $array, $workspace) { $homeTabOrder = 1; foreach ($array['data'] as $tab) { $homeTab = new HomeTab(); $homeTab->setName($tab['tab']['name']); $homeTab->setWorkspace($this->getWorkspace()); $homeTab->setType('workspace'); $this->om->persist($homeTab); $homeTabConfig = new HomeTabConfig(); $homeTabConfig->setHomeTab($homeTab); $homeTabConfig->setType('workspace'); $homeTabConfig->setWorkspace($this->getWorkspace()); $homeTabConfig->setLocked(false); $homeTabConfig->setVisible(true); $homeTabConfig->setTabOrder($homeTabOrder); $this->om->persist($homeTabConfig); $this->container->get('claroline.manager.home_tab_manager')->insertHomeTabConfig($homeTabConfig); $widgetOrder = 1; foreach ($tab['tab']['widgets'] as $widget) { $widgetType = $this->om->getRepository('ClarolineCoreBundle:Widget\\Widget')->findOneByName($widget['widget']['type']); $widgetInstance = new WidgetInstance(); $widgetInstance->setName($widget['widget']['name']); $widgetInstance->setWidget($widgetType); $widgetInstance->setWorkspace($this->getWorkspace()); $widgetInstance->setIsAdmin(false); $widgetInstance->setIsDesktop(false); $this->om->persist($widgetInstance); $widgetConfig = new WidgetDisplayConfig(); if ($widget['widget']['row']) { $widgetConfig->setRow($widget['widget']['row']); } if ($widget['widget']['column']) { $widgetConfig->setColumn($widget['widget']['column']); } if ($widget['widget']['width']) { $widgetConfig->setWidth($widget['widget']['width']); } if ($widget['widget']['height']) { $widgetConfig->setHeight($widget['widget']['height']); } if ($widget['widget']['color']) { $widgetConfig->setColor($widget['widget']['color']); } $widgetConfig->setWorkspace($workspace); $widgetConfig->setWidgetInstance($widgetInstance); $this->om->persist($widgetConfig); $widgetHomeTabConfig = new WidgetHomeTabConfig(); $widgetHomeTabConfig->setWidgetInstance($widgetInstance); $widgetHomeTabConfig->setHomeTab($homeTab); $widgetHomeTabConfig->setWorkspace($this->getWorkspace()); $widgetHomeTabConfig->setType('workspace'); $widgetHomeTabConfig->setVisible(true); $widgetHomeTabConfig->setLocked(false); $widgetHomeTabConfig->setWidgetOrder($widgetOrder); $this->om->persist($widgetHomeTabConfig); $importer = $this->getImporterByName($widget['widget']['type']); if (isset($widget['widget']['data']) && $importer) { $widgetdata = $widget['widget']['data']; $importer->import($widgetdata, $widgetInstance); } ++$widgetOrder; } ++$homeTabOrder; } }
/** * @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) { $this->om->startFlushSuite(); $homeTabConfigs = $this->homeTabManager->getHomeTabConfigsByWorkspaceAndHomeTabs($source, $homeTabs); $order = 1; $widgetCongigErrors = array(); $widgetDisplayConfigs = array(); 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); $newHomeTabConfig = new HomeTabConfig(); $newHomeTabConfig->setHomeTab($newHomeTab); $newHomeTabConfig->setWorkspace($workspace); $newHomeTabConfig->setType('workspace'); $newHomeTabConfig->setVisible($homeTabConfig->isVisible()); $newHomeTabConfig->setLocked($homeTabConfig->isLocked()); $newHomeTabConfig->setTabOrder($order); $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()); } else { $newWidgetDisplayConfig->setWidth($widget->getDefaultWidth()); $newWidgetDisplayConfig->setHeight($widget->getDefaultHeight()); } $this->om->persist($newWidgetDisplayConfig); if ($widget->isConfigurable()) { try { $this->dispatcher->dispatch('copy_widget_config_' . $widget->getName(), 'CopyWidgetConfiguration', array($widgetInstance, $newWidgetInstance, $resourceInfos)); } catch (NotPopulatedEventException $e) { $widgetCongigErrors[] = array('widgetName' => $widget->getName(), 'widgetInstanceName' => $widgetInstance->getName(), 'error' => $e->getMessage()); } } } } $this->om->endFlushSuite(); return $widgetCongigErrors; }
/** * @EXT\Route( * "/api/admin/home/tab/{homeTab}/type/{homeTabType}/widget/create", * name="api_post_admin_widget_instance_creation", * options = {"expose"=true} * ) * @EXT\ParamConverter("user", options={"authenticatedUser" = true}) * * Creates a new widget instance */ public function postAdminWidgetInstanceCreationAction(HomeTab $homeTab, $homeTabType = 'desktop') { $this->checkAdminHomeTab($homeTab, $homeTabType); $isDesktop = $homeTabType === 'desktop'; $formType = new WidgetInstanceConfigType('admin', $this->bundles); $formType->enableApi(); $form = $this->createForm($formType); $form->submit($this->request); if ($form->isValid()) { $formDatas = $form->getData(); $widget = $formDatas['widget']; $color = $form->get('color')->getData(); $textTitleColor = $form->get('textTitleColor')->getData(); $locked = $form->get('locked')->getData(); $visible = $form->get('visible')->getData(); $widgetInstance = new WidgetInstance(); $widgetHomeTabConfig = new WidgetHomeTabConfig(); $widgetDisplayConfig = new WidgetDisplayConfig(); $widgetInstance->setName($formDatas['name']); $widgetInstance->setWidget($widget); $widgetInstance->setIsAdmin(true); $widgetInstance->setIsDesktop($isDesktop); $widgetHomeTabConfig->setHomeTab($homeTab); $widgetHomeTabConfig->setWidgetInstance($widgetInstance); $widgetHomeTabConfig->setVisible($visible); $widgetHomeTabConfig->setLocked($locked); $widgetHomeTabConfig->setWidgetOrder(1); $widgetHomeTabConfig->setType('admin'); $widgetDisplayConfig->setWidgetInstance($widgetInstance); $widgetDisplayConfig->setWidth($widget->getDefaultWidth()); $widgetDisplayConfig->setHeight($widget->getDefaultHeight()); $widgetDisplayConfig->setColor($color); $widgetDisplayConfig->setDetails(['textTitleColor' => $textTitleColor]); $this->widgetManager->persistWidgetConfigs($widgetInstance, $widgetHomeTabConfig, $widgetDisplayConfig); $event = new LogWidgetAdminCreateEvent($homeTab, $widgetHomeTabConfig, $widgetDisplayConfig); $this->eventDispatcher->dispatch('log', $event); $widgetDatas = ['config' => $this->serializer->serialize($widgetHomeTabConfig, 'json', SerializationContext::create()->setGroups(['api_widget'])), 'display' => $this->serializer->serialize($widgetDisplayConfig, 'json', SerializationContext::create()->setGroups(['api_widget'])), 'configurable' => $widget->isConfigurable()]; return new JsonResponse($widgetDatas, 200); } else { $options = ['http_code' => 400, 'extra_parameters' => null, 'serializer_group' => 'api_widget']; return $this->apiManager->handleFormView('ClarolineCoreBundle:API:Widget\\widgetInstanceCreateForm.html.twig', $form, $options); } }
/** * @EXT\Route( * "/api/workspace/home/tab/widget/config/{whtc}/display/{wdc}/edit", * name="api_put_workspace_widget_instance_edition", * options = {"expose"=true} * ) * * Edits widget instance config */ public function putWorkspaceWidgetInstanceEditionAction(WidgetHomeTabConfig $whtc, WidgetDisplayConfig $wdc) { $workspace = $whtc->getWorkspace(); $this->checkToolEditionAccess($workspace); $widgetInstance = $wdc->getWidgetInstance(); $this->checkWorkspaceWidgetInstance($workspace, $widgetInstance); $this->checkWorkspaceWidgetDisplayConfig($workspace, $wdc); $widget = $widgetInstance->getWidget(); $color = $wdc->getColor(); $details = $wdc->getDetails(); $visible = $whtc->isVisible(); $locked = $whtc->isLocked(); $textTitleColor = isset($details['textTitleColor']) ? $details['textTitleColor'] : null; $formType = new WidgetInstanceConfigType('workspace', $this->bundles, false, [], $color, $textTitleColor, $locked, $visible, false); $formType->enableApi(); $form = $this->createForm($formType, $widgetInstance); $form->submit($this->request); if ($form->isValid()) { $instance = $form->getData(); $name = $instance->getName(); $color = $form->get('color')->getData(); $textTitleColor = $form->get('textTitleColor')->getData(); $visible = $form->get('visible')->getData(); $widgetInstance->setName($name); $whtc->setVisible($visible); $wdc->setColor($color); $details = $wdc->getDetails(); if (is_null($details)) { $details = []; } $details['textTitleColor'] = $textTitleColor; $wdc->setDetails($details); $this->widgetManager->persistWidgetConfigs($widgetInstance, null, $wdc); $event = new LogWidgetWorkspaceEditEvent($widgetInstance, $whtc, $wdc); $this->eventDispatcher->dispatch('log', $event); $widgetDatas = ['config' => $this->serializer->serialize($whtc, 'json', SerializationContext::create()->setGroups(['api_widget'])), 'display' => $this->serializer->serialize($wdc, 'json', SerializationContext::create()->setGroups(['api_widget']))]; return new JsonResponse($widgetDatas, 200); } else { $options = ['http_code' => 400, 'extra_parameters' => null, 'serializer_group' => 'api_widget', 'extra_infos' => $widget->isConfigurable()]; return $this->apiManager->handleFormView('ClarolineCoreBundle:API:Widget\\widgetInstanceEditForm.html.twig', $form, $options); } }
protected static function createWorkspaceWidgetHomeTabConfig($name, Widget $widget, HomeTab $homeTab, Workspace $workspace, $visible, $locked, $widgetOrder) { $widgetHomeTabConfig = new WidgetHomeTabConfig(); $widgetHomeTabConfig->setWidget($widget); $widgetHomeTabConfig->setHomeTab($homeTab); $widgetHomeTabConfig->setWorkspace($workspace); $widgetHomeTabConfig->setType('workspace'); $widgetHomeTabConfig->setVisible($visible); $widgetHomeTabConfig->setLocked($locked); $widgetHomeTabConfig->setWidgetOrder($widgetOrder); self::create($name, $widgetHomeTabConfig); self::$om->flush(); }
/** * @EXT\Route( * "desktop/hometab/{homeTab}/widget/instance/create", * name="claro_desktop_widget_instance_create", * options = {"expose"=true} * ) * @EXT\Method("POST") * @EXT\ParamConverter("user", options={"authenticatedUser" = true}) * @EXT\Template("ClarolineCoreBundle:Tool\desktop\home:desktopWidgetInstanceCreateModalForm.html.twig") * * Creates a widget instance. * * @return Response */ public function desktopWidgetInstanceCreateAction(User $user, HomeTab $homeTab) { $widgetInstance = new WidgetInstance(); $widgetDisplayConfig = new WidgetDisplayConfig(); $instanceForm = $this->formFactory->create(new WidgetInstanceType(true, true, $user->getEntityRoles()), $widgetInstance); $displayConfigForm = $this->formFactory->create(new WidgetDisplayConfigType(), $widgetDisplayConfig); $instanceForm->handleRequest($this->request); $displayConfigForm->handleRequest($this->request); if ($instanceForm->isValid() && $displayConfigForm->isValid()) { $widgetInstance->setUser($user); $widgetInstance->setIsAdmin(false); $widgetInstance->setIsDesktop(true); $widgetHomeTabConfig = new WidgetHomeTabConfig(); $widgetHomeTabConfig->setHomeTab($homeTab); $widgetHomeTabConfig->setWidgetInstance($widgetInstance); $widgetHomeTabConfig->setUser($user); $widgetHomeTabConfig->setVisible(true); $widgetHomeTabConfig->setLocked(false); $widgetHomeTabConfig->setWidgetOrder(1); $widgetHomeTabConfig->setType('desktop'); $widget = $widgetInstance->getWidget(); $widgetDisplayConfig->setWidgetInstance($widgetInstance); $widgetDisplayConfig->setUser($user); $widgetDisplayConfig->setWidth($widget->getDefaultWidth()); $widgetDisplayConfig->setHeight($widget->getDefaultHeight()); $this->widgetManager->persistWidgetConfigs($widgetInstance, $widgetHomeTabConfig, $widgetDisplayConfig); return new JsonResponse(array('widgetInstanceId' => $widgetInstance->getId(), 'widgetHomeTabConfigId' => $widgetHomeTabConfig->getId(), 'widgetDisplayConfigId' => $widgetDisplayConfig->getId(), 'color' => $widgetDisplayConfig->getColor(), 'name' => $widgetInstance->getName(), 'configurable' => $widgetInstance->getWidget()->isConfigurable() ? 1 : 0, 'width' => $widget->getDefaultWidth(), 'height' => $widget->getDefaultHeight()), 200); } else { return array('homeTab' => $homeTab, 'instanceForm' => $instanceForm->createView(), 'displayConfigForm' => $displayConfigForm->createView()); } }
/** * @EXT\Route( * "/home_tab/{homeTabId}/display/desktop/widgets", * name="claro_desktop_display_widgets" * ) * @EXT\ParamConverter("user", options={"authenticatedUser" = true}) * @EXT\Template("ClarolineCoreBundle:Widget:desktopWidgets.html.twig") * * Displays visible widgets. * * @return \Symfony\Component\HttpFoundation\Response */ public function displayDesktopWidgetsAction($homeTabId, User $user) { $widgets = array(); $configs = array(); $isLockedHomeTab = false; $homeTab = $this->homeTabManager->getHomeTabById($homeTabId); $initWidgetsPosition = false; $isWorkspace = false; if (is_null($homeTab)) { $isVisibleHomeTab = false; } else { $isVisibleHomeTab = $this->homeTabManager->checkHomeTabVisibilityForConfigByUser($homeTab, $user); $isLockedHomeTab = $this->homeTabManager->checkHomeTabLock($homeTab); } if ($isVisibleHomeTab) { if ($homeTab->getType() === 'admin_desktop') { $adminConfigs = $this->homeTabManager->getAdminWidgetConfigs($homeTab); if (!$isLockedHomeTab) { $userWidgetsConfigs = $this->homeTabManager->getWidgetConfigsByUser($homeTab, $user); } else { $userWidgetsConfigs = array(); } foreach ($adminConfigs as $adminConfig) { if ($adminConfig->isLocked()) { if ($adminConfig->isVisible()) { $configs[] = $adminConfig; } } else { $existingWidgetConfig = $this->homeTabManager->getUserAdminWidgetHomeTabConfig($homeTab, $adminConfig->getWidgetInstance(), $user); if (count($existingWidgetConfig) === 0) { $newWHTC = new WidgetHomeTabConfig(); $newWHTC->setHomeTab($homeTab); $newWHTC->setWidgetInstance($adminConfig->getWidgetInstance()); $newWHTC->setUser($user); $newWHTC->setWidgetOrder($adminConfig->getWidgetOrder()); $newWHTC->setVisible($adminConfig->isVisible()); $newWHTC->setLocked(false); $newWHTC->setType('admin_desktop'); $this->homeTabManager->insertWidgetHomeTabConfig($newWHTC); $configs[] = $newWHTC; } else { $configs[] = $existingWidgetConfig[0]; } } } foreach ($userWidgetsConfigs as $userWidgetsConfig) { $configs[] = $userWidgetsConfig; } } elseif ($homeTab->getType() === 'desktop') { $configs = $this->homeTabManager->getWidgetConfigsByUser($homeTab, $user); } elseif ($homeTab->getType() === 'workspace') { $workspace = $homeTab->getWorkspace(); $isLockedHomeTab = true; $isWorkspace = true; $configs = $this->homeTabManager->getWidgetConfigsByWorkspace($homeTab, $workspace); } $wdcs = $isWorkspace ? $this->widgetManager->generateWidgetDisplayConfigsForWorkspace($workspace, $configs) : $this->widgetManager->generateWidgetDisplayConfigsForUser($user, $configs); foreach ($wdcs as $wdc) { if ($wdc->getRow() === -1 || $wdc->getColumn() === -1) { $initWidgetsPosition = true; break; } } foreach ($configs as $config) { $event = $this->eventDispatcher->dispatch("widget_{$config->getWidgetInstance()->getWidget()->getName()}", 'DisplayWidget', array($config->getWidgetInstance())); $widget['config'] = $config; $widget['content'] = $event->getContent(); $widget['configurable'] = $config->isLocked() !== true && $config->getWidgetInstance()->getWidget()->isConfigurable(); $widgetInstanceId = $config->getWidgetInstance()->getId(); $widget['widgetDisplayConfig'] = $wdcs[$widgetInstanceId]; $widgets[] = $widget; } } $options = $this->userManager->getUserOptions($user); $editionMode = $options->getDesktopMode() === 1; $isHomeLocked = $this->roleManager->isHomeLocked($user); return array('widgetsDatas' => $widgets, 'isVisibleHomeTab' => $isVisibleHomeTab, 'isLockedHomeTab' => $isLockedHomeTab, 'homeTabId' => $homeTabId, 'initWidgetsPosition' => $initWidgetsPosition, 'isWorkspace' => $isWorkspace, 'editionMode' => $editionMode, 'isHomeLocked' => $isHomeLocked); }