Spaces:
No application file
No application file
namespace Mautic\CategoryBundle\Controller; | |
use Doctrine\Persistence\ManagerRegistry; | |
use Mautic\CategoryBundle\Model\CategoryModel; | |
use Mautic\CategoryBundle\Model\ContactActionModel; | |
use Mautic\CoreBundle\Controller\AbstractFormController; | |
use Mautic\CoreBundle\Factory\MauticFactory; | |
use Mautic\CoreBundle\Factory\ModelFactory; | |
use Mautic\CoreBundle\Helper\CoreParametersHelper; | |
use Mautic\CoreBundle\Helper\UserHelper; | |
use Mautic\CoreBundle\Security\Permissions\CorePermissions; | |
use Mautic\CoreBundle\Service\FlashBag; | |
use Mautic\CoreBundle\Translation\Translator; | |
use Mautic\LeadBundle\Form\Type\BatchType; | |
use Symfony\Component\EventDispatcher\EventDispatcherInterface; | |
use Symfony\Component\HttpFoundation\JsonResponse; | |
use Symfony\Component\HttpFoundation\Request; | |
use Symfony\Component\HttpFoundation\RequestStack; | |
class BatchContactController extends AbstractFormController | |
{ | |
public function __construct( | |
private ContactActionModel $actionModel, | |
private CategoryModel $categoryModel, | |
ManagerRegistry $doctrine, | |
MauticFactory $factory, | |
ModelFactory $modelFactory, | |
UserHelper $userHelper, | |
CoreParametersHelper $coreParametersHelper, | |
EventDispatcherInterface $dispatcher, | |
Translator $translator, | |
FlashBag $flashBag, | |
RequestStack $requestStack, | |
CorePermissions $security | |
) { | |
parent::__construct($doctrine, $factory, $modelFactory, $userHelper, $coreParametersHelper, $dispatcher, $translator, $flashBag, $requestStack, $security); | |
} | |
/** | |
* Adds or removes categories to multiple contacts defined by contact ID. | |
*/ | |
public function execAction(Request $request): JsonResponse | |
{ | |
$params = $request->get('lead_batch'); | |
$ids = empty($params['ids']) ? [] : json_decode($params['ids']); | |
if ($ids && is_array($ids)) { | |
$categoriesToAdd = $params['add'] ?? []; | |
$categoriesToRemove = $params['remove'] ?? []; | |
$contactIds = json_decode($params['ids']); | |
$this->actionModel->addContactsToCategories($contactIds, $categoriesToAdd); | |
$this->actionModel->removeContactsFromCategories($contactIds, $categoriesToRemove); | |
$this->addFlashMessage('mautic.lead.batch_leads_affected', [ | |
'%count%' => count($ids), | |
]); | |
} else { | |
$this->addFlashMessage('mautic.core.error.ids.missing'); | |
} | |
return new JsonResponse([ | |
'closeModal' => true, | |
'flashes' => $this->getFlashContent(), | |
]); | |
} | |
/** | |
* View the modal form for adding contacts into categories in batches. | |
*/ | |
public function indexAction(): \Symfony\Component\HttpFoundation\Response | |
{ | |
$route = $this->generateUrl('mautic_category_batch_contact_set'); | |
$rows = $this->categoryModel->getLookupResults('global', '', 300); | |
$items = []; | |
foreach ($rows as $category) { | |
$items[$category['title']] = $category['id']; | |
} | |
return $this->delegateView( | |
[ | |
'viewParameters' => [ | |
'form' => $this->createForm( | |
BatchType::class, | |
[], | |
[ | |
'items' => $items, | |
'action' => $route, | |
] | |
)->createView(), | |
], | |
'contentTemplate' => '@MauticLead/Batch/form.html.twig', | |
'passthroughVars' => [ | |
'activeLink' => '#mautic_contact_index', | |
'mauticContent' => 'leadBatch', | |
'route' => $route, | |
], | |
] | |
); | |
} | |
} | |