shell bypass 403

GrazzMean Shell

Uname: Linux info 3.0 #1337 SMP Tue Jan 01 00:00:00 CEST 2000 all GNU/Linux
Software: Apache
PHP version: 5.6.40 [ PHP INFO ] PHP os: Linux
Server Ip: 217.160.0.194
Your Ip: 216.73.217.85
User: u72294154 (9179942) | Group: ftpusers (600)
Safe Mode: OFF
Disable Function:
NONE

name : InmueblesController_prueba.php
<?

App::uses('PagesController', 'Controller');

class InmueblesController extends PagesController {

	public function home() {
        //Variables recibidas en URL
		$this->setInmueblesMap();

        //Listado de inmuebles
		$conditions = array('Inmueble.publicado' => true);

        //Filtro de precio
		if ($this->request->is('post') && isset($this->request->data['tipo'])) {
            unset($this->params->query['pagina']); //al filtrar no tiene sentido mantener el nº de página
            switch ($this->request->data['tipo']) {
            	case 'precio':
            	$precioDesde = (int) $this->request->data['precioDesde'];
            	$precioHasta = (int) $this->request->data['precioHasta'];
            	if (!empty($precioDesde) && !empty($precioHasta) && $precioDesde >= $precioHasta) {
            		$precioHasta = 0;
            		$this->Session->setFlash('No puedes poner un precio desde mayor o igual que el precio hasta.' . $this->btnClose, 'default', array('class' => 'alert alert-danger'));
            	}

            	if (!empty($precioDesde)) {
            		$this->params->query['precio-desde'] = $precioDesde;
            	} else {
            		unset($this->params->query['precio-desde']);
            	}

            	if (!empty($precioHasta)) {
            		$this->params->query['precio-hasta'] = $precioHasta;
            	} else {
            		unset($this->params->query['precio-hasta']);
            	}

            	$this->redirect($this->App->getInmueblesUrl($this->params->query));
            	break;
            	case 'extra':
            	$extras = array();
            	foreach ($this->request->data as $k => $v) {
            		if ($k != 'tipo' && (bool) $v) {
            			$extras[] = $k;
            		}
            	}

            	if (!empty($extras)) {
            		$this->params->query['extras'] = implode('-', $extras);
            	} else {
            		unset($this->params->query['extras']);
            	}

            	$this->redirect($this->App->getInmueblesUrl($this->params->query));
            	break;
            }
        }


        array_push($this->uses, 'InmuebleTipo');
        $this->set('buscadorTipos', $this->InmuebleTipo->find('list', 
        	array(
        		'conditions' => array('InmuebleTipo.tipo_id' => 0, 'AND' => array()), 
        		'fields' => array('InmuebleTipo.id', 'InmuebleTipo.nombre'), 
        		'order' => $this->App->getOrden('InmuebleTipo'))));


        $this->set('buscadorLocalidades', $this->App->getLocalidadesSelect());


        $this->getListadoInmuebles($conditions);
        debug($conditions);
        debug($this->getListadoInmuebles($conditions));
        
        //Cabecera
        $this->set('cabeceraAfter', Configure::read('App.nombre'));

        //Migas
        $this->migas['Inmuebles'] = array('controller' => $this->params->controller, 'action' => $this->params->action);

        $this->render('/Pages/inmuebles');
    }

