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

name : Inmueble.php
<?

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

class Inmueble extends AppModel {

    public $hasMany = array('InmuebleGaleria' => array('dependent' => false, 'order' => 'orden', 'foreignKey' => 'id_inmueble'));

    public $belongsTo = array(
    'Provincia' => array(
        'className' => 'Provincia',
        'foreignKey' => 'id_provincia',
        'fields' => array('Provincia.*')
    )
);
    public $virtualFields = array(
        'num_imagenes' => 'SELECT COUNT(*) FROM inmuebles_galeria WHERE id_inmueble = Inmueble.id',
        'listado_destacados_ref_title' => 'CONCAT(referencia, " - ", titulo_corto)'
    );
    public $validate = array(
        'cliente_id' => array(
            'exist' => array(
                'allowEmpty' => true,
                'rule' => 'checkExist',
                'message' => 'Debes seleccionar un cliente existente'
            )
        ),
        'inmueble_estado_id' => array(
            'exist' => array(
                'allowEmpty' => true,
                'rule' => 'checkExist',
                'message' => 'Debes seleccionar un estado existente'
            )
        ),
        'id_gestion' => array(
            'required' => array(
                'rule' => 'notEmpty',
                'message' => 'Tipo de gestión requerida'
            ),
            'exist' => array(
                'rule' => 'checkExist',
                'message' => 'Debes seleccionar un tipo de gestión existente'
            ),
            'precio' => array(
                'rule' => 'checkPrecioAlquiler',
                'message' => 'El precio de alquiler es obligatorio para inmuebles de alquiler'
            )
        ),
        '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(
                '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'
            )
        ),
        'precio_anterior' => array(
            'numeric' => array(
                'allowEmpty' => true,
                'rule' => 'numeric',
                'message' => 'El precio anterior ha de ser un valor numérico'
            ),
            'zero' => array(
                'rule' => 'checkZero',
                'message' => 'El precio anterior ha de ser mayor que 0'
            ),
            'precio' => array(
                'rule' => 'checkMenorPrecio',
                'message' => 'El precio anterior ha de ser mayor 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'
            )
        ),
        'alquiler' => array(
            'required' => array(
                'allowEmpty' => true,
                'rule' => 'checkExist',
                'message' => 'Debes seleccionar un periodo de alquiler existente'
            )
        ),
        'eficiencia_energetica' => array(
            'required' => array(
                'allowEmpty' => true,
                'rule' => 'checkExist',
                'message' => 'Debes seleccionar una eficiencia energética existente'
            )
        ),
        'flag' => array(
            'exist' => array(
                'allowEmpty' => true,
                'rule' => 'checkExist',
                'message' => 'Debes seleccionar una flag 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 $estado;
    public $gestion;
    public $tipo;
    public $provincia;
    public $localidad;
    public $zona;

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

                if (!empty($elemento)) {
                    $this->estado = $elemento;
                }
                break;
            case 'id_gestion':
                $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->find('first', array('conditions' => array('InmuebleTipo.id' => $this->data[$this->name][$campo], 'NOT' => array('InmuebleTipo.tipo_id' => 0))));

                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 'alquiler':
                $elementos = Configure::read('Inmueble.alquileres');
                if (array_key_exists($this->data[$this->name][$campo], $elementos)) {
                    $elemento = $elementos[$this->data[$this->name][$campo]];
                }
                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;
            case 'flag':
                $elementos = Configure::read('Inmueble.flags');
                if (array_key_exists($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 checkMenorPrecio($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]['id_gestion']) && in_array((int) $this->data[$this->name]['id_gestion'], Configure::read('Inmueble.gestionesAlquiler')) && empty($this->data[$this->name]['precio_alquiler'])) {
            return false;
        }

        return true; //ok
    }

    public function beforeSave($options = array()) {
        parent::beforeSave($options);

        //Geolocalización (se permite la introducir el valor de ambas maneras)
        if (!empty($this->data[$this->name]['geolocalizacion'])) {
            $g = explode(',', $this->data[$this->name]['geolocalizacion']);
            $this->data[$this->name]['latitud'] = $g[0];
            $this->data[$this->name]['longitud'] = $g[0];
        } elseif (!empty($this->data[$this->name]['latitud']) && !empty($this->data[$this->name]['longitud'])) {
            $this->data[$this->name]['geolocalizacion'] = $this->data[$this->name]['latitud'] . ',' . $this->data[$this->name]['longitud'];
        }

        //Quitamos información de alquiler en caso de que no sea un inmueble de alquiler
        if (!empty($this->data[$this->name]['id_gestion']) && !in_array((int) $this->data[$this->name]['id_gestion'], Configure::read('Inmueble.gestionesAlquiler')) && empty($this->data[$this->name]['precio_alquiler'])) {
            $this->data[$this->name]['alquiler'] = null;
        }
    }

    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->getInmuebleSeo($entidad), 'string'),
                    ), array($this->name . '.id' => $this->id));
        }
    }

    private function getVars($entidad) {
        //Estado
        if (empty($this->estado) && !empty($entidad[$this->name]['inmueble_estado_id'])) {
            $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) && !empty($entidad[$this->name]['id_gestion'])) {
            $elementos = new InmuebleGestion();
            $elemento = $elementos->findById($entidad[$this->name]['id_gestion']);

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

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

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

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

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

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

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

        //Zona
        if (empty($this->zona) && !empty($entidad[$this->name]['zona_id'])) {
            $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 .= Inflector::singularize($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'])) {
            if (empty($entidad[$this->name]['alquiler'])) {
                $entidad[$this->name]['alquiler'] = 'MES';
            }
            $alquiler = Configure::read('Inmueble.alquileres');
            $out .= ' por ' . number_format($entidad[$this->name]['precio_alquiler'], 0, ',', '.') . ' €/' . $alquiler[$entidad[$this->name]['alquiler']];
        } elseif (!empty($entidad[$this->name]['precio'])) {
            $out .= ' por ' . number_format($entidad[$this->name]['precio'], 0, ',', '.') . ' €';
        }

        return $out;
    }

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

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

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

        return $out;
    }


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

        //Tipo de inmueble
        if (!empty($this->tipo)) {
            $out .= Inflector::singularize($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']}";
        }

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

    public function beforeFind($query = array()) {
        //Comprobamos si existe el array de condiciones...
        if (!is_array($query['conditions'])) {
            $query['conditions'] = array();
        }

        if (!array_key_exists($this->name . '.borrado', $query['conditions']) && !array_key_exists('borrado', $query['conditions'])) {
            $query['conditions'][$this->name . '.borrado'] = false;
        }

        return $query;
    }

}
© 2026 GrazzMean