elementTypeRepository = $elementTypeRepository; $this->elementTypeTemplatesRepository = $elementTypeTemplatesRepository; $this->layoutRepository = $layoutRepository; $this->pageRepository = $pageRepository; $this->pageAutoGeneQuery = $pageAutoGeneQuery; } /** * @param array $elementTypeData * @param int $projectId * * @return bool */ public function deleteElementType(int $elementTypeId): bool { $elementTypes = $this->elementTypeRepository->findByIdPIM($elementTypeId); $elements = []; if(!empty($elementTypes)){ $pagesToGenerate = []; foreach ($elementTypes as $elementType) { if(!empty($elementType->getElementsPIM())){ $elements = array_merge($elements, $elementType->getElementsPIM()); } } $pages = $this->pageRepository->findByElementTypeIds([$elementTypeId]); if(!empty($pages)){ foreach ($pages as $page) { $products = array_map(function($product) { return $product['id']; }, json_decode($page->getIdProducts(), true)); if(count($products) > count(array_diff($products, $elements))){ $pagesToGenerate = ['id' => $page->getId(), "pageDuplicateId" => null]; if(!$pages->getPageDuplicate()->isEmpty()){ foreach ($pages->getPageDuplicate() as $dupli) { $pagesToGenerate = ['id' => $page->getId(), "pageDuplicateId" => $dupli->getId()]; } } } } if(!empty($pagesToGenerate)){ $this->pageAutoGeneQuery->addPageToGenerate($pagesToGenerate); } } } $delete = $this->elementTypeRepository->deleteElementType($elementTypeId); if ($delete) { $this->elementTypeTemplatesRepository->deleteByElementTypePim($elementTypeId); $this->layoutRepository->deleteByElementTypePim($elementTypeId); } return $delete; } }