From 70649ded69ff34765790579a52cf90a908e4b3b7 Mon Sep 17 00:00:00 2001 From: Vamshi Date: Wed, 4 Feb 2026 00:34:43 +0530 Subject: [PATCH 1/4] upgrade for mautic 7 --- Command/CustomItemsScheduledExportCommand.php | 26 +- Command/GenerateSampleDataCommand.php | 9 +- Config/config.php | 561 ++---------------- Config/services.php | 53 ++ Controller/CustomField/FormController.php | 93 ++- Controller/CustomField/SaveController.php | 78 +-- .../CustomItem/BatchDeleteController.php | 65 +- Controller/CustomItem/CancelController.php | 45 +- .../CustomItem/ContactListController.php | 12 +- Controller/CustomItem/DeleteController.php | 58 +- Controller/CustomItem/ExportController.php | 38 +- Controller/CustomItem/FormController.php | 85 ++- Controller/CustomItem/LinkController.php | 26 +- Controller/CustomItem/LinkFormController.php | 72 +-- Controller/CustomItem/ListController.php | 81 +-- Controller/CustomItem/LookupController.php | 33 +- Controller/CustomItem/SaveController.php | 90 +-- Controller/CustomItem/UnlinkController.php | 24 +- Controller/CustomItem/ViewController.php | 77 +-- Controller/CustomObject/CancelController.php | 45 +- Controller/CustomObject/DeleteController.php | 60 +- Controller/CustomObject/FormController.php | 99 ++-- Controller/CustomObject/ListController.php | 65 +- Controller/CustomObject/SaveController.php | 133 ++--- Controller/CustomObject/ViewController.php | 68 +-- Controller/JsonController.php | 6 +- CustomFieldType/AbstractCustomFieldType.php | 6 +- CustomFieldType/AbstractMultivalueType.php | 4 +- CustomFieldType/CustomFieldTypeInterface.php | 1 - .../DataTransformer/CsvTransformer.php | 4 +- .../DateTimeAtomTransformer.php | 4 +- .../DataTransformer/DateTimeTransformer.php | 4 +- .../DataTransformer/DateTransformer.php | 4 +- .../DataTransformer/MultivalueTransformer.php | 4 +- .../DataTransformer/ViewDateTransformer.php | 4 +- CustomFieldType/DateTimeType.php | 1 + CustomObjectsBundle.php | 20 +- DataPersister/CustomItemDataPersister.php | 3 +- .../CustomObjectsExtension.php | 24 + Entity/CustomField.php | 33 +- Entity/CustomFieldOption.php | 12 +- Entity/CustomFieldValueDate.php | 3 +- Entity/CustomFieldValueDateTime.php | 3 +- Entity/CustomFieldValueInt.php | 3 +- Entity/CustomFieldValueText.php | 3 +- Entity/CustomItem.php | 7 +- Entity/CustomItemXrefCompany.php | 3 +- Entity/CustomItemXrefContact.php | 3 +- Entity/CustomItemXrefCustomItem.php | 3 +- Entity/CustomObject.php | 23 +- Event/CustomItemEvent.php | 2 +- Event/CustomItemExportSchedulerEvent.php | 2 +- Event/CustomItemListDbalQueryEvent.php | 2 +- Event/CustomItemListQueryEvent.php | 2 +- Event/CustomItemXrefEntityDiscoveryEvent.php | 2 +- Event/CustomItemXrefEntityEvent.php | 2 +- Event/CustomObjectEvent.php | 2 +- Event/CustomObjectListFormatEvent.php | 2 +- EventListener/AssetsSubscriber.php | 12 +- EventListener/CampaignSubscriber.php | 39 +- EventListener/ContactSubscriber.php | 9 +- EventListener/ContactTabSubscriber.php | 16 +- EventListener/CustomItemButtonSubscriber.php | 46 +- EventListener/CustomItemTabSubscriber.php | 16 +- .../CustomObjectButtonSubscriber.php | 24 +- .../CustomObjectPreDeleteSubscriber.php | 6 +- EventListener/ImportSubscriber.php | 54 +- EventListener/MenuSubscriber.php | 4 +- EventListener/ReportSubscriber.php | 6 +- ...egmentFiltersChoicesGenerateSubscriber.php | 6 +- .../SegmentFiltersDictionarySubscriber.php | 3 +- EventListener/TokenSubscriber.php | 4 +- .../CustomObjectHiddenTransformer.php | 4 +- Form/Type/CampaignActionLinkType.php | 6 +- Form/Type/CampaignConditionFieldValueType.php | 6 +- Form/Type/CustomField/OptionsType.php | 14 +- Form/Type/CustomFieldType.php | 1 - .../Constraints/CustomObjectTypeValues.php | 4 +- Helper/LockFlashMessageHelper.php | 10 +- Helper/QueryFilterHelper.php | 16 +- Model/CustomFieldModel.php | 29 +- Model/CustomFieldValueModel.php | 6 +- Model/CustomItemExportSchedulerModel.php | 95 +-- Model/CustomItemImportModel.php | 25 +- Model/CustomItemModel.php | 87 +-- Model/CustomItemXrefContactModel.php | 4 +- Model/CustomObjectModel.php | 50 +- .../EventListener/MatchFilterForLeadTrait.php | 4 +- Provider/SessionProvider.php | 16 +- Provider/SessionProviderFactory.php | 12 +- README.md | 9 + Repository/CustomFieldRepository.php | 3 + .../CustomItemExportSchedulerRepository.php | 4 + Repository/CustomItemRepository.php | 6 +- .../CustomItemXrefContactRepository.php | 4 +- .../CustomItemXrefCustomItemRepository.php | 4 +- Repository/CustomObjectRepository.php | 9 +- Repository/DbalQueryTrait.php | 10 +- .../views/CustomField/form.html.twig | 59 +- Resources/views/CustomField/value.html.twig | 17 + Resources/views/CustomItem/details.html.twig | 129 ++++ Resources/views/CustomItem/form.html.twig | 78 +++ Resources/views/CustomItem/list.html.twig | 155 +++++ .../CustomObject/Form/Panel/_field.html.twig | 74 +++ .../Form/Panel/checkbox_group.html.twig | 2 + .../CustomObject/Form/Panel/country.html.twig | 2 + .../CustomObject/Form/Panel/date.html.twig | 2 + .../Form/Panel/datetime.html.twig | 2 + .../CustomObject/Form/Panel/email.html.twig | 2 + .../CustomObject/Form/Panel/hidden.html.twig | 2 + .../Form/Panel/html_area.html.twig | 2 + .../CustomObject/Form/Panel/int.html.twig | 2 + .../Form/Panel/multiselect.html.twig | 2 + .../CustomObject/Form/Panel/phone.html.twig | 2 + .../Form/Panel/radio_group.html.twig | 2 + .../CustomObject/Form/Panel/select.html.twig | 2 + .../CustomObject/Form/Panel/text.html.twig | 2 + .../Form/Panel/textarea.html.twig | 2 + .../CustomObject/Form/Panel/url.html.twig | 2 + .../views/CustomObject/_form-fields.html.twig | 15 + .../views/CustomObject/details.html.twig | 141 +++++ Resources/views/CustomObject/form.html.twig | 120 ++++ Resources/views/CustomObject/list.html.twig | 103 ++++ ...t_custom_item_field_value_widget.html.twig | 17 + .../SubscribedEvents/Tab/content.html.twig | 38 ++ .../views/SubscribedEvents/Tab/link.html.twig | 10 + .../SubscribedEvents/Tab/modal.html.twig | 5 + .../SubscribedEvents/Timeline/link.html.twig | 14 + .../Permissions/CustomObjectPermissions.php | 6 +- .../Filter/CustomFieldFilterQueryBuilder.php | 6 +- .../CustomItemNameFilterQueryBuilder.php | 5 - Translations/en_US/messages.ini | 63 ++ Views/CustomField/detail.html.php | 56 -- Views/CustomField/index.html.php | 21 - Views/CustomField/value.html.php | 23 - Views/CustomItem/detail.html.php | 125 ---- Views/CustomItem/form.html.php | 71 --- Views/CustomItem/index.html.php | 27 - Views/CustomItem/list.html.php | 124 ---- Views/CustomObject/Form/Panel/_field.html.php | 52 -- .../Form/Panel/checkbox_group.html.php | 5 - .../CustomObject/Form/Panel/country.html.php | 5 - Views/CustomObject/Form/Panel/date.html.php | 5 - .../CustomObject/Form/Panel/datetime.html.php | 5 - Views/CustomObject/Form/Panel/email.html.php | 5 - Views/CustomObject/Form/Panel/hidden.html.php | 5 - .../Form/Panel/html_area.html.php | 5 - Views/CustomObject/Form/Panel/int.html.php | 5 - .../Form/Panel/multiselect.html.php | 5 - Views/CustomObject/Form/Panel/phone.html.php | 5 - .../Form/Panel/radio_group.html.php | 5 - Views/CustomObject/Form/Panel/select.html.php | 5 - Views/CustomObject/Form/Panel/text.html.php | 5 - .../CustomObject/Form/Panel/textarea.html.php | 5 - Views/CustomObject/Form/Panel/url.html.php | 5 - Views/CustomObject/_form-fields.html.php | 24 - Views/CustomObject/detail.html.php | 149 ----- Views/CustomObject/form.html.php | 125 ---- Views/CustomObject/index.html.php | 21 - Views/CustomObject/list.html.php | 94 --- ...aign_condition_field_value_widget.html.php | 15 - Views/SubscribedEvents/Tab/content.html.php | 50 -- Views/SubscribedEvents/Tab/link.html.php | 15 - Views/SubscribedEvents/Tab/modal.html.php | 8 - Views/SubscribedEvents/Timeline/link.html.php | 17 - 165 files changed, 2144 insertions(+), 2913 deletions(-) create mode 100644 Config/services.php create mode 100644 DependencyInjection/CustomObjectsExtension.php rename Views/CustomField/form.html.php => Resources/views/CustomField/form.html.twig (58%) create mode 100644 Resources/views/CustomField/value.html.twig create mode 100644 Resources/views/CustomItem/details.html.twig create mode 100644 Resources/views/CustomItem/form.html.twig create mode 100644 Resources/views/CustomItem/list.html.twig create mode 100644 Resources/views/CustomObject/Form/Panel/_field.html.twig create mode 100644 Resources/views/CustomObject/Form/Panel/checkbox_group.html.twig create mode 100644 Resources/views/CustomObject/Form/Panel/country.html.twig create mode 100644 Resources/views/CustomObject/Form/Panel/date.html.twig create mode 100644 Resources/views/CustomObject/Form/Panel/datetime.html.twig create mode 100644 Resources/views/CustomObject/Form/Panel/email.html.twig create mode 100644 Resources/views/CustomObject/Form/Panel/hidden.html.twig create mode 100644 Resources/views/CustomObject/Form/Panel/html_area.html.twig create mode 100644 Resources/views/CustomObject/Form/Panel/int.html.twig create mode 100644 Resources/views/CustomObject/Form/Panel/multiselect.html.twig create mode 100644 Resources/views/CustomObject/Form/Panel/phone.html.twig create mode 100644 Resources/views/CustomObject/Form/Panel/radio_group.html.twig create mode 100644 Resources/views/CustomObject/Form/Panel/select.html.twig create mode 100644 Resources/views/CustomObject/Form/Panel/text.html.twig create mode 100644 Resources/views/CustomObject/Form/Panel/textarea.html.twig create mode 100644 Resources/views/CustomObject/Form/Panel/url.html.twig create mode 100644 Resources/views/CustomObject/_form-fields.html.twig create mode 100644 Resources/views/CustomObject/details.html.twig create mode 100644 Resources/views/CustomObject/form.html.twig create mode 100644 Resources/views/CustomObject/list.html.twig create mode 100644 Resources/views/FormTheme/FieldValueCondition/_campaignevent_custom_item_field_value_widget.html.twig create mode 100644 Resources/views/SubscribedEvents/Tab/content.html.twig create mode 100644 Resources/views/SubscribedEvents/Tab/link.html.twig create mode 100644 Resources/views/SubscribedEvents/Tab/modal.html.twig create mode 100644 Resources/views/SubscribedEvents/Timeline/link.html.twig delete mode 100644 Views/CustomField/detail.html.php delete mode 100644 Views/CustomField/index.html.php delete mode 100644 Views/CustomField/value.html.php delete mode 100644 Views/CustomItem/detail.html.php delete mode 100644 Views/CustomItem/form.html.php delete mode 100644 Views/CustomItem/index.html.php delete mode 100644 Views/CustomItem/list.html.php delete mode 100644 Views/CustomObject/Form/Panel/_field.html.php delete mode 100644 Views/CustomObject/Form/Panel/checkbox_group.html.php delete mode 100644 Views/CustomObject/Form/Panel/country.html.php delete mode 100644 Views/CustomObject/Form/Panel/date.html.php delete mode 100644 Views/CustomObject/Form/Panel/datetime.html.php delete mode 100644 Views/CustomObject/Form/Panel/email.html.php delete mode 100644 Views/CustomObject/Form/Panel/hidden.html.php delete mode 100644 Views/CustomObject/Form/Panel/html_area.html.php delete mode 100644 Views/CustomObject/Form/Panel/int.html.php delete mode 100644 Views/CustomObject/Form/Panel/multiselect.html.php delete mode 100644 Views/CustomObject/Form/Panel/phone.html.php delete mode 100644 Views/CustomObject/Form/Panel/radio_group.html.php delete mode 100644 Views/CustomObject/Form/Panel/select.html.php delete mode 100644 Views/CustomObject/Form/Panel/text.html.php delete mode 100644 Views/CustomObject/Form/Panel/textarea.html.php delete mode 100644 Views/CustomObject/Form/Panel/url.html.php delete mode 100644 Views/CustomObject/_form-fields.html.php delete mode 100644 Views/CustomObject/detail.html.php delete mode 100644 Views/CustomObject/form.html.php delete mode 100644 Views/CustomObject/index.html.php delete mode 100644 Views/CustomObject/list.html.php delete mode 100644 Views/FormTheme/FieldValueCondition/campaign_condition_field_value_widget.html.php delete mode 100644 Views/SubscribedEvents/Tab/content.html.php delete mode 100644 Views/SubscribedEvents/Tab/link.html.php delete mode 100644 Views/SubscribedEvents/Tab/modal.html.php delete mode 100644 Views/SubscribedEvents/Timeline/link.html.php diff --git a/Command/CustomItemsScheduledExportCommand.php b/Command/CustomItemsScheduledExportCommand.php index 74e4e74a5..d0a322210 100644 --- a/Command/CustomItemsScheduledExportCommand.php +++ b/Command/CustomItemsScheduledExportCommand.php @@ -4,8 +4,7 @@ namespace MauticPlugin\CustomObjectsBundle\Command; -use Mautic\CoreBundle\Helper\ExitCode; -use Mautic\CoreBundle\Templating\Helper\FormatterHelper; +use Mautic\CoreBundle\Twig\Helper\FormatterHelper; use MauticPlugin\CustomObjectsBundle\CustomItemEvents; use MauticPlugin\CustomObjectsBundle\Event\CustomItemExportSchedulerEvent; use MauticPlugin\CustomObjectsBundle\Model\CustomItemExportSchedulerModel; @@ -18,20 +17,11 @@ class CustomItemsScheduledExportCommand extends Command { public const COMMAND_NAME = 'mautic:custom_items:scheduled_export'; - - private CustomItemExportSchedulerModel $customItemExportSchedulerModel; - private EventDispatcherInterface $eventDispatcher; - private FormatterHelper $formatterHelper; - public function __construct( - CustomItemExportSchedulerModel $customItemExportSchedulerModel, - EventDispatcherInterface $eventDispatcher, - FormatterHelper $formatterHelper + private CustomItemExportSchedulerModel $customItemExportSchedulerModel, + private EventDispatcherInterface $eventDispatcher, + private FormatterHelper $formatterHelper ) { - $this->customItemExportSchedulerModel = $customItemExportSchedulerModel; - $this->eventDispatcher = $eventDispatcher; - $this->formatterHelper = $formatterHelper; - parent::__construct(); } @@ -58,14 +48,14 @@ protected function execute(InputInterface $input, OutputInterface $output): int foreach ($customItemExportSchedulers as $customItemExportScheduler) { $customItemExportSchedulerEvent = new CustomItemExportSchedulerEvent($customItemExportScheduler); - $this->eventDispatcher->dispatch(CustomItemEvents::CUSTOM_ITEM_PREPARE_EXPORT_FILE, $customItemExportSchedulerEvent); - $this->eventDispatcher->dispatch(CustomItemEvents::CUSTOM_ITEM_MAIL_EXPORT_FILE, $customItemExportSchedulerEvent); - $this->eventDispatcher->dispatch(CustomItemEvents::POST_EXPORT_MAIL_SENT, $customItemExportSchedulerEvent); + $this->eventDispatcher->dispatch($customItemExportSchedulerEvent, CustomItemEvents::CUSTOM_ITEM_PREPARE_EXPORT_FILE); + $this->eventDispatcher->dispatch($customItemExportSchedulerEvent, CustomItemEvents::CUSTOM_ITEM_MAIL_EXPORT_FILE); + $this->eventDispatcher->dispatch($customItemExportSchedulerEvent, CustomItemEvents::POST_EXPORT_MAIL_SENT); ++$count; } $output->writeln('CustomItem export email(s) sent: '.$count); - return ExitCode::SUCCESS; + return Command::SUCCESS; } } diff --git a/Command/GenerateSampleDataCommand.php b/Command/GenerateSampleDataCommand.php index 9d5bf5b00..f2ebcd964 100644 --- a/Command/GenerateSampleDataCommand.php +++ b/Command/GenerateSampleDataCommand.php @@ -5,10 +5,9 @@ namespace MauticPlugin\CustomObjectsBundle\Command; use Doctrine\DBAL\Connection; -use Doctrine\DBAL\DBALException; use Doctrine\ORM\EntityManager; use MauticPlugin\CustomObjectsBundle\Helper\RandomHelper; -use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; +use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Helper\ProgressBar; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; @@ -16,7 +15,7 @@ use Symfony\Component\Console\Question\ConfirmationQuestion; use Symfony\Component\Console\Style\SymfonyStyle; -class GenerateSampleDataCommand extends ContainerAwareCommand +class GenerateSampleDataCommand extends Command { /** * @var EntityManager @@ -67,7 +66,7 @@ protected function configure(): void parent::configure(); } - protected function execute(InputInterface $input, OutputInterface $output) + protected function execute(InputInterface $input, OutputInterface $output): int { $io = new SymfonyStyle($input, $output); $enquirer = $this->getHelper('question'); @@ -112,7 +111,6 @@ protected function execute(InputInterface $input, OutputInterface $output) /** * @return int[] * - * @throws DBALException */ private function createCustomObjectsWithItems(): array { @@ -222,7 +220,6 @@ private function generateProductRelations(int $contactId, int $coProductId, int /** * @return int Last inserted row ID * - * @throws DBALException */ private function insertInto(string $table, array $row): int { diff --git a/Config/config.php b/Config/config.php index fea80efa2..a850e7c33 100644 --- a/Config/config.php +++ b/Config/config.php @@ -18,12 +18,12 @@ // Custom Fields CustomFieldRouteProvider::ROUTE_FORM => [ 'path' => '/custom/field/edit', - 'controller' => 'CustomObjectsBundle:CustomField\Form:renderForm', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomField\FormController::renderFormAction', 'method' => 'GET', ], CustomFieldRouteProvider::ROUTE_SAVE => [ 'path' => '/custom/field/save/{fieldType}', - 'controller' => 'CustomObjectsBundle:CustomField\Save:save', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomField\SaveController::saveAction', 'method' => 'POST', 'defaults' => [ 'fieldId' => null, @@ -33,7 +33,7 @@ // Custom Items CustomItemRouteProvider::ROUTE_LIST => [ 'path' => '/custom/object/{objectId}/item/{page}', - 'controller' => 'CustomObjectsBundle:CustomItem\List:list', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\ListController::listAction', 'method' => 'GET|POST', 'defaults' => [ 'page' => 1, @@ -41,37 +41,37 @@ ], CustomItemRouteProvider::ROUTE_VIEW => [ 'path' => '/custom/object/{objectId}/item/view/{itemId}', - 'controller' => 'CustomObjectsBundle:CustomItem\View:view', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\ViewController::viewAction', 'method' => 'GET|POST', ], CustomItemRouteProvider::ROUTE_NEW => [ 'path' => '/custom/object/{objectId}/item/new', - 'controller' => 'CustomObjectsBundle:CustomItem\Form:new', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\FormController::newAction', 'method' => 'GET', ], CustomItemRouteProvider::ROUTE_NEW_REDIRECT_TO_CONTACT => [ 'path' => '/custom/object/{objectId}/contact/{contactId}/item/new', - 'controller' => 'CustomObjectsBundle:CustomItem\Form:newWithRedirectToContact', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\FormController::newWithRedirectToContactAction', 'method' => 'GET', ], CustomItemRouteProvider::ROUTE_EDIT => [ 'path' => '/custom/object/{objectId}/item/edit/{itemId}', - 'controller' => 'CustomObjectsBundle:CustomItem\Form:edit', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\FormController::editAction', 'method' => 'GET', ], CustomItemRouteProvider::ROUTE_EDIT_REDIRECT_TO_CONTACT => [ 'path' => '/custom/object/{objectId}/item/edit/{itemId}/contact/{contactId}', - 'controller' => 'CustomObjectsBundle:CustomItem\Form:editWithRedirectToContact', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\FormController::editWithRedirectToContactAction', 'method' => 'GET', ], CustomItemRouteProvider::ROUTE_CLONE => [ 'path' => '/custom/object/{objectId}/item/clone/{itemId}', - 'controller' => 'CustomObjectsBundle:CustomItem\Form:clone', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\FormController::cloneAction', 'method' => 'GET', ], CustomItemRouteProvider::ROUTE_CANCEL => [ 'path' => '/custom/object/{objectId}/item/cancel/{itemId}', - 'controller' => 'CustomObjectsBundle:CustomItem\Cancel:cancel', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\CancelController::cancelAction', 'method' => 'POST', 'defaults' => [ 'itemId' => null, @@ -79,7 +79,7 @@ ], CustomItemRouteProvider::ROUTE_SAVE => [ 'path' => '/custom/object/{objectId}/item/save/{itemId}', - 'controller' => 'CustomObjectsBundle:CustomItem\Save:save', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\SaveController::saveAction', 'method' => 'POST', 'defaults' => [ 'itemId' => null, @@ -87,57 +87,57 @@ ], CustomItemRouteProvider::ROUTE_DELETE => [ 'path' => '/custom/object/{objectId}/item/delete/{itemId}', - 'controller' => 'CustomObjectsBundle:CustomItem\Delete:delete', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\DeleteController::deleteAction', 'method' => 'GET|POST', ], CustomItemRouteProvider::ROUTE_BATCH_DELETE => [ 'path' => '/custom/object/{objectId}/item/batch/delete', - 'controller' => 'CustomObjectsBundle:CustomItem\BatchDelete:delete', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\BatchDeleteController::deleteAction', 'method' => 'POST', ], CustomItemRouteProvider::ROUTE_LOOKUP => [ 'path' => '/custom/object/{objectId}/item/lookup.json', - 'controller' => 'CustomObjectsBundle:CustomItem\Lookup:list', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\LookupController::listAction', 'method' => 'GET', ], CustomItemRouteProvider::ROUTE_LINK => [ 'path' => '/custom/item/{itemId}/link/{entityType}/{entityId}.json', - 'controller' => 'CustomObjectsBundle:CustomItem\Link:save', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\LinkController::saveAction', 'method' => 'POST', ], CustomItemRouteProvider::ROUTE_LINK_FORM => [ 'path' => '/custom/item/{itemId}/link-form/{entityType}/{entityId}', - 'controller' => 'CustomObjectsBundle:CustomItem\LinkForm:form', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\LinkFormController::formAction', 'method' => 'GET', ], CustomItemRouteProvider::ROUTE_LINK_FORM_SAVE => [ 'path' => '/custom/item/{itemId}/link-form/{entityType}/{entityId}', - 'controller' => 'CustomObjectsBundle:CustomItem\LinkForm:save', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\LinkFormController::saveAction', 'method' => 'POST', ], CustomItemRouteProvider::ROUTE_UNLINK => [ 'path' => '/custom/item/{itemId}/unlink/{entityType}/{entityId}.json', - 'controller' => 'CustomObjectsBundle:CustomItem\Unlink:save', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\UnlinkController::saveAction', 'method' => 'POST', ], CustomItemRouteProvider::ROUTE_CONTACT_LIST => [ 'path' => '/custom/item/{objectId}/contact/{page}', - 'controller' => 'CustomObjectsBundle:CustomItem\ContactList:list', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\ContactListController::listAction', ], CustomItemRouteProvider::ROUTE_EXPORT_ACTION => [ 'path' => 'custom/object/{object}/export', - 'controller' => 'CustomObjectsBundle:CustomItem\Export:export', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\ExportController::exportAction', 'method' => 'POST', ], CustomItemRouteProvider::ROUTE_EXPORT_DOWNLOAD_ACTION => [ 'path' => '/custom/item/export/download/{fileName}', - 'controller' => 'CustomObjectsBundle:CustomItem\Export:downloadExport', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\ExportController::downloadExportAction', ], // Custom Objects CustomObjectRouteProvider::ROUTE_LIST => [ 'path' => '/custom/object/{page}', - 'controller' => 'CustomObjectsBundle:CustomObject\List:list', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomObject\ListController::listAction', 'method' => 'GET|POST', 'defaults' => [ 'page' => 1, @@ -145,27 +145,27 @@ ], CustomObjectRouteProvider::ROUTE_VIEW => [ 'path' => '/custom/object/view/{objectId}', - 'controller' => 'CustomObjectsBundle:CustomObject\View:view', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomObject\ViewController::viewAction', 'method' => 'GET|POST', ], CustomObjectRouteProvider::ROUTE_NEW => [ 'path' => '/custom/object/new', - 'controller' => 'CustomObjectsBundle:CustomObject\Form:new', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomObject\FormController::newAction', 'method' => 'GET', ], CustomObjectRouteProvider::ROUTE_EDIT => [ 'path' => '/custom/object/edit/{objectId}', - 'controller' => 'CustomObjectsBundle:CustomObject\Form:edit', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomObject\FormController::editAction', 'method' => 'GET', ], CustomObjectRouteProvider::ROUTE_CLONE => [ 'path' => '/custom/object/clone/{objectId}', - 'controller' => 'CustomObjectsBundle:CustomObject\Form:clone', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomObject\FormController::cloneAction', 'method' => 'GET', ], CustomObjectRouteProvider::ROUTE_CANCEL => [ 'path' => '/custom/object/cancel/{objectId}', - 'controller' => 'CustomObjectsBundle:CustomObject\Cancel:cancel', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomObject\CancelController::cancelAction', 'method' => 'POST', 'defaults' => [ 'objectId' => null, @@ -173,7 +173,7 @@ ], CustomObjectRouteProvider::ROUTE_SAVE => [ 'path' => '/custom/object/save/{objectId}', - 'controller' => 'CustomObjectsBundle:CustomObject\Save:save', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomObject\SaveController::saveAction', 'method' => 'POST', 'defaults' => [ 'objectId' => null, @@ -181,406 +181,12 @@ ], CustomObjectRouteProvider::ROUTE_DELETE => [ 'path' => '/custom/object/delete/{objectId}', - 'controller' => 'CustomObjectsBundle:CustomObject\Delete:delete', + 'controller' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomObject\DeleteController::deleteAction', 'method' => 'GET|POST', ], ], ], - 'services' => [ - 'controllers' => [ - // Custom Fields - 'custom_field.form_controller' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Controller\CustomField\FormController::class, - 'arguments' => [ - 'form.factory', - 'mautic.custom.model.field', - 'custom_object.custom_field_factory', - 'custom_field.permission.provider', - 'custom_field.route.provider', - 'mautic.custom.model.object', - 'custom_object.route.provider', - ], - 'methodCalls' => [ - 'setContainer' => [ - '@service_container', - ], - ], - ], - 'custom_field.save_controller' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Controller\CustomField\SaveController::class, - 'arguments' => [ - 'form.factory', - 'translator', - 'mautic.custom.model.field', - 'custom_object.custom_field_factory', - 'custom_field.permission.provider', - 'custom_field.route.provider', - 'mautic.custom.model.object', - ], - 'methodCalls' => [ - 'setContainer' => [ - '@service_container', - ], - ], - ], - - // Custom Items - 'custom_item.list_controller' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Controller\CustomItem\ListController::class, - 'arguments' => [ - 'request_stack', - 'custom_object.session.provider_factory', - 'mautic.custom.model.item', - 'mautic.custom.model.object', - 'custom_item.permission.provider', - 'custom_item.route.provider', - ], - 'methodCalls' => [ - 'setContainer' => [ - '@service_container', - ], - ], - ], - 'custom_item.view_controller' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Controller\CustomItem\ViewController::class, - 'arguments' => [ - 'request_stack', - 'form.factory', - 'mautic.custom.model.item', - 'mautic.custom.model.import.xref.contact', - 'mautic.core.model.auditlog', - 'custom_item.permission.provider', - 'custom_item.route.provider', - ], - 'methodCalls' => [ - 'setContainer' => [ - '@service_container', - ], - ], - ], - 'custom_item.form_controller' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Controller\CustomItem\FormController::class, - 'arguments' => [ - 'form.factory', - 'mautic.custom.model.object', - 'mautic.custom.model.item', - 'custom_item.permission.provider', - 'custom_item.route.provider', - 'custom_object.lock_flash_message.helper', - ], - 'methodCalls' => [ - 'setContainer' => [ - '@service_container', - ], - ], - ], - 'custom_item.save_controller' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Controller\CustomItem\SaveController::class, - 'arguments' => [ - 'request_stack', - 'form.factory', - 'mautic.core.service.flashbag', - 'mautic.custom.model.item', - 'mautic.custom.model.object', - 'custom_item.permission.provider', - 'custom_item.route.provider', - 'custom_object.lock_flash_message.helper', - ], - 'methodCalls' => [ - 'setContainer' => [ - '@service_container', - ], - ], - ], - 'custom_item.delete_controller' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Controller\CustomItem\DeleteController::class, - 'arguments' => [ - 'mautic.custom.model.item', - 'custom_object.session.provider_factory', - 'mautic.core.service.flashbag', - 'custom_item.permission.provider', - 'custom_item.route.provider', - ], - 'methodCalls' => [ - 'setContainer' => [ - '@service_container', - ], - ], - ], - 'custom_item.batch_delete_controller' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Controller\CustomItem\BatchDeleteController::class, - 'arguments' => [ - 'request_stack', - 'mautic.custom.model.item', - 'custom_object.session.provider_factory', - 'custom_item.permission.provider', - 'custom_item.route.provider', - 'mautic.core.service.flashbag', - ], - 'methodCalls' => [ - 'setContainer' => [ - '@service_container', - ], - ], - ], - 'custom_item.cancel_controller' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Controller\CustomItem\CancelController::class, - 'arguments' => [ - 'custom_object.session.provider_factory', - 'custom_item.route.provider', - 'mautic.custom.model.item', - ], - 'methodCalls' => [ - 'setContainer' => [ - '@service_container', - ], - ], - ], - 'custom_item.lookup_controller' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Controller\CustomItem\LookupController::class, - 'arguments' => [ - 'request_stack', - 'mautic.custom.model.item', - 'custom_item.permission.provider', - 'mautic.core.service.flashbag', - ], - 'methodCalls' => [ - 'setContainer' => [ - '@service_container', - ], - ], - ], - 'custom_item.link_controller' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Controller\CustomItem\LinkController::class, - 'arguments' => [ - 'mautic.custom.model.item', - 'custom_item.permission.provider', - 'mautic.core.service.flashbag', - ], - 'methodCalls' => [ - 'setContainer' => [ - '@service_container', - ], - ], - ], - 'custom_item.link_form_controller' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Controller\CustomItem\LinkFormController::class, - 'arguments' => [ - 'form.factory', - 'mautic.custom.model.item', - 'custom_item.permission.provider', - 'custom_item.route.provider', - 'mautic.core.service.flashbag', - ], - 'methodCalls' => [ - 'setContainer' => [ - '@service_container', - ], - ], - ], - 'custom_item.unlink_controller' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Controller\CustomItem\UnlinkController::class, - 'arguments' => [ - 'mautic.custom.model.item', - 'custom_item.permission.provider', - 'mautic.core.service.flashbag', - ], - 'methodCalls' => [ - 'setContainer' => [ - '@service_container', - ], - ], - ], - 'custom_item.contact_list_controller' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Controller\CustomItem\ContactListController::class, - 'methodCalls' => [ - 'setContainer' => [ - '@service_container', - ], - ], - ], - 'custom_item.export_controller' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Controller\CustomItem\ExportController::class, - 'arguments' => [ - 'custom_item.permission.provider', - 'mautic.custom.model.export_scheduler', - ], - ], - - // Custom Objects - 'custom_object.list_controller' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Controller\CustomObject\ListController::class, - 'arguments' => [ - 'request_stack', - 'custom_object.session.provider_factory', - 'mautic.custom.model.object', - 'custom_object.permission.provider', - 'custom_object.route.provider', - ], - 'methodCalls' => [ - 'setContainer' => [ - '@service_container', - ], - ], - ], - 'custom_object.view_controller' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Controller\CustomObject\ViewController::class, - 'arguments' => [ - 'request_stack', - 'form.factory', - 'mautic.custom.model.object', - 'mautic.core.model.auditlog', - 'custom_object.permission.provider', - 'custom_object.route.provider', - ], - 'methodCalls' => [ - 'setContainer' => [ - '@service_container', - ], - ], - ], - 'custom_object.form_controller' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Controller\CustomObject\FormController::class, - 'arguments' => [ - 'form.factory', - 'mautic.custom.model.object', - 'mautic.custom.model.field', - 'custom_object.permission.provider', - 'custom_object.route.provider', - 'custom_field.type.provider', - 'custom_object.lock_flash_message.helper', - ], - 'methodCalls' => [ - 'setContainer' => [ - '@service_container', - ], - ], - ], - 'custom_object.save_controller' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Controller\CustomObject\SaveController::class, - 'arguments' => [ - 'request_stack', - 'mautic.core.service.flashbag', - 'form.factory', - 'mautic.custom.model.object', - 'mautic.custom.model.field', - 'custom_object.permission.provider', - 'custom_object.route.provider', - 'custom_field.type.provider', - 'custom_field.field.params.to.string.transformer', - 'custom_field.field.options.to.string.transformer', - 'custom_object.lock_flash_message.helper', - ], - 'methodCalls' => [ - 'setContainer' => [ - '@service_container', - ], - ], - ], - 'custom_object.delete_controller' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Controller\CustomObject\DeleteController::class, - 'arguments' => [ - 'mautic.custom.model.object', - 'custom_object.session.provider_factory', - 'mautic.core.service.flashbag', - 'custom_object.permission.provider', - 'event_dispatcher', - ], - 'methodCalls' => [ - 'setContainer' => [ - '@service_container', - ], - ], - ], - 'custom_object.cancel_controller' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Controller\CustomObject\CancelController::class, - 'arguments' => [ - 'custom_object.session.provider_factory', - 'custom_object.route.provider', - 'mautic.custom.model.object', - ], - 'methodCalls' => [ - 'setContainer' => [ - '@service_container', - ], - ], - ], - ], - 'models' => [ - 'mautic.custom.model.field' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Model\CustomFieldModel::class, - 'arguments' => [ - 'custom_field.repository', - 'custom_field.permission.provider', - 'mautic.helper.user', - ], - ], - 'mautic.custom.model.field.value' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Model\CustomFieldValueModel::class, - 'arguments' => [ - 'doctrine.orm.entity_manager', - 'validator', - ], - ], - 'mautic.custom.model.item' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Model\CustomItemModel::class, - 'arguments' => [ - 'doctrine.orm.entity_manager', - 'custom_item.repository', - 'custom_item.permission.provider', - 'mautic.helper.user', - 'mautic.custom.model.field.value', - 'event_dispatcher', - 'validator', - ], - ], - 'mautic.custom.model.import.item' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Model\CustomItemImportModel::class, - 'arguments' => [ - 'doctrine.orm.entity_manager', - 'mautic.custom.model.item', - 'mautic.helper.template.formatter', - ], - ], - 'mautic.custom.model.import.xref.contact' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Model\CustomItemXrefContactModel::class, - 'arguments' => [ - 'doctrine.orm.entity_manager', - 'translator', - ], - ], - 'mautic.custom.model.field.option' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Model\CustomFieldOptionModel::class, - 'arguments' => [ - 'doctrine.orm.entity_manager', - ], - ], - 'mautic.custom.model.object' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Model\CustomObjectModel::class, - 'arguments' => [ - 'doctrine.orm.entity_manager', - 'custom_object.repository', - 'custom_object.permission.provider', - 'mautic.helper.user', - 'mautic.custom.model.field', - 'event_dispatcher', - 'mautic.lead.model.list', - ], - ], - 'mautic.custom.model.export_scheduler' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Model\CustomItemExportSchedulerModel::class, - 'arguments' => [ - 'mautic.helper.export', - 'mautic.helper.mailer', - 'mautic.custom.model.field.value', - 'custom_item.route.provider', - 'custom_item.xref.contact.repository', - 'custom_item.repository', - 'event_dispatcher', - ], - ], - ], 'permissions' => [ 'custom_object.permissions' => [ 'class' => \MauticPlugin\CustomObjectsBundle\Security\Permissions\CustomObjectPermissions::class, @@ -592,50 +198,6 @@ ], ], ], - 'repositories' => [ - 'custom_field.repository' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Repository\CustomFieldRepository::class, - 'factory' => ['@doctrine.orm.entity_manager', 'getRepository'], - 'arguments' => [ - \MauticPlugin\CustomObjectsBundle\Entity\CustomField::class, - ], - ], - 'custom_item.repository' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Repository\CustomItemRepository::class, - 'factory' => ['@doctrine.orm.entity_manager', 'getRepository'], - 'arguments' => [ - \MauticPlugin\CustomObjectsBundle\Entity\CustomItem::class, - ], - ], - 'custom_object.repository' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Repository\CustomObjectRepository::class, - 'factory' => ['@doctrine.orm.entity_manager', 'getRepository'], - 'arguments' => [ - \MauticPlugin\CustomObjectsBundle\Entity\CustomObject::class, - ], - ], - 'custom_item.xref.contact.repository' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Repository\CustomItemXrefContactRepository::class, - 'factory' => ['@doctrine.orm.entity_manager', 'getRepository'], - 'arguments' => [ - \MauticPlugin\CustomObjectsBundle\Entity\CustomItemXrefContact::class, - ], - ], - 'custom_item.xref.custom_item.repository' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Repository\CustomItemXrefCustomItemRepository::class, - 'factory' => ['@doctrine.orm.entity_manager', 'getRepository'], - 'arguments' => [ - \MauticPlugin\CustomObjectsBundle\Entity\CustomItemXrefCustomItem::class, - ], - ], - 'custom_object.segment_decorator_multiselect' => [ - 'class' => \MauticPlugin\CustomObjectsBundle\Segment\Decorator\MultiselectDecorator::class, - 'arguments' => [ - 'mautic.lead.model.lead_segment_filter_operator', - 'mautic.lead.repository.lead_segment_filter_descriptor', - ], - ], - ], 'events' => [ 'custom_object.api.subscriber' => [ 'class' => \MauticPlugin\CustomObjectsBundle\EventListener\ApiSubscriber::class, @@ -648,7 +210,7 @@ 'custom_object.assets.subscriber' => [ 'class' => \MauticPlugin\CustomObjectsBundle\EventListener\AssetsSubscriber::class, 'arguments' => [ - 'templating.helper.assets', + 'twig.helper.assets', 'custom_object.config.provider', ], ], @@ -745,6 +307,7 @@ 'mautic.custom.model.import.item', 'custom_object.config.provider', 'custom_item.permission.provider', + 'custom_object.permission.provider', 'custom_field.repository', 'translator', ], @@ -812,7 +375,7 @@ ], 'custom_object.segments.filters_generate.subscriber' => [ 'class' => \MauticPlugin\CustomObjectsBundle\EventListener\SegmentFiltersChoicesGenerateSubscriber::class, - 'arguments'=> [ + 'arguments' => [ 'custom_object.repository', 'translator', 'custom_object.config.provider', @@ -871,7 +434,7 @@ ], 'custom_object.segments.decorator_delegate.subscriber' => [ 'class' => \MauticPlugin\CustomObjectsBundle\EventListener\SegmentFilterDecoratorDelegateSubscriber::class, - 'arguments'=> [ + 'arguments' => [ 'custom_object.segment_decorator_multiselect', ], ], @@ -1022,18 +585,6 @@ 'arguments' => ['translator', 'mautic.lead.provider.fillterOperator'], 'tag' => 'custom.field.type', ], - // Hiding these as they duplicate the select and multiselect field type functionality. - // Remove these field types if no one will miss them. - // 'custom.field.type.checkbox_group' => [ - // 'class' => \MauticPlugin\CustomObjectsBundle\CustomFieldType\CheckboxGroupType::class, - // 'arguments' => ['translator', 'mautic.lead.provider.fillterOperator', 'custom_object.csv.helper'], - // 'tag' => 'custom.field.type', - // ], - // 'custom.field.type.radio_group' => [ - // 'class' => \MauticPlugin\CustomObjectsBundle\CustomFieldType\RadioGroupType::class, - // 'arguments' => ['translator', 'mautic.lead.provider.fillterOperator'], - // 'tag' => 'custom.field.type', - // ], ], 'other' => [ 'custom_object.config.provider' => [ @@ -1075,7 +626,7 @@ 'custom_object.session.provider_factory' => [ 'class' => \MauticPlugin\CustomObjectsBundle\Provider\SessionProviderFactory::class, 'arguments' => [ - 'session', + 'request_stack', 'mautic.helper.core_parameters', ], ], @@ -1113,6 +664,13 @@ 'class' => \MauticPlugin\CustomObjectsBundle\Entity\CustomFieldFactory::class, 'arguments' => ['custom_field.type.provider'], ], + 'custom_object.segment_decorator_multiselect' => [ + 'class' => \MauticPlugin\CustomObjectsBundle\Segment\Decorator\MultiselectDecorator::class, + 'arguments' => [ + 'mautic.lead.model.lead_segment_filter_operator', + 'mautic.lead.repository.lead_segment_filter_descriptor', + ], + ], 'mautic.lead.query.builder.custom_field.value' => [ 'class' => \MauticPlugin\CustomObjectsBundle\Segment\Query\Filter\CustomFieldFilterQueryBuilder::class, 'arguments' => [ @@ -1154,7 +712,7 @@ 'custom_field.type.provider', 'custom_field.repository', 'query_filter_factory_calculator', - '%mautic.'.ConfigProvider::CONFIG_PARAM_ITEM_VALUE_TO_CONTACT_RELATION_LIMIT.'%', + '%mautic.' . ConfigProvider::CONFIG_PARAM_ITEM_VALUE_TO_CONTACT_RELATION_LIMIT . '%', ], ], 'custom_object.query.filter.helper' => [ @@ -1202,43 +760,10 @@ 'parameters' => [ ConfigProvider::CONFIG_PARAM_ENABLED => true, ConfigProvider::CONFIG_PARAM_ITEM_VALUE_TO_CONTACT_RELATION_LIMIT => ConfigProvider::CONFIG_PARAM_ITEM_VALUE_TO_CONTACT_RELATION_DEFAULT_LIMIT, - 'custom_item_export_dir' => '%kernel.root_dir%/../media/files/temp', + 'custom_item_export_dir' => '%kernel.project_dir%/../media/files/temp', 'custom_object_merge_filter' => false, 'custom_item_fetch_limit_per_lead' => 15, ], ]; -if (interface_exists('ApiPlatform\\Core\\Api\\IriConverterInterface')) { - $coParams['services']['other']['api_platform.custom_object.serializer.api_normalizer_jsonld'] = [ - 'class' => \MauticPlugin\CustomObjectsBundle\Serializer\ApiNormalizer::class, - 'decoratedService' => ['api_platform.jsonld.normalizer.item', 'api_platform.jsonld.normalizer.item.inner'], - 'arguments' => [ - 'api_platform.jsonld.normalizer.item.inner', - 'custom_field.type.provider', - 'mautic.custom.model.item', - 'api_platform.iri_converter', - 'doctrine.orm.entity_manager', - ], - ]; - $coParams['services']['other']['api_platform.custom_object.serializer.api_normalizer_json'] = [ - 'class' => \MauticPlugin\CustomObjectsBundle\Serializer\ApiNormalizer::class, - 'decoratedService' => ['api_platform.serializer.normalizer.item', 'api_platform.serializer.normalizer.item.inner'], - 'arguments' => [ - 'api_platform.serializer.normalizer.item.inner', - 'custom_field.type.provider', - 'mautic.custom.model.item', - 'api_platform.iri_converter', - 'doctrine.orm.entity_manager', - ], - ]; - $coParams['services']['other']['api_platform.custom_object.custom_item.extension'] = [ - 'class' => \MauticPlugin\CustomObjectsBundle\Extension\CustomItemListeningExtension::class, - 'arguments' => [ - 'mautic.helper.user', - 'mautic.security', - ], - 'tag' => 'api_platform.doctrine.orm.query_extension.collection', - ]; -} - return $coParams; diff --git a/Config/services.php b/Config/services.php new file mode 100644 index 000000000..87730e196 --- /dev/null +++ b/Config/services.php @@ -0,0 +1,53 @@ +services() + ->defaults() + ->autowire() + ->autoconfigure() + ->public(); + + $excludes = [ + 'Serializer', + 'Report', + 'Extension' + ]; + + $services->load('MauticPlugin\\CustomObjectsBundle\\', '../') + ->exclude('../{'.implode(',', array_merge(MauticCoreExtension::DEFAULT_EXCLUDES, $excludes)).'}'); + + $services->load('MauticPlugin\\CustomObjectsBundle\\Entity\\', '../Entity/*.php') + ->exclude([ + '../Entity/CustomField/*.php', + '../Entity/AbstractCustomFieldValue.php', + '../Entity/CustomFieldFactory.php', + '../Entity/CustomFieldValueInterface.php', + '../Entity/CustomItemXrefInterface.php', + '../Entity/UniqueEntityInterface.php', + ]) + ->tag(Doctrine\Bundle\DoctrineBundle\DependencyInjection\Compiler\ServiceRepositoryCompilerPass::REPOSITORY_SERVICE_TAG); + + $services->load('MauticPlugin\\CustomObjectsBundle\\Repository\\', '../Repository/*Repository.php') + ->tag(Doctrine\Bundle\DoctrineBundle\DependencyInjection\Compiler\ServiceRepositoryCompilerPass::REPOSITORY_SERVICE_TAG); + + $services->alias('mautic.custom.model.field', MauticPlugin\CustomObjectsBundle\Model\CustomFieldModel::class); + $services->alias('mautic.custom.model.field.value', MauticPlugin\CustomObjectsBundle\Model\CustomFieldValueModel::class); + $services->alias('mautic.custom.model.item', MauticPlugin\CustomObjectsBundle\Model\CustomItemModel::class); + $services->alias('mautic.custom.model.import.item', MauticPlugin\CustomObjectsBundle\Model\CustomItemImportModel::class); + $services->alias('mautic.custom.model.import.xref.contact', MauticPlugin\CustomObjectsBundle\Model\CustomItemXrefContactModel::class); + $services->alias('mautic.custom.model.field.option', MauticPlugin\CustomObjectsBundle\Model\CustomFieldOptionModel::class); + $services->alias('mautic.custom.model.object', MauticPlugin\CustomObjectsBundle\Model\CustomObjectModel::class); + $services->alias('mautic.custom.model.export_scheduler', MauticPlugin\CustomObjectsBundle\Model\CustomItemExportSchedulerModel::class); + + $services->alias('custom_field.repository', MauticPlugin\CustomObjectsBundle\Repository\CustomFieldRepository::class); + $services->alias('custom_item.repository', MauticPlugin\CustomObjectsBundle\Repository\CustomItemRepository::class); + $services->alias('custom_object.repository', MauticPlugin\CustomObjectsBundle\Repository\CustomObjectRepository::class); + $services->alias('custom_item.xref.contact.repository', MauticPlugin\CustomObjectsBundle\Repository\CustomItemXrefContactRepository::class); + $services->alias('custom_item.xref.custom_item.repository', MauticPlugin\CustomObjectsBundle\Repository\CustomItemXrefCustomItemRepository::class); + $services->alias('custom_item_export_scheduler.repository', MauticPlugin\CustomObjectsBundle\Repository\CustomItemExportSchedulerRepository::class); +}; diff --git a/Controller/CustomField/FormController.php b/Controller/CustomField/FormController.php index a2342f093..21176e7bd 100644 --- a/Controller/CustomField/FormController.php +++ b/Controller/CustomField/FormController.php @@ -4,74 +4,51 @@ namespace MauticPlugin\CustomObjectsBundle\Controller\CustomField; +use Mautic\CoreBundle\Service\FlashBag; +use Mautic\CoreBundle\Helper\UserHelper; +use Doctrine\Persistence\ManagerRegistry; +use Mautic\CoreBundle\Factory\ModelFactory; +use Mautic\CoreBundle\Translation\Translator; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\Form\FormFactoryInterface; use Mautic\CoreBundle\Controller\CommonController; -use MauticPlugin\CustomObjectsBundle\Entity\CustomFieldFactory; +use Mautic\CoreBundle\Helper\CoreParametersHelper; +use Symfony\Component\HttpFoundation\RequestStack; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; -use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; -use MauticPlugin\CustomObjectsBundle\Exception\NotFoundException; -use MauticPlugin\CustomObjectsBundle\Form\Type\CustomFieldType; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; use MauticPlugin\CustomObjectsBundle\Model\CustomFieldModel; use MauticPlugin\CustomObjectsBundle\Model\CustomObjectModel; -use MauticPlugin\CustomObjectsBundle\Provider\CustomFieldPermissionProvider; +use MauticPlugin\CustomObjectsBundle\Entity\CustomFieldFactory; +use MauticPlugin\CustomObjectsBundle\Form\Type\CustomFieldType; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use MauticPlugin\CustomObjectsBundle\Exception\NotFoundException; +use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; use MauticPlugin\CustomObjectsBundle\Provider\CustomFieldRouteProvider; use MauticPlugin\CustomObjectsBundle\Provider\CustomObjectRouteProvider; -use Symfony\Component\Form\FormFactory; -use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpFoundation\Response; +use MauticPlugin\CustomObjectsBundle\Provider\CustomFieldPermissionProvider; class FormController extends CommonController { - /** - * @var FormFactory - */ - private $formFactory; - - /** - * @var CustomFieldModel - */ - private $customFieldModel; - - /** - * @var CustomFieldPermissionProvider - */ - private $permissionProvider; - - /** - * @var CustomFieldRouteProvider - */ - private $fieldRouteProvider; - - /** - * @var CustomFieldFactory - */ - private $customFieldFactory; - - /** - * @var CustomObjectModel - */ - private $customObjectModel; - - /** - * @var CustomObjectRouteProvider - */ - private $objectRouteProvider; - public function __construct( - FormFactory $formFactory, - CustomFieldModel $customFieldModel, - CustomFieldFactory $customFieldFactory, - CustomFieldPermissionProvider $permissionProvider, - CustomFieldRouteProvider $fieldRouteProvider, - CustomObjectModel $customObjectModel, - CustomObjectRouteProvider $objectRouteProvider + private FormFactoryInterface $formFactory, + ManagerRegistry $doctrine, + ModelFactory $modelFactory, + UserHelper $userHelper, + CoreParametersHelper $coreParametersHelper, + EventDispatcherInterface $dispatcher, + Translator $translator, + FlashBag $flashBag, + RequestStack $requestStack, + CorePermissions $security, + private CustomObjectRouteProvider $objectRouteProvider, + private CustomFieldRouteProvider $fieldRouteProvider, + private CustomFieldFactory $customFieldFactory, + private CustomObjectModel $customObjectModel, + private CustomFieldModel $customFieldModel, + private CustomFieldPermissionProvider $permissionProvider, ) { - $this->formFactory = $formFactory; - $this->customFieldModel = $customFieldModel; - $this->customFieldFactory = $customFieldFactory; - $this->permissionProvider = $permissionProvider; - $this->fieldRouteProvider = $fieldRouteProvider; - $this->customObjectModel = $customObjectModel; - $this->objectRouteProvider = $objectRouteProvider; + parent::__construct($doctrine, $modelFactory, $userHelper, $coreParametersHelper, $dispatcher, $translator, $flashBag, $requestStack, $security); } public function renderFormAction(Request $request): Response @@ -114,7 +91,7 @@ public function renderFormAction(Request $request): Response 'customField' => $customField, 'form' => $form->createView(), ], - 'contentTemplate' => 'CustomObjectsBundle:CustomField:form.html.php', + 'contentTemplate' => '@CustomObjects/CustomField/form.html.twig', 'passthroughVars' => [ 'mauticContent' => 'customField', 'route' => $route, diff --git a/Controller/CustomField/SaveController.php b/Controller/CustomField/SaveController.php index 7aff22a2f..c0705f12e 100644 --- a/Controller/CustomField/SaveController.php +++ b/Controller/CustomField/SaveController.php @@ -17,12 +17,19 @@ use MauticPlugin\CustomObjectsBundle\Model\CustomObjectModel; use MauticPlugin\CustomObjectsBundle\Provider\CustomFieldPermissionProvider; use MauticPlugin\CustomObjectsBundle\Provider\CustomFieldRouteProvider; -use Symfony\Component\Form\FormFactory; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Translation\TranslatorInterface; - +use Doctrine\Persistence\ManagerRegistry; +use Mautic\CoreBundle\Factory\ModelFactory; +use Mautic\CoreBundle\Helper\UserHelper; +use Mautic\CoreBundle\Helper\CoreParametersHelper; +use Mautic\CoreBundle\Service\FlashBag; +use Mautic\CoreBundle\Translation\Translator; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; +use Symfony\Component\HttpFoundation\RequestStack; +use Symfony\Component\Form\FormFactoryInterface; /** * This controller is not used for saving to database, it is used only to generate forms and data validation. * Persisting is handled in:. @@ -31,52 +38,25 @@ */ class SaveController extends CommonController { - /** - * @var FormFactory - */ - private $formFactory; - - /** - * @var CustomFieldModel - */ - private $customFieldModel; - - /** - * @var CustomFieldFactory - */ - private $customFieldFactory; - - /** - * @var CustomFieldPermissionProvider - */ - private $permissionProvider; - - /** - * @var CustomFieldRouteProvider - */ - private $fieldRouteProvider; - - /** - * @var CustomObjectModel - */ - private $customObjectModel; public function __construct( - FormFactory $formFactory, - TranslatorInterface $translator, - CustomFieldModel $customFieldModel, - CustomFieldFactory $customFieldFactory, - CustomFieldPermissionProvider $permissionProvider, - CustomFieldRouteProvider $fieldRouteProvider, - CustomObjectModel $customObjectModel + private FormFactoryInterface $formFactory, + ManagerRegistry $doctrine, + ModelFactory $modelFactory, + UserHelper $userHelper, + CoreParametersHelper $coreParametersHelper, + EventDispatcherInterface $dispatcher, + Translator $translator, + FlashBag $flashBag, + RequestStack $requestStack, + CorePermissions $security, + private CustomFieldRouteProvider $fieldRouteProvider, + private CustomFieldFactory $customFieldFactory, + private CustomObjectModel $customObjectModel, + private CustomFieldModel $customFieldModel, + private CustomFieldPermissionProvider $permissionProvider, ) { - $this->formFactory = $formFactory; - $this->translator = $translator; - $this->customFieldModel = $customFieldModel; - $this->customFieldFactory = $customFieldFactory; - $this->permissionProvider = $permissionProvider; - $this->fieldRouteProvider = $fieldRouteProvider; - $this->customObjectModel = $customObjectModel; + parent::__construct($doctrine, $modelFactory, $userHelper, $coreParametersHelper, $dispatcher, $translator, $flashBag, $requestStack, $security); } /** @@ -134,7 +114,7 @@ public function saveAction(Request $request) 'customField' => $customField, 'form' => $form->createView(), ], - 'contentTemplate' => 'CustomObjectsBundle:CustomField:form.html.php', + 'contentTemplate' => '@CustomObjects/CustomField/form.html.twig', 'passthroughVars' => [ 'mauticContent' => 'customField', 'route' => $route, @@ -178,7 +158,7 @@ private function buildSuccessForm(CustomObject $customObject, CustomField $custo ); $template = $this->render( - 'CustomObjectsBundle:CustomObject:_form-fields.html.php', + '@CustomObjects/CustomObject/_form-fields.html.twig', [ 'form' => $form->createView(), 'panelId' => $panelId, // Panel id to me replaced if edit @@ -212,7 +192,7 @@ private function buildSuccessForm(CustomObject $customObject, CustomField $custo * * @see \Symfony\Component\Form\Exception\TransformationFailedException * - * @param string[] $customFieldPost + * @param array $customFieldPost */ private function recreateOptionsFromPost(array $customFieldPost, CustomField $customField): void { diff --git a/Controller/CustomItem/BatchDeleteController.php b/Controller/CustomItem/BatchDeleteController.php index aacfc6306..41b83a738 100644 --- a/Controller/CustomItem/BatchDeleteController.php +++ b/Controller/CustomItem/BatchDeleteController.php @@ -14,53 +14,32 @@ use MauticPlugin\CustomObjectsBundle\Provider\SessionProviderFactory; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\Response; +use Doctrine\Persistence\ManagerRegistry; +use Mautic\CoreBundle\Factory\ModelFactory; +use Mautic\CoreBundle\Helper\UserHelper; +use Mautic\CoreBundle\Helper\CoreParametersHelper; +use Mautic\CoreBundle\Translation\Translator; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; class BatchDeleteController extends CommonController { - /** - * @var RequestStack - */ - private $requestStack; - - /** - * @var CustomItemModel - */ - private $customItemModel; - - /** - * @var SessionProviderFactory - */ - private $sessionProviderFactory; - - /** - * @var CustomItemPermissionProvider - */ - private $permissionProvider; - - /** - * @var CustomItemRouteProvider - */ - private $routeProvider; - - /** - * @var FlashBag - */ - private $flashBag; - public function __construct( - RequestStack $requestStack, - CustomItemModel $customItemModel, - SessionProviderFactory $sessionProviderFactory, - CustomItemPermissionProvider $permissionProvider, - CustomItemRouteProvider $routeProvider, - FlashBag $flashBag + ManagerRegistry $doctrine, + ModelFactory $modelFactory, + UserHelper $userHelper, + CoreParametersHelper $coreParametersHelper, + EventDispatcherInterface $dispatcher, + Translator $translator, + private FlashBag $flashBag, + private RequestStack $requestStack, + CorePermissions $security, + private CustomItemPermissionProvider $permissionProvider, + private CustomItemRouteProvider $routeProvider, + private CustomItemModel $customItemModel, + private SessionProviderFactory $sessionProviderFactory, ) { - $this->requestStack = $requestStack; - $this->customItemModel = $customItemModel; - $this->sessionProviderFactory = $sessionProviderFactory; - $this->permissionProvider = $permissionProvider; - $this->routeProvider = $routeProvider; - $this->flashBag = $flashBag; + parent::__construct($doctrine, $modelFactory, $userHelper, $coreParametersHelper, $dispatcher, $translator, $flashBag, $requestStack, $security); } public function deleteAction(int $objectId): Response @@ -112,7 +91,7 @@ public function deleteAction(int $objectId): Response [ 'returnUrl' => $this->routeProvider->buildListRoute($objectId, $page), 'viewParameters' => ['objectId' => $objectId, 'page' => $page], - 'contentTemplate' => 'CustomObjectsBundle:CustomItem\List:list', + 'contentTemplate' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\ListController::listAction', 'passthroughVars' => [ 'mauticContent' => 'customItem', ], diff --git a/Controller/CustomItem/CancelController.php b/Controller/CustomItem/CancelController.php index 7179f1f07..f6f29d12d 100644 --- a/Controller/CustomItem/CancelController.php +++ b/Controller/CustomItem/CancelController.php @@ -10,32 +10,33 @@ use MauticPlugin\CustomObjectsBundle\Provider\CustomItemRouteProvider; use MauticPlugin\CustomObjectsBundle\Provider\SessionProviderFactory; use Symfony\Component\HttpFoundation\Response; +use Doctrine\Persistence\ManagerRegistry; +use Mautic\CoreBundle\Factory\ModelFactory; +use Mautic\CoreBundle\Helper\UserHelper; +use Mautic\CoreBundle\Helper\CoreParametersHelper; +use Mautic\CoreBundle\Service\FlashBag; +use Mautic\CoreBundle\Translation\Translator; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; +use Symfony\Component\HttpFoundation\RequestStack; class CancelController extends CommonController { - /** - * @var SessionProviderFactory - */ - private $sessionProviderFactory; - - /** - * @var CustomItemRouteProvider - */ - private $routeProvider; - - /** - * @var CustomItemModel - */ - private $customItemModel; - public function __construct( - SessionProviderFactory $sessionProviderFactory, - CustomItemRouteProvider $routeProvider, - CustomItemModel $customItemModel + ManagerRegistry $doctrine, + ModelFactory $modelFactory, + UserHelper $userHelper, + CoreParametersHelper $coreParametersHelper, + EventDispatcherInterface $dispatcher, + Translator $translator, + FlashBag $flashBag, + RequestStack $requestStack, + CorePermissions $security, + private SessionProviderFactory $sessionProviderFactory, + private CustomItemRouteProvider $routeProvider, + private CustomItemModel $customItemModel, ) { - $this->sessionProviderFactory = $sessionProviderFactory; - $this->routeProvider = $routeProvider; - $this->customItemModel = $customItemModel; + parent::__construct($doctrine, $modelFactory, $userHelper, $coreParametersHelper, $dispatcher, $translator, $flashBag, $requestStack, $security); } /** @@ -54,7 +55,7 @@ public function cancelAction(int $objectId, ?int $itemId = null): Response [ 'returnUrl' => $this->routeProvider->buildListRoute($objectId, $page), 'viewParameters' => ['objectId' => $objectId, 'page' => $page], - 'contentTemplate' => 'CustomObjectsBundle:CustomItem\List:list', + 'contentTemplate' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\ListController::listAction', 'passthroughVars' => [ 'mauticContent' => 'customItem', ], diff --git a/Controller/CustomItem/ContactListController.php b/Controller/CustomItem/ContactListController.php index cc6a4edf3..0b0d82270 100644 --- a/Controller/CustomItem/ContactListController.php +++ b/Controller/CustomItem/ContactListController.php @@ -4,9 +4,11 @@ namespace MauticPlugin\CustomObjectsBundle\Controller\CustomItem; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; use Mautic\CoreBundle\Controller\CommonController; use Mautic\LeadBundle\Controller\EntityContactsTrait; -use Symfony\Component\HttpFoundation\Response; +use Mautic\CoreBundle\Factory\PageHelperFactoryInterface; class ContactListController extends CommonController { @@ -15,9 +17,15 @@ class ContactListController extends CommonController /** * @codeCoverageIgnore as this just calls a Mautic core method */ - public function listAction(int $objectId, int $page = 1): Response + public function listAction( + Request $request, + PageHelperFactoryInterface $pageHelperFactory, + int $objectId, + int $page = 1): Response { return $this->generateContactsGrid( + $request, + $pageHelperFactory, $objectId, $page, 'lead:lists:viewother', diff --git a/Controller/CustomItem/DeleteController.php b/Controller/CustomItem/DeleteController.php index cb9e4c578..9a4fcb3de 100644 --- a/Controller/CustomItem/DeleteController.php +++ b/Controller/CustomItem/DeleteController.php @@ -13,46 +13,34 @@ use MauticPlugin\CustomObjectsBundle\Provider\CustomItemRouteProvider; use MauticPlugin\CustomObjectsBundle\Provider\SessionProviderFactory; use Symfony\Component\HttpFoundation\Response; +use Doctrine\Persistence\ManagerRegistry; +use Mautic\CoreBundle\Factory\ModelFactory; +use Mautic\CoreBundle\Helper\UserHelper; +use Mautic\CoreBundle\Helper\CoreParametersHelper; +use Mautic\CoreBundle\Translation\Translator; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; +use Symfony\Component\HttpFoundation\RequestStack; class DeleteController extends CommonController { - /** - * @var CustomItemModel - */ - private $customItemModel; - - /** - * @var SessionProviderFactory - */ - private $sessionProviderFactory; - - /** - * @var CustomItemPermissionProvider - */ - private $permissionProvider; - - /** - * @var CustomItemRouteProvider - */ - private $routeProvider; - - /** - * @var FlashBag - */ - private $flashBag; public function __construct( - CustomItemModel $customItemModel, - SessionProviderFactory $sessionProviderFactory, - FlashBag $flashBag, - CustomItemPermissionProvider $permissionProvider, - CustomItemRouteProvider $routeProvider + ManagerRegistry $doctrine, + ModelFactory $modelFactory, + UserHelper $userHelper, + CoreParametersHelper $coreParametersHelper, + EventDispatcherInterface $dispatcher, + Translator $translator, + private FlashBag $flashBag, + private RequestStack $requestStack, + CorePermissions $security, + private CustomItemPermissionProvider $permissionProvider, + private CustomItemRouteProvider $routeProvider, + private CustomItemModel $customItemModel, + private SessionProviderFactory $sessionProviderFactory, ) { - $this->customItemModel = $customItemModel; - $this->sessionProviderFactory = $sessionProviderFactory; - $this->flashBag = $flashBag; - $this->permissionProvider = $permissionProvider; - $this->routeProvider = $routeProvider; + parent::__construct($doctrine, $modelFactory, $userHelper, $coreParametersHelper, $dispatcher, $translator, $flashBag, $requestStack, $security); } public function deleteAction(int $objectId, int $itemId): Response @@ -83,7 +71,7 @@ public function deleteAction(int $objectId, int $itemId): Response [ 'returnUrl' => $this->routeProvider->buildListRoute($objectId, $page), 'viewParameters' => ['objectId' => $objectId, 'page' => $page], - 'contentTemplate' => 'CustomObjectsBundle:CustomItem\List:list', + 'contentTemplate' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\ListController::listAction', 'passthroughVars' => [ 'mauticContent' => 'customItem', ], diff --git a/Controller/CustomItem/ExportController.php b/Controller/CustomItem/ExportController.php index 52a9c1979..d975ea06c 100644 --- a/Controller/CustomItem/ExportController.php +++ b/Controller/CustomItem/ExportController.php @@ -5,7 +5,6 @@ namespace MauticPlugin\CustomObjectsBundle\Controller\CustomItem; use Mautic\CoreBundle\Controller\AbstractFormController; -use MauticPlugin\CustomObjectsBundle\CustomItemEvents; use MauticPlugin\CustomObjectsBundle\Event\CustomItemExportSchedulerEvent; use MauticPlugin\CustomObjectsBundle\Model\CustomItemExportSchedulerModel; use MauticPlugin\CustomObjectsBundle\Provider\CustomItemPermissionProvider; @@ -13,19 +12,30 @@ use Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Response; - +use Doctrine\Persistence\ManagerRegistry; +use Mautic\CoreBundle\Factory\ModelFactory; +use Mautic\CoreBundle\Helper\UserHelper; +use Mautic\CoreBundle\Helper\CoreParametersHelper; +use Mautic\CoreBundle\Translation\Translator; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; +use Symfony\Component\HttpFoundation\RequestStack; +use Mautic\CoreBundle\Service\FlashBag; class ExportController extends AbstractFormController { - private CustomItemPermissionProvider $permissionProvider; - - private CustomItemExportSchedulerModel $model; - public function __construct( - CustomItemPermissionProvider $permissionProvider, - CustomItemExportSchedulerModel $model + ManagerRegistry $doctrine, + ModelFactory $modelFactory, + UserHelper $userHelper, + CoreParametersHelper $coreParametersHelper, + EventDispatcherInterface $dispatcher, + Translator $translator, + private FlashBag $flashBag, + private RequestStack $requestStack, + CorePermissions $security, + private CustomItemPermissionProvider $permissionProvider, + private CustomItemExportSchedulerModel $model ) { - $this->permissionProvider = $permissionProvider; - $this->model = $model; + parent::__construct($doctrine, $modelFactory, $userHelper, $coreParametersHelper, $dispatcher, $translator, $flashBag, $requestStack, $security); } /** @@ -40,13 +50,9 @@ public function exportAction(int $object): Response $customItemExportScheduler = $this->model->saveEntity($object); /** @var EventDispatcherInterface $dispatcher */ - $dispatcher = $this->get('event_dispatcher'); - $dispatcher->dispatch( - CustomItemEvents::ON_CUSTOM_ITEM_SCHEDULE_EXPORT, - new CustomItemExportSchedulerEvent($customItemExportScheduler) - ); + $this->dispatcher->dispatch(new CustomItemExportSchedulerEvent($customItemExportScheduler)); - $this->addFlash('custom.item.export.being.prepared', ['%user_email%' => $this->user->getEmail()]); + $this->addFlashMessage( 'custom.item.export.being.prepared', ['%user_email%' => $this->user->getEmail()]); $response['message'] = 'Custom Item export scheduled.'; $response['flashes'] = $this->getFlashContent(); diff --git a/Controller/CustomItem/FormController.php b/Controller/CustomItem/FormController.php index 5be8c013e..56023acb1 100644 --- a/Controller/CustomItem/FormController.php +++ b/Controller/CustomItem/FormController.php @@ -4,65 +4,48 @@ namespace MauticPlugin\CustomObjectsBundle\Controller\CustomItem; -use Mautic\CoreBundle\Controller\AbstractFormController; +use Mautic\CoreBundle\Service\FlashBag; +use Mautic\CoreBundle\Helper\UserHelper; +use Doctrine\Persistence\ManagerRegistry; +use Mautic\CoreBundle\Factory\ModelFactory; +use Mautic\CoreBundle\Translation\Translator; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\Form\FormFactoryInterface; +use Mautic\CoreBundle\Helper\CoreParametersHelper; +use Symfony\Component\HttpFoundation\RequestStack; use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; -use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; -use MauticPlugin\CustomObjectsBundle\Exception\NotFoundException; -use MauticPlugin\CustomObjectsBundle\Form\Type\CustomItemType; -use MauticPlugin\CustomObjectsBundle\Helper\LockFlashMessageHelper; +use Mautic\CoreBundle\Controller\AbstractFormController; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; use MauticPlugin\CustomObjectsBundle\Model\CustomItemModel; use MauticPlugin\CustomObjectsBundle\Model\CustomObjectModel; -use MauticPlugin\CustomObjectsBundle\Provider\CustomItemPermissionProvider; +use MauticPlugin\CustomObjectsBundle\Form\Type\CustomItemType; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use MauticPlugin\CustomObjectsBundle\Exception\NotFoundException; +use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; +use MauticPlugin\CustomObjectsBundle\Helper\LockFlashMessageHelper; use MauticPlugin\CustomObjectsBundle\Provider\CustomItemRouteProvider; -use Symfony\Component\Form\FormFactory; -use Symfony\Component\HttpFoundation\Response; +use MauticPlugin\CustomObjectsBundle\Provider\CustomItemPermissionProvider; class FormController extends AbstractFormController { - /** - * @var FormFactory - */ - private $formFactory; - - /** - * @var CustomItemModel - */ - private $customItemModel; - - /** - * @var CustomObjectModel - */ - private $customObjectModel; - - /** - * @var CustomItemPermissionProvider - */ - private $permissionProvider; - - /** - * @var CustomItemRouteProvider - */ - private $routeProvider; - - /** - * @var LockFlashMessageHelper - */ - private $lockFlashMessageHelper; - public function __construct( - FormFactory $formFactory, - CustomObjectModel $customObjectModel, - CustomItemModel $customItemModel, - CustomItemPermissionProvider $permissionProvider, - CustomItemRouteProvider $routeProvider, - LockFlashMessageHelper $lockFlashMessageHelper + ManagerRegistry $doctrine, + ModelFactory $modelFactory, + UserHelper $userHelper, + CoreParametersHelper $coreParametersHelper, + EventDispatcherInterface $dispatcher, + Translator $translator, + FlashBag $flashBag, + RequestStack $requestStack, + CorePermissions $security, + private FormFactoryInterface $formFactory, + private CustomObjectModel $customObjectModel, + private CustomItemModel $customItemModel, + private CustomItemPermissionProvider $permissionProvider, + private CustomItemRouteProvider $routeProvider, + private LockFlashMessageHelper $lockFlashMessageHelper, ) { - $this->formFactory = $formFactory; - $this->customObjectModel = $customObjectModel; - $this->customItemModel = $customItemModel; - $this->permissionProvider = $permissionProvider; - $this->routeProvider = $routeProvider; - $this->lockFlashMessageHelper = $lockFlashMessageHelper; + parent::__construct($doctrine, $modelFactory, $userHelper, $coreParametersHelper, $dispatcher, $translator, $flashBag, $requestStack, $security); } public function newAction(int $objectId): Response @@ -214,7 +197,7 @@ private function renderFormForItem(CustomItem $customItem, string $route, ?int $ 'customObject' => $customItem->getCustomObject(), 'form' => $form->createView(), ], - 'contentTemplate' => 'CustomObjectsBundle:CustomItem:form.html.php', + 'contentTemplate' => '@CustomObjects/CustomItem/form.html.twig', 'passthroughVars' => [ 'mauticContent' => 'customItem', 'route' => $route, diff --git a/Controller/CustomItem/LinkController.php b/Controller/CustomItem/LinkController.php index fcf3192b9..ce36413da 100644 --- a/Controller/CustomItem/LinkController.php +++ b/Controller/CustomItem/LinkController.php @@ -16,31 +16,13 @@ class LinkController extends JsonController { - /** - * @var CustomItemModel - */ - private $customItemModel; - - /** - * @var CustomItemPermissionProvider - */ - private $permissionProvider; - - /** - * @var FlashBag - */ - private $flashBag; - public function __construct( - CustomItemModel $customItemModel, - CustomItemPermissionProvider $permissionProvider, - FlashBag $flashBag + private FlashBag $flashBag, + private CustomItemModel $customItemModel, + private CustomItemPermissionProvider $permissionProvider, ) { - $this->customItemModel = $customItemModel; - $this->permissionProvider = $permissionProvider; - $this->flashBag = $flashBag; } - + public function saveAction(int $itemId, string $entityType, int $entityId): JsonResponse { try { diff --git a/Controller/CustomItem/LinkFormController.php b/Controller/CustomItem/LinkFormController.php index 763778af4..1991b876c 100644 --- a/Controller/CustomItem/LinkFormController.php +++ b/Controller/CustomItem/LinkFormController.php @@ -16,50 +16,36 @@ use MauticPlugin\CustomObjectsBundle\Model\CustomItemModel; use MauticPlugin\CustomObjectsBundle\Provider\CustomItemPermissionProvider; use MauticPlugin\CustomObjectsBundle\Provider\CustomItemRouteProvider; -use Symfony\Component\Form\FormFactory; +use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Response; use UnexpectedValueException; - +use Doctrine\Persistence\ManagerRegistry; +use Mautic\CoreBundle\Factory\ModelFactory; +use Mautic\CoreBundle\Helper\UserHelper; +use Mautic\CoreBundle\Helper\CoreParametersHelper; +use Mautic\CoreBundle\Translation\Translator; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; +use Symfony\Component\HttpFoundation\RequestStack; class LinkFormController extends AbstractFormController { - /** - * @var FormFactory - */ - private $formFactory; - - /** - * @var CustomItemModel - */ - private $customItemModel; - - /** - * @var CustomItemPermissionProvider - */ - private $permissionProvider; - - /** - * @var FlashBag - */ - private $flashBag; - - /** - * @var CustomItemRouteProvider - */ - private $routeProvider; - public function __construct( - FormFactory $formFactory, - CustomItemModel $customItemModel, - CustomItemPermissionProvider $permissionProvider, - CustomItemRouteProvider $customItemRouteProvider, - FlashBag $flashBag + ManagerRegistry $doctrine, + ModelFactory $modelFactory, + UserHelper $userHelper, + CoreParametersHelper $coreParametersHelper, + EventDispatcherInterface $dispatcher, + Translator $translator, + private FlashBag $flashBag, + private RequestStack $requestStack, + CorePermissions $security, + private FormFactoryInterface $formFactory, + private CustomItemModel $customItemModel, + private CustomItemPermissionProvider $permissionProvider, + private CustomItemRouteProvider $routeProvider, ) { - $this->formFactory = $formFactory; - $this->customItemModel = $customItemModel; - $this->permissionProvider = $permissionProvider; - $this->routeProvider = $customItemRouteProvider; - $this->flashBag = $flashBag; + parent::__construct($doctrine, $modelFactory, $userHelper, $coreParametersHelper, $dispatcher, $translator, $flashBag, $requestStack, $security); } public function formAction(int $itemId, string $entityType, int $entityId): Response @@ -95,7 +81,7 @@ public function formAction(int $itemId, string $entityType, int $entityId): Resp 'customObject' => $relationshipObject, 'form' => $form->createView(), ], - 'contentTemplate' => 'CustomObjectsBundle:CustomItem:form.html.php', + 'contentTemplate' => '@CustomObjects/CustomItem/form.html.twig', 'passthroughVars' => [ 'callback' => 'customItemLinkFormLoad', 'mauticContent' => 'customItem', @@ -109,7 +95,7 @@ public function formAction(int $itemId, string $entityType, int $entityId): Resp $responseData = [ 'closeModal' => true, - 'flashes' => $this->renderView('MauticCoreBundle:Notification:flash_messages.html.php'), + 'flashes' => $this->renderView('@MauticCore/Notification/flash_messages.html.twig'), ]; return new JsonResponse($responseData); @@ -143,7 +129,7 @@ public function saveAction(int $itemId, string $entityType, int $entityId): Resp ] ); - $form->handleRequest($this->request); + $form->handleRequest($this->requestStack->getCurrentRequest()); if ($form->isValid()) { $callback = $relationshipItem->getId() ? null : 'customItemLinkFormPostSubmit'; @@ -152,7 +138,7 @@ public function saveAction(int $itemId, string $entityType, int $entityId): Resp $responseData = [ 'closeModal' => true, 'callback' => $callback, - 'flashes' => $this->renderView('MauticCoreBundle:Notification:flash_messages.html.php'), + 'flashes' => $this->renderView('@MauticCore/Notification/flash_messages.html.twig'), ]; return new JsonResponse($responseData); @@ -168,9 +154,9 @@ public function saveAction(int $itemId, string $entityType, int $entityId): Resp 'entity' => $relationshipItem, 'customObject' => $relationshipObject, 'form' => $form->createView(), - 'tmpl' => $this->request->isXmlHttpRequest() ? $this->request->get('tmpl', 'index') : 'index', + 'tmpl' => $this->requestStack->getCurrentRequest()->isXmlHttpRequest() ? $this->requestStack->getCurrentRequest()->get('tmpl', 'index') : 'index', ], - 'contentTemplate' => 'CustomObjectsBundle:CustomItem:form.html.php', + 'contentTemplate' => '@CustomObjects/CustomItem/form.html.twig', 'passthroughVars' => [ 'closeModal' => false, 'callback' => 'customItemLinkFormLoad', diff --git a/Controller/CustomItem/ListController.php b/Controller/CustomItem/ListController.php index 3dfed2e3e..33f838097 100644 --- a/Controller/CustomItem/ListController.php +++ b/Controller/CustomItem/ListController.php @@ -4,66 +4,47 @@ namespace MauticPlugin\CustomObjectsBundle\Controller\CustomItem; -use Mautic\CoreBundle\Controller\CommonController; +use Mautic\CoreBundle\Service\FlashBag; +use Mautic\CoreBundle\Helper\UserHelper; +use Doctrine\Persistence\ManagerRegistry; use Mautic\CoreBundle\Helper\InputHelper; +use Mautic\CoreBundle\Factory\ModelFactory; +use Mautic\CoreBundle\Translation\Translator; +use Symfony\Component\HttpFoundation\Response; +use Mautic\CoreBundle\Controller\CommonController; +use Mautic\CoreBundle\Helper\CoreParametersHelper; +use Symfony\Component\HttpFoundation\RequestStack; use MauticPlugin\CustomObjectsBundle\DTO\TableConfig; use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; -use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; -use MauticPlugin\CustomObjectsBundle\Exception\NotFoundException; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; use MauticPlugin\CustomObjectsBundle\Model\CustomItemModel; use MauticPlugin\CustomObjectsBundle\Model\CustomObjectModel; -use MauticPlugin\CustomObjectsBundle\Provider\CustomItemPermissionProvider; -use MauticPlugin\CustomObjectsBundle\Provider\CustomItemRouteProvider; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use MauticPlugin\CustomObjectsBundle\Exception\NotFoundException; +use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; use MauticPlugin\CustomObjectsBundle\Provider\SessionProviderFactory; -use Symfony\Component\HttpFoundation\RequestStack; -use Symfony\Component\HttpFoundation\Response; +use MauticPlugin\CustomObjectsBundle\Provider\CustomItemRouteProvider; +use MauticPlugin\CustomObjectsBundle\Provider\CustomItemPermissionProvider; class ListController extends CommonController { - /** - * @var RequestStack - */ - private $requestStack; - - /** - * @var SessionProviderFactory - */ - private $sessionProviderFactory; - - /** - * @var CustomItemModel - */ - private $customItemModel; - - /** - * @var CustomObjectModel - */ - private $customObjectModel; - - /** - * @var CustomItemPermissionProvider - */ - private $permissionProvider; - - /** - * @var CustomItemRouteProvider - */ - private $routeProvider; - public function __construct( - RequestStack $requestStack, - SessionProviderFactory $sessionProviderFactory, - CustomItemModel $customItemModel, - CustomObjectModel $customObjectModel, - CustomItemPermissionProvider $permissionProvider, - CustomItemRouteProvider $routeProvider + ManagerRegistry $doctrine, + ModelFactory $modelFactory, + UserHelper $userHelper, + CoreParametersHelper $coreParametersHelper, + EventDispatcherInterface $dispatcher, + Translator $translator, + FlashBag $flashBag, + private RequestStack $requestStack, + CorePermissions $security, + private SessionProviderFactory $sessionProviderFactory, + private CustomItemModel $customItemModel, + private CustomObjectModel $customObjectModel, + private CustomItemPermissionProvider $permissionProvider, + private CustomItemRouteProvider $routeProvider ) { - $this->requestStack = $requestStack; - $this->sessionProviderFactory = $sessionProviderFactory; - $this->customItemModel = $customItemModel; - $this->customObjectModel = $customObjectModel; - $this->permissionProvider = $permissionProvider; - $this->routeProvider = $routeProvider; + parent::__construct($doctrine, $modelFactory, $userHelper, $coreParametersHelper, $dispatcher, $translator, $flashBag, $requestStack, $security); } public function listAction(int $objectId, int $page = 1): Response @@ -124,7 +105,7 @@ public function listAction(int $objectId, int $page = 1): Response 'sessionVar' => $namespace, 'namespace' => $namespace, ], - 'contentTemplate' => 'CustomObjectsBundle:CustomItem:list.html.php', + 'contentTemplate' => '@CustomObjects/CustomItem/list.html.twig', 'passthroughVars' => [ 'mauticContent' => 'customItem', 'route' => $filterEntityType ? null : $route, diff --git a/Controller/CustomItem/LookupController.php b/Controller/CustomItem/LookupController.php index 29d1255f8..1ada0ae59 100644 --- a/Controller/CustomItem/LookupController.php +++ b/Controller/CustomItem/LookupController.php @@ -14,39 +14,14 @@ use MauticPlugin\CustomObjectsBundle\Provider\CustomItemPermissionProvider; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\RequestStack; - class LookupController extends JsonController { - /** - * @var RequestStack - */ - private $requestStack; - - /** - * @var CustomItemModel - */ - private $customItemModel; - - /** - * @var CustomItemPermissionProvider - */ - private $permissionProvider; - - /** - * @var FlashBag - */ - private $flashBag; - public function __construct( - RequestStack $requestStack, - CustomItemModel $customItemModel, - CustomItemPermissionProvider $permissionProvider, - FlashBag $flashBag + private RequestStack $requestStack, + private CustomItemModel $customItemModel, + private CustomItemPermissionProvider $permissionProvider, + private FlashBag $flashBag ) { - $this->requestStack = $requestStack; - $this->customItemModel = $customItemModel; - $this->permissionProvider = $permissionProvider; - $this->flashBag = $flashBag; } public function listAction(int $objectId): JsonResponse diff --git a/Controller/CustomItem/SaveController.php b/Controller/CustomItem/SaveController.php index 4b57d6afe..f32ce2c9e 100644 --- a/Controller/CustomItem/SaveController.php +++ b/Controller/CustomItem/SaveController.php @@ -19,73 +19,39 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\Response; - +use Doctrine\Persistence\ManagerRegistry; +use Mautic\CoreBundle\Factory\ModelFactory; +use Mautic\CoreBundle\Helper\UserHelper; +use Mautic\CoreBundle\Helper\CoreParametersHelper; +use Mautic\CoreBundle\Translation\Translator; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; class SaveController extends AbstractFormController { - /** - * @var RequestStack - */ - private $requestStack; - - /** - * @var FormFactoryInterface - */ - private $formFactory; - - /** - * @var FlashBag - */ - private $flashBag; - - /** - * @var CustomItemModel - */ - private $customItemModel; - - /** - * @var CustomObjectModel - */ - private $customObjectModel; - - /** - * @var CustomItemPermissionProvider - */ - private $permissionProvider; - - /** - * @var CustomItemRouteProvider - */ - private $routeProvider; - - /** - * @var LockFlashMessageHelper - */ - private $lockFlashMessageHelper; - public function __construct( - RequestStack $requestStack, - FormFactoryInterface $formFactory, - FlashBag $flashBag, - CustomItemModel $customItemModel, - CustomObjectModel $customObjectModel, - CustomItemPermissionProvider $permissionProvider, - CustomItemRouteProvider $routeProvider, - LockFlashMessageHelper $lockFlashMessageHelper + ManagerRegistry $doctrine, + ModelFactory $modelFactory, + UserHelper $userHelper, + CoreParametersHelper $coreParametersHelper, + EventDispatcherInterface $dispatcher, + Translator $translator, + private FlashBag $flashBag, + private RequestStack $requestStack, + CorePermissions $security, + private FormFactoryInterface $formFactory, + private CustomItemModel $customItemModel, + private CustomObjectModel $customObjectModel, + private CustomItemPermissionProvider $permissionProvider, + private CustomItemRouteProvider $routeProvider, + private LockFlashMessageHelper $lockFlashMessageHelper ) { - $this->requestStack = $requestStack; - $this->formFactory = $formFactory; - $this->flashBag = $flashBag; - $this->customItemModel = $customItemModel; - $this->customObjectModel = $customObjectModel; - $this->permissionProvider = $permissionProvider; - $this->routeProvider = $routeProvider; - $this->lockFlashMessageHelper = $lockFlashMessageHelper; + parent::__construct($doctrine, $modelFactory, $userHelper, $coreParametersHelper, $dispatcher, $translator, $flashBag, $requestStack, $security); } public function saveAction(int $objectId, ?int $itemId = null): Response { $request = $this->requestStack->getCurrentRequest(); - $customItemData = $request->request->get('custom_item'); + $customItemData = $request->request->all('custom_item'); $contactId = intval($customItemData['contact_id'] ?? 0); try { @@ -156,8 +122,8 @@ public function saveAction(int $objectId, ?int $itemId = null): Response ); $saveClicked = $form->get('buttons')->get('save')->isClicked(); - $detailView = 'CustomObjectsBundle:CustomItem\View:view'; - $formView = 'CustomObjectsBundle:CustomItem\Form:edit'; + $detailView = 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\ViewController::viewAction'; + $formView = 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\FormController::editAction'; $pathParameters = [ 'objectId' => $objectId, @@ -178,7 +144,7 @@ public function saveAction(int $objectId, ?int $itemId = null): Response return $this->redirectToRoute('mautic_contact_action', ['objectAction' => 'view', 'objectId' => $contactId]); } - $formView = 'CustomObjectsBundle:CustomItem\Form:editWithRedirectToContact'; + $formView = 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\FormController::editWithRedirectToContactAction'; $pathParameters['contactId'] = $contactId; } @@ -203,7 +169,7 @@ public function saveAction(int $objectId, ?int $itemId = null): Response 'form' => $form->createView(), 'tmpl' => $request->isXmlHttpRequest() ? $request->get('tmpl', 'index') : 'index', ], - 'contentTemplate' => 'CustomObjectsBundle:CustomItem:form.html.php', + 'contentTemplate' => '@CustomObjects/CustomItem/form.html.twig', 'passthroughVars' => [ 'mauticContent' => 'customItem', 'route' => $route, diff --git a/Controller/CustomItem/UnlinkController.php b/Controller/CustomItem/UnlinkController.php index 9e1a68698..f99e4c564 100644 --- a/Controller/CustomItem/UnlinkController.php +++ b/Controller/CustomItem/UnlinkController.php @@ -15,29 +15,11 @@ class UnlinkController extends JsonController { - /** - * @var CustomItemModel - */ - private $customItemModel; - - /** - * @var CustomItemPermissionProvider - */ - private $permissionProvider; - - /** - * @var FlashBag - */ - private $flashBag; - public function __construct( - CustomItemModel $customItemModel, - CustomItemPermissionProvider $permissionProvider, - FlashBag $flashBag + private CustomItemModel $customItemModel, + private CustomItemPermissionProvider $permissionProvider, + private FlashBag $flashBag ) { - $this->customItemModel = $customItemModel; - $this->permissionProvider = $permissionProvider; - $this->flashBag = $flashBag; } public function saveAction(int $itemId, string $entityType, int $entityId): JsonResponse diff --git a/Controller/CustomItem/ViewController.php b/Controller/CustomItem/ViewController.php index c29166ba9..b4c609d10 100644 --- a/Controller/CustomItem/ViewController.php +++ b/Controller/CustomItem/ViewController.php @@ -16,60 +16,35 @@ use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\Response; +use Doctrine\Persistence\ManagerRegistry; +use Mautic\CoreBundle\Factory\ModelFactory; +use Mautic\CoreBundle\Helper\UserHelper; +use Mautic\CoreBundle\Helper\CoreParametersHelper; +use Mautic\CoreBundle\Translation\Translator; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; +use Mautic\CoreBundle\Service\FlashBag; class ViewController extends CommonController { - /** - * @var RequestStack - */ - private $requestStack; - - /** - * @var CustomItemModel - */ - private $customItemModel; - - /** - * @var CustomItemXrefContactModel - */ - private $customItemXrefContactModel; - - /** - * @var AuditLogModel - */ - private $auditLogModel; - - /** - * @var CustomItemPermissionProvider - */ - private $permissionProvider; - - /** - * @var CustomItemRouteProvider - */ - private $routeProvider; - - /** - * @var FormFactoryInterface - */ - private $formFactory; - public function __construct( - RequestStack $requestStack, - FormFactoryInterface $formFactory, - CustomItemModel $customItemModel, - CustomItemXrefContactModel $customItemXrefContactModel, - AuditLogModel $auditLogModel, - CustomItemPermissionProvider $permissionProvider, - CustomItemRouteProvider $routeProvider + ManagerRegistry $doctrine, + ModelFactory $modelFactory, + UserHelper $userHelper, + CoreParametersHelper $coreParametersHelper, + EventDispatcherInterface $dispatcher, + Translator $translator, + FlashBag $flashBag, + private RequestStack $requestStack, + CorePermissions $security, + private FormFactoryInterface $formFactory, + private CustomItemModel $customItemModel, + private CustomItemXrefContactModel $customItemXrefContactModel, + private AuditLogModel $auditLogModel, + private CustomItemPermissionProvider $permissionProvider, + private CustomItemRouteProvider $routeProvider ) { - $this->requestStack = $requestStack; - $this->formFactory = $formFactory; - $this->customItemModel = $customItemModel; - $this->customItemXrefContactModel = $customItemXrefContactModel; - $this->auditLogModel = $auditLogModel; - $this->permissionProvider = $permissionProvider; - $this->routeProvider = $routeProvider; + parent::__construct($doctrine, $modelFactory, $userHelper, $coreParametersHelper, $dispatcher, $translator, $flashBag, $requestStack, $security); } public function viewAction(int $objectId, int $itemId): Response @@ -106,7 +81,7 @@ public function viewAction(int $objectId, int $itemId): Response 'stats' => $stats, 'logs' => $auditLogs, 'contacts' => $this->forward( - 'CustomObjectsBundle:CustomItem\ContactList:list', + 'MauticPlugin\CustomObjectsBundle\Controller\CustomItem\ContactListController::listAction', [ 'objectId' => $itemId, 'page' => 1, @@ -114,7 +89,7 @@ public function viewAction(int $objectId, int $itemId): Response ] )->getContent(), ], - 'contentTemplate' => 'CustomObjectsBundle:CustomItem:detail.html.php', + 'contentTemplate' => '@CustomObjects/CustomItem/details.html.twig', 'passthroughVars' => [ 'mauticContent' => 'customItem', 'activeLink' => "#mautic_custom_object_{$objectId}", diff --git a/Controller/CustomObject/CancelController.php b/Controller/CustomObject/CancelController.php index d0c0ec82f..634621c2e 100644 --- a/Controller/CustomObject/CancelController.php +++ b/Controller/CustomObject/CancelController.php @@ -9,32 +9,33 @@ use MauticPlugin\CustomObjectsBundle\Provider\CustomObjectRouteProvider; use MauticPlugin\CustomObjectsBundle\Provider\SessionProviderFactory; use Symfony\Component\HttpFoundation\Response; +use Doctrine\Persistence\ManagerRegistry; +use Mautic\CoreBundle\Factory\ModelFactory; +use Mautic\CoreBundle\Helper\UserHelper; +use Mautic\CoreBundle\Helper\CoreParametersHelper; +use Mautic\CoreBundle\Service\FlashBag; +use Mautic\CoreBundle\Translation\Translator; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; +use Symfony\Component\HttpFoundation\RequestStack; class CancelController extends CommonController { - /** - * @var SessionProviderFactory - */ - private $sessionProviderFactory; - - /** - * @var CustomObjectRouteProvider - */ - private $routeProvider; - - /** - * @var CustomObjectModel - */ - private $customObjectModel; - public function __construct( - SessionProviderFactory $sessionProviderFactory, - CustomObjectRouteProvider $routeProvider, - CustomObjectModel $customObjectModel + ManagerRegistry $doctrine, + ModelFactory $modelFactory, + UserHelper $userHelper, + CoreParametersHelper $coreParametersHelper, + EventDispatcherInterface $dispatcher, + Translator $translator, + FlashBag $flashBag, + private RequestStack $requestStack, + CorePermissions $security, + private SessionProviderFactory $sessionProviderFactory, + private CustomObjectRouteProvider $routeProvider, + private CustomObjectModel $customObjectModel ) { - $this->sessionProviderFactory = $sessionProviderFactory; - $this->routeProvider = $routeProvider; - $this->customObjectModel = $customObjectModel; + parent::__construct($doctrine, $modelFactory, $userHelper, $coreParametersHelper, $dispatcher, $translator, $flashBag, $requestStack, $security); } public function cancelAction(?int $objectId): Response @@ -50,7 +51,7 @@ public function cancelAction(?int $objectId): Response [ 'returnUrl' => $this->routeProvider->buildListRoute($page), 'viewParameters' => ['page' => $page], - 'contentTemplate' => 'CustomObjectsBundle:CustomObject\List:list', + 'contentTemplate' => 'MauticPlugin\CustomObjectsBundle\Controller\CustomObject\ListController::listAction', 'passthroughVars' => [ 'mauticContent' => 'customObject', ], diff --git a/Controller/CustomObject/DeleteController.php b/Controller/CustomObject/DeleteController.php index 3bd6e6b95..6d6ae2de8 100644 --- a/Controller/CustomObject/DeleteController.php +++ b/Controller/CustomObject/DeleteController.php @@ -16,51 +16,37 @@ use MauticPlugin\CustomObjectsBundle\Provider\SessionProviderFactory; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\HttpFoundation\Response; +use Doctrine\Persistence\ManagerRegistry; +use Mautic\CoreBundle\Factory\ModelFactory; +use Mautic\CoreBundle\Helper\UserHelper; +use Mautic\CoreBundle\Helper\CoreParametersHelper; +use Mautic\CoreBundle\Translation\Translator; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; +use Symfony\Component\HttpFoundation\RequestStack; class DeleteController extends CommonController { - /** - * @var CustomObjectModel - */ - private $customObjectModel; - - /** - * @var SessionProviderFactory - */ - private $sessionProviderFactory; - - /** - * @var FlashBag - */ - private $flashBag; - - /** - * @var CustomObjectPermissionProvider - */ - private $permissionProvider; - - /** - * @var EventDispatcherInterface - */ - private $eventDispatcher; - public function __construct( - CustomObjectModel $customObjectModel, - SessionProviderFactory $sessionProviderFactory, - FlashBag $flashBag, - CustomObjectPermissionProvider $permissionProvider, - EventDispatcherInterface $eventDispatcher + ManagerRegistry $doctrine, + ModelFactory $modelFactory, + UserHelper $userHelper, + CoreParametersHelper $coreParametersHelper, + EventDispatcherInterface $dispatcher, + Translator $translator, + private FlashBag $flashBag, + private RequestStack $requestStack, + CorePermissions $security, + private CustomObjectModel $customObjectModel, + private SessionProviderFactory $sessionProviderFactory, + private CustomObjectPermissionProvider $permissionProvider, + private EventDispatcherInterface $eventDispatcher ) { - $this->customObjectModel = $customObjectModel; - $this->sessionProviderFactory = $sessionProviderFactory; - $this->flashBag = $flashBag; - $this->permissionProvider = $permissionProvider; - $this->eventDispatcher = $eventDispatcher; + parent::__construct($doctrine, $modelFactory, $userHelper, $coreParametersHelper, $dispatcher, $translator, $flashBag, $requestStack, $security); } public function deleteAction(int $objectId): Response { - $controller = 'CustomObjectsBundle:CustomObject\List:list'; + $controller = 'MauticPlugin\CustomObjectsBundle\Controller\CustomObject\ListController::listAction'; $page = [ 'page' => $this->sessionProviderFactory->createObjectProvider()->getPage(), ]; @@ -95,7 +81,7 @@ public function deleteAction(int $objectId): Response $customObjectEvent = new CustomObjectEvent($customObject); $customObjectEvent->setFlashBag($this->flashBag); - $this->eventDispatcher->dispatch(CustomObjectEvents::ON_CUSTOM_OBJECT_USER_PRE_DELETE, $customObjectEvent); + $this->eventDispatcher->dispatch(new CustomObjectEvent($customObject), CustomObjectEvents::ON_CUSTOM_OBJECT_USER_PRE_DELETE); return $this->forward( $controller, diff --git a/Controller/CustomObject/FormController.php b/Controller/CustomObject/FormController.php index 5d3284d6e..a19448e87 100644 --- a/Controller/CustomObject/FormController.php +++ b/Controller/CustomObject/FormController.php @@ -4,73 +4,50 @@ namespace MauticPlugin\CustomObjectsBundle\Controller\CustomObject; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\Form\FormFactoryInterface; +use Doctrine\Persistence\ManagerRegistry; +use Mautic\CoreBundle\Factory\ModelFactory; +use Mautic\CoreBundle\Helper\UserHelper; +use Mautic\CoreBundle\Helper\CoreParametersHelper; +use Mautic\CoreBundle\Service\FlashBag; +use Mautic\CoreBundle\Translation\Translator; +use Symfony\Component\HttpFoundation\RequestStack; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; use Mautic\CoreBundle\Controller\AbstractFormController; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; -use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; -use MauticPlugin\CustomObjectsBundle\Exception\NotFoundException; -use MauticPlugin\CustomObjectsBundle\Form\Type\CustomObjectType; -use MauticPlugin\CustomObjectsBundle\Helper\LockFlashMessageHelper; use MauticPlugin\CustomObjectsBundle\Model\CustomFieldModel; use MauticPlugin\CustomObjectsBundle\Model\CustomObjectModel; +use MauticPlugin\CustomObjectsBundle\Form\Type\CustomObjectType; +use MauticPlugin\CustomObjectsBundle\Exception\NotFoundException; +use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; +use MauticPlugin\CustomObjectsBundle\Helper\LockFlashMessageHelper; use MauticPlugin\CustomObjectsBundle\Provider\CustomFieldTypeProvider; -use MauticPlugin\CustomObjectsBundle\Provider\CustomObjectPermissionProvider; use MauticPlugin\CustomObjectsBundle\Provider\CustomObjectRouteProvider; -use Symfony\Component\Form\FormFactory; -use Symfony\Component\HttpFoundation\Response; +use MauticPlugin\CustomObjectsBundle\Provider\CustomObjectPermissionProvider; class FormController extends AbstractFormController { - /** - * @var FormFactory - */ - private $formFactory; - - /** - * @var CustomObjectModel - */ - private $customObjectModel; - - /** - * @var CustomFieldModel - */ - private $customFieldModel; - - /** - * @var CustomObjectPermissionProvider - */ - private $permissionProvider; - - /** - * @var CustomObjectRouteProvider - */ - private $routeProvider; - - /** - * @var CustomFieldTypeProvider - */ - private $customFieldTypeProvider; - - /** - * @var LockFlashMessageHelper - */ - private $lockFlashMessageHelper; - public function __construct( - FormFactory $formFactory, - CustomObjectModel $customObjectModel, - CustomFieldModel $customFieldModel, - CustomObjectPermissionProvider $permissionProvider, - CustomObjectRouteProvider $routeProvider, - CustomFieldTypeProvider $customFieldTypeProvider, - LockFlashMessageHelper $lockFlashMessageHelper + private FormFactoryInterface $formFactory, + ManagerRegistry $doctrine, + ModelFactory $modelFactory, + UserHelper $userHelper, + CoreParametersHelper $coreParametersHelper, + EventDispatcherInterface $dispatcher, + Translator $translator, + FlashBag $flashBag, + RequestStack $requestStack, + CorePermissions $security, + private CustomObjectPermissionProvider $permissionProvider, + private CustomObjectRouteProvider $routeProvider, + private CustomObjectModel $customObjectModel, + private CustomFieldModel $customFieldModel, + private CustomFieldTypeProvider $customFieldTypeProvider, + private LockFlashMessageHelper $lockFlashMessageHelper, ) { - $this->formFactory = $formFactory; - $this->customObjectModel = $customObjectModel; - $this->customFieldModel = $customFieldModel; - $this->permissionProvider = $permissionProvider; - $this->routeProvider = $routeProvider; - $this->customFieldTypeProvider = $customFieldTypeProvider; - $this->lockFlashMessageHelper = $lockFlashMessageHelper; + parent::__construct($doctrine, $modelFactory, $userHelper, $coreParametersHelper, $dispatcher, $translator, $flashBag, $requestStack, $security); } public function newAction(): Response @@ -82,7 +59,7 @@ public function newAction(): Response return $this->accessDenied(false, $e->getMessage()); } - return $this->renderForm($customObject, $this->routeProvider->buildNewRoute()); + return $this->renderObjectForm($customObject, $this->routeProvider->buildNewRoute()); } public function editAction(int $objectId): Response @@ -109,7 +86,7 @@ public function editAction(int $objectId): Response $this->customObjectModel->lockEntity($customObject); - return $this->renderForm($customObject, $this->routeProvider->buildEditRoute($objectId)); + return $this->renderObjectForm($customObject, $this->routeProvider->buildEditRoute($objectId)); } public function cloneAction(int $objectId): Response @@ -123,10 +100,10 @@ public function cloneAction(int $objectId): Response return $this->accessDenied(false, $e->getMessage()); } - return $this->renderForm($customObject, $this->routeProvider->buildCloneRoute($objectId)); + return $this->renderObjectForm($customObject, $this->routeProvider->buildCloneRoute($objectId)); } - private function renderForm(CustomObject $customObject, string $route): Response + private function renderObjectForm(CustomObject $customObject, string $route): Response { $form = $this->formFactory->create( CustomObjectType::class, @@ -144,7 +121,7 @@ private function renderForm(CustomObject $customObject, string $route): Response 'deletedFields' => [], 'form' => $form->createView(), ], - 'contentTemplate' => 'CustomObjectsBundle:CustomObject:form.html.php', + 'contentTemplate' => '@CustomObjects/CustomObject/form.html.twig', 'passthroughVars' => [ 'mauticContent' => 'customObject', 'route' => $route, diff --git a/Controller/CustomObject/ListController.php b/Controller/CustomObject/ListController.php index ab8af89b5..3b75df82e 100644 --- a/Controller/CustomObject/ListController.php +++ b/Controller/CustomObject/ListController.php @@ -13,48 +13,34 @@ use MauticPlugin\CustomObjectsBundle\Provider\CustomObjectPermissionProvider; use MauticPlugin\CustomObjectsBundle\Provider\CustomObjectRouteProvider; use MauticPlugin\CustomObjectsBundle\Provider\SessionProviderFactory; -use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\Response; - +use Doctrine\Persistence\ManagerRegistry; +use Mautic\CoreBundle\Factory\ModelFactory; +use Mautic\CoreBundle\Helper\UserHelper; +use Mautic\CoreBundle\Helper\CoreParametersHelper; +use Mautic\CoreBundle\Service\FlashBag; +use Mautic\CoreBundle\Translation\Translator; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; +use Symfony\Component\HttpFoundation\RequestStack; class ListController extends CommonController { - /** - * @var RequestStack - */ - private $requestStack; - - /** - * @var SessionProviderFactory - */ - private $sessionProviderFactory; - - /** - * @var CustomObjectModel - */ - private $customObjectModel; - - /** - * @var CustomObjectPermissionProvider - */ - private $permissionProvider; - - /** - * @var CustomObjectRouteProvider - */ - private $routeProvider; - public function __construct( + ManagerRegistry $doctrine, + ModelFactory $modelFactory, + UserHelper $userHelper, + CoreParametersHelper $coreParametersHelper, + EventDispatcherInterface $dispatcher, + Translator $translator, + FlashBag $flashBag, RequestStack $requestStack, - SessionProviderFactory $sessionProviderFactory, - CustomObjectModel $customObjectModel, - CustomObjectPermissionProvider $permissionProvider, - CustomObjectRouteProvider $routeProvider + CorePermissions $security, + private CustomObjectPermissionProvider $permissionProvider, + private CustomObjectRouteProvider $routeProvider, + private CustomObjectModel $customObjectModel, + private SessionProviderFactory $sessionProviderFactory, ) { - $this->requestStack = $requestStack; - $this->sessionProviderFactory = $sessionProviderFactory; - $this->customObjectModel = $customObjectModel; - $this->permissionProvider = $permissionProvider; - $this->routeProvider = $routeProvider; + parent::__construct($doctrine, $modelFactory, $userHelper, $coreParametersHelper, $dispatcher, $translator, $flashBag, $requestStack, $security); } public function listAction(int $page = 1): Response @@ -65,7 +51,7 @@ public function listAction(int $page = 1): Response return $this->accessDenied(false, $e->getMessage()); } - $request = $this->requestStack->getCurrentRequest(); + $request = $this->getCurrentRequest(); $sessionProvider = $this->sessionProviderFactory->createObjectProvider(); $search = InputHelper::clean($request->get('search', $sessionProvider->getFilter())); $limit = (int) $request->get('limit', $sessionProvider->getPageLimit()); @@ -81,6 +67,7 @@ public function listAction(int $page = 1): Response } $tableConfig = new TableConfig($limit, $page, $orderBy, $orderByDir); + $tableConfig->addParameter('search', $search); $sessionProvider->setPage($page); $sessionProvider->setPageLimit($limit); @@ -97,8 +84,10 @@ public function listAction(int $page = 1): Response 'limit' => $limit, 'tmpl' => $request->isXmlHttpRequest() ? $request->get('tmpl', 'index') : 'index', 'sessionVar' => $sessionProvider->getNamespace(), + 'tableAlias' => CustomObject::TABLE_ALIAS, + 'viewRoute' => CustomObjectRouteProvider::ROUTE_VIEW ], - 'contentTemplate' => 'CustomObjectsBundle:CustomObject:list.html.php', + 'contentTemplate' => '@CustomObjects/CustomObject/list.html.twig', 'passthroughVars' => [ 'mauticContent' => 'customObject', 'route' => $route, diff --git a/Controller/CustomObject/SaveController.php b/Controller/CustomObject/SaveController.php index c77f2dd52..893a91633 100644 --- a/Controller/CustomObject/SaveController.php +++ b/Controller/CustomObject/SaveController.php @@ -4,108 +4,57 @@ namespace MauticPlugin\CustomObjectsBundle\Controller\CustomObject; -use Mautic\CoreBundle\Controller\AbstractFormController; use Mautic\CoreBundle\Service\FlashBag; +use Mautic\CoreBundle\Helper\UserHelper; +use Doctrine\Persistence\ManagerRegistry; +use Mautic\CoreBundle\Factory\ModelFactory; +use Mautic\CoreBundle\Translation\Translator; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\Form\FormFactoryInterface; +use Mautic\CoreBundle\Helper\CoreParametersHelper; +use Symfony\Component\HttpFoundation\JsonResponse; +use Symfony\Component\HttpFoundation\RequestStack; +use Mautic\CoreBundle\Controller\AbstractFormController; use MauticPlugin\CustomObjectsBundle\Entity\CustomField; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; -use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; -use MauticPlugin\CustomObjectsBundle\Exception\NotFoundException; -use MauticPlugin\CustomObjectsBundle\Form\DataTransformer\OptionsToStringTransformer; -use MauticPlugin\CustomObjectsBundle\Form\DataTransformer\ParamsToStringTransformer; -use MauticPlugin\CustomObjectsBundle\Form\Type\CustomObjectType; -use MauticPlugin\CustomObjectsBundle\Helper\LockFlashMessageHelper; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; use MauticPlugin\CustomObjectsBundle\Model\CustomFieldModel; use MauticPlugin\CustomObjectsBundle\Model\CustomObjectModel; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use MauticPlugin\CustomObjectsBundle\Form\Type\CustomObjectType; +use MauticPlugin\CustomObjectsBundle\Exception\NotFoundException; +use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; +use MauticPlugin\CustomObjectsBundle\Helper\LockFlashMessageHelper; use MauticPlugin\CustomObjectsBundle\Provider\CustomFieldTypeProvider; -use MauticPlugin\CustomObjectsBundle\Provider\CustomObjectPermissionProvider; use MauticPlugin\CustomObjectsBundle\Provider\CustomObjectRouteProvider; -use Symfony\Component\Form\FormFactoryInterface; -use Symfony\Component\HttpFoundation\JsonResponse; -use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpFoundation\RequestStack; -use Symfony\Component\HttpFoundation\Response; +use MauticPlugin\CustomObjectsBundle\Provider\CustomObjectPermissionProvider; +use MauticPlugin\CustomObjectsBundle\Form\DataTransformer\ParamsToStringTransformer; +use MauticPlugin\CustomObjectsBundle\Form\DataTransformer\OptionsToStringTransformer; class SaveController extends AbstractFormController { - /** - * @var RequestStack - */ - private $requestStack; - - /** - * @var FlashBag - */ - private $flashBag; - - /** - * @var FormFactoryInterface - */ - private $formFactory; - - /** - * @var CustomObjectModel - */ - private $customObjectModel; - - /** - * @var CustomFieldModel - */ - private $customFieldModel; - - /** - * @var CustomObjectPermissionProvider - */ - private $permissionProvider; - - /** - * @var CustomObjectRouteProvider - */ - private $routeProvider; - - /** - * @var CustomFieldTypeProvider - */ - private $customFieldTypeProvider; - - /** - * @var ParamsToStringTransformer - */ - private $paramsToStringTransformer; - - /** - * @var OptionsToStringTransformer - */ - private $optionsToStringTransformer; - - /** - * @var LockFlashMessageHelper - */ - private $lockFlashMessageHelper; - public function __construct( - RequestStack $requestStack, - FlashBag $flashBag, - FormFactoryInterface $formFactory, - CustomObjectModel $customObjectModel, - CustomFieldModel $customFieldModel, - CustomObjectPermissionProvider $permissionProvider, - CustomObjectRouteProvider $routeProvider, - CustomFieldTypeProvider $customFieldTypeProvider, - ParamsToStringTransformer $paramsToStringTransformer, - OptionsToStringTransformer $optionsToStringTransformer, - LockFlashMessageHelper $lockFlashMessageHelper + private FormFactoryInterface $formFactory, + ManagerRegistry $doctrine, + ModelFactory $modelFactory, + UserHelper $userHelper, + CoreParametersHelper $coreParametersHelper, + EventDispatcherInterface $dispatcher, + Translator $translator, + private FlashBag $flashBag, + private RequestStack $requestStack, + CorePermissions $security, + private CustomObjectPermissionProvider $permissionProvider, + private CustomObjectRouteProvider $routeProvider, + private CustomObjectModel $customObjectModel, + private CustomFieldModel $customFieldModel, + private CustomFieldTypeProvider $customFieldTypeProvider, + private LockFlashMessageHelper $lockFlashMessageHelper, + private ParamsToStringTransformer $paramsToStringTransformer, + private OptionsToStringTransformer $optionsToStringTransformer, ) { - $this->requestStack = $requestStack; - $this->flashBag = $flashBag; - $this->formFactory = $formFactory; - $this->customObjectModel = $customObjectModel; - $this->customFieldModel = $customFieldModel; - $this->permissionProvider = $permissionProvider; - $this->routeProvider = $routeProvider; - $this->customFieldTypeProvider = $customFieldTypeProvider; - $this->paramsToStringTransformer = $paramsToStringTransformer; - $this->optionsToStringTransformer = $optionsToStringTransformer; - $this->lockFlashMessageHelper = $lockFlashMessageHelper; + parent::__construct($doctrine, $modelFactory, $userHelper, $coreParametersHelper, $dispatcher, $translator, $flashBag, $requestStack, $security); } public function saveAction(?int $objectId = null): Response @@ -180,7 +129,7 @@ public function saveAction(?int $objectId = null): Response 'deletedFields' => [], 'form' => $form->createView(), ], - 'contentTemplate' => 'CustomObjectsBundle:CustomObject:form.html.php', + 'contentTemplate' => '@CustomObjects/CustomObject/form.html.twig', 'passthroughVars' => [ 'mauticContent' => 'customObject', 'route' => $objectId ? $this->routeProvider->buildEditRoute($customObject->getId()) : $this->routeProvider->buildNewRoute(), @@ -190,7 +139,7 @@ public function saveAction(?int $objectId = null): Response } /** - * @param string[] $rawCustomObject + * @param array $rawCustomObject */ private function handleRawPost(CustomObject $customObject, array $rawCustomObject): void { diff --git a/Controller/CustomObject/ViewController.php b/Controller/CustomObject/ViewController.php index 222e5ee66..e72bf11c6 100644 --- a/Controller/CustomObject/ViewController.php +++ b/Controller/CustomObject/ViewController.php @@ -15,53 +15,33 @@ use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\Response; - +use Doctrine\Persistence\ManagerRegistry; +use Mautic\CoreBundle\Factory\ModelFactory; +use Mautic\CoreBundle\Helper\UserHelper; +use Mautic\CoreBundle\Helper\CoreParametersHelper; +use Mautic\CoreBundle\Service\FlashBag; +use Mautic\CoreBundle\Translation\Translator; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; class ViewController extends CommonController { - /** - * @var RequestStack - */ - private $requestStack; - - /** - * @var FormFactoryInterface - */ - private $formFactory; - - /** - * @var CustomObjectModel - */ - private $customObjectModel; - - /** - * @var AuditLogModel - */ - private $auditLogModel; - - /** - * @var CustomObjectPermissionProvider - */ - private $permissionProvider; - - /** - * @var CustomObjectRouteProvider - */ - private $routeProvider; - public function __construct( - RequestStack $requestStack, - FormFactoryInterface $formFactory, - CustomObjectModel $customObjectModel, - AuditLogModel $auditLogModel, - CustomObjectPermissionProvider $permissionProvider, - CustomObjectRouteProvider $routeProvider + ManagerRegistry $doctrine, + ModelFactory $modelFactory, + UserHelper $userHelper, + CoreParametersHelper $coreParametersHelper, + EventDispatcherInterface $dispatcher, + Translator $translator, + FlashBag $flashBag, + private RequestStack $requestStack, + CorePermissions $security, + private FormFactoryInterface $formFactory, + private CustomObjectModel $customObjectModel, + private AuditLogModel $auditLogModel, + private CustomObjectPermissionProvider $permissionProvider, + private CustomObjectRouteProvider $routeProvider ) { - $this->requestStack = $requestStack; - $this->formFactory = $formFactory; - $this->customObjectModel = $customObjectModel; - $this->auditLogModel = $auditLogModel; - $this->permissionProvider = $permissionProvider; - $this->routeProvider = $routeProvider; + parent::__construct($doctrine, $modelFactory, $userHelper, $coreParametersHelper, $dispatcher, $translator, $flashBag, $requestStack, $security); } public function viewAction(int $objectId): Response @@ -104,7 +84,7 @@ public function viewAction(int $objectId): Response 'stats' => $stats, 'logs' => $auditLogs, ], - 'contentTemplate' => 'CustomObjectsBundle:CustomObject:detail.html.php', + 'contentTemplate' => '@CustomObjects/CustomObject/details.html.twig', 'passthroughVars' => [ 'mauticContent' => 'customObject', 'activeLink' => "#mautic_custom_object_{$objectId}", diff --git a/Controller/JsonController.php b/Controller/JsonController.php index 77a86d128..331f27363 100644 --- a/Controller/JsonController.php +++ b/Controller/JsonController.php @@ -4,10 +4,10 @@ namespace MauticPlugin\CustomObjectsBundle\Controller; -use Symfony\Bundle\FrameworkBundle\Controller\Controller; +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; -class JsonController extends Controller +class JsonController extends AbstractController { /** * Adds flashes stored in session (by addFlash() method) to the JsonResponse. @@ -16,7 +16,7 @@ class JsonController extends Controller */ protected function renderJson(array $responseData = []): JsonResponse { - $responseData['flashes'] = $this->renderView('MauticCoreBundle:Notification:flash_messages.html.php'); + $responseData['flashes'] = $this->renderView('@MauticCore/Notification/flash_messages.html.twig'); return new JsonResponse($responseData); } diff --git a/CustomFieldType/AbstractCustomFieldType.php b/CustomFieldType/AbstractCustomFieldType.php index ff96d4563..999ef5599 100644 --- a/CustomFieldType/AbstractCustomFieldType.php +++ b/CustomFieldType/AbstractCustomFieldType.php @@ -10,7 +10,7 @@ use MauticPlugin\CustomObjectsBundle\Exception\UndefinedTransformerException; use Symfony\Component\Form\DataTransformerInterface; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; abstract class AbstractCustomFieldType implements CustomFieldTypeInterface { @@ -25,7 +25,7 @@ abstract class AbstractCustomFieldType implements CustomFieldTypeInterface protected $formTypeOptions = []; /** - * @var TranslatorInterface + * @var Translator */ protected $translator; @@ -35,7 +35,7 @@ abstract class AbstractCustomFieldType implements CustomFieldTypeInterface protected $filterOperatorProvider; public function __construct( - TranslatorInterface $translator, + Translator $translator, FilterOperatorProviderInterface $filterOperatorProvider ) { $this->translator = $translator; diff --git a/CustomFieldType/AbstractMultivalueType.php b/CustomFieldType/AbstractMultivalueType.php index 9d85c71ab..368a580f8 100644 --- a/CustomFieldType/AbstractMultivalueType.php +++ b/CustomFieldType/AbstractMultivalueType.php @@ -16,7 +16,7 @@ use MauticPlugin\CustomObjectsBundle\Helper\CsvHelper; use Symfony\Component\Form\DataTransformerInterface; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; abstract class AbstractMultivalueType extends AbstractCustomFieldType { @@ -28,7 +28,7 @@ abstract class AbstractMultivalueType extends AbstractCustomFieldType private $csvHelper; public function __construct( - TranslatorInterface $translator, + Translator $translator, FilterOperatorProviderInterface $filterOperatorProvider, CsvHelper $csvHelper ) { diff --git a/CustomFieldType/CustomFieldTypeInterface.php b/CustomFieldType/CustomFieldTypeInterface.php index 8ea9bab39..fe2f19ef0 100644 --- a/CustomFieldType/CustomFieldTypeInterface.php +++ b/CustomFieldType/CustomFieldTypeInterface.php @@ -4,7 +4,6 @@ namespace MauticPlugin\CustomObjectsBundle\CustomFieldType; -use MauticPlugin\CustomObjectsBundle\CustomFieldType\DataTransformer\DateTransformer; use MauticPlugin\CustomObjectsBundle\Entity\CustomField; use MauticPlugin\CustomObjectsBundle\Entity\CustomFieldValueInterface; use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; diff --git a/CustomFieldType/DataTransformer/CsvTransformer.php b/CustomFieldType/DataTransformer/CsvTransformer.php index e0f756f00..0fbce7c16 100644 --- a/CustomFieldType/DataTransformer/CsvTransformer.php +++ b/CustomFieldType/DataTransformer/CsvTransformer.php @@ -22,7 +22,7 @@ public function __construct() /** * {@inheritdoc} */ - public function transform($value) + public function transform(mixed $value): mixed { if (empty($value)) { return ''; @@ -38,7 +38,7 @@ public function transform($value) /** * {@inheritdoc} */ - public function reverseTransform($value) + public function reverseTransform(mixed $value): mixed { if (empty($value)) { return []; diff --git a/CustomFieldType/DataTransformer/DateTimeAtomTransformer.php b/CustomFieldType/DataTransformer/DateTimeAtomTransformer.php index 46028ef57..d5cd2b16b 100644 --- a/CustomFieldType/DataTransformer/DateTimeAtomTransformer.php +++ b/CustomFieldType/DataTransformer/DateTimeAtomTransformer.php @@ -12,7 +12,7 @@ class DateTimeAtomTransformer implements DataTransformerInterface /** * {@inheritdoc} */ - public function transform($value) + public function transform(mixed $value): mixed { if ($value) { return new DateTimeImmutable($value); @@ -24,7 +24,7 @@ public function transform($value) /** * {@inheritdoc} */ - public function reverseTransform($value) + public function reverseTransform(mixed $value): mixed { if (!$value) { return null; diff --git a/CustomFieldType/DataTransformer/DateTimeTransformer.php b/CustomFieldType/DataTransformer/DateTimeTransformer.php index 9bf96fb7c..5583beab7 100644 --- a/CustomFieldType/DataTransformer/DateTimeTransformer.php +++ b/CustomFieldType/DataTransformer/DateTimeTransformer.php @@ -12,7 +12,7 @@ class DateTimeTransformer implements DataTransformerInterface /** * {@inheritdoc} */ - public function transform($value) + public function transform(mixed $value): mixed { if ($value) { return new DateTime($value); @@ -24,7 +24,7 @@ public function transform($value) /** * {@inheritdoc} */ - public function reverseTransform($value) + public function reverseTransform(mixed $value): mixed { if (!$value) { return null; diff --git a/CustomFieldType/DataTransformer/DateTransformer.php b/CustomFieldType/DataTransformer/DateTransformer.php index 19c439503..b5e4c5828 100644 --- a/CustomFieldType/DataTransformer/DateTransformer.php +++ b/CustomFieldType/DataTransformer/DateTransformer.php @@ -12,7 +12,7 @@ class DateTransformer implements DataTransformerInterface /** * {@inheritdoc} */ - public function transform($value) + public function transform(mixed $value): mixed { if ($value) { return new DateTime($value); @@ -24,7 +24,7 @@ public function transform($value) /** * {@inheritdoc} */ - public function reverseTransform($value) + public function reverseTransform(mixed $value): mixed { if (!$value) { return null; diff --git a/CustomFieldType/DataTransformer/MultivalueTransformer.php b/CustomFieldType/DataTransformer/MultivalueTransformer.php index 8ba4a837f..347c6126c 100644 --- a/CustomFieldType/DataTransformer/MultivalueTransformer.php +++ b/CustomFieldType/DataTransformer/MultivalueTransformer.php @@ -11,7 +11,7 @@ class MultivalueTransformer implements DataTransformerInterface /** * {@inheritdoc} */ - public function transform($value) + public function transform(mixed $value): mixed { if ($value) { return json_decode($value); @@ -23,7 +23,7 @@ public function transform($value) /** * {@inheritdoc} */ - public function reverseTransform($value) + public function reverseTransform(mixed $value): mixed { if ($value) { return json_encode($value); diff --git a/CustomFieldType/DataTransformer/ViewDateTransformer.php b/CustomFieldType/DataTransformer/ViewDateTransformer.php index 9d8d91b87..d96d5c056 100644 --- a/CustomFieldType/DataTransformer/ViewDateTransformer.php +++ b/CustomFieldType/DataTransformer/ViewDateTransformer.php @@ -11,7 +11,7 @@ class ViewDateTransformer implements DataTransformerInterface /** * {@inheritdoc} */ - public function transform($value) + public function transform(mixed $value): mixed { if ('' === $value) { return null; @@ -23,7 +23,7 @@ public function transform($value) /** * {@inheritdoc} */ - public function reverseTransform($value) + public function reverseTransform(mixed $value): mixed { if (null === $value) { return ''; diff --git a/CustomFieldType/DateTimeType.php b/CustomFieldType/DateTimeType.php index f0ccbeb92..f510f43ef 100644 --- a/CustomFieldType/DateTimeType.php +++ b/CustomFieldType/DateTimeType.php @@ -37,6 +37,7 @@ class DateTimeType extends AbstractCustomFieldType protected $formTypeOptions = [ 'widget' => 'single_text', 'format' => 'yyyy-MM-dd HH:mm', + 'html5' => false, 'attr' => [ 'data-toggle' => 'datetime', ], diff --git a/CustomObjectsBundle.php b/CustomObjectsBundle.php index 8340a5f79..4d40b59b6 100644 --- a/CustomObjectsBundle.php +++ b/CustomObjectsBundle.php @@ -4,13 +4,12 @@ namespace MauticPlugin\CustomObjectsBundle; -use Doctrine\DBAL\Schema\Schema; -use Mautic\CoreBundle\Factory\MauticFactory; -use Mautic\IntegrationsBundle\Bundle\AbstractPluginBundle; -use MauticPlugin\CustomObjectsBundle\DependencyInjection\Compiler\CustomFieldTypePass; + +use Mautic\PluginBundle\Bundle\PluginBundleBase; use Symfony\Component\DependencyInjection\ContainerBuilder; +use MauticPlugin\CustomObjectsBundle\DependencyInjection\Compiler\CustomFieldTypePass; -class CustomObjectsBundle extends AbstractPluginBundle +class CustomObjectsBundle extends PluginBundleBase { /** * {@inheritdoc} @@ -19,15 +18,4 @@ public function build(ContainerBuilder $container): void { $container->addCompilerPass(new CustomFieldTypePass()); } - - /** - * In some rare cases it can happen that the plugin tables weren't created on plugin install. - * Create them on plugin update if they are missing. - */ - protected static function installAllTablesIfMissing(Schema $schema, string $tablePrefix, MauticFactory $factory, array $metadata = null): void - { - if (!$schema->hasTable($tablePrefix.'custom_object')) { - self::installPluginSchema($metadata, $factory, null); - } - } } diff --git a/DataPersister/CustomItemDataPersister.php b/DataPersister/CustomItemDataPersister.php index 12941f1f2..049f0418a 100644 --- a/DataPersister/CustomItemDataPersister.php +++ b/DataPersister/CustomItemDataPersister.php @@ -2,11 +2,10 @@ namespace MauticPlugin\CustomObjectsBundle\DataPersister; -use ApiPlatform\Core\DataPersister\DataPersisterInterface; use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; use MauticPlugin\CustomObjectsBundle\Model\CustomItemModel; -final class CustomItemDataPersister implements DataPersisterInterface +final class CustomItemDataPersister { private CustomItemModel $customItemModel; diff --git a/DependencyInjection/CustomObjectsExtension.php b/DependencyInjection/CustomObjectsExtension.php new file mode 100644 index 000000000..d634df0bf --- /dev/null +++ b/DependencyInjection/CustomObjectsExtension.php @@ -0,0 +1,24 @@ +load('services.php'); + } +} + + diff --git a/Entity/CustomField.php b/Entity/CustomField.php index d49bbef0f..7b2e818e5 100644 --- a/Entity/CustomField.php +++ b/Entity/CustomField.php @@ -8,11 +8,8 @@ use ApiPlatform\Core\Annotation\ApiProperty; use ApiPlatform\Core\Annotation\ApiResource; use ApiPlatform\Core\Annotation\ApiSubresource; -use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; -use Doctrine\DBAL\Types\Type; -use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping\JoinColumn; use Doctrine\ORM\Mapping\ManyToOne; @@ -28,12 +25,12 @@ use MauticPlugin\CustomObjectsBundle\Exception\NotFoundException; use MauticPlugin\CustomObjectsBundle\Exception\UndefinedTransformerException; use MauticPlugin\CustomObjectsBundle\Form\Validator\Constraints\AllowUniqueIdentifier; -use MauticPlugin\CustomObjectsBundle\Repository\CustomFieldRepository; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Serializer\Annotation\Groups; use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Context\ExecutionContextInterface; use Symfony\Component\Validator\Mapping\ClassMetadata; +use MauticPlugin\CustomObjectsBundle\Repository\CustomFieldRepository; /** * @ApiResource( @@ -220,7 +217,7 @@ public function __clone() $this->alias = null; } - public function __toString() + public function __toString(): string { return $this->getLabel(); } @@ -255,20 +252,20 @@ public static function loadMetadata(ORM\ClassMetadata $metadata): void ->build(); $builder->addId(); - $builder->addField('label', Type::STRING); - $builder->addField('alias', Type::STRING); - $builder->addField('type', Type::STRING); + $builder->addField('label', 'string'); + $builder->addField('alias', 'string'); + $builder->addField('type', 'string'); $builder->createField('order', 'integer') ->columnName('field_order') ->nullable() ->build(); - $builder->createField('required', Type::BOOLEAN) + $builder->createField('required', 'boolean') ->columnName('required') ->option('default', false) ->build(); - $builder->createField('defaultValue', Type::STRING) + $builder->createField('defaultValue', 'string') ->columnName('default_value') ->nullable() ->build(); @@ -280,22 +277,22 @@ public static function loadMetadata(ORM\ClassMetadata $metadata): void ->fetchExtraLazy() ->build(); - $builder->createField('params', Type::JSON_ARRAY) + $builder->createField('params', 'array') ->columnName('params') ->nullable() ->build(); - $builder->createField('showInCustomObjectDetailList', Type::BOOLEAN) + $builder->createField('showInCustomObjectDetailList', 'boolean') ->columnName('show_in_custom_object_detail_list') ->option('default', true) ->build(); - $builder->createField('showInContactDetailList', Type::BOOLEAN) + $builder->createField('showInContactDetailList', 'boolean') ->columnName('show_in_contact_detail_list') ->option('default', true) ->build(); - $builder->createField('isUniqueIdentifier', Types::BOOLEAN) + $builder->createField('isUniqueIdentifier', 'boolean') ->columnName('is_unique_identifier') ->option('default', false) ->build(); @@ -306,12 +303,12 @@ public static function loadMetadata(ORM\ClassMetadata $metadata): void public static function loadValidatorMetadata(ClassMetadata $metadata): void { $metadata->addPropertyConstraint('label', new Assert\NotBlank()); - $metadata->addPropertyConstraint('label', new Assert\Length(['max' => 255])); - $metadata->addPropertyConstraint('alias', new Assert\Length(['max' => 255])); + $metadata->addPropertyConstraint('label', new Assert\Length(null, null, 255)); + $metadata->addPropertyConstraint('alias', new Assert\Length(null, null, 255)); $metadata->addPropertyConstraint('type', new Assert\NotBlank()); - $metadata->addPropertyConstraint('type', new Assert\Length(['max' => 255])); + $metadata->addPropertyConstraint('type', new Assert\Length(null, null, 255)); $metadata->addPropertyConstraint('customObject', new Assert\NotBlank()); - $metadata->addPropertyConstraint('defaultValue', new Assert\Length(['max' => 255])); + $metadata->addPropertyConstraint('defaultValue', new Assert\Length(null, null, 255)); $metadata->addConstraint(new Assert\Callback('validateDefaultValue')); $metadata->addConstraint(new AllowUniqueIdentifier()); } diff --git a/Entity/CustomFieldOption.php b/Entity/CustomFieldOption.php index f1073d4ad..5c8637495 100644 --- a/Entity/CustomFieldOption.php +++ b/Entity/CustomFieldOption.php @@ -5,9 +5,7 @@ namespace MauticPlugin\CustomObjectsBundle\Entity; use ApiPlatform\Core\Annotation\ApiResource; -use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping as ORM; -use Doctrine\ORM\Mapping\Column; use Doctrine\ORM\Mapping\Id; use Doctrine\ORM\Mapping\JoinColumn; use Doctrine\ORM\Mapping\ManyToOne; @@ -99,11 +97,11 @@ public static function loadMetadata(ORM\ClassMetadata $metadata): void ->makePrimaryKey() ->build(); - $builder->createField('value', Type::STRING) + $builder->createField('value', 'string') ->makePrimaryKey() ->build(); - $builder->addField('label', Type::STRING); + $builder->addField('label', 'string'); $builder->createField('order', 'integer') ->columnName('option_order') @@ -115,9 +113,9 @@ public static function loadMetadata(ORM\ClassMetadata $metadata): void public static function loadValidatorMetadata(ClassMetadata $metadata): void { $metadata->addPropertyConstraint('label', new Assert\NotBlank()); - $metadata->addPropertyConstraint('label', new Assert\Length(['max' => 255])); + $metadata->addPropertyConstraint('label', new Assert\Length(null, null, 255)); $metadata->addPropertyConstraint('value', new Assert\NotNull()); - $metadata->addPropertyConstraint('value', new Assert\Length(['max' => 255])); + $metadata->addPropertyConstraint('value', new Assert\Length(null, null, 255)); $metadata->addPropertyConstraint('order', new Assert\NotNull()); } @@ -176,7 +174,7 @@ public function offsetExists($offset): bool * * @return mixed */ - public function offsetGet($offset) + public function offsetGet($offset): mixed { return $this->offsetExists($offset) ? $this->{$offset} : null; } diff --git a/Entity/CustomFieldValueDate.php b/Entity/CustomFieldValueDate.php index 844d45074..09ac8035e 100644 --- a/Entity/CustomFieldValueDate.php +++ b/Entity/CustomFieldValueDate.php @@ -5,7 +5,6 @@ namespace MauticPlugin\CustomObjectsBundle\Entity; use DateTimeInterface; -use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping as ORM; use Mautic\CoreBundle\Doctrine\Mapping\ClassMetadataBuilder; @@ -28,7 +27,7 @@ public static function loadMetadata(ORM\ClassMetadata $metadata): void $builder = new ClassMetadataBuilder($metadata); $builder->setTable('custom_field_value_date'); $builder->addIndex(['value'], 'value_index'); - $builder->addNullableField('value', Type::DATE); + $builder->addNullableField('value', 'date'); parent::addReferenceColumns($builder); } diff --git a/Entity/CustomFieldValueDateTime.php b/Entity/CustomFieldValueDateTime.php index f696ff2f5..e18a85722 100644 --- a/Entity/CustomFieldValueDateTime.php +++ b/Entity/CustomFieldValueDateTime.php @@ -5,7 +5,6 @@ namespace MauticPlugin\CustomObjectsBundle\Entity; use DateTimeInterface; -use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping as ORM; use Mautic\CoreBundle\Doctrine\Mapping\ClassMetadataBuilder; @@ -28,7 +27,7 @@ public static function loadMetadata(ORM\ClassMetadata $metadata): void $builder = new ClassMetadataBuilder($metadata); $builder->setTable('custom_field_value_datetime'); $builder->addIndex(['value'], 'value_index'); - $builder->addNullableField('value', Type::DATETIME); + $builder->addNullableField('value', 'datetime'); parent::addReferenceColumns($builder); } diff --git a/Entity/CustomFieldValueInt.php b/Entity/CustomFieldValueInt.php index d1378cf84..535b6148b 100644 --- a/Entity/CustomFieldValueInt.php +++ b/Entity/CustomFieldValueInt.php @@ -4,7 +4,6 @@ namespace MauticPlugin\CustomObjectsBundle\Entity; -use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping as ORM; use Mautic\CoreBundle\Doctrine\Mapping\ClassMetadataBuilder; @@ -27,7 +26,7 @@ public static function loadMetadata(ORM\ClassMetadata $metadata): void $builder = new ClassMetadataBuilder($metadata); $builder->setTable('custom_field_value_int'); $builder->addIndex(['value'], 'value_index'); - $builder->addNullableField('value', Type::INTEGER); + $builder->addNullableField('value', 'integer'); parent::addReferenceColumns($builder); } diff --git a/Entity/CustomFieldValueText.php b/Entity/CustomFieldValueText.php index 30082eab5..c09b40f0b 100644 --- a/Entity/CustomFieldValueText.php +++ b/Entity/CustomFieldValueText.php @@ -4,7 +4,6 @@ namespace MauticPlugin\CustomObjectsBundle\Entity; -use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping as ORM; use Mautic\CoreBundle\Doctrine\Mapping\ClassMetadataBuilder; @@ -30,7 +29,7 @@ public static function loadMetadata(ORM\ClassMetadata $metadata): void { $builder = new ClassMetadataBuilder($metadata); $builder->setTable('custom_field_value_text') - ->addNullableField('value', Type::TEXT) + ->addNullableField('value', 'text') ->addFulltextIndex(['value'], 'value_fulltext'); parent::addReferenceColumns($builder); diff --git a/Entity/CustomItem.php b/Entity/CustomItem.php index 549117951..c3d2527f9 100644 --- a/Entity/CustomItem.php +++ b/Entity/CustomItem.php @@ -8,7 +8,6 @@ use ApiPlatform\Core\Annotation\ApiResource; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; -use Doctrine\DBAL\Types\Type; use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping\JoinColumn; @@ -225,14 +224,14 @@ public static function loadMetadata(ORM\ClassMetadata $metadata): void $builder->addBigIntIdField(); $builder->addCategory(); - $builder->addField('name', Type::STRING); - $builder->addNullableField('language', Type::STRING, 'lang'); + $builder->addField('name', 'string'); + $builder->addNullableField('language', 'string', 'lang'); } public static function loadValidatorMetadata(ClassMetadata $metadata): void { $metadata->addPropertyConstraint('name', new Assert\NotBlank()); - $metadata->addPropertyConstraint('name', new Assert\Length(['max' => 255])); + $metadata->addPropertyConstraint('name', new Assert\Length(null, null, 255)); } /** diff --git a/Entity/CustomItemXrefCompany.php b/Entity/CustomItemXrefCompany.php index 659f0b267..8b6e30772 100644 --- a/Entity/CustomItemXrefCompany.php +++ b/Entity/CustomItemXrefCompany.php @@ -7,7 +7,6 @@ use DateTimeImmutable; use DateTimeInterface; use DateTimeZone; -use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping as ORM; use Mautic\CoreBundle\Doctrine\Mapping\ClassMetadataBuilder; use Mautic\LeadBundle\Entity\Company; @@ -58,7 +57,7 @@ public static function loadMetadata(ORM\ClassMetadata $metadata): void ->fetchExtraLazy() ->build(); - $builder->createField('dateAdded', Type::DATETIME) + $builder->createField('dateAdded', 'datetime') ->columnName('date_added') ->build(); } diff --git a/Entity/CustomItemXrefContact.php b/Entity/CustomItemXrefContact.php index 6f6b88a71..2e6624283 100644 --- a/Entity/CustomItemXrefContact.php +++ b/Entity/CustomItemXrefContact.php @@ -7,7 +7,6 @@ use DateTimeImmutable; use DateTimeInterface; use DateTimeZone; -use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping as ORM; use Mautic\CoreBundle\Doctrine\Mapping\ClassMetadataBuilder; use Mautic\LeadBundle\Entity\Lead; @@ -60,7 +59,7 @@ public static function loadMetadata(ORM\ClassMetadata $metadata): void ->fetchExtraLazy() ->build(); - $builder->createField('dateAdded', Type::DATETIME) + $builder->createField('dateAdded', 'datetime') ->columnName('date_added') ->build(); } diff --git a/Entity/CustomItemXrefCustomItem.php b/Entity/CustomItemXrefCustomItem.php index c447ca596..94b597e6c 100644 --- a/Entity/CustomItemXrefCustomItem.php +++ b/Entity/CustomItemXrefCustomItem.php @@ -7,7 +7,6 @@ use DateTimeImmutable; use DateTimeInterface; use DateTimeZone; -use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping as ORM; use Mautic\CoreBundle\Doctrine\Mapping\ClassMetadataBuilder; use MauticPlugin\CustomObjectsBundle\Repository\CustomItemXrefCustomItemRepository; @@ -80,7 +79,7 @@ public static function loadMetadata(ORM\ClassMetadata $metadata): void ->fetchExtraLazy() ->build(); - $builder->createField('dateAdded', Type::DATETIME) + $builder->createField('dateAdded', 'datetime') ->columnName('date_added') ->build(); } diff --git a/Entity/CustomObject.php b/Entity/CustomObject.php index f98e5f5b5..a16cfb662 100644 --- a/Entity/CustomObject.php +++ b/Entity/CustomObject.php @@ -8,7 +8,6 @@ use ApiPlatform\Core\Annotation\ApiResource; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; -use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping\JoinColumn; use Doctrine\ORM\Mapping\OneToOne; @@ -164,12 +163,12 @@ public static function loadMetadata(ORM\ClassMetadata $metadata): void $builder->addId(); $builder->addCategory(); - $builder->addField('alias', Type::STRING); - $builder->addNamedField('nameSingular', Type::STRING, 'name_singular'); - $builder->addNamedField('namePlural', Type::STRING, 'name_plural'); - $builder->addNullableField('description', Type::STRING, 'description'); - $builder->addNullableField('language', Type::STRING, 'lang'); - $builder->addNullableField('type', Type::INTEGER); + $builder->addField('alias', 'string'); + $builder->addNamedField('nameSingular', 'string', 'name_singular'); + $builder->addNamedField('namePlural', 'string', 'name_plural'); + $builder->addNullableField('description', 'string', 'description'); + $builder->addNullableField('language', 'string', 'lang'); + $builder->addNullableField('type', 'integer'); $builder->createOneToOne('relationshipObject', CustomObject::class) ->addJoinColumn('relationship_object', 'id', true, false, 'SET NULL') @@ -183,12 +182,12 @@ public static function loadMetadata(ORM\ClassMetadata $metadata): void public static function loadValidatorMetadata(ClassMetadata $metadata): void { - $metadata->addPropertyConstraint('alias', new Assert\Length(['max' => 255])); + $metadata->addPropertyConstraint('alias', new Assert\Length(null, null, 255)); $metadata->addPropertyConstraint('nameSingular', new Assert\NotBlank()); - $metadata->addPropertyConstraint('nameSingular', new Assert\Length(['max' => 255])); + $metadata->addPropertyConstraint('nameSingular', new Assert\Length(null, null, 255)); $metadata->addPropertyConstraint('namePlural', new Assert\NotBlank()); - $metadata->addPropertyConstraint('namePlural', new Assert\Length(['max' => 255])); - $metadata->addPropertyConstraint('description', new Assert\Length(['max' => 255])); + $metadata->addPropertyConstraint('namePlural', new Assert\Length(null, null, 255)); + $metadata->addPropertyConstraint('description', new Assert\Length(null, null, 255)); $metadata->addConstraint(new CustomObjectTypeValues()); } @@ -389,7 +388,7 @@ public function getCustomFieldByOrder($order) } } - throw new NotFoundException("Custom field with order index '${order}' not found."); + throw new NotFoundException("Custom field with order index '{$order}' not found."); } public function getPublishedFields(): Collection diff --git a/Event/CustomItemEvent.php b/Event/CustomItemEvent.php index 152ff9ee6..b4517156f 100644 --- a/Event/CustomItemEvent.php +++ b/Event/CustomItemEvent.php @@ -5,7 +5,7 @@ namespace MauticPlugin\CustomObjectsBundle\Event; use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; -use Symfony\Component\EventDispatcher\Event; +use Symfony\Contracts\EventDispatcher\Event; class CustomItemEvent extends Event { diff --git a/Event/CustomItemExportSchedulerEvent.php b/Event/CustomItemExportSchedulerEvent.php index d2164e986..9d8bb1965 100644 --- a/Event/CustomItemExportSchedulerEvent.php +++ b/Event/CustomItemExportSchedulerEvent.php @@ -5,7 +5,7 @@ namespace MauticPlugin\CustomObjectsBundle\Event; use MauticPlugin\CustomObjectsBundle\Entity\CustomItemExportScheduler; -use Symfony\Component\EventDispatcher\Event; +use Symfony\Contracts\EventDispatcher\Event; class CustomItemExportSchedulerEvent extends Event { diff --git a/Event/CustomItemListDbalQueryEvent.php b/Event/CustomItemListDbalQueryEvent.php index 02c74d38c..d715593d7 100644 --- a/Event/CustomItemListDbalQueryEvent.php +++ b/Event/CustomItemListDbalQueryEvent.php @@ -6,7 +6,7 @@ use Doctrine\DBAL\Query\QueryBuilder; use MauticPlugin\CustomObjectsBundle\DTO\TableConfig; -use Symfony\Component\EventDispatcher\Event; +use Symfony\Contracts\EventDispatcher\Event; class CustomItemListDbalQueryEvent extends Event { diff --git a/Event/CustomItemListQueryEvent.php b/Event/CustomItemListQueryEvent.php index fb6943993..24fe391ba 100644 --- a/Event/CustomItemListQueryEvent.php +++ b/Event/CustomItemListQueryEvent.php @@ -6,7 +6,7 @@ use Doctrine\ORM\QueryBuilder; use MauticPlugin\CustomObjectsBundle\DTO\TableConfig; -use Symfony\Component\EventDispatcher\Event; +use Symfony\Contracts\EventDispatcher\Event; class CustomItemListQueryEvent extends Event { diff --git a/Event/CustomItemXrefEntityDiscoveryEvent.php b/Event/CustomItemXrefEntityDiscoveryEvent.php index b55024fb5..ab5b8eee8 100644 --- a/Event/CustomItemXrefEntityDiscoveryEvent.php +++ b/Event/CustomItemXrefEntityDiscoveryEvent.php @@ -6,7 +6,7 @@ use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; use MauticPlugin\CustomObjectsBundle\Entity\CustomItemXrefInterface; -use Symfony\Component\EventDispatcher\Event; +use Symfony\Contracts\EventDispatcher\Event; class CustomItemXrefEntityDiscoveryEvent extends Event { diff --git a/Event/CustomItemXrefEntityEvent.php b/Event/CustomItemXrefEntityEvent.php index 3981c9fb4..d2a120d29 100644 --- a/Event/CustomItemXrefEntityEvent.php +++ b/Event/CustomItemXrefEntityEvent.php @@ -5,7 +5,7 @@ namespace MauticPlugin\CustomObjectsBundle\Event; use MauticPlugin\CustomObjectsBundle\Entity\CustomItemXrefInterface; -use Symfony\Component\EventDispatcher\Event; +use Symfony\Contracts\EventDispatcher\Event; class CustomItemXrefEntityEvent extends Event { diff --git a/Event/CustomObjectEvent.php b/Event/CustomObjectEvent.php index d37f1e43d..1ef4dae23 100644 --- a/Event/CustomObjectEvent.php +++ b/Event/CustomObjectEvent.php @@ -6,7 +6,7 @@ use Mautic\CoreBundle\Service\FlashBag; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; -use Symfony\Component\EventDispatcher\Event; +use Symfony\Contracts\EventDispatcher\Event; class CustomObjectEvent extends Event { diff --git a/Event/CustomObjectListFormatEvent.php b/Event/CustomObjectListFormatEvent.php index 257c95941..f034bce6d 100644 --- a/Event/CustomObjectListFormatEvent.php +++ b/Event/CustomObjectListFormatEvent.php @@ -4,7 +4,7 @@ namespace MauticPlugin\CustomObjectsBundle\Event; -use Symfony\Component\EventDispatcher\Event; +use Symfony\Contracts\EventDispatcher\Event; class CustomObjectListFormatEvent extends Event { diff --git a/EventListener/AssetsSubscriber.php b/EventListener/AssetsSubscriber.php index 997431a27..6f2a0b52a 100644 --- a/EventListener/AssetsSubscriber.php +++ b/EventListener/AssetsSubscriber.php @@ -4,12 +4,12 @@ namespace MauticPlugin\CustomObjectsBundle\EventListener; -use Mautic\CoreBundle\Templating\Helper\AssetsHelper; -use MauticPlugin\CustomObjectsBundle\Provider\ConfigProvider; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpKernel\Event\GetResponseEvent; use Symfony\Component\HttpKernel\KernelEvents; +use Mautic\CoreBundle\Twig\Helper\AssetsHelper; +use Symfony\Component\HttpKernel\Event\RequestEvent; +use MauticPlugin\CustomObjectsBundle\Provider\ConfigProvider; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; class AssetsSubscriber implements EventSubscriberInterface { @@ -41,9 +41,9 @@ public static function getSubscribedEvents(): array ]; } - public function loadAssets(GetResponseEvent $event): void + public function loadAssets(RequestEvent $event): void { - if ($this->configProvider->pluginIsEnabled() && $event->isMasterRequest() && $this->isMauticAdministrationPage($event->getRequest())) { + if ($this->configProvider->pluginIsEnabled() && $event->isMainrequest() && $this->isMauticAdministrationPage($event->getRequest())) { $this->assetHelper->addScript('plugins/CustomObjectsBundle/Assets/js/custom-objects.js'); $this->assetHelper->addScript('plugins/CustomObjectsBundle/Assets/js/co-form.js'); $this->assetHelper->addStylesheet('plugins/CustomObjectsBundle/Assets/css/custom-objects.css'); diff --git a/EventListener/CampaignSubscriber.php b/EventListener/CampaignSubscriber.php index 822dfb572..580138e6b 100644 --- a/EventListener/CampaignSubscriber.php +++ b/EventListener/CampaignSubscriber.php @@ -5,7 +5,6 @@ namespace MauticPlugin\CustomObjectsBundle\EventListener; use Doctrine\DBAL\Connection; -use Doctrine\DBAL\DBALException; use Doctrine\DBAL\Query\QueryBuilder; use Mautic\CampaignBundle\CampaignEvents; use Mautic\CampaignBundle\Event\CampaignBuilderEvent; @@ -31,7 +30,7 @@ use MauticPlugin\CustomObjectsBundle\Segment\Query\Filter\QueryFilterFactory; use MauticPlugin\CustomObjectsBundle\Segment\Query\UnionQueryContainer; use Symfony\Component\EventDispatcher\EventSubscriberInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class CampaignSubscriber implements EventSubscriberInterface { @@ -39,7 +38,7 @@ class CampaignSubscriber implements EventSubscriberInterface use QueryBuilderManipulatorTrait; /** - * @var TranslatorInterface + * @var Translator */ private $translator; @@ -82,7 +81,7 @@ public function __construct( CustomFieldModel $customFieldModel, CustomObjectModel $customObjectModel, CustomItemModel $customItemModel, - TranslatorInterface $translator, + Translator $translator, ConfigProvider $configProvider, QueryFilterHelper $queryFilterHelper, QueryFilterFactory $queryFilterFactory, @@ -140,8 +139,8 @@ public function onCampaignBuild(CampaignBuilderEvent $event): void 'description' => $this->translator->trans('custom.item.events.field.value_descr', ['%customObject%' => $customObject->getNameSingular()]), 'eventName' => CustomItemEvents::ON_CAMPAIGN_TRIGGER_CONDITION, 'formType' => CampaignConditionFieldValueType::class, - 'formTheme' => 'CustomObjectsBundle:FormTheme\FieldValueCondition', - 'formTypeOptions' => ['customObject' => $customObject], + 'formTheme' => '@CustomObjects/FormTheme/FieldValueCondition/_campaignevent_custom_item_field_value_widget.html.twig', + 'formTypeOptions' => ['customObject' => $customObject] ]); } } @@ -157,32 +156,44 @@ public function onCampaignTriggerAction(CampaignExecutionEvent $event): void } $eventConfig = $event->getConfig(); - $linkCustomItemId = (int) ArrayHelper::getValue('linkCustomItemId', $eventConfig); - $unlinkCustomItemId = (int) ArrayHelper::getValue('unlinkCustomItemId', $eventConfig); + $linkCustomItemIds = ArrayHelper::getValue('linkCustomItemName', $eventConfig); + $unlinkCustomItemIds = ArrayHelper::getValue('unlinkCustomItemName', $eventConfig); $contactId = (int) $event->getLead()->getId(); - if ($linkCustomItemId) { + $linkCustomItemIds = (!is_null($linkCustomItemIds) && !empty(trim($linkCustomItemIds))) ? explode(',', $linkCustomItemIds) : []; + $unlinkCustomItemIds = (!is_null($unlinkCustomItemIds) && !empty(trim($unlinkCustomItemIds))) ? explode(',', $unlinkCustomItemIds) : []; + + /** + * @var int[] $linkCustomItemIds + * User can provide a comma separated list of custom item IDs to link to the contact. + */ + foreach ($linkCustomItemIds as $linkCustomItemId) { try { - $customItem = $this->customItemModel->fetchEntity($linkCustomItemId); + $customItem = $this->customItemModel->fetchEntity((int) $linkCustomItemId); $this->customItemModel->linkEntity($customItem, 'contact', $contactId); } catch (NotFoundException $e) { // Do nothing if the custom item doesn't exist anymore. + continue; } } - if ($unlinkCustomItemId) { + /** + * @var int[] $unlinkCustomItemIds + * User can provide a comma separated list of custom item IDs to unlink from the contact. + */ + foreach ($unlinkCustomItemIds as $unlinkCustomItemId) { try { - $customItem = $this->customItemModel->fetchEntity($unlinkCustomItemId); + $customItem = $this->customItemModel->fetchEntity((int) $unlinkCustomItemId); $this->customItemModel->unlinkEntity($customItem, 'contact', $contactId); } catch (NotFoundException $e) { // Do nothing if the custom item doesn't exist anymore. + continue; } } } /** * @throws NotFoundException - * @throws DBALException * @throws InvalidArgumentException * @throws InvalidSegmentFilterException */ @@ -228,7 +239,7 @@ public function onCampaignTriggerCondition(CampaignExecutionEvent $event): void $queryBuilder = $this->buildOuterQuery($innerQueryBuilder, $queryAlias); - $customItemId = $this->executeSelect($queryBuilder)->fetchColumn(); + $customItemId = $this->executeSelect($queryBuilder)->fetchOne(); if ($customItemId) { $event->setChannel('customItem', $customItemId); diff --git a/EventListener/ContactSubscriber.php b/EventListener/ContactSubscriber.php index 16354e9d6..70dfb3470 100644 --- a/EventListener/ContactSubscriber.php +++ b/EventListener/ContactSubscriber.php @@ -17,12 +17,12 @@ use MauticPlugin\CustomObjectsBundle\Provider\CustomItemRouteProvider; use MauticPlugin\CustomObjectsBundle\Repository\CustomItemXrefContactRepository; use Symfony\Component\EventDispatcher\EventSubscriberInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class ContactSubscriber implements EventSubscriberInterface { /** - * @var TranslatorInterface + * @var Translator */ private $translator; @@ -53,7 +53,7 @@ class ContactSubscriber implements EventSubscriberInterface public function __construct( EntityManager $entityManager, - TranslatorInterface $translator, + Translator $translator, CustomItemRouteProvider $routeProvider, CustomItemModel $customItemModel, ConfigProvider $configProvider, @@ -181,13 +181,14 @@ private function addLinkTimelineEntry(LeadTimelineEvent $event, string $eventTyp } catch (NotFoundException $e) { $eventLabel = $this->translator->trans("custom.item.{$action}.event.not.found", ['%customItemId%' => $link['object_id']]); } + $actionIcon = $action === 'link' ? 'ri-link' : 'ri-link-unlink'; $event->addEvent([ 'event' => $eventTypeKey, 'eventId' => $eventTypeKey.'.'.$link['id'], 'eventType' => $eventTypeName, 'eventLabel' => $eventLabel, 'timestamp' => $link['date_added'], - 'icon' => "fa-{$action}", + 'icon' => $actionIcon, 'extra' => $link, 'contactId' => $link['lead_id'], 'contentTemplate' => 'CustomObjectsBundle:SubscribedEvents\Timeline:link.html.php', diff --git a/EventListener/ContactTabSubscriber.php b/EventListener/ContactTabSubscriber.php index 70ec02190..5d0039ae1 100644 --- a/EventListener/ContactTabSubscriber.php +++ b/EventListener/ContactTabSubscriber.php @@ -14,12 +14,12 @@ use MauticPlugin\CustomObjectsBundle\Provider\SessionProviderFactory; use MauticPlugin\CustomObjectsBundle\Repository\CustomItemRepository; use Symfony\Component\EventDispatcher\EventSubscriberInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class ContactTabSubscriber implements EventSubscriberInterface { /** - * @var TranslatorInterface + * @var Translator */ private $translator; @@ -57,7 +57,7 @@ public function __construct( CustomObjectModel $customObjectModel, CustomItemRepository $customItemRepository, ConfigProvider $configProvider, - TranslatorInterface $translator, + Translator $translator, CustomItemRouteProvider $customItemRouteProvider, SessionProviderFactory $sessionProviderFactory ) { @@ -85,7 +85,7 @@ public function injectTabs(CustomContentEvent $event): void return; } - if ($event->checkContext('MauticLeadBundle:Lead:lead.html.php', 'tabs')) { + if ($event->checkContext('@MauticLead/Lead/lead.html.twig', 'tabs')) { $vars = $event->getVars(); $objects = $this->customObjectModel->getMasterCustomObjects(); @@ -100,13 +100,13 @@ public function injectTabs(CustomContentEvent $event): void 'tabId' => "custom-object-{$object->getId()}", ]; - $event->addTemplate('CustomObjectsBundle:SubscribedEvents/Tab:link.html.php', $data); + $event->addTemplate('@CustomObjects/SubscribedEvents/Tab/link.html.twig', $data); } - $event->addTemplate('CustomObjectsBundle:SubscribedEvents/Tab:modal.html.php'); + $event->addTemplate('@CustomObjects/SubscribedEvents/Tab/modal.html.twig'); } - if ($event->checkContext('MauticLeadBundle:Lead:lead.html.php', 'tabs.content')) { + if ($event->checkContext('@MauticLead/Lead/lead.html.twig', 'tabs.content')) { $vars = $event->getVars(); $objects = $this->getCustomObjects(); @@ -133,7 +133,7 @@ public function injectTabs(CustomContentEvent $event): void 'namespace' => $sessionProvider->getNamespace(), ]; - $event->addTemplate('CustomObjectsBundle:SubscribedEvents/Tab:content.html.php', $data); + $event->addTemplate('@CustomObjects/SubscribedEvents/Tab/content.html.twig', $data); } } } diff --git a/EventListener/CustomItemButtonSubscriber.php b/EventListener/CustomItemButtonSubscriber.php index 5b2fdb61e..24d762e6e 100644 --- a/EventListener/CustomItemButtonSubscriber.php +++ b/EventListener/CustomItemButtonSubscriber.php @@ -6,18 +6,18 @@ use Mautic\CoreBundle\CoreEvents; use Mautic\CoreBundle\Event\CustomButtonEvent; -use Mautic\CoreBundle\Templating\Helper\ButtonHelper; +use Mautic\CoreBundle\Twig\Helper\ButtonHelper; use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; use MauticPlugin\CustomObjectsBundle\Provider\CustomItemPermissionProvider; use MauticPlugin\CustomObjectsBundle\Provider\CustomItemRouteProvider; use Symfony\Component\EventDispatcher\EventSubscriberInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class CustomItemButtonSubscriber implements EventSubscriberInterface { /** - * @var TranslatorInterface + * @var Translator */ private $translator; @@ -34,7 +34,7 @@ class CustomItemButtonSubscriber implements EventSubscriberInterface public function __construct( CustomItemPermissionProvider $permissionProvider, CustomItemRouteProvider $routeProvider, - TranslatorInterface $translator + Translator $translator ) { $this->permissionProvider = $permissionProvider; $this->routeProvider = $routeProvider; @@ -108,7 +108,7 @@ public function injectViewButtons(CustomButtonEvent $event): void ); $event->addButton( $this->defineBatchDeleteButton($customObjectId), - ButtonHelper::LOCATION_BULK_ACTIONS, + ButtonHelper::LOCATION_TOOLBAR_BULK_ACTIONS, $event->getRoute() ); } @@ -120,11 +120,6 @@ public function injectViewButtons(CustomButtonEvent $event): void case CustomItemRouteProvider::ROUTE_VIEW: $customObjectId = $this->getCustomObjectIdFromEvent($event); $this->addEntityButtons($event, ButtonHelper::LOCATION_PAGE_ACTIONS, $customObjectId); - $event->addButton( - $this->defineCloseButton($customObjectId), - ButtonHelper::LOCATION_PAGE_ACTIONS, - $event->getRoute() - ); break; } @@ -163,9 +158,10 @@ private function defineEditButton(int $customObjectId, CustomItem $customItem): return [ 'attr' => [ 'href' => $this->routeProvider->buildEditRoute($customObjectId, $customItem->getId()), + 'class' => 'btn btn-primary', ], 'btnText' => 'mautic.core.form.edit', - 'iconClass' => 'fa fa-pencil-square-o', + 'iconClass' => 'ri-edit-line', 'priority' => 500, ]; } @@ -188,7 +184,7 @@ private function defineEditLinkFormButton(CustomItem $customItem, int $customObj 'data-custom-object-id' => $customObjectId, ], 'btnText' => 'mautic.core.form.edit', - 'iconClass' => 'fa fa-pencil-square-o', + 'iconClass' => 'ri-edit-line', 'priority' => 500, ]; } @@ -203,7 +199,7 @@ private function defineCloseButton(int $customObjectId): array 'href' => $this->routeProvider->buildListRoute($customObjectId), ], 'btnText' => 'mautic.core.form.close', - 'iconClass' => 'fa fa-fw fa-remove', + 'iconClass' => 'ri-close-line', 'priority' => 400, ]; } @@ -222,7 +218,7 @@ private function defineCloneButton(int $customObjectId, CustomItem $customItem): 'href' => $this->routeProvider->buildCloneRoute($customObjectId, $customItem->getId()), ], 'btnText' => 'mautic.core.form.clone', - 'iconClass' => 'fa fa-copy', + 'iconClass' => 'ri-file-copy-line', 'priority' => 300, ]; } @@ -247,7 +243,7 @@ private function defineDeleteButton(int $customObjectId, CustomItem $customItem) 'data-cancel-callback' => 'dismissConfirmation', ], 'btnText' => 'mautic.core.form.delete', - 'iconClass' => 'fa fa-fw fa-trash-o text-danger', + 'iconClass' => 'ri-delete-bin-line', 'priority' => 0, ]; } @@ -264,9 +260,10 @@ private function defineNewButton(int $customObjectId): array return [ 'attr' => [ 'href' => $this->routeProvider->buildNewRoute($customObjectId), + 'class' => 'btn btn-primary', ], 'btnText' => 'mautic.core.form.new', - 'iconClass' => 'fa fa-plus', + 'iconClass' => 'ri-add-line', 'priority' => 500, ]; } @@ -295,12 +292,12 @@ private function defineLinkButton(int $customObjectId, CustomItem $customItem, s return [ 'attr' => [ 'href' => '#', - 'onclick' => "CustomObjects.linkCustomItemWithEntity(this, event, ${customObjectId}, '${entityType}', ${entityId}, 'custom-object-${customObjectId}', ".($relationshipObjectId ?: 'null').');', + 'onclick' => "CustomObjects.linkCustomItemWithEntity(this, event, {$customObjectId}, '{$entityType}', {$entityId}, 'custom-object-{$customObjectId}', ".($relationshipObjectId ?: 'null').');', 'data-action' => $action, 'data-toggle' => '', ], 'btnText' => $this->translator->trans('custom.item.link'), - 'iconClass' => 'fa fa-link', + 'iconClass' => 'ri-link', 'priority' => 500, ]; } @@ -317,12 +314,12 @@ private function defineUnlinkButton(int $customObjectId, int $customItemId, stri return [ 'attr' => [ 'href' => '#', - 'onclick' => "CustomObjects.unlinkCustomItemFromEntity(this, event, ${customObjectId}, '${entityType}', ${entityId}, 'custom-object-${customObjectId}');", + 'onclick' => "CustomObjects.unlinkCustomItemFromEntity(this, event, {$customObjectId}, '{$entityType}', {$entityId}, 'custom-object-{$customObjectId}');", 'data-action' => $this->routeProvider->buildUnlinkRoute($customItemId, $entityType, $entityId), 'data-toggle' => '', ], 'btnText' => $this->translator->trans('custom.item.unlink'), - 'iconClass' => 'fa fa-unlink', + 'iconClass' => 'ri-link-unlink', 'priority' => 500, ]; } @@ -341,7 +338,7 @@ private function defineImportNewButton(int $customObjectId): array 'href' => $this->routeProvider->buildNewImportRoute($customObjectId), ], 'btnText' => 'mautic.lead.import', - 'iconClass' => 'fa fa-upload', + 'iconClass' => 'ri-upload-line', 'priority' => 350, ]; } @@ -360,7 +357,7 @@ private function defineImportListButton(int $customObjectId): array 'href' => $this->routeProvider->buildListImportRoute($customObjectId), ], 'btnText' => 'mautic.lead.lead.import.index', - 'iconClass' => 'fa fa-history', + 'iconClass' => 'ri-history-line', 'priority' => 300, ]; } @@ -380,7 +377,7 @@ private function defineExportButton(int $customObjectId): array 'data-method' => 'POST', ], 'btnText' => 'custom.item.export', - 'iconClass' => 'fa fa-file-text-o', + 'iconClass' => 'ri-file-text-line', 'priority' => 250, ]; } @@ -399,8 +396,7 @@ private function defineBatchDeleteButton(int $customObjectId): array 'template' => 'batchdelete', ], 'btnText' => 'mautic.core.form.delete', - 'iconClass' => 'fa fa-fw fa-trash-o text-danger', - 'priority' => 0, + 'iconClass' => 'ri-delete-bin-line', ]; } diff --git a/EventListener/CustomItemTabSubscriber.php b/EventListener/CustomItemTabSubscriber.php index b80a5feb0..fd969587a 100644 --- a/EventListener/CustomItemTabSubscriber.php +++ b/EventListener/CustomItemTabSubscriber.php @@ -13,12 +13,12 @@ use MauticPlugin\CustomObjectsBundle\Provider\SessionProviderFactory; use MauticPlugin\CustomObjectsBundle\Repository\CustomItemRepository; use Symfony\Component\EventDispatcher\EventSubscriberInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class CustomItemTabSubscriber implements EventSubscriberInterface { /** - * @var TranslatorInterface + * @var Translator */ private $translator; @@ -50,7 +50,7 @@ class CustomItemTabSubscriber implements EventSubscriberInterface public function __construct( CustomObjectModel $customObjectModel, CustomItemRepository $customItemRepository, - TranslatorInterface $translator, + Translator $translator, CustomItemRouteProvider $customItemRouteProvider, SessionProviderFactory $sessionProviderFactory ) { @@ -73,7 +73,7 @@ public static function getSubscribedEvents(): array public function injectTabs(CustomContentEvent $event): void { - if ($event->checkContext('CustomObjectsBundle:CustomItem:detail.html.php', 'tabs')) { + if ($event->checkContext('@CustomObjects/CustomItem/details.html.twig', 'tabs')) { $vars = $event->getVars(); $objects = $this->customObjectModel->getMasterCustomObjects(); @@ -92,13 +92,13 @@ public function injectTabs(CustomContentEvent $event): void 'tabId' => "custom-object-{$object->getId()}", ]; - $event->addTemplate('CustomObjectsBundle:SubscribedEvents/Tab:link.html.php', $data); + $event->addTemplate('@CustomObjects/SubscribedEvents/Tab/link.html.twig', $data); } - $event->addTemplate('CustomObjectsBundle:SubscribedEvents/Tab:modal.html.php'); + $event->addTemplate('@CustomObjects/SubscribedEvents/Tab/modal.html.twig'); } - if ($event->checkContext('CustomObjectsBundle:CustomItem:detail.html.php', 'tabs.content')) { + if ($event->checkContext('@CustomObjects/CustomItem/details.html.twig', 'tabs.content')) { $vars = $event->getVars(); $objects = $this->getCustomObjects(); @@ -129,7 +129,7 @@ public function injectTabs(CustomContentEvent $event): void 'namespace' => $sessionProvider->getNamespace(), ]; - $event->addTemplate('CustomObjectsBundle:SubscribedEvents/Tab:content.html.php', $data); + $event->addTemplate('@CustomObjects/SubscribedEvents/Tab/content.html.twig', $data); } } } diff --git a/EventListener/CustomObjectButtonSubscriber.php b/EventListener/CustomObjectButtonSubscriber.php index 63d801a70..9de3d73ad 100644 --- a/EventListener/CustomObjectButtonSubscriber.php +++ b/EventListener/CustomObjectButtonSubscriber.php @@ -6,7 +6,8 @@ use Mautic\CoreBundle\CoreEvents; use Mautic\CoreBundle\Event\CustomButtonEvent; -use Mautic\CoreBundle\Templating\Helper\ButtonHelper; +use Mautic\CoreBundle\Twig\Helper\ButtonHelper; +use Mautic\CoreBundle\Translation\Translator; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; use MauticPlugin\CustomObjectsBundle\Provider\CustomItemPermissionProvider; @@ -14,7 +15,6 @@ use MauticPlugin\CustomObjectsBundle\Provider\CustomObjectPermissionProvider; use MauticPlugin\CustomObjectsBundle\Provider\CustomObjectRouteProvider; use Symfony\Component\EventDispatcher\EventSubscriberInterface; -use Symfony\Component\Translation\TranslatorInterface; class CustomObjectButtonSubscriber implements EventSubscriberInterface { @@ -39,7 +39,7 @@ class CustomObjectButtonSubscriber implements EventSubscriberInterface private $customItemRouteProvider; /** - * @var TranslatorInterface + * @var Translator */ private $translator; @@ -48,7 +48,7 @@ public function __construct( CustomObjectRouteProvider $routeProvider, CustomItemPermissionProvider $customItemPermissionProvider, CustomItemRouteProvider $customItemRouteProvider, - TranslatorInterface $translator + Translator $translator ) { $this->permissionProvider = $permissionProvider; $this->routeProvider = $routeProvider; @@ -82,7 +82,7 @@ public function injectViewButtons(CustomButtonEvent $event): void case CustomObjectRouteProvider::ROUTE_VIEW: $this->addEntityButtons($event, ButtonHelper::LOCATION_PAGE_ACTIONS); - $event->addButton($this->defineCloseButton(), ButtonHelper::LOCATION_PAGE_ACTIONS, $event->getRoute()); + // $event->addButton($this->defineCloseButton(), ButtonHelper::LOCATION_PAGE_ACTIONS, $event->getRoute()); $customObject = $event->getItem(); @@ -135,9 +135,10 @@ private function defineEditButton(CustomObject $entity): array return [ 'attr' => [ 'href' => $this->routeProvider->buildEditRoute($entity->getId()), + 'class' => 'btn btn-primary', ], 'btnText' => 'mautic.core.form.edit', - 'iconClass' => 'fa fa-pencil-square-o', + 'iconClass' => 'ri-edit-line', 'priority' => 500, ]; } @@ -171,7 +172,7 @@ private function defineCloneButton(CustomObject $entity): array 'href' => $this->routeProvider->buildCloneRoute($entity->getId()), ], 'btnText' => 'mautic.core.form.clone', - 'iconClass' => 'fa fa-copy', + 'iconClass' => 'ri-file-copy-line', 'priority' => 300, ]; } @@ -196,7 +197,7 @@ private function defineDeleteButton(CustomObject $entity): array 'data-cancel-callback' => 'dismissConfirmation', ], 'btnText' => 'mautic.core.form.delete', - 'iconClass' => 'fa fa-fw fa-trash-o text-danger', + 'iconClass' => 'ri-delete-bin-line', 'priority' => 0, ]; } @@ -213,9 +214,10 @@ private function defineNewButton(): array return [ 'attr' => [ 'href' => $this->routeProvider->buildNewRoute(), + 'class' => 'btn btn-primary', ], 'btnText' => 'mautic.core.form.new', - 'iconClass' => 'fa fa-plus', + 'iconClass' => 'ri-add-line', 'priority' => 500, ]; } @@ -234,7 +236,7 @@ private function defineViewCustomItemsButton(CustomObject $customObject): array 'href' => $this->customItemRouteProvider->buildListRoute($customObject->getId()), ], 'btnText' => 'custom.items.view.link', - 'iconClass' => 'fa fa-fw fa-list-alt', + 'iconClass' => 'ri-list-unordered', 'priority' => 0, ]; } @@ -253,7 +255,7 @@ private function defineCreateNewCustomItemButton(CustomObject $customObject): ar 'href' => $this->customItemRouteProvider->buildNewRoute($customObject->getId()), ], 'btnText' => 'custom.item.create.link', - 'iconClass' => 'fa fa-fw fa-plus', + 'iconClass' => 'ri-add-line', 'priority' => 0, ]; } diff --git a/EventListener/CustomObjectPreDeleteSubscriber.php b/EventListener/CustomObjectPreDeleteSubscriber.php index 75df9122a..7f31578c5 100644 --- a/EventListener/CustomObjectPreDeleteSubscriber.php +++ b/EventListener/CustomObjectPreDeleteSubscriber.php @@ -8,7 +8,7 @@ use MauticPlugin\CustomObjectsBundle\Event\CustomObjectEvent; use MauticPlugin\CustomObjectsBundle\Model\CustomObjectModel; use Symfony\Component\EventDispatcher\EventSubscriberInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class CustomObjectPreDeleteSubscriber implements EventSubscriberInterface { @@ -18,11 +18,11 @@ class CustomObjectPreDeleteSubscriber implements EventSubscriberInterface private $customObjectModel; /** - * @var TranslatorInterface + * @var Translator */ private $translator; - public function __construct(CustomObjectModel $customObjectModel, TranslatorInterface $translator) + public function __construct(CustomObjectModel $customObjectModel, Translator $translator) { $this->customObjectModel = $customObjectModel; $this->translator = $translator; diff --git a/EventListener/ImportSubscriber.php b/EventListener/ImportSubscriber.php index 84044c8d3..55061bdcd 100644 --- a/EventListener/ImportSubscriber.php +++ b/EventListener/ImportSubscriber.php @@ -4,31 +4,32 @@ namespace MauticPlugin\CustomObjectsBundle\EventListener; +use Symfony\Component\Form\Form; +use Mautic\LeadBundle\LeadEvents; +use Symfony\Component\Form\FormError; use Mautic\CoreBundle\Helper\ArrayHelper; use Mautic\LeadBundle\Event\ImportInitEvent; +use Mautic\CoreBundle\Translation\Translator; use Mautic\LeadBundle\Event\ImportMappingEvent; use Mautic\LeadBundle\Event\ImportProcessEvent; use Mautic\LeadBundle\Event\ImportValidateEvent; -use Mautic\LeadBundle\LeadEvents; use MauticPlugin\CustomObjectsBundle\DTO\ImportLogDTO; use MauticPlugin\CustomObjectsBundle\Entity\CustomField; -use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; -use MauticPlugin\CustomObjectsBundle\Exception\NotFoundException; -use MauticPlugin\CustomObjectsBundle\Model\CustomItemImportModel; use MauticPlugin\CustomObjectsBundle\Model\CustomObjectModel; use MauticPlugin\CustomObjectsBundle\Provider\ConfigProvider; -use MauticPlugin\CustomObjectsBundle\Provider\CustomItemPermissionProvider; -use MauticPlugin\CustomObjectsBundle\Provider\CustomItemRouteProvider; -use MauticPlugin\CustomObjectsBundle\Repository\CustomFieldRepository; use Symfony\Component\EventDispatcher\EventSubscriberInterface; -use Symfony\Component\Form\Form; -use Symfony\Component\Form\FormError; -use Symfony\Component\Translation\TranslatorInterface; +use MauticPlugin\CustomObjectsBundle\Exception\NotFoundException; +use MauticPlugin\CustomObjectsBundle\Model\CustomItemImportModel; +use MauticPlugin\CustomObjectsBundle\Repository\CustomFieldRepository; +use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; +use MauticPlugin\CustomObjectsBundle\Provider\CustomItemRouteProvider; +use MauticPlugin\CustomObjectsBundle\Provider\CustomItemPermissionProvider; +use MauticPlugin\CustomObjectsBundle\Provider\CustomObjectPermissionProvider; class ImportSubscriber implements EventSubscriberInterface { /** - * @var TranslatorInterface + * @var Translator */ private $translator; @@ -50,25 +51,32 @@ class ImportSubscriber implements EventSubscriberInterface /** * @var CustomItemPermissionProvider */ - private $permissionProvider; + private $customItemPermissionProvider; /** * @var CustomFieldRepository */ private $customFieldRepository; + /** + * @var CustomObjectPermissionProvider + */ + private $customObjectPermissionProvider; + public function __construct( CustomObjectModel $customObjectModel, CustomItemImportModel $customItemImportModel, ConfigProvider $configProvider, - CustomItemPermissionProvider $permissionProvider, + CustomItemPermissionProvider $customItemPermissionProvider, + CustomObjectPermissionProvider $customObjectPermissionProvider, CustomFieldRepository $customFieldRepository, - TranslatorInterface $translator + Translator $translator ) { $this->customObjectModel = $customObjectModel; $this->customItemImportModel = $customItemImportModel; $this->configProvider = $configProvider; - $this->permissionProvider = $permissionProvider; + $this->customItemPermissionProvider = $customItemPermissionProvider; + $this->customObjectPermissionProvider = $customObjectPermissionProvider; $this->customFieldRepository = $customFieldRepository; $this->translator = $translator; } @@ -94,7 +102,7 @@ public function onImportInit(ImportInitEvent $event): void try { $customObjectId = $this->getCustomObjectId($event->routeObjectName); - $this->permissionProvider->canCreate($customObjectId); + $this->customItemPermissionProvider->canCreate($customObjectId); $customObject = $this->customObjectModel->fetchEntity($customObjectId); $event->objectSupported = true; $event->objectSingular = $event->routeObjectName; @@ -114,7 +122,7 @@ public function onFieldMapping(ImportMappingEvent $event): void try { $customObjectId = $this->getCustomObjectId($event->routeObjectName); - $this->permissionProvider->canCreate($customObjectId); + $this->customItemPermissionProvider->canCreate($customObjectId); $customObject = $this->customObjectModel->fetchEntity($customObjectId); $customFields = $customObject->getCustomFields(); $specialFields = [ @@ -154,6 +162,9 @@ public function onValidateImport(ImportValidateEvent $event): void $form = $event->getForm(); $matchedFields = $form->getData(); + $skipIfExists = ArrayHelper::pickValue('skip_if_exists', $matchedFields, false); + $event->setSkipIfExists((bool) $skipIfExists); + $event->setOwnerId($this->handleValidateOwner($matchedFields)); $matchedFields = array_map(function ($value) { @@ -186,15 +197,12 @@ public function onImportProcess(ImportProcessEvent $event): void try { $customObjectId = $this->getCustomObjectId($event->import->getObject()); - $this->permissionProvider->canCreate($customObjectId); + $this->customItemPermissionProvider->canCreate($customObjectId); $customObject = $this->customObjectModel->fetchEntity($customObjectId); $importLogDto = new ImportLogDTO(); $merged = $this->customItemImportModel->import($event->import, $event->rowData, $customObject, $importLogDto); $event->setWasMerged($merged); - - if ($importLogDto->hasWarning()) { - $event->addWarning($importLogDto->getWarningsAsString()); - } + } catch (NotFoundException $e) { // Not a Custom Object import or the custom object doesn't exist anymore. Move on. } @@ -234,7 +242,7 @@ private function handleValidateRequired(Form $form, int $customObjectId, array $ $requiredFields = $this->customFieldRepository->getRequiredCustomFieldsForCustomObject($customObjectId); $missingRequiredFields = $requiredFields->filter(function (CustomField $customField) use ($matchedFields) { - return !array_key_exists($customField->getAlias(), $matchedFields); + return !in_array($customField->getId(), array_values($matchedFields)); })->map(function (CustomField $customField) { return "{$customField->getLabel()} ({$customField->getAlias()})"; }); diff --git a/EventListener/MenuSubscriber.php b/EventListener/MenuSubscriber.php index 83ee2bb5c..d2aa885f3 100644 --- a/EventListener/MenuSubscriber.php +++ b/EventListener/MenuSubscriber.php @@ -67,7 +67,7 @@ private function addMainMenuItems(MenuEvent $event): void 'items' => [ 'custom.object.title' => [ 'access' => 'custom_objects:custom_objects:view', - 'iconClass' => 'fa-list-alt', + 'iconClass' => 'ri-list-check-2', 'id' => 'mautic_custom_object_list', ], ], @@ -101,7 +101,7 @@ private function addAdminMenuItems(MenuEvent $event): void 'id' => CustomObjectRouteProvider::ROUTE_LIST, 'route' => CustomObjectRouteProvider::ROUTE_LIST, 'access' => 'custom_objects:custom_objects:view', - 'iconClass' => 'fa-list-alt', + 'iconClass' => 'ri-list-check-2', ], ], ] diff --git a/EventListener/ReportSubscriber.php b/EventListener/ReportSubscriber.php index 49bf3b71c..d1e4c3002 100644 --- a/EventListener/ReportSubscriber.php +++ b/EventListener/ReportSubscriber.php @@ -18,7 +18,7 @@ use MauticPlugin\CustomObjectsBundle\Report\ReportColumnsBuilder; use MauticPlugin\CustomObjectsBundle\Repository\CustomObjectRepository; use Symfony\Component\EventDispatcher\EventSubscriberInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class ReportSubscriber implements EventSubscriberInterface { @@ -61,11 +61,11 @@ class ReportSubscriber implements EventSubscriberInterface private $reportHelper; /** - * @var TranslatorInterface + * @var Translator */ private $translator; - public function __construct(CustomObjectRepository $customObjectRepository, FieldsBuilder $fieldsBuilder, CompanyReportData $companyReportData, ReportHelper $reportHelper, TranslatorInterface $translator) + public function __construct(CustomObjectRepository $customObjectRepository, FieldsBuilder $fieldsBuilder, CompanyReportData $companyReportData, ReportHelper $reportHelper, Translator $translator) { $this->customObjectRepository = $customObjectRepository; $this->fieldsBuilder = $fieldsBuilder; diff --git a/EventListener/SegmentFiltersChoicesGenerateSubscriber.php b/EventListener/SegmentFiltersChoicesGenerateSubscriber.php index 830d9b53b..1cb678d66 100644 --- a/EventListener/SegmentFiltersChoicesGenerateSubscriber.php +++ b/EventListener/SegmentFiltersChoicesGenerateSubscriber.php @@ -16,7 +16,7 @@ use MauticPlugin\CustomObjectsBundle\Provider\CustomFieldTypeProvider; use MauticPlugin\CustomObjectsBundle\Repository\CustomObjectRepository; use Symfony\Component\EventDispatcher\EventSubscriberInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class SegmentFiltersChoicesGenerateSubscriber implements EventSubscriberInterface { @@ -28,7 +28,7 @@ class SegmentFiltersChoicesGenerateSubscriber implements EventSubscriberInterfac private $customObjectRepository; /** - * @var TranslatorInterface + * @var Translator */ private $translator; @@ -46,7 +46,7 @@ class SegmentFiltersChoicesGenerateSubscriber implements EventSubscriberInterfac public function __construct( CustomObjectRepository $customObjectRepository, - TranslatorInterface $translator, + Translator $translator, ConfigProvider $configProvider, CustomFieldTypeProvider $fieldTypeProvider, TypeOperatorProviderInterface $typeOperatorProvider diff --git a/EventListener/SegmentFiltersDictionarySubscriber.php b/EventListener/SegmentFiltersDictionarySubscriber.php index ca660d9f0..883686248 100644 --- a/EventListener/SegmentFiltersDictionarySubscriber.php +++ b/EventListener/SegmentFiltersDictionarySubscriber.php @@ -47,7 +47,6 @@ public static function getSubscribedEvents(): array } /** - * @throws \Doctrine\DBAL\DBALException */ public function onGenerateSegmentDictionary(SegmentDictionaryGenerationEvent $event): void { @@ -66,7 +65,7 @@ public function onGenerateSegmentDictionary(SegmentDictionaryGenerationEvent $ev ->leftJoin('o', MAUTIC_TABLE_PREFIX.'custom_field', 'f', 'f.custom_object_id = o.id'); $registeredObjects = []; - $fields = $this->executeSelect($queryBuilder)->fetchAll(); + $fields = $this->executeSelect($queryBuilder)->fetchAllAssociative(); $isCustomObjectMergeFilterEnabled = $this->configProvider->isCustomObjectMergeFilterEnabled(); $cmoType = CustomItemNameFilterQueryBuilder::getServiceId(); $cmfType = CustomFieldFilterQueryBuilder::getServiceId(); diff --git a/EventListener/TokenSubscriber.php b/EventListener/TokenSubscriber.php index 1a5d1b705..d8d979436 100644 --- a/EventListener/TokenSubscriber.php +++ b/EventListener/TokenSubscriber.php @@ -185,8 +185,8 @@ public function decodeTokens(EmailSendEvent $event): void $formatEvent = new CustomObjectListFormatEvent($fieldValues, $token->getFormat()); $this->eventDispatcher->dispatch( - CustomObjectEvents::ON_CUSTOM_OBJECT_LIST_FORMAT, - $formatEvent + $formatEvent, + CustomObjectEvents::ON_CUSTOM_OBJECT_LIST_FORMAT ); $result = $formatEvent->hasBeenFormatted() ? diff --git a/Form/DataTransformer/CustomObjectHiddenTransformer.php b/Form/DataTransformer/CustomObjectHiddenTransformer.php index 26b0d798e..33fb9acc3 100644 --- a/Form/DataTransformer/CustomObjectHiddenTransformer.php +++ b/Form/DataTransformer/CustomObjectHiddenTransformer.php @@ -24,7 +24,7 @@ public function __construct(CustomObjectRepository $customObjectRepository) /** * {@inheritdoc} */ - public function transform($value) + public function transform(mixed $value): mixed { if (!$value) { return ''; @@ -36,7 +36,7 @@ public function transform($value) /** * {@inheritdoc} */ - public function reverseTransform($value) + public function reverseTransform(mixed $value): mixed { if (!$value) { return new CustomObject(); diff --git a/Form/Type/CampaignActionLinkType.php b/Form/Type/CampaignActionLinkType.php index 30890daf3..74dd1e6f4 100644 --- a/Form/Type/CampaignActionLinkType.php +++ b/Form/Type/CampaignActionLinkType.php @@ -10,7 +10,7 @@ use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class CampaignActionLinkType extends AbstractType { @@ -20,11 +20,11 @@ class CampaignActionLinkType extends AbstractType protected $routeProvider; /** - * @var TranslatorInterface + * @var Translator */ protected $translator; - public function __construct(CustomItemRouteProvider $routeProvider, TranslatorInterface $translator) + public function __construct(CustomItemRouteProvider $routeProvider, Translator $translator) { $this->routeProvider = $routeProvider; $this->translator = $translator; diff --git a/Form/Type/CampaignConditionFieldValueType.php b/Form/Type/CampaignConditionFieldValueType.php index 06d02d4cb..d3b0f2f89 100644 --- a/Form/Type/CampaignConditionFieldValueType.php +++ b/Form/Type/CampaignConditionFieldValueType.php @@ -12,7 +12,7 @@ use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class CampaignConditionFieldValueType extends AbstractType { @@ -27,14 +27,14 @@ class CampaignConditionFieldValueType extends AbstractType protected $routeProvider; /** - * @var TranslatorInterface + * @var Translator */ protected $translator; public function __construct( CustomFieldModel $customFieldModel, CustomItemRouteProvider $routeProvider, - TranslatorInterface $translator + Translator $translator ) { $this->customFieldModel = $customFieldModel; $this->routeProvider = $routeProvider; diff --git a/Form/Type/CustomField/OptionsType.php b/Form/Type/CustomField/OptionsType.php index f8b8b043c..546c6442a 100644 --- a/Form/Type/CustomField/OptionsType.php +++ b/Form/Type/CustomField/OptionsType.php @@ -4,13 +4,13 @@ namespace MauticPlugin\CustomObjectsBundle\Form\Type\CustomField; -use Mautic\CoreBundle\Form\Type\SortableValueLabelListType; -use MauticPlugin\CustomObjectsBundle\Form\DataTransformer\OptionsTransformer; +use Symfony\Component\Form\FormView; use Symfony\Component\Form\AbstractType; -use Symfony\Component\Form\Extension\Core\Type\CollectionType; -use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormInterface; -use Symfony\Component\Form\FormView; +use Symfony\Component\Form\FormBuilderInterface; +use Mautic\CoreBundle\Form\Type\SortableValueLabelListType; +use Symfony\Component\Form\Extension\Core\Type\CollectionType; +use MauticPlugin\CustomObjectsBundle\Form\DataTransformer\OptionsTransformer; class OptionsType extends AbstractType { @@ -31,11 +31,11 @@ public function buildForm(FormBuilderInterface $builder, array $options): void 'required' => false, 'attr' => [ 'class' => 'form-control', - 'preaddon' => 'fa fa-times', + 'preaddon' => 'ri-close-line', 'preaddon_attr' => [ 'onclick' => 'Mautic.removeFormListOption(this);', ], - 'postaddon' => 'fa fa-ellipsis-v handle', + 'postaddon' => 'ri-draggable handle', ], 'error_bubbling' => true, ], diff --git a/Form/Type/CustomFieldType.php b/Form/Type/CustomFieldType.php index 1731b1e5d..99e4a8f8c 100644 --- a/Form/Type/CustomFieldType.php +++ b/Form/Type/CustomFieldType.php @@ -256,7 +256,6 @@ private function buildModalFormFields(FormBuilderInterface $builder, array $opti FormButtonsType::class, [ 'apply_text' => '', - 'cancel_onclick' => "mQuery('form[name=custom_field]').attr('method', 'get').attr('action', mQuery('form[name=custom_field]').attr('action').replace('/save', '/cancel'));", ] ); diff --git a/Form/Validator/Constraints/CustomObjectTypeValues.php b/Form/Validator/Constraints/CustomObjectTypeValues.php index f05070a59..9f7d84b99 100644 --- a/Form/Validator/Constraints/CustomObjectTypeValues.php +++ b/Form/Validator/Constraints/CustomObjectTypeValues.php @@ -10,12 +10,12 @@ class CustomObjectTypeValues extends Constraint { public $missingMasterObject = "Objects of type 'Relationship' must select a master object."; - public function validatedBy() + public function validatedBy(): string { return CustomObjectTypeValuesValidator::class; } - public function getTargets() + public function getTargets(): string|array { return self::CLASS_CONSTRAINT; } diff --git a/Helper/LockFlashMessageHelper.php b/Helper/LockFlashMessageHelper.php index 6962791ff..048d377f1 100644 --- a/Helper/LockFlashMessageHelper.php +++ b/Helper/LockFlashMessageHelper.php @@ -4,10 +4,10 @@ namespace MauticPlugin\CustomObjectsBundle\Helper; -use Mautic\CoreBundle\Helper\CoreParametersHelper; -use Mautic\CoreBundle\Service\FlashBag; use Symfony\Component\Routing\Router; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Service\FlashBag; +use Mautic\CoreBundle\Translation\Translator; +use Mautic\CoreBundle\Helper\CoreParametersHelper; class LockFlashMessageHelper { @@ -17,7 +17,7 @@ class LockFlashMessageHelper private $coreParametersHelper; /** - * @var TranslatorInterface + * @var Translator */ private $translator; @@ -33,7 +33,7 @@ class LockFlashMessageHelper public function __construct( CoreParametersHelper $coreParametersHelper, - TranslatorInterface $translator, + Translator $translator, FlashBag $flashBag, Router $router ) { diff --git a/Helper/QueryFilterHelper.php b/Helper/QueryFilterHelper.php index d73ab0bc6..d472b5b6e 100644 --- a/Helper/QueryFilterHelper.php +++ b/Helper/QueryFilterHelper.php @@ -215,13 +215,13 @@ private function getCustomValueValueExpression( case 'multiselect': $expression = $customQuery->expr()->in( $tableAlias.'_value.value', - ":${valueParameter}" + ":{$valueParameter}" ); break; case 'neq': $expression = $customQuery->expr()->orX( - $customQuery->expr()->neq($tableAlias.'_value.value', ":${valueParameter}"), + $customQuery->expr()->neq($tableAlias.'_value.value', ":{$valueParameter}"), $customQuery->expr()->isNull($tableAlias.'_value.value') ); @@ -233,7 +233,7 @@ private function getCustomValueValueExpression( case 'notLike': $expression = $customQuery->expr()->orX( $customQuery->expr()->isNull($tableAlias.'_value.value'), - $customQuery->expr()->like($tableAlias.'_value.value', ":${valueParameter}") + $customQuery->expr()->like($tableAlias.'_value.value', ":{$valueParameter}") ); break; @@ -253,7 +253,7 @@ private function getCustomValueValueExpression( default: $expression = $customQuery->expr()->{$operator}( $tableAlias.'_value.value', - ":${valueParameter}" + ":{$valueParameter}" ); } @@ -290,13 +290,13 @@ private function getCustomObjectNameExpression( case 'in': $expression = $customQuery->expr()->in( $tableAlias.'_item.name', - ":${valueParameter}" + ":{$valueParameter}" ); break; case 'neq': $expression = $customQuery->expr()->orX( - $customQuery->expr()->eq($tableAlias.'_item.name', ":${valueParameter}"), + $customQuery->expr()->eq($tableAlias.'_item.name', ":{$valueParameter}"), $customQuery->expr()->isNull($tableAlias.'_item.name') ); @@ -304,14 +304,14 @@ private function getCustomObjectNameExpression( case 'notLike': $expression = $customQuery->expr()->orX( $customQuery->expr()->isNull($tableAlias.'_item.name'), - $customQuery->expr()->like($tableAlias.'_item.name', ":${valueParameter}") + $customQuery->expr()->like($tableAlias.'_item.name', ":{$valueParameter}") ); break; default: $expression = $customQuery->expr()->{$operator}( $tableAlias.'_item.name', - ":${valueParameter}" + ":{$valueParameter}" ); } diff --git a/Model/CustomFieldModel.php b/Model/CustomFieldModel.php index 960cf3ed0..c7d4b92ab 100644 --- a/Model/CustomFieldModel.php +++ b/Model/CustomFieldModel.php @@ -4,17 +4,24 @@ namespace MauticPlugin\CustomObjectsBundle\Model; +use Psr\Log\LoggerInterface; +use Doctrine\ORM\EntityManager; +use Mautic\CoreBundle\Model\FormModel; +use Mautic\CoreBundle\Helper\UserHelper; use Doctrine\ORM\Tools\Pagination\Paginator; -use Mautic\CoreBundle\Entity\CommonRepository; use Mautic\CoreBundle\Helper\DateTimeHelper; -use Mautic\CoreBundle\Helper\UserHelper; -use Mautic\CoreBundle\Model\FormModel; +use Mautic\CoreBundle\Translation\Translator; +use Mautic\CoreBundle\Entity\CommonRepository; +use Mautic\CoreBundle\Helper\CoreParametersHelper; use MauticPlugin\CustomObjectsBundle\Entity\CustomField; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; -use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; +use Symfony\Component\Routing\Generator\UrlGeneratorInterface; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use MauticPlugin\CustomObjectsBundle\Exception\NotFoundException; -use MauticPlugin\CustomObjectsBundle\Provider\CustomFieldPermissionProvider; +use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; use MauticPlugin\CustomObjectsBundle\Repository\CustomFieldRepository; +use MauticPlugin\CustomObjectsBundle\Provider\CustomFieldPermissionProvider; class CustomFieldModel extends FormModel { @@ -31,11 +38,19 @@ class CustomFieldModel extends FormModel public function __construct( CustomFieldRepository $customFieldRepository, CustomFieldPermissionProvider $permissionProvider, - UserHelper $userHelper + UserHelper $userHelper, + EntityManager $entityManager, + CorePermissions $security, + EventDispatcherInterface $dispatcher, + UrlGeneratorInterface $router, + Translator $translator, + LoggerInterface $mauticLogger, + CoreParametersHelper $coreParametersHelper, ) { $this->customFieldRepository = $customFieldRepository; $this->permissionProvider = $permissionProvider; $this->userHelper = $userHelper; + parent::__construct($entityManager, $security, $dispatcher, $router, $translator, $userHelper, $mauticLogger, $coreParametersHelper); } public function setMetadata(CustomField $entity): CustomField @@ -140,7 +155,7 @@ private function sanitizeAlias(CustomField $entity): CustomField if (empty($dirtyAlias)) { $dirtyAlias = $entity->getName(); } - $cleanAlias = $this->cleanAlias($dirtyAlias, '', false, '-'); + $cleanAlias = $this->cleanAlias($dirtyAlias, '', 0, '-'); $entity->setAlias($cleanAlias); return $entity; diff --git a/Model/CustomFieldValueModel.php b/Model/CustomFieldValueModel.php index e10b92081..1924abc8a 100644 --- a/Model/CustomFieldValueModel.php +++ b/Model/CustomFieldValueModel.php @@ -192,9 +192,7 @@ private function fetchValues(Collection $queries): ArrayCollection $query = implode(' UNION ALL ', $queries->toArray()); $statement = $this->entityManager->getConnection()->prepare($query); - $statement->execute(); - - return new ArrayCollection($statement->fetchAll()); + return new ArrayCollection( $statement->executeQuery()->fetchAllAssociative()); } private function buildQueriesForUnion(CustomItem $customItem, Collection $customFields): Collection @@ -288,7 +286,7 @@ private function fetchItemsListData(array $customFields, array $customItems): ar $types[$table] = Connection::PARAM_INT_ARRAY; } - return $this->entityManager->getConnection()->fetchAll(implode(' UNION ALL ', $queries), $params, $types); + return $this->entityManager->getConnection()->fetchAllAssociative(implode(' UNION ALL ', $queries), $params, $types); } /** diff --git a/Model/CustomItemExportSchedulerModel.php b/Model/CustomItemExportSchedulerModel.php index bc09d399a..7edd8945e 100644 --- a/Model/CustomItemExportSchedulerModel.php +++ b/Model/CustomItemExportSchedulerModel.php @@ -4,23 +4,32 @@ namespace MauticPlugin\CustomObjectsBundle\Model; -use DateTimeImmutable; use DateTimeZone; +use DateTimeImmutable; +use Psr\Log\LoggerInterface; +use Doctrine\ORM\EntityManager; +use Mautic\CoreBundle\Helper\UserHelper; +use Mautic\EmailBundle\Helper\MailHelper; use Mautic\CoreBundle\Helper\ExportHelper; +use Symfony\Contracts\EventDispatcher\Event; +use Mautic\CoreBundle\Translation\Translator; +use Mautic\CoreBundle\Helper\FilePathResolver; +use Symfony\Component\HttpFoundation\Response; use Mautic\CoreBundle\Model\AbstractCommonModel; -use Mautic\EmailBundle\Helper\MailHelper; +use Mautic\CoreBundle\Helper\CoreParametersHelper; use MauticPlugin\CustomObjectsBundle\CustomItemEvents; -use MauticPlugin\CustomObjectsBundle\Entity\CustomField; use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; -use MauticPlugin\CustomObjectsBundle\Entity\CustomItemExportScheduler; +use MauticPlugin\CustomObjectsBundle\Entity\CustomField; +use Symfony\Component\HttpFoundation\BinaryFileResponse; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; -use MauticPlugin\CustomObjectsBundle\Provider\CustomItemRouteProvider; -use MauticPlugin\CustomObjectsBundle\Repository\CustomItemExportSchedulerRepository; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; +use Symfony\Component\Routing\Generator\UrlGeneratorInterface; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use MauticPlugin\CustomObjectsBundle\Repository\CustomItemRepository; +use MauticPlugin\CustomObjectsBundle\Entity\CustomItemExportScheduler; +use MauticPlugin\CustomObjectsBundle\Provider\CustomItemRouteProvider; use MauticPlugin\CustomObjectsBundle\Repository\CustomItemXrefContactRepository; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; -use Symfony\Component\HttpFoundation\BinaryFileResponse; -use Symfony\Component\HttpFoundation\Response; +use MauticPlugin\CustomObjectsBundle\Repository\CustomItemExportSchedulerRepository; class CustomItemExportSchedulerModel extends AbstractCommonModel { @@ -28,38 +37,27 @@ class CustomItemExportSchedulerModel extends AbstractCommonModel private const CUSTOM_ITEM_LIMIT = 200; private const CONTACT_LIMIT = 5000; - private ExportHelper $exportHelper; - - private MailHelper $mailHelper; - - private CustomItemRouteProvider $customItemRouteProvider; - - private CustomFieldValueModel $customFieldValueModel; - - private CustomItemXrefContactRepository $customItemXrefContactRepository; - - private CustomItemRepository $customItemRepository; - - private EventDispatcherInterface $eventDispatcher; - private string $filePath; public function __construct( - ExportHelper $exportHelper, - MailHelper $mailHelper, - CustomFieldValueModel $customFieldValueModel, - CustomItemRouteProvider $customItemRouteProvider, - CustomItemXrefContactRepository $customItemXrefContactRepository, - CustomItemRepository $customItemRepository, - EventDispatcherInterface $eventDispatcher + EntityManager $entityManager, + CorePermissions $security, + EventDispatcherInterface $dispatcher, + UrlGeneratorInterface $router, + Translator $translator, + UserHelper $userHelper, + LoggerInterface $mauticLogger, + CoreParametersHelper $coreParametersHelper, + private ExportHelper $exportHelper, + private MailHelper $mailHelper, + private CustomFieldValueModel $customFieldValueModel, + private CustomItemRouteProvider $customItemRouteProvider, + private CustomItemXrefContactRepository $customItemXrefContactRepository, + private CustomItemRepository $customItemRepository, + private EventDispatcherInterface $eventDispatcher, + private FilePathResolver $filePathResolver ) { - $this->exportHelper = $exportHelper; - $this->mailHelper = $mailHelper; - $this->customFieldValueModel = $customFieldValueModel; - $this->customItemRouteProvider = $customItemRouteProvider; - $this->customItemXrefContactRepository = $customItemXrefContactRepository; - $this->customItemRepository = $customItemRepository; - $this->eventDispatcher = $eventDispatcher; + parent::__construct($entityManager, $security, $dispatcher, $router, $translator, $userHelper, $mauticLogger, $coreParametersHelper); } public function getRepository(): CustomItemExportSchedulerRepository @@ -93,7 +91,7 @@ public function processDataAndGetExportFilePath(CustomItemExportScheduler $custo $scheduledDateTime = $customItemExportScheduler->getScheduledDateTime(); $fileName = 'custom_items_export_'.$scheduledDateTime->format(self::EXPORT_FILE_NAME_DATE_FORMAT).'.csv'; - $filePath = $this->exportHelper->getValidExportFileName($fileName, 'custom_item_export_dir'); + $filePath = $this->getValidExportFileName($fileName, 'custom_item_export_dir'); $this->filePath = $filePath; @@ -207,7 +205,7 @@ private function addCustomItemsToCsvFile(array $customFields, CustomObject $cust $rowData[] = implode(',', $results); if ($this->eventDispatcher->hasListeners(CustomItemEvents::ON_PROCESSING_FILE)) { - $this->eventDispatcher->dispatch(CustomItemEvents::ON_PROCESSING_FILE); + $this->eventDispatcher->dispatch(new Event(), CustomItemEvents::ON_PROCESSING_FILE); } fputcsv($handler, $rowData); @@ -291,4 +289,23 @@ public function getExportFileToDownload(string $fileName): BinaryFileResponse ] ); } + + public function getValidExportFileName(string $fileName, string $directory): string + { + $contactExportDir = $this->coreParametersHelper->get($directory); + $this->filePathResolver->createDirectory($contactExportDir); + $filePath = $contactExportDir.'/'.$fileName; + $fileName = (string) pathinfo($filePath, PATHINFO_FILENAME); + $extension = (string) pathinfo($filePath, PATHINFO_EXTENSION); + $originalName = $fileName; + $i = 1; + + while (file_exists($filePath)) { + $fileName = $originalName.'_'.$i; + $filePath = $contactExportDir.'/'.$fileName.'.'.$extension; + ++$i; + } + + return $filePath; + } } diff --git a/Model/CustomItemImportModel.php b/Model/CustomItemImportModel.php index 5bd63e1ed..4fcc15f2a 100644 --- a/Model/CustomItemImportModel.php +++ b/Model/CustomItemImportModel.php @@ -4,15 +4,22 @@ namespace MauticPlugin\CustomObjectsBundle\Model; +use Psr\Log\LoggerInterface; use Doctrine\ORM\EntityManager; -use Mautic\CoreBundle\Model\FormModel; -use Mautic\CoreBundle\Templating\Helper\FormatterHelper; -use Mautic\LeadBundle\Entity\Import; use Mautic\LeadBundle\Entity\Lead; use Mautic\UserBundle\Entity\User; +use Mautic\LeadBundle\Entity\Import; +use Mautic\CoreBundle\Model\FormModel; +use Mautic\CoreBundle\Helper\UserHelper; +use Mautic\CoreBundle\Translation\Translator; +use Mautic\CoreBundle\Helper\CoreParametersHelper; +use Mautic\CoreBundle\Twig\Helper\FormatterHelper; use MauticPlugin\CustomObjectsBundle\DTO\ImportLogDTO; use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; +use Symfony\Component\Routing\Generator\UrlGeneratorInterface; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use MauticPlugin\CustomObjectsBundle\Exception\NotFoundException; class CustomItemImportModel extends FormModel @@ -35,11 +42,19 @@ class CustomItemImportModel extends FormModel public function __construct( EntityManager $entityManager, CustomItemModel $customItemModel, - FormatterHelper $formatterHelper + FormatterHelper $formatterHelper, + CorePermissions $security, + EventDispatcherInterface $dispatcher, + UrlGeneratorInterface $router, + Translator $translator, + UserHelper $userHelper, + LoggerInterface $mauticLogger, + CoreParametersHelper $coreParametersHelper, ) { $this->entityManager = $entityManager; $this->customItemModel = $customItemModel; $this->formatterHelper = $formatterHelper; + parent::__construct($entityManager, $security, $dispatcher, $router, $translator, $userHelper, $mauticLogger, $coreParametersHelper); } /** @@ -120,7 +135,7 @@ private function linkContacts(CustomItem $customItem, array $contactIds, ?Import continue; } - $xref = $this->customItemModel->linkEntity($customItem, 'contact', $contactId); + $xref = $this->customItemModel->linkEntity($customItem, 'contact', (int) $contactId); $customItem->addContactReference($xref); } } diff --git a/Model/CustomItemModel.php b/Model/CustomItemModel.php index bd59f740b..b6b42e30c 100644 --- a/Model/CustomItemModel.php +++ b/Model/CustomItemModel.php @@ -4,36 +4,41 @@ namespace MauticPlugin\CustomObjectsBundle\Model; -use Doctrine\DBAL\Query\QueryBuilder as DbalQueryBuilder; -use Doctrine\ORM\EntityManager; +use Psr\Log\LoggerInterface; +use UnexpectedValueException; use Doctrine\ORM\QueryBuilder; -use Mautic\CoreBundle\Doctrine\Helper\FulltextKeyword; -use Mautic\CoreBundle\Entity\CommonRepository; -use Mautic\CoreBundle\Helper\DateTimeHelper; -use Mautic\CoreBundle\Helper\UserHelper; +use Doctrine\ORM\EntityManager; use Mautic\CoreBundle\Model\FormModel; -use MauticPlugin\CustomObjectsBundle\CustomItemEvents; -use MauticPlugin\CustomObjectsBundle\DTO\CustomItemFieldListData; +use Mautic\CoreBundle\Helper\UserHelper; +use Mautic\CoreBundle\Helper\DateTimeHelper; +use Mautic\CoreBundle\Translation\Translator; +use Mautic\CoreBundle\Entity\CommonRepository; +use Mautic\CoreBundle\Helper\CoreParametersHelper; use MauticPlugin\CustomObjectsBundle\DTO\TableConfig; -use MauticPlugin\CustomObjectsBundle\Entity\CustomFieldValueInterface; -use MauticPlugin\CustomObjectsBundle\Entity\CustomFieldValueOption; -use MauticPlugin\CustomObjectsBundle\Entity\CustomFieldValueText; +use Mautic\CoreBundle\Doctrine\Helper\FulltextKeyword; +use MauticPlugin\CustomObjectsBundle\CustomItemEvents; use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; -use MauticPlugin\CustomObjectsBundle\Entity\CustomItemXrefInterface; +use Doctrine\DBAL\Query\QueryBuilder as DbalQueryBuilder; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; use MauticPlugin\CustomObjectsBundle\Event\CustomItemEvent; -use MauticPlugin\CustomObjectsBundle\Event\CustomItemListDbalQueryEvent; +use Symfony\Component\Validator\Validator\ValidatorInterface; +use Symfony\Component\Routing\Generator\UrlGeneratorInterface; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use MauticPlugin\CustomObjectsBundle\DTO\CustomItemFieldListData; +use MauticPlugin\CustomObjectsBundle\Entity\CustomFieldValueText; +use MauticPlugin\CustomObjectsBundle\Exception\NotFoundException; +use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; +use MauticPlugin\CustomObjectsBundle\Entity\CustomFieldValueOption; +use MauticPlugin\CustomObjectsBundle\Entity\CustomItemXrefInterface; use MauticPlugin\CustomObjectsBundle\Event\CustomItemListQueryEvent; -use MauticPlugin\CustomObjectsBundle\Event\CustomItemXrefEntityDiscoveryEvent; use MauticPlugin\CustomObjectsBundle\Event\CustomItemXrefEntityEvent; -use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; use MauticPlugin\CustomObjectsBundle\Exception\InvalidValueException; -use MauticPlugin\CustomObjectsBundle\Exception\NotFoundException; -use MauticPlugin\CustomObjectsBundle\Provider\CustomItemPermissionProvider; use MauticPlugin\CustomObjectsBundle\Repository\CustomItemRepository; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; -use Symfony\Component\Validator\Validator\ValidatorInterface; -use UnexpectedValueException; +use MauticPlugin\CustomObjectsBundle\Entity\CustomFieldValueInterface; +use MauticPlugin\CustomObjectsBundle\Event\CustomItemListDbalQueryEvent; +use MauticPlugin\CustomObjectsBundle\Provider\CustomItemPermissionProvider; +use MauticPlugin\CustomObjectsBundle\Event\CustomItemXrefEntityDiscoveryEvent; class CustomItemModel extends FormModel { @@ -69,7 +74,12 @@ public function __construct( UserHelper $userHelper, CustomFieldValueModel $customFieldValueModel, EventDispatcherInterface $dispatcher, - ValidatorInterface $validator + ValidatorInterface $validator, + CorePermissions $security, + UrlGeneratorInterface $router, + Translator $translator, + LoggerInterface $mauticLogger, + CoreParametersHelper $coreParametersHelper, ) { $this->entityManager = $entityManager; $this->customItemRepository = $customItemRepository; @@ -78,6 +88,7 @@ public function __construct( $this->customFieldValueModel = $customFieldValueModel; $this->dispatcher = $dispatcher; $this->validator = $validator; + parent::__construct($entityManager, $security, $dispatcher, $router, $translator, $userHelper, $mauticLogger, $coreParametersHelper); } public function save(CustomItem $customItem, bool $dryRun = false): CustomItem @@ -102,7 +113,7 @@ public function save(CustomItem $customItem, bool $dryRun = false): CustomItem throw new InvalidValueException($errors->get(0)->getMessage()); } - $this->dispatcher->dispatch(CustomItemEvents::ON_CUSTOM_ITEM_PRE_SAVE, new CustomItemEvent($customItem, $customItem->isNew())); + $this->dispatcher->dispatch(new CustomItemEvent($customItem, $customItem->isNew()), CustomItemEvents::ON_CUSTOM_ITEM_PRE_SAVE); if (!$dryRun) { if ($customItem->isNew()) { @@ -134,7 +145,7 @@ public function save(CustomItem $customItem, bool $dryRun = false): CustomItem $customItem->recordCustomFieldValueChanges(); - $this->dispatcher->dispatch(CustomItemEvents::ON_CUSTOM_ITEM_POST_SAVE, new CustomItemEvent($customItem, $customItem->isNew())); + $this->dispatcher->dispatch(new CustomItemEvent($customItem, $customItem->isNew()), CustomItemEvents::ON_CUSTOM_ITEM_POST_SAVE); } return $customItem; @@ -163,13 +174,13 @@ public function linkEntity(CustomItem $customItem, string $entityType, int $enti { $event = new CustomItemXrefEntityDiscoveryEvent($customItem, $entityType, $entityId); - $this->dispatcher->dispatch(CustomItemEvents::ON_CUSTOM_ITEM_LINK_ENTITY_DISCOVERY, $event); + $this->dispatcher->dispatch($event, CustomItemEvents::ON_CUSTOM_ITEM_LINK_ENTITY_DISCOVERY); if (!$event->getXrefEntity() instanceof CustomItemXrefInterface) { throw new UnexpectedValueException("Entity {$entityType} was not able to be linked to {$customItem->getName()} ({$customItem->getId()})"); } - $this->dispatcher->dispatch(CustomItemEvents::ON_CUSTOM_ITEM_LINK_ENTITY, new CustomItemXrefEntityEvent($event->getXrefEntity())); + $this->dispatcher->dispatch(new CustomItemXrefEntityEvent($event->getXrefEntity()), CustomItemEvents::ON_CUSTOM_ITEM_LINK_ENTITY); return $event->getXrefEntity(); } @@ -181,13 +192,13 @@ public function unlinkEntity(CustomItem $customItem, string $entityType, int $en { $event = new CustomItemXrefEntityDiscoveryEvent($customItem, $entityType, $entityId); - $this->dispatcher->dispatch(CustomItemEvents::ON_CUSTOM_ITEM_LINK_ENTITY_DISCOVERY, $event); + $this->dispatcher->dispatch($event, CustomItemEvents::ON_CUSTOM_ITEM_LINK_ENTITY_DISCOVERY); if (!$event->getXrefEntity() instanceof CustomItemXrefInterface) { throw new UnexpectedValueException("Entity {$entityType} was not able to be unlinked from {$customItem->getName()} ({$customItem->getId()})"); } - $this->dispatcher->dispatch(CustomItemEvents::ON_CUSTOM_ITEM_UNLINK_ENTITY, new CustomItemXrefEntityEvent($event->getXrefEntity())); + $this->dispatcher->dispatch(new CustomItemXrefEntityEvent($event->getXrefEntity()), CustomItemEvents::ON_CUSTOM_ITEM_UNLINK_ENTITY); return $event->getXrefEntity(); } @@ -197,14 +208,14 @@ public function delete(CustomItem $customItem): void //take note of ID before doctrine wipes it out $id = $customItem->getId(); $event = new CustomItemEvent($customItem); - $this->dispatcher->dispatch(CustomItemEvents::ON_CUSTOM_ITEM_PRE_DELETE, $event); + $this->dispatcher->dispatch($event, CustomItemEvents::ON_CUSTOM_ITEM_PRE_DELETE); $this->entityManager->remove($customItem); $this->entityManager->flush(); //set the id for use in events $customItem->deletedId = $id; - $this->dispatcher->dispatch(CustomItemEvents::ON_CUSTOM_ITEM_POST_DELETE, $event); + $this->dispatcher->dispatch($event, CustomItemEvents::ON_CUSTOM_ITEM_POST_DELETE); } /** @@ -232,8 +243,8 @@ public function getTableData(TableConfig $tableConfig): array $queryBuilder = $this->createListOrmQueryBuilder($tableConfig); $this->dispatcher->dispatch( - CustomItemEvents::ON_CUSTOM_ITEM_LIST_ORM_QUERY, - new CustomItemListQueryEvent($queryBuilder, $tableConfig) + new CustomItemListQueryEvent($queryBuilder, $tableConfig), + CustomItemEvents::ON_CUSTOM_ITEM_LIST_ORM_QUERY ); return $queryBuilder->getQuery()->getResult(); @@ -247,11 +258,11 @@ public function getArrayTableData(TableConfig $tableConfig): array $queryBuilder = $this->createListDbalQueryBuilder($tableConfig); $this->dispatcher->dispatch( - CustomItemEvents::ON_CUSTOM_ITEM_LIST_DBAL_QUERY, - new CustomItemListDbalQueryEvent($queryBuilder, $tableConfig) + new CustomItemListDbalQueryEvent($queryBuilder, $tableConfig), + CustomItemEvents::ON_CUSTOM_ITEM_LIST_DBAL_QUERY ); - return $queryBuilder->execute()->fetchAll(); + return $queryBuilder->executeQuery()->fetchAllAssociative(); } public function getCountForTable(TableConfig $tableConfig): int @@ -263,8 +274,8 @@ public function getCountForTable(TableConfig $tableConfig): int $queryBuilder->resetDQLPart('orderBy'); $this->dispatcher->dispatch( - CustomItemEvents::ON_CUSTOM_ITEM_LIST_ORM_QUERY, - new CustomItemListQueryEvent($queryBuilder, $tableConfig) + new CustomItemListQueryEvent($queryBuilder, $tableConfig), + CustomItemEvents::ON_CUSTOM_ITEM_LIST_ORM_QUERY ); return (int) $queryBuilder->getQuery()->getSingleScalarResult(); @@ -280,8 +291,8 @@ public function getLookupData(TableConfig $tableConfig): array $queryBuilder->select("{$rootAlias}.name as value, {$rootAlias}.id"); $this->dispatcher->dispatch( - CustomItemEvents::ON_CUSTOM_ITEM_LOOKUP_QUERY, - new CustomItemListQueryEvent($queryBuilder, $tableConfig) + new CustomItemListQueryEvent($queryBuilder, $tableConfig), + CustomItemEvents::ON_CUSTOM_ITEM_LOOKUP_QUERY ); $rows = $queryBuilder->getQuery()->getArrayResult(); diff --git a/Model/CustomItemXrefContactModel.php b/Model/CustomItemXrefContactModel.php index 6d9f378d5..175fc60a9 100644 --- a/Model/CustomItemXrefContactModel.php +++ b/Model/CustomItemXrefContactModel.php @@ -10,7 +10,7 @@ use Mautic\CoreBundle\Helper\Chart\LineChart; use Mautic\CoreBundle\Model\FormModel; use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class CustomItemXrefContactModel extends FormModel { @@ -21,7 +21,7 @@ class CustomItemXrefContactModel extends FormModel public function __construct( EntityManager $entityManager, - TranslatorInterface $translator + Translator $translator ) { $this->entityManager = $entityManager; $this->translator = $translator; diff --git a/Model/CustomObjectModel.php b/Model/CustomObjectModel.php index fd6d1eed0..6bf0ada7a 100644 --- a/Model/CustomObjectModel.php +++ b/Model/CustomObjectModel.php @@ -4,26 +4,31 @@ namespace MauticPlugin\CustomObjectsBundle\Model; -use Doctrine\ORM\EntityManager; +use Psr\Log\LoggerInterface; use Doctrine\ORM\QueryBuilder; +use Doctrine\ORM\EntityManager; +use Mautic\CoreBundle\Model\FormModel; +use Mautic\LeadBundle\Model\ListModel; +use Mautic\CoreBundle\Helper\UserHelper; use Doctrine\ORM\Tools\Pagination\Paginator; +use Mautic\CoreBundle\Helper\DateTimeHelper; +use Mautic\CoreBundle\Helper\Chart\LineChart; +use Mautic\CoreBundle\Translation\Translator; use Mautic\CoreBundle\Entity\CommonRepository; use Mautic\CoreBundle\Helper\Chart\ChartQuery; -use Mautic\CoreBundle\Helper\Chart\LineChart; -use Mautic\CoreBundle\Helper\DateTimeHelper; -use Mautic\CoreBundle\Helper\UserHelper; -use Mautic\CoreBundle\Model\FormModel; -use Mautic\LeadBundle\Model\ListModel; -use MauticPlugin\CustomObjectsBundle\CustomObjectEvents; +use Mautic\CoreBundle\Helper\CoreParametersHelper; use MauticPlugin\CustomObjectsBundle\DTO\TableConfig; +use MauticPlugin\CustomObjectsBundle\CustomObjectEvents; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; use MauticPlugin\CustomObjectsBundle\Event\CustomObjectEvent; -use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; use MauticPlugin\CustomObjectsBundle\Exception\InUseException; +use Symfony\Component\Routing\Generator\UrlGeneratorInterface; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use MauticPlugin\CustomObjectsBundle\Exception\NotFoundException; -use MauticPlugin\CustomObjectsBundle\Provider\CustomObjectPermissionProvider; +use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; use MauticPlugin\CustomObjectsBundle\Repository\CustomObjectRepository; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use MauticPlugin\CustomObjectsBundle\Provider\CustomObjectPermissionProvider; class CustomObjectModel extends FormModel { @@ -56,10 +61,15 @@ public function __construct( EntityManager $entityManager, CustomObjectRepository $customObjectRepository, CustomObjectPermissionProvider $permissionProvider, - UserHelper $userHelper, CustomFieldModel $customFieldModel, EventDispatcherInterface $dispatcher, - ListModel $listModel + ListModel $listModel, + CorePermissions $security, + UrlGeneratorInterface $router, + Translator $translator, + UserHelper $userHelper, + LoggerInterface $mauticLogger, + CoreParametersHelper $coreParametersHelper, ) { $this->entityManager = $entityManager; $this->customObjectRepository = $customObjectRepository; @@ -68,6 +78,7 @@ public function __construct( $this->customFieldModel = $customFieldModel; $this->dispatcher = $dispatcher; $this->listModel = $listModel; + parent::__construct($entityManager, $security, $dispatcher, $router, $translator, $userHelper, $mauticLogger, $coreParametersHelper); } public function save(CustomObject $customObject): CustomObject @@ -97,12 +108,12 @@ public function save(CustomObject $customObject): CustomObject $this->setCustomFieldsMetadata($customObject); - $this->dispatcher->dispatch(CustomObjectEvents::ON_CUSTOM_OBJECT_PRE_SAVE, $event); + $this->dispatcher->dispatch($event, CustomObjectEvents::ON_CUSTOM_OBJECT_PRE_SAVE); $this->entityManager->persist($customObject); $this->entityManager->flush(); - $this->dispatcher->dispatch(CustomObjectEvents::ON_CUSTOM_OBJECT_POST_SAVE, $event); + $this->dispatcher->dispatch($event, CustomObjectEvents::ON_CUSTOM_OBJECT_POST_SAVE); return $customObject; } @@ -112,14 +123,14 @@ public function delete(CustomObject $customObject): void // Take note of ID before doctrine wipes it out $id = $customObject->getId(); $event = new CustomObjectEvent($customObject); - $this->dispatcher->dispatch(CustomObjectEvents::ON_CUSTOM_OBJECT_PRE_DELETE, $event); + $this->dispatcher->dispatch($event, CustomObjectEvents::ON_CUSTOM_OBJECT_PRE_DELETE); $this->entityManager->remove($customObject); $this->entityManager->flush(); // Set the id for use in events $customObject->deletedId = $id; - $this->dispatcher->dispatch(CustomObjectEvents::ON_CUSTOM_OBJECT_POST_DELETE, $event); + $this->dispatcher->dispatch($event, CustomObjectEvents::ON_CUSTOM_OBJECT_POST_DELETE); } /** @@ -258,8 +269,9 @@ private function createListQueryBuilder(TableConfig $tableConfig): QueryBuilder $search = $tableConfig->getParameter('search'); if ($search) { - $queryBuilder->andWhere(CustomObject::TABLE_ALIAS.'.name LIKE %:search%'); - $queryBuilder->setParameter('search', $search); + $queryBuilder->andWhere(CustomObject::TABLE_ALIAS.'.nameSingular LIKE :search'); + $queryBuilder->orWhere(CustomObject::TABLE_ALIAS.'.namePlural LIKE :search'); + $queryBuilder->setParameter('search', "%{$search}%"); } return $this->applyOwnerFilter($queryBuilder); @@ -271,7 +283,7 @@ private function sanitizeAlias(CustomObject $entity): CustomObject if (empty($dirtyAlias)) { $dirtyAlias = $entity->getName(); } - $cleanAlias = $this->cleanAlias($dirtyAlias, '', false, '-'); + $cleanAlias = $this->cleanAlias($dirtyAlias, '', 0, '-'); $entity->setAlias($cleanAlias); return $entity; diff --git a/Polyfill/EventListener/MatchFilterForLeadTrait.php b/Polyfill/EventListener/MatchFilterForLeadTrait.php index 19304737e..96f6d53eb 100644 --- a/Polyfill/EventListener/MatchFilterForLeadTrait.php +++ b/Polyfill/EventListener/MatchFilterForLeadTrait.php @@ -151,10 +151,10 @@ protected function matchFilterForLead(array $filter, array $lead): bool $matchVal = str_replace('%', '.*', $matchVal); $groups[$groupNum] = 1 !== preg_match('/'.$matchVal.'/', $leadVal); break; - case OperatorOptions::IN: + case OperatorOptions::INCLUDING_ANY: $groups[$groupNum] = $this->checkLeadValueIsInFilter($leadVal, $filterVal, false); break; - case OperatorOptions::NOT_IN: + case OperatorOptions::EXCLUDING_ANY: $groups[$groupNum] = $this->checkLeadValueIsInFilter($leadVal, $filterVal, true); break; case 'regexp': diff --git a/Provider/SessionProvider.php b/Provider/SessionProvider.php index f06c91d36..847dbf217 100644 --- a/Provider/SessionProvider.php +++ b/Provider/SessionProvider.php @@ -4,7 +4,7 @@ namespace MauticPlugin\CustomObjectsBundle\Provider; -use Symfony\Component\HttpFoundation\Session\Session; +use Symfony\Component\HttpFoundation\RequestStack; class SessionProvider { @@ -34,9 +34,9 @@ class SessionProvider private const KEY_FILTER = 'filter'; /** - * @var Session + * @var RequestStack */ - private $session; + private $requestStack; /** * @var int @@ -48,9 +48,9 @@ class SessionProvider */ private $namespace; - public function __construct(Session $session, string $namespace, int $defaultPageLimit) + public function __construct(RequestStack $requestStack, string $namespace = '', int $defaultPageLimit = 20) { - $this->session = $session; + $this->requestStack = $requestStack; $this->namespace = $namespace; $this->defaultPageLimit = $defaultPageLimit; } @@ -117,12 +117,14 @@ public function setFilter(string $filter): void */ private function getValue(string $key, $default) { - return $this->session->get($this->buildName($key), $default); + $session = $this->requestStack->getSession(); + return $session->get($this->buildName($key), $default); } private function setValue(string $key, $value): void { - $this->session->set($this->buildName($key), $value); + $session = $this->requestStack->getSession(); + $session->set($this->buildName($key), $value); } private function buildName(string $key): string diff --git a/Provider/SessionProviderFactory.php b/Provider/SessionProviderFactory.php index 63a302484..f42c0e03e 100644 --- a/Provider/SessionProviderFactory.php +++ b/Provider/SessionProviderFactory.php @@ -5,23 +5,23 @@ namespace MauticPlugin\CustomObjectsBundle\Provider; use Mautic\CoreBundle\Helper\CoreParametersHelper; -use Symfony\Component\HttpFoundation\Session\Session; +use Symfony\Component\HttpFoundation\RequestStack; class SessionProviderFactory { /** - * @var Session + * @var RequestStack */ - private $session; + private $requestStack; /** * @var CoreParametersHelper */ private $coreParametersHelper; - public function __construct(Session $session, CoreParametersHelper $coreParametersHelper) + public function __construct(RequestStack $requestStack, CoreParametersHelper $coreParametersHelper) { - $this->session = $session; + $this->requestStack = $requestStack; $this->coreParametersHelper = $coreParametersHelper; } @@ -39,6 +39,6 @@ public function createItemProvider(int $objectId, string $filterEntityType = nul private function createProvider(string $namespace): SessionProvider { - return new SessionProvider($this->session, $namespace, (int) $this->coreParametersHelper->get('default_pagelimit')); + return new SessionProvider($this->requestStack, $namespace, (int) $this->coreParametersHelper->get('default_pagelimit')); } } diff --git a/README.md b/README.md index 3cdf2dd66..142fb796c 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,15 @@ Until Github Actions' CI/CD are in place, we request to developers to: - `Custom Object` is set of custom fields that will allow users to create multiple instances of this object. Example: Product, Invoice. - `Custom Item` is created when Custom Object fields are populated with specific information. Example: Mautic T-shirt, Invoice 2022-02-22-123. +## Upgrade Notes + +If you upgrade mautic from 4.x to 7.x, using MariaDB, and install this plugin, you need to run the following query in your database to update the plugin: + +```sql +ALTER TABLE mautic_custom_field MODIFY COLUMN params longtext COLLATE utf8mb4_unicode_ci COMMENT '(DC2Type:array)' +``` +Mautic 4 used JSON for this column; newer versions use arrays, so the old schema causes issues. You can run this query to update the column type. + ## Example Usage As an example we can create a `Custom Object` **Product**. To create one go to the right hand side admin menu. This Custom Object will have these `custom fields`: diff --git a/Repository/CustomFieldRepository.php b/Repository/CustomFieldRepository.php index 88606a5b3..936fba575 100644 --- a/Repository/CustomFieldRepository.php +++ b/Repository/CustomFieldRepository.php @@ -8,6 +8,9 @@ use Mautic\CoreBundle\Entity\CommonRepository; use MauticPlugin\CustomObjectsBundle\Entity\CustomField; +/** + * @extends CommonRepository + */ class CustomFieldRepository extends CommonRepository { public function isAliasUnique(string $alias, ?int $id = null): bool diff --git a/Repository/CustomItemExportSchedulerRepository.php b/Repository/CustomItemExportSchedulerRepository.php index ff8105293..3d22147d9 100644 --- a/Repository/CustomItemExportSchedulerRepository.php +++ b/Repository/CustomItemExportSchedulerRepository.php @@ -5,7 +5,11 @@ namespace MauticPlugin\CustomObjectsBundle\Repository; use Mautic\CoreBundle\Entity\CommonRepository; +use MauticPlugin\CustomObjectsBundle\Entity\CustomItemExportScheduler; +/** + * @extends CommonRepository + */ class CustomItemExportSchedulerRepository extends CommonRepository { } diff --git a/Repository/CustomItemRepository.php b/Repository/CustomItemRepository.php index 68b55c9f1..e5bbe888e 100644 --- a/Repository/CustomItemRepository.php +++ b/Repository/CustomItemRepository.php @@ -8,10 +8,12 @@ use Mautic\CoreBundle\Entity\CommonRepository; use Mautic\LeadBundle\Entity\Lead; use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; +use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; use MauticPlugin\CustomObjectsBundle\Entity\CustomItemXrefContact; use MauticPlugin\CustomObjectsBundle\Entity\CustomItemXrefCustomItem; -use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; - +/** + * @extends CommonRepository + */ class CustomItemRepository extends CommonRepository { use DbalQueryTrait; diff --git a/Repository/CustomItemXrefContactRepository.php b/Repository/CustomItemXrefContactRepository.php index 8297ed6c8..9151d3a20 100644 --- a/Repository/CustomItemXrefContactRepository.php +++ b/Repository/CustomItemXrefContactRepository.php @@ -10,7 +10,9 @@ use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; use MauticPlugin\CustomObjectsBundle\Entity\CustomItemXrefContact; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; - +/** + * @extends CommonRepository + */ class CustomItemXrefContactRepository extends CommonRepository { /** diff --git a/Repository/CustomItemXrefCustomItemRepository.php b/Repository/CustomItemXrefCustomItemRepository.php index 079fc568d..036186771 100644 --- a/Repository/CustomItemXrefCustomItemRepository.php +++ b/Repository/CustomItemXrefCustomItemRepository.php @@ -6,7 +6,9 @@ use Mautic\CoreBundle\Entity\CommonRepository; use MauticPlugin\CustomObjectsBundle\Entity\CustomItemXrefCustomItem; - +/** + * @extends CommonRepository + */ class CustomItemXrefCustomItemRepository extends CommonRepository { public function deleteAllLinksForCustomItem(int $customItemId): void diff --git a/Repository/CustomObjectRepository.php b/Repository/CustomObjectRepository.php index a9fa7b3a2..2f503cd84 100644 --- a/Repository/CustomObjectRepository.php +++ b/Repository/CustomObjectRepository.php @@ -9,7 +9,10 @@ use Mautic\CoreBundle\Entity\CommonRepository; use Mautic\LeadBundle\Entity\LeadList; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; - +use MauticPlugin\CustomObjectsBundle\Entity\CustomField; +/** + * @extends CommonRepository + */ class CustomObjectRepository extends CommonRepository { public function checkAliasExists(string $alias, ?int $id = null): bool @@ -102,7 +105,7 @@ private function buildSegmentFilterForCustomObjectFields(CustomObject $customObj { $alias = 'cmo_'.$customObject->getId(); $aliasLength = mb_strlen($alias); - $like = "%;s:5:\"field\";s:${aliasLength}:\"{$alias}\";%"; + $like = "%;s:5:\"field\";s:{$aliasLength}:\"{$alias}\";%"; $filterExpression->add( $queryBuilder->expr()->like('l.filters', $queryBuilder->expr()->literal($like)) @@ -112,7 +115,7 @@ private function buildSegmentFilterForCustomObjectFields(CustomObject $customObj foreach ($customObject->getCustomFields() as $customField) { $alias = 'cmf_'.$customField->getId(); $aliasLength = mb_strlen($alias); - $like = "%;s:5:\"field\";s:${aliasLength}:\"{$alias}\";%"; + $like = "%;s:5:\"field\";s:{$aliasLength}:\"{$alias}\";%"; $filterExpression->add( $queryBuilder->expr()->like('l.filters', $queryBuilder->expr()->literal($like)) ); diff --git a/Repository/DbalQueryTrait.php b/Repository/DbalQueryTrait.php index 84ff8c72f..551ab7fa7 100644 --- a/Repository/DbalQueryTrait.php +++ b/Repository/DbalQueryTrait.php @@ -4,7 +4,7 @@ namespace MauticPlugin\CustomObjectsBundle\Repository; -use Doctrine\DBAL\Driver\Statement; +use Doctrine\DBAL\Result; use Doctrine\DBAL\Query\QueryBuilder; trait DbalQueryTrait @@ -14,14 +14,14 @@ trait DbalQueryTrait * * @throws \UnexpectedValueException */ - private function executeSelect(QueryBuilder $queryBuilder): Statement + private function executeSelect(QueryBuilder $queryBuilder): Result { - $statement = $queryBuilder->execute(); + $statement = $queryBuilder->executeQuery(); - if ($statement instanceof Statement) { + if ($statement instanceof Result) { return $statement; } - throw new \UnexpectedValueException(sprintf('Unexpected value of %s. Instance of %s expected.', print_r($statement, true), Statement::class)); + throw new \UnexpectedValueException(sprintf('Unexpected value of %s. Instance of %s expected.', print_r($statement, true), Result::class)); } } diff --git a/Views/CustomField/form.html.php b/Resources/views/CustomField/form.html.twig similarity index 58% rename from Views/CustomField/form.html.php rename to Resources/views/CustomField/form.html.twig index 1ca60993e..f6f3c2809 100644 --- a/Views/CustomField/form.html.php +++ b/Resources/views/CustomField/form.html.twig @@ -1,18 +1,16 @@ -getId() ? $customField->getLabel() : $customField->getTypeObject()->getName(); - -$showProperties = isset($form['options']) || $customField->getTypeObject()->usePlaceholder(); -?> +{% set title = customField.getId() + ? customField.getLabel() + : customField.getTypeObject().getName() +%} +{% set showProperties = form.options is defined or customField.getTypeObject().usePlaceholder() %}
-

+

{{ title }}

- start($form); ?> + {{ form_start(form) }}
@@ -27,42 +25,42 @@ Validation - + {% if showProperties %}
  • Properties
  • - + {% endif %}
    -
    - row($form['label']); ?> +
    + {{ form_row(form.label) }}
    - row($form['showInCustomObjectDetailList']); ?> + {{ form_row(form.showInCustomObjectDetailList) }}
    - row($form['alias']); ?> + {{ form_row(form.alias) }}
    - row($form['showInContactDetailList']); ?> + {{ form_row(form.showInContactDetailList) }}
    - row($form['defaultValue']); ?> + {{ form_row(form.defaultValue) }}
    - row($form['isUniqueIdentifier']); ?> + {{ form_row(form.isUniqueIdentifier) }}
    @@ -71,35 +69,36 @@
    - row($form['required']); ?> + {{ form_row(form.required) }}
    - + {% if showProperties %}
    - + {% if form.options is defined %}
    - row($form['options']); ?> + {{ form_row(form.options) }}
    - + {% endif %}
    -getTypeObject()->usePlaceholder()): ?> + {% if customField.getTypeObject().usePlaceholder() and form.params is defined and form.params.placeholder is defined %}
    - row($form['params']['placeholder']); ?> + {{ form_row(form.params.placeholder) }}
    - + {% endif %}
    - + {% endif %}
    - rest($form); ?> - end($form); ?> + {{ form_rest(form) }} + {{ form_end(form) }} + +
    -
    \ No newline at end of file diff --git a/Resources/views/CustomField/value.html.twig b/Resources/views/CustomField/value.html.twig new file mode 100644 index 000000000..af7294e7d --- /dev/null +++ b/Resources/views/CustomField/value.html.twig @@ -0,0 +1,17 @@ +{% set customFieldType = fieldValue.getCustomField().getType() %} + +{% if fieldValue.getValue() is instanceof('\\DateTimeInterface') %} + {% if customFieldType == 'date' %} + {{ fieldValue.getValue()|date('Y-m-d') }} + {% else %} + {{ fieldValue.getValue()|date('Y-m-d H:i:s') }} + {% endif %} +{% elseif customFieldType in ['select', 'multiselect'] %} + {{ fieldValue.getCustomField().getTypeObject().valueToString(fieldValue)|e }} +{% elseif fieldValue.getValue() is iterable %} + {{ fieldValue.getValue()|join(', ')|e }} +{% else %} + {{ fieldValue.getValue()|e }} +{% endif %} + + diff --git a/Resources/views/CustomItem/details.html.twig b/Resources/views/CustomItem/details.html.twig new file mode 100644 index 000000000..8b8d060be --- /dev/null +++ b/Resources/views/CustomItem/details.html.twig @@ -0,0 +1,129 @@ +{% extends '@MauticCore/Default/content.html.twig' %} + +{% block mauticContent %}customItem{% endblock %} +{% block headerTitle %}{{ item.getName() }}{% endblock %} + +{% block indexButton %} +{{- include('@MauticCore/Helper/page_actions.html.twig', + { + 'item' : item, + 'templateButtons' : { + 'close' : true, + }, + 'route' : constant('MauticPlugin\\CustomObjectsBundle\\Provider\\CustomItemRouteProvider::ROUTE_LIST'), + 'routeVars' : { + 'close' : { + 'objectId' : item.getCustomObject().getId(), + }, + }, + 'targetLabel': item.getCustomObject().getName()|trans + } +) -}} +{% endblock %} + +{% block actions %} + {{ include('@MauticCore/Helper/page_actions.html.twig', {'item': item}) }} +{% endblock %} + +{% block publishStatus %} + {{ include('@MauticCore/Helper/publishstatus_badge.html.twig', {'entity': item}) }} +{% endblock %} + +{% block content %} + +
    + +
    +
    +
    +
    +
    + + + {{ include('@MauticCore/Helper/details.html.twig', {'entity': item}, with_context=false) }} + {% for fieldValue in item.getCustomFieldValues() %} + + + + + {% endfor %} + +
    {{ fieldValue.getCustomField().getName() }} + {{ include('@CustomObjects/CustomField/value.html.twig', {'fieldValue': fieldValue}) }} +
    +
    +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +
    +
    +
    + + {{ 'custom.item.links.in.time'|trans }} +
    +
    +
    + {{ include('@MauticCore/Helper/graph_dateselect.html.twig', {'dateRangeForm': dateRangeForm, 'class': 'pull-right'}) }} +
    +
    +
    + {{ include('@MauticCore/Helper/chart.html.twig', {'chartData': stats, 'chartType': 'line', 'chartHeight': 300}) }} +
    +
    +
    +
    +
    + + {{ customContent('details.stats.graph.below', _context) }} +
    + + + + + + +
    +
    + {{ contacts|raw }} +
    + {{ customContent('tabs.content', _context) }} +
    + +
    + + +
    + + {{ include('@MauticCore/Helper/recentactivity.html.twig', {'logs': logs}, with_context=false) }} +
    + +
    + +{% endblock %} + + diff --git a/Resources/views/CustomItem/form.html.twig b/Resources/views/CustomItem/form.html.twig new file mode 100644 index 000000000..36de36786 --- /dev/null +++ b/Resources/views/CustomItem/form.html.twig @@ -0,0 +1,78 @@ +{% extends '@MauticCore/Default/content.html.twig' %} + +{% block mauticContent %}customItem{% endblock %} + +{% block headerTitle %} + {% if entity.id %} + {{ 'custom.item.edit'|trans({ + '%object%': customObject.getNameSingular()|trans, + '%item%': entity.getName()|trans + }) }} + {% else %} + {{ 'custom.item.new'|trans({ + '%object%': customObject.getNameSingular()|trans + }) }} + {% endif %} +{% endblock %} + +{% block content %} + {% set hideCategories = customObject.getType() == constant('MauticPlugin\\CustomObjectsBundle\\Entity\\CustomObject::TYPE_RELATIONSHIP') ? 'hide' : '' %} + + {{ form_start(form) }} + + +
    + +
    +
    +
    +
    + {% if form.name is defined %} + {{ form_row(form.name) }} + {% endif %} + {% if form.custom_field_values is defined %} + {{ form_row(form.custom_field_values) }} + {% endif %} + {% if form.contact_id is defined %} + {{ form_row(form.contact_id) }} + {% endif %} +
    + + {% if customObject.getRelationshipObject() and form.contact_id is defined and form.contact_id.vars.value is not empty %} +
    +
    +
    +

    + {{ 'custom.item.new'|trans({ + '%object%': customObject.getRelationshipObject().getNameSingular()|trans + }) }} +

    +
    +
    + {% if form.child_custom_field_values is defined %} + {{ form_row(form.child_custom_field_values) }} + {% endif %} +
    +
    +
    + {% endif %} +
    +
    +
    + +
    +
    + {% if form.category is defined %} + {{ form_row(form.category) }} + {% endif %} + {% if form.isPublished is defined %} + {{ form_row(form.isPublished) }} + {% endif %} +
    +
    +
    + + {{ form_end(form) }} +{% endblock %} + + diff --git a/Resources/views/CustomItem/list.html.twig b/Resources/views/CustomItem/list.html.twig new file mode 100644 index 000000000..c50ca3d56 --- /dev/null +++ b/Resources/views/CustomItem/list.html.twig @@ -0,0 +1,155 @@ +{% set isIndex = tmpl == 'index' ? true : false %} +{% set tmpl = 'list' %} +{% set target = '#' ~ namespace %} +{% extends isIndex ? '@MauticCore/Default/content.html.twig' : '@MauticCore/Default/raw_output.html.twig' %} + +{% block mauticContent %} {{ customObject.getName() }} {% endblock %} +{% block headerTitle %} + {% if not lookup %} + {{ customObject.getName() }} + {% endif %} +{% endblock %} + +{% block content %} + {% if isIndex %} +
    + {{- include('@MauticCore/Helper/list_toolbar.html.twig', { + 'searchValue': searchValue, + 'action': currentRoute, + 'target': target, + 'overlayDisabled': lookup, + }) -}} +
    + {{ block('listResults') }} +
    +
    + {% else %} + {{ block('listResults') }} + {% endif %} +{% endblock %} + +{% block listResults %} +{% if items|length %} + {% set routeSelf = path(constant('MauticPlugin\\CustomObjectsBundle\\Provider\\CustomItemRouteProvider::ROUTE_LIST'), { + 'objectId': customObject.getId(), + 'filterEntityId': filterEntityId, + 'filterEntityType': filterEntityType, + 'lookup': lookup ? 1 : 0, + 'tmpl': 'list' + }) %} + +
    + + + + {{- include( + '@MauticCore/Helper/tableheader.html.twig', + { + 'checkall' : 'true', + 'target' : target, + 'langVar' : 'custom.item', + 'routeBase' : 'custom_item', + 'baseUrl' : routeSelf, + } + ) -}} + + {{- include( + '@MauticCore/Helper/tableheader.html.twig', + { + 'sessionVar' : sessionVar, + 'orderBy' : constant('MauticPlugin\\CustomObjectsBundle\\Entity\\CustomItem::TABLE_ALIAS') ~ '.name', + 'text' : 'mautic.core.name', + 'class' : 'col-custom_item_name', + 'baseUrl' : routeSelf, + 'target' : target, + } + ) -}} + + {{- include( + '@MauticCore/Helper/tableheader.html.twig', + { + 'sessionVar' : sessionVar, + 'orderBy' : constant('MauticPlugin\\CustomObjectsBundle\\Entity\\CustomItem::TABLE_ALIAS') ~ '.id', + 'text' : 'mautic.core.id', + 'default' : true, + 'baseUrl' : routeSelf, + 'target' : target, + } + ) -}} + + {% if fieldData is defined and fieldData %} + {% for columnLabel in fieldData.getColumnLabels() %} + {{- include('@MauticCore/Helper/tableheader.html.twig', {'text': columnLabel}) -}} + {% endfor %} + {% endif %} + + + + {% for item in items %} + + + + + + {% if fieldData is defined and fieldData %} + {% set fields = fieldData.getFields(item.getId()) %} + {% for fieldValue in fields %} + + {% endfor %} + {% endif %} + + {% endfor %} + +
    + {{- include( + '@MauticCore/Helper/list_actions.html.twig', + { + 'item': item, + } + ) -}} + +
    + {% if not filterEntityId %} + {{- include('@MauticCore/Helper/publishstatus_icon.html.twig', + { + 'item' : item, + 'model' : 'custom.item', + } + ) -}} + {% endif %} + + {{ item.getName() }} + +
    +
    {{ item.getId() }} + {{ include('@CustomObjects/CustomField/value.html.twig', {'fieldValue': fieldValue}) }} +
    +
    + +{% else %} + {{- include('@MauticCore/Helper/noresults.html.twig', { + 'message': lookup ? 'custom.item.link.noresults.tip' : 'custom.object.noresults.tip' + }) -}} +{% endif %} +{% endblock %} + + diff --git a/Resources/views/CustomObject/Form/Panel/_field.html.twig b/Resources/views/CustomObject/Form/Panel/_field.html.twig new file mode 100644 index 000000000..83a1d55f5 --- /dev/null +++ b/Resources/views/CustomObject/Form/Panel/_field.html.twig @@ -0,0 +1,74 @@ +{% set customFieldEntity = customField.vars.data %} +{% set order = customField.vars.value.getOrder() %} +{% set postedCustomObject = app.request is defined and app.request ? app.request.request.get('custom_object')|default({}) : {} %} +{% set postedFields = postedCustomObject.customFields|default({}) %} +{% set postedField = postedFields[order]|default({}) %} +{% set isDeleted = postedField.deleted is defined and postedField.deleted %} +{% set resolvedPanelId = panelId is defined and panelId is not null ? panelId : order %} + +
    +
    + {% include '@MauticCore/Helper/button.html.twig' with { + buttons: [ + { + variant: 'ghost', + label: 'mautic.core.form.edit', + icon_only: true, + icon: 'ri-edit-line text-interactive', + size: 'sm', + href: path(constant('MauticPlugin\\CustomObjectsBundle\\Provider\\CustomFieldRouteProvider::ROUTE_FORM'), + { + 'fieldId': customFieldEntity.getId(), + 'objectId': customObject.getId(), + 'fieldType': customFieldEntity.getTypeObject() ? customFieldEntity.getTypeObject().getKey() : '' + } + ), + attributes: { + 'data-toggle': 'ajaxmodal', + 'data-target': '#objectFieldModal', + 'class': 'btn-edit' + } + } + ] + } %} + {% include '@MauticCore/Helper/button.html.twig' with { + buttons: [ + { + label: 'mautic.core.form.delete', + variant: 'ghost', + danger: 'true', + icon_only: 'true', + size: 'sm', + icon: 'ri-delete-bin-line text-danger', + attributes: { + 'data-hide-panel': 'true', + 'type': 'button', + } + } + ] + } %} +
    +
    +
    +
    + {{ form_row(customField.defaultValue) }} +
    +
    +
    + +
    + {{ form_rest(customField) }} +
    + + + +
    + + diff --git a/Resources/views/CustomObject/Form/Panel/checkbox_group.html.twig b/Resources/views/CustomObject/Form/Panel/checkbox_group.html.twig new file mode 100644 index 000000000..2f9847269 --- /dev/null +++ b/Resources/views/CustomObject/Form/Panel/checkbox_group.html.twig @@ -0,0 +1,2 @@ +{% extends '@CustomObjects/CustomObject/Form/Panel/_field.html.twig' %} + diff --git a/Resources/views/CustomObject/Form/Panel/country.html.twig b/Resources/views/CustomObject/Form/Panel/country.html.twig new file mode 100644 index 000000000..2f9847269 --- /dev/null +++ b/Resources/views/CustomObject/Form/Panel/country.html.twig @@ -0,0 +1,2 @@ +{% extends '@CustomObjects/CustomObject/Form/Panel/_field.html.twig' %} + diff --git a/Resources/views/CustomObject/Form/Panel/date.html.twig b/Resources/views/CustomObject/Form/Panel/date.html.twig new file mode 100644 index 000000000..2f9847269 --- /dev/null +++ b/Resources/views/CustomObject/Form/Panel/date.html.twig @@ -0,0 +1,2 @@ +{% extends '@CustomObjects/CustomObject/Form/Panel/_field.html.twig' %} + diff --git a/Resources/views/CustomObject/Form/Panel/datetime.html.twig b/Resources/views/CustomObject/Form/Panel/datetime.html.twig new file mode 100644 index 000000000..2f9847269 --- /dev/null +++ b/Resources/views/CustomObject/Form/Panel/datetime.html.twig @@ -0,0 +1,2 @@ +{% extends '@CustomObjects/CustomObject/Form/Panel/_field.html.twig' %} + diff --git a/Resources/views/CustomObject/Form/Panel/email.html.twig b/Resources/views/CustomObject/Form/Panel/email.html.twig new file mode 100644 index 000000000..2f9847269 --- /dev/null +++ b/Resources/views/CustomObject/Form/Panel/email.html.twig @@ -0,0 +1,2 @@ +{% extends '@CustomObjects/CustomObject/Form/Panel/_field.html.twig' %} + diff --git a/Resources/views/CustomObject/Form/Panel/hidden.html.twig b/Resources/views/CustomObject/Form/Panel/hidden.html.twig new file mode 100644 index 000000000..2f9847269 --- /dev/null +++ b/Resources/views/CustomObject/Form/Panel/hidden.html.twig @@ -0,0 +1,2 @@ +{% extends '@CustomObjects/CustomObject/Form/Panel/_field.html.twig' %} + diff --git a/Resources/views/CustomObject/Form/Panel/html_area.html.twig b/Resources/views/CustomObject/Form/Panel/html_area.html.twig new file mode 100644 index 000000000..2f9847269 --- /dev/null +++ b/Resources/views/CustomObject/Form/Panel/html_area.html.twig @@ -0,0 +1,2 @@ +{% extends '@CustomObjects/CustomObject/Form/Panel/_field.html.twig' %} + diff --git a/Resources/views/CustomObject/Form/Panel/int.html.twig b/Resources/views/CustomObject/Form/Panel/int.html.twig new file mode 100644 index 000000000..2f9847269 --- /dev/null +++ b/Resources/views/CustomObject/Form/Panel/int.html.twig @@ -0,0 +1,2 @@ +{% extends '@CustomObjects/CustomObject/Form/Panel/_field.html.twig' %} + diff --git a/Resources/views/CustomObject/Form/Panel/multiselect.html.twig b/Resources/views/CustomObject/Form/Panel/multiselect.html.twig new file mode 100644 index 000000000..2f9847269 --- /dev/null +++ b/Resources/views/CustomObject/Form/Panel/multiselect.html.twig @@ -0,0 +1,2 @@ +{% extends '@CustomObjects/CustomObject/Form/Panel/_field.html.twig' %} + diff --git a/Resources/views/CustomObject/Form/Panel/phone.html.twig b/Resources/views/CustomObject/Form/Panel/phone.html.twig new file mode 100644 index 000000000..2f9847269 --- /dev/null +++ b/Resources/views/CustomObject/Form/Panel/phone.html.twig @@ -0,0 +1,2 @@ +{% extends '@CustomObjects/CustomObject/Form/Panel/_field.html.twig' %} + diff --git a/Resources/views/CustomObject/Form/Panel/radio_group.html.twig b/Resources/views/CustomObject/Form/Panel/radio_group.html.twig new file mode 100644 index 000000000..2f9847269 --- /dev/null +++ b/Resources/views/CustomObject/Form/Panel/radio_group.html.twig @@ -0,0 +1,2 @@ +{% extends '@CustomObjects/CustomObject/Form/Panel/_field.html.twig' %} + diff --git a/Resources/views/CustomObject/Form/Panel/select.html.twig b/Resources/views/CustomObject/Form/Panel/select.html.twig new file mode 100644 index 000000000..2f9847269 --- /dev/null +++ b/Resources/views/CustomObject/Form/Panel/select.html.twig @@ -0,0 +1,2 @@ +{% extends '@CustomObjects/CustomObject/Form/Panel/_field.html.twig' %} + diff --git a/Resources/views/CustomObject/Form/Panel/text.html.twig b/Resources/views/CustomObject/Form/Panel/text.html.twig new file mode 100644 index 000000000..2f9847269 --- /dev/null +++ b/Resources/views/CustomObject/Form/Panel/text.html.twig @@ -0,0 +1,2 @@ +{% extends '@CustomObjects/CustomObject/Form/Panel/_field.html.twig' %} + diff --git a/Resources/views/CustomObject/Form/Panel/textarea.html.twig b/Resources/views/CustomObject/Form/Panel/textarea.html.twig new file mode 100644 index 000000000..2f9847269 --- /dev/null +++ b/Resources/views/CustomObject/Form/Panel/textarea.html.twig @@ -0,0 +1,2 @@ +{% extends '@CustomObjects/CustomObject/Form/Panel/_field.html.twig' %} + diff --git a/Resources/views/CustomObject/Form/Panel/url.html.twig b/Resources/views/CustomObject/Form/Panel/url.html.twig new file mode 100644 index 000000000..2f9847269 --- /dev/null +++ b/Resources/views/CustomObject/Form/Panel/url.html.twig @@ -0,0 +1,2 @@ +{% extends '@CustomObjects/CustomObject/Form/Panel/_field.html.twig' %} + diff --git a/Resources/views/CustomObject/_form-fields.html.twig b/Resources/views/CustomObject/_form-fields.html.twig new file mode 100644 index 000000000..144d93f23 --- /dev/null +++ b/Resources/views/CustomObject/_form-fields.html.twig @@ -0,0 +1,15 @@ +{% set deletedIds = deletedFields|default([]) %} + +{% for customField in form.customFields %} + {% set customFieldEntity = customField.vars.data %} + {% if customFieldEntity and customFieldEntity.getId() not in deletedIds %} + {{ include('@CustomObjects/CustomObject/Form/Panel/' ~ customFieldEntity.getType() ~ '.html.twig', { + customField: customField, + customObject: customObject, + panelId: panelId|default(null) + }) }} + {% endif %} +{% endfor %} + +{% do form.customFields.setRendered() %} + diff --git a/Resources/views/CustomObject/details.html.twig b/Resources/views/CustomObject/details.html.twig new file mode 100644 index 000000000..d9d2a5da6 --- /dev/null +++ b/Resources/views/CustomObject/details.html.twig @@ -0,0 +1,141 @@ +{% extends '@MauticCore/Default/content.html.twig' %} + +{% block mauticContent %}customObject{% endblock %} +{% block headerTitle %}{{ customObject.nameSingular }}{% endblock %} + +{% block indexButton %} +{{- include('@MauticCore/Helper/page_actions.html.twig', + { + 'item' : customObject, + 'templateButtons' : { + 'close' : true, + }, + 'route' : constant('MauticPlugin\\CustomObjectsBundle\\Provider\\CustomObjectRouteProvider::ROUTE_LIST'), + 'targetLabel': 'custom.object.title'|trans + } +) -}} +{% endblock %} + +{% block actions %} + {{ include('@MauticCore/Helper/page_actions.html.twig', {'item': customObject}) }} +{% endblock %} + +{% block publishStatus %} + {{ include('@MauticCore/Helper/publishstatus_badge.html.twig', {'entity': customObject}) }} +{% endblock %} + +{% block content %} + +
    + +
    +
    + +
    +
    +
    + + + {{ include('@MauticCore/Helper/details.html.twig', {'entity': customObject}, with_context=false) }} + +
    +
    +
    +
    + +
    + + +
    + + + + +
    +
    +
    +
    +
    +
    +
    + + {{ 'custom.item.links.in.time'|trans }} +
    +
    +
    + {{ include('@MauticCore/Helper/graph_dateselect.html.twig', {'dateRangeForm': dateRangeForm, 'class': 'pull-right'}) }} +
    +
    +
    + {{ include('@MauticCore/Helper/chart.html.twig', {'chartData': stats, 'chartType': 'line', 'chartHeight': 300}) }} +
    +
    +
    +
    +
    + + {{ customContent('details.stats.graph.below', _context) }} + + + + + +
    + +
    + + +
    +
      + {% for field in customObject.getCustomFields() %} + {% set requiredTitle = field.isRequired() ? 'mautic.core.required' : 'mautic.core.not_required' %} +
    • +
      +
      +

      + +

      +
      +
      +
      {{ field.getLabel() }}
      +
      +
      + {{ field.getTypeObject().getName() }} +
      +
      +
    • + {% endfor %} +
    +
    + + +
    + +
    + + +
    + + {{ include('@MauticCore/Helper/recentactivity.html.twig', {'logs': logs}, with_context=false) }} +
    + +
    + +{% endblock %} + diff --git a/Resources/views/CustomObject/form.html.twig b/Resources/views/CustomObject/form.html.twig new file mode 100644 index 000000000..50aee95f7 --- /dev/null +++ b/Resources/views/CustomObject/form.html.twig @@ -0,0 +1,120 @@ +{% extends '@MauticCore/Default/content.html.twig' %} + +{% set header = customObject.getId() + ? 'custom.object.edit'|trans({'%name%' : customObject.getName()|trans}) + : 'custom.object.new'|trans +%} + +{% block mauticContent %}customObject{% endblock %} +{% block headerTitle %}{{ header }}{% endblock %} + +{% block content %} +{{ form_start(form) }} + + +
    + +
    +
    +
    + + + +
    +
    +
    +
    + {{ form_row(form.nameSingular) }} + {{ form_row(form.namePlural) }} +
    +
    + {{ form_row(form.alias) }} +
    +
    +
    +
    + {{ form_row(form.description) }} +
    +
    +
    + +
    + {{ include('@MauticForm/Builder/_style.html.twig') }} +
    +
    +
    + +
    +
    +
    + {{ include('@CustomObjects/CustomObject/_form-fields.html.twig', { + form: form, + customObject: customObject, + customFields: customFields, + deletedFields: deletedFields + }) }} +
    + {% if customFields is empty %} +
    +

    {{ 'mautic.form.form.addfield'|trans }}

    +
    + {% endif %} +
    +
    + +
    + +
    + +
    + +
    + +
    +
    + {{ form_row(form.type) }} + {{ form_row(form.masterObject) }} + {{ form_row(form.category) }} + {{ form_row(form.isPublished) }} +
    +
    + +
    + +{{ form_end(form) }} + +{{- include('@MauticCore/Helper/modal.html.twig', { + 'id' : 'objectFieldModal', + 'header' : false, + 'footerButtons' : true +}) -}} + +{% endblock %} + diff --git a/Resources/views/CustomObject/list.html.twig b/Resources/views/CustomObject/list.html.twig new file mode 100644 index 000000000..72c30984d --- /dev/null +++ b/Resources/views/CustomObject/list.html.twig @@ -0,0 +1,103 @@ +{% set isIndex = tmpl == 'index' ? true : false %} +{% set tmpl = 'list' %} +{% extends isIndex ? '@MauticCore/Default/content.html.twig' : '@MauticCore/Default/raw_output.html.twig' %} +{% block mauticContent %}customObject{% endblock %} +{% block headerTitle %}{{ 'custom.object.title'|trans }}{% endblock %} +{% block content %} + {% if isIndex %} +
    + {{- include('@MauticCore/Helper/list_toolbar.html.twig') -}} +
    + {{ block('listResults') }} +
    +
    + {{ include('@MauticCore/Helper/protip.html.twig', { + tip: random(['mautic.protip.custom.objects.create', 'mautic.protip.custom.objects.segmentation', 'mautic.protip.custom.objects.campaign']) + }) }} + {% else %} + {{ block('listResults') }} + {% endif %} +{% endblock %} + +{% block listResults %} +{% if items|length %} +
    + + + + {{- include( + '@MauticCore/Helper/tableheader.html.twig', + { + 'checkall' : 'true', + 'routeBase' : 'custom_object', + 'langVar' : 'custom.object', + } + ) -}} + + {{- include( + '@MauticCore/Helper/tableheader.html.twig', + { + 'sessionVar' : sessionVar, + 'orderBy' : tableAlias ~ '.name', + 'text' : 'mautic.core.name', + 'class' : 'col-custom_object_-name', + } + ) -}} + + {{- include( + '@MauticCore/Helper/tableheader.html.twig', + { + 'sessionVar' : sessionVar, + 'orderBy' : tableAlias ~ '.id', + 'text' : 'mautic.core.id', + 'class' : 'col-custom_object_id', + 'default' : true, + } + ) -}} + + + + {# @var item \MauticPlugin\CustomObjectsBundle\Entity\CustomObject #} + {% for item in items %} + + + + + + {% endfor %} + +
    + {{- include( + '@MauticCore/Helper/list_actions.html.twig', + { + 'item' : item, + } + ) -}} + +
    + {{- include('@MauticCore/Helper/publishstatus_icon.html.twig', + { + 'item' : item, + 'model' : 'custom.object', + } + ) -}} + + {{ item.getName() }} + +
    +
    {{ item.getId() }}
    +
    + +{% else %} + {{- include('@MauticCore/Helper/noresults.html.twig', {'message' : 'custom.object.noresults.tip'}) -}} +{% endif %} +{% endblock %} diff --git a/Resources/views/FormTheme/FieldValueCondition/_campaignevent_custom_item_field_value_widget.html.twig b/Resources/views/FormTheme/FieldValueCondition/_campaignevent_custom_item_field_value_widget.html.twig new file mode 100644 index 000000000..97a81c321 --- /dev/null +++ b/Resources/views/FormTheme/FieldValueCondition/_campaignevent_custom_item_field_value_widget.html.twig @@ -0,0 +1,17 @@ +{% block _campaignevent_properties_row %} +
    +
    + {{ form_row(form.field) }} +
    +
    + {{ form_row(form.operator) }} +
    +
    + {{ form_row(form.value) }} +
    +
    + +{% endblock %} + diff --git a/Resources/views/SubscribedEvents/Tab/content.html.twig b/Resources/views/SubscribedEvents/Tab/content.html.twig new file mode 100644 index 000000000..6891e4900 --- /dev/null +++ b/Resources/views/SubscribedEvents/Tab/content.html.twig @@ -0,0 +1,38 @@ +
    +
    +
    +
    + {{ include('@MauticCore/Helper/search.html.twig', { + 'searchValue': searchValue, + 'action': searchRoute, + 'searchId': searchId, + 'target': '#' ~ namespace, + 'searchHelp': '' + }) }} + + + + + + + + + + + + +
    +
    +
    + Loading... +
    + +
    +
    + diff --git a/Resources/views/SubscribedEvents/Tab/link.html.twig b/Resources/views/SubscribedEvents/Tab/link.html.twig new file mode 100644 index 000000000..2b12691d6 --- /dev/null +++ b/Resources/views/SubscribedEvents/Tab/link.html.twig @@ -0,0 +1,10 @@ +
  • + + {% if count is defined %} + + {{ count }} + + {% endif %} + {{ title|trans|e }} + +
  • diff --git a/Resources/views/SubscribedEvents/Tab/modal.html.twig b/Resources/views/SubscribedEvents/Tab/modal.html.twig new file mode 100644 index 000000000..2272684c3 --- /dev/null +++ b/Resources/views/SubscribedEvents/Tab/modal.html.twig @@ -0,0 +1,5 @@ +{{- include('@MauticCore/Helper/modal.html.twig', { + 'id' : 'customItemLookupModal', + 'size' : 'xl' +}) -}} + diff --git a/Resources/views/SubscribedEvents/Timeline/link.html.twig b/Resources/views/SubscribedEvents/Timeline/link.html.twig new file mode 100644 index 000000000..bae60f9ee --- /dev/null +++ b/Resources/views/SubscribedEvents/Timeline/link.html.twig @@ -0,0 +1,14 @@ +{% set link = event['extra'] %} +
    +{% if link.user_id is defined and link.user_id is not empty %} +
    + {{ 'mautic.core.createdby'|trans }} +
    +
    + + {{ link.user_name }} + +
    +{% endif %} +
    + diff --git a/Security/Permissions/CustomObjectPermissions.php b/Security/Permissions/CustomObjectPermissions.php index 522d49f91..3273469d9 100644 --- a/Security/Permissions/CustomObjectPermissions.php +++ b/Security/Permissions/CustomObjectPermissions.php @@ -10,7 +10,7 @@ use MauticPlugin\CustomObjectsBundle\Model\CustomObjectModel; use MauticPlugin\CustomObjectsBundle\Provider\ConfigProvider; use Symfony\Component\Form\FormBuilderInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class CustomObjectPermissions extends AbstractPermissions { @@ -27,7 +27,7 @@ class CustomObjectPermissions extends AbstractPermissions private $configProvider; /** - * @var TranslatorInterface + * @var Translator */ private $translator; @@ -42,7 +42,7 @@ public function __construct( CoreParametersHelper $coreParametersHelper, CustomObjectModel $customObjectModel, ConfigProvider $configProvider, - TranslatorInterface $translator + Translator $translator ) { parent::__construct($coreParametersHelper->all()); diff --git a/Segment/Query/Filter/CustomFieldFilterQueryBuilder.php b/Segment/Query/Filter/CustomFieldFilterQueryBuilder.php index b3e2e6fd4..42c7dd4ad 100644 --- a/Segment/Query/Filter/CustomFieldFilterQueryBuilder.php +++ b/Segment/Query/Filter/CustomFieldFilterQueryBuilder.php @@ -4,7 +4,6 @@ namespace MauticPlugin\CustomObjectsBundle\Segment\Query\Filter; -use Doctrine\DBAL\DBALException; use Mautic\LeadBundle\Segment\ContactSegmentFilter; use Mautic\LeadBundle\Segment\Query\Filter\BaseFilterQueryBuilder; use Mautic\LeadBundle\Segment\Query\QueryBuilder as SegmentQueryBuilder; @@ -30,14 +29,11 @@ public function __construct( } /** {@inheritdoc} */ - public static function getServiceId() + public static function getServiceId(): string { return 'mautic.lead.query.builder.custom_field.value'; } - /** - * @throws DBALException - */ public function applyQuery(SegmentQueryBuilder $queryBuilder, ContactSegmentFilter $filter): SegmentQueryBuilder { $leadsTableAlias = $queryBuilder->getTableAlias(MAUTIC_TABLE_PREFIX.'leads'); diff --git a/Segment/Query/Filter/CustomItemNameFilterQueryBuilder.php b/Segment/Query/Filter/CustomItemNameFilterQueryBuilder.php index 21d220b7e..d82e3b5c4 100644 --- a/Segment/Query/Filter/CustomItemNameFilterQueryBuilder.php +++ b/Segment/Query/Filter/CustomItemNameFilterQueryBuilder.php @@ -4,7 +4,6 @@ namespace MauticPlugin\CustomObjectsBundle\Segment\Query\Filter; -use Doctrine\DBAL\DBALException; use Mautic\LeadBundle\Segment\ContactSegmentFilter; use Mautic\LeadBundle\Segment\Query\Filter\BaseFilterQueryBuilder; use Mautic\LeadBundle\Segment\Query\QueryBuilder; @@ -35,10 +34,6 @@ public static function getServiceId(): string { return 'mautic.lead.query.builder.custom_item.value'; } - - /** - * @throws DBALException - */ public function applyQuery(QueryBuilder $queryBuilder, ContactSegmentFilter $filter): QueryBuilder { $leadsTableAlias = $queryBuilder->getTableAlias(MAUTIC_TABLE_PREFIX.'leads'); diff --git a/Translations/en_US/messages.ini b/Translations/en_US/messages.ini index 646e1353a..695840e29 100644 --- a/Translations/en_US/messages.ini +++ b/Translations/en_US/messages.ini @@ -74,6 +74,66 @@ custom.item.field="Field" custom.item.operator="Operator" custom.item.field.value="Value" custom.item.link.contact.ids="Link Contact IDs" +mautic.campaign.custom_item.1.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.1.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.2.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.2.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.3.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.3.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.4.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.4.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.5.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.5.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.6.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.6.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.7.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.7.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.8.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.8.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.9.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.9.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.10.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.10.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.11.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.11.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.12.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.12.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.13.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.13.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.14.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.14.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.15.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.15.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.16.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.16.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.17.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.17.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.18.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.18.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.19.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.19.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.20.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.20.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.21.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.21.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.22.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.22.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.23.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.23.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.24.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.24.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.25.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.25.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.26.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.26.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.27.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.27.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.28.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.28.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.29.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.29.fieldvalue="Custom Object field value" +mautic.campaign.custom_item.30.linkcontact="Link contact with Custom Object" +mautic.campaign.custom_item.30.fieldvalue="Custom Object field value" custom.item.link="Link" custom.item.unlink="Unlink" custom.item.linked.items="Linked Items" @@ -100,3 +160,6 @@ custom.item.export="Export As CSV" custom.item.export.email_subject="Custom Items Exported : %file_name%" custom.item.export.email="Your requested custom item export: %label%." custom.item.import.invalid.contactid.for.link="warning: Invalid contact %contactId% to link with customItem %customItemId%" +mautic.protip.custom.objects.create="Use custom objects to store custom data and manage it efficiently." +mautic.protip.custom.objects.segmentation="You can create segments and can apply filters based on custom object fields." +mautic.protip.custom.objects.campaign="You can have campaign conditions based on custom object fields." \ No newline at end of file diff --git a/Views/CustomField/detail.html.php b/Views/CustomField/detail.html.php deleted file mode 100644 index c97b8ac83..000000000 --- a/Views/CustomField/detail.html.php +++ /dev/null @@ -1,56 +0,0 @@ -extend('MauticCoreBundle:Default:content.html.php'); -$view['slots']->set('mauticContent', 'customField'); -$view['slots']->set('headerTitle', $item->getName()); -$view['slots']->set('actions', $view->render('MauticCoreBundle:Helper:page_actions.html.php', [ - 'item' => $item, -])); -?> - - -
    - -
    -
    - -
    -
    -
    -
    getType(); ?>
    -
    -
    - render('MauticCoreBundle:Helper:publishstatus_badge.html.php', ['entity' => $item]); ?> -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    - - -
    - -
    -
    -
    trans('mautic.webhook.webhook_url');?>
    -
    -
    -
    -
    -
    - -
    - - - render('MauticCoreBundle:Helper:recentactivity.html.php', ['logs' => $logs]);?> -
    -
    - -
    diff --git a/Views/CustomField/index.html.php b/Views/CustomField/index.html.php deleted file mode 100644 index c1a0aaa20..000000000 --- a/Views/CustomField/index.html.php +++ /dev/null @@ -1,21 +0,0 @@ -extend('MauticCoreBundle:Default:content.html.php'); - -$view['slots']->set('mauticContent', 'customField'); -$view['slots']->set('headerTitle', $view['translator']->trans('custom.field.title')); -$view['slots']->set('actions', $view->render('MauticCoreBundle:Helper:page_actions.html.php')); -?> - -
    - render( - 'MauticCoreBundle:Helper:list_toolbar.html.php', - [ - // 'searchValue' => $searchValue, - // 'action' => $currentRoute, - ] -); ?> -
    - output('_content'); ?> -
    -
    diff --git a/Views/CustomField/value.html.php b/Views/CustomField/value.html.php deleted file mode 100644 index 35be77316..000000000 --- a/Views/CustomField/value.html.php +++ /dev/null @@ -1,23 +0,0 @@ -getCustomField()->getType(); -?> -getValue() instanceof DateTimeInterface) : ?> - - toDate($fieldValue->getValue()); ?> - - toFull($fieldValue->getValue()); ?> - - - escape($fieldValue->getCustomField()->getTypeObject()->valueToString($fieldValue)); ?> -getValue())) : ?> - escape($view['formatter']->arrayToString($fieldValue->getValue())); ?> - - escape($fieldValue->getValue()); ?> - \ No newline at end of file diff --git a/Views/CustomItem/detail.html.php b/Views/CustomItem/detail.html.php deleted file mode 100644 index 25b27e74e..000000000 --- a/Views/CustomItem/detail.html.php +++ /dev/null @@ -1,125 +0,0 @@ -extend('MauticCoreBundle:Default:content.html.php'); -$view['slots']->set('mauticContent', 'customItem'); -$view['slots']->set('headerTitle', $item->getName()); -$view['slots']->set('actions', $view->render('MauticCoreBundle:Helper:page_actions.html.php', [ - 'item' => $item, -])); -?> - - -
    - -
    -
    - -
    -
    -
    -
    escape($item->getCustomObject()->getNameSingular()); ?>
    -
    -
    - render('MauticCoreBundle:Helper:publishstatus_badge.html.php', ['entity' => $item]); ?> -
    -
    -
    - - -
    -
    -
    - - - render( - 'MauticCoreBundle:Helper:details.html.php', - ['entity' => $item] -); ?> - getCustomFieldValues() as $fieldValue) : ?> - - - - - - -
    escape($fieldValue->getCustomField()->getName()); ?> - render('CustomObjectsBundle:CustomField:value.html.php', ['fieldValue' => $fieldValue]); ?> -
    -
    -
    -
    -
    - - -
    - - - - -
    -
    -
    -
    -
    -
    -
    - - trans('custom.item.links.in.time'); ?> -
    -
    -
    - render( - 'MauticCoreBundle:Helper:graph_dateselect.html.php', - ['dateRangeForm' => $dateRangeForm, 'class' => 'pull-right'] -); ?> -
    -
    -
    - render( - 'MauticCoreBundle:Helper:chart.html.php', - ['chartData' => $stats, 'chartType' => 'line', 'chartHeight' => 300] -); ?> -
    -
    -
    -
    -
    - - getCustomContent('details.stats.graph.below', $mauticTemplateVars); ?> -
    - - - - - - -
    -
    - -
    - getCustomContent('tabs.content', $mauticTemplateVars); ?> -
    - -
    - - -
    - - render('MauticCoreBundle:Helper:recentactivity.html.php', ['logs' => $logs]); ?> -
    - -
    diff --git a/Views/CustomItem/form.html.php b/Views/CustomItem/form.html.php deleted file mode 100644 index c39a6f0b7..000000000 --- a/Views/CustomItem/form.html.php +++ /dev/null @@ -1,71 +0,0 @@ -extend('MauticCoreBundle:Default:content.html.php'); - -$view['slots']->set('mauticContent', 'customItem'); - -if ($entity->getId()) { - $header = $view['translator']->trans( - 'custom.item.edit', - [ - '%object%' => $view['translator']->trans($customObject->getNameSingular()), - '%item%' => $view['translator']->trans($entity->getName()), - ] - ); -} else { - $header = $view['translator']->trans( - 'custom.item.new', - ['%object%' => $view['translator']->trans($customObject->getNameSingular())] - ); -} - -$view['slots']->set('headerTitle', $header); - -$hideCategories = CustomObject::TYPE_RELATIONSHIP === $customObject->getType() ? 'hide' : null; -?> - -start($form); ?> - - -
    - -
    -
    -
    -
    - rowIfExists($form, 'name'); ?> - row($form['custom_field_values']); ?> - row($form['contact_id']); ?> -
    - getRelationshipObject() && !empty($form['contact_id']->vars['value'])) : ?> -
    -
    -
    -

    - trans( - 'custom.item.new', - ['%object%' => $view['translator']->trans($customObject->getRelationshipObject()->getNameSingular())] -); ?> -

    -
    -
    - rowIfExists($form, 'child_custom_field_values'); ?> -
    -
    -
    - -
    -
    -
    -
    -
    - row($form['category']); ?> - row($form['isPublished']); ?> -
    -
    -
    - -end($form); ?> diff --git a/Views/CustomItem/index.html.php b/Views/CustomItem/index.html.php deleted file mode 100644 index a8cf67cb5..000000000 --- a/Views/CustomItem/index.html.php +++ /dev/null @@ -1,27 +0,0 @@ -extend('MauticCoreBundle:Default:content.html.php'); - - $view['slots']->set('mauticContent', 'customItem'); - $view['slots']->set('headerTitle', $customObject->getName()); - $view['slots']->set('actions', $view->render('MauticCoreBundle:Helper:page_actions.html.php')); -} -?> - -
    -
    - render( - 'MauticCoreBundle:Helper:list_toolbar.html.php', - [ - 'searchValue' => $searchValue, - 'action' => $currentRoute, - 'target' => '#'.$namespace, - 'overlayDisabled' => $lookup, - ] -); ?> -
    - output('_content'); ?> -
    -
    -
    diff --git a/Views/CustomItem/list.html.php b/Views/CustomItem/list.html.php deleted file mode 100644 index 317d6deb4..000000000 --- a/Views/CustomItem/list.html.php +++ /dev/null @@ -1,124 +0,0 @@ -extend('CustomObjectsBundle:CustomItem:index.html.php'); -} - -$target = '#'.$namespace; -$routeSelf = $view['router']->path( - CustomItemRouteProvider::ROUTE_LIST, - [ - 'objectId' => $customObject->getId(), - 'filterEntityId' => $filterEntityId, - 'filterEntityType' => $filterEntityType, - 'lookup' => $lookup, - 'tmpl' => 'list', - ] -); -?> - -
    - - - - render( - 'MauticCoreBundle:Helper:tableheader.html.php', - [ - 'checkall' => 'true', - 'target' => $target, - 'langVar' => 'custom.item', - 'routeBase' => 'custom_item', - 'baseUrl' => $routeSelf, - ] -); - - echo $view->render( - 'MauticCoreBundle:Helper:tableheader.html.php', - [ - 'sessionVar' => $sessionVar, - 'orderBy' => CustomItem::TABLE_ALIAS.'.name', - 'text' => 'mautic.core.name', - 'class' => 'col-custom_item_name', - 'baseUrl' => $routeSelf, - 'target' => $target, - ] - ); - - echo $view->render( - 'MauticCoreBundle:Helper:tableheader.html.php', - [ - 'sessionVar' => $sessionVar, - 'orderBy' => CustomItem::TABLE_ALIAS.'.id', - 'text' => 'mautic.core.id', - 'default' => true, - 'baseUrl' => $routeSelf, - 'target' => $target, - ] - ); - ?> - - getColumnLabels() as $columnLabel): ?> - render('MauticCoreBundle:Helper:tableheader.html.php', ['text' => $columnLabel]); ?> - - - - - - - - - - - - getFields($item->getId()) as $fieldValue): ?> - - - - - - -
    - render('MauticCoreBundle:Helper:list_actions.html.php', ['item' => $item]); ?> - -
    - render( - 'MauticCoreBundle:Helper:publishstatus_icon.html.php', - [ - 'item' => $item, - 'model' => 'custom.item', - ] - ) : ''; ?> - - getName(); ?> - -
    -
    getId(); ?> - render('CustomObjectsBundle:CustomField:value.html.php', ['fieldValue' => $fieldValue]); ?> -
    -
    - - - render('MauticCoreBundle:Helper:noresults.html.php', ['tip' => $lookup ? 'custom.item.link.noresults.tip' : 'custom.object.noresults.tip']); ?> - diff --git a/Views/CustomObject/Form/Panel/_field.html.php b/Views/CustomObject/Form/Panel/_field.html.php deleted file mode 100644 index 97841a964..000000000 --- a/Views/CustomObject/Form/Panel/_field.html.php +++ /dev/null @@ -1,52 +0,0 @@ -vars['data']; -$customField->vars['index'] = $customField->vars['name']; -$order = (int) $customField->vars['value']->getOrder(); -$deleted = !empty($_POST['custom_object']['customFields'][$order]['deleted']) ? 'style="display:none;"' : ''; - -$panelId = !empty($panelId) ? $panelId : (int) $customField->vars['value']->getOrder(); -?> -
    > - -
    - - - - - - - -
    - -
    -
    -
    - row($customField['defaultValue']); ?> -
    -
    -
    -
    - rest($customField); ?> -
    - -
    \ No newline at end of file diff --git a/Views/CustomObject/Form/Panel/checkbox_group.html.php b/Views/CustomObject/Form/Panel/checkbox_group.html.php deleted file mode 100644 index 14616e6fc..000000000 --- a/Views/CustomObject/Form/Panel/checkbox_group.html.php +++ /dev/null @@ -1,5 +0,0 @@ -extend('CustomObjectsBundle:CustomObject:Form\\Panel\\_field.html.php'); diff --git a/Views/CustomObject/Form/Panel/country.html.php b/Views/CustomObject/Form/Panel/country.html.php deleted file mode 100644 index 14616e6fc..000000000 --- a/Views/CustomObject/Form/Panel/country.html.php +++ /dev/null @@ -1,5 +0,0 @@ -extend('CustomObjectsBundle:CustomObject:Form\\Panel\\_field.html.php'); diff --git a/Views/CustomObject/Form/Panel/date.html.php b/Views/CustomObject/Form/Panel/date.html.php deleted file mode 100644 index 14616e6fc..000000000 --- a/Views/CustomObject/Form/Panel/date.html.php +++ /dev/null @@ -1,5 +0,0 @@ -extend('CustomObjectsBundle:CustomObject:Form\\Panel\\_field.html.php'); diff --git a/Views/CustomObject/Form/Panel/datetime.html.php b/Views/CustomObject/Form/Panel/datetime.html.php deleted file mode 100644 index 14616e6fc..000000000 --- a/Views/CustomObject/Form/Panel/datetime.html.php +++ /dev/null @@ -1,5 +0,0 @@ -extend('CustomObjectsBundle:CustomObject:Form\\Panel\\_field.html.php'); diff --git a/Views/CustomObject/Form/Panel/email.html.php b/Views/CustomObject/Form/Panel/email.html.php deleted file mode 100644 index 14616e6fc..000000000 --- a/Views/CustomObject/Form/Panel/email.html.php +++ /dev/null @@ -1,5 +0,0 @@ -extend('CustomObjectsBundle:CustomObject:Form\\Panel\\_field.html.php'); diff --git a/Views/CustomObject/Form/Panel/hidden.html.php b/Views/CustomObject/Form/Panel/hidden.html.php deleted file mode 100644 index 14616e6fc..000000000 --- a/Views/CustomObject/Form/Panel/hidden.html.php +++ /dev/null @@ -1,5 +0,0 @@ -extend('CustomObjectsBundle:CustomObject:Form\\Panel\\_field.html.php'); diff --git a/Views/CustomObject/Form/Panel/html_area.html.php b/Views/CustomObject/Form/Panel/html_area.html.php deleted file mode 100644 index 14616e6fc..000000000 --- a/Views/CustomObject/Form/Panel/html_area.html.php +++ /dev/null @@ -1,5 +0,0 @@ -extend('CustomObjectsBundle:CustomObject:Form\\Panel\\_field.html.php'); diff --git a/Views/CustomObject/Form/Panel/int.html.php b/Views/CustomObject/Form/Panel/int.html.php deleted file mode 100644 index 14616e6fc..000000000 --- a/Views/CustomObject/Form/Panel/int.html.php +++ /dev/null @@ -1,5 +0,0 @@ -extend('CustomObjectsBundle:CustomObject:Form\\Panel\\_field.html.php'); diff --git a/Views/CustomObject/Form/Panel/multiselect.html.php b/Views/CustomObject/Form/Panel/multiselect.html.php deleted file mode 100644 index 14616e6fc..000000000 --- a/Views/CustomObject/Form/Panel/multiselect.html.php +++ /dev/null @@ -1,5 +0,0 @@ -extend('CustomObjectsBundle:CustomObject:Form\\Panel\\_field.html.php'); diff --git a/Views/CustomObject/Form/Panel/phone.html.php b/Views/CustomObject/Form/Panel/phone.html.php deleted file mode 100644 index 14616e6fc..000000000 --- a/Views/CustomObject/Form/Panel/phone.html.php +++ /dev/null @@ -1,5 +0,0 @@ -extend('CustomObjectsBundle:CustomObject:Form\\Panel\\_field.html.php'); diff --git a/Views/CustomObject/Form/Panel/radio_group.html.php b/Views/CustomObject/Form/Panel/radio_group.html.php deleted file mode 100644 index 14616e6fc..000000000 --- a/Views/CustomObject/Form/Panel/radio_group.html.php +++ /dev/null @@ -1,5 +0,0 @@ -extend('CustomObjectsBundle:CustomObject:Form\\Panel\\_field.html.php'); diff --git a/Views/CustomObject/Form/Panel/select.html.php b/Views/CustomObject/Form/Panel/select.html.php deleted file mode 100644 index 14616e6fc..000000000 --- a/Views/CustomObject/Form/Panel/select.html.php +++ /dev/null @@ -1,5 +0,0 @@ -extend('CustomObjectsBundle:CustomObject:Form\\Panel\\_field.html.php'); diff --git a/Views/CustomObject/Form/Panel/text.html.php b/Views/CustomObject/Form/Panel/text.html.php deleted file mode 100644 index 14616e6fc..000000000 --- a/Views/CustomObject/Form/Panel/text.html.php +++ /dev/null @@ -1,5 +0,0 @@ -extend('CustomObjectsBundle:CustomObject:Form\\Panel\\_field.html.php'); diff --git a/Views/CustomObject/Form/Panel/textarea.html.php b/Views/CustomObject/Form/Panel/textarea.html.php deleted file mode 100644 index 14616e6fc..000000000 --- a/Views/CustomObject/Form/Panel/textarea.html.php +++ /dev/null @@ -1,5 +0,0 @@ -extend('CustomObjectsBundle:CustomObject:Form\\Panel\\_field.html.php'); diff --git a/Views/CustomObject/Form/Panel/url.html.php b/Views/CustomObject/Form/Panel/url.html.php deleted file mode 100644 index 14616e6fc..000000000 --- a/Views/CustomObject/Form/Panel/url.html.php +++ /dev/null @@ -1,5 +0,0 @@ -extend('CustomObjectsBundle:CustomObject:Form\\Panel\\_field.html.php'); diff --git a/Views/CustomObject/_form-fields.html.php b/Views/CustomObject/_form-fields.html.php deleted file mode 100644 index 8f92e0006..000000000 --- a/Views/CustomObject/_form-fields.html.php +++ /dev/null @@ -1,24 +0,0 @@ -children['customFields']->getIterator() as $customField): - $customFieldEntity = $customField->vars['data']; - if (!in_array($customFieldEntity->getId(), $deletedFields, true)) : - echo $view->render( - "CustomObjectsBundle:CustomObject:Form\\Panel\\{$customFieldEntity->getType()}.html.php", - [ - 'customField' => $customField, - 'customObject' => $customObject, - 'panelId' => $panelId ?? null, - ] - ); - endif; -endforeach; -$form->children['customFields']->setRendered(); diff --git a/Views/CustomObject/detail.html.php b/Views/CustomObject/detail.html.php deleted file mode 100644 index f5d9072e4..000000000 --- a/Views/CustomObject/detail.html.php +++ /dev/null @@ -1,149 +0,0 @@ -extend('MauticCoreBundle:Default:content.html.php'); -$view['slots']->set('mauticContent', 'customObject'); -$view['slots']->set('headerTitle', $customObject->getNameSingular()); -$view['slots']->set( - 'actions', - $view->render( - 'MauticCoreBundle:Helper:page_actions.html.php', - ['item' => $customObject] - ) -); - -$view['slots']->set( - 'publishStatus', - $view->render('MauticCoreBundle:Helper:publishstatus_badge.html.php', ['entity' => $customObject]) -); -?> - - -
    - -
    -
    - -
    -
    -
    -
    -
    -
    - - - -
    -
    -
    - - - render( - 'MauticCoreBundle:Helper:details.html.php', - ['entity' => $customObject] -); ?> - -
    -
    -
    -
    - -
    - - -
    - - - - -
    -
    -
    -
    -
    -
    -
    - - trans('custom.item.links.in.time'); ?> -
    -
    -
    - render( - 'MauticCoreBundle:Helper:graph_dateselect.html.php', - ['dateRangeForm' => $dateRangeForm, 'class' => 'pull-right'] -); ?> -
    -
    -
    - render( - 'MauticCoreBundle:Helper:chart.html.php', - ['chartData' => $stats, 'chartType' => 'line', 'chartHeight' => 300] -); ?> -
    -
    -
    -
    -
    - - getCustomContent('details.stats.graph.below', $mauticTemplateVars); ?> - - - - - -
    - -
    - - -
    -
      - getCustomFields() as $field) : ?> -
    • -
      -
      - isRequired() ? 'mautic.core.required' - : 'mautic.core.not_required'; ?> -

      -

      -
      -
      -
      getLabel(); ?>
      -
      -
      - getTypeObject()->getName(); ?> -
      -
      -
    • - -
    -
    - - -
    - -
    - - -
    - - render('MauticCoreBundle:Helper:recentactivity.html.php', ['logs' => $logs]); ?> -
    - -
    diff --git a/Views/CustomObject/form.html.php b/Views/CustomObject/form.html.php deleted file mode 100644 index 09459bb5a..000000000 --- a/Views/CustomObject/form.html.php +++ /dev/null @@ -1,125 +0,0 @@ -extend('MauticCoreBundle:Default:content.html.php'); - -$view['slots']->set('mauticContent', 'customObject'); - -if ($customObject->getId()) { - $header = $view['translator']->trans( - $customObject->getId() ? 'custom.object.edit' : 'custom.object.new', - ['%name%' => $view['translator']->trans($customObject->getName())] - ); -} else { - $header = $view['translator']->trans('custom.object.new'); -} - -$view['slots']->set('headerTitle', $header); -?> - -start($form); ?> - - -
    - -
    -
    -
    - - - -
    -
    -
    -
    - row($form['nameSingular']); ?> - row($form['namePlural']); ?> - -
    -
    - row($form['alias']); ?> -
    -
    -
    -
    - row($form['description']); ?> -
    -
    -
    - -
    - render('MauticFormBundle:Builder:style.html.php'); ?> -
    -
    -
    - -
    -
    -
    - -
    - -
    -

    trans('mautic.form.form.addfield'); ?>

    -
    - -
    -
    - -
    - -
    - -
    - -
    - -
    -
    - row($form['type']); ?> - row($form['masterObject']); ?> - row($form['category']); ?> - row($form['isPublished']); ?> -
    -
    - -
    - -end($form); ?> - -append( - 'modal', - $view->render( - 'MauticCoreBundle:Helper:modal.html.php', - [ - 'id' => 'objectFieldModal', - 'header' => false, - 'footerButtons' => true, - ] - ) - ); diff --git a/Views/CustomObject/index.html.php b/Views/CustomObject/index.html.php deleted file mode 100644 index 747f9e08f..000000000 --- a/Views/CustomObject/index.html.php +++ /dev/null @@ -1,21 +0,0 @@ -extend('MauticCoreBundle:Default:content.html.php'); - -$view['slots']->set('mauticContent', 'customObject'); -$view['slots']->set('headerTitle', $view['translator']->trans('custom.object.title')); -$view['slots']->set('actions', $view->render('MauticCoreBundle:Helper:page_actions.html.php')); -?> - -
    - render( - 'MauticCoreBundle:Helper:list_toolbar.html.php', - [ - // 'searchValue' => $searchValue, - // 'action' => $currentRoute, - ] -); ?> -
    - output('_content'); ?> -
    -
    diff --git a/Views/CustomObject/list.html.php b/Views/CustomObject/list.html.php deleted file mode 100644 index d493f775b..000000000 --- a/Views/CustomObject/list.html.php +++ /dev/null @@ -1,94 +0,0 @@ -extend('CustomObjectsBundle:CustomObject:index.html.php'); -} -?> - -
    - - - - render( - 'MauticCoreBundle:Helper:tableheader.html.php', - [ - 'checkall' => 'true', - 'target' => '#custom-objects-table', - 'langVar' => 'custom.object', - 'routeBase' => 'custom_object', - ] -); - - echo $view->render( - 'MauticCoreBundle:Helper:tableheader.html.php', - [ - 'sessionVar' => $sessionVar, - 'orderBy' => CustomObject::TABLE_ALIAS.'.namePlural', - 'text' => 'mautic.core.name', - 'class' => 'col-custom_object_-name', - ] - ); - - echo $view->render( - 'MauticCoreBundle:Helper:tableheader.html.php', - [ - 'sessionVar' => $sessionVar, - 'orderBy' => CustomObject::TABLE_ALIAS.'.id', - 'text' => 'mautic.core.id', - 'default' => true, - ] - ); - ?> - - - - - - - - - - - -
    - render('MauticCoreBundle:Helper:list_actions.html.php', ['item' => $item]); ?> - -
    - render( - 'MauticCoreBundle:Helper:publishstatus_icon.html.php', - [ - 'item' => $item, - 'model' => 'custom.object', - ] - ); ?> - - getName(); ?> - -
    - getDescription()): ?> -
    - getDescription(); ?> -
    - -
    getId(); ?>
    -
    - - - render('MauticCoreBundle:Helper:noresults.html.php', ['tip' => 'custom.object.noresults.tip']); ?> - diff --git a/Views/FormTheme/FieldValueCondition/campaign_condition_field_value_widget.html.php b/Views/FormTheme/FieldValueCondition/campaign_condition_field_value_widget.html.php deleted file mode 100644 index 3c1b71b88..000000000 --- a/Views/FormTheme/FieldValueCondition/campaign_condition_field_value_widget.html.php +++ /dev/null @@ -1,15 +0,0 @@ - -
    -
    - row($form['field']); ?> -
    -
    - row($form['operator']); ?> -
    -
    - row($form['value']); ?> -
    -
    - diff --git a/Views/SubscribedEvents/Tab/content.html.php b/Views/SubscribedEvents/Tab/content.html.php deleted file mode 100644 index f4d974389..000000000 --- a/Views/SubscribedEvents/Tab/content.html.php +++ /dev/null @@ -1,50 +0,0 @@ - -
    -
    -
    - render( - 'MauticCoreBundle:Helper:search.html.php', - [ - 'searchValue' => $searchValue, - 'action' => $searchRoute, - 'searchId' => $searchId, - 'target' => '#'.$namespace, - 'searchHelp' => '', - ] -); ?> -
    - -
    -
    - Loading... -
    -
    - \ No newline at end of file diff --git a/Views/SubscribedEvents/Tab/link.html.php b/Views/SubscribedEvents/Tab/link.html.php deleted file mode 100644 index a3ca11442..000000000 --- a/Views/SubscribedEvents/Tab/link.html.php +++ /dev/null @@ -1,15 +0,0 @@ - -
  • - - - - - - - escape($view['translator']->trans($title)); ?> - -
  • \ No newline at end of file diff --git a/Views/SubscribedEvents/Tab/modal.html.php b/Views/SubscribedEvents/Tab/modal.html.php deleted file mode 100644 index cb1261e42..000000000 --- a/Views/SubscribedEvents/Tab/modal.html.php +++ /dev/null @@ -1,8 +0,0 @@ -append('modal', $view->render('MauticCoreBundle:Helper:modal.html.php', [ - 'id' => 'customItemLookupModal', - 'size' => 'xl', -])); diff --git a/Views/SubscribedEvents/Timeline/link.html.php b/Views/SubscribedEvents/Timeline/link.html.php deleted file mode 100644 index 89cfec02f..000000000 --- a/Views/SubscribedEvents/Timeline/link.html.php +++ /dev/null @@ -1,17 +0,0 @@ - -
    - -
    - trans('mautic.core.createdby'); ?> -
    -
    - - - -
    - -
    From 962172aa309dcdbeeb2ec5fc5373b77bbf6f0d38 Mon Sep 17 00:00:00 2001 From: Vamshi Date: Wed, 4 Feb 2026 15:47:53 +0530 Subject: [PATCH 2/4] handled entities --- Config/services.php | 11 ----------- Repository/CustomFieldRepository.php | 6 +++++- Repository/CustomItemExportSchedulerRepository.php | 5 +++++ Repository/CustomItemRepository.php | 5 +++++ Repository/CustomItemXrefContactRepository.php | 5 +++++ Repository/CustomItemXrefCustomItemRepository.php | 5 +++++ Repository/CustomObjectRepository.php | 6 ++++++ 7 files changed, 31 insertions(+), 12 deletions(-) diff --git a/Config/services.php b/Config/services.php index 87730e196..766e514fa 100644 --- a/Config/services.php +++ b/Config/services.php @@ -20,17 +20,6 @@ $services->load('MauticPlugin\\CustomObjectsBundle\\', '../') ->exclude('../{'.implode(',', array_merge(MauticCoreExtension::DEFAULT_EXCLUDES, $excludes)).'}'); - - $services->load('MauticPlugin\\CustomObjectsBundle\\Entity\\', '../Entity/*.php') - ->exclude([ - '../Entity/CustomField/*.php', - '../Entity/AbstractCustomFieldValue.php', - '../Entity/CustomFieldFactory.php', - '../Entity/CustomFieldValueInterface.php', - '../Entity/CustomItemXrefInterface.php', - '../Entity/UniqueEntityInterface.php', - ]) - ->tag(Doctrine\Bundle\DoctrineBundle\DependencyInjection\Compiler\ServiceRepositoryCompilerPass::REPOSITORY_SERVICE_TAG); $services->load('MauticPlugin\\CustomObjectsBundle\\Repository\\', '../Repository/*Repository.php') ->tag(Doctrine\Bundle\DoctrineBundle\DependencyInjection\Compiler\ServiceRepositoryCompilerPass::REPOSITORY_SERVICE_TAG); diff --git a/Repository/CustomFieldRepository.php b/Repository/CustomFieldRepository.php index 936fba575..45fa9fbca 100644 --- a/Repository/CustomFieldRepository.php +++ b/Repository/CustomFieldRepository.php @@ -7,12 +7,16 @@ use Doctrine\Common\Collections\ArrayCollection; use Mautic\CoreBundle\Entity\CommonRepository; use MauticPlugin\CustomObjectsBundle\Entity\CustomField; - +use Doctrine\Persistence\ManagerRegistry; /** * @extends CommonRepository */ class CustomFieldRepository extends CommonRepository { + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, CustomField::class); + } public function isAliasUnique(string $alias, ?int $id = null): bool { $q = $this->createQueryBuilder(CustomField::TABLE_ALIAS); diff --git a/Repository/CustomItemExportSchedulerRepository.php b/Repository/CustomItemExportSchedulerRepository.php index 3d22147d9..cb0d0289e 100644 --- a/Repository/CustomItemExportSchedulerRepository.php +++ b/Repository/CustomItemExportSchedulerRepository.php @@ -6,10 +6,15 @@ use Mautic\CoreBundle\Entity\CommonRepository; use MauticPlugin\CustomObjectsBundle\Entity\CustomItemExportScheduler; +use Doctrine\Persistence\ManagerRegistry; /** * @extends CommonRepository */ class CustomItemExportSchedulerRepository extends CommonRepository { + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, CustomItemExportScheduler::class); + } } diff --git a/Repository/CustomItemRepository.php b/Repository/CustomItemRepository.php index e5bbe888e..c8f9748fd 100644 --- a/Repository/CustomItemRepository.php +++ b/Repository/CustomItemRepository.php @@ -11,12 +11,17 @@ use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; use MauticPlugin\CustomObjectsBundle\Entity\CustomItemXrefContact; use MauticPlugin\CustomObjectsBundle\Entity\CustomItemXrefCustomItem; +use Doctrine\Persistence\ManagerRegistry; /** * @extends CommonRepository */ class CustomItemRepository extends CommonRepository { use DbalQueryTrait; + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, CustomItem::class); + } public function countItemsLinkedToContact(CustomObject $customObject, Lead $contact): int { diff --git a/Repository/CustomItemXrefContactRepository.php b/Repository/CustomItemXrefContactRepository.php index 9151d3a20..01842a14f 100644 --- a/Repository/CustomItemXrefContactRepository.php +++ b/Repository/CustomItemXrefContactRepository.php @@ -10,11 +10,16 @@ use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; use MauticPlugin\CustomObjectsBundle\Entity\CustomItemXrefContact; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; +use Doctrine\Persistence\ManagerRegistry; /** * @extends CommonRepository */ class CustomItemXrefContactRepository extends CommonRepository { + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, CustomItemXrefContact::class); + } /** * @return int[] */ diff --git a/Repository/CustomItemXrefCustomItemRepository.php b/Repository/CustomItemXrefCustomItemRepository.php index 036186771..e4085543d 100644 --- a/Repository/CustomItemXrefCustomItemRepository.php +++ b/Repository/CustomItemXrefCustomItemRepository.php @@ -6,11 +6,16 @@ use Mautic\CoreBundle\Entity\CommonRepository; use MauticPlugin\CustomObjectsBundle\Entity\CustomItemXrefCustomItem; +use Doctrine\Persistence\ManagerRegistry; /** * @extends CommonRepository */ class CustomItemXrefCustomItemRepository extends CommonRepository { + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, CustomItemXrefCustomItem::class); + } public function deleteAllLinksForCustomItem(int $customItemId): void { $queryBuilder = $this->createQueryBuilder(CustomItemXrefCustomItem::TABLE_ALIAS); diff --git a/Repository/CustomObjectRepository.php b/Repository/CustomObjectRepository.php index 2f503cd84..0833b270f 100644 --- a/Repository/CustomObjectRepository.php +++ b/Repository/CustomObjectRepository.php @@ -10,11 +10,17 @@ use Mautic\LeadBundle\Entity\LeadList; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; use MauticPlugin\CustomObjectsBundle\Entity\CustomField; +use Doctrine\Persistence\ManagerRegistry; /** * @extends CommonRepository */ class CustomObjectRepository extends CommonRepository { + + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, CustomObject::class); + } public function checkAliasExists(string $alias, ?int $id = null): bool { $q = $this->createQueryBuilder(CustomObject::TABLE_ALIAS); From 983ad20ca41747dc565a3ef2ab794e37582b9e01 Mon Sep 17 00:00:00 2001 From: Vamshi Date: Wed, 4 Feb 2026 17:27:43 +0530 Subject: [PATCH 3/4] handled tested --- .../AbstractApiPlatformFunctionalTest.php | 4 +- .../CustomFieldOptionFunctionalTest.php | 4 +- .../ApiPlatform/CustomItemFunctionalTest.php | 4 +- ...CustomItemListControllerShownFieldTest.php | 2 +- .../Traits/FixtureObjectsTrait.php | 2 +- .../EventListener/ApiSubscriberTest.php | 22 +++---- .../EventListener/CampaignConditionTest.php | 8 +-- .../EventListener/CampaignSubscriberTest.php | 10 +-- .../EventListener/ContactSubscriberTest.php | 12 ++-- .../FilterOperatorSubscriberTest.php | 2 +- .../EventListener/ImportSubscriberTest.php | 49 ++++++++------- .../EventListener/TokenSubscriberTest.php | 20 +++--- .../Helper/QueryFilterHelperTest.php | 6 +- .../CustomFieldFilterQueryBuilderTest.php | 6 +- .../CustomItemRelationQueryBuilderTest.php | 8 +-- ...NegativeOperatorFilterQueryBuilderTest.php | 2 +- Tests/Functional/Token/EmailTokenTest.php | 10 +-- ...stomObjectDynamicContentFunctionalTest.php | 8 +-- Tests/Functional/UpsertFunctionalTest.php | 8 +-- .../Command/CustomItemExportCommandTest.php | 2 +- Tests/Unit/Controller/ControllerTestCase.php | 29 ++++----- .../CustomField/FormControllerTest.php | 62 ++++++++++++++----- .../CustomItem/BatchDeleteControllerTest.php | 31 ++++++++-- .../CustomItem/CancelControllerTest.php | 27 ++++++++ .../CustomItem/DeleteControllerTest.php | 32 ++++++++-- .../CustomItem/FormControllerTest.php | 27 ++++++++ .../CustomItem/LinkControllerTest.php | 4 +- .../CustomItem/ListControllerTest.php | 26 +++++++- .../CustomItem/SaveControllerTest.php | 27 +++++++- .../CustomItem/ViewControllerTest.php | 26 +++++++- .../CustomObject/CancelControllerTest.php | 27 ++++++++ .../CustomObject/DeleteControllerTest.php | 33 ++++++++-- .../CustomObject/FormControllerTest.php | 31 +++++++++- .../CustomObject/ListControllerTest.php | 32 ++++++++-- .../CustomObject/SaveControllerTest.php | 37 ++++++++--- .../CustomObject/ViewControllerTest.php | 26 +++++++- .../AbstractCustomFieldTypeTest.php | 4 +- .../AbstractMultivalueTypeTest.php | 4 +- .../CustomFieldType/AbstractTextTypeTest.php | 4 +- .../Unit/CustomFieldType/CountryTypeTest.php | 4 +- .../Unit/CustomFieldType/DateTimeTypeTest.php | 4 +- Tests/Unit/CustomFieldType/DateTypeTest.php | 4 +- Tests/Unit/CustomFieldType/EmailTypeTest.php | 4 +- Tests/Unit/CustomFieldType/IntTypeTest.php | 4 +- .../CustomFieldType/MultiselectTypeTest.php | 4 +- Tests/Unit/CustomFieldType/PhoneTypeTest.php | 4 +- Tests/Unit/CustomFieldType/SelectTypeTest.php | 4 +- Tests/Unit/CustomFieldType/UrlTypeTest.php | 4 +- Tests/Unit/CustomObjectTestCase.php | 2 +- Tests/Unit/Entity/CustomFieldTest.php | 24 +++---- Tests/Unit/Entity/CustomItemTest.php | 12 ++-- .../Unit/EventListener/ApiSubscriberTest.php | 6 +- .../EventListener/AssetsSubscriberTest.php | 30 ++++----- .../EventListener/CampaignSubscriberTest.php | 4 +- .../EventListener/ContactSubscriberTest.php | 4 +- .../ContactTabSubscriberTest.php | 6 +- .../CustomFieldPostLoadSubscriberTest.php | 6 +- .../CustomItemButtonSubscriberTest.php | 6 +- .../CustomItemPostSaveSubscriberTest.php | 4 +- .../CustomItemTabSubscriberTest.php | 6 +- .../FilterOperatorSubscriberTest.php | 6 +- .../EventListener/ImportSubscriberTest.php | 20 +++--- .../Unit/EventListener/MenuSubscriberTest.php | 4 +- .../EventListener/ReportSubscriberTest.php | 11 ++-- ...ntFiltersChoicesGenerateSubscriberTest.php | 6 +- .../SerializerSubscriberTest.php | 4 +- .../EventListener/TokenSubscriberTest.php | 6 +- .../CampaignConditionFieldValueTypeTest.php | 6 +- .../Helper/LockFlashMessageHelperTest.php | 4 +- .../Unit/Model/CustomFieldValueModelTest.php | 4 +- .../Unit/Model/CustomItemImportModelTest.php | 26 +++++--- Tests/Unit/Model/CustomItemModelTest.php | 12 +++- .../Model/CustomItemXrefContactModelTest.php | 4 +- Tests/Unit/Model/CustomObjectModelTest.php | 19 ++++-- .../Provider/CustomFieldTypeProviderTest.php | 5 +- Tests/Unit/Provider/SessionProviderTest.php | 16 +++-- .../Unit/Report/ReportColumnsBuilderTest.php | 6 +- .../CustomObjectPermissionsTest.php | 6 +- 78 files changed, 689 insertions(+), 300 deletions(-) diff --git a/Tests/Functional/ApiPlatform/AbstractApiPlatformFunctionalTest.php b/Tests/Functional/ApiPlatform/AbstractApiPlatformFunctionalTest.php index 32ae1b8dd..2560d3b2b 100644 --- a/Tests/Functional/ApiPlatform/AbstractApiPlatformFunctionalTest.php +++ b/Tests/Functional/ApiPlatform/AbstractApiPlatformFunctionalTest.php @@ -52,7 +52,7 @@ protected function setPermission(User $user, string $permission, array $permissi ->getQuery() ->execute(); - $roleModel = self::$container->get('mautic.user.model.role'); + $roleModel = self::getContainer()->get('mautic.user.model.role'); $roleModel->setRolePermissions($role, $permissions); $this->em->persist($role); $this->em->flush(); @@ -60,7 +60,7 @@ protected function setPermission(User $user, string $permission, array $permissi // reset in-memory permission cache $property = (new ReflectionClass(CorePermissions::class))->getProperty('grantedPermissions'); $property->setAccessible(true); - $property->setValue(self::$container->get('mautic.security'), []); + $property->setValue(self::getContainer()->get('mautic.security'), []); } protected function createEntity(string $shortName, array $payload): Response diff --git a/Tests/Functional/ApiPlatform/CustomFieldOptionFunctionalTest.php b/Tests/Functional/ApiPlatform/CustomFieldOptionFunctionalTest.php index 81d331717..d3bc38bc6 100644 --- a/Tests/Functional/ApiPlatform/CustomFieldOptionFunctionalTest.php +++ b/Tests/Functional/ApiPlatform/CustomFieldOptionFunctionalTest.php @@ -9,7 +9,7 @@ use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; use MauticPlugin\CustomObjectsBundle\Helper\CsvHelper; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; final class CustomFieldOptionFunctionalTest extends AbstractApiPlatformFunctionalTest { @@ -80,7 +80,7 @@ private function createCustomObject(): CustomObject private function createField(CustomObject $customObject, User $user): CustomField { - $translatorMock = $this->createMock(TranslatorInterface::class); + $translatorMock = $this->createMock(Translator::class); $filterOperatorProviderMock = $this->createMock(FilterOperatorProviderInterface::class); $csvHelperMock = $this->createMock(CsvHelper::class); $customFieldType = new MultiselectType($translatorMock, $filterOperatorProviderMock, $csvHelperMock); diff --git a/Tests/Functional/ApiPlatform/CustomItemFunctionalTest.php b/Tests/Functional/ApiPlatform/CustomItemFunctionalTest.php index 0a7594a93..906149f5e 100644 --- a/Tests/Functional/ApiPlatform/CustomItemFunctionalTest.php +++ b/Tests/Functional/ApiPlatform/CustomItemFunctionalTest.php @@ -12,7 +12,7 @@ use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; use MauticPlugin\CustomObjectsBundle\Model\CustomItemModel; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; final class CustomItemFunctionalTest extends AbstractApiPlatformFunctionalTest { @@ -293,7 +293,7 @@ private function createCategory(): Category private function createCustomField(CustomObject $customObject): CustomField { - $translatorMock = $this->createMock(TranslatorInterface::class); + $translatorMock = $this->createMock(Translator::class); $filterOperatorProviderMock = $this->createMock(FilterOperatorProviderInterface::class); $customFieldType = new TextType($translatorMock, $filterOperatorProviderMock); $customField = new CustomField(); diff --git a/Tests/Functional/Controller/CustomItemListControllerShownFieldTest.php b/Tests/Functional/Controller/CustomItemListControllerShownFieldTest.php index bdf0ee8df..346b1e7ec 100644 --- a/Tests/Functional/Controller/CustomItemListControllerShownFieldTest.php +++ b/Tests/Functional/Controller/CustomItemListControllerShownFieldTest.php @@ -36,7 +36,7 @@ protected function setUp(): void { parent::setUp(); - $this->fieldFactory = self::$container->get('custom_object.custom_field_factory'); + $this->fieldFactory = self::getContainer()->get('custom_object.custom_field_factory'); } protected function beforeBeginTransaction(): void diff --git a/Tests/Functional/DataFixtures/Traits/FixtureObjectsTrait.php b/Tests/Functional/DataFixtures/Traits/FixtureObjectsTrait.php index 6bcae7748..9961459ea 100644 --- a/Tests/Functional/DataFixtures/Traits/FixtureObjectsTrait.php +++ b/Tests/Functional/DataFixtures/Traits/FixtureObjectsTrait.php @@ -125,7 +125,7 @@ private function getFixturesDirectory(): string private function skipIfMissingDependency(): void { - if (!self::$container->has('fidry_alice_data_fixtures.loader.doctrine')) { + if (!self::getContainer()->has('fidry_alice_data_fixtures.loader.doctrine')) { $this->markTestSkipped('This test requires the theofidry/alice-data-fixtures package'); } } diff --git a/Tests/Functional/EventListener/ApiSubscriberTest.php b/Tests/Functional/EventListener/ApiSubscriberTest.php index 862287795..a5dce5497 100644 --- a/Tests/Functional/EventListener/ApiSubscriberTest.php +++ b/Tests/Functional/EventListener/ApiSubscriberTest.php @@ -54,10 +54,10 @@ public function testCreatingContactWithCustomItemsWithUnexistingCustomObject(): $this->assertSame('Custom Object with alias = unicorn was not found', $responseData['errors'][0]['message']); /** @var CustomItemRepository $customItemRepository */ - $customItemRepository = self::$container->get('custom_item.repository'); + $customItemRepository = self::getContainer()->get('custom_item.repository'); /** @var LeadModel $contactModel */ - $contactModel = self::$container->get('mautic.lead.model.lead'); + $contactModel = self::getContainer()->get('mautic.lead.model.lead'); $this->assertNull($customItemRepository->findOneBy(['name' => 'Custom Item Created Via Contact API 2'])); $this->assertNull($contactModel->getRepository()->findOneBy(['email' => 'contact1@api.test'])); @@ -68,7 +68,7 @@ public function testCreatingContactWithCustomItemsWithUnexistingCustomObject(): */ public function testCreatingContactWithCustomItemsWithoutTheFlagToReturnCustomObjects(): void { - $customObject = $this->createCustomObjectWithAllFields(self::$container, 'Product'); + $customObject = $this->createCustomObjectWithAllFields(self::getContainer(), 'Product'); $contact = [ 'email' => 'contact1@api.test', @@ -109,7 +109,7 @@ public function testCreatingContactWithCustomItemsWithoutTheFlagToReturnCustomOb public function testCreatingContactWithCustomItemsButFieldDoesNotExist(): void { - $customObject = $this->createCustomObjectWithAllFields(self::$container, 'Product'); + $customObject = $this->createCustomObjectWithAllFields(self::getContainer(), 'Product'); $contact = [ 'email' => 'contact1@api.test', 'customObjects' => [ @@ -140,7 +140,7 @@ public function testCreatingContactWithCustomItemsButFieldDoesNotExist(): void public function testCreatingContactWithCustomItemsWithMultiselectAsString(): void { - $customObject = $this->createCustomObjectWithAllFields(self::$container, 'Product'); + $customObject = $this->createCustomObjectWithAllFields(self::getContainer(), 'Product'); $contact = [ 'email' => 'contact1@api.test', 'customObjects' => [ @@ -174,7 +174,7 @@ public function testCreatingContactWithCustomItemsWithMultiselectAsString(): voi public function testCreatingContactWithCustomItemsAndEditAndClearValues(): void { - $customObject = $this->createCustomObjectWithAllFields(self::$container, 'Product'); + $customObject = $this->createCustomObjectWithAllFields(self::getContainer(), 'Product'); $contact = [ 'email' => 'contact1@api.test', 'customObjects' => [ @@ -368,7 +368,7 @@ public function testCreatingContactWithCustomItemsWithDefaultValue(): void } }; - $customObject = $this->createCustomObjectWithAllFields(self::$container, 'Product', $configureFieldCallback); + $customObject = $this->createCustomObjectWithAllFields(self::getContainer(), 'Product', $configureFieldCallback); $contact = [ 'email' => 'contact1@api.test', 'customObjects' => [ @@ -422,7 +422,7 @@ public function testCreatingContactWithCustomItemsWithOverwrittenDefaultValue(): } }; - $customObject = $this->createCustomObjectWithAllFields(self::$container, 'Product', $configureFieldCallback); + $customObject = $this->createCustomObjectWithAllFields(self::getContainer(), 'Product', $configureFieldCallback); $contact = [ 'email' => 'contact1@api.test', 'customObjects' => [ @@ -472,7 +472,7 @@ public function testCreatingContactWithCustomItemsWithDefaultDateButEmptyValue() } }; - $customObject = $this->createCustomObjectWithAllFields(self::$container, 'Product', $configureFieldCallback); + $customObject = $this->createCustomObjectWithAllFields(self::getContainer(), 'Product', $configureFieldCallback); $contact = [ 'email' => 'contact1@api.test', 'customObjects' => [ @@ -507,7 +507,7 @@ public function testCreatingContactWithCustomItemsWithDefaultDateButEmptyValue() public function testEditingContactWithCustomItems(): void { - $customObject = $this->createCustomObjectWithAllFields(self::$container, 'Product'); + $customObject = $this->createCustomObjectWithAllFields(self::getContainer(), 'Product'); $contact = [ 'email' => 'contact1@api.test', @@ -619,7 +619,7 @@ public function testEditingContactWithCustomItems(): void public function testBatchCreatingContactWithCustomItems(): void { - $customObject = $this->createCustomObjectWithAllFields(self::$container, 'Product'); + $customObject = $this->createCustomObjectWithAllFields(self::getContainer(), 'Product'); $contacts = [ [ 'email' => 'contact3@api.test', diff --git a/Tests/Functional/EventListener/CampaignConditionTest.php b/Tests/Functional/EventListener/CampaignConditionTest.php index 3db5f5d36..782407945 100644 --- a/Tests/Functional/EventListener/CampaignConditionTest.php +++ b/Tests/Functional/EventListener/CampaignConditionTest.php @@ -18,15 +18,15 @@ class CampaignConditionTest extends MauticMysqlTestCase public function testConditionForm(): void { - $session = self::$container->get('session'); + $session = self::getContainer()->get('session'); // @phpstan-ignore-next-line Fixing "cannot serialize anonymous function in \Symfony\Component\HttpFoundation\Session\Storage\MockFileSessionStorage::save() $session->__construct(new MockArraySessionStorage()); - $sessionAuthenticationStrategy = self::$container->get('security.authentication.session_strategy'); + $sessionAuthenticationStrategy = self::getContainer()->get('security.authentication.session_strategy'); // @phpstan-ignore-next-line Prevent clearing CSRF token storage in \Symfony\Component\Security\Http\Session\SessionAuthenticationStrategy::onAuthentication() $sessionAuthenticationStrategy->__construct(SessionAuthenticationStrategy::MIGRATE); - $customObject = $this->createCustomObjectWithAllFields(self::$container, 'Campaign test object'); + $customObject = $this->createCustomObjectWithAllFields(self::getContainer(), 'Campaign test object'); $crawler = $this->client->request( Request::METHOD_GET, 's/campaigns/events/new', @@ -70,7 +70,7 @@ public function testConditionForm(): void public function testVerifyDataOperatorAttrIsAvailableForFields(): void { - $customObject = $this->createCustomObjectWithAllFields(self::$container, 'Campaign test object'); + $customObject = $this->createCustomObjectWithAllFields(self::getContainer(), 'Campaign test object'); $crawler = $this->client->request( Request::METHOD_GET, 's/campaigns/events/new', diff --git a/Tests/Functional/EventListener/CampaignSubscriberTest.php b/Tests/Functional/EventListener/CampaignSubscriberTest.php index d756c28a8..4ffae2a52 100644 --- a/Tests/Functional/EventListener/CampaignSubscriberTest.php +++ b/Tests/Functional/EventListener/CampaignSubscriberTest.php @@ -21,16 +21,16 @@ class CampaignSubscriberTest extends MauticMysqlTestCase public function testVariousConditions(): void { /** @var CustomItemModel $customItemModel */ - $customItemModel = self::$container->get('mautic.custom.model.item'); + $customItemModel = self::getContainer()->get('mautic.custom.model.item'); /** @var CustomFieldValueModel $customFieldValueModel */ - $customFieldValueModel = self::$container->get('mautic.custom.model.field.value'); + $customFieldValueModel = self::getContainer()->get('mautic.custom.model.field.value'); /** @var CampaignSubscriber $campaignSubscriber */ - $campaignSubscriber = self::$container->get('custom_item.campaign.subscriber'); + $campaignSubscriber = self::getContainer()->get('custom_item.campaign.subscriber'); $contact = $this->createContact('john@doe.email'); - $customObject = $this->createCustomObjectWithAllFields(self::$container, 'Campaign test object'); + $customObject = $this->createCustomObjectWithAllFields(self::getContainer(), 'Campaign test object'); $customItem = new CustomItem($customObject); $customItem->setName('Campaign test item'); @@ -313,7 +313,7 @@ private function createCampaignExecutionEvent( private function createContact(string $email): Lead { /** @var LeadModel $contactModel */ - $contactModel = self::$container->get('mautic.lead.model.lead'); + $contactModel = self::getContainer()->get('mautic.lead.model.lead'); $contact = new Lead(); $contact->setEmail($email); $contactModel->saveEntity($contact); diff --git a/Tests/Functional/EventListener/ContactSubscriberTest.php b/Tests/Functional/EventListener/ContactSubscriberTest.php index b0e95711a..01efdea32 100644 --- a/Tests/Functional/EventListener/ContactSubscriberTest.php +++ b/Tests/Functional/EventListener/ContactSubscriberTest.php @@ -28,16 +28,16 @@ protected function setUp(): void { parent::setUp(); - $this->customItemModel = self::$container->get('mautic.custom.model.item'); - $this->contactMerger = self::$container->get('mautic.lead.merger'); - $this->customItemXrefContactRepository = self::$container->get('custom_item.xref.contact.repository'); + $this->customItemModel = self::getContainer()->get('mautic.custom.model.item'); + $this->contactMerger = self::getContainer()->get('mautic.lead.merger'); + $this->customItemXrefContactRepository = self::getContainer()->get('custom_item.xref.contact.repository'); } public function testMergingContactsWhenLoserHasItemAndWinnerHasNot(): void { $winner = $this->createContact('john@doe.email'); $loser = $this->createContact('anna@muck.email'); - $customObject = $this->createCustomObjectWithAllFields(self::$container, 'Campaign test object'); + $customObject = $this->createCustomObjectWithAllFields(self::getContainer(), 'Campaign test object'); $customItem = new CustomItem($customObject); $customItem->setName('Campaign test item'); @@ -54,7 +54,7 @@ public function testMergingContactsWhenLoserHasItemAndWinnerTheSameToo(): void { $winner = $this->createContact('john@doe.email'); $loser = $this->createContact('anna@muck.email'); - $customObject = $this->createCustomObjectWithAllFields(self::$container, 'Campaign test object'); + $customObject = $this->createCustomObjectWithAllFields(self::getContainer(), 'Campaign test object'); $customItem = new CustomItem($customObject); $customItem->setName('Campaign test item'); @@ -71,7 +71,7 @@ public function testMergingContactsWhenLoserHasItemAndWinnerTheSameToo(): void private function createContact(string $email): Lead { /** @var LeadModel $contactModel */ - $contactModel = self::$container->get('mautic.lead.model.lead'); + $contactModel = self::getContainer()->get('mautic.lead.model.lead'); $contact = new Lead(); $contact->setEmail($email); $contactModel->saveEntity($contact); diff --git a/Tests/Functional/EventListener/FilterOperatorSubscriberTest.php b/Tests/Functional/EventListener/FilterOperatorSubscriberTest.php index 1b97d4363..3dd34a262 100644 --- a/Tests/Functional/EventListener/FilterOperatorSubscriberTest.php +++ b/Tests/Functional/EventListener/FilterOperatorSubscriberTest.php @@ -93,7 +93,7 @@ public function testCustomObjectSegmentFilterOperatorForDateField(): void $leadField = $this->createField('date_field', 'date'); - $fieldTypeProvider = self::$container->get('custom_field.type.provider'); + $fieldTypeProvider = self::getContainer()->get('custom_field.type.provider'); \assert($fieldTypeProvider instanceof CustomFieldTypeProvider); $objectType = $fieldTypeProvider->getType('date'); $dateField = $this->createCustomField('co_date_field', $objectType); diff --git a/Tests/Functional/EventListener/ImportSubscriberTest.php b/Tests/Functional/EventListener/ImportSubscriberTest.php index 4d3d50278..49a20224d 100644 --- a/Tests/Functional/EventListener/ImportSubscriberTest.php +++ b/Tests/Functional/EventListener/ImportSubscriberTest.php @@ -5,26 +5,27 @@ namespace MauticPlugin\CustomObjectsBundle\Tests\Functional\EventListener; use DateTimeImmutable; -use Mautic\CoreBundle\Test\MauticMysqlTestCase; -use Mautic\LeadBundle\Entity\Import; use Mautic\LeadBundle\Entity\Lead; +use Mautic\LeadBundle\Entity\Import; +use Mautic\LeadBundle\Model\LeadModel; use Mautic\LeadBundle\Entity\LeadEventLog; +use Mautic\CoreBundle\Test\MauticMysqlTestCase; use Mautic\LeadBundle\Event\ImportProcessEvent; -use Mautic\LeadBundle\Model\LeadModel; -use MauticPlugin\CustomObjectsBundle\Entity\CustomField; use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; +use MauticPlugin\CustomObjectsBundle\Entity\CustomField; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; -use MauticPlugin\CustomObjectsBundle\EventListener\ImportSubscriber; -use MauticPlugin\CustomObjectsBundle\Exception\InvalidValueException; -use MauticPlugin\CustomObjectsBundle\Model\CustomItemImportModel; use MauticPlugin\CustomObjectsBundle\Model\CustomItemModel; use MauticPlugin\CustomObjectsBundle\Model\CustomObjectModel; use MauticPlugin\CustomObjectsBundle\Provider\ConfigProvider; -use MauticPlugin\CustomObjectsBundle\Provider\CustomItemPermissionProvider; -use MauticPlugin\CustomObjectsBundle\Repository\CustomFieldRepository; +use MauticPlugin\CustomObjectsBundle\Model\CustomItemImportModel; +use MauticPlugin\CustomObjectsBundle\EventListener\ImportSubscriber; +use MauticPlugin\CustomObjectsBundle\Exception\InvalidValueException; use MauticPlugin\CustomObjectsBundle\Repository\CustomItemRepository; +use MauticPlugin\CustomObjectsBundle\Repository\CustomFieldRepository; +use MauticPlugin\CustomObjectsBundle\Provider\CustomItemPermissionProvider; +use MauticPlugin\CustomObjectsBundle\Provider\CustomObjectPermissionProvider; use MauticPlugin\CustomObjectsBundle\Tests\Functional\DataFixtures\Traits\CustomObjectsTrait; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class ImportSubscriberTest extends MauticMysqlTestCase { @@ -43,7 +44,7 @@ public function testImportForAllFieldTypesWithValidValuesAndLinksPlusUpdateToo() { $jane = $this->createContact('jane@doe.email'); $john = $this->createContact('john@doe.email'); - $customObject = $this->createCustomObjectWithAllFields(self::$container, 'Import CI all fields test Custom Object'); + $customObject = $this->createCustomObjectWithAllFields(self::getContainer(), 'Import CI all fields test Custom Object'); $csvRow = [ 'name' => 'Import CI all fields test Custom Item', 'contacts' => "{$jane->getId()},{$john->getId()}", @@ -148,7 +149,7 @@ public function testImportWithDefaultValues(): void $jane = $this->createContact('jane@doe.email'); $john = $this->createContact('john@doe.email'); - $customObject = $this->createCustomObjectWithAllFields(self::$container, 'Import CI all fields test Custom Object', $configureFieldCallback); + $customObject = $this->createCustomObjectWithAllFields(self::getContainer(), 'Import CI all fields test Custom Object', $configureFieldCallback); $csvRow = [ 'name' => 'Import CI all fields test Custom Item', 'contacts' => "{$jane->getId()},{$john->getId()}", @@ -321,25 +322,27 @@ private function importCsvRow(CustomObject $customObject, array $csvRow): bool }); /** @var CustomObjectModel $customObjectModel */ - $customObjectModel = self::$container->get('mautic.custom.model.object'); + $customObjectModel = self::getContainer()->get('mautic.custom.model.object'); /** @var CustomItemImportModel $customItemImportModel */ - $customItemImportModel = self::$container->get('mautic.custom.model.import.item'); + $customItemImportModel = self::getContainer()->get('mautic.custom.model.import.item'); /** @var CustomFieldRepository $customFieldRepository */ - $customFieldRepository = self::$container->get('custom_field.repository'); + $customFieldRepository = self::getContainer()->get('custom_field.repository'); - /** @var TranslatorInterface $translator */ - $translator = self::$container->get('translator'); + /** @var Translator $translator */ + $translator = self::getContainer()->get('translator'); $configProvider = $this->createMock(ConfigProvider::class); - $permissionProvider = $this->createMock(CustomItemPermissionProvider::class); + $customItemPermissionProvider = $this->createMock(CustomItemPermissionProvider::class); + $customObjectPermissionProvider = $this->createMock(CustomObjectPermissionProvider::class); $importSubscriber = new ImportSubscriber( $customObjectModel, $customItemImportModel, $configProvider, - $permissionProvider, + $customItemPermissionProvider, + $customObjectPermissionProvider, $customFieldRepository, $translator ); @@ -348,7 +351,7 @@ private function importCsvRow(CustomObject $customObject, array $csvRow): bool ->method('pluginIsEnabled') ->willReturn(true); - $permissionProvider->expects($this->once()) + $customItemPermissionProvider->expects($this->once()) ->method('canCreate') ->with($customObject->getId()); @@ -367,10 +370,10 @@ private function importCsvRow(CustomObject $customObject, array $csvRow): bool private function getCustomItemByName(string $name): ?CustomItem { /** @var CustomItemRepository $customItemRepository */ - $customItemRepository = self::$container->get('custom_item.repository'); + $customItemRepository = self::getContainer()->get('custom_item.repository'); /** @var CustomItemModel $customItemModel */ - $customItemModel = self::$container->get('mautic.custom.model.item'); + $customItemModel = self::getContainer()->get('mautic.custom.model.item'); /** @var CustomItem $customItem */ $customItem = $customItemRepository->findOneBy(['name' => $name]); @@ -385,7 +388,7 @@ private function getCustomItemByName(string $name): ?CustomItem private function createContact(string $email): Lead { /** @var LeadModel $contactModel */ - $contactModel = self::$container->get('mautic.lead.model.lead'); + $contactModel = self::getContainer()->get('mautic.lead.model.lead'); $contact = new Lead(); $contact->setEmail($email); $contactModel->saveEntity($contact); diff --git a/Tests/Functional/EventListener/TokenSubscriberTest.php b/Tests/Functional/EventListener/TokenSubscriberTest.php index 82b0de65f..774ec8516 100644 --- a/Tests/Functional/EventListener/TokenSubscriberTest.php +++ b/Tests/Functional/EventListener/TokenSubscriberTest.php @@ -40,14 +40,14 @@ protected function setUp(): void { parent::setUp(); - $this->customItemModel = self::$container->get('mautic.custom.model.item'); - $this->customFieldValueModel = self::$container->get('mautic.custom.model.field.value'); - $this->subscriber = self::$container->get('custom_object.emailtoken.subscriber'); + $this->customItemModel = self::getContainer()->get('mautic.custom.model.item'); + $this->customFieldValueModel = self::getContainer()->get('mautic.custom.model.field.value'); + $this->subscriber = self::getContainer()->get('custom_object.emailtoken.subscriber'); } public function testTextFieldSegmentFilterToken(): void { - $customObject = $this->createCustomObjectWithAllFields(self::$container, 'Product'); + $customObject = $this->createCustomObjectWithAllFields(self::getContainer(), 'Product'); $customItem = new CustomItem($customObject); $contact = $this->createContact('john@doe.email'); @@ -130,7 +130,7 @@ public function testTextFieldSegmentFilterToken(): void public function testDatetimeFieldSegmentFilterToken(): void { - $customObject = $this->createCustomObjectWithAllFields(self::$container, 'Product'); + $customObject = $this->createCustomObjectWithAllFields(self::getContainer(), 'Product'); $customItem = new CustomItem($customObject); $contact = $this->createContact('john@doe.email'); @@ -199,7 +199,7 @@ public function testDatetimeFieldSegmentFilterToken(): void public function testMultiselectFieldSegmentFilterToken(): void { - $customObject = $this->createCustomObjectWithAllFields(self::$container, 'Product'); + $customObject = $this->createCustomObjectWithAllFields(self::getContainer(), 'Product'); $customItem = new CustomItem($customObject); $contact = $this->createContact('john@doe.email'); @@ -268,7 +268,7 @@ public function testMultiselectFieldSegmentFilterToken(): void public function testSelectFieldSegmentFilterToken(): void { - $customObject = $this->createCustomObjectWithAllFields(self::$container, 'Product'); + $customObject = $this->createCustomObjectWithAllFields(self::getContainer(), 'Product'); $customItem = new CustomItem($customObject); $contact = $this->createContact('john@doe.email'); @@ -338,7 +338,7 @@ public function testSelectFieldSegmentFilterToken(): void private function createContact(string $email): Lead { /** @var LeadModel $contactModel */ - $contactModel = self::$container->get('mautic.lead.model.lead'); + $contactModel = self::getContainer()->get('mautic.lead.model.lead'); $contact = new Lead(); $contact->setEmail($email); $contactModel->saveEntity($contact); @@ -352,7 +352,7 @@ private function createContact(string $email): Lead private function createSegment(array $filters): LeadList { /** @var ListModel $segmentModel */ - $segmentModel = self::$container->get('mautic.lead.model.list'); + $segmentModel = self::getContainer()->get('mautic.lead.model.list'); $segment = new LeadList(); $segment->setFilters($filters); $segment->setName('Segment A'); @@ -364,7 +364,7 @@ private function createSegment(array $filters): LeadList private function addContactToSegment(Lead $contact, LeadList $segment): void { /** @var ListModel $segmentModel */ - $segmentModel = self::$container->get('mautic.lead.model.list'); + $segmentModel = self::getContainer()->get('mautic.lead.model.list'); $segmentModel->addLead($contact, $segment, true); } } diff --git a/Tests/Functional/Helper/QueryFilterHelperTest.php b/Tests/Functional/Helper/QueryFilterHelperTest.php index bf076ad34..c370fdc3f 100644 --- a/Tests/Functional/Helper/QueryFilterHelperTest.php +++ b/Tests/Functional/Helper/QueryFilterHelperTest.php @@ -34,12 +34,12 @@ protected function setUp(): void { parent::setUp(); - $this->filterFactory = self::$container->get('mautic.lead.model.lead_segment_filter_factory'); + $this->filterFactory = self::getContainer()->get('mautic.lead.model.lead_segment_filter_factory'); /** @var CustomFieldTypeProvider $fieldTypeProvider */ - $fieldTypeProvider = self::$container->get('custom_field.type.provider'); + $fieldTypeProvider = self::getContainer()->get('custom_field.type.provider'); /** @var CustomFieldRepository $customFieldRepository */ - $customFieldRepository = self::$container->get('custom_field.repository'); + $customFieldRepository = self::getContainer()->get('custom_field.repository'); $this->filterHelper = new QueryFilterHelper( $this->em, new QueryFilterFactory( diff --git a/Tests/Functional/Segment/Query/Filter/CustomFieldFilterQueryBuilderTest.php b/Tests/Functional/Segment/Query/Filter/CustomFieldFilterQueryBuilderTest.php index c0187e01b..f74c39282 100644 --- a/Tests/Functional/Segment/Query/Filter/CustomFieldFilterQueryBuilderTest.php +++ b/Tests/Functional/Segment/Query/Filter/CustomFieldFilterQueryBuilderTest.php @@ -45,13 +45,13 @@ public function testApplyQuery(): void $this->setFixtureObjects($objects); /** @var CustomFieldTypeProvider $fieldTypeProvider */ - $fieldTypeProvider = self::$container->get('custom_field.type.provider'); + $fieldTypeProvider = self::getContainer()->get('custom_field.type.provider'); /** @var EventDispatcherInterface $dispatcher */ - $dispatcher = self::$container->get('event_dispatcher'); + $dispatcher = self::getContainer()->get('event_dispatcher'); /** @var CustomFieldRepository $customFieldRepository */ - $customFieldRepository = self::$container->get('custom_field.repository'); + $customFieldRepository = self::getContainer()->get('custom_field.repository'); $queryHelper = new QueryFilterHelper( $this->em, diff --git a/Tests/Functional/Segment/Query/Filter/CustomItemRelationQueryBuilderTest.php b/Tests/Functional/Segment/Query/Filter/CustomItemRelationQueryBuilderTest.php index 206fcadf8..7b294dd77 100644 --- a/Tests/Functional/Segment/Query/Filter/CustomItemRelationQueryBuilderTest.php +++ b/Tests/Functional/Segment/Query/Filter/CustomItemRelationQueryBuilderTest.php @@ -25,9 +25,9 @@ protected function setUp(): void { parent::setUp(); - $this->coreParametersHelper = self::$container->get('mautic.helper.core_parameters'); - $this->segmentRepository = self::$container->get('mautic.lead.repository.lead_list'); - $this->contactRepository = self::$container->get('mautic.lead.repository.lead'); + $this->coreParametersHelper = self::getContainer()->get('mautic.helper.core_parameters'); + $this->segmentRepository = self::getContainer()->get('mautic.lead.repository.lead_list'); + $this->contactRepository = self::getContainer()->get('mautic.lead.repository.lead'); } protected function beforeBeginTransaction(): void @@ -49,7 +49,7 @@ public function testApplyQuery1stLevel(): void $this->getFixturesDirectory().'/custom-item-relation-filter-query-builder-fixture-1.yml', ]); - $this->runCommand( + self::getContainer()->get('mautic.command_runner')->runCommand( 'mautic:segments:update', ['--env' => 'test'] ); diff --git a/Tests/Functional/Segment/Query/Filter/NegativeOperatorFilterQueryBuilderTest.php b/Tests/Functional/Segment/Query/Filter/NegativeOperatorFilterQueryBuilderTest.php index 06ab327ec..102d27f5f 100644 --- a/Tests/Functional/Segment/Query/Filter/NegativeOperatorFilterQueryBuilderTest.php +++ b/Tests/Functional/Segment/Query/Filter/NegativeOperatorFilterQueryBuilderTest.php @@ -36,7 +36,7 @@ protected function setUp(): void parent::setUp(); - $this->customItemModel = self::$container->get('mautic.custom.model.item'); + $this->customItemModel = self::getContainer()->get('mautic.custom.model.item'); $this->createCustomObjectWithCustomField(); $this->em->flush(); } diff --git a/Tests/Functional/Token/EmailTokenTest.php b/Tests/Functional/Token/EmailTokenTest.php index cc6437161..1188ece19 100644 --- a/Tests/Functional/Token/EmailTokenTest.php +++ b/Tests/Functional/Token/EmailTokenTest.php @@ -22,9 +22,9 @@ class EmailTokenTest extends MauticMysqlTestCase public function testEmailTokens(): void { - $product = $this->createCustomObjectWithAllFields(self::$container, 'Product'); + $product = $this->createCustomObjectWithAllFields(self::getContainer(), 'Product'); $productA = $this->createCustomItem( - self::$container, + self::getContainer(), $product, 'Product A', [ @@ -43,7 +43,7 @@ public function testEmailTokens(): void ] ); $productB = $this->createCustomItem( - self::$container, + self::getContainer(), $product, 'Product B', [ @@ -63,7 +63,7 @@ public function testEmailTokens(): void ); $productC = $this->createCustomItem( - self::$container, + self::getContainer(), $product, 'Product C', [] @@ -122,7 +122,7 @@ public function testEmailTokens(): void $this->em->flush(); /** @var EmailModel $emailModel */ - $emailModel = self::$container->get('mautic.email.model.email'); + $emailModel = self::getContainer()->get('mautic.email.model.email'); $emailModel->sendEmail( $email, [ diff --git a/Tests/Functional/Token/EmailWithCustomObjectDynamicContentFunctionalTest.php b/Tests/Functional/Token/EmailWithCustomObjectDynamicContentFunctionalTest.php index 14bab135c..956885a01 100644 --- a/Tests/Functional/Token/EmailWithCustomObjectDynamicContentFunctionalTest.php +++ b/Tests/Functional/Token/EmailWithCustomObjectDynamicContentFunctionalTest.php @@ -54,10 +54,10 @@ protected function setUp(): void { parent::setUp(); - $this->customItemModel = self::$container->get('mautic.custom.model.item'); - $this->customFieldValueModel = self::$container->get('mautic.custom.model.field.value'); + $this->customItemModel = self::getContainer()->get('mautic.custom.model.item'); + $this->customFieldValueModel = self::getContainer()->get('mautic.custom.model.field.value'); - $this->customObject = $this->createCustomObjectWithAllFields(self::$container, 'Car'); + $this->customObject = $this->createCustomObjectWithAllFields(self::getContainer(), 'Car'); $this->customItems['nexon'] = new CustomItem($this->customObject); $this->customItems['nexon']->setName('Nexon'); @@ -284,7 +284,7 @@ private function createLead(string $email): Lead private function sendAndAssetText(Email $email, Lead $lead, string $matchText): void { /** @var EmailModel $emailModel */ - $emailModel = self::$container->get('mautic.email.model.email'); + $emailModel = self::getContainer()->get('mautic.email.model.email'); $emailModel->sendEmail( $email, [ diff --git a/Tests/Functional/UpsertFunctionalTest.php b/Tests/Functional/UpsertFunctionalTest.php index a8ce1680e..9a6a8530e 100644 --- a/Tests/Functional/UpsertFunctionalTest.php +++ b/Tests/Functional/UpsertFunctionalTest.php @@ -9,7 +9,7 @@ use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; use MauticPlugin\CustomObjectsBundle\Tests\Functional\DataFixtures\Traits\CustomObjectsTrait; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class UpsertFunctionalTest extends \Mautic\CoreBundle\Test\MauticMysqlTestCase { @@ -24,8 +24,8 @@ protected function setUp(): void { parent::setUp(); - $this->customItemModel = self::$container->get('mautic.custom.model.item'); - $this->customItemRepository = self::$container->get('custom_item.repository'); + $this->customItemModel = self::getContainer()->get('mautic.custom.model.item'); + $this->customItemRepository = self::getContainer()->get('custom_item.repository'); $this->customObject = $this->createCustomObject(); $this->existingCustomItem = $this->createCustomItem($this->customObject, 'Sapiens'); $this->existingCustomItem->createNewCustomFieldValueByFieldAlias('unique_id_field', 'SomeUniqueHash'); @@ -79,7 +79,7 @@ private function createCustomObject(): CustomObject private function createCustomField(CustomObject $customObject): CustomField { - $translatorMock = $this->createMock(TranslatorInterface::class); + $translatorMock = $this->createMock(Translator::class); $filterOperatorProviderMock = $this->createMock(FilterOperatorProviderInterface::class); $customFieldType = new TextType($translatorMock, $filterOperatorProviderMock); $customField = new CustomField(); diff --git a/Tests/Unit/Command/CustomItemExportCommandTest.php b/Tests/Unit/Command/CustomItemExportCommandTest.php index 27faf2a43..92bda6f14 100644 --- a/Tests/Unit/Command/CustomItemExportCommandTest.php +++ b/Tests/Unit/Command/CustomItemExportCommandTest.php @@ -24,7 +24,7 @@ protected function setUp(): void { parent::setUp(); - $this->customItemModel = self::$container->get('mautic.custom.model.item'); + $this->customItemModel = self::getContainer()->get('mautic.custom.model.item'); $this->createMockData(); } diff --git a/Tests/Unit/Controller/ControllerTestCase.php b/Tests/Unit/Controller/ControllerTestCase.php index 79e7520d1..d489332a1 100644 --- a/Tests/Unit/Controller/ControllerTestCase.php +++ b/Tests/Unit/Controller/ControllerTestCase.php @@ -4,15 +4,11 @@ namespace MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller; -use Mautic\CoreBundle\Controller\CommonController; -use Mautic\CoreBundle\Controller\MauticController; +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Mautic\CoreBundle\Factory\ModelFactory; -use Mautic\CoreBundle\Helper\CoreParametersHelper; use Mautic\CoreBundle\Helper\UserHelper; use Mautic\CoreBundle\Model\NotificationModel; use Mautic\CoreBundle\Security\Permissions\CorePermissions; -use Mautic\CoreBundle\Templating\Engine\PhpEngine; -use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\HeaderBag; use Symfony\Component\HttpFoundation\ParameterBag; @@ -23,7 +19,8 @@ use Symfony\Component\HttpKernel\HttpKernel; use Symfony\Component\Routing\Router; use Symfony\Component\Routing\RouterInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; +use Symfony\Bridge\Twig\Form\TwigRendererEngine; use Twig\Environment; /** @@ -52,7 +49,7 @@ class ControllerTestCase extends \PHPUnit\Framework\TestCase */ protected $userHelper; - protected function addSymfonyDependencies(Controller $controller): void + protected function addSymfonyDependencies(AbstractController $controller): void { $requestStack = empty($this->requestStack) ? $this->createMock(RequestStack::class) : $this->requestStack; $request = empty($this->request) ? $this->createMock(Request::class) : $this->request; @@ -61,11 +58,11 @@ protected function addSymfonyDependencies(Controller $controller): void $this->container = $this->createMock(ContainerInterface::class); $httpKernel = $this->createMock(HttpKernel::class); $response = $this->createMock(Response::class); - $phpEngine = $this->createMock(PhpEngine::class); + $phpEngine = $this->createMock(TwigRendererEngine::class); $modelFactory = $this->createMock(ModelFactory::class); $notificationModel = $this->createMock(NotificationModel::class); $security = $this->createMock(CorePermissions::class); - $translator = $this->createMock(TranslatorInterface::class); + $translator = $this->createMock(Translator::class); $this->router = $this->createMock(RouterInterface::class); $this->userHelper = $this->createMock(UserHelper::class); @@ -105,13 +102,13 @@ protected function addSymfonyDependencies(Controller $controller): void $controller->setContainer($this->container); - if ($controller instanceof MauticController) { - $controller->setRequest($request); - $controller->setTranslator($translator); - } + // if ($controller instanceof MauticController) { + // $controller->setRequest($request); + // $controller->setTranslator($translator); + // } - if ($controller instanceof CommonController) { - $controller->setCoreParametersHelper($this->createMock(CoreParametersHelper::class)); - } + // if ($controller instanceof CommonController) { + // $controller->setCoreParametersHelper($this->createMock(CoreParametersHelper::class)); + // } } } diff --git a/Tests/Unit/Controller/CustomField/FormControllerTest.php b/Tests/Unit/Controller/CustomField/FormControllerTest.php index 6c499705e..841ae6ce7 100644 --- a/Tests/Unit/Controller/CustomField/FormControllerTest.php +++ b/Tests/Unit/Controller/CustomField/FormControllerTest.php @@ -19,6 +19,15 @@ use Symfony\Component\Form\FormFactory; use Symfony\Component\Form\FormInterface; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; +use Mautic\CoreBundle\Helper\CoreParametersHelper; +use Mautic\CoreBundle\Helper\UserHelper; +use Mautic\CoreBundle\Translation\Translator; +use Mautic\CoreBundle\Factory\ModelFactory; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\HttpFoundation\RequestStack; +use Mautic\CoreBundle\Service\FlashBag; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; +use Doctrine\Persistence\ManagerRegistry; class FormControllerTest extends AbstractFieldControllerTest { @@ -32,27 +41,52 @@ class FormControllerTest extends AbstractFieldControllerTest private $form; private $formController; + private $registry; + private $coreParametersHelper; + private $translator; + private $flashBag; + private $security; + private $modelFactory; + private $dispatcher; + protected function setUp(): void { parent::setUp(); - $this->formFactory = $this->createMock(FormFactory::class); - $this->customFieldModel = $this->createMock(CustomFieldModel::class); - $this->customFieldFactory = $this->createMock(CustomFieldFactory::class); - $this->permissionProvider = $this->createMock(CustomFieldPermissionProvider::class); - $this->fieldRouteProvider = $this->createMock(CustomFieldRouteProvider::class); - $this->customObjectModel = $this->createMock(CustomObjectModel::class); - $this->objectRouteProvider = $this->createMock(CustomObjectRouteProvider::class); - $this->form = $this->createMock(FormInterface::class); - - $this->formController = new FormController( + $this->registry = $this->createMock(ManagerRegistry::class); + $this->coreParametersHelper = $this->createMock(CoreParametersHelper::class); + $this->translator = $this->createMock(Translator::class); + $this->flashBag = $this->createMock(FlashBag::class); + $this->requestStack = $this->createMock(RequestStack::class); + $this->security = $this->createMock(CorePermissions::class); + $this->customFieldFactory = $this->createMock(CustomFieldFactory::class); + $this->customObjectModel = $this->createMock(CustomObjectModel::class); + $this->customFieldModel = $this->createMock(CustomFieldModel::class); + $this->permissionProvider = $this->createMock(CustomFieldPermissionProvider::class); + $this->fieldRouteProvider = $this->createMock(CustomFieldRouteProvider::class); + $this->objectRouteProvider = $this->createMock(CustomObjectRouteProvider::class); + $this->form = $this->createMock(FormInterface::class); + $this->modelFactory = $this->createMock(ModelFactory::class); + $this->userHelper = $this->createMock(UserHelper::class); + $this->dispatcher = $this->createMock(EventDispatcherInterface::class); + $this->formFactory = $this->createMock(FormFactory::class); + $this->formController = new FormController( $this->formFactory, - $this->customFieldModel, - $this->customFieldFactory, - $this->permissionProvider, + $this->registry, + $this->modelFactory, + $this->userHelper, + $this->coreParametersHelper, + $this->dispatcher, + $this->translator, + $this->flashBag, + $this->requestStack, + $this->security, + $this->objectRouteProvider, $this->fieldRouteProvider, + $this->customFieldFactory, $this->customObjectModel, - $this->objectRouteProvider + $this->customFieldModel, + $this->permissionProvider ); $this->addSymfonyDependencies($this->formController); diff --git a/Tests/Unit/Controller/CustomItem/BatchDeleteControllerTest.php b/Tests/Unit/Controller/CustomItem/BatchDeleteControllerTest.php index 695c88f20..c4557a512 100644 --- a/Tests/Unit/Controller/CustomItem/BatchDeleteControllerTest.php +++ b/Tests/Unit/Controller/CustomItem/BatchDeleteControllerTest.php @@ -4,7 +4,13 @@ namespace MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\CustomItem; +use Doctrine\Persistence\ManagerRegistry; +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 MauticPlugin\CustomObjectsBundle\Controller\CustomItem\BatchDeleteController; use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; @@ -15,6 +21,7 @@ use MauticPlugin\CustomObjectsBundle\Provider\SessionProvider; use MauticPlugin\CustomObjectsBundle\Provider\SessionProviderFactory; use MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\ControllerTestCase; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RequestStack; @@ -35,21 +42,35 @@ protected function setUp(): void { parent::setUp(); + $doctrine = $this->createMock(ManagerRegistry::class); + $modelFactory = $this->createMock(ModelFactory::class); + $userHelper = $this->createMock(UserHelper::class); + $coreParametersHelper = $this->createMock(CoreParametersHelper::class); + $dispatcher = $this->createMock(EventDispatcherInterface::class); + $translator = $this->createMock(Translator::class); + $this->flashBag = $this->createMock(FlashBag::class); + $this->requestStack = $this->createMock(RequestStack::class); + $security = $this->createMock(CorePermissions::class); $sessionProviderFactory = $this->createMock(SessionProviderFactory::class); - $this->requestStack = $this->createMock(RequestStack::class); $this->customItemModel = $this->createMock(CustomItemModel::class); $this->sessionProvider = $this->createMock(SessionProvider::class); - $this->flashBag = $this->createMock(FlashBag::class); $this->permissionProvider = $this->createMock(CustomItemPermissionProvider::class); $this->routeProvider = $this->createMock(CustomItemRouteProvider::class); $this->request = $this->createMock(Request::class); $this->batchDeleteController = new BatchDeleteController( + $doctrine, + $modelFactory, + $userHelper, + $coreParametersHelper, + $dispatcher, + $translator, + $this->flashBag, $this->requestStack, - $this->customItemModel, - $sessionProviderFactory, + $security, $this->permissionProvider, $this->routeProvider, - $this->flashBag + $this->customItemModel, + $sessionProviderFactory ); $this->addSymfonyDependencies($this->batchDeleteController); diff --git a/Tests/Unit/Controller/CustomItem/CancelControllerTest.php b/Tests/Unit/Controller/CustomItem/CancelControllerTest.php index 22f0fd3d0..55165dbd6 100644 --- a/Tests/Unit/Controller/CustomItem/CancelControllerTest.php +++ b/Tests/Unit/Controller/CustomItem/CancelControllerTest.php @@ -4,6 +4,13 @@ namespace MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\CustomItem; +use Doctrine\Persistence\ManagerRegistry; +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 MauticPlugin\CustomObjectsBundle\Controller\CustomItem\CancelController; use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; @@ -12,6 +19,8 @@ use MauticPlugin\CustomObjectsBundle\Provider\SessionProvider; use MauticPlugin\CustomObjectsBundle\Provider\SessionProviderFactory; use MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\ControllerTestCase; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\HttpFoundation\RequestStack; class CancelControllerTest extends ControllerTestCase { @@ -30,12 +39,30 @@ protected function setUp(): void { parent::setUp(); + $doctrine = $this->createMock(ManagerRegistry::class); + $modelFactory = $this->createMock(ModelFactory::class); + $userHelper = $this->createMock(UserHelper::class); + $coreParametersHelper = $this->createMock(CoreParametersHelper::class); + $dispatcher = $this->createMock(EventDispatcherInterface::class); + $translator = $this->createMock(Translator::class); + $flashBag = $this->createMock(FlashBag::class); + $this->requestStack = $this->createMock(RequestStack::class); + $security = $this->createMock(CorePermissions::class); $sessionProviderFactory = $this->createMock(SessionProviderFactory::class); $this->sessionProvider = $this->createMock(SessionProvider::class); $this->routeProvider = $this->createMock(CustomItemRouteProvider::class); $this->customItemModel = $this->createMock(CustomItemModel::class); $this->cancelController = new CancelController( + $doctrine, + $modelFactory, + $userHelper, + $coreParametersHelper, + $dispatcher, + $translator, + $flashBag, + $this->requestStack, + $security, $sessionProviderFactory, $this->routeProvider, $this->customItemModel diff --git a/Tests/Unit/Controller/CustomItem/DeleteControllerTest.php b/Tests/Unit/Controller/CustomItem/DeleteControllerTest.php index 36b2a7e82..c0e59c7ed 100644 --- a/Tests/Unit/Controller/CustomItem/DeleteControllerTest.php +++ b/Tests/Unit/Controller/CustomItem/DeleteControllerTest.php @@ -4,7 +4,13 @@ namespace MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\CustomItem; +use Doctrine\Persistence\ManagerRegistry; +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 MauticPlugin\CustomObjectsBundle\Controller\CustomItem\DeleteController; use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; @@ -15,7 +21,9 @@ use MauticPlugin\CustomObjectsBundle\Provider\SessionProvider; use MauticPlugin\CustomObjectsBundle\Provider\SessionProviderFactory; use MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\ControllerTestCase; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; class DeleteControllerTest extends ControllerTestCase @@ -39,19 +47,35 @@ protected function setUp(): void { parent::setUp(); + $doctrine = $this->createMock(ManagerRegistry::class); + $modelFactory = $this->createMock(ModelFactory::class); + $userHelper = $this->createMock(UserHelper::class); + $coreParametersHelper = $this->createMock(CoreParametersHelper::class); + $dispatcher = $this->createMock(EventDispatcherInterface::class); + $translator = $this->createMock(Translator::class); + $this->flashBag = $this->createMock(FlashBag::class); + $this->requestStack = $this->createMock(RequestStack::class); + $security = $this->createMock(CorePermissions::class); $sessionProviderFactory = $this->createMock(SessionProviderFactory::class); $this->customItemModel = $this->createMock(CustomItemModel::class); $this->sessionProvider = $this->createMock(SessionProvider::class); - $this->flashBag = $this->createMock(FlashBag::class); $this->permissionProvider = $this->createMock(CustomItemPermissionProvider::class); $this->routeProvider = $this->createMock(CustomItemRouteProvider::class); $this->request = $this->createMock(Request::class); $this->deleteController = new DeleteController( - $this->customItemModel, - $sessionProviderFactory, + $doctrine, + $modelFactory, + $userHelper, + $coreParametersHelper, + $dispatcher, + $translator, $this->flashBag, + $this->requestStack, + $security, $this->permissionProvider, - $this->routeProvider + $this->routeProvider, + $this->customItemModel, + $sessionProviderFactory ); $this->addSymfonyDependencies($this->deleteController); diff --git a/Tests/Unit/Controller/CustomItem/FormControllerTest.php b/Tests/Unit/Controller/CustomItem/FormControllerTest.php index 54fd0cb5a..c30ce85c4 100644 --- a/Tests/Unit/Controller/CustomItem/FormControllerTest.php +++ b/Tests/Unit/Controller/CustomItem/FormControllerTest.php @@ -4,6 +4,13 @@ namespace MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\CustomItem; +use Doctrine\Persistence\ManagerRegistry; +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\UserBundle\Entity\User; use MauticPlugin\CustomObjectsBundle\Controller\CustomItem\FormController; use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; @@ -19,9 +26,11 @@ use MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\ControllerTestCase; use PHPUnit\Framework\Assert; use PHPUnit\Framework\MockObject\MockObject; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\Form\FormFactory; use Symfony\Component\Form\FormInterface; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; class FormControllerTest extends ControllerTestCase @@ -86,6 +95,15 @@ protected function setUp(): void { parent::setUp(); + $doctrine = $this->createMock(ManagerRegistry::class); + $modelFactory = $this->createMock(ModelFactory::class); + $userHelper = $this->createMock(UserHelper::class); + $coreParametersHelper = $this->createMock(CoreParametersHelper::class); + $dispatcher = $this->createMock(EventDispatcherInterface::class); + $translator = $this->createMock(Translator::class); + $flashBag = $this->createMock(FlashBag::class); + $this->requestStack = $this->createMock(RequestStack::class); + $security = $this->createMock(CorePermissions::class); $this->customItemModel = $this->createMock(CustomItemModel::class); $this->customObjectModel = $this->createMock(CustomObjectModel::class); $this->formFactory = $this->createMock(FormFactory::class); @@ -97,6 +115,15 @@ protected function setUp(): void $this->customItem = $this->createMock(CustomItem::class); $this->form = $this->createMock(FormInterface::class); $this->formController = new FormController( + $doctrine, + $modelFactory, + $userHelper, + $coreParametersHelper, + $dispatcher, + $translator, + $flashBag, + $this->requestStack, + $security, $this->formFactory, $this->customObjectModel, $this->customItemModel, diff --git a/Tests/Unit/Controller/CustomItem/LinkControllerTest.php b/Tests/Unit/Controller/CustomItem/LinkControllerTest.php index 88b5325ca..a114ce53d 100644 --- a/Tests/Unit/Controller/CustomItem/LinkControllerTest.php +++ b/Tests/Unit/Controller/CustomItem/LinkControllerTest.php @@ -41,9 +41,9 @@ protected function setUp(): void $this->flashBag = $this->createMock(FlashBag::class); $this->permissionProvider = $this->createMock(CustomItemPermissionProvider::class); $this->linkController = new LinkController( + $this->flashBag, $this->customItemModel, - $this->permissionProvider, - $this->flashBag + $this->permissionProvider ); $this->addSymfonyDependencies($this->linkController); diff --git a/Tests/Unit/Controller/CustomItem/ListControllerTest.php b/Tests/Unit/Controller/CustomItem/ListControllerTest.php index 0484064e2..343958bca 100644 --- a/Tests/Unit/Controller/CustomItem/ListControllerTest.php +++ b/Tests/Unit/Controller/CustomItem/ListControllerTest.php @@ -4,6 +4,13 @@ namespace MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\CustomItem; +use Doctrine\Persistence\ManagerRegistry; +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 MauticPlugin\CustomObjectsBundle\Controller\CustomItem\ListController; use MauticPlugin\CustomObjectsBundle\DTO\TableConfig; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; @@ -16,6 +23,7 @@ use MauticPlugin\CustomObjectsBundle\Provider\SessionProvider; use MauticPlugin\CustomObjectsBundle\Provider\SessionProviderFactory; use MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\ControllerTestCase; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\HttpFoundation\ParameterBag; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RequestStack; @@ -42,8 +50,16 @@ protected function setUp(): void { parent::setUp(); + $doctrine = $this->createMock(ManagerRegistry::class); + $modelFactory = $this->createMock(ModelFactory::class); + $userHelper = $this->createMock(UserHelper::class); + $coreParametersHelper = $this->createMock(CoreParametersHelper::class); + $dispatcher = $this->createMock(EventDispatcherInterface::class); + $translator = $this->createMock(Translator::class); + $flashBag = $this->createMock(FlashBag::class); + $this->requestStack = $this->createMock(RequestStack::class); + $security = $this->createMock(CorePermissions::class); $sessionProviderFactory = $this->createMock(SessionProviderFactory::class); - $this->requestStack = $this->createMock(RequestStack::class); $this->customItemModel = $this->createMock(CustomItemModel::class); $this->customObjectModel = $this->createMock(CustomObjectModel::class); $this->sessionProvider = $this->createMock(SessionProvider::class); @@ -51,7 +67,15 @@ protected function setUp(): void $this->routeProvider = $this->createMock(CustomItemRouteProvider::class); $this->request = $this->createMock(Request::class); $this->listController = new ListController( + $doctrine, + $modelFactory, + $userHelper, + $coreParametersHelper, + $dispatcher, + $translator, + $flashBag, $this->requestStack, + $security, $sessionProviderFactory, $this->customItemModel, $this->customObjectModel, diff --git a/Tests/Unit/Controller/CustomItem/SaveControllerTest.php b/Tests/Unit/Controller/CustomItem/SaveControllerTest.php index 5f96f67cb..2964a6825 100644 --- a/Tests/Unit/Controller/CustomItem/SaveControllerTest.php +++ b/Tests/Unit/Controller/CustomItem/SaveControllerTest.php @@ -4,7 +4,13 @@ namespace MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\CustomItem; +use Doctrine\Persistence\ManagerRegistry; +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\UserBundle\Entity\User; use MauticPlugin\CustomObjectsBundle\Controller\CustomItem\SaveController; use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; @@ -20,6 +26,7 @@ use MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\ControllerTestCase; use PHPUnit\Framework\Assert; use PHPUnit\Framework\MockObject\MockObject; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\Form\ClickableInterface; use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\Form\FormInterface; @@ -89,21 +96,35 @@ protected function setUp(): void { parent::setUp(); + $doctrine = $this->createMock(ManagerRegistry::class); + $modelFactory = $this->createMock(ModelFactory::class); + $userHelper = $this->createMock(UserHelper::class); + $coreParametersHelper = $this->createMock(CoreParametersHelper::class); + $dispatcher = $this->createMock(EventDispatcherInterface::class); + $translator = $this->createMock(Translator::class); + $this->flashBag = $this->createMock(FlashBag::class); + $this->requestStack = $this->createMock(RequestStack::class); + $security = $this->createMock(CorePermissions::class); $this->formFactory = $this->createMock(FormFactoryInterface::class); $this->customItemModel = $this->createMock(CustomItemModel::class); $this->customObjectModel = $this->createMock(CustomObjectModel::class); - $this->flashBag = $this->createMock(FlashBag::class); $this->permissionProvider = $this->createMock(CustomItemPermissionProvider::class); $this->routeProvider = $this->createMock(CustomItemRouteProvider::class); $this->lockFlashMessageHelper = $this->createMock(LockFlashMessageHelper::class); - $this->requestStack = $this->createMock(RequestStack::class); $this->request = new Request(); $this->customItem = $this->createMock(CustomItem::class); $this->form = $this->createMock(FormInterface::class); $this->saveController = new SaveController( + $doctrine, + $modelFactory, + $userHelper, + $coreParametersHelper, + $dispatcher, + $translator, + $this->flashBag, $this->requestStack, + $security, $this->formFactory, - $this->flashBag, $this->customItemModel, $this->customObjectModel, $this->permissionProvider, diff --git a/Tests/Unit/Controller/CustomItem/ViewControllerTest.php b/Tests/Unit/Controller/CustomItem/ViewControllerTest.php index e8ea8b4e1..de12e1635 100644 --- a/Tests/Unit/Controller/CustomItem/ViewControllerTest.php +++ b/Tests/Unit/Controller/CustomItem/ViewControllerTest.php @@ -4,8 +4,15 @@ namespace MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\CustomItem; +use Doctrine\Persistence\ManagerRegistry; +use Mautic\CoreBundle\Factory\ModelFactory; use Mautic\CoreBundle\Form\Type\DateRangeType; +use Mautic\CoreBundle\Helper\CoreParametersHelper; +use Mautic\CoreBundle\Helper\UserHelper; use Mautic\CoreBundle\Model\AuditLogModel; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; +use Mautic\CoreBundle\Service\FlashBag; +use Mautic\CoreBundle\Translation\Translator; use MauticPlugin\CustomObjectsBundle\Controller\CustomItem\ViewController; use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; @@ -15,6 +22,7 @@ use MauticPlugin\CustomObjectsBundle\Provider\CustomItemPermissionProvider; use MauticPlugin\CustomObjectsBundle\Provider\CustomItemRouteProvider; use MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\ControllerTestCase; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\Form\FormInterface; use Symfony\Component\HttpFoundation\RequestStack; @@ -44,17 +52,33 @@ protected function setUp(): void { parent::setUp(); + $doctrine = $this->createMock(ManagerRegistry::class); + $modelFactory = $this->createMock(ModelFactory::class); + $userHelper = $this->createMock(UserHelper::class); + $coreParametersHelper = $this->createMock(CoreParametersHelper::class); + $dispatcher = $this->createMock(EventDispatcherInterface::class); + $translator = $this->createMock(Translator::class); + $flashBag = $this->createMock(FlashBag::class); + $this->requestStack = $this->createMock(RequestStack::class); + $security = $this->createMock(CorePermissions::class); $this->customItemModel = $this->createMock(CustomItemModel::class); $this->customItemXrefContactModel = $this->createMock(CustomItemXrefContactModel::class); $this->auditLog = $this->createMock(AuditLogModel::class); $this->permissionProvider = $this->createMock(CustomItemPermissionProvider::class); $this->routeProvider = $this->createMock(CustomItemRouteProvider::class); - $this->requestStack = $this->createMock(RequestStack::class); $this->formFactory = $this->createMock(FormFactoryInterface::class); $this->form = $this->createMock(FormInterface::class); $this->customItem = $this->createMock(CustomItem::class); $this->viewController = new ViewController( + $doctrine, + $modelFactory, + $userHelper, + $coreParametersHelper, + $dispatcher, + $translator, + $flashBag, $this->requestStack, + $security, $this->formFactory, $this->customItemModel, $this->customItemXrefContactModel, diff --git a/Tests/Unit/Controller/CustomObject/CancelControllerTest.php b/Tests/Unit/Controller/CustomObject/CancelControllerTest.php index 3e1c8b628..78fd5001b 100644 --- a/Tests/Unit/Controller/CustomObject/CancelControllerTest.php +++ b/Tests/Unit/Controller/CustomObject/CancelControllerTest.php @@ -4,6 +4,13 @@ namespace MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\CustomObject; +use Doctrine\Persistence\ManagerRegistry; +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 MauticPlugin\CustomObjectsBundle\Controller\CustomObject\CancelController; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; use MauticPlugin\CustomObjectsBundle\Model\CustomObjectModel; @@ -11,6 +18,8 @@ use MauticPlugin\CustomObjectsBundle\Provider\SessionProvider; use MauticPlugin\CustomObjectsBundle\Provider\SessionProviderFactory; use MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\ControllerTestCase; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\HttpFoundation\RequestStack; class CancelControllerTest extends ControllerTestCase { @@ -27,12 +36,30 @@ protected function setUp(): void { parent::setUp(); + $doctrine = $this->createMock(ManagerRegistry::class); + $modelFactory = $this->createMock(ModelFactory::class); + $userHelper = $this->createMock(UserHelper::class); + $coreParametersHelper = $this->createMock(CoreParametersHelper::class); + $dispatcher = $this->createMock(EventDispatcherInterface::class); + $translator = $this->createMock(Translator::class); + $flashBag = $this->createMock(FlashBag::class); + $this->requestStack = $this->createMock(RequestStack::class); + $security = $this->createMock(CorePermissions::class); $sessionProviderFactory = $this->createMock(SessionProviderFactory::class); $this->sessionProvider = $this->createMock(SessionProvider::class); $this->routeProvider = $this->createMock(CustomObjectRouteProvider::class); $this->customObjectModel = $this->createMock(CustomObjectModel::class); $this->cancelController = new CancelController( + $doctrine, + $modelFactory, + $userHelper, + $coreParametersHelper, + $dispatcher, + $translator, + $flashBag, + $this->requestStack, + $security, $sessionProviderFactory, $this->routeProvider, $this->customObjectModel diff --git a/Tests/Unit/Controller/CustomObject/DeleteControllerTest.php b/Tests/Unit/Controller/CustomObject/DeleteControllerTest.php index e5bb892fd..b8c3a882d 100644 --- a/Tests/Unit/Controller/CustomObject/DeleteControllerTest.php +++ b/Tests/Unit/Controller/CustomObject/DeleteControllerTest.php @@ -5,7 +5,13 @@ namespace MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\CustomObject; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\Persistence\ManagerRegistry; +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\Entity\LeadList; use MauticPlugin\CustomObjectsBundle\Controller\CustomObject\DeleteController; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; @@ -19,8 +25,8 @@ use MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\ControllerTestCase; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; -use Symfony\Component\Translation\TranslatorInterface; class DeleteControllerTest extends ControllerTestCase { @@ -42,7 +48,7 @@ class DeleteControllerTest extends ControllerTestCase private $deleteController; /** - * @var TranslatorInterface + * @var Translator */ private $translator; @@ -55,17 +61,33 @@ protected function setUp(): void { parent::setUp(); + $doctrine = $this->createMock(ManagerRegistry::class); + $modelFactory = $this->createMock(ModelFactory::class); + $userHelper = $this->createMock(UserHelper::class); + $coreParametersHelper = $this->createMock(CoreParametersHelper::class); + $dispatcher = $this->createMock(EventDispatcherInterface::class); + $translator = $this->createMock(Translator::class); + $this->flashBag = $this->createMock(FlashBag::class); + $this->requestStack = $this->createMock(RequestStack::class); + $security = $this->createMock(CorePermissions::class); $sessionProviderFactory = $this->createMock(SessionProviderFactory::class); $this->customObjectModel = $this->createMock(CustomObjectModel::class); $this->sessionProvider = $this->createMock(SessionProvider::class); - $this->flashBag = $this->createMock(FlashBag::class); $this->permissionProvider = $this->createMock(CustomObjectPermissionProvider::class); $this->request = $this->createMock(Request::class); $this->eventDispatcher = $this->createMock(EventDispatcherInterface::class); $this->deleteController = new DeleteController( + $doctrine, + $modelFactory, + $userHelper, + $coreParametersHelper, + $dispatcher, + $translator, + $this->flashBag, + $this->requestStack, + $security, $this->customObjectModel, $sessionProviderFactory, - $this->flashBag, $this->permissionProvider, $this->eventDispatcher ); @@ -76,8 +98,7 @@ protected function setUp(): void $this->request->method('getRequestUri')->willReturn('https://a.b'); $sessionProviderFactory->method('createObjectProvider')->willReturn($this->sessionProvider); - $this->translator = $this->createMock(TranslatorInterface::class); - $this->deleteController->setTranslator($this->translator); + $this->translator = $translator; $this->leadListIndex = 1; } diff --git a/Tests/Unit/Controller/CustomObject/FormControllerTest.php b/Tests/Unit/Controller/CustomObject/FormControllerTest.php index 2d1fd8943..508ed20b5 100644 --- a/Tests/Unit/Controller/CustomObject/FormControllerTest.php +++ b/Tests/Unit/Controller/CustomObject/FormControllerTest.php @@ -4,6 +4,13 @@ namespace MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\CustomObject; +use Doctrine\Persistence\ManagerRegistry; +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 MauticPlugin\CustomObjectsBundle\Controller\CustomObject\FormController; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; @@ -16,9 +23,11 @@ use MauticPlugin\CustomObjectsBundle\Provider\CustomObjectPermissionProvider; use MauticPlugin\CustomObjectsBundle\Provider\CustomObjectRouteProvider; use MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\ControllerTestCase; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\Form\FormFactory; use Symfony\Component\Form\FormInterface; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; class FormControllerTest extends ControllerTestCase @@ -44,6 +53,15 @@ protected function setUp(): void { parent::setUp(); + $doctrine = $this->createMock(ManagerRegistry::class); + $modelFactory = $this->createMock(ModelFactory::class); + $userHelper = $this->createMock(UserHelper::class); + $coreParametersHelper = $this->createMock(CoreParametersHelper::class); + $dispatcher = $this->createMock(EventDispatcherInterface::class); + $translator = $this->createMock(Translator::class); + $flashBag = $this->createMock(FlashBag::class); + $this->requestStack = $this->createMock(RequestStack::class); + $security = $this->createMock(CorePermissions::class); $this->customObjectModel = $this->createMock(CustomObjectModel::class); $this->customFieldModel = $this->createMock(CustomFieldModel::class); $this->formFactory = $this->createMock(FormFactory::class); @@ -56,10 +74,19 @@ protected function setUp(): void $this->form = $this->createMock(FormInterface::class); $this->formController = new FormController( $this->formFactory, - $this->customObjectModel, - $this->customFieldModel, + $doctrine, + $modelFactory, + $userHelper, + $coreParametersHelper, + $dispatcher, + $translator, + $flashBag, + $this->requestStack, + $security, $this->permissionProvider, $this->routeProvider, + $this->customObjectModel, + $this->customFieldModel, $this->customFieldTypeProvider, $this->lockFlashMessageHelper ); diff --git a/Tests/Unit/Controller/CustomObject/ListControllerTest.php b/Tests/Unit/Controller/CustomObject/ListControllerTest.php index c346ac8bd..6553251b7 100644 --- a/Tests/Unit/Controller/CustomObject/ListControllerTest.php +++ b/Tests/Unit/Controller/CustomObject/ListControllerTest.php @@ -4,6 +4,13 @@ namespace MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\CustomObject; +use Doctrine\Persistence\ManagerRegistry; +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 MauticPlugin\CustomObjectsBundle\Controller\CustomObject\ListController; use MauticPlugin\CustomObjectsBundle\DTO\TableConfig; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; @@ -14,6 +21,7 @@ use MauticPlugin\CustomObjectsBundle\Provider\SessionProvider; use MauticPlugin\CustomObjectsBundle\Provider\SessionProviderFactory; use MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\ControllerTestCase; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\HttpFoundation\ParameterBag; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RequestStack; @@ -37,19 +45,35 @@ protected function setUp(): void { parent::setUp(); + $doctrine = $this->createMock(ManagerRegistry::class); + $modelFactory = $this->createMock(ModelFactory::class); + $userHelper = $this->createMock(UserHelper::class); + $coreParametersHelper = $this->createMock(CoreParametersHelper::class); + $dispatcher = $this->createMock(EventDispatcherInterface::class); + $translator = $this->createMock(Translator::class); + $flashBag = $this->createMock(FlashBag::class); + $this->requestStack = $this->createMock(RequestStack::class); + $security = $this->createMock(CorePermissions::class); $sessionProviderFactory = $this->createMock(SessionProviderFactory::class); - $this->requestStack = $this->createMock(RequestStack::class); $this->customObjectModel = $this->createMock(CustomObjectModel::class); $this->sessionProvider = $this->createMock(SessionProvider::class); $this->permissionProvider = $this->createMock(CustomObjectPermissionProvider::class); $this->routeProvider = $this->createMock(CustomObjectRouteProvider::class); $this->request = $this->createMock(Request::class); $this->listController = new ListController( + $doctrine, + $modelFactory, + $userHelper, + $coreParametersHelper, + $dispatcher, + $translator, + $flashBag, $this->requestStack, - $sessionProviderFactory, - $this->customObjectModel, + $security, $this->permissionProvider, - $this->routeProvider + $this->routeProvider, + $this->customObjectModel, + $sessionProviderFactory ); $this->addSymfonyDependencies($this->listController); diff --git a/Tests/Unit/Controller/CustomObject/SaveControllerTest.php b/Tests/Unit/Controller/CustomObject/SaveControllerTest.php index a70329db8..a28a61102 100644 --- a/Tests/Unit/Controller/CustomObject/SaveControllerTest.php +++ b/Tests/Unit/Controller/CustomObject/SaveControllerTest.php @@ -4,7 +4,13 @@ namespace MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\CustomObject; +use Doctrine\Persistence\ManagerRegistry; +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 MauticPlugin\CustomObjectsBundle\Controller\CustomObject\SaveController; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; @@ -19,6 +25,7 @@ use MauticPlugin\CustomObjectsBundle\Provider\CustomObjectPermissionProvider; use MauticPlugin\CustomObjectsBundle\Provider\CustomObjectRouteProvider; use MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\ControllerTestCase; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\Form\ClickableInterface; use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\Form\FormInterface; @@ -53,13 +60,20 @@ protected function setUp(): void { parent::setUp(); + $doctrine = $this->createMock(ManagerRegistry::class); + $modelFactory = $this->createMock(ModelFactory::class); + $userHelper = $this->createMock(UserHelper::class); + $coreParametersHelper = $this->createMock(CoreParametersHelper::class); + $dispatcher = $this->createMock(EventDispatcherInterface::class); + $translator = $this->createMock(Translator::class); + $this->flashBag = $this->createMock(FlashBag::class); + $this->requestStack = $this->createMock(RequestStack::class); + $security = $this->createMock(CorePermissions::class); $this->formFactory = $this->createMock(FormFactoryInterface::class); $this->customObjectModel = $this->createMock(CustomObjectModel::class); $this->customFieldModel = $this->createMock(CustomFieldModel::class); - $this->flashBag = $this->createMock(FlashBag::class); $this->permissionProvider = $this->createMock(CustomObjectPermissionProvider::class); $this->routeProvider = $this->createMock(CustomObjectRouteProvider::class); - $this->requestStack = $this->createMock(RequestStack::class); $this->customFieldTypeProvider = $this->createMock(CustomFieldTypeProvider::class); $this->paramsToStringTransformer = $this->createMock(ParamsToStringTransformer::class); $this->optionsToStringTransformer = $this->createMock(OptionsToStringTransformer::class); @@ -68,17 +82,24 @@ protected function setUp(): void $this->customObject = $this->createMock(CustomObject::class); $this->form = $this->createMock(FormInterface::class); $this->saveController = new SaveController( - $this->requestStack, - $this->flashBag, $this->formFactory, - $this->customObjectModel, - $this->customFieldModel, + $doctrine, + $modelFactory, + $userHelper, + $coreParametersHelper, + $dispatcher, + $translator, + $this->flashBag, + $this->requestStack, + $security, $this->permissionProvider, $this->routeProvider, + $this->customObjectModel, + $this->customFieldModel, $this->customFieldTypeProvider, + $this->lockFlashMessageHelper, $this->paramsToStringTransformer, - $this->optionsToStringTransformer, - $this->lockFlashMessageHelper + $this->optionsToStringTransformer ); $this->addSymfonyDependencies($this->saveController); diff --git a/Tests/Unit/Controller/CustomObject/ViewControllerTest.php b/Tests/Unit/Controller/CustomObject/ViewControllerTest.php index b86f4faee..1949d4b0b 100644 --- a/Tests/Unit/Controller/CustomObject/ViewControllerTest.php +++ b/Tests/Unit/Controller/CustomObject/ViewControllerTest.php @@ -4,8 +4,15 @@ namespace MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\CustomObject; +use Doctrine\Persistence\ManagerRegistry; +use Mautic\CoreBundle\Factory\ModelFactory; use Mautic\CoreBundle\Form\Type\DateRangeType; +use Mautic\CoreBundle\Helper\CoreParametersHelper; +use Mautic\CoreBundle\Helper\UserHelper; use Mautic\CoreBundle\Model\AuditLogModel; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; +use Mautic\CoreBundle\Service\FlashBag; +use Mautic\CoreBundle\Translation\Translator; use MauticPlugin\CustomObjectsBundle\Controller\CustomObject\ViewController; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; use MauticPlugin\CustomObjectsBundle\Exception\ForbiddenException; @@ -14,6 +21,7 @@ use MauticPlugin\CustomObjectsBundle\Provider\CustomObjectPermissionProvider; use MauticPlugin\CustomObjectsBundle\Provider\CustomObjectRouteProvider; use MauticPlugin\CustomObjectsBundle\Tests\Unit\Controller\ControllerTestCase; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\Form\FormInterface; use Symfony\Component\HttpFoundation\RequestStack; @@ -40,16 +48,32 @@ protected function setUp(): void { parent::setUp(); + $doctrine = $this->createMock(ManagerRegistry::class); + $modelFactory = $this->createMock(ModelFactory::class); + $userHelper = $this->createMock(UserHelper::class); + $coreParametersHelper = $this->createMock(CoreParametersHelper::class); + $dispatcher = $this->createMock(EventDispatcherInterface::class); + $translator = $this->createMock(Translator::class); + $flashBag = $this->createMock(FlashBag::class); + $this->requestStack = $this->createMock(RequestStack::class); + $security = $this->createMock(CorePermissions::class); $this->customObjectModel = $this->createMock(CustomObjectModel::class); $this->auditLog = $this->createMock(AuditLogModel::class); $this->permissionProvider = $this->createMock(CustomObjectPermissionProvider::class); $this->routeProvider = $this->createMock(CustomObjectRouteProvider::class); - $this->requestStack = $this->createMock(RequestStack::class); $this->formFactory = $this->createMock(FormFactoryInterface::class); $this->form = $this->createMock(FormInterface::class); $this->customObject = $this->createMock(CustomObject::class); $this->viewController = new ViewController( + $doctrine, + $modelFactory, + $userHelper, + $coreParametersHelper, + $dispatcher, + $translator, + $flashBag, $this->requestStack, + $security, $this->formFactory, $this->customObjectModel, $this->auditLog, diff --git a/Tests/Unit/CustomFieldType/AbstractCustomFieldTypeTest.php b/Tests/Unit/CustomFieldType/AbstractCustomFieldTypeTest.php index 37a9c8908..83217e9ec 100644 --- a/Tests/Unit/CustomFieldType/AbstractCustomFieldTypeTest.php +++ b/Tests/Unit/CustomFieldType/AbstractCustomFieldTypeTest.php @@ -9,7 +9,7 @@ use MauticPlugin\CustomObjectsBundle\CustomFieldType\EmailType; use MauticPlugin\CustomObjectsBundle\Entity\CustomField; use MauticPlugin\CustomObjectsBundle\Exception\UndefinedTransformerException; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class AbstractCustomFieldTypeTest extends \PHPUnit\Framework\TestCase { @@ -28,7 +28,7 @@ protected function setUp(): void defined('MAUTIC_TABLE_PREFIX') || define('MAUTIC_TABLE_PREFIX', ''); - $this->translator = $this->createMock(TranslatorInterface::class); + $this->translator = $this->createMock(Translator::class); $this->customField = $this->createMock(CustomField::class); $this->filterOperatorProvider = $this->createMock(FilterOperatorProviderInterface::class); $this->fieldType = $this->getMockForAbstractClass( diff --git a/Tests/Unit/CustomFieldType/AbstractMultivalueTypeTest.php b/Tests/Unit/CustomFieldType/AbstractMultivalueTypeTest.php index d5bae2109..ef75f9a73 100644 --- a/Tests/Unit/CustomFieldType/AbstractMultivalueTypeTest.php +++ b/Tests/Unit/CustomFieldType/AbstractMultivalueTypeTest.php @@ -16,7 +16,7 @@ use MauticPlugin\CustomObjectsBundle\Exception\NotFoundException; use MauticPlugin\CustomObjectsBundle\Helper\CsvHelper; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class AbstractMultivalueTypeTest extends \PHPUnit\Framework\TestCase { @@ -34,7 +34,7 @@ protected function setUp(): void { parent::setUp(); - $this->translator = $this->createMock(TranslatorInterface::class); + $this->translator = $this->createMock(Translator::class); $this->customField = $this->createMock(CustomField::class); $this->customItem = $this->createMock(CustomItem::class); $this->provider = $this->createMock(FilterOperatorProviderInterface::class); diff --git a/Tests/Unit/CustomFieldType/AbstractTextTypeTest.php b/Tests/Unit/CustomFieldType/AbstractTextTypeTest.php index f57dd097f..f35f9226d 100644 --- a/Tests/Unit/CustomFieldType/AbstractTextTypeTest.php +++ b/Tests/Unit/CustomFieldType/AbstractTextTypeTest.php @@ -10,7 +10,7 @@ use MauticPlugin\CustomObjectsBundle\Entity\CustomFieldValueText; use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; use Symfony\Component\Form\Extension\Core\Type\TextType; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class AbstractTextTypeTest extends \PHPUnit\Framework\TestCase { @@ -28,7 +28,7 @@ protected function setUp(): void { parent::setUp(); - $this->translator = $this->createMock(TranslatorInterface::class); + $this->translator = $this->createMock(Translator::class); $this->customField = $this->createMock(CustomField::class); $this->customItem = $this->createMock(CustomItem::class); $this->filterOperatorProvider = $this->createMock(FilterOperatorProviderInterface::class); diff --git a/Tests/Unit/CustomFieldType/CountryTypeTest.php b/Tests/Unit/CustomFieldType/CountryTypeTest.php index 5b76ce15f..b74a7d3f2 100644 --- a/Tests/Unit/CustomFieldType/CountryTypeTest.php +++ b/Tests/Unit/CustomFieldType/CountryTypeTest.php @@ -8,7 +8,7 @@ use MauticPlugin\CustomObjectsBundle\CustomFieldType\CountryType; use MauticPlugin\CustomObjectsBundle\Entity\CustomFieldValueText; use Symfony\Component\OptionsResolver\OptionsResolver; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class CountryTypeTest extends \PHPUnit\Framework\TestCase { @@ -23,7 +23,7 @@ protected function setUp(): void { parent::setUp(); - $this->translator = $this->createMock(TranslatorInterface::class); + $this->translator = $this->createMock(Translator::class); $this->fieldType = new CountryType( $this->translator, $this->createMock(FilterOperatorProviderInterface::class) diff --git a/Tests/Unit/CustomFieldType/DateTimeTypeTest.php b/Tests/Unit/CustomFieldType/DateTimeTypeTest.php index f9ecf679d..804c246fb 100644 --- a/Tests/Unit/CustomFieldType/DateTimeTypeTest.php +++ b/Tests/Unit/CustomFieldType/DateTimeTypeTest.php @@ -13,7 +13,7 @@ use MauticPlugin\CustomObjectsBundle\Entity\CustomFieldValueDateTime; use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; use MauticPlugin\CustomObjectsBundle\Exception\InvalidValueException; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class DateTimeTypeTest extends \PHPUnit\Framework\TestCase { @@ -31,7 +31,7 @@ protected function setUp(): void { parent::setUp(); - $this->translator = $this->createMock(TranslatorInterface::class); + $this->translator = $this->createMock(Translator::class); $this->customField = $this->createMock(CustomField::class); $this->customItem = $this->createMock(CustomItem::class); $this->filterOperatorProvider = $this->createMock(FilterOperatorProviderInterface::class); diff --git a/Tests/Unit/CustomFieldType/DateTypeTest.php b/Tests/Unit/CustomFieldType/DateTypeTest.php index 2458f4ba7..bbf2041fb 100644 --- a/Tests/Unit/CustomFieldType/DateTypeTest.php +++ b/Tests/Unit/CustomFieldType/DateTypeTest.php @@ -12,7 +12,7 @@ use MauticPlugin\CustomObjectsBundle\Entity\CustomFieldValueDate; use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; use MauticPlugin\CustomObjectsBundle\Exception\InvalidValueException; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class DateTypeTest extends \PHPUnit\Framework\TestCase { @@ -30,7 +30,7 @@ protected function setUp(): void { parent::setUp(); - $this->translator = $this->createMock(TranslatorInterface::class); + $this->translator = $this->createMock(Translator::class); $this->customField = $this->createMock(CustomField::class); $this->customItem = $this->createMock(CustomItem::class); $this->filterOperatorProvider = $this->createMock(FilterOperatorProviderInterface::class); diff --git a/Tests/Unit/CustomFieldType/EmailTypeTest.php b/Tests/Unit/CustomFieldType/EmailTypeTest.php index 94f9f347f..8c3b27b9b 100644 --- a/Tests/Unit/CustomFieldType/EmailTypeTest.php +++ b/Tests/Unit/CustomFieldType/EmailTypeTest.php @@ -7,7 +7,7 @@ use Mautic\LeadBundle\Provider\FilterOperatorProviderInterface; use MauticPlugin\CustomObjectsBundle\CustomFieldType\EmailType; use MauticPlugin\CustomObjectsBundle\Entity\CustomField; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class EmailTypeTest extends \PHPUnit\Framework\TestCase { @@ -23,7 +23,7 @@ protected function setUp(): void { parent::setUp(); - $this->translator = $this->createMock(TranslatorInterface::class); + $this->translator = $this->createMock(Translator::class); $this->customField = $this->createMock(CustomField::class); $this->fieldType = new EmailType( $this->translator, diff --git a/Tests/Unit/CustomFieldType/IntTypeTest.php b/Tests/Unit/CustomFieldType/IntTypeTest.php index 92f21ca1b..f903dfe21 100644 --- a/Tests/Unit/CustomFieldType/IntTypeTest.php +++ b/Tests/Unit/CustomFieldType/IntTypeTest.php @@ -9,7 +9,7 @@ use MauticPlugin\CustomObjectsBundle\Entity\CustomField; use MauticPlugin\CustomObjectsBundle\Entity\CustomFieldValueInt; use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class IntTypeTest extends \PHPUnit\Framework\TestCase { @@ -27,7 +27,7 @@ protected function setUp(): void { parent::setUp(); - $this->translator = $this->createMock(TranslatorInterface::class); + $this->translator = $this->createMock(Translator::class); $this->customField = $this->createMock(CustomField::class); $this->customItem = $this->createMock(CustomItem::class); $this->filterOperatorProvider = $this->createMock(FilterOperatorProviderInterface::class); diff --git a/Tests/Unit/CustomFieldType/MultiselectTypeTest.php b/Tests/Unit/CustomFieldType/MultiselectTypeTest.php index 5df503b17..d72c2e563 100644 --- a/Tests/Unit/CustomFieldType/MultiselectTypeTest.php +++ b/Tests/Unit/CustomFieldType/MultiselectTypeTest.php @@ -7,7 +7,7 @@ use Mautic\LeadBundle\Provider\FilterOperatorProviderInterface; use MauticPlugin\CustomObjectsBundle\CustomFieldType\MultiselectType; use MauticPlugin\CustomObjectsBundle\Helper\CsvHelper; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class MultiselectTypeTest extends \PHPUnit\Framework\TestCase { @@ -22,7 +22,7 @@ protected function setUp(): void { parent::setUp(); - $this->translator = $this->createMock(TranslatorInterface::class); + $this->translator = $this->createMock(Translator::class); $this->fieldType = new MultiselectType( $this->translator, $this->createMock(FilterOperatorProviderInterface::class), diff --git a/Tests/Unit/CustomFieldType/PhoneTypeTest.php b/Tests/Unit/CustomFieldType/PhoneTypeTest.php index 941baf036..4ddf7ff48 100644 --- a/Tests/Unit/CustomFieldType/PhoneTypeTest.php +++ b/Tests/Unit/CustomFieldType/PhoneTypeTest.php @@ -7,7 +7,7 @@ use Mautic\LeadBundle\Provider\FilterOperatorProviderInterface; use MauticPlugin\CustomObjectsBundle\CustomFieldType\PhoneType; use MauticPlugin\CustomObjectsBundle\Entity\CustomField; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class PhoneTypeTest extends \PHPUnit\Framework\TestCase { @@ -23,7 +23,7 @@ protected function setUp(): void { parent::setUp(); - $this->translator = $this->createMock(TranslatorInterface::class); + $this->translator = $this->createMock(Translator::class); $this->customField = $this->createMock(CustomField::class); $this->fieldType = new PhoneType( $this->translator, diff --git a/Tests/Unit/CustomFieldType/SelectTypeTest.php b/Tests/Unit/CustomFieldType/SelectTypeTest.php index a1096a022..cbabbbd3c 100644 --- a/Tests/Unit/CustomFieldType/SelectTypeTest.php +++ b/Tests/Unit/CustomFieldType/SelectTypeTest.php @@ -11,7 +11,7 @@ use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; use MauticPlugin\CustomObjectsBundle\Exception\NotFoundException; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class SelectTypeTest extends \PHPUnit\Framework\TestCase { @@ -29,7 +29,7 @@ protected function setUp(): void { parent::setUp(); - $this->translator = $this->createMock(TranslatorInterface::class); + $this->translator = $this->createMock(Translator::class); $this->customField = $this->createMock(CustomField::class); $this->customItem = $this->createMock(CustomItem::class); $this->filterOperatorProvider = $this->createMock(FilterOperatorProviderInterface::class); diff --git a/Tests/Unit/CustomFieldType/UrlTypeTest.php b/Tests/Unit/CustomFieldType/UrlTypeTest.php index fdaa75929..ccbd9a1f6 100644 --- a/Tests/Unit/CustomFieldType/UrlTypeTest.php +++ b/Tests/Unit/CustomFieldType/UrlTypeTest.php @@ -7,7 +7,7 @@ use Mautic\LeadBundle\Provider\FilterOperatorProviderInterface; use MauticPlugin\CustomObjectsBundle\CustomFieldType\UrlType; use MauticPlugin\CustomObjectsBundle\Entity\CustomField; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class UrlTypeTest extends \PHPUnit\Framework\TestCase { @@ -23,7 +23,7 @@ protected function setUp(): void { parent::setUp(); - $this->translator = $this->createMock(TranslatorInterface::class); + $this->translator = $this->createMock(Translator::class); $this->customField = $this->createMock(CustomField::class); $this->fieldType = new UrlType( $this->translator, diff --git a/Tests/Unit/CustomObjectTestCase.php b/Tests/Unit/CustomObjectTestCase.php index 39809599a..cf645d0f1 100644 --- a/Tests/Unit/CustomObjectTestCase.php +++ b/Tests/Unit/CustomObjectTestCase.php @@ -28,7 +28,7 @@ protected function createCustomObject(string $name = 'custom object'): CustomObj protected function createCustomField(string $type, CustomObject $customObject): CustomField { - $customFieldFactory = self::$container->get('custom_object.custom_field_factory'); + $customFieldFactory = $this->getContainer()->get('custom_object.custom_field_factory'); $customField = $customFieldFactory->create('text', $customObject); $customField->setLabel($type); $customField->setAlias($type); diff --git a/Tests/Unit/Entity/CustomFieldTest.php b/Tests/Unit/Entity/CustomFieldTest.php index 40ee83a32..15b60d15e 100644 --- a/Tests/Unit/Entity/CustomFieldTest.php +++ b/Tests/Unit/Entity/CustomFieldTest.php @@ -19,7 +19,7 @@ use MauticPlugin\CustomObjectsBundle\Form\Validator\Constraints\AllowUniqueIdentifier; use MauticPlugin\CustomObjectsBundle\Helper\CsvHelper; use Symfony\Component\Form\DataTransformerInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; use Symfony\Component\Validator\Constraints\Callback; use Symfony\Component\Validator\Constraints\Length; use Symfony\Component\Validator\Constraints\NotBlank; @@ -69,7 +69,7 @@ public function testLoadValidatorMetadata(): void public function testValidateValueWhenValid(): void { $context = $this->createMock(ExecutionContextInterface::class); - $translator = $this->createMock(TranslatorInterface::class); + $translator = $this->createMock(Translator::class); $provider = $this->createMock(FilterOperatorProviderInterface::class); $customField = new CustomField(); @@ -84,7 +84,7 @@ public function testValidateValueWhenValid(): void public function testValidateValueWhenInvalid(): void { $context = $this->createMock(ExecutionContextInterface::class); - $translator = $this->createMock(TranslatorInterface::class); + $translator = $this->createMock(Translator::class); $violation = $this->createMock(ConstraintViolationBuilderInterface::class); $provider = $this->createMock(FilterOperatorProviderInterface::class); $customField = new CustomField(); @@ -189,7 +189,7 @@ public function testGetFormFieldOptions(): void { $customField = new CustomField(); $typeObject = new DateType( - $this->createMock(TranslatorInterface::class), + $this->createMock(Translator::class), $this->createMock(FilterOperatorProviderInterface::class) ); @@ -222,7 +222,7 @@ public function testGetFormFieldOptionsWithChoices(): void $red = new CustomFieldOption(); $blue = new CustomFieldOption(); $typeObject = new SelectType( - $this->createMock(TranslatorInterface::class), + $this->createMock(Translator::class), $this->createMock(FilterOperatorProviderInterface::class) ); @@ -276,7 +276,7 @@ public function testGetChoices(): void $customField->addOption($optionB); $customField->setTypeObject( new SelectType( - $this->createMock(TranslatorInterface::class), + $this->createMock(Translator::class), $this->createMock(FilterOperatorProviderInterface::class) ) ); @@ -292,7 +292,7 @@ public function testGetChoicesWithCountryField(): void $customField = new CustomField(); $customField->setTypeObject( new CountryType( - $this->createMock(TranslatorInterface::class), + $this->createMock(Translator::class), $this->createMock(FilterOperatorProviderInterface::class) ) ); @@ -309,7 +309,7 @@ public function testValueToLabel(): void $customField->addOption($optionB); $customField->setTypeObject( new SelectType( - $this->createMock(TranslatorInterface::class), + $this->createMock(Translator::class), $this->createMock(FilterOperatorProviderInterface::class) ) ); @@ -325,7 +325,7 @@ public function testValueToLabelWithInteger(): void $customField->addOption($optionB); $customField->setTypeObject( new SelectType( - $this->createMock(TranslatorInterface::class), + $this->createMock(Translator::class), $this->createMock(FilterOperatorProviderInterface::class) ) ); @@ -337,7 +337,7 @@ public function testValueToLabelIfOptionNotFound(): void $customField = new CustomField(); $customField->setTypeObject( new SelectType( - $this->createMock(TranslatorInterface::class), + $this->createMock(Translator::class), $this->createMock(FilterOperatorProviderInterface::class) ) ); @@ -391,7 +391,7 @@ public function testDefaultValueTransformation() public function testCanHaveMultipleValuesForDateType() { $typeObject = new DateType( - $this->createMock(TranslatorInterface::class), + $this->createMock(Translator::class), $this->createMock(FilterOperatorProviderInterface::class) ); $customField = new CustomField(); @@ -403,7 +403,7 @@ public function testCanHaveMultipleValuesForDateType() public function testCanHaveMultipleValuesForCheckboxType() { $typeObject = new CheckboxGroupType( - $this->createMock(TranslatorInterface::class), + $this->createMock(Translator::class), $this->createMock(FilterOperatorProviderInterface::class), $this->createMock(CsvHelper::class) ); diff --git a/Tests/Unit/Entity/CustomItemTest.php b/Tests/Unit/Entity/CustomItemTest.php index 87215858e..8a86b21f1 100644 --- a/Tests/Unit/Entity/CustomItemTest.php +++ b/Tests/Unit/Entity/CustomItemTest.php @@ -15,7 +15,7 @@ use MauticPlugin\CustomObjectsBundle\Entity\CustomItemXrefCustomItem; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; use MauticPlugin\CustomObjectsBundle\Exception\NotFoundException; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class CustomItemTest extends \PHPUnit\Framework\TestCase { @@ -116,7 +116,7 @@ public function testCreateNewCustomFieldValueByFieldId(): void $field->method('getId')->willReturn(1); $field->method('getTypeObject')->willReturn( new TextType( - $this->createMock(TranslatorInterface::class), + $this->createMock(Translator::class), $this->createMock(FilterOperatorProviderInterface::class) ) ); @@ -143,7 +143,7 @@ public function testCreateNewCustomFieldValueByFieldAlias(): void $field->method('getId')->willReturn(1); $field->method('getTypeObject')->willReturn( new TextType( - $this->createMock(TranslatorInterface::class), + $this->createMock(Translator::class), $this->createMock(FilterOperatorProviderInterface::class) ) ); @@ -172,7 +172,7 @@ public function testSetDefaultValuesForMissingFields(): void $fieldA->expects($this->never())->method('getDefaultValue'); $fieldA->method('getTypeObject')->willReturn( new TextType( - $this->createMock(TranslatorInterface::class), + $this->createMock(Translator::class), $this->createMock(FilterOperatorProviderInterface::class) ) ); @@ -181,7 +181,7 @@ public function testSetDefaultValuesForMissingFields(): void $fieldB->expects($this->once())->method('getDefaultValue')->willReturn('Default B'); $fieldB->method('getTypeObject')->willReturn( new TextType( - $this->createMock(TranslatorInterface::class), + $this->createMock(Translator::class), $this->createMock(FilterOperatorProviderInterface::class) ) ); @@ -190,7 +190,7 @@ public function testSetDefaultValuesForMissingFields(): void $fieldB->expects($this->once())->method('getDefaultValue')->willReturn(null); $fieldC->method('getTypeObject')->willReturn( new TextType( - $this->createMock(TranslatorInterface::class), + $this->createMock(Translator::class), $this->createMock(FilterOperatorProviderInterface::class) ) ); diff --git a/Tests/Unit/EventListener/ApiSubscriberTest.php b/Tests/Unit/EventListener/ApiSubscriberTest.php index 4503681e4..82c806784 100644 --- a/Tests/Unit/EventListener/ApiSubscriberTest.php +++ b/Tests/Unit/EventListener/ApiSubscriberTest.php @@ -21,7 +21,7 @@ use MauticPlugin\CustomObjectsBundle\Provider\ConfigProvider; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class ApiSubscriberTest extends \PHPUnit\Framework\TestCase { @@ -428,7 +428,7 @@ public function testSaveCustomObjectsInContactRequestForNewCustomItem(): void $skuField->setAlias('sku'); $skuField->setTypeObject( new TextType( - $this->createMock(TranslatorInterface::class), + $this->createMock(Translator::class), $this->createMock(FilterOperatorProviderInterface::class) ) ); @@ -436,7 +436,7 @@ public function testSaveCustomObjectsInContactRequestForNewCustomItem(): void $priceField->setAlias('price'); $priceField->setTypeObject( new IntType( - $this->createMock(TranslatorInterface::class), + $this->createMock(Translator::class), $this->createMock(FilterOperatorProviderInterface::class) ) ); diff --git a/Tests/Unit/EventListener/AssetsSubscriberTest.php b/Tests/Unit/EventListener/AssetsSubscriberTest.php index ec20fc3c9..770736b6f 100644 --- a/Tests/Unit/EventListener/AssetsSubscriberTest.php +++ b/Tests/Unit/EventListener/AssetsSubscriberTest.php @@ -4,11 +4,11 @@ namespace MauticPlugin\CustomObjectsBundle\Tests\Unit\EventListener; -use Mautic\CoreBundle\Templating\Helper\AssetsHelper; +use Mautic\CoreBundle\Twig\Helper\AssetsHelper; use MauticPlugin\CustomObjectsBundle\EventListener\AssetsSubscriber; use MauticPlugin\CustomObjectsBundle\Provider\ConfigProvider; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpKernel\Event\GetResponseEvent; +use Symfony\Component\HttpKernel\Event\RequestEvent; class AssetsSubscriberTest extends \PHPUnit\Framework\TestCase { @@ -16,7 +16,7 @@ class AssetsSubscriberTest extends \PHPUnit\Framework\TestCase private $configProvider; - private $getResponseEvent; + private $getRequestEvent; private $request; @@ -28,7 +28,7 @@ protected function setUp(): void $this->assetsHelper = $this->createMock(AssetsHelper::class); $this->configProvider = $this->createMock(ConfigProvider::class); - $this->getResponseEvent = $this->createMock(GetResponseEvent::class); + $this->getRequestEvent = $this->createMock(RequestEvent::class); $this->request = $this->createMock(Request::class); $this->assetsSubscriber = new AssetsSubscriber($this->assetsHelper, $this->configProvider); } @@ -39,13 +39,13 @@ public function testPluginDisabled(): void ->method('pluginIsEnabled') ->willReturn(false); - $this->getResponseEvent->expects($this->never()) - ->method('isMasterRequest'); + $this->getRequestEvent->expects($this->never()) + ->method('isMainrequest'); $this->assetsHelper->expects($this->never()) ->method('addStylesheet'); - $this->assetsSubscriber->loadAssets($this->getResponseEvent); + $this->assetsSubscriber->loadAssets($this->getRequestEvent); } public function testPluginEnabledOnPublicPage(): void @@ -54,11 +54,11 @@ public function testPluginEnabledOnPublicPage(): void ->method('pluginIsEnabled') ->willReturn(true); - $this->getResponseEvent->expects($this->once()) - ->method('isMasterRequest') + $this->getRequestEvent->expects($this->once()) + ->method('isMainrequest') ->willReturn(true); - $this->getResponseEvent->expects($this->once()) + $this->getRequestEvent->expects($this->once()) ->method('getRequest') ->willReturn($this->request); @@ -69,7 +69,7 @@ public function testPluginEnabledOnPublicPage(): void $this->assetsHelper->expects($this->never()) ->method('addStylesheet'); - $this->assetsSubscriber->loadAssets($this->getResponseEvent); + $this->assetsSubscriber->loadAssets($this->getRequestEvent); } public function testPluginEnabled(): void @@ -78,11 +78,11 @@ public function testPluginEnabled(): void ->method('pluginIsEnabled') ->willReturn(true); - $this->getResponseEvent->expects($this->once()) - ->method('isMasterRequest') + $this->getRequestEvent->expects($this->once()) + ->method('isMainrequest') ->willReturn(true); - $this->getResponseEvent->expects($this->once()) + $this->getRequestEvent->expects($this->once()) ->method('getRequest') ->willReturn($this->request); @@ -93,6 +93,6 @@ public function testPluginEnabled(): void $this->assetsHelper->expects($this->once()) ->method('addStylesheet'); - $this->assetsSubscriber->loadAssets($this->getResponseEvent); + $this->assetsSubscriber->loadAssets($this->getRequestEvent); } } diff --git a/Tests/Unit/EventListener/CampaignSubscriberTest.php b/Tests/Unit/EventListener/CampaignSubscriberTest.php index 5f9c65ee1..43cabc159 100644 --- a/Tests/Unit/EventListener/CampaignSubscriberTest.php +++ b/Tests/Unit/EventListener/CampaignSubscriberTest.php @@ -26,7 +26,7 @@ use MauticPlugin\CustomObjectsBundle\Provider\ConfigProvider; use MauticPlugin\CustomObjectsBundle\Segment\Query\Filter\QueryFilterFactory; use PHPUnit\Framework\TestCase; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class CampaignSubscriberTest extends TestCase { @@ -68,7 +68,7 @@ protected function setUp(): void $this->customFieldModel = $this->createMock(CustomFieldModel::class); $this->customObjectModel = $this->createMock(CustomObjectModel::class); $this->customItemModel = $this->createMock(CustomItemModel::class); - $this->translator = $this->createMock(TranslatorInterface::class); + $this->translator = $this->createMock(Translator::class); $this->configProvider = $this->createMock(ConfigProvider::class); $this->queryFilterHelper = $this->createMock(QueryFilterHelper::class); $this->queryFilterFactory = $this->createMock(QueryFilterFactory::class); diff --git a/Tests/Unit/EventListener/ContactSubscriberTest.php b/Tests/Unit/EventListener/ContactSubscriberTest.php index cf17885f0..ce70ce42c 100644 --- a/Tests/Unit/EventListener/ContactSubscriberTest.php +++ b/Tests/Unit/EventListener/ContactSubscriberTest.php @@ -18,7 +18,7 @@ use MauticPlugin\CustomObjectsBundle\Provider\CustomItemRouteProvider; use MauticPlugin\CustomObjectsBundle\Repository\CustomItemXrefContactRepository; use PHPUnit\Framework\MockObject\MockObject; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class ContactSubscriberTest extends \PHPUnit\Framework\TestCase { @@ -44,7 +44,7 @@ protected function setUp(): void { parent::setUp(); - $this->translator = $this->createMock(TranslatorInterface::class); + $this->translator = $this->createMock(Translator::class); $this->entityManager = $this->createMock(EntityManager::class); $this->routeProvider = $this->createMock(CustomItemRouteProvider::class); $this->customItemModel = $this->createMock(CustomItemModel::class); diff --git a/Tests/Unit/EventListener/ContactTabSubscriberTest.php b/Tests/Unit/EventListener/ContactTabSubscriberTest.php index 62499bc83..a725158c5 100644 --- a/Tests/Unit/EventListener/ContactTabSubscriberTest.php +++ b/Tests/Unit/EventListener/ContactTabSubscriberTest.php @@ -17,7 +17,7 @@ use MauticPlugin\CustomObjectsBundle\Repository\CustomItemRepository; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class ContactTabSubscriberTest extends TestCase { @@ -37,7 +37,7 @@ class ContactTabSubscriberTest extends TestCase private $configProvider; /** - * @var MockObject|TranslatorInterface + * @var MockObject|Translator */ private $translator; @@ -68,7 +68,7 @@ protected function setUp(): void $this->customObjectModel = $this->createMock(CustomObjectModel::class); $this->customItemRepository = $this->createMock(CustomItemRepository::class); $this->configProvider = $this->createMock(ConfigProvider::class); - $this->translator = $this->createMock(TranslatorInterface::class); + $this->translator = $this->createMock(Translator::class); $this->customItemRouteProvider = $this->createMock(CustomItemRouteProvider::class); $this->customContentEvent = $this->createMock(CustomContentEvent::class); $this->sessionProviderFactory = $this->createMock(SessionProviderFactory::class); diff --git a/Tests/Unit/EventListener/CustomFieldPostLoadSubscriberTest.php b/Tests/Unit/EventListener/CustomFieldPostLoadSubscriberTest.php index e250adfcd..a0edda588 100644 --- a/Tests/Unit/EventListener/CustomFieldPostLoadSubscriberTest.php +++ b/Tests/Unit/EventListener/CustomFieldPostLoadSubscriberTest.php @@ -12,7 +12,7 @@ use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; use MauticPlugin\CustomObjectsBundle\EventListener\CustomFieldPostLoadSubscriber; use MauticPlugin\CustomObjectsBundle\Provider\CustomFieldTypeProvider; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class CustomFieldPostLoadSubscriberTest extends \PHPUnit\Framework\TestCase { @@ -54,7 +54,7 @@ public function testPostLoadWhenNotACustomField(): void public function testPostLoadWhenParamsIsNotAnArray(): void { $typeObject = new TextType( - $this->createMock(TranslatorInterface::class), + $this->createMock(Translator::class), $this->createMock(FilterOperatorProviderInterface::class) ); @@ -88,7 +88,7 @@ public function testPostLoadWhenParamsIsNotAnArray(): void public function testPostLoadWhenParamsIsAnArray(): void { $typeObject = new TextType( - $this->createMock(TranslatorInterface::class), + $this->createMock(Translator::class), $this->createMock(FilterOperatorProviderInterface::class) ); diff --git a/Tests/Unit/EventListener/CustomItemButtonSubscriberTest.php b/Tests/Unit/EventListener/CustomItemButtonSubscriberTest.php index ed44bf1a0..78b0c8252 100644 --- a/Tests/Unit/EventListener/CustomItemButtonSubscriberTest.php +++ b/Tests/Unit/EventListener/CustomItemButtonSubscriberTest.php @@ -15,7 +15,7 @@ use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\ParameterBag; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class CustomItemButtonSubscriberTest extends TestCase { @@ -34,7 +34,7 @@ class CustomItemButtonSubscriberTest extends TestCase private $routeProvider; /** - * @var MockObject|TranslatorInterface + * @var MockObject|Translator */ private $translator; @@ -64,7 +64,7 @@ protected function setUp(): void $this->permissionProvider = $this->createMock(CustomItemPermissionProvider::class); $this->routeProvider = $this->createMock(CustomItemRouteProvider::class); - $this->translator = $this->createMock(TranslatorInterface::class); + $this->translator = $this->createMock(Translator::class); $this->request = $this->createMock(Request::class); $this->customItem = $this->createMock(CustomItem::class); $this->event = $this->createMock(CustomButtonEvent::class); diff --git a/Tests/Unit/EventListener/CustomItemPostSaveSubscriberTest.php b/Tests/Unit/EventListener/CustomItemPostSaveSubscriberTest.php index f28cc0113..e8bfe9e2c 100644 --- a/Tests/Unit/EventListener/CustomItemPostSaveSubscriberTest.php +++ b/Tests/Unit/EventListener/CustomItemPostSaveSubscriberTest.php @@ -38,7 +38,7 @@ public function fetchEntity(int $id): CustomItem }; $requestStack = new class() extends RequestStack { - public function getCurrentRequest() + public function getCurrentRequest() : Request | null { return new class() extends Request { public function __construct() @@ -79,7 +79,7 @@ public function fetchEntity(int $id): CustomItem }; $requestStack = new class() extends RequestStack { - public function getCurrentRequest() + public function getCurrentRequest() : Request | null { return new class() extends Request { public function __construct() diff --git a/Tests/Unit/EventListener/CustomItemTabSubscriberTest.php b/Tests/Unit/EventListener/CustomItemTabSubscriberTest.php index 2e4e7bb5e..77a62f268 100644 --- a/Tests/Unit/EventListener/CustomItemTabSubscriberTest.php +++ b/Tests/Unit/EventListener/CustomItemTabSubscriberTest.php @@ -15,7 +15,7 @@ use MauticPlugin\CustomObjectsBundle\Repository\CustomItemRepository; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class CustomItemTabSubscriberTest extends TestCase { @@ -30,7 +30,7 @@ class CustomItemTabSubscriberTest extends TestCase private $customItemRepository; /** - * @var MockObject|TranslatorInterface + * @var MockObject|Translator */ private $translator; @@ -70,7 +70,7 @@ protected function setUp(): void $this->customObjectModel = $this->createMock(CustomObjectModel::class); $this->customItemRepository = $this->createMock(CustomItemRepository::class); - $this->translator = $this->createMock(TranslatorInterface::class); + $this->translator = $this->createMock(Translator::class); $this->customItemRouteProvider = $this->createMock(CustomItemRouteProvider::class); $this->customContentEvent = $this->createMock(CustomContentEvent::class); $this->customObject = $this->createMock(CustomObject::class); diff --git a/Tests/Unit/EventListener/FilterOperatorSubscriberTest.php b/Tests/Unit/EventListener/FilterOperatorSubscriberTest.php index 3afb8ca20..d60119a4b 100644 --- a/Tests/Unit/EventListener/FilterOperatorSubscriberTest.php +++ b/Tests/Unit/EventListener/FilterOperatorSubscriberTest.php @@ -13,7 +13,7 @@ use MauticPlugin\CustomObjectsBundle\Model\CustomObjectModel; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\FormInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; final class FilterOperatorSubscriberTest extends \PHPUnit\Framework\TestCase { @@ -48,8 +48,8 @@ public function testGetSubscribedEvents(): void */ public function testOnOperatorsGenerate(): void { - /** @var \PHPUnit\Framework\MockObject\MockObject|TranslatorInterface translatorInterfaceMock */ - $translatorInterfaceMock = $this->createMock(TranslatorInterface::class); + /** @var \PHPUnit\Framework\MockObject\MockObject|Translator translatorInterfaceMock */ + $translatorInterfaceMock = $this->createMock(Translator::class); $event = new LeadListFiltersOperatorsEvent([], $translatorInterfaceMock); $this->assertCount(0, $event->getOperators(), 'Expects 0 operators'); $this->filterOperatorSubscriber->onOperatorsGenerate($event); diff --git a/Tests/Unit/EventListener/ImportSubscriberTest.php b/Tests/Unit/EventListener/ImportSubscriberTest.php index 9f50f200a..c7d4586fa 100644 --- a/Tests/Unit/EventListener/ImportSubscriberTest.php +++ b/Tests/Unit/EventListener/ImportSubscriberTest.php @@ -19,9 +19,10 @@ use MauticPlugin\CustomObjectsBundle\Model\CustomObjectModel; use MauticPlugin\CustomObjectsBundle\Provider\ConfigProvider; use MauticPlugin\CustomObjectsBundle\Provider\CustomItemPermissionProvider; +use MauticPlugin\CustomObjectsBundle\Provider\CustomObjectPermissionProvider; use MauticPlugin\CustomObjectsBundle\Repository\CustomFieldRepository; use Symfony\Component\Form\Form; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class ImportSubscriberTest extends \PHPUnit\Framework\TestCase { @@ -29,7 +30,8 @@ class ImportSubscriberTest extends \PHPUnit\Framework\TestCase private $customItemImportModel; - private $permissionProvider; + private $customItemPermissionProvider; + private $customObjectPermissionProvider; private $configProvider; @@ -62,10 +64,11 @@ protected function setUp(): void $this->customObjectModel = $this->createMock(CustomObjectModel::class); $this->customItemImportModel = $this->createMock(CustomItemImportModel::class); - $this->permissionProvider = $this->createMock(CustomItemPermissionProvider::class); + $this->customItemPermissionProvider = $this->createMock(CustomItemPermissionProvider::class); + $this->customObjectPermissionProvider = $this->createMock(CustomObjectPermissionProvider::class); $this->configProvider = $this->createMock(ConfigProvider::class); $this->customFieldRepository = $this->createMock(CustomFieldRepository::class); - $this->translator = $this->createMock(TranslatorInterface::class); + $this->translator = $this->createMock(Translator::class); $this->importValidateEvent = $this->createMock(ImportValidateEvent::class); $this->importInitEvent = new ImportInitEvent('unicorn'); $this->importMappingEvent = new ImportMappingEvent('unicorn'); @@ -78,7 +81,8 @@ protected function setUp(): void $this->customObjectModel, $this->customItemImportModel, $this->configProvider, - $this->permissionProvider, + $this->customItemPermissionProvider, + $this->customObjectPermissionProvider, $this->customFieldRepository, $this->translator ); @@ -378,7 +382,7 @@ public function testOnImportProcessWhenNotACustomObjectImport(): void ->method('getObject') ->willReturn('company'); - $this->permissionProvider->expects($this->never()) + $this->customItemPermissionProvider->expects($this->never()) ->method('canCreate'); $this->importSubscriber->onImportProcess($this->importProcessEvent); @@ -396,7 +400,7 @@ public function testOnImportProcessWhenCustomObjectNotFound(): void ->method('getObject') ->willReturn('custom-object:350'); - $this->permissionProvider->expects($this->once()) + $this->customItemPermissionProvider->expects($this->once()) ->method('canCreate'); $this->customObjectModel->expects($this->once()) @@ -424,7 +428,7 @@ public function testOnImportProcess(): void ->method('getObject') ->willReturn('custom-object:350'); - $this->permissionProvider->expects($this->once()) + $this->customItemPermissionProvider->expects($this->once()) ->method('canCreate'); $this->customObjectModel->expects($this->once()) diff --git a/Tests/Unit/EventListener/MenuSubscriberTest.php b/Tests/Unit/EventListener/MenuSubscriberTest.php index fd2566aba..6cea866b1 100644 --- a/Tests/Unit/EventListener/MenuSubscriberTest.php +++ b/Tests/Unit/EventListener/MenuSubscriberTest.php @@ -120,7 +120,7 @@ public function testSomeCustomObjects(): void 'items' => [ 'custom.object.title' => [ 'access' => 'custom_objects:custom_objects:view', - 'iconClass' => 'fa-list-alt', + 'iconClass' => 'ri-list-unordered', 'id' => 'mautic_custom_object_list', ], ], @@ -163,7 +163,7 @@ public function testAdminMenu(): void 'id' => CustomObjectRouteProvider::ROUTE_LIST, 'route' => CustomObjectRouteProvider::ROUTE_LIST, 'access' => 'custom_objects:custom_objects:view', - 'iconClass' => 'fa-list-alt', + 'iconClass' => 'ri-list-unordered', ], ], ]); diff --git a/Tests/Unit/EventListener/ReportSubscriberTest.php b/Tests/Unit/EventListener/ReportSubscriberTest.php index 5dc053f93..829571ac9 100644 --- a/Tests/Unit/EventListener/ReportSubscriberTest.php +++ b/Tests/Unit/EventListener/ReportSubscriberTest.php @@ -25,7 +25,8 @@ use MauticPlugin\CustomObjectsBundle\Repository\CustomObjectRepository; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; class ReportSubscriberTest extends TestCase { @@ -55,7 +56,7 @@ class ReportSubscriberTest extends TestCase private $reportBuilderEvent; /** - * @var MockObject|TranslatorInterface + * @var MockObject|Translator */ private $translatorInterface; @@ -96,8 +97,10 @@ protected function setUp(): void $this->customObjectRepository = $this->createMock(CustomObjectRepository::class); $this->fieldsBuilder = $this->createMock(FieldsBuilder::class); $this->companyReportData = $this->createMock(CompanyReportData::class); - $this->reportHelper = new ReportHelper(); - $this->translatorInterface = $this->createMock(TranslatorInterface::class); + $this->reportHelper = new ReportHelper( + $this->createMock(EventDispatcherInterface::class), + ); + $this->translatorInterface = $this->createMock(Translator::class); $this->reportSubscriber = new ReportSubscriber($this->customObjectRepository, $this->fieldsBuilder, $this->companyReportData, $this->reportHelper, $this->translatorInterface); $this->reportBuilderEvent = $this->createMock(ReportBuilderEvent::class); $this->filterOperatorProviderInterface = $this->createMock(FilterOperatorProviderInterface::class); diff --git a/Tests/Unit/EventListener/SegmentFiltersChoicesGenerateSubscriberTest.php b/Tests/Unit/EventListener/SegmentFiltersChoicesGenerateSubscriberTest.php index a1a8d8242..de741ac4a 100644 --- a/Tests/Unit/EventListener/SegmentFiltersChoicesGenerateSubscriberTest.php +++ b/Tests/Unit/EventListener/SegmentFiltersChoicesGenerateSubscriberTest.php @@ -26,7 +26,7 @@ use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\EventDispatcher\EventDispatcherInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class SegmentFiltersChoicesGenerateSubscriberTest extends TestCase { @@ -38,7 +38,7 @@ class SegmentFiltersChoicesGenerateSubscriberTest extends TestCase private $customObjectRepository; /** - * @var MockObject|TranslatorInterface + * @var MockObject|Translator */ private $translator; @@ -77,7 +77,7 @@ public function setUp(): void parent::setUp(); $this->customObjectRepository = $this->createMock(CustomObjectRepository::class); - $this->translator = $this->createMock(TranslatorInterface::class); + $this->translator = $this->createMock(Translator::class); $this->configProvider = $this->createMock(ConfigProvider::class); $this->fieldTypeProvider = $this->createMock(CustomFieldTypeProvider::class); $this->filterOperatorProvider = $this->createMock(FilterOperatorProviderInterface::class); diff --git a/Tests/Unit/EventListener/SerializerSubscriberTest.php b/Tests/Unit/EventListener/SerializerSubscriberTest.php index 5f607ce93..7c437ac91 100644 --- a/Tests/Unit/EventListener/SerializerSubscriberTest.php +++ b/Tests/Unit/EventListener/SerializerSubscriberTest.php @@ -27,7 +27,7 @@ use MauticPlugin\CustomObjectsBundle\Repository\CustomItemXrefContactRepository; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RequestStack; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class SerializerSubscriberTest extends \PHPUnit\Framework\TestCase { @@ -198,7 +198,7 @@ public function testAddCustomItemsIntoContactResponse(): void $customFieldDate = $this->createMock(CustomField::class); $context = $this->createMock(Context::class); $visitor = $this->createMock(SerializationVisitorInterface::class); - $translator = $this->createMock(TranslatorInterface::class); + $translator = $this->createMock(Translator::class); $filterOperator = $this->createMock(FilterOperatorProviderInterface::class); $contact->method('getId')->willReturn(345); diff --git a/Tests/Unit/EventListener/TokenSubscriberTest.php b/Tests/Unit/EventListener/TokenSubscriberTest.php index 3abc34847..b287cfc9a 100644 --- a/Tests/Unit/EventListener/TokenSubscriberTest.php +++ b/Tests/Unit/EventListener/TokenSubscriberTest.php @@ -37,7 +37,7 @@ use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\EventDispatcher\EventDispatcher; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class TokenSubscriberTest extends TestCase { @@ -498,7 +498,7 @@ public function testDecodeTokensWithFoundFieldValue(): void ->method('getTypeObject') ->willReturn( new TextType( - $this->createMock(TranslatorInterface::class), + $this->createMock(Translator::class), $this->createMock(FilterOperatorProviderInterface::class) ) ); @@ -645,7 +645,7 @@ public function testDecodeTokensWithEmptyFieldValue(): void ->method('getTypeObject') ->willReturn( new TextType( - $this->createMock(TranslatorInterface::class), + $this->createMock(Translator::class), $this->createMock(FilterOperatorProviderInterface::class) ) ); diff --git a/Tests/Unit/Form/Type/CampaignConditionFieldValueTypeTest.php b/Tests/Unit/Form/Type/CampaignConditionFieldValueTypeTest.php index d45d81ac0..0c57fc8eb 100644 --- a/Tests/Unit/Form/Type/CampaignConditionFieldValueTypeTest.php +++ b/Tests/Unit/Form/Type/CampaignConditionFieldValueTypeTest.php @@ -19,7 +19,7 @@ use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormConfigBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; final class CampaignConditionFieldValueTypeTest extends TestCase { @@ -34,7 +34,7 @@ final class CampaignConditionFieldValueTypeTest extends TestCase private $customItemRouterMock; /** - * @var MockObject|TranslatorInterface + * @var MockObject|Translator */ private $translatorMock; @@ -49,7 +49,7 @@ protected function setUp(): void $this->customFieldModelMock = $this->createMock(CustomFieldModel::class); $this->customItemRouterMock = $this->createMock(CustomItemRouteProvider::class); - $this->translatorMock = $this->createMock(TranslatorInterface::class); + $this->translatorMock = $this->createMock(Translator::class); $this->campaignConditionFieldValueType = new CampaignConditionFieldValueType( $this->customFieldModelMock, $this->customItemRouterMock, diff --git a/Tests/Unit/Helper/LockFlashMessageHelperTest.php b/Tests/Unit/Helper/LockFlashMessageHelperTest.php index 59cbecbb1..b1933d46a 100644 --- a/Tests/Unit/Helper/LockFlashMessageHelperTest.php +++ b/Tests/Unit/Helper/LockFlashMessageHelperTest.php @@ -10,14 +10,14 @@ use MauticPlugin\CustomObjectsBundle\Helper\LockFlashMessageHelper; use PHPUnit\Framework\TestCase; use Symfony\Component\Routing\Router; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class LockFlashMessageHelperTest extends TestCase { public function testAddFlash(): void { $coreParametersHelper = $this->createMock(CoreParametersHelper::class); - $translator = $this->createMock(TranslatorInterface::class); + $translator = $this->createMock(Translator::class); $flashBag = $this->createMock(FlashBag::class); $router = $this->createMock(Router::class); diff --git a/Tests/Unit/Model/CustomFieldValueModelTest.php b/Tests/Unit/Model/CustomFieldValueModelTest.php index ea70cf92d..41997c4f9 100644 --- a/Tests/Unit/Model/CustomFieldValueModelTest.php +++ b/Tests/Unit/Model/CustomFieldValueModelTest.php @@ -18,7 +18,7 @@ use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; use MauticPlugin\CustomObjectsBundle\Entity\CustomObject; use MauticPlugin\CustomObjectsBundle\Model\CustomFieldValueModel; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; use Symfony\Component\Validator\ConstraintViolationListInterface; use Symfony\Component\Validator\Validator\ValidatorInterface; @@ -53,7 +53,7 @@ protected function setUp(): void $this->validator = $this->createMock(ValidatorInterface::class); $this->violationList = $this->createMock(ConstraintViolationListInterface::class); $this->filterOperatorProvider = $this->createMock(FilterOperatorProviderInterface::class); - $this->translator = $this->createMock(TranslatorInterface::class); + $this->translator = $this->createMock(Translator::class); $this->customFieldValueModel = new CustomFieldValueModel( $this->entityManager, $this->validator diff --git a/Tests/Unit/Model/CustomItemImportModelTest.php b/Tests/Unit/Model/CustomItemImportModelTest.php index 0586cd824..7024da601 100644 --- a/Tests/Unit/Model/CustomItemImportModelTest.php +++ b/Tests/Unit/Model/CustomItemImportModelTest.php @@ -6,7 +6,7 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\EntityManager; -use Mautic\CoreBundle\Templating\Helper\FormatterHelper; +use Mautic\CoreBundle\Twig\Helper\FormatterHelper; use Mautic\LeadBundle\Entity\Import; use Mautic\LeadBundle\Entity\Lead; use Mautic\LeadBundle\Entity\LeadRepository; @@ -24,6 +24,13 @@ use MauticPlugin\CustomObjectsBundle\Model\CustomItemModel; use PHPUnit\Framework\MockObject\MockObject; use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\Routing\Generator\UrlGeneratorInterface; +use Mautic\CoreBundle\Translation\Translator; +use Mautic\CoreBundle\Helper\UserHelper; +use Psr\Log\LoggerInterface; +use Mautic\CoreBundle\Helper\CoreParametersHelper; class CustomItemImportModelTest extends \PHPUnit\Framework\TestCase { @@ -101,11 +108,18 @@ protected function setUp(): void $this->customItemImportModel = new CustomItemImportModel( $this->entityManager, $this->customItemModel, - $this->formatterHelper + $this->formatterHelper, + $this->createMock(CorePermissions::class), + $this->createMock(EventDispatcherInterface::class), + $this->createMock(UrlGeneratorInterface::class), + $this->createMock(Translator::class), + $this->createMock(UserHelper::class), + $this->createMock(LoggerInterface::class), + $this->createMock(CoreParametersHelper::class), ); - /** @var TranslatorInterface $translator */ - $translator = $this->createMock(TranslatorInterface::class); + /** @var Translator $translator */ + $translator = $this->createMock(Translator::class); $textareaType = new TextareaType($translator, $this->filterOperatorProvider); $dateTimeType = new DateTimeType($translator, $this->filterOperatorProvider); @@ -363,13 +377,11 @@ public function testImportWithLinkContactWhenGivenContactIdIsInvalid(): void ->with(Lead::class) ->willReturn($leadRepository); - $translator = $this->createMock(TranslatorInterface::class); + $translator = $this->createMock(Translator::class); $translator->expects($this->any()) ->method('trans') ->willReturn('test warning'); - $this->customItemImportModel->setTranslator($translator); - $importLogDto = new ImportLogDTO(); $this->customItemImportModel->import($this->import, $rowData, $this->customObject, $importLogDto); diff --git a/Tests/Unit/Model/CustomItemModelTest.php b/Tests/Unit/Model/CustomItemModelTest.php index fe8d9887f..8f75b25fa 100644 --- a/Tests/Unit/Model/CustomItemModelTest.php +++ b/Tests/Unit/Model/CustomItemModelTest.php @@ -34,6 +34,11 @@ use Symfony\Component\Validator\ConstraintViolationListInterface; use Symfony\Component\Validator\Validator\ValidatorInterface; use UnexpectedValueException; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; +use Symfony\Component\Routing\Generator\UrlGeneratorInterface; +use Mautic\CoreBundle\Translation\Translator; +use Psr\Log\LoggerInterface; +use Mautic\CoreBundle\Helper\CoreParametersHelper; class CustomItemModelTest extends TestCase { @@ -100,7 +105,12 @@ protected function setUp(): void $this->userHelper, $this->customFieldValueModel, $this->dispatcher, - $this->validator + $this->validator, + $this->createMock(CorePermissions::class), + $this->createMock(UrlGeneratorInterface::class), + $this->createMock(Translator::class), + $this->createMock(LoggerInterface::class), + $this->createMock(CoreParametersHelper::class), ); $this->entityManager->method('createQueryBuilder')->willReturn($this->queryBuilder); diff --git a/Tests/Unit/Model/CustomItemXrefContactModelTest.php b/Tests/Unit/Model/CustomItemXrefContactModelTest.php index 0160aa3a7..d9143b7fb 100644 --- a/Tests/Unit/Model/CustomItemXrefContactModelTest.php +++ b/Tests/Unit/Model/CustomItemXrefContactModelTest.php @@ -13,7 +13,7 @@ use Doctrine\ORM\QueryBuilder; use MauticPlugin\CustomObjectsBundle\Entity\CustomItem; use MauticPlugin\CustomObjectsBundle\Model\CustomItemXrefContactModel; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class CustomItemXrefContactModelTest extends \PHPUnit\Framework\TestCase { @@ -40,7 +40,7 @@ protected function setUp(): void $this->entityManager = $this->createMock(EntityManager::class); $this->queryBuilder = $this->createMock(QueryBuilder::class); $this->query = $this->createMock(AbstractQuery::class); - $this->translator = $this->createMock(TranslatorInterface::class); + $this->translator = $this->createMock(Translator::class); $this->customItemXrefContactModel = new CustomItemXrefContactModel( $this->entityManager, $this->translator diff --git a/Tests/Unit/Model/CustomObjectModelTest.php b/Tests/Unit/Model/CustomObjectModelTest.php index 9ebc2cdeb..bbba67fb5 100644 --- a/Tests/Unit/Model/CustomObjectModelTest.php +++ b/Tests/Unit/Model/CustomObjectModelTest.php @@ -29,7 +29,11 @@ use MauticPlugin\CustomObjectsBundle\Repository\CustomObjectRepository; use PHPUnit\Framework\TestCase; use Symfony\Component\EventDispatcher\EventDispatcherInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; +use Mautic\CoreBundle\Security\Permissions\CorePermissions; +use Symfony\Component\Routing\Generator\UrlGeneratorInterface; +use Psr\Log\LoggerInterface; +use Mautic\CoreBundle\Helper\CoreParametersHelper; class CustomObjectModelTest extends TestCase { @@ -81,20 +85,23 @@ protected function setUp(): void $this->userHelper = $this->createMock(UserHelper::class); $this->customFieldModel = $this->createMock(CustomFieldModel::class); $this->dispatcher = $this->createMock(EventDispatcherInterface::class); - $this->translator = $this->createMock(TranslatorInterface::class); + $this->translator = $this->createMock(Translator::class); $this->listModel = $this->createMock(ListModel::class); $this->customObjectModel = new CustomObjectModel( $this->entityManager, $this->customObjectRepository, $this->customObjectPermissionProvider, - $this->userHelper, $this->customFieldModel, $this->dispatcher, - $this->listModel + $this->listModel, + $this->createMock(CorePermissions::class), + $this->createMock(UrlGeneratorInterface::class), + $this->createMock(Translator::class), + $this->createMock(UserHelper::class), + $this->createMock(LoggerInterface::class), + $this->createMock(CoreParametersHelper::class), ); - $this->customObjectModel->setEntityManager($this->entityManager); - $this->customObjectModel->setTranslator($this->translator); $this->entityManager->method('createQueryBuilder')->willReturn($this->queryBuilder); $this->entityManager->method('getConnection')->willReturn($this->connection); $this->connection->method('getDatabasePlatform')->willReturn($this->databasePlatform); diff --git a/Tests/Unit/Provider/CustomFieldTypeProviderTest.php b/Tests/Unit/Provider/CustomFieldTypeProviderTest.php index 31f126a1f..c5d4b0900 100644 --- a/Tests/Unit/Provider/CustomFieldTypeProviderTest.php +++ b/Tests/Unit/Provider/CustomFieldTypeProviderTest.php @@ -4,14 +4,13 @@ namespace MauticPlugin\CustomObjectsBundle\Tests\Unit\Provider; -use Mautic\CoreBundle\Translation\Translator; use Mautic\LeadBundle\Provider\FilterOperatorProviderInterface; use MauticPlugin\CustomObjectsBundle\CustomFieldType\DateTimeType; use MauticPlugin\CustomObjectsBundle\CustomFieldType\DateType; use MauticPlugin\CustomObjectsBundle\CustomFieldType\TextType; use MauticPlugin\CustomObjectsBundle\Exception\NotFoundException; use MauticPlugin\CustomObjectsBundle\Provider\CustomFieldTypeProvider; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class CustomFieldTypeProviderTest extends \PHPUnit\Framework\TestCase { @@ -19,7 +18,7 @@ public function testWorkflow(): void { $customFieldTypeProvider = new CustomFieldTypeProvider(); $filterOperatorProvider = $this->createMock(FilterOperatorProviderInterface::class); - $textType = new TextType($this->createMock(TranslatorInterface::class), $filterOperatorProvider); + $textType = new TextType($this->createMock(Translator::class), $filterOperatorProvider); $customFieldTypeProvider->addType($textType); diff --git a/Tests/Unit/Provider/SessionProviderTest.php b/Tests/Unit/Provider/SessionProviderTest.php index 2776e4a14..2261e2d13 100644 --- a/Tests/Unit/Provider/SessionProviderTest.php +++ b/Tests/Unit/Provider/SessionProviderTest.php @@ -7,12 +7,18 @@ use MauticPlugin\CustomObjectsBundle\Provider\SessionProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; -use Symfony\Component\HttpFoundation\Session\Session; +use Symfony\Component\HttpFoundation\Session\SessionInterface; +use Symfony\Component\HttpFoundation\RequestStack; class SessionProviderTest extends TestCase { /** - * @var Session|MockObject + * @var RequestStack|MockObject + */ + private $requestStack; + + /** + * @var SessionInterface|MockObject */ private $session; @@ -34,10 +40,12 @@ class SessionProviderTest extends TestCase protected function setUp(): void { parent::setUp(); - $this->session = $this->createMock(Session::class); + $this->requestStack = $this->createMock(RequestStack::class); + $this->session = $this->createMock(SessionInterface::class); + $this->requestStack->method('getSession')->willReturn($this->session); $this->namespace = 'some.namespace'; $this->defaultPageLimit = 15; - $this->provider = new SessionProvider($this->session, $this->namespace, $this->defaultPageLimit); + $this->provider = new SessionProvider($this->requestStack, $this->namespace, $this->defaultPageLimit); } public function testGetPage(): void diff --git a/Tests/Unit/Report/ReportColumnsBuilderTest.php b/Tests/Unit/Report/ReportColumnsBuilderTest.php index eb34c1167..f499a2840 100644 --- a/Tests/Unit/Report/ReportColumnsBuilderTest.php +++ b/Tests/Unit/Report/ReportColumnsBuilderTest.php @@ -17,7 +17,7 @@ use MauticPlugin\CustomObjectsBundle\Report\ReportColumnsBuilder; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class ReportColumnsBuilderTest extends TestCase { @@ -37,7 +37,7 @@ class ReportColumnsBuilderTest extends TestCase private $queryBuilder; /** - * @var MockObject|TranslatorInterface + * @var MockObject|Translator */ private $translatorInterface; @@ -64,7 +64,7 @@ protected function setUp(): void $this->reportColumnsBuilder = new ReportColumnsBuilder($this->customObject); $this->connection = $this->createMock(Connection::class); $this->queryBuilder = $this->createMock(QueryBuilder::class); - $this->translatorInterface = $this->createMock(TranslatorInterface::class); + $this->translatorInterface = $this->createMock(Translator::class); $this->filterOperatorProviderInterface = $this->createMock(FilterOperatorProviderInterface::class); $this->csvHelper = $this->createMock(CsvHelper::class); } diff --git a/Tests/Unit/Security/Permissions/CustomObjectPermissionsTest.php b/Tests/Unit/Security/Permissions/CustomObjectPermissionsTest.php index 13f8cb88e..5d2100893 100644 --- a/Tests/Unit/Security/Permissions/CustomObjectPermissionsTest.php +++ b/Tests/Unit/Security/Permissions/CustomObjectPermissionsTest.php @@ -12,7 +12,7 @@ use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\FormBuilderInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Mautic\CoreBundle\Translation\Translator; class CustomObjectPermissionsTest extends TestCase { @@ -42,7 +42,7 @@ class CustomObjectPermissionsTest extends TestCase private $configProvider; /** - * @var MockObject|TranslatorInterface + * @var MockObject|Translator */ private $translator; @@ -60,7 +60,7 @@ protected function setUp(): void $this->customObject = $this->createMock(CustomObject::class); $this->configProvider = $this->createMock(ConfigProvider::class); $this->formBuilder = $this->createMock(FormBuilderInterface::class); - $this->translator = $this->createMock(TranslatorInterface::class); + $this->translator = $this->createMock(Translator::class); $this->permissions = new CustomObjectPermissions( $this->coreParametersHelper, $this->customObjectModel, From a7880c5cca3b7e0bfbe569ec4e9630e416466ec6 Mon Sep 17 00:00:00 2001 From: Vamshi Date: Wed, 4 Feb 2026 17:34:48 +0530 Subject: [PATCH 4/4] updated back navigation --- Resources/views/CustomItem/details.html.twig | 2 +- Resources/views/CustomObject/details.html.twig | 2 +- Resources/views/CustomObject/list.html.twig | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Resources/views/CustomItem/details.html.twig b/Resources/views/CustomItem/details.html.twig index 8b8d060be..66b11a44a 100644 --- a/Resources/views/CustomItem/details.html.twig +++ b/Resources/views/CustomItem/details.html.twig @@ -3,7 +3,7 @@ {% block mauticContent %}customItem{% endblock %} {% block headerTitle %}{{ item.getName() }}{% endblock %} -{% block indexButton %} +{% block preHeader %} {{- include('@MauticCore/Helper/page_actions.html.twig', { 'item' : item, diff --git a/Resources/views/CustomObject/details.html.twig b/Resources/views/CustomObject/details.html.twig index d9d2a5da6..e2d5ccc74 100644 --- a/Resources/views/CustomObject/details.html.twig +++ b/Resources/views/CustomObject/details.html.twig @@ -3,7 +3,7 @@ {% block mauticContent %}customObject{% endblock %} {% block headerTitle %}{{ customObject.nameSingular }}{% endblock %} -{% block indexButton %} +{% block preHeader %} {{- include('@MauticCore/Helper/page_actions.html.twig', { 'item' : customObject, diff --git a/Resources/views/CustomObject/list.html.twig b/Resources/views/CustomObject/list.html.twig index 72c30984d..ceaa94c9f 100644 --- a/Resources/views/CustomObject/list.html.twig +++ b/Resources/views/CustomObject/list.html.twig @@ -11,7 +11,7 @@ {{ block('listResults') }}
    - {{ include('@MauticCore/Helper/protip.html.twig', { + {{ include('@MauticCore/Modules/protip.html.twig', { tip: random(['mautic.protip.custom.objects.create', 'mautic.protip.custom.objects.segmentation', 'mautic.protip.custom.objects.campaign']) }) }} {% else %}