![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/app/bundles/DashboardBundle/Controller/Api/ |
<?php namespace Mautic\DashboardBundle\Controller\Api; use Doctrine\Persistence\ManagerRegistry; use Mautic\ApiBundle\Controller\CommonApiController; use Mautic\ApiBundle\Helper\EntityResultHelper; use Mautic\CoreBundle\Factory\MauticFactory; use Mautic\CoreBundle\Factory\ModelFactory; use Mautic\CoreBundle\Helper\AppVersion; use Mautic\CoreBundle\Helper\CoreParametersHelper; use Mautic\CoreBundle\Helper\DateTimeHelper; use Mautic\CoreBundle\Helper\InputHelper; use Mautic\CoreBundle\Security\Permissions\CorePermissions; use Mautic\CoreBundle\Translation\Translator; use Mautic\DashboardBundle\DashboardEvents; use Mautic\DashboardBundle\Entity\Widget; use Mautic\DashboardBundle\Event\WidgetTypeListEvent; use Mautic\DashboardBundle\Model\DashboardModel; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\RouterInterface; /** * @extends CommonApiController<Widget> */ class WidgetApiController extends CommonApiController { /** * @var DashboardModel|null */ protected $model; public function __construct(CorePermissions $security, Translator $translator, EntityResultHelper $entityResultHelper, RouterInterface $router, FormFactoryInterface $formFactory, AppVersion $appVersion, RequestStack $requestStack, ManagerRegistry $doctrine, ModelFactory $modelFactory, EventDispatcherInterface $dispatcher, CoreParametersHelper $coreParametersHelper, MauticFactory $factory) { $dashboardModel = $modelFactory->getModel('dashboard'); \assert($dashboardModel instanceof DashboardModel); $this->model = $dashboardModel; $this->entityClass = Widget::class; $this->entityNameOne = 'widget'; $this->entityNameMulti = 'widgets'; $this->serializerGroups = []; parent::__construct($security, $translator, $entityResultHelper, $router, $formFactory, $appVersion, $requestStack, $doctrine, $modelFactory, $dispatcher, $coreParametersHelper, $factory); } /** * Obtains a list of available widget types. * * @return Response */ public function getTypesAction() { $dispatcher = $this->dispatcher; $event = new WidgetTypeListEvent(); $event->setTranslator($this->translator); $dispatcher->dispatch($event, DashboardEvents::DASHBOARD_ON_MODULE_LIST_GENERATE); $view = $this->view(['success' => 1, 'types' => $event->getTypes()], Response::HTTP_OK); return $this->handleView($view); } /** * Obtains a list of available widget types. * * @param string $type of the widget * * @return Response */ public function getDataAction(Request $request, $type) { $start = microtime(true); $timezone = InputHelper::clean($request->get('timezone', null)); $from = InputHelper::clean($request->get('dateFrom', null)); $to = InputHelper::clean($request->get('dateTo', null)); $dataFormat = InputHelper::clean($request->get('dataFormat', null)); $unit = InputHelper::clean($request->get('timeUnit', 'Y')); $dataset = InputHelper::clean($request->get('dataset', [])); $response = ['success' => 0]; try { DateTimeHelper::validateMysqlDateTimeUnit($unit); } catch (\InvalidArgumentException $e) { return $this->returnError($e->getMessage(), Response::HTTP_BAD_REQUEST); } if ($timezone) { $fromDate = new \DateTime($from, new \DateTimeZone($timezone)); $toDate = new \DateTime($to, new \DateTimeZone($timezone)); } else { $fromDate = new \DateTime($from); $toDate = new \DateTime($to); } $params = [ 'timeUnit' => InputHelper::clean($request->get('timeUnit', 'Y')), 'dateFormat' => InputHelper::clean($request->get('dateFormat', null)), 'dateFrom' => $fromDate, 'dateTo' => $toDate, 'limit' => (int) $request->get('limit', null), 'filter' => InputHelper::clean($request->get('filter', [])), 'dataset' => $dataset, ]; // Merge filters into the root array as well as that's how widget edit forms send them. $params = array_merge($params, $params['filter']); $cacheTimeout = (int) $request->get('cacheTimeout', 0); $widgetHeight = (int) $request->get('height', 300); $widget = new Widget(); $widget->setParams($params); $widget->setType($type); $widget->setHeight($widgetHeight); $widget->setCacheTimeout($cacheTimeout); $this->model->populateWidgetContent($widget); $data = $widget->getTemplateData(); if (!$data) { return $this->notFound(); } if ('raw' == $dataFormat) { if (isset($data['chartData']['labels']) && isset($data['chartData']['datasets'])) { $rawData = []; foreach ($data['chartData']['datasets'] as $dataset) { $rawData[$dataset['label']] = []; foreach ($dataset['data'] as $key => $value) { $rawData[$dataset['label']][$data['chartData']['labels'][$key]] = $value; } } $data = $rawData; } elseif (isset($data['raw'])) { $data = $data['raw']; } } else { if (isset($data['raw'])) { unset($data['raw']); } } $response['cached'] = $widget->isCached(); $response['execution_time'] = microtime(true) - $start; $response['success'] = 1; $response['data'] = $data; $view = $this->view($response, Response::HTTP_OK); return $this->handleView($view); } }