/** * @EXT\Route( * "/api/admin/home/tab/widget/config/{whtc}/display/{wdc}/edit", * name="api_put_admin_widget_instance_edition", * options = {"expose"=true} * ) * @EXT\ParamConverter("user", options={"authenticatedUser" = true}) * * Edits widget instance config */ public function putAdminWidgetInstanceEditionAction(WidgetHomeTabConfig $whtc, WidgetDisplayConfig $wdc) { $widgetInstance = $wdc->getWidgetInstance(); $widget = $widgetInstance->getWidget(); $this->checkAdminAccessForWidgetHomeTabConfig($whtc); $this->checkAdminAccessForWidgetDisplayConfig($wdc); $this->checkAdminAccessForWidgetInstance($widgetInstance); $color = $wdc->getColor(); $details = $wdc->getDetails(); $visible = $whtc->isVisible(); $locked = $whtc->isLocked(); $textTitleColor = isset($details['textTitleColor']) ? $details['textTitleColor'] : null; $formType = new WidgetInstanceConfigType('admin', $this->bundles, false, [], $color, $textTitleColor, $locked, $visible, false); $formType->enableApi(); $form = $this->createForm($formType, $widgetInstance); $form->submit($this->request); if ($form->isValid()) { $instance = $form->getData(); $name = $instance->getName(); $color = $form->get('color')->getData(); $textTitleColor = $form->get('textTitleColor')->getData(); $visible = $form->get('visible')->getData(); $locked = $form->get('locked')->getData(); $widgetInstance->setName($name); $whtc->setVisible($visible); $whtc->setLocked($locked); $wdc->setColor($color); $details = $wdc->getDetails(); if (is_null($details)) { $details = []; } $details['textTitleColor'] = $textTitleColor; $wdc->setDetails($details); $this->widgetManager->persistWidgetConfigs($widgetInstance, null, $wdc); $event = new LogWidgetAdminEditEvent($widgetInstance, $whtc, $wdc); $this->eventDispatcher->dispatch('log', $event); $widgetDatas = ['config' => $this->serializer->serialize($whtc, 'json', SerializationContext::create()->setGroups(['api_widget'])), 'display' => $this->serializer->serialize($wdc, 'json', SerializationContext::create()->setGroups(['api_widget']))]; return new JsonResponse($widgetDatas, 200); } else { $options = ['http_code' => 400, 'extra_parameters' => null, 'serializer_group' => 'api_widget', 'extra_infos' => $widget->isConfigurable()]; return $this->apiManager->handleFormView('ClarolineCoreBundle:API:Widget\\widgetInstanceEditForm.html.twig', $form, $options); } }