Spaces:
No application file
No application file
| namespace MauticPlugin\MauticFocusBundle\Controller; | |
| use Mautic\CacheBundle\Cache\CacheProvider; | |
| use Mautic\CoreBundle\Controller\AjaxController as CommonAjaxController; | |
| use Mautic\CoreBundle\Helper\InputHelper; | |
| use MauticPlugin\MauticFocusBundle\Helper\IframeAvailabilityChecker; | |
| use MauticPlugin\MauticFocusBundle\Model\FocusModel; | |
| use Symfony\Component\HttpFoundation\JsonResponse; | |
| use Symfony\Component\HttpFoundation\Request; | |
| class AjaxController extends CommonAjaxController | |
| { | |
| /** | |
| * This method produces HTTP request checking headers which are blocking availability for iframe inheritance for other pages. | |
| */ | |
| public function checkIframeAvailabilityAction(Request $request, IframeAvailabilityChecker $availabilityChecker): JsonResponse | |
| { | |
| $url = $request->query->get('website'); | |
| return $availabilityChecker->check($url, $request->getScheme()); | |
| } | |
| public function generatePreviewAction(Request $request): JsonResponse | |
| { | |
| $responseContent = ['html' => '', 'style' => '']; | |
| $focus = $request->request->all(); | |
| if (isset($focus['focus'])) { | |
| $focusArray = InputHelper::_($focus['focus']); | |
| if (!empty($focusArray['style']) && !empty($focusArray['type'])) { | |
| /** @var FocusModel $model */ | |
| $model = $this->getModel('focus'); | |
| $focusArray['id'] = 'preview'; | |
| $responseContent['html'] = $model->getContent($focusArray, true); | |
| $responseContent['style'] = $focusArray['style']; // Required by JS in response | |
| } | |
| } | |
| return $this->sendJsonResponse($responseContent); | |
| } | |
| public function getViewsCountAction(Request $request, CacheProvider $cacheProvider): JsonResponse | |
| { | |
| $focusId = (int) InputHelper::clean($request->query->get('focusId')); | |
| if (0 === $focusId) { | |
| return $this->sendJsonResponse([ | |
| 'success' => 0, | |
| 'message' => $this->translator->trans('mautic.core.error.badrequest'), | |
| ], 400); | |
| } | |
| $cacheTimeout = (int) $this->coreParametersHelper->get('cached_data_timeout'); | |
| $cacheItem = $cacheProvider->getItem('focus.viewsCount.'.$focusId); | |
| if ($cacheItem->isHit()) { | |
| $cacheItemValue = $cacheItem->get(); | |
| $viewsCount = $cacheItemValue['views']; | |
| $uniqueViewsCount = $cacheItemValue['uniqueViews']; | |
| } else { | |
| /** @var FocusModel $model */ | |
| $model = $this->getModel('focus'); | |
| $focus = $model->getEntity($focusId); | |
| if (null === $focus) { | |
| return $this->sendJsonResponse([ | |
| 'success' => 0, | |
| 'message' => $this->translator->trans('mautic.api.call.notfound'), | |
| ], 404); | |
| } | |
| $viewsCount = $model->getViewsCount($focus); | |
| $uniqueViewsCount = $model->getUniqueViewsCount($focus); | |
| $cacheItem->set([ | |
| 'views' => $viewsCount, | |
| 'uniqueViews' => $uniqueViewsCount, | |
| ]); | |
| $cacheItem->tag("focus.{$focusId}"); | |
| $cacheItem->expiresAfter($cacheTimeout * 60); | |
| $cacheProvider->save($cacheItem); | |
| } | |
| return $this->sendJsonResponse([ | |
| 'success' => 1, | |
| 'views' => $viewsCount, | |
| 'uniqueViews' => $uniqueViewsCount, | |
| ]); | |
| } | |
| public function getClickThroughCountAction(Request $request, CacheProvider $cacheProvider): JsonResponse | |
| { | |
| $focusId = (int) InputHelper::clean($request->query->get('focusId')); | |
| if (0 === $focusId) { | |
| return $this->sendJsonResponse([ | |
| 'success' => 0, | |
| 'message' => $this->translator->trans('mautic.core.error.badrequest'), | |
| ], 400); | |
| } | |
| $cacheTimeout = (int) $this->coreParametersHelper->get('cached_data_timeout'); | |
| $cacheItem = $cacheProvider->getItem('focus.clickThroughCount.'.$focusId); | |
| if ($cacheItem->isHit()) { | |
| $clickThroughCount = $cacheItem->get(); | |
| } else { | |
| /** @var FocusModel $model */ | |
| $model = $this->getModel('focus'); | |
| $focus = $model->getEntity($focusId); | |
| if (null === $focus) { | |
| return $this->sendJsonResponse([ | |
| 'success' => 0, | |
| 'message' => $this->translator->trans('mautic.api.call.notfound'), | |
| ], 404); | |
| } | |
| $clickThroughCount = $model->getClickThroughCount($focus); | |
| $cacheItem->set($clickThroughCount); | |
| $cacheItem->tag("focus.{$focusId}"); | |
| $cacheItem->expiresAfter($cacheTimeout * 60); | |
| $cacheProvider->save($cacheItem); | |
| } | |
| return $this->sendJsonResponse([ | |
| 'success' => 1, | |
| 'clickThrough' => $clickThroughCount, | |
| ]); | |
| } | |
| } | |