示例#1
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();
 }
 protected static function createDesktopWidgetHomeTabConfig($name, Widget $widget, HomeTab $homeTab, User $user, $type, $visible, $locked, $widgetOrder)
 {
     $widgetHomeTabConfig = new WidgetHomeTabConfig();
     $widgetHomeTabConfig->setWidget($widget);
     $widgetHomeTabConfig->setHomeTab($homeTab);
     $widgetHomeTabConfig->setUser($user);
     $widgetHomeTabConfig->setType($type);
     $widgetHomeTabConfig->setVisible($visible);
     $widgetHomeTabConfig->setLocked($locked);
     $widgetHomeTabConfig->setWidgetOrder($widgetOrder);
     self::create($name, $widgetHomeTabConfig);
     self::$om->flush();
 }
示例#3
0
 /**
  * @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(
  *     "/api/home/tab/{htc}/widget/create",
  *     name="api_post_desktop_widget_instance_creation",
  *     options = {"expose"=true}
  * )
  * @EXT\ParamConverter("user", options={"authenticatedUser" = true})
  *
  * Creates a new widget instance
  */
 public function postDesktopWidgetInstanceCreationAction(User $user, HomeTabConfig $htc)
 {
     $this->checkWidgetCreation($user, $htc);
     $formType = new WidgetInstanceConfigType('desktop', $this->bundles, true, $user->getEntityRoles());
     $formType->enableApi();
     $form = $this->createForm($formType);
     $form->submit($this->request);
     if ($form->isValid()) {
         $homeTab = $htc->getHomeTab();
         $formDatas = $form->getData();
         $widget = $formDatas['widget'];
         $color = $form->get('color')->getData();
         $textTitleColor = $form->get('textTitleColor')->getData();
         $widgetInstance = new WidgetInstance();
         $widgetHomeTabConfig = new WidgetHomeTabConfig();
         $widgetDisplayConfig = new WidgetDisplayConfig();
         $widgetInstance->setName($formDatas['name']);
         $widgetInstance->setUser($user);
         $widgetInstance->setWidget($widget);
         $widgetInstance->setIsAdmin(false);
         $widgetInstance->setIsDesktop(true);
         $widgetHomeTabConfig->setHomeTab($homeTab);
         $widgetHomeTabConfig->setWidgetInstance($widgetInstance);
         $widgetHomeTabConfig->setUser($user);
         $widgetHomeTabConfig->setVisible(true);
         $widgetHomeTabConfig->setLocked(false);
         $widgetHomeTabConfig->setWidgetOrder(1);
         $widgetHomeTabConfig->setType('desktop');
         $widgetDisplayConfig->setWidgetInstance($widgetInstance);
         $widgetDisplayConfig->setUser($user);
         $widgetDisplayConfig->setWidth($widget->getDefaultWidth());
         $widgetDisplayConfig->setHeight($widget->getDefaultHeight());
         $widgetDisplayConfig->setColor($color);
         $widgetDisplayConfig->setDetails(['textTitleColor' => $textTitleColor]);
         $this->widgetManager->persistWidgetConfigs($widgetInstance, $widgetHomeTabConfig, $widgetDisplayConfig);
         $event = new LogWidgetUserCreateEvent($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' => $widgetHomeTabConfig->isLocked() !== true && $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);
     }
 }
示例#5
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);
 }