    public function detalle() {
    	array_push($this->uses, 'Inmueble');
    	$inmueble = $this->Inmueble->findBySeoAndPublicado($this->params->inmueble, true);

        //Comprobamos si hemos encontrado el inmueble
    	if (empty($inmueble)) {
    		$this->Session->setFlash('No se ha encontrado el inmueble al que deseas acceder.' . $this->btnClose, 'default', array('class' => 'alert alert-danger'));
    		$this->redirect(array('controller' => 'pages', 'action' => 'error'));
    	}

    	if ($this->request->is('post') && !empty($this->request->data['Contacto'])) {
    		array_push($this->uses, 'Contacto');
    		$this->Contacto->create();
    		$this->request->data['Contacto']['pagina'] = 'Inmueble';
    		$this->request->data['Contacto']['entidad'] = 'inmueble';
    		$this->request->data['Contacto']['entidad_id'] = $inmueble['Inmueble']['id'];
    		if ($this->Contacto->save($this->request->data)) {
                //Email
    			$Email = new CakeEmail(Configure::read('App.env'));
    			$Email->to(Configure::read('App.email'))
    			->subject('Contacto en la web de ' . Configure::read('App.nombre'))
    			->template('contacto')
    			->emailFormat('html')
    			->viewVars(array('fecha' => date('d/m/Y G:i'), 'contacto' => $this->request->data['Contacto'], 'entidad' => $inmueble['Inmueble']))
    			->send();

    			$this->Session->setFlash('/obj-inmueble', 'default', array(), 'ga');
    			$this->Session->setFlash('Gracias por completar el formulario de contacto, nos pondremos en contacto con usted para atenderte lo antes posible.' . $this->btnClose, 'default', array('class' => 'alert alert-success'));
    			$this->redirect(array('controller' => 'inmuebles', 'action' => 'detalle', 'inmueble' => $inmueble['Inmueble']['seo']));
    		} else {
    			$this->errores = $this->Contacto->validationErrors;
    		}
    	}

    	$this->set('inmueble', $inmueble);
    	$this->set('provincias', $this->App->getProvinciasSelect());
    	$this->set('localidades', $this->App->getLocalidadesSelect(array('Localidad.id_provincia' => $inmueble['Inmueble']['id_provincia'])));
    	$this->set('zonas', $this->App->getZonasSelect(array('Zona.id_localidad' => $inmueble['Inmueble']['id_localidad'])));
    	$this->set('estados', $this->App->getInmueblesEstadosSelect());
    	$this->set('gestiones', $this->App->getInmueblesGestionesSelect());
    	$this->set('tipos', $this->App->getInmueblesTiposSelect());

        //Aumentamos el nº de visitas
    	$this->Inmueble->updateAll(array('visualizaciones' => 'visualizaciones + 1'), array('Inmueble.id' => $inmueble['Inmueble']['id']));

        //Inmuebles similares
    	$similares = $this->Components->load('Inmueble')->getSimilares($inmueble, $this->getParamsSession('inmueblesConditions'));
    	$this->set('similares', $similares);


        //Metas
    	$this->metas['title'] = strip_tags($inmueble['Inmueble']['titulo']);
    	$this->metas['description'] = $inmueble['Inmueble']['texto'];
    	$this->metas['keywords'] = strip_tags($inmueble['Inmueble']['titulo']) . ', ' . $inmueble['Inmueble']['texto'];

    	if (!empty($inmueble['InmuebleGaleria'])) {
    		$this->metas['img'] = $inmueble['InmuebleGaleria'][0]['imagen'];
    		$this->metas['img_mime'] = $inmueble['InmuebleGaleria'][0]['imagen_mime'];
    	}

        //Migas
    	$this->migas['Inmuebles'] = array('controller' => $this->params->controller, 'action' => $this->params->action);
    	$this->migas[$inmueble['Inmueble']['titulo']] = array('controller' => $this->params->controller, 'action' => $this->params->action, 'inmueble' => $inmueble['Inmueble']['seo']);

    	$this->stylesheets[] = 'https://code.interactivaclic.com/bxslider/4.2.3/jquery.bxslider.min.css';
    	$this->stylesheets[] = 'https://code.interactivaclic.com/lightGallery/1.1.4/css/lightGallery.css';
    	$this->javascripts[] = 'https://code.interactivaclic.com/bxslider/4.2.3/jquery.bxslider.min.js';
    	$this->javascripts[] = 'https://code.interactivaclic.com/lightGallery/1.1.4/js/lightGallery.min.js';
    	$this->javascripts[] = 'https://maps.google.com/maps/api/js?sensor=false';
    	$this->javascripts[] = 'frontend/galeria';
    	$this->render('/Pages/inmueble');
    }

