/** * @param \App\Filter\Page $filter * @return \App\Holder\Page */ public function getPageHolderByFilter(\App\Filter\Page $filter) { $query = $this->entityManager->getRepository($this->repositoryName)->createQueryBuilder(); $query->select("page"); $query->addSelect("rand() as rand"); $query->from(Model\Page::getClassName(), "page"); $query->join(Model\Website::getClassName(), "website", Join::WITH, "page.id_website = website.id_website")->addSelect("website"); $query->join(Model\Wireframe::getClassName(), "wireframe", Join::WITH, "page.id_page = wireframe.id_page")->addSelect("wireframe"); if ($filter->getIdPage() !== null) { $query->andWhere($query->expr()->eq("page.id_page", $filter->getIdPage())); } if ($filter->isRequiredColor()) { $query->andWhere($query->expr()->isNotNull("page.dominant_color")); $query->andWhere($query->expr()->gt($query->expr()->length($query->expr()->trim("page.dominant_color")), 0)); } if ($filter->isRequiredTextColor()) { $query->andWhere($query->expr()->isNotNull("page.dominant_text_color")); $query->andWhere($query->expr()->gt($query->expr()->length($query->expr()->trim("page.dominant_text_color")), 0)); } if ($filter->getTextMode() !== null) { $query->andWhere($query->expr()->eq("wireframe.text_mode", "'" . $filter->getTextMode() . "'")); } if ($filter->getImageMode() !== null) { $query->andWhere($query->expr()->eq("wireframe.image_mode", "'" . $filter->getImageMode() . "'")); } if ($filter->getDevices() !== null && count($filter->getDevices()) > 0) { $query->andWhere($query->expr()->in("wireframe.device", $filter->getDevices())); } if ($filter->getMinResolutionWidth() !== null) { $query->andWhere($query->expr()->gte("wireframe.resolution_width", $filter->getMinResolutionWidth())); } if ($filter->getMinResolutionHeight() !== null) { $query->andWhere($query->expr()->gte("wireframe.resolution_height", $filter->getMinResolutionHeight())); } if ($filter->getMaxResolutionWidth() !== null) { $query->andWhere($query->expr()->lte("wireframe.resolution_width", $filter->getMaxResolutionWidth())); } if ($filter->getMaxResolutionHeight() !== null) { $query->andWhere($query->expr()->lte("wireframe.resolution_height", $filter->getMaxResolutionHeight())); } if ($filter->getLanguages() !== null && count($filter->getLanguages()) > 0) { $query->andWhere($query->expr()->in("website.language", $filter->getLanguages())); } if ($filter->isPriority() !== null && $filter->isPriority()) { $query->andWhere($query->expr()->eq("page.priority", $filter->isPriority() ? 1 : 0)); } if ($filter->getExcludeIdPage() !== null && count($filter->getExcludeIdPage()) > 0) { $query->andWhere($query->expr()->notIn("page.id_page", $filter->getExcludeIdPage())); } if ($filter->getExcludeIdWireframe() !== null && count($filter->getExcludeIdWireframe()) > 0) { $query->andWhere($query->expr()->notIn("wireframe.id_wireframe", $filter->getExcludeIdWireframe())); } if ($filter->getCategories() !== null && count($filter->getCategories()) > 0) { $query->join(Model\EntityCategory::getClassName(), "entity_category", Join::WITH, "website.id_website = entity_category.id_website"); $query->andWhere($query->expr()->in("entity_category.id_category", $filter->getCategories())); } if ($filter->isWebsiteVisible()) { $query->andWhere($query->expr()->eq("website.visible", 1)); } if ($filter->isPageVisible()) { $query->andWhere($query->expr()->eq("page.visible", 1)); } if ($filter->isWireframeVisible()) { $query->andWhere($query->expr()->eq("wireframe.visible", 1)); } $query->orderBy("rand"); $query->setMaxResults(1); $mapper = new \App\Holder\Mapper\Page(); return $this->getHolder($query, $mapper); }