entityManager = $entityManager; $this->container = $container; } public function listByElementType(int $elementType) { return $this->entityManager->createQueryBuilder() ->select('t') ->from(ElementTypesTemplates::class, 't') ->innerJoin('t.export','e') ->innerJoin('e.project', 'p') ->innerJoin('t.elementType', 'et') ->where('p.archiving = :noArchive') ->andWhere('et.elementTypePIM = :elementType') ->setParameter('elementType', $elementType) ->setParameter('noArchive', 0) ->getQuery() ->getResult(); } /** * @param int $exportId [description] * * @return array [description] */ public function findElementTypesTemplatesWithExportByExportId(int $exportId): array { $em = $this->entityManager ->createQueryBuilder() ->select('t') ->from(ElementTypesTemplates::class, 't') ->leftJoin('t.export', 'e') ->where('e.id = :exportId') ->setParameter('exportId', $exportId) ->getQuery() ->getResult(); return $em; } /** * @param int $exportId [description] * * @return ElementTypesTemplates|null [description] */ public function findTemplatesByExportId(int $exportId): ?ElementTypesTemplates { $em = $this->entityManager ->createQueryBuilder() ->select('ett') ->from(ElementTypesTemplates::class, 'ett') ->innerJoin('ett.export', 'e') ->where('e.id = :exportId') ->andWhere('ett.deletedAt is null') ->setMaxResults(1) ->setParameter('exportId', $exportId) ->getQuery() ->getOneOrNullResult(); return $em; } /** * @param int $project_id [description] * @param string $element_types_id [description] * * @return bool [description] */ public function removeElementType(int $project_id, string $element_types_id): bool { // TODO : Change sql native to doctrine entity manager try { $connection = $this->container->get('doctrine.dbal.projects_connection'); $sql = ' DELETE etc from export_template_configuration etc LEFT JOIN project_element_type as el ON etc.elementType_id = el.id WHERE export_id IN ( SELECT id FROM export WHERE project_id = ' . $project_id . ' ) AND el.element_type_pim is not null '; if ($element_types_id) { $sql .= ' AND elementType_id NOT IN (' . $element_types_id . ')'; } $stmt = $connection->prepare($sql); $stmt->execute(); return true; } catch (Exception $e) { return false; } } /** * @param int $elementTypeId [description] * * @return bool [description] */ public function deleteByElementTypePim(int $elementTypeId): bool { // TODO : Change sql native to doctrine entity manager + rename function with "remove" instead "delete" ? try { $dateNow = new \DateTime(); $connection = $this->container->get('doctrine.dbal.projects_connection'); $sql = ' UPDATE export_template_configuration SET deletedAt = "' . $dateNow->format('Y-m-d H:m:s') . '" WHERE elementType_id IN (SELECT id FROM project_element_type WHERE element_type_pim = ' . $elementTypeId . ')'; $stmt = $connection->prepare($sql); $stmt->execute(); return true; } catch (Exception $e) { return false; } } /** * @param array $exportIds [description] * * @return array [description] */ public function findByExportIds(array $exportIds): array { $qb = $this->entityManager->createQueryBuilder(); $qb->select('ett') ->from(ElementTypesTemplates::class, 'ett') ->innerJoin('ett.export', 'ex') ->where($qb->expr()->in('ex.id', $exportIds)); $result = $qb->getQuery() ->getResult(); return $result; } /** * @param array $elementTypesTemplates [description] * * @return bool|Exception [description] */ public function saveMultiple(array $elementTypesTemplates) { try { foreach ($elementTypesTemplates as $elementTypesTemplate) { $this->entityManager->persist(($elementTypesTemplate)); } $this->entityManager->flush(); $result = true; } catch (Exception $e) { $result = $e; } return $result; } }