vendor/pimcore/pimcore/bundles/AdminBundle/Controller/Admin/TargetingController.php line 200

Open in your IDE?
  1. <?php
  2. /**
  3.  * Pimcore
  4.  *
  5.  * This source file is available under two different licenses:
  6.  * - GNU General Public License version 3 (GPLv3)
  7.  * - Pimcore Commercial License (PCL)
  8.  * Full copyright and license information is available in
  9.  * LICENSE.md which is distributed with this source code.
  10.  *
  11.  *  @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  12.  *  @license    http://www.pimcore.org/license     GPLv3 and PCL
  13.  */
  14. namespace Pimcore\Bundle\AdminBundle\Controller\Admin;
  15. use Pimcore\Bundle\AdminBundle\Controller\AdminAbstractController;
  16. use Pimcore\Cache\Core\CoreCacheHandler;
  17. use Pimcore\Controller\KernelControllerEventInterface;
  18. use Pimcore\Model\Tool\Targeting;
  19. use Pimcore\Model\Tool\Targeting\TargetGroup;
  20. use Symfony\Component\HttpFoundation\JsonResponse;
  21. use Symfony\Component\HttpFoundation\Request;
  22. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. /**
  25.  * @Route("/targeting")
  26.  *
  27.  * @internal
  28.  */
  29. class TargetingController extends AdminAbstractController implements KernelControllerEventInterface
  30. {
  31.     // RULES
  32.     private function correctName(string $name): string
  33.     {
  34.         return preg_replace('/[#?*:\\\\<>|"%&@=;+]/''-'$name);
  35.     }
  36.     /**
  37.      * @Route("/rule/list", name="pimcore_admin_targeting_rulelist", methods={"GET"})
  38.      *
  39.      * @param Request $request
  40.      *
  41.      * @return JsonResponse
  42.      */
  43.     public function ruleListAction(Request $request)
  44.     {
  45.         $targets = [];
  46.         $list = new Targeting\Rule\Listing();
  47.         $list->setOrderKey('prio');
  48.         $list->setOrder('ASC');
  49.         foreach ($list->load() as $target) {
  50.             $targets[] = [
  51.                 'id' => $target->getId(),
  52.                 'text' => htmlspecialchars($target->getName()),
  53.                 'active' => $target->getActive(),
  54.                 'qtip' => 'ID: ' $target->getId(),
  55.             ];
  56.         }
  57.         return $this->adminJson($targets);
  58.     }
  59.     /**
  60.      * @Route("/rule/add", name="pimcore_admin_targeting_ruleadd", methods={"POST"})
  61.      *
  62.      * @param Request $request
  63.      *
  64.      * @return JsonResponse
  65.      */
  66.     public function ruleAddAction(Request $request)
  67.     {
  68.         $target = new Targeting\Rule();
  69.         $target->setName($this->correctName($request->get('name')));
  70.         $target->save();
  71.         return $this->adminJson(['success' => true'id' => $target->getId()]);
  72.     }
  73.     /**
  74.      * @Route("/rule/delete", name="pimcore_admin_targeting_ruledelete", methods={"DELETE"})
  75.      *
  76.      * @param Request $request
  77.      *
  78.      * @return JsonResponse
  79.      */
  80.     public function ruleDeleteAction(Request $request)
  81.     {
  82.         $success false;
  83.         $target Targeting\Rule::getById((int) $request->get('id'));
  84.         if ($target) {
  85.             $target->delete();
  86.             $success true;
  87.         }
  88.         return $this->adminJson(['success' => $success]);
  89.     }
  90.     /**
  91.      * @Route("/rule/get", name="pimcore_admin_targeting_ruleget", methods={"GET"})
  92.      *
  93.      * @param Request $request
  94.      *
  95.      * @return JsonResponse
  96.      */
  97.     public function ruleGetAction(Request $request)
  98.     {
  99.         $target Targeting\Rule::getById((int) $request->get('id'));
  100.         if (!$target) {
  101.             throw $this->createNotFoundException();
  102.         }
  103.         $target $target->getObjectVars();
  104.         return $this->adminJson($target);
  105.     }
  106.     /**
  107.      * @Route("/rule/save", name="pimcore_admin_targeting_rulesave", methods={"PUT"})
  108.      *
  109.      * @param Request $request
  110.      *
  111.      * @return JsonResponse
  112.      */
  113.     public function ruleSaveAction(Request $request)
  114.     {
  115.         $data $this->decodeJson($request->get('data'));
  116.         $target Targeting\Rule::getById((int) $request->get('id'));
  117.         if (!$target) {
  118.             throw $this->createNotFoundException();
  119.         }
  120.         $target->setValues($data['settings']);
  121.         $target->setName($this->correctName($target->getName()));
  122.         $target->setConditions($data['conditions']);
  123.         $target->setActions($data['actions']);
  124.         $target->save();
  125.         return $this->adminJson(['success' => true]);
  126.     }
  127.     /**
  128.      * @Route("/rule/order", name="pimcore_admin_targeting_ruleorder", methods={"POST"})
  129.      *
  130.      * @param Request $request
  131.      *
  132.      * @return JsonResponse
  133.      */
  134.     public function ruleOrderAction(Request $request)
  135.     {
  136.         $return = [
  137.             'success' => false,
  138.             'message' => '',
  139.         ];
  140.         $rules $this->decodeJson($request->get('rules'));
  141.         /** @var Targeting\Rule[] $changedRules */
  142.         $changedRules = [];
  143.         foreach ($rules as $id => $prio) {
  144.             $rule Targeting\Rule::getById((int)$id);
  145.             $prio = (int)$prio;
  146.             if ($rule) {
  147.                 if ($rule->getPrio() !== $prio) {
  148.                     $rule->setPrio((int)$prio);
  149.                     $changedRules[] = $rule;
  150.                 }
  151.             } else {
  152.                 $return['message'] = sprintf('Rule %d was not found', (int)$id);
  153.                 return $this->adminJson($return400);
  154.             }
  155.         }
  156.         // save only changed rules
  157.         foreach ($changedRules as $changedRule) {
  158.             $changedRule->save();
  159.         }
  160.         $return['success'] = true;
  161.         return $this->adminJson($return);
  162.     }
  163.     // TARGET GROUPS
  164.     /**
  165.      * @Route("/target-group/list", name="pimcore_admin_targeting_targetgrouplist", methods={"GET"})
  166.      *
  167.      * @param Request $request
  168.      *
  169.      * @return JsonResponse
  170.      */
  171.     public function targetGroupListAction(Request $request)
  172.     {
  173.         $targetGroups = [];
  174.         /** @var TargetGroup\Listing|TargetGroup\Listing\Dao $list */
  175.         $list = new TargetGroup\Listing();
  176.         if ($request->get('add-default')) {
  177.             $targetGroups[] = [
  178.                 'id' => 0,
  179.                 'text' => 'default',
  180.                 'active' => true,
  181.                 'qtip' => 0,
  182.             ];
  183.         }
  184.         foreach ($list->load() as $targetGroup) {
  185.             $targetGroups[] = [
  186.                 'id' => $targetGroup->getId(),
  187.                 'text' => htmlspecialchars($targetGroup->getName()),
  188.                 'active' => $targetGroup->getActive(),
  189.                 'qtip' => $targetGroup->getId(),
  190.             ];
  191.         }
  192.         return $this->adminJson($targetGroups);
  193.     }
  194.     /**
  195.      * @Route("/target-group/add", name="pimcore_admin_targeting_targetgroupadd", methods={"POST"})
  196.      *
  197.      * @param Request $request
  198.      * @param CoreCacheHandler $cache
  199.      *
  200.      * @return JsonResponse
  201.      */
  202.     public function targetGroupAddAction(Request $requestCoreCacheHandler $cache)
  203.     {
  204.         /** @var TargetGroup|TargetGroup\Dao $targetGroup */
  205.         $targetGroup = new TargetGroup();
  206.         $targetGroup->setName($this->correctName($request->get('name')));
  207.         $targetGroup->save();
  208.         $cache->clearTag('target_groups');
  209.         return $this->adminJson(['success' => true'id' => $targetGroup->getId()]);
  210.     }
  211.     /**
  212.      * @Route("/target-group/delete", name="pimcore_admin_targeting_targetgroupdelete", methods={"DELETE"})
  213.      *
  214.      * @param Request $request
  215.      * @param CoreCacheHandler $cache
  216.      *
  217.      * @return JsonResponse
  218.      */
  219.     public function targetGroupDeleteAction(Request $requestCoreCacheHandler $cache)
  220.     {
  221.         $success false;
  222.         $targetGroup TargetGroup::getById((int) $request->get('id'));
  223.         if ($targetGroup) {
  224.             $targetGroup->delete();
  225.             $success true;
  226.         }
  227.         $cache->clearTag('target_groups');
  228.         return $this->adminJson(['success' => $success]);
  229.     }
  230.     /**
  231.      * @Route("/target-group/get", name="pimcore_admin_targeting_targetgroupget", methods={"GET"})
  232.      *
  233.      * @param Request $request
  234.      *
  235.      * @return JsonResponse
  236.      */
  237.     public function targetGroupGetAction(Request $request)
  238.     {
  239.         $targetGroup TargetGroup::getById((int) $request->get('id'));
  240.         if (!$targetGroup) {
  241.             throw $this->createNotFoundException();
  242.         }
  243.         $targetGroup $targetGroup->getObjectVars();
  244.         return $this->adminJson($targetGroup);
  245.     }
  246.     /**
  247.      * @Route("/target-group/save", name="pimcore_admin_targeting_targetgroupsave", methods={"PUT"})
  248.      *
  249.      * @param Request $request
  250.      * @param CoreCacheHandler $cache
  251.      *
  252.      * @return JsonResponse
  253.      */
  254.     public function targetGroupSaveAction(Request $requestCoreCacheHandler $cache)
  255.     {
  256.         $data $this->decodeJson($request->get('data'));
  257.         $targetGroup TargetGroup::getById((int) $request->get('id'));
  258.         if (!$targetGroup) {
  259.             throw $this->createNotFoundException();
  260.         }
  261.         $targetGroup->setValues($data['settings']);
  262.         $targetGroup->setName($this->correctName($targetGroup->getName()));
  263.         $targetGroup->save();
  264.         $cache->clearTag('target_groups');
  265.         return $this->adminJson(['success' => true]);
  266.     }
  267.     /**
  268.      * @param ControllerEvent $event
  269.      */
  270.     public function onKernelControllerEvent(ControllerEvent $event)
  271.     {
  272.         if (!$event->isMainRequest()) {
  273.             return;
  274.         }
  275.         // check permissions
  276.         $this->checkActionPermission($event'targeting', ['targetGroupListAction']);
  277.     }
  278. }