Spaces:
No application file
No application file
| namespace Mautic\CampaignBundle\Controller; | |
| use Mautic\CampaignBundle\Form\Type\CampaignLeadSourceType; | |
| use Mautic\CampaignBundle\Model\CampaignModel; | |
| use Mautic\CoreBundle\Controller\FormController as CommonFormController; | |
| use Symfony\Component\HttpFoundation\JsonResponse; | |
| use Symfony\Component\HttpFoundation\Request; | |
| use Symfony\Component\HttpFoundation\Response; | |
| class SourceController extends CommonFormController | |
| { | |
| /** | |
| * @var string[] | |
| */ | |
| private array $supportedSourceTypes = ['lists', 'forms']; | |
| /** | |
| * @param int $objectId | |
| * | |
| * @return Response | |
| */ | |
| public function newAction(Request $request, $objectId = 0) | |
| { | |
| $success = 0; | |
| $valid = $cancelled = false; | |
| $method = $request->getMethod(); | |
| $session = $request->getSession(); | |
| if ('POST' == $method) { | |
| $source = $request->request->all()['campaign_leadsource'] ?? []; | |
| $sourceType = $source['sourceType']; | |
| } else { | |
| $sourceType = $request->query->get('sourceType'); | |
| $source = [ | |
| 'sourceType' => $sourceType, | |
| ]; | |
| } | |
| // set the sourceType key for sources | |
| if (!in_array($sourceType, $this->supportedSourceTypes)) { | |
| return $this->modalAccessDenied(); | |
| } | |
| // ajax only for form fields | |
| if (!$request->isXmlHttpRequest() | |
| || !$this->security->isGranted( | |
| [ | |
| 'campaign:campaigns:edit', | |
| 'campaign:campaigns:create', | |
| ], | |
| 'MATCH_ONE' | |
| ) | |
| ) { | |
| return $this->modalAccessDenied(); | |
| } | |
| $campaignModel = $this->getModel('campaign'); | |
| \assert($campaignModel instanceof CampaignModel); | |
| $sourceList = $campaignModel->getSourceLists($sourceType); | |
| $form = $this->formFactory->create( | |
| CampaignLeadSourceType::class, | |
| $source, | |
| [ | |
| 'action' => $this->generateUrl('mautic_campaignsource_action', ['objectAction' => 'new', 'objectId' => $objectId]), | |
| 'source_choices' => $sourceList, | |
| ] | |
| ); | |
| // Check for a submitted form and process it | |
| if ('POST' == $method) { | |
| if (!$cancelled = $this->isFormCancelled($form)) { | |
| if ($valid = $this->isFormValid($form)) { | |
| $success = 1; | |
| $modifiedSources = $session->get('mautic.campaign.'.$objectId.'.leadsources.modified'); | |
| $modifiedSources[$sourceType] = array_flip($form[$sourceType]->getData()); | |
| $session->set('mautic.campaign.'.$objectId.'.leadsources.modified', $modifiedSources); | |
| } else { | |
| $success = 0; | |
| } | |
| } | |
| } | |
| $passthroughVars = [ | |
| 'mauticContent' => 'campaignSource', | |
| 'success' => $success, | |
| 'route' => false, | |
| ]; | |
| if ($cancelled || $valid) { | |
| if ($valid) { | |
| $passthroughVars['sourceHtml'] = $this->renderView( | |
| '@MauticCampaign/Source/_index.html.twig', | |
| [ | |
| 'sourceType' => $sourceType, | |
| 'campaignId' => $objectId, | |
| 'names' => implode(', ', array_intersect_key($sourceList, $modifiedSources[$sourceType])), | |
| ] | |
| ); | |
| $passthroughVars['sourceType'] = $sourceType; | |
| } | |
| // just close the modal | |
| $passthroughVars['closeModal'] = 1; | |
| return new JsonResponse($passthroughVars); | |
| } else { | |
| $viewParams = [ | |
| 'sourceType' => $sourceType, | |
| 'form' => $form->createView(), | |
| ]; | |
| return $this->ajaxAction( | |
| $request, | |
| [ | |
| 'contentTemplate' => '@MauticCampaign/Source/form.html.twig', | |
| 'viewParameters' => $viewParams, | |
| 'passthroughVars' => $passthroughVars, | |
| ] | |
| ); | |
| } | |
| } | |
| /** | |
| * @return Response | |
| */ | |
| public function editAction(Request $request, $objectId) | |
| { | |
| $session = $request->getSession(); | |
| $method = $request->getMethod(); | |
| $modifiedSources = $selectedSources = $session->get('mautic.campaign.'.$objectId.'.leadsources.modified', []); | |
| if ('POST' == $method) { | |
| $source = $request->request->all()['campaign_leadsource'] ?? []; | |
| $sourceType = $source['sourceType']; | |
| } else { | |
| $sourceType = $request->query->get('sourceType'); | |
| $source = [ | |
| 'sourceType' => $sourceType, | |
| $sourceType => array_flip($selectedSources[$sourceType]), | |
| ]; | |
| } | |
| $success = 0; | |
| $valid = $cancelled = false; | |
| if (!in_array($sourceType, $this->supportedSourceTypes)) { | |
| return $this->modalAccessDenied(); | |
| } | |
| // ajax only for form fields | |
| if (!$request->isXmlHttpRequest() | |
| || !$this->security->isGranted( | |
| [ | |
| 'campaign:campaigns:edit', | |
| 'campaign:campaigns:create', | |
| ], | |
| 'MATCH_ONE' | |
| ) | |
| ) { | |
| return $this->modalAccessDenied(); | |
| } | |
| $campaignModel = $this->getModel('campaign'); | |
| \assert($campaignModel instanceof CampaignModel); | |
| $sourceList = $campaignModel->getSourceLists($sourceType); | |
| $form = $this->formFactory->create( | |
| CampaignLeadSourceType::class, | |
| $source, | |
| [ | |
| 'action' => $this->generateUrl('mautic_campaignsource_action', ['objectAction' => 'edit', 'objectId' => $objectId]), | |
| 'source_choices' => $sourceList, | |
| ] | |
| ); | |
| // Check for a submitted form and process it | |
| if ('POST' == $method) { | |
| if (!$cancelled = $this->isFormCancelled($form)) { | |
| if ($valid = $this->isFormValid($form)) { | |
| $success = 1; | |
| // save the properties to session | |
| $modifiedSources[$sourceType] = array_flip($form[$sourceType]->getData()); | |
| $session->set('mautic.campaign.'.$objectId.'.leadsources.modified', $modifiedSources); | |
| } else { | |
| $success = 0; | |
| } | |
| } | |
| } | |
| $passthroughVars = [ | |
| 'mauticContent' => 'campaignSource', | |
| 'success' => $success, | |
| 'route' => false, | |
| ]; | |
| if ($cancelled || $valid) { | |
| if ($valid) { | |
| $passthroughVars['updateHtml'] = $this->renderView( | |
| '@MauticCampaign/Source/_index.html.twig', | |
| [ | |
| 'sourceType' => $sourceType, | |
| 'campaignId' => $objectId, | |
| 'names' => implode(', ', array_intersect_key($sourceList, $modifiedSources[$sourceType])), | |
| 'update' => true, | |
| ] | |
| ); | |
| $passthroughVars['sourceType'] = $sourceType; | |
| } | |
| // just close the modal | |
| $passthroughVars['closeModal'] = 1; | |
| return new JsonResponse($passthroughVars); | |
| } else { | |
| $viewParams = [ | |
| 'sourceType' => $sourceType, | |
| 'form' => $form->createView(), | |
| ]; | |
| return $this->ajaxAction( | |
| $request, | |
| [ | |
| 'contentTemplate' => '@MauticCampaign/Source/form.html.twig', | |
| 'viewParameters' => $viewParams, | |
| 'passthroughVars' => $passthroughVars, | |
| ] | |
| ); | |
| } | |
| } | |
| /** | |
| * Deletes the entity. | |
| * | |
| * @return JsonResponse|\Symfony\Component\HttpFoundation\RedirectResponse | |
| */ | |
| public function deleteAction(Request $request, $objectId) | |
| { | |
| $session = $request->getSession(); | |
| $modifiedSources = $session->get('mautic.campaign.'.$objectId.'.leadsources.modified', []); | |
| $sourceType = $request->get('sourceType'); | |
| // ajax only for form fields | |
| if (!$request->isXmlHttpRequest() | |
| || !$this->security->isGranted( | |
| [ | |
| 'campaign:campaigns:edit', | |
| 'campaign:campaigns:create', | |
| ], | |
| 'MATCH_ONE' | |
| ) | |
| ) { | |
| return $this->accessDenied(); | |
| } | |
| if ('POST' == $request->getMethod()) { | |
| // Add the field to the delete list | |
| if (isset($modifiedSources[$sourceType])) { | |
| unset($modifiedSources[$sourceType]); | |
| $session->set('mautic.campaign.'.$objectId.'.leadsources.modified', $modifiedSources); | |
| } | |
| $dataArray = [ | |
| 'mauticContent' => 'campaignSource', | |
| 'success' => 1, | |
| 'route' => false, | |
| 'sourceType' => $sourceType, | |
| 'deleted' => 1, | |
| ]; | |
| } else { | |
| $dataArray = ['success' => 0]; | |
| } | |
| return new JsonResponse($dataArray); | |
| } | |
| } | |