    public function referencia() {
    	array_push($this->uses, 'Inmueble');
    	$inmuebles = $this->Inmueble->find('all', array('conditions' => array('Inmueble.publicado' => true, 'Inmueble.referencia' => $this->params->referencia)));

        //Comprobamos si hemos encontrado algún inmueble
    	if (empty($inmuebles)) {
    		$this->Session->setFlash('No se ha encontrado la referencia introducida.' . $this->btnClose, 'default', array('class' => 'alert alert-danger'));
    		$this->redirect(array('controller' => 'inmuebles', 'action' => 'home'));
    	}

    	$this->set('listado', $inmuebles);


        //Migas
    	$this->migas['Inmuebles con la referencia: ' . $this->params->descriptor] = array('controller' => $this->params->controller, 'action' => $this->params->action, 'referencia' => $this->params->referencia);

    	$this->render('/Pages/referencia');
    }

    private function getListadoInmuebles($conditions = array()) {
    	array_push($this->uses, 'Inmueble');
    	$Inmueble = $this->Components->load('Inmueble');

        //Establecemos el límite de elementos que se visualizarán en el listado
    	$limit = 15;

        //Obtenemos la vista
    	$vista = $this->getParamsSession('vista', 'iconos');
    	$this->Session->write('vista', $vista);
    	$this->set('vista', $vista);

        //Obtenemos el orden
    	$order = $this->getParamsSession('orden', 'fecha');
    	$this->Session->write('orden', $order);
    	$this->set('orden', $order);

        //Obtenemos los arrays de datos
    	$inmueblesGestionesSeoID = $this->getFiltros('InmuebleGestion', 'inmueblesGestiones');
    	$inmueblesTiposSeoID = $this->getFiltros('InmuebleTipo', 'inmueblesTipos');
    	$inmueblesEstadosSeoID = $this->getFiltros('InmuebleEstado', 'inmueblesEstados');

        $inmueblesAreasSeoID = $this->getFiltros('Area', 'inmueblesAreas', array('Area.id_provincia' => Configure::read('App.id_provincia'))); //aunque haya area, es necesario el array de areas para obtener la condición de las localidades
        if (!empty($this->params->query['area'])) { //si no hay area no se muestran las localidades
        	$inmueblesLocalidadesSeoID = $this->getFiltros('Localidad', 'inmueblesLocalidades', array('Localidad.id_area' => $inmueblesAreasSeoID[$this->params->query['area']]));
            if (!empty($this->params->query['localidad'])) { //si no hay localidad no se muestran las zonas
            	$inmueblesZonasSeoID = $this->getFiltros('Zona', 'inmueblesZonas', array('Zona.id_localidad' => $inmueblesLocalidadesSeoID[$this->params->query['localidad']]));
            }
        }

        //Generamos las condiciones de búsqueda del filtrado
        $this->getFiltro('Inmueble', $conditions, 'gestion', 'id_gestion', $inmueblesGestionesSeoID);
        $this->getFiltro('Inmueble', $conditions, 'tipo', 'id_tipo_inmueble', $inmueblesTiposSeoID);
        $this->getFiltro('Inmueble', $conditions, 'estado', 'id_estado_inmueble', $inmueblesEstadosSeoID);

        $this->getFiltroArea($conditions, 'area', $inmueblesAreasSeoID);
        if (!empty($this->params->query['area'])) { //si no hay area no se muestran las localidades
        	$this->getFiltro('Inmueble', $conditions, 'localidad', 'id_localidad', $inmueblesLocalidadesSeoID);
            if (!empty($this->params->query['localidad'])) { //si no hay localidad no se muestran las zonas
            	$this->getFiltro('Inmueble', $conditions, 'zona', 'id_zona', $inmueblesZonasSeoID);
            }
        }

        $this->getFiltroRango($conditions, 'precio', 'precio' . ((!empty($conditions['Inmueble.id_gestion']) && in_array($conditions['Inmueble.id_gestion'], Configure::read('Inmueble.gestionesAlquiler'))) ? '_alquiler' : ''));

        //Habitaciones y baños
        $habitaciones = Configure::read('Inmueble.habitaciones');
        $habitacionesLast = end($habitaciones); //obtenemos el último elemento para mostrar los que cumplan igual o mayor a su valor
        $this->getFiltroValores($conditions, 'habitacion', 'habitaciones', $habitaciones, $habitacionesLast);

        $banos = Configure::read('Inmueble.banos');
        $banosLast = end($banos); //obtenemos el último elemento para mostrar los que cumplan igual o mayor a su valor
        $this->getFiltroValores($conditions, 'bano', 'banos', $banos, $banosLast);

        $this->getFiltroExtras($conditions);
        $this->getFiltroBusqueda($conditions);

        //Obtenemos el ID de las áreas por localidad para poder generar el filtro de áreas
        array_push($this->uses, 'Localidad');
        $localidadesAreas = $this->Localidad->find('list', array('fields' => array('Localidad.id', 'Localidad.id_area'), 'conditions' => array('Localidad.id_provincia' => Configure::read('App.id_provincia'))));

        //Generamos los filtros y obtenemos el total de registros que cumplen con el criterio de búsqueda
        $inmueblesTotales = 0;
        $inmueblesNum = array('gestion' => array(), 'tipo' => array(), 'area' => array(), 'localidad' => array(), 'zona' => array(), 'estado' => array(), 'habitacion' => array(), 'bano' => array());
        foreach ($this->Inmueble->find('all', array('conditions' => $conditions, 'fields' => array('Inmueble.id_gestion', 'Inmueble.id_tipo_inmueble', 'Inmueble.id_estado_inmueble', 'Inmueble.id_localidad', 'Inmueble.id_zona', 'Inmueble.id_provincia', 'Inmueble.habitaciones', 'Inmueble.banos'), 'recursive' => 0)) as $i) {
        	$i = $i['Inmueble'];

        	$this->addCont($inmueblesNum, 'gestion', $i['id_gestion']);
        	$this->addCont($inmueblesNum, 'tipo', $i['id_tipo_inmueble']);
        	$this->addCont($inmueblesNum, 'estado', $i['id_estado_inmueble']);

        	if (!empty($i['id_localidad'])) {
        		@$this->addCont($inmueblesNum, 'area', $localidadesAreas[(int) $i['id_localidad']]);
                if (!empty($this->params->query['area'])) { //si no hay area no se muestran las localidades
                	$this->addCont($inmueblesNum, 'localidad', $i['id_localidad']);
                    if (!empty($this->params->query['localidad'])) { //si no hay localidad no se muestran las zonas
                    	$this->addCont($inmueblesNum, 'zona', $i['id_zona']);
                    }
                }
            }

            //Habitaciones y baños
            if (!empty($i['habitaciones']) && (int) $i['habitaciones'] > 0) {
            	if ((int) $i['habitaciones'] >= $habitacionesLast) {
            		$this->addCont($inmueblesNum, 'habitacion', $habitacionesLast);
            	} else {
            		$this->addCont($inmueblesNum, 'habitacion', $habitaciones[$i['habitaciones']]);
            	}
            }

            if (!empty($i['banos']) && (int) $i['banos'] > 0) {
            	if ((int) $i['banos'] >= $banosLast) {
            		$this->addCont($inmueblesNum, 'bano', $banosLast);
            	} else {
            		$this->addCont($inmueblesNum, 'bano', $banos[$i['banos']]);
            	}
            }

            $inmueblesTotales += 1;
        }

        //En caso de no haber resultados y sí filtro, mostramos el filtro para poder deseleccionarle
        if ($inmueblesTotales == 0 && !empty($this->filtro)) {
        	$inmueblesNum = $this->getFiltroVacio($this->filtro, array('_id', 'inmueble_'));
        }

        $this->set('inmueblesNum', $inmueblesNum);
        $this->set('options', $Inmueble->getSelects($conditions));

        //Arrays con los datos para habitaciones y baños, dado que no salen de una tabla externa
        $this->getArrayValores($inmueblesNum, 'habitacion', 'inmueblesHabitaciones');
        $this->getArrayValores($inmueblesNum, 'bano', 'inmueblesBanos');

        //Obtenemos la información de las páginas que tiene el listado
        $this->set('inmueblesTotales', $inmueblesTotales);

        $pagTotales = ceil($inmueblesTotales / $limit);
        $pagActual = (int) $this->getParamsSession('pagina', 1);
        if ($pagActual < 1) { //si solicitamos páginas por debajo de la 1
        	$pagActual = 1;
        } elseif ($pagActual > $pagTotales) { //si solicitamos páginas por encima del total de páginas
        	$pagActual = $pagTotales;
        }
        $this->set('paginaActual', $pagActual);
        $this->set('paginaTotales', $pagTotales);

        //Preparamos el orden para ordenar el listado
        switch ($order) {
        	case 'precio':
        	$order = array('Inmueble.precio' . ((!empty($conditions['Inmueble.id_gestion']) && in_array($conditions['Inmueble.id_gestion'], Configure::read('Inmueble.gestionesAlquiler'))) ? '_alquiler' : '') => 'ASC', 'Inmueble.created' => 'DESC', 'Inmueble.titulo_corto' => 'ASC');
        	break;
        	case 'superficie':
        	$order = array('Inmueble.superficie_construida' => 'ASC', 'Inmueble.created' => 'DESC', 'Inmueble.titulo_corto' => 'ASC');
        	break;
        	default:
        	$order = $this->App->getOrden('Inmueble');
        	break;
        }

        //Listado según tipo de vista
        switch ($vista) {
        	case 'mapa':
                //Quitamos limites dado que el listado principal puede tener una gran cantidad de inmuebles
        	ini_set('memory_limit', '-1');
        	ini_set('max_execution_time', 0);

        	$listado = $this->Inmueble->find('all', array('conditions' => $conditions, 'order' => $order));

        	$inmuebleHelper = new InmuebleHelper(new View());
        	$listadoMapa = array('totales' => 0, 'items' => array());
        	foreach ($listado as $l) {
        		if (!empty($l['Inmueble']['geolocalizacion'])) {
        			$listadoMapa['totales'] ++;
        			$geo = explode(',', $l['Inmueble']['geolocalizacion']);
        			$imagen = $inmuebleHelper->getImagen($l['Inmueble']['imagen_dn'], 100, 75);
        			$listadoMapa['items'][] = array(
        				'titulo' => $inmuebleHelper->trimText($l['Inmueble']['titulo_corto'], 45),
        				'referencia' => $l['Inmueble']['referencia'],
        				'precio' => $inmuebleHelper->getPrecio($l['Inmueble']),
        				'imagen' => $imagen,
        				'habitaciones' => $l['Inmueble']['habitaciones'],
        				'superficie_util' => $l['Inmueble']['superficie_util'],
        				'url' => $inmuebleHelper->url(array('controller' => $this->params->controller, 'action' => 'detalle', 'inmueble' => $l['Inmueble']['seo'])),
        				'latitud' => $geo[0],
        				'longitud' => $geo[1]
        			);
        		}
        	}

        	$this->set('listado', $listadoMapa);

        	$this->javascripts[] = 'https://maps.google.com/maps/api/js?sensor=false';
        	$this->javascripts[] = 'https://www.google.com/jsapi';
        	$this->javascripts[] = 'infobox';
        	$this->javascripts[] = 'gmaps.lib';
        	$this->javascripts[] = 'frontend/inmuebles-mapa';
        	break;
            default: //iconos y lista
                //Listado paginado
            $this->paginate = array('conditions' => $conditions, 'limit' => $limit, 'order' => $order, 'page' => $pagActual);
            $listado = $this->paginate('Inmueble');

            $this->set('listado', $listado);
            break;
        }


        //Guardamos en sesión las condiciones para buscar los relacionados de un inmueble en el detalle
        $this->Session->write('inmueblesConditions', $conditions);
    }

