shell bypass 403
<?
App::uses('Provincia', 'Model');
App::uses('Localidad', 'Model');
class Instalacion extends AppModel {
public $validate = array(
'nombre' => array(
'required' => array(
'rule' => 'notEmpty',
'message' => 'Nombre requerido'
),
),
'telefono' => array(
'required' => array(
'rule' => 'notEmpty',
'message' => 'Teléfono requerido'
),
'min_length' => array(
'rule' => array('minLength', '6'),
'message' => 'El teléfono ha de tener un mínimo 6 dígitos',
)
),
'direccion' => array(
'required' => array(
'rule' => 'notEmpty',
'message' => 'Dirección requerida'
),
),
'cp' => array(
'required' => array(
'rule' => 'notEmpty',
'message' => 'Código postal requerido'
),
),
'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'
)
),
);
public function checkExist($check) {
$elemento = null;
$campo = key($check);
switch ($campo) {
case 'provincia_id':
$elementos = new Provincia();
$elemento = $elementos->findById($this->data[$this->name][$campo]);
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]);
}
break;
}
if (empty($elemento)) {
return false; //error
}
return true; //ok
}
public function beforeSave($options = array()) {
parent::beforeSave($options);
//Provincia nombre
if (!empty($this->data[$this->alias]['provincia_id'])) {
$provincias = new Provincia();
$provincia = $provincias->findById($this->data[$this->alias]['provincia_id']);
$this->data[$this->alias]['provincia_nombre'] = $provincia['Provincia']['nombre'];
}
//Localidad nombre
if (!empty($this->data[$this->alias]['localidad_id'])) {
$localidades = new Localidad();
$localidad = $localidades->findById($this->data[$this->alias]['localidad_id']);
$this->data[$this->alias]['localidad_nombre'] = $localidad['Localidad']['nombre'];
}
}
public function afterSave($created, $options = array()) {
parent::afterSave($created, $options);
//Orden
if ($created) {
$ultima = $this->find('first', array('order' => array($this->name . '.orden' => 'DESC')));
if (!empty($ultima)) {
$orden = (int) $ultima[$this->name]['orden'] + 1;
} else {
$orden = 1;
}
$this->updateAll(array('orden' => $orden), array($this->name . '.id' => $this->id));
}
}
public function afterDelete() {
parent::afterDelete();
$this->reordenarEntidades();
}
}