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.99
User: u72294154 (9179942) | Group: ftpusers (600)
Safe Mode: OFF
Disable Function:
NONE

name : Vivienda.php
<?

App::uses('InmuebleEstado', 'Model');
App::uses('InmuebleGestion', 'Model');
App::uses('InmuebleTipo', 'Model');
App::uses('Provincia', 'Model');
App::uses('Localidad', 'Model');
App::uses('Zona', 'Model');

class Vivienda extends AppModel {

    public $useTable = 'viviendas';
    public $validate = array(
        'inmueble_estado_id' => array(
            'exist' => array(
                'allowEmpty' => true,
                'rule' => 'checkExist',
                'message' => 'Debes seleccionar un estado existente'
            )
        ),
        'inmueble_gestion_id' => array(
            'required' => array(
                'rule' => 'notEmpty',
                'message' => 'Tipo de gestión requerida'
            ),
            'exist' => array(
                'rule' => 'checkExist',
                'message' => 'Debes seleccionar un tipo de gestión existente'
            )
        ),
        'inmueble_tipo_id' => array(
            'required' => array(
                'rule' => 'notEmpty',
                'message' => 'Tipo de inmueble requerido'
            ),
            'exist' => array(
                'rule' => 'checkExist',
                'message' => 'Debes seleccionar un tipo de inmueble existente'
            )
        ),
        'provincia_id' => array(
            'required' => array(
                'rule' => 'notEmpty',
                'message' => 'Provincia requerida'
            ),
            'exist' => array(
                'rule' => 'checkExist',
                'message' => 'Debes seleccionar una provincia existente'
            )
        ),
        'localidad_id' => array(
            'required' => array(
                'allowEmpty' => true,
                'rule' => 'notEmpty',
                'message' => 'Localidad requerida'
            ),
            'exist' => array(
                'rule' => 'checkExist',
                'message' => 'Debes seleccionar una localidad existente'
            )
        ),
        'zona_id' => array(
            'required' => array(
                'allowEmpty' => true,
                'rule' => 'checkExist',
                'message' => 'Debes seleccionar una zona existente'
            )
        ),
        'precio' => array(
            'numeric' => array(
                'allowEmpty' => true,
                'rule' => 'numeric',
                'message' => 'El precio ha de ser un valor numérico'
            ),
            'zero' => array(
                'rule' => 'checkZero',
                'message' => 'El precio ha de ser mayor que 0'
            ),
            'alquiler' => array(
                'rule' => 'checkPrecioAlquiler',
                'message' => 'El precio de alquiler es obligatorio para inmuebles de alquiler'
            )
        ),
        'precio_oferta' => array(
            'numeric' => array(
                'allowEmpty' => true,
                'rule' => 'numeric',
                'message' => 'El precio de oferta ha de ser un valor numérico'
            ),
            'zero' => array(
                'rule' => 'checkZero',
                'message' => 'El precio de oferta ha de ser mayor que 0'
            ),
            'precio' => array(
                'rule' => 'checkMayorPrecio',
                'message' => 'El precio de oferta ha de ser menor que el precio'
            )
        ),
        'precio_alquiler' => array(
            'numeric' => array(
                'allowEmpty' => true,
                'rule' => 'numeric',
                'message' => 'El precio de alquiler ha de ser un valor numérico'
            ),
            'zero' => array(
                'rule' => 'checkZero',
                'message' => 'El precio de alquiler ha de ser mayor que 0'
            )
        ),
        'eficiencia_energetica' => array(
            'required' => array(
                'allowEmpty' => true,
                'rule' => 'checkExist',
                'message' => 'Debes seleccionar una eficiencia energética existente'
            )
        ),
        'num_habitaciones' => array(
            'numeric' => array(
                'allowEmpty' => true,
                'rule' => 'numeric',
                'message' => 'El número de habitaciones ha de ser un valor numérico'
            )
        ),
        'num_banos' => array(
            'numeric' => array(
                'allowEmpty' => true,
                'rule' => 'numeric',
                'message' => 'El número de baños ha de ser un valor numérico'
            )
        ),
        'num_aseos' => array(
            'numeric' => array(
                'allowEmpty' => true,
                'rule' => 'numeric',
                'message' => 'El número de aseos ha de ser un valor numérico'
            )
        ),
        'superficie_parcela' => array(
            'numeric' => array(
                'allowEmpty' => true,
                'rule' => 'numeric',
                'message' => 'La superficie de la parcela ha de ser un valor numérico'
            )
        ),
        'superficie_construida' => array(
            'numeric' => array(
                'allowEmpty' => true,
                'rule' => 'numeric',
                'message' => 'La superficie construida ha de ser un valor numérico'
            )
        ),
        'superficie_util' => array(
            'numeric' => array(
                'allowEmpty' => true,
                'rule' => 'numeric',
                'message' => 'La superficie útil ha de ser un valor numérico'
            )
        ),
    );

