Spaces:
No application file
No application file
| namespace Mautic\ReportBundle\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\Security\Permissions\CorePermissions; | |
| use Mautic\CoreBundle\Translation\Translator; | |
| use Mautic\ReportBundle\Entity\Report; | |
| use Mautic\ReportBundle\Model\ReportModel; | |
| 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<Report> | |
| */ | |
| class ReportApiController extends CommonApiController | |
| { | |
| /** | |
| * @var ReportModel|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) | |
| { | |
| $reportModel = $modelFactory->getModel('report'); | |
| \assert($reportModel instanceof ReportModel); | |
| $this->model = $reportModel; | |
| $this->entityClass = Report::class; | |
| $this->entityNameOne = 'report'; | |
| $this->entityNameMulti = 'reports'; | |
| $this->serializerGroups = ['reportList', 'reportDetails']; | |
| parent::__construct($security, $translator, $entityResultHelper, $router, $formFactory, $appVersion, $requestStack, $doctrine, $modelFactory, $dispatcher, $coreParametersHelper, $factory); | |
| } | |
| /** | |
| * Obtains a compiled report. | |
| * | |
| * @param int $id Report ID | |
| * | |
| * @return Response | |
| */ | |
| public function getEntityAction(Request $request, $id) | |
| { | |
| $entity = $this->model->getEntity($id); | |
| if (!$entity instanceof $this->entityClass) { | |
| return $this->notFound(); | |
| } | |
| $reportData = $this->model->getReportData($entity, $this->formFactory, $this->getOptionsFromRequest($request)); | |
| // Unset keys that we don't need to send back | |
| foreach (['graphs', 'contentTemplate', 'columns'] as $key) { | |
| unset($reportData[$key]); | |
| } | |
| // Include report metadata | |
| $reportData[$this->entityNameOne] = $entity; | |
| return $this->handleView( | |
| $this->view($reportData, Response::HTTP_OK) | |
| ); | |
| } | |
| public function getReportAction(Request $request, int $id): Response | |
| { | |
| return $this->getEntityAction($request, $id); | |
| } | |
| /** | |
| * This method is careful to add new options from the request to keep BC. | |
| * It originally loaded all rows without any filter or pagination applied. | |
| */ | |
| private function getOptionsFromRequest(Request $request): array | |
| { | |
| $options = ['paginate'=> false, 'ignoreGraphData' => true]; | |
| if ($request->query->has('dateFrom')) { | |
| $options['dateFrom'] = new \DateTimeImmutable($request->query->get('dateFrom'), new \DateTimeZone('UTC')); | |
| } | |
| if ($request->query->has('dateTo')) { | |
| $options['dateTo'] = new \DateTimeImmutable($request->query->get('dateTo'), new \DateTimeZone('UTC')); | |
| } | |
| if ($request->query->has('page')) { | |
| $options['page'] = $request->query->getInt('page'); | |
| $options['paginate'] = true; | |
| } | |
| if ($request->query->has('limit')) { | |
| $options['limit'] = $request->query->getInt('limit'); | |
| $options['paginate'] = true; | |
| } | |
| return $options; | |
| } | |
| } | |