/** * Construct Where object from query parameters * * @param array $filterParams * @param bool $testApartments * @return Where */ public function constructWhereFromFilterParams($filterParams, $testApartments = true) { $auth = $this->getServiceLocator()->get('library_backoffice_auth'); $hasDevTestRole = $auth->hasRole(Roles::ROLE_DEVELOPMENT_TESTING); $where = new Where(); $table = DbTables::TBL_APARTMENTS; $productStatusGroups = Objects::getProductStatusGroups(); if (!$testApartments || !$hasDevTestRole) { $where->expression($table . '.id NOT IN(' . Constants::TEST_APARTMENT_1 . ', ' . Constants::TEST_APARTMENT_2 . ')', []); } if (isset($filterParams["status"]) && $filterParams["status"] != '0') { $statusGroup = $productStatusGroups[$filterParams["status"]]; $where->in($table . ".status", $statusGroup); } if (isset($filterParams["building_id"]) && $filterParams["building_id"] != '0') { $where->expression($table . '.id IN (SELECT `apartment_id` FROM ' . DbTables::TBL_APARTMENT_GROUP_ITEMS . ' JOIN ' . DbTables::TBL_APARTMENT_GROUPS . ' ON `apartment_group_id` = ' . DbTables::TBL_APARTMENT_GROUPS . '.id WHERE ' . DbTables::TBL_APARTMENT_GROUPS . '.id = ' . $filterParams['building_id'] . ' ) ', []); } if (isset($filterParams["address"]) && $filterParams["address"] != '') { $addressQuery = $filterParams["address"]; $nestedWhere = new Where(); $nestedWhere->like($table . '.name', '%' . $addressQuery . '%')->or->like('det1.name', '%' . $addressQuery . '%')->or->like('det2.name', '%' . $addressQuery . '%')->or->like($table . '.address', '%' . $addressQuery . '%')->or->like($table . '.unit_number', '%' . $addressQuery . '%')->or->like($table . '.postal_code', '%' . $addressQuery . '%'); $where->addPredicate($nestedWhere); } if (isset($filterParams['createdDate']) && $filterParams['createdDate'] !== '') { $createdDate = explode(' - ', $filterParams['createdDate']); $where->between($table . '.create_date', $createdDate['0'], $createdDate['1']); } return $where; }