From 55694819aa4d42161df989888f1a31e67f026d89 Mon Sep 17 00:00:00 2001 From: Sebastian Castro <sebastian.castro@protonmail.com> Date: Fri, 15 Jan 2021 14:51:04 +0100 Subject: [PATCH] refactor: use new Mongo ODM shortcuts --- config/packages/dev/web_profiler.yaml | 2 +- config/routes/gogo_api.yaml | 2 +- src/Admin/Element/ElementAdminAbstract.php | 8 +-- src/Admin/Element/ElementAdminShowEdit.php | 10 +-- src/Block/MonitoringElementsBlockService.php | 4 +- .../CheckExternalSourceToUpdateCommand.php | 2 +- src/Command/ElementsRemoveOptionsCommand.php | 4 +- src/Command/MigrationCommand.php | 6 +- .../RemoveAbandonnedProjectsCommand.php | 4 +- src/Command/UpdateElementsJsonCommand.php | 2 +- src/Controller/APIController.php | 8 +-- .../BulkActionsAbstractController.php | 7 +-- .../DuplicatesActionsController.php | 2 +- .../Admin/ElementAdminBulkController.php | 31 +++++----- src/Controller/MailTestController.php | 2 +- src/Controller/ProjectController.php | 2 +- .../DatabaseIntegrityWatcher.php | 62 ++++++++----------- src/EventListener/ElementJsonGenerator.php | 7 +-- src/Repository/CategoryRepository.php | 2 +- src/Repository/ElementRepository.php | 34 +++++----- src/Repository/OptionRepository.php | 16 ----- src/Repository/TaxonomyRepository.php | 6 +- src/Repository/UserRepository.php | 2 +- .../ElementImportMappingTaxonomyService.php | 3 +- src/Services/ElementImportService.php | 27 ++++---- src/Services/GoGoCartoJsService.php | 6 +- src/Services/WebhookService.php | 2 +- .../custom-fields/form-builder.html.twig | 3 +- 28 files changed, 103 insertions(+), 163 deletions(-) diff --git a/config/packages/dev/web_profiler.yaml b/config/packages/dev/web_profiler.yaml index fd2242410..e92166a7f 100644 --- a/config/packages/dev/web_profiler.yaml +++ b/config/packages/dev/web_profiler.yaml @@ -1,6 +1,6 @@ web_profiler: toolbar: true - intercept_redirects: true + intercept_redirects: false framework: profiler: { only_exceptions: false } diff --git a/config/routes/gogo_api.yaml b/config/routes/gogo_api.yaml index cd785e8d1..cd5bb2251 100644 --- a/config/routes/gogo_api.yaml +++ b/config/routes/gogo_api.yaml @@ -11,7 +11,7 @@ gogo_api_elements_from_text: gogo_api_element_names_from_text: path: /api/element_names/search - defaults: { _controller: App\Controller\APIController::getElementNamessFromTextAction } + defaults: { _controller: App\Controller\APIController::getElementNamesFromTextAction } requirements: methods: GET diff --git a/src/Admin/Element/ElementAdminAbstract.php b/src/Admin/Element/ElementAdminAbstract.php index 53345dbc8..ebca5906e 100755 --- a/src/Admin/Element/ElementAdminAbstract.php +++ b/src/Admin/Element/ElementAdminAbstract.php @@ -65,14 +65,8 @@ class ElementAdminAbstract extends AbstractAdmin public function getOptionsChoices() { if ($this->optionsChoices == null) { - $this->optionsChoices = []; $dm = GoGoHelper::getDmFromAdmin($this); - $repo = $dm->get('Option'); - $this->optionList = $repo->createQueryBuilder()->select('name')->hydrate(false)->getQuery()->execute()->toArray(); - - foreach ($this->optionList as $key => $value) { - $this->optionsChoices[$key] = array_key_exists('name', $value) ? $value['name'] : 'Nom inconnu'; - } + $this->optionsChoices = $dm->query('Option')->select('name')->getArray(); } return $this->optionsChoices; } diff --git a/src/Admin/Element/ElementAdminShowEdit.php b/src/Admin/Element/ElementAdminShowEdit.php index d2dbe4e53..8623d54eb 100755 --- a/src/Admin/Element/ElementAdminShowEdit.php +++ b/src/Admin/Element/ElementAdminShowEdit.php @@ -26,13 +26,9 @@ class ElementAdminShowEdit extends ElementAdminList { $dm = GoGoHelper::getDmFromAdmin($this); $this->config = $dm->get('Configuration')->findConfiguration(); - $categories = $dm->query('Option')->select('name') - ->hydrate(false)->getQuery()->execute(); - $categoriesChoices = []; - foreach ($categories as $id => $object) { - $categoriesChoices[$object['name']] = $id; - } - + $categories = $dm->query('Option')->select('name')->getArray(); + $categoriesChoices = array_flip($categories); + $formMapper ->with('Informations générales', ['class' => 'col-md-6']) ->add('name', null, ['required' => true, 'label' => "Nom / Titre"]) diff --git a/src/Block/MonitoringElementsBlockService.php b/src/Block/MonitoringElementsBlockService.php index 76cd1d3c4..b6226a8ec 100755 --- a/src/Block/MonitoringElementsBlockService.php +++ b/src/Block/MonitoringElementsBlockService.php @@ -47,9 +47,9 @@ class MonitoringElementsBlockService extends AbstractBlockService $validateElements = $this->dm->get('Element')->findValidated(true); $allVisibleElements = $this->dm->get('Element')->findVisibles(true, false); $visibleNonImportedElements = $this->dm->get('Element')->findVisibles(true, true); - $activeUsersCount = $this->dm->query('User')->field('enabled')->equals(true)->count()->getQuery()->execute(); + $activeUsersCount = $this->dm->query('User')->field('enabled')->equals(true)->count()->execute(); $activeUsersNewsletterCount = $this->dm->query('User')->field('enabled')->equals(true) - ->field('newsletterFrequency')->gt(NewsletterFrequencyOptions::Never)->count()->getQuery()->execute(); + ->field('newsletterFrequency')->gt(NewsletterFrequencyOptions::Never)->count()->execute(); $errors = $this->dm->get('GoGoLog')->findBy(['level' => 'error', 'hidden' => false]); usort($errors, function ($a, $b) { return $b->getCreatedAt()->getTimestamp() - $a->getCreatedAt()->getTimestamp(); }); diff --git a/src/Command/CheckExternalSourceToUpdateCommand.php b/src/Command/CheckExternalSourceToUpdateCommand.php index 67ec86ed4..424d029d2 100755 --- a/src/Command/CheckExternalSourceToUpdateCommand.php +++ b/src/Command/CheckExternalSourceToUpdateCommand.php @@ -34,7 +34,7 @@ class CheckExternalSourceToUpdateCommand extends GoGoAbstractCommand $dynamicImports = $qb->field('refreshFrequencyInDays')->gt(0) ->field('nextRefresh')->lte(new \DateTime()) - ->getQuery()->execute(); + ->execute(); $this->log('CheckExternalSourceToUpdate : Nombre de sources à mettre à jour : '.$dynamicImports->count()); diff --git a/src/Command/ElementsRemoveOptionsCommand.php b/src/Command/ElementsRemoveOptionsCommand.php index 9e4ea6b7d..2c9cab677 100755 --- a/src/Command/ElementsRemoveOptionsCommand.php +++ b/src/Command/ElementsRemoveOptionsCommand.php @@ -24,8 +24,8 @@ class ElementsRemoveOptionsCommand extends GoGoAbstractCommand $this->log('Elements remove options begin, options ids to remove : '.$input->getArgument('ids')); $optionsIdDeleted = array_map(function ($string) { return (int) $string; }, explode(',', $input->getArgument('ids'))); - $qb = $dm->get('Element')->createQueryBuilder(); - $elements = $qb->field('optionValues.optionId')->in($optionsIdDeleted)->getQuery()->execute(); + $qb = $dm->query('Element'); + $elements = $qb->field('optionValues.optionId')->in($optionsIdDeleted)->execute(); $this->log($elements->count().' element to proceed'); if ($elements->count() > 0) { diff --git a/src/Command/MigrationCommand.php b/src/Command/MigrationCommand.php index e3869f8fb..329d30330 100644 --- a/src/Command/MigrationCommand.php +++ b/src/Command/MigrationCommand.php @@ -101,10 +101,8 @@ class MigrationCommand extends GoGoAbstractCommand try { // Collecting the Database to be updated $dbs = [$_ENV['DATABASE_NAME']]; // default DB - $dbNames = $dm->query('Project')->select('domainName')->hydrate(false)->getQuery()->execute()->toArray(); - foreach ($dbNames as $object) { - $dbs[] = $object['domainName']; - } + $dbNames = $dm->query('Project')->select('domainName')->getArray(); + foreach ($dbNames as $dbName) $dbs[] = $dbName; if (count(self::$migrations) > $migrationState->getMigrationIndex()) { $migrationsToRun = array_slice(self::$migrations, $migrationState->getMigrationIndex()); diff --git a/src/Command/RemoveAbandonnedProjectsCommand.php b/src/Command/RemoveAbandonnedProjectsCommand.php index 75fec4820..23d542624 100755 --- a/src/Command/RemoveAbandonnedProjectsCommand.php +++ b/src/Command/RemoveAbandonnedProjectsCommand.php @@ -42,7 +42,7 @@ final class RemoveAbandonnedProjectsCommand extends GoGoAbstractCommand $projectsToWarn = $dm->query('Project') ->field('lastLogin')->lte($date->setTimestamp(strtotime("-12 month"))) ->field('warningToDeleteProjectSentAt')->exists(false) - ->getQuery()->execute(); + ->execute(); if ($projectsToWarn->count() > 0) $this->log('Nombre de projets avertis de la suppression : '. $projectsToWarn->count()); @@ -67,7 +67,7 @@ final class RemoveAbandonnedProjectsCommand extends GoGoAbstractCommand $projectsToDelete = $dm->query('Project') ->field('lastLogin')->lte($date->setTimestamp(strtotime("-12 month"))) ->field('warningToDeleteProjectSentAt')->lte($date->setTimestamp(strtotime("-4 month"))) - ->getQuery()->execute(); + ->execute(); $message = "Les projets suivants sont probablement à supprimer : "; foreach ($projectsToDelete as $project) { diff --git a/src/Command/UpdateElementsJsonCommand.php b/src/Command/UpdateElementsJsonCommand.php index 4f1532018..35f55e861 100755 --- a/src/Command/UpdateElementsJsonCommand.php +++ b/src/Command/UpdateElementsJsonCommand.php @@ -37,7 +37,7 @@ class UpdateElementsJsonCommand extends GoGoAbstractCommand } else { $qb = $dm->query('Element'); $qb->field('id')->in(explode(',', $input->getArgument('ids'))); - $elements = $qb->getQuery()->execute(); + $elements = $qb->execute(); } $count = $elements->count(); diff --git a/src/Controller/APIController.php b/src/Controller/APIController.php index d41cbe901..e1ea2f94b 100644 --- a/src/Controller/APIController.php +++ b/src/Controller/APIController.php @@ -155,10 +155,8 @@ class APIController extends GoGoController } /* Use is elements field (linking elements betwwen each others) */ - public function getElementNamessFromTextAction(Request $request, DocumentManager $dm) + public function getElementNamesFromTextAction(Request $request, DocumentManager $dm) { - $isAdmin = $this->isUserAdmin(); - $elements = $dm->get('Element')->findElementNamesWithText($request->get('text'), $request->get('excludeId')); $responseJson = json_encode($elements); @@ -330,7 +328,7 @@ class APIController extends GoGoController $qb->updateMany() ->field('type')->notEqual('update') ->field('hidden')->equals(false) - ->field('hidden')->set(true)->getQuery()->execute(); + ->field('hidden')->set(true)->execute(); return $this->redirectToRoute('sonata_admin_dashboard'); } @@ -341,7 +339,7 @@ class APIController extends GoGoController $qb->updateMany() ->field('type')->equals('update') ->field('hidden')->equals(false) - ->field('hidden')->set(true)->getQuery()->execute(); + ->field('hidden')->set(true)->execute(); return $this->redirectToRoute('sonata_admin_dashboard'); } diff --git a/src/Controller/Admin/BulkActions/BulkActionsAbstractController.php b/src/Controller/Admin/BulkActions/BulkActionsAbstractController.php index ff737785c..4133b03e1 100755 --- a/src/Controller/Admin/BulkActions/BulkActionsAbstractController.php +++ b/src/Controller/Admin/BulkActions/BulkActionsAbstractController.php @@ -14,15 +14,10 @@ class BulkActionsAbstractController extends Controller protected function elementsBulkAction($functionToExecute, $dm, $request, $session) { - $elementsLeft = null; - $elementLeftCount = 0; $isStillElementsToProceed = false; $elementRepo = $dm->get('Element'); - - $optionsRepo = $dm->get('Option'); - $this->optionList = $optionsRepo->createQueryBuilder()->hydrate(false)->getQuery()->execute()->toArray(); - + if (!$this->fromBeginning && $request->get('batchFromStep')) { $batchFromStep = $request->get('batchFromStep'); } else { diff --git a/src/Controller/Admin/BulkActions/DuplicatesActionsController.php b/src/Controller/Admin/BulkActions/DuplicatesActionsController.php index a488552c2..8d3bfe494 100755 --- a/src/Controller/Admin/BulkActions/DuplicatesActionsController.php +++ b/src/Controller/Admin/BulkActions/DuplicatesActionsController.php @@ -43,7 +43,7 @@ class DuplicatesActionsController extends BulkActionsAbstractController // properly the elements $duplicates = $dm->query('Element') ->field('id')->in($duplicateIds) - ->getQuery()->execute()->toArray(); + ->getArray(); $perfectMatches = array_filter($duplicates, function ($duplicate) use ($element) { return slugify($duplicate->getName()) == slugify($element->getName()); }); $otherDuplicates = array_diff($duplicates, $perfectMatches); $duplicates[] = $element; diff --git a/src/Controller/Admin/ElementAdminBulkController.php b/src/Controller/Admin/ElementAdminBulkController.php index 5c9d49354..d0f256bee 100755 --- a/src/Controller/Admin/ElementAdminBulkController.php +++ b/src/Controller/Admin/ElementAdminBulkController.php @@ -62,10 +62,9 @@ class ElementAdminBulkController extends Controller $this->admin->checkAccess('edit'); $request = $this->get('request_stack')->getCurrentRequest()->request; - $modelManager = $this->admin->getModelManager(); $qb = clone $selectedModelQuery; - $elementIds = array_keys($qb->select('id')->hydrate(false)->getQuery()->execute()->toArray()); + $elementIds = $qb->getIds(); $elementIdsString = '"'.implode(',', $elementIds).'"'; $queryArray = $selectedModelQuery->getQuery()->getQuery()['query']; // if query is "get all elements", no need to specify all ids @@ -115,7 +114,7 @@ class ElementAdminBulkController extends Controller ->field('type')->equals($contrib->getType()) ->field('elements.id')->in($elementIds) ->field('webhookPosts')->unsetField()->exists(true) - ->getQuery()->execute(); + ->execute(); $contrib->setElementIds($elementIds); $this->dm->persist($contrib); @@ -137,7 +136,7 @@ class ElementAdminBulkController extends Controller $qb = $qb->field('moderationState')->set(ModerationState::NotNeeded); } - $qb->getQuery()->execute(); + $qb->execute(); // BATCH RESOLVE REPORTS if ('resolveReports' == $actionName) { @@ -149,7 +148,7 @@ class ElementAdminBulkController extends Controller ->field('resolvedMessage')->set($comment) ->field('resolvedBy')->set($this->getUser()->getEmail()) ->field('updatedAt')->set(new \DateTime()) - ->getQuery()->execute(); + ->execute(); } $this->dm->flush(); @@ -178,6 +177,7 @@ class ElementAdminBulkController extends Controller $this->dm->clear(); } } catch (\Exception $e) { + dump($e); $this->addFlash('sonata_flash_error', 'Une erreur est survenue :'.$e->getMessage()); return new RedirectResponse($this->admin->generateUrl('list', ['filter' => $this->admin->getFilterParameters()])); @@ -194,7 +194,7 @@ class ElementAdminBulkController extends Controller { // Add contribution for webhook - Get elements visible, no need to add a contirbution if element where already soft deleted for example $selectedModels = clone $selectedModelQuery; - $elementIds = array_keys($selectedModels->select('id')->field('status')->gte(-1)->hydrate(false)->getQuery()->execute()->toArray()); + $elementIds = $selectedModels->field('status')->gte(-1)->getIds(); if (count($elementIds)) { $contribution = $this->interactionService->createContribution(null, null, InteractType::Deleted, ElementStatus::Deleted); $contribution->setElementIds($elementIds); @@ -204,19 +204,19 @@ class ElementAdminBulkController extends Controller // Add element id to ignore to sources $selectedModels = clone $selectedModelQuery; $elements = $selectedModels - ->select('id', 'source.$id') + ->select('oldId', 'source.$id') ->field('source.$id')->exists(true) - ->hydrate(false)->getQuery()->execute()->toArray(); + ->getArray(); $elementsIdsGroupedBySource = []; foreach($elements as $element) { - $elementsIdsGroupedBySource[$element['source']['$id']][] = $element['_id']; + $elementsIdsGroupedBySource[$element['source']['$id']][] = $element['oldId']; } foreach ($elementsIdsGroupedBySource as $sourceId => $elementIds) { - $qb = $this->dm->createQueryBuilder(Import::class); + $qb = $this->dm->query('Import'); $qb->updateOne() ->field('id')->equals($sourceId) ->field('idsToIgnore')->addToSet($qb->expr()->each($elementIds)) - ->getQuery()->execute(); + ->execute(); } // Perform remove @@ -235,9 +235,9 @@ class ElementAdminBulkController extends Controller $this->trans('flash_batch_delete_error', [], 'SonataAdminBundle') ); } - // $selectedModelQuery->findAndRemove()->getQuery()->execute(); + // $selectedModelQuery->findAndRemove()->execute(); - $this->dm->createQueryBuilder(UserInteractionContribution::class)->field('element.id')->in($elementIds)->remove()->getQuery()->execute(); + $this->dm->createQueryBuilder(UserInteractionContribution::class)->field('element.id')->in($elementIds)->remove()->execute(); $this->dm->flush(); @@ -313,7 +313,6 @@ class ElementAdminBulkController extends Controller $this->admin->checkAccess('edit'); $request = $this->get('request_stack')->getCurrentRequest()->request; - $modelManager = $this->admin->getModelManager(); $selectedModels = $selectedModelQuery->execute(); $nbreModelsToProceed = $selectedModels->count(); @@ -330,7 +329,7 @@ class ElementAdminBulkController extends Controller $optionsValues = $selectedModel->getOptionValues()->toArray(); if ($optionstoRemoveIds && count($optionstoRemoveIds) > 0) { $optionsToRemove = $this->dm->query('Option')->field('id')->in($optionstoRemoveIds) - ->getQuery()->execute()->toArray(); + ->getArray(); $optionstoRemoveIds = array_map(function ($opt) { return $opt->getIdAndChildrenOptionIds(); }, $optionsToRemove); $optionstoRemoveIds = array_unique($this->flatten($optionstoRemoveIds)); @@ -342,7 +341,7 @@ class ElementAdminBulkController extends Controller } if ($optionstoAddIds && count($optionstoAddIds) > 0) { - $optionsToAdd = $this->dm->query('Option')->field('id')->in($optionstoAddIds)->getQuery()->execute()->toArray(); + $optionsToAdd = $this->dm->query('Option')->field('id')->in($optionstoAddIds)->getArray(); $optionstoAddIds = array_map(function ($opt) { return $opt->getIdAndParentOptionIds(); }, $optionsToAdd); $optionstoAddIds = array_unique($this->flatten($optionstoAddIds)); diff --git a/src/Controller/MailTestController.php b/src/Controller/MailTestController.php index 8c929c749..d7691c443 100755 --- a/src/Controller/MailTestController.php +++ b/src/Controller/MailTestController.php @@ -79,7 +79,7 @@ class MailTestController extends Controller $qb = $this->dm->query('Element'); $qb->field('status')->gte(ElementStatus::AdminRefused); $qb->field('moderationState')->notIn([ModerationState::GeolocError, ModerationState::NoOptionProvided]); - $options = $qb->limit(30)->getQuery()->execute(); + $options = $qb->limit(30)->execute(); } else { $element = $this->dm->get('Element')->findVisibles()->getSingleResult(); } diff --git a/src/Controller/ProjectController.php b/src/Controller/ProjectController.php index 42903a1e9..0a6807183 100755 --- a/src/Controller/ProjectController.php +++ b/src/Controller/ProjectController.php @@ -140,7 +140,7 @@ class ProjectController extends Controller ->field('published')->equals(true) ->field('dataSize')->gte(10) ->sort('publishedAt', 'desc') - ->getQuery()->execute(); + ->execute(); $pinnedProjects = $repository->findBy(['pinned' => true]); foreach ($projects as $project) { diff --git a/src/EventListener/DatabaseIntegrityWatcher.php b/src/EventListener/DatabaseIntegrityWatcher.php index d68d70820..c7531772f 100755 --- a/src/EventListener/DatabaseIntegrityWatcher.php +++ b/src/EventListener/DatabaseIntegrityWatcher.php @@ -44,7 +44,7 @@ class DatabaseIntegrityWatcher if ($document instanceof Group) { $group = $document; $qb = $dm->get('User')->createQueryBuilder(); - $users = $qb->field('groups.id')->in([$group->getId()])->getQuery()->execute(); + $users = $qb->field('groups.id')->in([$group->getId()])->execute(); if ($users->count() > 0) { foreach ($users as $user) { $user->removeGroup($group); @@ -52,13 +52,13 @@ class DatabaseIntegrityWatcher } } elseif ($document instanceof Import || $document instanceof ImportDynamic) { $import = $document; - $qb = $dm->get('Element')->createQueryBuilder(); - $qb->remove()->field('source')->references($import)->getQuery()->execute(); + $qb = $dm->query('Element'); + $qb->remove()->field('source')->references($import)->execute(); } elseif ($document instanceof Webhook) { $webhook = $document; $contributions = $dm->query('UserInteractionContribution') ->field('webhookPosts.webhook.$id')->equals($webhook->getId()) - ->getQuery()->execute(); + ->execute(); foreach ($contributions as $contrib) { $contrib->getElement()->setPreventJsonUpdate(true); @@ -73,7 +73,7 @@ class DatabaseIntegrityWatcher $qb = $dm->query('Element'); $qb->addOr($qb->expr()->field('nonDuplicates.$id')->equals($document->getId())); $qb->addOr($qb->expr()->field('potentialDuplicates.$id')->equals($document->getId())); - $dependantElements = $qb->getQuery()->execute(); + $dependantElements = $qb->execute(); foreach ($dependantElements as $element) { $element->removeNonDuplicate($document); $element->removePotentialDuplicate($document); @@ -88,16 +88,12 @@ class DatabaseIntegrityWatcher if (count($elementsFields)) { foreach ($elementsFields as $fieldName) { $fieldPath = "data.$fieldName.{$document->getId()}"; - $dependantElementsIds = array_keys( - $dm->get('Element')->createQueryBuilder() - ->field($fieldPath)->exists(true) - ->select('id')->hydrate(false)->getQuery()->execute()->toArray()); + $dependantElementsIds = $dm->query('Element')->field($fieldPath)->exists(true)->getIds(); if (count($dependantElementsIds)) { - $dm->get('Element')->createQueryBuilder() - ->updateMany() - ->field($fieldPath)->unsetField()->exists(true) - ->getQuery()->execute(); + $dm->query('Element')->updateMany() + ->field($fieldPath)->unsetField()->exists(true) + ->execute(); $elementIdsString = '"'.implode(',', $dependantElementsIds).'"'; $this->asyncService->callCommand('app:elements:updateJson', ['ids' => $elementIdsString]); } @@ -123,8 +119,9 @@ class DatabaseIntegrityWatcher $uow->computeChangeSets(); $changeset = $uow->getDocumentChangeSet($document); if (array_key_exists('name', $changeset)) { - $query = $dm->query('Element')->field('optionValues.optionId')->in([$document->getId()]); - $elementIds = array_keys($query->select('id')->hydrate(false)->getQuery()->execute()->toArray()); + $elementIds = $dm->query('Element') + ->field('optionValues.optionId')->in([$document->getId()]) + ->getIds(); if (count($elementIds)) { $elementIdsString = '"'.implode(',', $elementIds).'"'; $this->asyncService->callCommand('app:elements:updateJson', ['ids' => $elementIdsString]); @@ -156,22 +153,19 @@ class DatabaseIntegrityWatcher $uow = $dm->getUnitOfWork(); $uow->computeChangeSets(); $changeset = $uow->getDocumentChangeSet($element); - $elementToUpdates = []; - $privateProps = $config->getApi()->getPublicApiPrivateProperties(); + $elementIdsToUpdate = []; // If name have changed, update element which reference this element if (array_key_exists('name', $changeset)) { $newName = $changeset['name'][1]; foreach ($elementsFields as $fieldName) { $fieldPath = "data.$fieldName.{$element->getId()}"; - $dm->get('Element')->createQueryBuilder() - ->updateMany() + $dm->query('Element')->updateMany() ->field($fieldPath)->set($newName) ->field($fieldPath)->exists(true) - ->getQuery()->execute(); - $elementToUpdates = $elementToUpdates + $dm->get('Element')->createQueryBuilder() - ->field($fieldPath)->exists(true) - ->select('id')->hydrate(false)->getQuery()->execute()->toArray(); + ->execute(); + $elementIdsToUpdate = array_merge($elementIdsToUpdate, $dm->query('Element') + ->field($fieldPath)->exists(true)->getIds()); } } @@ -189,29 +183,27 @@ class DatabaseIntegrityWatcher // Updates elements throught reverse relation if (count($addedElements) > 0) { - $dm->get('Element')->createQueryBuilder() + $dm->query('Element') ->updateMany() ->field('id')->in($addedElements) ->field($fieldPath)->set($element->getName()) - ->getQuery()->execute(); - $elementToUpdates = $elementToUpdates + $dm->get('Element')->createQueryBuilder() - ->field('id')->in($addedElements) - ->select('id')->hydrate(false)->getQuery()->execute()->toArray(); + ->execute(); + $elementIdsToUpdate = array_merge($elementIdsToUpdate, $dm->query('Element') + ->field('id')->in($addedElements)->getIds()); } if (count($removedElements) > 0) { - $dm->get('Element')->createQueryBuilder() + $dm->query('Element') ->updateMany() ->field('id')->in($removedElements) ->field($fieldPath)->unsetField()->exists(true) - ->getQuery()->execute(); - $elementToUpdates = $elementToUpdates + $dm->get('Element')->createQueryBuilder() - ->field('id')->in($removedElements) - ->select('id')->hydrate(false)->getQuery()->execute()->toArray(); + ->execute(); + $elementIdsToUpdate = array_merge($elementIdsToUpdate, $dm->query('Element') + ->field('id')->in($removedElements)->getIds()); } } } - if (count($elementToUpdates)) { - $ids = array_unique(array_keys($elementToUpdates)); + if (count($elementIdsToUpdate)) { + $ids = array_unique($elementIdsToUpdate); $elementIdsString = '"'.implode(',', $ids).'"'; $this->asyncService->callCommand('app:elements:updateJson', ['ids' => $elementIdsString]); } diff --git a/src/EventListener/ElementJsonGenerator.php b/src/EventListener/ElementJsonGenerator.php index d559dcd0f..47f5ed4e1 100644 --- a/src/EventListener/ElementJsonGenerator.php +++ b/src/EventListener/ElementJsonGenerator.php @@ -2,9 +2,7 @@ namespace App\EventListener; -use App\Document\Element; use App\Document\ElementStatus; -use App\Document\ModerationState; use Doctrine\ODM\MongoDB\DocumentManager; class ElementJsonGenerator @@ -30,8 +28,7 @@ class ElementJsonGenerator { // load all options so we don't need to do a query on each element being modified if (!$this->options) { - $this->options = $this->dm->get('Option')->createQueryBuilder() - ->select('name')->hydrate(false)->getQuery()->execute()->toArray(); + $this->options = $this->dm->query('Option')->select('name')->getArray(); } return $this->options; @@ -102,7 +99,7 @@ class ElementJsonGenerator for ($i = 0; $i < $optValuesLength; ++$i) { $optionValue = $sortedOptionsValues[$i]; if (isset($options[$optionValue->getOptionId()])) { - $optionName = $options[$optionValue->getOptionId()]['name']; + $optionName = $options[$optionValue->getOptionId()]; $elementOptions[] = $optionName; $optionsFullJson[] = $sortedOptionsValues[$i]->toJson(json_encode($optionName)); } else { diff --git a/src/Repository/CategoryRepository.php b/src/Repository/CategoryRepository.php index 28eb1c7d9..1d971831f 100755 --- a/src/Repository/CategoryRepository.php +++ b/src/Repository/CategoryRepository.php @@ -17,6 +17,6 @@ class CategoryRepository extends DocumentRepository $qb = $this->query('Category'); $qb->field('isRootCategory')->equals(true)->sort('index', 'asc'); - return $qb->getQuery()->execute(); + return $qb->execute(); } } diff --git a/src/Repository/ElementRepository.php b/src/Repository/ElementRepository.php index 6b84f9fec..421d29ca5 100755 --- a/src/Repository/ElementRepository.php +++ b/src/Repository/ElementRepository.php @@ -55,7 +55,7 @@ class ElementRepository extends DocumentRepository $qb->limit(6); - return $this->queryToArray($qb); + return $qb->hydrate(false)->getArray(); } public function findWhithinBoxes($bounds, $request, $getFullRepresentation, $isAdmin = false) @@ -98,7 +98,7 @@ class ElementRepository extends DocumentRepository } } - return $qb->getQuery()->execute(); + return $qb->execute(); } @@ -123,7 +123,7 @@ class ElementRepository extends DocumentRepository $qb->field('id')->notEqual($excludeId); $qb->select('name')->limit(20); - return $this->queryToArray($qb); + return $qb->getArray(); } public function findPendings($getCount = false) @@ -135,7 +135,7 @@ class ElementRepository extends DocumentRepository $qb->count(); } - return $qb->getQuery()->execute(); + return $qb->execute(); } public function findModerationNeeded($getCount = false, $moderationState = null) @@ -153,7 +153,7 @@ class ElementRepository extends DocumentRepository $qb->count(); } - return $qb->getQuery()->execute(); + return $qb->execute(); } public function findValidated($getCount = false) @@ -165,7 +165,7 @@ class ElementRepository extends DocumentRepository $qb->count(); } - return $qb->getQuery()->execute(); + return $qb->execute(); } public function findVisibles($getCount = false, $excludeImported = false, $limit = null, $skip = null) @@ -186,7 +186,7 @@ class ElementRepository extends DocumentRepository $qb->count(); } - return $qb->getQuery()->execute(); + return $qb->execute(); } public function findAllPublics($getFullRepresentation, $isAdmin, $request = null) @@ -218,7 +218,7 @@ class ElementRepository extends DocumentRepository $qb->count(); } - return $qb->getQuery()->execute(); + return $qb->execute(); } public function findModerationElementToNotifyToUser($user) @@ -237,12 +237,12 @@ class ElementRepository extends DocumentRepository $qb->field('address.postalCode')->equals(new \MongoRegex($regexp)); } - return $qb->count()->getQuery()->execute(); + return $qb->count()->execute(); } private function queryToArray($qb) { - return $qb->hydrate(false)->getQuery()->execute()->toArray(); + return $qb->hydrate(false)->execute()->toArray(); } private function filterWithRequest($qb, $request) @@ -314,7 +314,7 @@ class ElementRepository extends DocumentRepository $qb->field('status')->notEqual(ElementStatus::ModifiedPendingVersion); $qb->sort('updatedAt', 'DESC'); - return $qb->getQuery()->execute(); + return $qb->execute(); } // Used by newsletter @@ -329,16 +329,14 @@ class ElementRepository extends DocumentRepository $qb->limit($limit); } - return $qb->getQuery()->execute(); + return $qb->execute(); } public function findStampedWithId($stampId) { - $qb = $this->query('Element'); - $qb->field('stamps.id')->in([(float) $stampId]); - $qb->select('id'); - - return $this->queryToArray($qb); + return $this->query('Element') + ->field('stamps.id')->in([(float) $stampId]) + ->getIds(); } public function findPotentialDuplicateOwner($element) @@ -346,7 +344,7 @@ class ElementRepository extends DocumentRepository $qb = $this->query('Element'); $qb->field('potentialDuplicates')->includesReferenceTo($element); - return $qb->getQuery()->execute(); + return $qb->execute(); } public function findOriginalElementOfModifiedPendingVersion($element) diff --git a/src/Repository/OptionRepository.php b/src/Repository/OptionRepository.php index 7baf17a86..518e4bd36 100755 --- a/src/Repository/OptionRepository.php +++ b/src/Repository/OptionRepository.php @@ -4,22 +4,6 @@ namespace App\Repository; use Doctrine\ODM\MongoDB\Repository\DocumentRepository; -/** - * OptionRepository. - * - * This class was generated by the Doctrine ORM. Add your own custom - * repository methods below. - */ class OptionRepository extends DocumentRepository { - public function findOptionsIdsWithText($text) - { - $qbOption = $this->query('Option'); - $expr = $qbOption->expr()->operator('$text', ['$search' => (string) $text]); - $qbOption //->limit(50) - ->equals($expr->getQuery()) - ->select('id'); - - return $qbOption->hydrate(false)->getQuery()->execute()->toArray(); - } } diff --git a/src/Repository/TaxonomyRepository.php b/src/Repository/TaxonomyRepository.php index 435d72c39..4fa02d267 100755 --- a/src/Repository/TaxonomyRepository.php +++ b/src/Repository/TaxonomyRepository.php @@ -8,15 +8,13 @@ class TaxonomyRepository extends DocumentRepository { public function findTaxonomy() { - $qb = $this->query('Taxonomy'); - - return $qb->getQuery()->getSingleResult(); + return $this->query('Taxonomy')->getOne(); } public function findTaxonomyJson($getOnlyOptions = false) { $qb = $this->query('Taxonomy'); - $taxonomy = $qb->hydrate(false)->getQuery()->getSingleResult(); + $taxonomy = $qb->hydrate(false)->getOne(); return $getOnlyOptions ? $taxonomy['optionsJson'] : $taxonomy['taxonomyJson']; } diff --git a/src/Repository/UserRepository.php b/src/Repository/UserRepository.php index 7ad949d55..8e11a2e71 100755 --- a/src/Repository/UserRepository.php +++ b/src/Repository/UserRepository.php @@ -20,6 +20,6 @@ class UserRepository extends DocumentRepository return $qb->field('newsletterFrequency')->gt(NewsletterFrequencyOptions::Never) ->field('nextNewsletterDate')->lte(new \DateTime()) ->limit(70) - ->getQuery()->execute(); + ->execute(); } } diff --git a/src/Services/ElementImportMappingTaxonomyService.php b/src/Services/ElementImportMappingTaxonomyService.php index 7bc85c749..6542f08ec 100644 --- a/src/Services/ElementImportMappingTaxonomyService.php +++ b/src/Services/ElementImportMappingTaxonomyService.php @@ -18,8 +18,7 @@ class ElementImportMappingTaxonomyService { $taxonomyMapping = $import->getTaxonomyMapping(); // delete obsolte mapping (if an option have been deleted, but is still in the mapping) - $allOptionsIds = array_keys($this->dm->query('Option')->select('id') - ->hydrate(false)->getQuery()->execute()->toArray()); + $allOptionsIds = $this->dm->query('Option')->getIds(); foreach ($taxonomyMapping as $key => $mappedObject) { $taxonomyMapping[$key]['mappedCategoryIds'] = array_filter($mappedObject['mappedCategoryIds'], function ($el) use ($allOptionsIds) { return in_array($el, $allOptionsIds); diff --git a/src/Services/ElementImportService.php b/src/Services/ElementImportService.php index afe3b92f8..5e7b77c92 100755 --- a/src/Services/ElementImportService.php +++ b/src/Services/ElementImportService.php @@ -152,12 +152,10 @@ class ElementImportService $import->updateNextRefreshDate(); // before updating the source, we collect all elements ids - $previouslyImportedElementIds = array_keys($qb->field('source')->references($import) - ->select('id')->hydrate(false) - ->getQuery()->execute()->toArray()); + $previouslyImportedElementIds = $qb->field('source')->references($import)->getIds(); } else { // before re importing a static source, we delete all previous items - $qb->remove()->field('source')->references($import)->getQuery()->execute(); + $qb->remove()->field('source')->references($import)->execute(); } $this->importOneService->initialize($import); @@ -225,7 +223,7 @@ class ElementImportService $qb->field('source')->references($import) ->updateMany() ->field("data.$field->reversedBy")->unsetField() - ->getQuery()->execute(); + ->execute(); } } } @@ -234,7 +232,7 @@ class ElementImportService // Go through each individual imported elements, and link elements from each other $importedElements = $this->dm->query('Element') ->field('source')->references($import) - ->getQuery()->execute(); + ->execute(); $i = 0; $size = count($importedElements); foreach ($elementsLinkedFields as $linkField) { @@ -250,10 +248,7 @@ class ElementImportService $qb->field('source')->references($import); $qb->addOr($qb->expr()->field('name')->in($values)); $qb->addOr($qb->expr()->field('oldId')->in($values)); - $result = $qb->select('name')->hydrate(false)->getQuery()->execute()->toArray(); - $result = array_map(function($el) { - return $el['name']; - }, $result); + $result = $qb->select('name')->getArray(); if (count($result) > 0) $element->setCustomProperty($linkField, $result); } } @@ -283,26 +278,26 @@ class ElementImportService $countElemenDeleted = $qb->field('source')->references($import) ->field('status')->notEqual(ElementStatus::ModifiedPendingVersion) ->field('id')->in($elementIdsToDelete) - ->count()->getQuery()->execute(); + ->count()->execute(); // delete elements $qb = $this->dm->query('Element'); $qb->field('source')->references($import) ->field('id')->in($elementIdsToDelete) - ->remove()->getQuery()->execute(); + ->remove()->execute(); // delete linked object cause doctrine cascading do not work when deleting with queryBuilder $qb = $this->dm->createQueryBuilder(UserInteraction::class); - $qb->field('element.id')->in($elementIdsToDelete)->remove()->getQuery()->execute(); + $qb->field('element.id')->in($elementIdsToDelete)->remove()->execute(); } $qb = $this->dm->query('Element'); $totalCount = $qb->field('status')->notEqual(ElementStatus::ModifiedPendingVersion) ->field('source')->references($import) - ->count()->getQuery()->execute(); + ->count()->execute(); $qb = $this->dm->query('Element'); - $elementsMissingGeoCount = $qb->field('source')->references($import)->field('moderationState')->equals(ModerationState::GeolocError)->count()->getQuery()->execute(); + $elementsMissingGeoCount = $qb->field('source')->references($import)->field('moderationState')->equals(ModerationState::GeolocError)->count()->execute(); $qb = $this->dm->query('Element'); - $elementsMissingTaxoCount = $qb->field('source')->references($import)->field('moderationState')->equals(ModerationState::NoOptionProvided)->count()->getQuery()->execute(); + $elementsMissingTaxoCount = $qb->field('source')->references($import)->field('moderationState')->equals(ModerationState::NoOptionProvided)->count()->execute(); $logData = [ 'elementsCount' => $totalCount, diff --git a/src/Services/GoGoCartoJsService.php b/src/Services/GoGoCartoJsService.php index 7f9e4fea0..f1363b915 100644 --- a/src/Services/GoGoCartoJsService.php +++ b/src/Services/GoGoCartoJsService.php @@ -40,11 +40,7 @@ class GoGoCartoJsService if ($config->getStampFeature()->getActive()) { $allowedStamps = is_object($user) ? $user->getAllowedStamps()->toArray() : []; foreach ($allowedStamps as $stamp) { - $result = $elementsRep->findStampedWithId($stamp->getId()); - $elementIds = []; - foreach ($result as $obj) { - $elementIds[] = $obj['_id']; - } + $elementIds = $elementsRep->findStampedWithId($stamp->getId()); $stamp->setElementIds($elementIds); } } diff --git a/src/Services/WebhookService.php b/src/Services/WebhookService.php index 7ecc0450d..89e675486 100755 --- a/src/Services/WebhookService.php +++ b/src/Services/WebhookService.php @@ -43,7 +43,7 @@ class WebhookService ->field('webhookPosts.numAttempts')->lte(6) // ignore posts with 6 failures ->field('webhookPosts.nextAttemptAt')->lte(new \DateTime()) ->limit($limit) - ->getQuery()->execute(); + ->execute(); if (!$contributions || 0 == $contributions->count()) { return 0; diff --git a/templates/admin/core_custom/custom-fields/form-builder.html.twig b/templates/admin/core_custom/custom-fields/form-builder.html.twig index 714c37782..a46fd4a35 100644 --- a/templates/admin/core_custom/custom-fields/form-builder.html.twig +++ b/templates/admin/core_custom/custom-fields/form-builder.html.twig @@ -170,7 +170,8 @@ }); let dataProperties = {{ form.vars.attr["data-props"]|raw }}; - + if (typeof dataProperties == 'object') + dataProperties = Object.values(dataProperties) let propNameOptions = [] for(let prop of dataProperties) { propNameOptions.push({ -- GitLab