    public function checkExist($check) {
        $elemento = null;
        $campo = key($check);
        switch ($campo) {
            case 'inmueble_estado_id':
                $elementos = new InmuebleEstado();
                $elemento = $elementos->findById($this->data[$this->name][$campo]);

                if (!empty($elemento)) {
                    $this->estado = $elemento;
                }
                break;
            case 'inmueble_gestion_id':
                $elementos = new InmuebleGestion();
                $elemento = $elementos->findById($this->data[$this->name][$campo]);

                if (!empty($elemento)) {
                    $this->gestion = $elemento;
                }
                break;
            case 'inmueble_tipo_id':
                $elementos = new InmuebleTipo();
                $elemento = $elementos->findById($this->data[$this->name][$campo]);

                if (!empty($elemento)) {
                    $this->tipo = $elemento;
                }
                break;
            case 'provincia_id':
                $elementos = new Provincia();
                $elemento = $elementos->findById($this->data[$this->name][$campo]);

                if (!empty($elemento)) {
                    $this->provincia = $elemento;
                }
                break;
            case 'localidad_id':
                $elementos = new Localidad();

                if (!empty($this->data[$this->name]['provincia_id'])) { //provincia marcada
                    $elemento = $elementos->findByIdAndProvinciaId($this->data[$this->name][$campo], $this->data[$this->name]['provincia_id']);
                } else {
                    $elemento = $elementos->findById($this->data[$this->name][$campo]);
                }

                if (!empty($elemento)) {
                    $this->localidad = $elemento;
                }
                break;
            case 'zona_id':
                $elementos = new Zona();
                if (!empty($this->data[$this->name]['localidad_id'])) { //localidad marcada
                    $elemento = $elementos->findByIdAndLocalidadId($this->data[$this->name][$campo], $this->data[$this->name]['localidad_id']);
                } else {
                    $elemento = $elementos->findById($this->data[$this->name][$campo]);
                }

                if (!empty($elemento)) {
                    $this->zona = $elemento;
                }
                break;
            case 'eficiencia_energetica':
                $elementos = Configure::read('Inmueble.eficiencias');
                if (in_array($this->data[$this->name][$campo], $elementos)) {
                    $elemento = $elementos[$this->data[$this->name][$campo]];
                }
                break;
        }

        if (empty($elemento)) {
            return false; //error
        }

        return true; //ok
    }

    public function checkZero($check) {
        $elemento = null;
        $campo = key($check);
        if ((int) $this->data[$this->name][$campo] == 0) {
            return false; //error
        }

        return true; //ok
    }

    public function checkMayorPrecio($check) {
        $elemento = null;
        $campo = key($check);
        if (!empty($this->data[$this->name][$campo]) && (int) $this->data[$this->name][$campo] >= (int) $this->data[$this->name]['precio']) {
            return false; //error
        }

        return true; //ok
    }

