/** * @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); } }
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; }