    //Método que genera las condiciones de las áreas
    private function getFiltroArea(&$conditions, $campo, $seoID = null) {
    	if (!empty($this->params->query[$campo]) && !empty($seoID[$this->params->query[$campo]]) && empty($this->params->query['localidad'])) {
            //Buscamos las localidades del área seleccionada
    		array_push($this->uses, 'Localidad');
    		$localidadesIDs = $this->Localidad->find('list', array('fields' => array('Localidad.id', 'Localidad.id'), 'conditions' => array('Localidad.id_area' => $seoID[$this->params->query[$campo]])));
    		$conditions['Inmueble.id_localidad'] = array_merge(array(0), $localidadesIDs);
    	}
    }

    //Método que genera las condiciones de los campos en caso que sean rangos
    private function getFiltroRango(&$conditions, $campo, $campoTabla = null) {
    	if (empty($campoTabla)) {
    		$campoTabla = $campo;
    	}

    	if (!empty($this->params->query["$campo-desde"]) || !empty($this->params->query["$campo-hasta"])) {
    		$desde = (!empty($this->params->query["$campo-desde"])) ? $this->params->query["$campo-desde"] : null;
    		$hasta = (!empty($this->params->query["$campo-hasta"])) ? $this->params->query["$campo-hasta"] : null;

    		if (empty($hasta)) {
    			$conditions["Inmueble.$campoTabla >="] = $desde;
    		} elseif (empty($desde)) {
    			$conditions["Inmueble.$campoTabla <"] = $hasta;
    		} else {
    			$conditions["Inmueble.$campoTabla >="] = $desde;
    			$conditions["Inmueble.$campoTabla <"] = $hasta;
    		}

    		if (array_key_exists('NOT', $conditions)) {
    			$conditions['NOT'] = array();
    		}
    		$conditions['NOT']["Inmueble.$campoTabla"] = 0;
    	}
    }