    public function checkPrecioAlquiler($check) {
        if (!empty($this->data[$this->name]['inmueble_gestion_id']) && in_array((int) $this->data[$this->name]['inmueble_gestion_id'], Configure::read('Inmueble.gestionesAlquiler')) && empty($this->data[$this->name]['precio_alquiler'])) {
            return false;
        }

        return true; //ok
    }

    public function afterSave($created, $options = array()) {
        parent::afterSave($created, $options);

        $entidad = $this->findById($this->id);
        if (!empty($entidad)) {
            $this->getVars($entidad); //obtenemos los valores de otras entidades para no repetir las consultas constantemente
            $db = $this->getDataSource();
            $this->updateAll(array(
                'titulo' => $db->value($this->getTitulo($entidad), 'string'),
                'titulo_corto' => $db->value($this->getTituloCorto($entidad), 'string'),
                'busqueda' => $db->value($this->getBusqueda($entidad), 'string'),
                'seo' => $db->value($this->getViviendaSeo($entidad), 'string'),
                    ), array('Vivienda.id' => $this->id));
        }
    }

    private function getVars($entidad) {
        //Estado
        if (empty($this->estado)) {
            $elementos = new InmuebleEstado();
            $elemento = $elementos->findById($entidad[$this->name]['inmueble_estado_id']);

            if (!empty($elemento)) {
                $this->estado = $elemento;
            }
        }

        //Tipo de gestión
        if (empty($this->gestion)) {
            $elementos = new InmuebleGestion();
            $elemento = $elementos->findById($entidad[$this->name]['inmueble_gestion_id']);

            if (!empty($elemento)) {
                $this->gestion = $elemento;
            }
        }

        //Tipo de inmueble
        if (empty($this->tipo)) {
            $elementos = new InmuebleTipo();
            $elemento = $elementos->findById($entidad[$this->name]['inmueble_tipo_id']);

            if (!empty($elemento)) {
                $this->tipo = $elemento;
            }
        }

        //Provincia
        if (empty($this->provincia)) {
            $elementos = new Provincia();
            $elemento = $elementos->findById($entidad[$this->name]['provincia_id']);

            if (!empty($elemento)) {
                $this->provincia = $elemento;
            }
        }

        //Localidad
        if (empty($this->localidad)) {
            $elementos = new Localidad();
            $elemento = $elementos->findById($entidad[$this->name]['localidad_id']);

            if (!empty($elemento)) {
                $this->localidad = $elemento;
            }
        }

        //Zona
        if (empty($this->zona)) {
            $elementos = new Zona();
            $elemento = $elementos->findById($entidad[$this->name]['zona_id']);

            if (!empty($elemento)) {
                $this->zona = $elemento;
            }
        }
    }

    private function getTitulo($entidad) {
        $out = '';

        //Tipo de inmueble
        if (!empty($this->tipo)) {
            $out .= $this->tipo['InmuebleTipo']['nombre'];
        }

        //Tipo de gestión
        if (!empty($this->gestion)) {
            $out .= ' en ' . strtolower($this->gestion['InmuebleGestion']['nombre']);
        }

        //Localidad
        if (!empty($this->localidad)) {
            $out .= " en {$this->localidad['Localidad']['nombre']}";
        }

        //Información extra (habitaciones, baños, superficie construida)
        $extra = array();

        if (!empty($entidad[$this->name]['num_habitaciones'])) {
            $extra[] = "{$entidad[$this->name]['num_habitaciones']} habitaciones";
        }

        if (!empty($entidad[$this->name]['num_banos'])) {
            $extra[] = "{$entidad[$this->name]['num_banos']} baños";
        }

        if (!empty($entidad[$this->name]['superficie_construida'])) {
            $extra[] = "{$entidad[$this->name]['superficie_construida']} m<sup>2</sup>";
        }

        if (!empty($extra)) {
            if (count($extra) == 1) {
                $out .= ' con ' . implode(', ', $extra);
            } else {
                $extraLast = array_pop($extra);
                $out .= ' con ' . implode(', ', $extra) . " y $extraLast";
            }
        }

        //Precio
        if (!empty($this->gestion['InmuebleGestion']) && in_array((int) $this->gestion['InmuebleGestion']['id'], Configure::read('Inmueble.gestionesAlquiler')) && !empty($entidad[$this->name]['precio_alquiler'])) {
            $out .= " por " . number_format($entidad[$this->name]['precio_alquiler'], 0, ',', '.') . ' €/mes';
        } else {
            if (!empty($entidad[$this->name]['precio_oferta'])) {
                $precio = $entidad[$this->name]['precio_oferta'];
            } elseif (!empty($entidad[$this->name]['precio'])) {
                $precio = $entidad[$this->name]['precio'];
            }

            if (!empty($precio)) {
                $out .= " por " . number_format($precio, 0, ',', '.') . ' €';
            }
        }

        return $out;
    }

