Example #1
0
 /**
  * @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);
 }