    //Método que genera las condiciones de las habitaciones y baños
    private function getFiltroValores(&$conditions, $campo, $campoTabla, $valores, $valoresLast) {
    	if (!empty($this->params->query[$campo])) {
    		foreach ($valores as $k => $v) {
    			if ($this->params->query[$campo] == Inflector::slug($v, '-')) {
                    if ($valoresLast == $v) { //último elemento
                    	$conditions["Inmueble.$campoTabla >="] = $k;
                    	$this->filtro[$campo] = array($v => 0);
                    } else {
                    	$conditions["Inmueble.$campoTabla"] = $k;
                    	$this->filtro[$campo] = array($v => 0);
                    }
                }
            }
        }
    }

    private function getFiltroExtras(&$conditions) {
    	if (!empty($this->params->query['extras'])) {
    		$extras = explode('-', $this->params->query['extras']);
    		foreach ($extras as $e) {
    			$conditions["Inmueble." . str_replace(array('aireacondicionado'), array('aire_acondicionado'), $e)] = true;
    		}
    	}
    }

    private function getFiltroBusqueda(&$conditions) {
    	if (!empty($this->params->query['busqueda'])) {
            //Partimos la cadena de búsqueda
    		$busqueda = explode('-', $this->params->query['busqueda']);
    		$strings = array();
    		$inmuebleBusquedaConditions = array();
    		foreach ($busqueda as $b) {
    			if (strlen($b) > 3) {
    				$b = str_replace('-', ' ', strtolower($b));
    				$strings[$b] = $b;
    				$inmuebleBusquedaConditions[] = $b;
    			}
    		}

            //Obtenemos los mapeos de búsquedas existentes
    		array_push($this->uses, 'InmuebleBusqueda');
    		$busquedas = array();
    		foreach ($this->InmuebleBusqueda->find('all', array('conditions' => array('OR' => array('InmuebleBusqueda.busqueda' => $inmuebleBusquedaConditions)))) as $b) {
    			if (!array_key_exists($b['InmuebleBusqueda']['campo'], $busquedas)) {
    				$busquedas[$b['InmuebleBusqueda']['campo']] = array();
    			}
    			$busquedas[$b['InmuebleBusqueda']['campo']][] = $b['InmuebleBusqueda']['valor'];

                //Quitamos la búsqueda encontrada para no buscar como LIKE en el campo busqueda del inmueble
    			if (array_key_exists($b['InmuebleBusqueda']['busqueda'], $strings)) {
    				unset($strings[$b['InmuebleBusqueda']['busqueda']]);
    			}
    		}

            //Generamos las condiciones de las búsquedas encontradas
    		foreach ($busquedas as $campo => $valores) {
    			if (count($valores) == 1) {
    				$conditions['Inmueble.' . $campo] = $valores[0];
    			} else {
    				$conditions['Inmueble.' . $campo] = array();
    				foreach ($valores as $v) {
    					$conditions['Inmueble.' . $campo][] = $v;
    				}
    			}
    		}

            //Parámetros no encontrados, se buscan en la cadena de búsqueda del inmueble con LIKE
    		if (!empty($strings)) {
    			if (count($strings) == 1) {
    				foreach ($strings as $l) {
    					$conditions['Inmueble.busqueda LIKE'] = '%' . $l . '%';
    				}
    			} else {
    				foreach ($strings as $l) {
    					$conditions[] = array('Inmueble.busqueda LIKE' => '%' . $l . '%');
    				}
    			}
    		}
    	}
    }