    private function getTituloCorto($entidad) {
        $out = '';

        //Tipo de inmueble
        if (!empty($this->tipo)) {
            $out .= $this->tipo['InmuebleTipo']['nombre'];

            //Localidad
            if (!empty($this->localidad)) {
                $out .= " en {$this->localidad['Localidad']['nombre']}";
            }
        }

        return $out;
    }

    private function getBusqueda($entidad) {
        $busqueda = array();

        //Estado
        if (!empty($this->estado)) {
            $busqueda[] = $this->estado['InmuebleEstado']['nombre'];
        }

        //Tipo de gestión
        if (!empty($this->gestion)) {
            $busqueda[] = $this->gestion['InmuebleGestion']['nombre'];
        }

        //Tipo de inmueble
        if (!empty($this->tipo)) {
            $busqueda[] = $this->tipo['InmuebleTipo']['nombre'];
        }

        //Provincia
        if (!empty($this->provincia)) {
            $busqueda[] = $this->provincia['Provincia']['nombre'];
        }

        //Localidad
        if (!empty($this->localidad)) {
            $busqueda[] = $this->localidad['Localidad']['nombre'];
        }

        //Zona
        if (!empty($this->zona)) {
            $busqueda[] = $this->zona['Zona']['nombre'];
        }

        //Texto
        if (!empty($entidad[$this->name]['texto'])) {
            $busqueda[] = strip_tags($entidad[$this->name]['texto']);
        }

        //Campos adicionales
        foreach (array('ascensor', 'calefaccion', 'garaje', 'jardin', 'parking', 'piscina', 'terraza', 'trastero') as $s) {
            if ((bool) $entidad[$this->name][$s]) {
                $busqueda[] = $s;
            }
        }

        //Resto de campos para la búsqueda
        $busqueda[] = $entidad[$this->name]['referencia'];
        $busqueda[] = $entidad[$this->name]['titulo'];
        $busqueda[] = $entidad[$this->name]['titulo_corto'];

        return $this->generarBusqueda($busqueda);
    }

    private function getViviendaSeo($entidad) {
        $out = '';

        //Tipo de inmueble
        if (!empty($this->tipo)) {
            $out .= $this->tipo['InmuebleTipo']['nombre'];

            //Tipo de gestión
            if (!empty($this->gestion)) {
                $out .= '-en-' . $this->gestion['InmuebleGestion']['nombre'];
            }
        }

        //Localidad
        if (!empty($this->localidad)) {
            $out .= '-en-' . $this->localidad['Localidad']['nombre'];
        }

        //Zona
        if (!empty($this->zona)) {
            $out .= '-zona-' . $this->zona['Zona']['nombre'];
        }

        //Habitaciones
        if (!empty($entidad[$this->name]['num_habitaciones'])) {
            $out .= "-{$entidad[$this->name]['num_habitaciones']}-habitaciones";
        }

        //Referencia
        if (!empty($entidad[$this->name]['referencia'])) {
            $out .= "-{$entidad[$this->name]['referencia']}";
        } else {
            $out .= "-{$this->id}";
        }

        return strtolower(Inflector::slug($out, '-'));
    }

}
© 2026 GrazzMean