Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace Modules\Objects\Models;
- use \Framework\Pagination\Pagination;
- Class Objects extends \Framework\Models
- {
- /**
- * Initialize language object
- */
- public function __construct()
- {
- parent::__construct();
- $this->options = (object) array(
- 'pagination' => false,
- 'sold_interval' => 30
- );
- $this->search = (object) array(
- 'id' => null, // null | int | array
- 'system' => null, // null | string
- 'system_reference' => null, // null | string
- 'bouwtype_reference' => null, // null | string
- 'active' => true, // null | true | false
- 'publiceren' => true, // null | true | false
- 'verborgen' => false, // null | true | false
- 'stilAanbod' => false, // null | true | false
- 'ingevoerd' => null, // null | date(Y-m-d)
- 'gesynchroniseerd' => null, // null | date(Y-m-d)
- 'gewijzigd' => null, // null | date(Y-m-d)
- 'status_gewijzigd' => null, // null | date(Y-m-d)
- 'status' => null, // null | string | array
- 'trefwoord' => null, // null | string
- 'favorite' => null, // null | string
- 'special' => null, // null | string
- 'woning' => (object) array(// null | true | false | object
- 'recreatie' => null, // null | true | false
- 'soort' => null, // null | string
- 'woonhuissoort' => null, // null | string
- 'woonhuistype' => null, // null | string
- 'woonhuiskenmerk' => null, // null | string
- 'appartementsoort' => null, // null | string
- 'appartementkenmerk' => null, // null | string
- 'min_inhoud' => null, // null | int
- 'max_inhoud' => null, // null | int
- 'min_perceeloppervlakte' => null, // null | int
- 'max_perceeloppervlakte' => null, // null | int
- 'min_woonoppervlakte' => null, // null | int
- 'max_woonoppervlakte' => null, // null | int
- 'min_slaapkamers' => null, // null | int
- 'max_slaapkamers' => null // null | int
- ),
- 'bedrijfspand' => (object) array(// null | true | false | object
- 'soort' => null, // null | string
- 'horecasoort' => null, // null | string
- 'min_oppervlakte' => null, // null | int
- 'max_oppervlakte' => null, // null | int
- 'min_terrein_oppervlakte' => null, // null | int
- 'max_terrein_oppervlakte' => null, // null | int
- 'min_vloeroppervlakte' => null, // null | int
- 'max_vloeroppervlakte' => null, // null | int
- 'unitsvanaf' => null, // null | int
- 'verdiepingen' => null, // null | int
- 'bouwvorm' => null, // null | string
- 'inaanbouw' => null // null | true | false
- ),
- 'agrarisch' => (object) array(// null | true | false | object
- 'soort' => null, // null | string
- 'min_oppervlakte' => null, // null | int
- 'max_oppervlakte' => null, // null | int
- 'min_plaatsen_jongvee' => null, // null | int
- 'max_plaatsen_jongvee' => null, // null | int
- 'min_plaatsen_melkvee' => null, // null | int
- 'max_plaatsen_melkvee' => null, // null | int
- 'min_glasoppervlakte' => null, // null | int
- 'max_glasoppervlakte' => null // null | int
- ),
- 'garage' => (object) array(// null | true | false | object
- 'soort' => null, // null | string
- 'capaciteit' => null // null | int
- ),
- 'bouwgrond' => (object) array(// null | true | false | object
- 'huidigebestemming' => null, // null | string
- 'huidiggebruik' => null, // null | string
- 'min_oppervlakte' => null, // null | int
- 'max_oppervlakte' => null, // null | int
- 'bouwrijp' => null // null | true | false
- ),
- 'nieuwbouw' => null, // null | true | false
- 'straat' => null, // null | string
- 'huisnummer' => null, // null | string
- 'toevoeging' => null, // null | string
- 'postcode_cf' => null, // null | int
- 'postcode_lt' => null, // null | string
- 'plaats' => null, // null | string
- 'provincie' => null, // null | string
- 'land' => null, // null | string
- 'koop' => null, // null | true | array('min'=>100000, 'max'=>200000)
- 'huur' => null, // null | true | array('min'=>1000, 'max'=>2000)
- 'min_koopprijs' => null, // null | int
- 'max_koopprijs' => null, // null | int
- 'min_huurprijs' => null, // null | int
- 'max_huurprijs' => null, // null | int
- 'makelaar' => null, // null | int | array
- 'bouwvorm' => null, // null | string
- 'energielabel' => null, // null | string
- 'bouwjaar' => null, // null | int
- 'bouwperiode' => null, // null | string
- 'customerID' => null, // null | int
- 'hoofdfoto' => null, // null | true | false
- 'openhuis' => null, // null | true | false
- 'min_kamers' => null, // null | int
- 'max_kamers' => null // null | int
- );
- $this->order = (object) array(
- 'id' => false,
- 'system_reference' => false,
- 'active' => false,
- 'ingevoerd' => false,
- 'gesynchroniseerd' => false,
- 'gewijzigd' => false,
- 'adres' => false,
- 'plaats' => false,
- 'prijs' => false,
- 'energielabel' => false,
- 'updates' => false,
- 'random' => false,
- 'sequence' => array()
- );
- $this->results = (object) array(
- 'total' => 0,
- 'data' => array(),
- 'order' => false,
- 'pagination' => false
- );
- }
- /**
- * setOptions
- */
- protected function getOptions()
- {
- }
- /**
- * setSearch
- */
- protected function setSearch()
- {
- // id
- if (is_array($this->search->id)) {
- $this->query['where'][] = '`ob`.`objectID` IN (' . implode(', ', array_map('intval', $this->search->id)) . ')';
- } elseif ($this->search->id != null) {
- $this->query['where'][] = '`ob`.`objectID` = :search_id';
- $this->query['params']['search_id'] = $this->search->id;
- }
- // system
- if ($this->search->system != null) {
- $this->query['where'][] = '`ob`.`ob_system` = :search_system';
- $this->query['params']['search_system'] = $this->search->system;
- }
- // system_reference
- if ($this->search->system_reference != null) {
- $this->query['where'][] = '`ob`.`ob_system_reference` = :search_system_reference';
- $this->query['params']['search_system_reference'] = $this->search->system_reference;
- }
- // bouwtype_reference
- if ($this->search->bouwtype_reference != null) {
- $this->query['where'][] = '`ob`.`ob_bouwtype_reference` = :search_bouwtype_reference';
- $this->query['params']['search_bouwtype_reference'] = $this->search->bouwtype_reference;
- }
- // active / status
- if ($this->search->active === true && (int) $this->options->sold_interval > 0 && is_array($this->search->status) && in_array('verkocht', $this->search->status) && in_array('verhuurd', $this->search->status)) {
- $this->query['where'][] = '(`ob`.`ob_active` = 1 OR (`ob`.`ob_status` IN ("verkocht","verhuurd") AND (`ob`.`ob_status_gewijzigd` IS NULL OR ADDDATE(`ob`.`ob_status_gewijzigd`, INTERVAL ' . (int) $this->options->sold_interval . ' DAY) >= NOW())))';
- } elseif ($this->search->active === true && (int) $this->options->sold_interval > 0 && is_array($this->search->status) && in_array('verkocht', $this->search->status)) {
- $this->query['where'][] = '(`ob`.`ob_active` = 1 OR (`ob`.`ob_status` IN ("verkocht") AND (`ob`.`ob_status_gewijzigd` IS NULL OR ADDDATE(`ob`.`ob_status_gewijzigd`, INTERVAL ' . (int) $this->options->sold_interval . ' DAY) >= NOW())))';
- } elseif ($this->search->active === true && (int) $this->options->sold_interval > 0 && is_array($this->search->status) && in_array('verhuurd', $this->search->status)) {
- $this->query['where'][] = '(`ob`.`ob_active` = 1 OR (`ob`.`ob_status` IN ("verhuurd") AND (`ob`.`ob_status_gewijzigd` IS NULL OR ADDDATE(`ob`.`ob_status_gewijzigd`, INTERVAL ' . (int) $this->options->sold_interval . ' DAY) >= NOW())))';
- } elseif ($this->search->active === true) {
- $this->query['where'][] = '`ob`.`ob_active` = 1';
- } elseif ($this->search->active === false) {
- $this->query['where'][] = '`ob`.`ob_active` = 0';
- } elseif ($this->search->active === null) {
- $this->query['where'][] = '`ob`.`ob_active` IN (0,1)';
- }
- // status
- if (is_array($this->search->status)) {
- $this->query['where'][] = '`ob`.`ob_status` IN ("' . implode('", "', $this->search->status) . '")';
- } elseif ($this->search->status != null) {
- $this->query['where'][] = '`ob`.`ob_status` = :search_status';
- $this->query['params']['search_status'] = $this->search->status;
- }
- // publiceren
- if ($this->search->publiceren === true) {
- $this->query['where'][] = '`ob`.`ob_publiceren` = 1';
- } elseif ($this->search->publiceren === false) {
- $this->query['where'][] = '`ob`.`ob_publiceren` = 0';
- } elseif ($this->search->publiceren === null) {
- $this->query['where'][] = '`ob`.`ob_publiceren` IN (0,1)';
- }
- // verborgen
- if ($this->search->verborgen === true) {
- $this->query['where'][] = '`ob`.`ob_verborgen` = 1';
- } elseif ($this->search->verborgen === false) {
- $this->query['where'][] = '`ob`.`ob_verborgen` = 0';
- } elseif ($this->search->verborgen === null) {
- $this->query['where'][] = '`ob`.`ob_verborgen` IN (0,1)';
- }
- // stilAanbod
- if ($this->search->stilAanbod === true) {
- $this->query['where'][] = '`ob`.`ob_stilAanbod` = 1';
- } elseif ($this->search->stilAanbod === false) {
- $this->query['where'][] = '`ob`.`ob_stilAanbod` = 0';
- } elseif ($this->search->stilAanbod === null) {
- $this->query['where'][] = '`ob`.`ob_stilAanbod` IN (0,1)';
- }
- // customerID
- if ($this->search->customerID != null) {
- $this->query['where'][] = 'FIND_IN_SET(:search_customerID, `ob`.`ob_customerID`)';
- $this->query['params']['search_customerID'] = $this->search->customerID;
- }
- // ingevoerd
- if ($this->search->ingevoerd != null) {
- $this->query['where'][] = '`ob`.`ob_ingevoerd` >= :search_ingevoerd';
- $this->query['params']['search_ingevoerd'] = $this->search->ingevoerd;
- }
- // gesynchroniseerd
- if ($this->search->gesynchroniseerd != null) {
- $this->query['where'][] = '`ob`.`ob_gesynchroniseerd` >= :search_gesynchroniseerd';
- $this->query['params']['search_gesynchroniseerd'] = $this->search->gesynchroniseerd;
- }
- // gewijzigd
- if ($this->search->gewijzigd != null) {
- $this->query['where'][] = 'DATE_FORMAT(`ob`.`ob_gewijzigd`, "%Y-%m-%d") >= :search_gewijzigd';
- $this->query['params']['search_gewijzigd'] = $this->search->gewijzigd;
- }
- // status_gewijzigd
- if ($this->search->status_gewijzigd != null) {
- $this->query['where'][] = 'DATE_FORMAT(`ob`.`ob_status_gewijzigd`, "%Y-%m-%d") >= :search_status_gewijzigd';
- $this->query['params']['search_status_gewijzigd'] = $this->search->status_gewijzigd;
- }
- // soorten
- $where = array();
- if (($return = $this->searchWoning()) !== false)
- $where[] = $return;
- if (($return = $this->searchBedrijfspand()) !== false)
- $where[] = $return;
- if (($return = $this->searchGarage()) !== false)
- $where[] = $return;
- if (sizeof($where) > 0) {
- $this->query['where'][] = '(' . implode(' OR ', $where) . ')';
- }
- // trefwoord
- if ($this->search->trefwoord != null) {
- $this->query['where'][] = '(`ob`.`ob_plaats` LIKE :search_keyword '
- . ' OR CONCAT_WS(" ",`ob`.`ob_straat`,`ob`.`ob_huisnummer`, `ob`.`ob_toevoeging`) LIKE :search_keyword'
- . ' OR CONCAT_WS(" ",`ob`.`ob_postcode_cf`,`ob`.`ob_postcode_lt`) LIKE :search_keyword'
- . ' OR CONCAT(`ob`.`ob_postcode_cf`,`ob`.`ob_postcode_lt`) LIKE :search_keyword'
- . ' OR `ob`.`ob_omschrijving` LIKE :search_keyword)';
- $this->query['params']['search_keyword'] = $this->search->trefwoord;
- }
- // nieuwbouw
- if ($this->search->nieuwbouw === true) {
- $this->query['where'][] = '`ob`.`ob_nieuwbouw` = 1';
- } elseif ($this->search->nieuwbouw === false) {
- $this->query['where'][] = '`ob`.`ob_nieuwbouw` = 0';
- }
- // straat
- if ($this->search->straat !== null) {
- $this->query['where'][] = '`ob`.`ob_straat` LIKE :search_straat';
- $this->query['params']['search_straat'] = $this->search->straat;
- }
- // huisnummer
- if ($this->search->huisnummer !== null) {
- $this->query['where'][] = '`ob`.`ob_huisnummer` = :search_huisnummer';
- $this->query['params']['search_huisnummer'] = $this->search->huisnummer;
- }
- // toevoeging
- if ($this->search->toevoeging !== null) {
- $this->query['where'][] = '`ob`.`ob_toevoeging` = :search_toevoeging';
- $this->query['params']['search_toevoeging'] = $this->search->toevoeging;
- }
- // postcode_cf
- if ($this->search->postcode_cf !== null) {
- $this->query['where'][] = '`ob`.`ob_postcode_cf` = ' . (int) $this->search->postcode_cf;
- }
- // postcode_lt
- if ($this->search->postcode_lt !== null) {
- $this->query['where'][] = '`ob`.`ob_postcode_lt` = :search_postcode_lt';
- $this->query['params']['search_postcode_lt'] = strtoupper($this->search->postcode_lt);
- }
- // plaats
- if ($this->search->plaats !== null) {
- if (is_array($this->search->plaats)) {
- $this->query['where'][] = 'LOWER(`ob`.`ob_plaats`) IN ("' . implode('","', array_map('strtolower', $this->search->plaats)) . '")';
- } else {
- $this->query['where'][] = '`ob`.`ob_plaats` LIKE :search_plaats';
- $this->query['params']['search_plaats'] = $this->search->plaats;
- }
- }
- // provincie
- if ($this->search->provincie !== null) {
- $this->query['where'][] = '`ob`.`ob_provincie` = :search_provincie';
- $this->query['params']['search_provincie'] = $this->search->provincie;
- }
- // land
- if ($this->search->land !== null) {
- $this->query['where'][] = '`ob`.`ob_land` = :search_land';
- $this->query['params']['search_land'] = $this->search->land;
- }
- // koop
- if (is_array($this->search->koop)) {
- // array('min'=>100000, 'max'=>200000)
- } elseif ($this->search->koop === true) {
- $this->query['where'][] = '`ob`.`ob_koop` = 1';
- }
- // huur
- if (is_array($this->search->huur)) {
- // array('min'=>100000, 'max'=>200000)
- } elseif ($this->search->huur === true) {
- $this->query['where'][] = '`ob`.`ob_huur` = 1';
- }
- // min_koopprijs
- if ($this->search->min_koopprijs !== null) {
- $this->query['where'][] = '(`ob`.`ob_koopprijs` >= :search_min_koopprijs OR `ob`.`ob_koopprijs` = 0)';
- $this->query['params']['search_min_koopprijs'] = $this->search->min_koopprijs;
- }
- // max_koopprijs
- if ($this->search->max_koopprijs !== null) {
- $this->query['where'][] = '`ob`.`ob_koopprijs` <= :search_max_koopprijs';
- $this->query['params']['search_max_koopprijs'] = $this->search->max_koopprijs;
- }
- // min_huurprijs
- if ($this->search->min_huurprijs !== null) {
- $this->query['where'][] = '(`ob`.`ob_huurprijs` >= :search_min_huurprijs OR `ob`.`ob_huurprijs` = 0)';
- $this->query['params']['search_min_huurprijs'] = $this->search->min_huurprijs;
- }
- // max_huurprijs
- if ($this->search->max_huurprijs !== null) {
- $this->query['where'][] = '`ob`.`ob_huurprijs` <= :search_max_huurprijs';
- $this->query['params']['search_max_huurprijs'] = $this->search->max_huurprijs;
- }
- // min_kamers
- if ($this->search->min_kamers !== null) {
- $this->query['where'][] = '(`obw`.`obw_kamers` >= :search_min_kamers)';
- $this->query['params']['search_min_kamers'] = $this->search->min_kamers;
- }
- // max_kamers
- if ($this->search->max_kamers !== null) {
- $this->query['where'][] = '`obw`.`obw_kamers` <= :search_max_kamers';
- $this->query['params']['search->max_kamers'] = $this->search->max_kamers;
- }
- // makelaar
- if (is_array($this->search->makelaar)) {
- $this->query['where'][] = '`ob`.`ob_makelaarID` IN (' . implode(', ', array_map('intval', $this->search->makelaar)) . ')';
- } elseif ($this->search->makelaar !== null) {
- $this->query['where'][] = '`ob`.`ob_makelaarID` = :search_makelaar';
- $this->query['params']['search_makelaar'] = $this->search->makelaar;
- }
- // bouwvorm
- if ($this->search->bouwvorm != null) {
- if(strstr($this->search->bouwvorm,',')){
- $this->query['where'][] = '`ob`.`ob_bouwvorm` IN ("' . $this->search->bouwvorm . '")';
- }else{
- $this->query['where'][] = '`ob`.`ob_bouwvorm` = :search_bouwvorm';
- $this->query['params']['search_bouwvorm'] = $this->search->bouwvorm;
- }
- }
- // energielabel
- if ($this->search->energielabel != null) {
- $this->query['where'][] = '`ob`.`ob_energielabel` = :search_energielabel';
- $this->query['params']['search_energielabel'] = $this->search->energielabel;
- }
- // bouwjaar
- if ($this->search->bouwjaar != null) {
- $this->query['where'][] = '`ob`.`ob_bouwjaar` = ' . (int) $this->search->bouwjaar;
- }
- // favorieten
- if ($this->search->favorite != null) {
- $this->query['where'][] = '`obf`.`obf_favorite_hash` = "' . $this->search->favorite . '"';
- }
- // bouwperiode
- if ($this->search->bouwperiode != null) {
- $this->query['where'][] = '`ob`.`ob_bouwperiode` = :search_bouwperiode';
- $this->query['params']['search_bouwperiode'] = $this->search->bouwperiode;
- }
- // hoofdfoto
- if ($this->search->hoofdfoto === true) {
- $this->query['where'][] = '`ob`.`ob_hoofdfoto` IS NOT NULL';
- }
- // special
- if ($this->search->special != null) {
- $this->query['where'][] = '`ob`.`ob_special` = :search_special';
- $this->query['params']['search_special'] = $this->search->special;
- }
- // openhuis
- if ($this->search->openhuis === true) {
- $this->query['where'][] = 'DATE_FORMAT(`ob`.`ob_openhuis_van`, "%Y-%m-%d") >= CURDATE()';
- } elseif ($this->search->openhuis === false) {
- $this->query['where'][] = '`ob`.`ob_openhuis_van` IS NULL';
- }
- }
- protected function searchWoning()
- {
- $where = array();
- // woning
- if (is_object($this->search->woning)) {
- foreach ($this->search->woning as $key => $value) {
- if ($key == 'recreatie') {
- if ($value === true) {
- $where[] = '`obw`.`obw_recreatie` = 1';
- } elseif ($value === false) {
- $where[] = '`obw`.`obw_recreatie` = 0';
- }
- } elseif (preg_match('/^min_/', $key)) {
- if ((int) $value > 0) {
- $where[] = '`obw`.`obw_' . str_replace('min_', '', $key) . '` >= :woning_' . $key;
- $this->query['params']['woning_' . $key] = $value;
- }
- } elseif (preg_match('/^max_/', $key)) {
- if ((int) $value > 0) {
- $where[] = '`obw`.`obw_' . str_replace('max_', '', $key) . '` <= :woning_' . $key;
- $this->query['params']['woning_' . $key] = $value;
- }
- } elseif ($value !== null) {
- $where[] = '`obw`.`obw_' . $key . '` = :woning_' . $key;
- $this->query['params']['woning_' . $key] = $value;
- }
- }
- }
- if ($this->search->woning === true || sizeof($where) > 0) {
- //$this->query['join'][] = 'LEFT JOIN `object_woning` `obw` ON (`obw`.`obw_objectID` = `ob`.`objectID`)';
- array_unshift($where, '`ob`.`ob_woning` = 1');
- return '(' . implode(' AND ', $where) . ')';
- }
- return false;
- }
- protected function searchBedrijfspand()
- {
- $where = array();
- // bedrijfspand
- if (is_object($this->search->bedrijfspand)) {
- // soort
- if ($this->search->bedrijfspand->soort !== null) {
- $where[] = '(`obb`.`obb_soort_1` = :bedrijf_soort OR `obb`.`obb_soort_2` = :bedrijf_soort)';
- $this->query['params']['bedrijf_soort'] = $this->search->bedrijfspand->soort;
- switch ($this->search->bedrijfspand->soort) {
- case 'bedrijfsruimte':
- // min_oppervlakte
- if ($this->search->bedrijfspand->min_oppervlakte !== null) {
- $where[] = '(`obb`.`obb_bedrijfshal_oppervlakte` >= :bedrijf_min_oppervlakte '
- . ' OR `obb`.`obb_winkelruimte_oppervlakte` >= :bedrijf_min_oppervlakte'
- . ' OR `obb`.`obb_horeca_oppervlakte` >= :bedrijf_min_oppervlakte'
- . ' OR `obb`.`obb_kantoorruimte_oppervlakte` >= :bedrijf_min_oppervlakte'
- . ' OR `obb`.`obb_terrein_oppervlakte` >= :bedrijf_min_oppervlakte)';
- $this->query['params']['bedrijf_min_oppervlakte'] = (int) $this->search->bedrijfspand->min_oppervlakte;
- }
- // max_oppervlakte
- if ($this->search->bedrijfspand->max_oppervlakte !== null) {
- $where[] = '(`obb`.`obb_bedrijfshal_oppervlakte` <= :bedrijf_max_oppervlakte '
- . ' AND `obb`.`obb_winkelruimte_oppervlakte` <= :bedrijf_max_oppervlakte'
- . ' AND `obb`.`obb_horeca_oppervlakte` <= :bedrijf_max_oppervlakte'
- . ' AND `obb`.`obb_kantoorruimte_oppervlakte` <= :bedrijf_max_oppervlakte'
- . ' AND `obb`.`obb_terrein_oppervlakte` <= :bedrijf_max_oppervlakte)';
- $this->query['params']['bedrijf_max_oppervlakte'] = (int) $this->search->bedrijfspand->max_oppervlakte;
- }
- // unitsvanaf
- if ($this->search->bedrijfspand->unitsvanaf !== null) {
- $where[] = '`obb`.`obb_bedrijfshal_inunitsvanaf` = ' . (int) $this->search->bedrijfspand->unitsvanaf;
- }
- break;
- case 'bouwgrond':
- break;
- case 'horeca':
- // horecasoort
- if ($this->search->bedrijfspand->soort == 'horeca' && $this->search->bedrijfspand->horecasoort !== null) {
- $where[] = '`obb`.`obb_horeca_soort` = :bedrijf_horecasoort';
- $this->query['params']['bedrijf_horecasoort'] = $this->search->bedrijfspand->horecasoort;
- }
- // min_oppervlakte
- if ($this->search->bedrijfspand->min_oppervlakte !== null) {
- $where[] = '`obb`.`obb_horeca_oppervlakte` >= ' . (int) $this->search->bedrijfspand->min_oppervlakte;
- }
- // max_oppervlakte
- if ($this->search->bedrijfspand->max_oppervlakte !== null) {
- $where[] = '`obb`.`obb_horeca_oppervlakte` <= ' . (int) $this->search->bedrijfspand->max_oppervlakte;
- }
- // unitsvanaf
- if ($this->search->bedrijfspand->unitsvanaf !== null) {
- $where[] = '`obb`.`obb_horeca_inunitsvanaf` = ' . (int) $this->search->bedrijfspand->unitsvanaf;
- }
- break;
- case 'overig':
- break;
- case 'winkelruimte':
- // min_oppervlakte
- if ($this->search->bedrijfspand->min_oppervlakte !== null) {
- $where[] = '`obb`.`obb_winkelruimte_oppervlakte` >= ' . (int) $this->search->bedrijfspand->min_oppervlakte;
- }
- // max_oppervlakte
- if ($this->search->bedrijfspand->max_oppervlakte !== null) {
- $where[] = '`obb`.`obb_winkelruimte_oppervlakte` <= ' . (int) $this->search->bedrijfspand->max_oppervlakte;
- }
- // unitsvanaf
- if ($this->search->bedrijfspand->unitsvanaf !== null) {
- $where[] = '`obb`.`obb_winkelruimte_inunitsvanaf` = ' . (int) $this->search->bedrijfspand->unitsvanaf;
- }
- // verdiepingen
- if ($this->search->bedrijfspand->verdiepingen !== null) {
- $where[] = '`obb`.`obb_winkelruimte_verdiepingen` = ' . (int) $this->search->bedrijfspand->verdiepingen;
- }
- break;
- case 'bouwgrond':
- break;
- case 'kantoorruimte':
- // min_oppervlakte
- if ($this->search->bedrijfspand->min_oppervlakte !== null) {
- $where[] = '`obb`.`obb_kantoorruimte_oppervlakte` >= ' . (int) $this->search->bedrijfspand->min_oppervlakte;
- }
- // max_oppervlakte
- if ($this->search->bedrijfspand->max_oppervlakte !== null) {
- $where[] = '`obb`.`obb_kantoorruimte_oppervlakte` <= ' . (int) $this->search->bedrijfspand->max_oppervlakte;
- }
- // unitsvanaf
- if ($this->search->bedrijfspand->unitsvanaf !== null) {
- $where[] = '`obb`.`obb_kantoorruimte_inunitsvanaf` = ' . (int) $this->search->bedrijfspand->unitsvanaf;
- }
- // verdiepingen
- if ($this->search->bedrijfspand->verdiepingen !== null) {
- $where[] = '`obb`.`obb_kantoorruimte_verdiepingen` = ' . (int) $this->search->bedrijfspand->verdiepingen;
- }
- break;
- case 'buitenterrein':
- break;
- case 'praktijkruimte':
- break;
- case 'showroom':
- break;
- }
- }
- // min_terrein_oppervlakte
- if ($this->search->bedrijfspand->min_terrein_oppervlakte !== null) {
- $where[] = '`obb`.`obb_terrein_oppervlakte` >= ' . (int) $this->search->bedrijfspand->min_terrein_oppervlakte;
- }
- // max_terrein_oppervlakte
- if ($this->search->bedrijfspand->max_terrein_oppervlakte !== null) {
- $where[] = '`obb`.`obb_terrein_oppervlakte` <= ' . (int) $this->search->bedrijfspand->max_terrein_oppervlakte;
- }
- // min_vloeroppervlakte
- if ($this->search->bedrijfspand->min_vloeroppervlakte !== null) {
- $where[] = '`obb`.`obb_vloeroppervlakte` >= ' . (int) $this->search->bedrijfspand->min_vloeroppervlakte;
- }
- // max_vloeroppervlakte
- if ($this->search->bedrijfspand->max_vloeroppervlakte !== null) {
- $where[] = '`obb`.`obb_vloeroppervlakte` <= ' . (int) $this->search->bedrijfspand->max_vloeroppervlakte;
- }
- // bouwvorm
- if ($this->search->bedrijfspand->bouwvorm !== null) {
- $where[] = '`obb`.`obb_bouwvorm` = :bedrijf_bouwvorm';
- $this->query['params']['bedrijf_bouwvorm'] = $this->search->bedrijfspand->bouwvorm;
- }
- // inaanbouw
- if ($this->search->bedrijfspand->inaanbouw !== null) {
- $where[] = '`obb`.`obb_inaanbouw` = :bedrijf_inaanbouw';
- $this->query['params']['bedrijf_inaanbouw'] = $this->search->bedrijfspand->inaanbouw;
- }
- }
- if ($this->search->bedrijfspand === true || sizeof($where) > 0) {
- //$this->query['join'][] = 'LEFT JOIN `object_bedrijfspand` `obb` ON (`obb`.`obb_objectID` = `ob`.`objectID`)';
- $where[] = '`ob`.`ob_bedrijfspand` = 1';
- return '(' . implode(' AND ', $where) . ')';
- }
- return false;
- }
- /**
- *
- * @return mixed
- */
- protected function searchAgrarisch()
- {
- $where = array();
- // agrarisch
- if (is_object($this->search->agrarisch)) {
- foreach ($this->search->agrarisch as $key => $value) {
- if ($key == 'soort') {
- if ($value !== null) {
- $where[] = '`oba`.`oba_agrarischsoort` = :agrarisch_soort';
- $this->query['params']['agrarisch_soort'] = $value;
- }
- } elseif (preg_match('/^min_/', $key)) {
- if ((int) $value > 0) {
- $where[] = '`oba`.`oba_' . str_replace('min_', '', $key) . '` >= :agrarisch_' . $key;
- $this->query['params']['agrarisch_' . $key] = $value;
- }
- } elseif (preg_match('/^max_/', $key)) {
- if ((int) $value > 0) {
- $where[] = '`oba`.`oba_' . str_replace('max_', '', $key) . '` <= :agrarisch_' . $key;
- $this->query['params']['agrarisch_' . $key] = $value;
- }
- }
- }
- }
- if ($this->search->agrarisch === true || sizeof($where) > 0) {
- //$this->query['join'][] = 'LEFT JOIN `object_agrarisch` `oba` ON (`oba`.`oba_objectID` = `ob`.`objectID`)';
- $where[] = '`ob`.`ob_agrarisch` = 1';
- return '(' . implode(' AND ', $where) . ')';
- }
- return false;
- }
- protected function searchGarage()
- {
- $where = array();
- if (is_object($this->search->garage)) {
- // soort
- if ($this->search->garage->soort !== null) {
- $where[] = '(`obg`.`obg_garagesoort1` = :garage_soort OR `obg`.`obg_garagesoort2` = :garage_soort)';
- $this->query['params']['garage_soort'] = $this->search->garage->soort;
- }
- // capaciteit
- if ($this->search->garage->capaciteit !== null) {
- $where[] = '`obg`.`obg_capaciteit` = ' . (int) $this->search->garage->capaciteit;
- }
- }
- if ($this->search->garage === true || sizeof($where) > 0) {
- //$this->query['join'][] = 'LEFT JOIN `object_garage` `obg` ON (`obg`.`obg_objectID` = `ob`.`objectID`)';
- $where[] = '`ob`.`ob_garage` = 1';
- return '(' . implode(' AND ', $where) . ')';
- }
- return false;
- }
- protected function searchBouwgrond()
- {
- $where = array();
- if (is_object($this->search->bouwgrond)) {
- // soort
- if ($this->search->bouwgrond->huidigebestemming !== null) {
- $where[] = '`obg`.`obd_huidigebestemming` = :bouwgrond_huidigebestemming';
- $this->query['params']['bouwgrond_huidigebestemming'] = $this->search->bouwgrond->huidigebestemming;
- }
- // huidiggebruik
- if ($this->search->bouwgrond->huidiggebruik !== null) {
- $where[] = '`obg`.`obd_huidiggebruik` = :bouwgrond_huidiggebruik';
- $this->query['params']['bouwgrond_huidiggebruik'] = $this->search->bouwgrond->huidiggebruik;
- }
- // min_oppervlakte
- if ($this->search->bouwgrond->min_oppervlakte !== null) {
- $where[] = '`obd`.`obd_oppervlakte` >= ' . (int) $this->search->bouwgrond->min_oppervlakte;
- }
- // max_oppervlakte
- if ($this->search->bouwgrond->max_oppervlakte !== null) {
- $where[] = '`obd`.`obd_oppervlakte` <= ' . (int) $this->search->bouwgrond->max_oppervlakte;
- }
- // huidiggebruik
- if ($this->search->bouwgrond->bouwrijp === true) {
- $where[] = '`obg`.`obd_bouwrijp` = 1';
- } elseif ($this->search->bouwgrond->bouwrijp === false) {
- $where[] = '`obg`.`obd_bouwrijp` = 0';
- }
- }
- if ($this->search->bouwgrond === true || sizeof($where) > 0) {
- //$this->query['join'][] = 'LEFT JOIN `object_bouwgrond` `obd` ON (`obd`.`obd_objectID` = `ob`.`objectID`)';
- $where[] = '`ob`.`ob_bouwgrond` = 1';
- return '(' . implode(' AND ', $where) . ')';
- }
- return false;
- }
- /**
- * getOrder
- */
- protected function getOrder()
- {
- if (sizeof($this->order->sequence) == 0) {
- $this->setOrder('adres', 'asc');
- }
- if (sizeof($this->order->sequence) > 0) {
- foreach ($this->order->sequence as $type) {
- switch ($type) {
- case 'id':
- $this->query['order'][] = sprintf('`objectID` %1$s', strtoupper($this->order->id));
- break;
- case 'system_reference':
- $this->query['order'][] = sprintf('`ob_system_reference` %1$s', strtoupper($this->order->system_reference));
- break;
- case 'active':
- $this->query['order'][] = sprintf('`ob_active` %1$s', strtoupper($this->order->active));
- break;
- case 'ingevoerd':
- $this->query['order'][] = sprintf('`ob_ingevoerd` %1$s', strtoupper($this->order->ingevoerd));
- break;
- case 'gesynchroniseerd':
- $this->query['order'][] = sprintf('`ob_gesynchroniseerd` %1$s', strtoupper($this->order->gesynchroniseerd));
- break;
- case 'gewijzigd':
- $this->query['order'][] = sprintf('`ob_gewijzigd` %1$s', strtoupper($this->order->gewijzigd));
- break;
- case 'adres':
- $this->query['order'][] = sprintf('`ob_straat` %1$s, `ob_huisnummer` %1$s, `ob_toevoeging` %1$s', strtoupper($this->order->adres));
- break;
- case 'plaats':
- $this->query['order'][] = sprintf('`ob_plaats` %1$s', strtoupper($this->order->plaats));
- break;
- case 'prijs':
- $this->query['order'][] = sprintf('`ob_koopprijs` %1$s, `ob_huurprijs` %1$s', strtoupper($this->order->prijs));
- break;
- case 'energielabel':
- $this->query['order'][] = sprintf('`ob_energielabel` %1$s', strtoupper($this->order->energielabel));
- break;
- case 'status':
- $this->query['order'][] = sprintf('`ob_status` %1$s', strtoupper($this->order->status));
- break;
- case 'updates':
- $this->query['order'][] = sprintf('GREATEST(`ob`.`ob_status_gewijzigd`, IFNULL(`ob`.`ob_afbeeldingen_gewijzigd`, 0), IFNULL(`ob`.`ob_prijs_gewijzigd`, 0)) %1$s', strtoupper($this->order->updates));
- break;
- case 'oppervlakte':
- $this->query['order'][] = sprintf('`ob_status` %1$s', strtoupper($this->order->status));
- break;
- }
- }
- }
- if ($this->order->random) {
- $this->query['order'] = array('RAND()');
- } else {
- $this->query['order'] = array_unique($this->query['order']);
- }
- }
- /**
- * buildQuery
- */
- public function buildQuery($nolimit = false)
- {
- $this->getOptions();
- $this->setSearch();
- $this->getOrder();
- // LIMIT en offset berekenen
- if (!$nolimit) {
- $select = $this->query['select'];
- if (!is_null($this->query['limit'])) {
- $offset = 0;
- $limit = $this->query['limit'];
- } elseif ((int) $this->options->pagination > 0) {
- $current = (isset($_REQUEST['p']) ? (int) $_REQUEST['p'] : 1);
- $limit = $this->options->pagination;
- $offset = (($current > 0 ? ($current - 1) : 0) * $limit);
- if (!is_null($this->query['limit'])) {
- $interval = intval($this->query['limit'] / $limit);
- if ($limit < $this->query['limit']) {
- if (($current - 1) == $interval) {
- $limit = ($this->query['limit'] % $limit);
- }
- } else {
- $limit = $this->query['limit'];
- }
- }
- }
- }else{
- $select = '`ob`.`objectID`';
- }
- return sprintf('SELECT %1$s ' .
- 'FROM `object` `ob` ' .
- 'LEFT JOIN `object_woning` `obw` ON (`obw`.`obw_objectID` = `ob`.`objectID`) ' .
- 'LEFT JOIN `object_bedrijfspand` `obb` ON (`obb`.`obb_objectID` = `ob`.`objectID`) ' .
- 'LEFT JOIN `object_agrarisch` `oba` ON (`oba`.`oba_objectID` = `ob`.`objectID`) ' .
- 'LEFT JOIN `object_garage` `obg` ON (`obg`.`obg_objectID` = `ob`.`objectID`) ' .
- 'LEFT JOIN `object_bouwgrond` `obd` ON (`obd`.`obd_objectID` = `ob`.`objectID`)' .
- 'LEFT JOIN `object_favorite` `obf` ON (`obf`.`obf_objectID` = `ob`.`objectID`)' .
- '%2$s%3$s%4$s%7$s%5$s%6$s',
- /* 1 */ $select,
- /* 2 */ (sizeof($this->query['join']) > 0 ? implode(' ', $this->query['join']) : ''),
- /* 3 */ (sizeof($this->query['where']) > 0 ? ' WHERE ' . implode(' AND ', array_unique($this->query['where'])) : ''),
- /* 4 */ (!empty($this->query['group']) ? ' GROUP BY `' . $this->query['group'] . '`' : ''),
- /* 5 */ (sizeof($this->query['order']) > 0 ? ' ORDER BY ' . implode(', ', array_unique($this->query['order'])) : ''),
- /* 6 */ (isset($offset) && isset($limit) ? ' LIMIT ' . $offset . ',' . $limit : ''),
- /* 7 */ (!empty($this->query['having']) ? ' HAVING ' . implode(', ', array_unique($this->query['having'])) . '' : ''));
- }
- /**
- * Load all the requested pages
- * @param array $data
- * @return bool
- */
- public function load($debug = false)
- {
- $query = $this->buildQuery();
- $query_total = $this->buildQuery(true);
- if (sizeof($this->query['params']) > 0) {
- $results = $this->db->execute($query, $this->query['params']);
- if ($debug) $this->db->info();
- $results_total = $this->db->execute($query_total, $this->query['params']);
- } else {
- $results = $this->db->query($query);
- if ($debug) $this->db->info();
- $results_total = $this->db->query($query_total);
- }
- if ($results->rowCount() > 0) {
- $rows = $results->fetchAll();
- $rows_total = $results_total->fetchAll(\PDO::FETCH_COLUMN, 0);
- $this->results->total = count($rows_total);
- $this->results->totaldata = $rows_total;
- $this->results->data = array();
- foreach ($rows as $row) {
- $object = new Object($row);
- $this->results->data[] = $object;
- }
- if ($this->options->pagination !== false) {
- $this->results->pagination = new Pagination($this->results->total, $this->options->pagination);
- }
- return $this->results;
- }
- return false;
- }
- }
Add Comment
Please, Sign In to add comment