    //Método que pasa a la vista un array con valores obtenidos de la propia tabla
    private function getArrayValores($elementosNum, $campo, $vista) {
    	$out = array();

    	if (!empty($elementosNum[$campo])) {
    		$out = array_keys($elementosNum[$campo]);
    		sort($out);
    	}

    	$this->set($vista, $out);
    }

    private function setInmueblesMap() {
        //Gestión
    	if (!empty($this->params->gestion)) {
    		$this->params->query['gestion'] = $this->params->gestion;
    	}

        //Tipo
    	if (!empty($this->params->tipo) && $this->params->tipo != 'inmuebles') {
    		$this->params->query['tipo'] = $this->params->tipo;
    	}

        //Estado
    	if (!empty($this->params->estado)) {
    		$this->params->query['estado'] = $this->params->estado;
    	}

        //Área, localidad y zona
    	if (!empty($this->params->area)) {
    		array_push($this->uses, 'Area');
    		$areas = $this->Area->find('list', array('fields' => array('Area.seo', 'Area.id'), 'order' => $this->App->getOrden('Area')));
    		if (array_key_exists($this->params->area, $areas)) {
    			$this->params->query['area'] = $this->params->area;

    			if (!empty($this->params->localidad)) {
    				array_push($this->uses, 'Localidad');
    				$localidades = $this->Localidad->find('list', array('conditions' => array('Localidad.id_area' => $areas[$this->params->area]), 'fields' => array('Localidad.seo', 'Localidad.id'), 'order' => $this->App->getOrden('Localidad')));
    				if (array_key_exists($this->params->localidad, $localidades)) {
    					$this->params->query['localidad'] = $this->params->localidad;

    					if (!empty($this->params->zona)) {
    						array_push($this->uses, 'Zona');
    						$zonas = $this->Zona->find('list', array('conditions' => array('Zona.id_localidad' => $localidades[$this->params->localidad]), 'fields' => array('Zona.seo', 'Zona.id'), 'order' => $this->App->getOrden('Zona')));
    						if (array_key_exists($this->params->zona, $zonas)) {
    							$this->params->query['zona'] = $this->params->zona;
    						} else {
    							$this->getInmueblesMapParams($this->params->zona);
    						}
    					}
    				} else {
    					$this->getInmueblesMapParams($this->params->localidad);
    				}
    			}
    		} else {
    			$this->getInmueblesMapParams($this->params->area);
    		}
    	}

        //Parametros
    	if (!empty($this->params->parametros)) {
    		$this->getInmueblesMapParams($this->params->parametros);
    	}
    }

