/** * Creates a widget instance. * * @param \Claroline\CoreBundle\Entity\Widget\Widget $widget * @param boolean $isAdmin * @param boolean $isDesktop * @param \Claroline\CoreBundle\Entity\User $user * @param \Claroline\CoreBundle\Entity\Workspace\Workspace $ws * * @return \Claroline\CoreBundle\Entity\Widget\WidgetInstance * * @throws \Exception */ public function createInstance(Widget $widget, $isAdmin, $isDesktop, User $user = null, Workspace $ws = null) { if (!$widget->isDisplayableInDesktop()) { if ($isDesktop || $user) { throw new \Exception("This widget doesn't support the desktop"); } } if (!$widget->isDisplayableInWorkspace()) { if (!$isDesktop || $ws) { throw new \Exception("This widget doesn't support the workspace"); } } $instance = new WidgetInstance($widget); $instance->setName($this->translator->trans($widget->getName(), array(), 'widget')); $instance->setIsAdmin($isAdmin); $instance->setIsDesktop($isDesktop); $instance->setWidget($widget); $instance->setUser($user); $instance->setWorkspace($ws); $this->om->persist($instance); $this->om->flush(); return $instance; }
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(); }
/** * @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); } }