/** * @DI\Observe("copy_widget_config_core_resource_logger") * * @param CopyWidgetConfigurationEvent $event */ public function onCopyWidgetConfiguration(CopyWidgetConfigurationEvent $event) { $source = $event->getWidgetInstance(); $copy = $event->getWidgetInstanceCopy(); $widgetConfig = $this->logManager->getLogConfig($source); if (!is_null($widgetConfig)) { $widgetConfigCopy = new LogWidgetConfig(); $widgetConfigCopy->setWidgetInstance($copy); $widgetConfigCopy->setAmount($widgetConfig->getAmount()); $widgetConfigCopy->setRestrictions($widgetConfig->getRestrictions()); $this->om->persist($widgetConfigCopy); $this->om->flush(); } $event->validateCopy(); $event->stopPropagation(); }
/** * @EXT\Route( * "/update_desktop_widget_config/{widgetInstance}", * name="claro_log_update_desktop_widget_config" * ) * @EXT\Method("POST") */ public function updateLogDesktopWidgetConfig(WidgetInstance $widgetInstance) { if (!$this->authorization->isGranted('edit', $widgetInstance)) { throw new AccessDeniedException(); } $em = $this->getDoctrine()->getManager(); $config = $this->get('claroline.log.manager')->getLogConfig($widgetInstance); if ($widgetInstance->isAdmin()) { $user = null; $hiddenConfigs = array(); $workspaces = array(); } else { $user = $this->tokenStorage->getToken()->getUser(); $hiddenConfigs = $em->getRepository('ClarolineCoreBundle:Log\\LogHiddenWorkspaceWidgetConfig')->findBy(array('user' => $user)); $workspaces = $this->workspaceManager->getWorkspacesByUserAndRoleNames($user, array('ROLE_WS_COLLABORATOR', 'ROLE_WS_MANAGER')); } $form = $this->get('form.factory')->create(new LogDesktopWidgetConfigType(), null, array('workspaces' => $workspaces)); $form->bind($this->getRequest()); if ($form->isValid()) { if (!$config) { $config = new LogWidgetConfig(); $config->setWidgetInstance($widgetInstance); } $data = $form->getData(); //remove all hiddenConfigs for user foreach ($hiddenConfigs as $hiddenConfig) { $em->remove($hiddenConfig); } $em->flush(); foreach ($data as $workspaceId => $visible) { if ($workspaceId != 'amount' and $visible !== true) { $hiddenConfig = new LogHiddenWorkspaceWidgetConfig(); $hiddenConfig->setUser($user); $hiddenConfig->setWorkspaceId($workspaceId); $em->persist($hiddenConfig); } } // save amount $config->setAmount($data['amount']); $em->persist($config); $em->flush(); } else { return $this->render('ClarolineCoreBundle:Log:config_desktop_widget_form.html.twig', array('form' => $form->createView(), 'instance' => $widgetInstance)); } return new Response('', 204); }
public function getDesktopWidgetList(WidgetInstance $instance) { $user = $this->container->get('security.token_storage')->getToken()->getUser(); $em = $this->container->get('doctrine.orm.entity_manager'); $hiddenConfigs = $em->getRepository('ClarolineCoreBundle:Log\\LogHiddenWorkspaceWidgetConfig')->findBy(array('user' => $user)); $workspaceIds = array(); foreach ($hiddenConfigs as $hiddenConfig) { $workspaceIds[] = $hiddenConfig->getWorkspaceId(); } // Get manager and collaborator workspaces config /** @var \Claroline\CoreBundle\Entity\Workspace\Workspace[] $workspaces */ $workspaces = $em->getRepository('ClarolineCoreBundle:Workspace\\Workspace')->findByUserAndRoleNamesNotIn($user, array('ROLE_WS_COLLABORATOR', 'ROLE_WS_MANAGER'), $workspaceIds); $configs = array(); if (count($workspaces) > 0) { //add this method to the repository @see ligne 68 $configs = $em->getRepository('ClarolineCoreBundle:Log\\LogWidgetConfig')->findByWorkspaces($workspaces); } $defaultInstance = $em->getRepository('ClarolineCoreBundle:Widget\\WidgetInstance')->findOneBy(array('widget' => $instance->getWidget(), 'isAdmin' => true, 'workspace' => null, 'user' => null, 'isDesktop' => false)); $defaultConfig = $this->getLogConfig($defaultInstance); if ($defaultConfig === null) { $defaultConfig = new LogWidgetConfig(); $defaultConfig->setRestrictions($this->container->get('claroline.log.manager')->getDefaultWorkspaceConfigRestrictions()); $defaultConfig->setAmount(5); } // Complete missing configs foreach ($workspaces as $workspace) { $config = null; for ($i = 0, $countConfigs = count($configs); $i < $countConfigs && $config === null; ++$i) { $current = $configs[$i]; if ($current->getWidgetInstance()->getWorkspace()->getId() == $workspace->getId()) { $config = $current; } } if ($config === null) { $config = new LogWidgetConfig(); $config->copy($defaultConfig); $widgetInstance = new WidgetInstance(); $widgetInstance->setWorkspace($workspace); $config->setWidgetInstance($widgetInstance); $configs[] = $config; } } // Remove configs which hasAllRestriction $configsCleaned = array(); $events = $this->container->get('claroline.event.manager')->getEvents(LogGenericEvent::DISPLAYED_WORKSPACE); foreach ($configs as $config) { if ($config->hasAllRestriction($events) === false) { $configsCleaned[] = $config; } } $configs = $configsCleaned; if (count($configs) === 0) { return null; } /** @var \CLaroline\CoreBundle\Repository\Log\LogRepository $logRepository */ $logRepository = $em->getRepository('ClarolineCoreBundle:Log\\Log'); $desktopConfig = $this->getLogConfig($instance); $desktopConfig = $desktopConfig === null ? $defaultConfig : $desktopConfig; $query = $logRepository->findLogsThroughConfigs($configs, $desktopConfig->getAmount()); $logs = $query->getResult(); $chartData = $logRepository->countByDayThroughConfigs($configs, $this->getDefaultRange()); //List item delegation $views = $this->renderLogs($logs); return array('logs' => $logs, 'listItemViews' => $views, 'chartData' => $chartData, 'logAmount' => $desktopConfig->getAmount(), 'isDesktop' => true, 'title' => $this->container->get('translator')->trans('your_workspace_activity_overview', array(), 'platform')); }