    private function getInmueblesMapParams($query) {
    	foreach (explode('_', $query) as $p) {
    		if (substr_count($p, 'pagina-')) {
    			$this->params->query['pagina'] = str_replace(array('pagina-'), null, $p);
    		} elseif (substr_count($p, 'vista-')) {
    			$this->params->query['vista'] = str_replace(array('vista-'), null, $p);
    		} elseif (substr_count($p, 'orden-')) {
    			$this->params->query['orden'] = str_replace(array('orden-'), null, $p);
    		} elseif (substr_count($p, 'precio-desde-')) {
    			$this->params->query['precio-desde'] = str_replace(array('precio-desde-'), null, $p);
    		} elseif (substr_count($p, 'precio-hasta-')) {
    			$this->params->query['precio-hasta'] = str_replace(array('precio-hasta-'), null, $p);
    		} elseif (substr_count($p, 'extras-')) {
    			$this->params->query['extras'] = str_replace(array('extras-'), null, $p);
    		} elseif (substr_count($p, '-habitacion')) {
    			$this->params->query['habitacion'] = $p;
    		} elseif (substr_count($p, '-bano')) {
    			$this->params->query['bano'] = $p;
    		} elseif (substr_count($p, 'busqueda-')) {
    			$this->params->query['busqueda'] = str_replace(array('busqueda-'), null, $p);
    		}
    	}
    }

}
© 2026 GrazzMean