/**
  * @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);
     }
 }
Ejemplo n.º 2
0
 public function generateWidgetDisplayConfigsForUser(User $user, array $widgetHTCs)
 {
     $results = [];
     $widgetInstances = [];
     $mappedWHTCs = [];
     $userTab = [];
     $adminTab = [];
     foreach ($widgetHTCs as $whtc) {
         $widgetInstance = $whtc->getWidgetInstance();
         $widgetInstances[] = $widgetInstance;
         if ($whtc->getType() === 'admin') {
             $mappedWHTCs[$widgetInstance->getId()] = $whtc;
         }
     }
     $usersWDCs = $this->getWidgetDisplayConfigsByUserAndWidgets($user, $widgetInstances);
     $adminWDCs = $this->getAdminWidgetDisplayConfigsByWidgets($widgetInstances);
     foreach ($usersWDCs as $userWDC) {
         $widgetInstanceId = $userWDC->getWidgetInstance()->getId();
         $userTab[$widgetInstanceId] = $userWDC;
     }
     foreach ($adminWDCs as $adminWDC) {
         $widgetInstanceId = $adminWDC->getWidgetInstance()->getId();
         $adminTab[$widgetInstanceId] = $adminWDC;
     }
     $this->om->startFlushSuite();
     foreach ($widgetInstances as $widgetInstance) {
         $id = $widgetInstance->getId();
         if (isset($userTab[$id])) {
             if (isset($mappedWHTCs[$id]) && isset($adminTab[$id])) {
                 $changed = false;
                 if ($userTab[$id]->getColor() !== $adminTab[$id]->getColor() || $userTab[$id]->getDetails() !== $adminTab[$id]->getDetails()) {
                     $userTab[$id]->setColor($adminTab[$id]->getColor());
                     $userTab[$id]->setDetails($adminTab[$id]->getDetails());
                     $changed = true;
                 }
                 if ($changed) {
                     $this->om->persist($userTab[$id]);
                 }
             }
             $results[$id] = $userTab[$id];
         } elseif (isset($adminTab[$id])) {
             $wdc = new WidgetDisplayConfig();
             $wdc->setWidgetInstance($widgetInstance);
             $wdc->setUser($user);
             $wdc->setRow($adminTab[$id]->getRow());
             $wdc->setColumn($adminTab[$id]->getColumn());
             $wdc->setWidth($adminTab[$id]->getWidth());
             $wdc->setHeight($adminTab[$id]->getHeight());
             $wdc->setColor($adminTab[$id]->getColor());
             $this->om->persist($wdc);
             $results[$id] = $wdc;
         } else {
             $widget = $widgetInstance->getWidget();
             $wdc = new WidgetDisplayConfig();
             $wdc->setWidgetInstance($widgetInstance);
             $wdc->setUser($user);
             $wdc->setWidth($widget->getDefaultWidth());
             $wdc->setHeight($widget->getDefaultHeight());
             $this->om->persist($wdc);
             $results[$id] = $wdc;
         }
     }
     $this->om->endFlushSuite();
     return $results;
 }