/**
  * Constructor.
  */
 public function __construct(HomeTab $homeTab, WidgetHomeTabConfig $whtc, WidgetDisplayConfig $wdc = null)
 {
     $widgetInstance = $whtc->getWidgetInstance();
     $widget = $widgetInstance->getWidget();
     $details = [];
     $details['tabId'] = $homeTab->getId();
     $details['tabName'] = $homeTab->getName();
     $details['tabType'] = $homeTab->getType();
     $details['tabIcon'] = $homeTab->getIcon();
     $details['widgetId'] = $widget->getId();
     $details['widgetName'] = $widget->getName();
     $details['widgetIsConfigurable'] = $widget->isConfigurable();
     $details['widgetIsExportable'] = $widget->isExportable();
     $details['widgetIsDisplayableInWorkspace'] = $widget->isDisplayableInWorkspace();
     $details['widgetIsDisplayableInDesktop'] = $widget->isDisplayableInDesktop();
     $details['id'] = $widgetInstance->getId();
     $details['name'] = $widgetInstance->getName();
     $details['icon'] = $widgetInstance->getIcon();
     $details['isAdmin'] = $widgetInstance->isAdmin();
     $details['isDesktop'] = $widgetInstance->isDesktop();
     $details['widgetHomeTabConfigId'] = $whtc->getId();
     $details['order'] = $whtc->getWidgetOrder();
     $details['type'] = $whtc->getType();
     $details['visible'] = $whtc->isVisible();
     $details['locked'] = $whtc->isLocked();
     if (!is_null($wdc)) {
         $details['widgetDisplayConfigId'] = $wdc->getId();
         $details['row'] = $wdc->getRow();
         $details['column'] = $wdc->getColumn();
         $details['width'] = $wdc->getWidth();
         $details['height'] = $wdc->getHeight();
         $details['color'] = $wdc->getColor();
     }
     parent::__construct(self::ACTION, $details);
 }
예제 #2
0
 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();
     }
 }
예제 #3
0
 /**
  * @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;
 }
예제 #4
0
 private function reinitializeDesktopTabs()
 {
     $this->log('Reinitializing desktop tabs...');
     $this->conn->query("\n            DELETE FROM claro_home_tab\n            WHERE type IN ('desktop', 'admin_desktop')\n        ");
     $em = $this->container->get('doctrine.orm.entity_manager');
     $em->clear();
     // weird but needed...
     $widgetRepo = $em->getRepository('ClarolineCoreBundle:Widget\\Widget');
     $widgets = array('claroline_announcement_widget', 'my_workspaces');
     $users = $em->getRepository('ClarolineCoreBundle:User')->findAll();
     foreach ($users as $user) {
         $tab = new HomeTab();
         $tab->setName('Informations');
         $tab->setType('desktop');
         $tab->setUser($user);
         $em->persist($tab);
         $tabConfig = new HomeTabConfig();
         $tabConfig->setHomeTab($tab);
         $tabConfig->setType('desktop');
         $tabConfig->setTabOrder(1);
         $tabConfig->setUser($user);
         $em->persist($tabConfig);
         for ($i = 0, $count = count($widgets); $i < $count; ++$i) {
             $widget = $widgetRepo->findOneByName($widgets[$i]);
             $instance = new WidgetInstance($widget);
             $instance->setName($this->translator->trans($widget->getName(), array(), 'widget'));
             $instance->setIsAdmin(false);
             $instance->setIsDesktop(true);
             $instance->setWidget($widget);
             $instance->setUser($user);
             $em->persist($instance);
             $widgetTabConfig = new WidgetHomeTabConfig();
             $widgetTabConfig->setType('desktop');
             $widgetTabConfig->setHomeTab($tab);
             $widgetTabConfig->setWidgetInstance($instance);
             $widgetTabConfig->setWidgetOrder($i + 1);
             $widgetTabConfig->setUser($user);
             $em->persist($widgetTabConfig);
         }
     }
     $em->flush();
 }
예제 #5
0
 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;
     }
 }
예제 #6
0
 private function checkAdminAccessForWidgetHomeTabConfig(WidgetHomeTabConfig $whtc)
 {
     if ($whtc->getType() !== 'admin' || !is_null($whtc->getUser()) || !is_null($whtc->getWorkspace())) {
         throw new AccessDeniedException();
     }
 }
 /**
  * @EXT\Route(
  *     "/api/workspace/home/tab/widget/{widgetHomeTabConfig}/delete",
  *     name="api_delete_workspace_widget_home_tab_config",
  *     options = {"expose"=true}
  * )
  *
  * Deletes a widget
  *
  * @return \Symfony\Component\HttpFoundation\JsonResponse
  */
 public function deleteAdminWidgetHomeTabConfigAction(WidgetHomeTabConfig $widgetHomeTabConfig)
 {
     $workspace = $widgetHomeTabConfig->getWorkspace();
     $this->checkToolEditionAccess($workspace);
     $widgetInstance = $widgetHomeTabConfig->getWidgetInstance();
     $datas = $this->serializer->serialize($widgetInstance, 'json', SerializationContext::create()->setGroups(['api_widget']));
     $this->homeTabManager->deleteWidgetHomeTabConfig($widgetHomeTabConfig);
     $this->widgetManager->removeInstance($widgetInstance);
     $event = new LogWidgetWorkspaceDeleteEvent($workspace, json_decode($datas, true));
     $this->eventDispatcher->dispatch('log', $event);
     return new JsonResponse($datas, 200);
 }
예제 #8
0
 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();
 }
 private function checkWidgetHomeTabConfigEdition(User $authenticatedUser, WidgetHomeTabConfig $whtc)
 {
     $user = $whtc->getUser();
     if ($authenticatedUser !== $user) {
         throw new AccessDeniedException();
     }
 }
예제 #10
0
 public function createWidgetInstance($name, Widget $widget, HomeTab $homeTab, Workspace $workspace = null, $isAdmin = false, $isLocked = false)
 {
     $this->log("Create widget {$name} in {$workspace->getCode()}");
     $widgetInstance = new WidgetInstance();
     $widgetHomeTabConfig = new WidgetHomeTabConfig();
     if ($workspace) {
         $type = 'workspace';
         $isDesktop = false;
     } else {
         $type = 'user';
         $isDesktop = true;
     }
     $widgetInstance->setWorkspace($workspace);
     $widgetInstance->setName($name);
     $widgetInstance->setIsAdmin($isAdmin);
     $widgetInstance->setIsDesktop($isDesktop);
     $widgetInstance->setWidget($widget);
     $widgetHomeTabConfig->setHomeTab($homeTab);
     $widgetHomeTabConfig->setWidgetInstance($widgetInstance);
     $widgetHomeTabConfig->setWorkspace($workspace);
     $widgetHomeTabConfig->setLocked($isLocked);
     $widgetHomeTabConfig->setWidgetOrder(1);
     $widgetHomeTabConfig->setType($type);
     $this->om->persist($widgetInstance);
     $this->om->persist($widgetHomeTabConfig);
     return $widgetInstance;
 }
예제 #11
0
 private function checkWorkspaceAccessForWidgetHomeTabConfig(WidgetHomeTabConfig $widgetHomeTabConfig, Workspace $workspace)
 {
     $widgetHomeTabConfigWorkspace = $widgetHomeTabConfig->getWorkspace();
     if ($widgetHomeTabConfig->getType() !== 'workspace' || is_null($widgetHomeTabConfigWorkspace) || $widgetHomeTabConfigWorkspace->getId() !== $workspace->getId()) {
         throw new AccessDeniedException();
     }
 }
예제 #12
0
 /**
  * @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);
 }