shell bypass 403
<?
App::uses('Controller', 'Controller');
App::uses('Folder', 'Utility');
App::uses('File', 'Utility');
App::uses('HtmlHelper', 'View/Helper');
App::uses('Xml', 'Utility');
class ImportacionUrbanizaController extends Controller {
private $nombreAgencia = 'Barrio';
private $xml = 'http://repositorio.urbaniza.com/export/37_exp_1.xml';
private $debug = null;
public function beforeFilter() {
parent::beforeFilter();
ini_set('memory_limit', '-1');
ini_set('max_execution_time', 0);
//Carga de modelos utilizados en importación
array_push($this->uses, 'Provincia', 'Localidad', 'Zona', 'InmuebleTipo', 'InmuebleGestion', 'InmuebleEstado', 'Mapeo', 'Inmueble', 'InmuebleGaleria', 'Config');
}
public function update() {
echo 'Proceso de importación de Urbaniza iniciado';
//Comprobamos si hay algun proceso de importacion que se haya quedado a medias
$xmlActualizando = $this->Config->findById('xml_actualizando');
$xmlFechaActualizacion = $this->Config->findById('xml_fecha_actualizacion');
$xmlFechaActualizacionTime = strtotime($xmlFechaActualizacion['Config']['valor']);
// if ((bool) $xmlActualizando['Config']['valor']) {
// echo '<br />El proceso de actualización está pendiente de finalizar.';
// if (!empty($xmlFechaActualizacionTime) && $xmlFechaActualizacionTime < (time() - 36 * 60 * 60 )) {
// echo '<br />El proceso de actualización lleva más de 36h desde su última actualización.';
// }
// die;
// }
// if (!empty($xmlFechaActualizacionTime)) {
// if ($xmlFechaActualizacionTime < (time() - 36 * 60 * 60 )) {
// echo '<br />El proceso de actualización lleva más de 36h sin actualizarse.';
// } elseif ($xmlFechaActualizacionTime > (time() - 23 * 60 * 60 )) {
// echo '<br />El proceso de actualización se realizó hace menos de 24h.';
// die;
// }
// }
$db = $this->Config->getDataSource();
$this->Config->updateAll(array('valor' => $db->value(1, 'string')), array('Config.id' => 'xml_actualizando'));
//Eliminamos los ficheros XML con más de 1 semana de antigüedad
$now = time();
$path = 'files' . DS . 'import';
$dir = new Folder(WWW_ROOT . $path);
foreach ($dir->read(true, array('*.xml')) as $k => $v) {
if (!empty($v)) {
foreach ($v as $vv) {
$f = WWW_ROOT . $path . DS . $vv;
if ($now - filemtime($f) >= 60 * 60 * 24 * 7) {
$f = new File($f);
$f->delete();
}
}
}
}
echo '<br /><br />Eliminados ficheros con más de 1 semana de antigüedad.';
//Comenzamos con la obtención de los ficheros XML para la importación
echo '<br /><br />Iniciado obtención de los ficheros XML para la actualización.';
//Preparamos la información de los XML para obtener los ficheros
$this->prepareXml();
$xmlImport = array();
foreach ($this->xml as $xmlUrl => $xmlData) {
//Feed XML
$file = str_replace('.xml', '.' . date('YmdHis') . '.xml', $xmlData['name']);
$sourcefile = $xmlUrl;
@mkdir(WWW_ROOT . $path, 0777, true);
if (file_put_contents(WWW_ROOT . $path . DS . $file, @file_get_contents($sourcefile)) === false) {
echo '<br /><br />Se ha producido un error al procesar el archivo ' . WWW_ROOT . $path . DS . $file . ', comprobar la URL de la fuente de datos.';
return false;
}
//Chequeamos que el fichero no esté vacío
if (intval(@filesize(WWW_ROOT . $path . DS . $file)) == 0) {
echo '<br /><br />El archivo importado ' . WWW_ROOT . $path . DS . $file . ' de la fuente de datos está vacío.';
return false;
}
//Comprobamos que al menos tenemos elementos/nodos de inmueble en el archivo
$xmlCheck = new XMLReader();
$xmlCheck->open(WWW_ROOT . $path . DS . $file);
$xmlError = true;
while (@$xmlCheck->read()) {
if ($xmlCheck->localName == 'inmueble' && $xmlCheck->nodeType == XMLReader::ELEMENT) { //Si hay al menos un elemento no continuamos comprobando
$xmlError = false;
break;
}
}
if ($xmlError) {
echo '<br /><br />No hay información de inmuebles en el archivo ' . WWW_ROOT . $path . DS . $file . '. Comprobar la fuente de datos.';
} else {
$xmlImport[$xmlUrl] = $xmlData;
$xmlImport[$xmlUrl]['file'] = $file;
//"Desactivamos" todos los inmuebles de la cartera del XML
$this->Inmueble->updateAll(array('borrado' => 1), array('Inmueble.origen_xml' => $xmlData['name']));
}
}
//Guardamos en base de datos información para realizar la importación
$this->Config->updateAll(array('valor' => $db->value(serialize($xmlImport), 'string')), array('Config.id' => 'xml_import'));
echo '<br /><br />Ficheros XML descargados y para su importación. Total de ficheros: ' . count($xmlImport);
die;
}
public function updateInmuebles() {
//Obtenemos los datos de los XML ha procesar
$this->getXmlImport();
//Importamos los inmuebles
$this->getInmuebles();
die;
}
public function updateInmueblesGalerias() {
//Obtenemos los datos de los XML ha procesar
$this->getXmlImport();
//Importamos las de los inmuebles
$this->getInmueblesGalerias();
$db = $this->Config->getDataSource();
$this->Config->updateAll(array('valor' => $db->value(0, 'string')), array('Config.id' => 'xml_actualizando'));
$this->Config->updateAll(array('valor' => $db->value(date('Y-m-d H:i:s'), 'string')), array('Config.id' => 'xml_fecha_actualizacion'));
die;
}
private function getInmuebles() {
/* Datos comunes para todas las importaciones (seo, busqueda, titulos,...) */
$this->tiposTxt = $this->InmuebleTipo->find('list', array('fields' => array('id', 'nombre')));
$this->estadosTxt = $this->InmuebleEstado->find('list', array('fields' => array('id', 'nombre')));
$this->gestionesTxt = $this->InmuebleGestion->find('list', array('fields' => array('id', 'nombre')));
$this->provinciasTxt = $this->Provincia->find('list', array('fields' => array('id', 'nombre')));
$this->localidadesTxt = $this->Localidad->find('list', array('fields' => array('id', 'nombre')));
$this->zonasTxt = $this->Zona->find('list', array('fields' => array('id', 'nombre')));
$this->provincias = $this->Mapeo->find('list', array('fields' => array('dato', 'tabla_id'), 'conditions' => array('tabla' => 'provincias')));
$this->localidades = $this->Mapeo->find('list', array('fields' => array('dato', 'tabla_id'), 'conditions' => array('tabla' => 'localidades')));
$this->zonas = $this->Mapeo->find('list', array('fields' => array('dato', 'tabla_id'), 'conditions' => array('tabla' => 'zonas')));
$this->gestiones = $this->InmuebleGestion->find('list', array('fields' => array('nombre', 'id')));
$this->tipos = $this->Mapeo->find('list', array('fields' => array('dato', 'tabla_id'), 'conditions' => array('tabla' => 'inmuebles_tipos')));
$this->estados = $this->Mapeo->find('list', array('fields' => array('dato', 'tabla_id'), 'conditions' => array('tabla' => 'inmuebles_estados')));
$this->eficiencias = Configure::read('Inmueble.eficiencias');
$this->tipos_mensualidad = Configure::read('Inmueble.alquileres');
$inmuebles = $this->Inmueble->find('list', array('fields' => array('id', 'origen_inmueble_id_gestion'), 'conditions' => array('borrado' => array(0, 1))));
$gestionesAlquiler = Configure::read('Inmueble.gestionesAlquiler');
$gestionesUrbaniza = Configure::read('Mapeo.gestionesUrbaniza');
$referenciasUnicas = array(); //array con las referencias únicas de cada inmueble para evitar duplicidad
foreach ($this->xmlImport as $xmlUrl => $xmlData) {
$path = 'files' . DS . 'import';
$file = $xmlData['file'];
$xml = Xml::toArray(Xml::build(WWW_ROOT . $path . DS . $file));
if (!empty($xml) && !empty($xml['inmuebles']) && !empty($xml['inmuebles']['inmueble'])) {
foreach ($xml['inmuebles']['inmueble'] as $inmueble) {
$referenciaUnica = (string) $inmueble['referencia_unica'];
if (!in_array($referenciaUnica, $referenciasUnicas)) {
//Gestiones del inmueble
$gestiones = array();
foreach ($inmueble['gestiones'] as $g) {
if (!array_key_exists(0, $g)) {
$g = array($g);
}
foreach ($g as $gg) {
if (array_key_exists('tipo', $gg) && !empty($gg['tipo']) && array_key_exists('precio', $gg) && !empty($gg['precio'])) {
$gestiones[] = array(
'tipo' => (string) $gg['tipo'],
'precio' => intval(trim(str_replace('.', null, (string) $gg['precio']))),
);
}
}
}
//Campos minimos requeridos (mapeados)
$idProvincia = $this->checkProvincia(trim((string) $inmueble['provincia']));
$idPoblacion = $this->checkPoblacion(trim((string) $inmueble['poblacion']) . ":" . trim((string) $inmueble['provincia']), $idProvincia);
$idZona = $this->checkZona(trim((string) $inmueble['zona']) . ":" . trim((string) $inmueble['poblacion']) . ":" . trim((string) $inmueble['provincia']), $idPoblacion);
$idTipo = $this->checkTipo(trim((string) $inmueble['tipo']));
$idEstado = $this->checkEstado(trim((string) $inmueble['estado_vivienda']));
if ($idProvincia && $idPoblacion && $idTipo && !empty($gestiones)) {
//Campos
$referencia = (string) $inmueble['referencia_anunciante'];
$descripcion = (string) $inmueble['descripcion'];
$latitud = (string) $inmueble['latitud'];
$longitud = (string) $inmueble['longitud'];
$geolocalizacion = ((!empty($latitud) && !empty($longitud)) ? $latitud . ',' . $longitud : null);
$certificado = (string) $inmueble['eficiencia_energetica_tipo'];
$habitaciones = intval((string) $inmueble['n_habitaciones']);
$banos = intval((string) $inmueble['n_banos']);
$aseos = intval((string) $inmueble['n_aseos']);
$m2utiles = intval(trim((string) $inmueble['m2_utiles']));
$m2cons = intval(trim((string) $inmueble['m2_construidos']));
$m2sup = intval(trim((string) $inmueble['m2_terreno']));
$aire_acondicionado = intval(trim((string) $inmueble['a_acondicionado_01'])); //extras
$ascensor = intval(trim((string) $inmueble['ascensor_01']));
$calefaccion = intval(trim((string) $inmueble['calefaccion_01']));
$garaje = intval(trim((string) $inmueble['garaje_01']));
$jardin = intval(trim((string) $inmueble['jardin_01']));
$piscina = intval(trim((string) $inmueble['piscina_01']));
$terraza = intval(trim((string) $inmueble['terraza_01']));
$trastero = intval(trim((string) $inmueble['trastero_01']));
$banco = intval(trim((string) $inmueble['piso_banco_01']));
$portal = (array_key_exists('nombre_agencia', $inmueble) && !empty($inmueble['nombre_agencia']) && trim((string) $inmueble['nombre_agencia']) == $this->nombreAgencia) ? 1 : 0;
@$dataOrig = array(
'referencia' => $referencia,
'inmueble_tipo_id' => ($idTipo ? $idTipo : null),
'inmueble_estado_id' => ($idEstado ? $idEstado : null),
'provincia_id' => ($idProvincia ? $idProvincia : null),
'localidad_id' => ($idPoblacion ? $idPoblacion : null),
'zona_id' => ($idZona ? $idZona : null),
'geolocalizacion' => $geolocalizacion,
'latitud' => $latitud,
'longitud' => $longitud,
'texto' => $descripcion,
'eficiencia_energetica' => $certificado,
'num_habitaciones' => $habitaciones,
'num_banos' => $banos,
'num_aseos' => $aseos,
'superficie_parcela' => $m2sup,
'superficie_construida' => $m2cons,
'superficie_util' => $m2utiles,
'aire_acondicionado' => $aire_acondicionado,
'ascensor' => $ascensor,
'calefaccion' => $calefaccion,
'garaje' => $garaje,
'jardin' => $jardin,
'piscina' => $piscina,
'terraza' => $terraza,
'trastero' => $trastero,
'banco' => $banco,
'portal' => $portal,
'publicado' => 1,
'importado' => 1,
'borrado' => 0,
);
//Creamos un inmueble por cada gestión del mismo
foreach ($gestiones as $gestion) {
//Comprobamos que existe la gestión
$idGestion = (array_key_exists($gestion['tipo'], $gestionesUrbaniza) ? $gestionesUrbaniza[$gestion['tipo']] : null);
if (!empty($idGestion)) {
$id = false;
$update = false;
$codOfer = $referenciaUnica . '_' . $idGestion;
if (!empty($inmuebles)) {
$id = array_search($codOfer, $inmuebles);
}
if ($id !== false) {
$update = true;
}
//Creamos objeto para guardar/actualizar registro del inmueble
$registro = $this->Inmueble;
$registro->create();
//Generamos campos dinámicos extra para los callbacks del modelo
if (!empty($idProvincia) && array_key_exists($idProvincia, $this->provinciasTxt)) { //provincia
@$registro->provincia['Provincia']['nombre'] = $this->provinciasTxt[$idProvincia];
}
if (!empty($idPoblacion) && array_key_exists($idPoblacion, $this->localidadesTxt)) { //localidad
@$registro->localidad['Localidad']['nombre'] = $this->localidadesTxt[$idPoblacion];
}
if (!empty($idZona) && array_key_exists($idZona, $this->localidadesTxt)) { //zona
@$registro->zona['Zona']['nombre'] = $this->localidadesTxt[$idZona];
}
if (!empty($idTipo) && array_key_exists($idTipo, $this->tiposTxt)) { //tipo de gestión
@$registro->tipo['InmuebleTipo']['nombre'] = $this->tiposTxt[$idTipo];
}
if (!empty($idEstado) && array_key_exists($idEstado, $this->estadosTxt)) { //estado
@$registro->estado['InmuebleEstado']['nombre'] = $this->estadosTxt[$idEstado];
}
if (!empty($idGestion) && array_key_exists($idGestion, $this->gestionesTxt)) { //tipo de gestión
@$registro->gestion['InmuebleGestion']['id'] = $idGestion;
@$registro->gestion['InmuebleGestion']['nombre'] = $this->gestionesTxt[$idGestion];
}
//Datos finales del inmueble
$data = $dataOrig;
$data['origen_xml'] = $xmlData['name'];
$data['origen_inmueble_id'] = $referenciaUnica;
$data['origen_inmueble_id_gestion'] = $codOfer;
$data['inmueble_gestion_id'] = $idGestion;
//Alquiler vs Venta
if (in_array($idGestion, $gestionesAlquiler)) {
$data['precio_alquiler'] = $gestion['precio'];
$data['alquiler'] = 'MES';
} else {
$data['precio'] = $gestion['precio'];
}
if ($update) {
$registro->id = $id;
}
//Creamos/actualizamos el inmueble
if (@$registro->save($data, array('fieldList' => array_keys($data), 'validate' => false))) {
//Añadimos la referencia al array de referencias para evitar que se repitan los inmuebles en diferentes ficheros
$referenciasUnicas[] = $referenciaUnica;
}
}
}
}
}
}
}
}
}
private function getInmueblesGalerias() {
try {
//Recorremos cada uno de los ficheros XML importando su galería
foreach ($this->xmlImport as $xmlUrl => $xmlData) {
//Obtenemos los IDs de inmuebles por cada referencia única
$origenInmueblesIDs = $this->Inmueble->find('list', array('fields' => array('id', 'id', 'origen_inmueble_id'), 'conditions' => array('origen_xml' => $xmlData['name'])));
$inmueblesIDs = $this->Inmueble->find('list', array('fields' => array('id', 'id'), 'conditions' => array('origen_xml' => $xmlData['name'])));
//Obtenemos un array con la imagen y el ID de las galerías de los inmuebles del XML para actualizar poder registros
$gallery = $this->InmuebleGaleria->find('list', array('fields' => array('inmueble_id', 'id', 'imagen_original'), 'conditions' => array('InmuebleGaleria.inmueble_id' => $inmueblesIDs, 'video_source' => null)));
if (!empty($origenInmueblesIDs)) {
$path = 'files' . DS . 'import';
$file = $xmlData['file'];
$xml = Xml::toArray(Xml::build(WWW_ROOT . $path . DS . $file));
if (!empty($xml) && !empty($xml['inmuebles']) && !empty($xml['inmuebles']['inmueble'])) {
foreach ($xml['inmuebles']['inmueble'] as $inmueble) {
//Comprobamos que el inmueble se guardó correctamente en base de datos
if (array_key_exists($inmueble['referencia_unica'], $origenInmueblesIDs)) {
//Guardamos la galería de imágenes por cada inmueble
foreach ($origenInmueblesIDs[$inmueble['referencia_unica']] as $inmuebleID) {
$inmuebleID = (int) $inmuebleID;
$imagenes = false;
if (array_key_exists('fotos', $inmueble) && !empty($inmueble['fotos'])) {
foreach ($inmueble['fotos'] as $fs) {
if (is_array($fs) && !empty($fs)) {
foreach ($fs as $f) {
//Comprobamos que la imagen solicitada es realmente una imagen
if (!empty($f)) {
$string = '';
//$imagenes[] = (string) $f;
if(!empty($f['url_foto'])) {
$imagenes[] = $f['url_foto'];
}
}
}
}
}
}
if (!empty($imagenes)) {
$newGallery = false;
$registroFoto = $this->InmuebleGaleria;
foreach ($imagenes as $indiceImagen => $imagen) {
$registroFoto->create();
$imageID = false;
if (array_key_exists($imagen, $gallery) && !empty($gallery[$imagen]) && array_key_exists($inmuebleID, $gallery[$imagen]) && !empty($gallery[$imagen][$inmuebleID])) {
$imageID = $gallery[$imagen][$inmuebleID];
}
if ($imageID !== false) {
$registroFoto->id = $imageID;
$newGallery[] = $registroFoto->id; //Guardamos los registros de la galeria, para borrar al final lo que sobre
$dataImage = array('orden' => $indiceImagen + 1);
$registroFoto->saveField('orden', $indiceImagen + 1, array('callbacks' => false, 'validate' => false));
} else {
// Adecuamos el nombre de la imagen y la extension ( y datos a guardar)
$path = "/blobs/inmueble/{$inmuebleID}/galeria/";
$tempImagen = explode("/", $imagen);
$file = @array_pop($tempImagen);
$tempFile = explode(".", $file);
$file_name = @array_shift($tempFile);
$file_extension = strtolower(array_pop($tempFile));
$file_extension = str_replace('jpeg', 'jpg', $file_extension);
$file = $path . $file_name . "." . $file_extension;
$dataImage = array('inmueble_id' => $inmuebleID, 'imagen' => $file, 'orden' => $indiceImagen + 1, 'imagen_original' => $imagen);
//Obtenemos el mime
$size = @getimagesize($imagen);
if (!empty($size)) {
if (array_key_exists('mime', $size) && !empty($size['mime'])) {
$dataImage['imagen_mime'] = $size['mime'];
}
}
CakeLog::write('error', "Ruta importacion" . WWW_ROOT . $path, 'payment');
//Guardamos imagen
if ($registroFoto->save($dataImage, array('callbacks' => false, 'validate' => false))) { // Evitamos las validaciones y callbacks del modelo
$newGallery[] = $registroFoto->id; //Guardamos los registros de la galeria, para borrar al final lo que sobre
if ($imageID === false) { //Si es nueva
$registroFoto->set('imagen', $path . $registroFoto->id . "." . $file_extension);
$registroFoto->set('imagen_name', $registroFoto->id . "." . $file_extension);
//Actualizamos nombre de la imagen con el ID y guardamos el archivo en local
if ($registroFoto->save(null, array('validate' => false, 'callbacks' => false))) {
// Actualizamos el campo 'imagen_dn' del anuncio
if ($indiceImagen == 0) {
$db = $this->Inmueble->getDataSource();
$this->Inmueble->updateAll(array('imagen_dn' => $db->value($path . $registroFoto->id . "." . $file_extension, 'string')), array('Inmueble.id' => $inmuebleID));
}
if (!is_dir(WWW_ROOT . $path)) {
mkdir(WWW_ROOT . $path, 0777, true);
}
@file_put_contents(WWW_ROOT . $path . $registroFoto->id . "." . $file_extension, @file_get_contents($imagen));
//@file_put_contents(WWW_ROOT . $file, @file_get_contents($imagen));
}
}
}
}
}
}
//Borramos los archivos que sobren
if (!empty($newGallery)) {
$registroFoto->deleteAll(array('inmueble_id' => $inmuebleID, 'video_source' => null, 'NOT' => array('InmuebleGaleria.id' => $newGallery)), false, true);
} else {
$registroFoto->deleteAll(array('inmueble_id' => $inmuebleID, 'video_source' => null), false, true);
}
}
}
}
}
}
}
} catch(Exception $e) {
CakeLog::write('error', "Excepción: " . $e->getMessage(), '');
CakeLog::write('error', "Excepción: " . $e->getLine(), '');
}
}
private function checkProvincia($provincia = null) {
if (empty($provincia)) {
return null;
}
if (!array_key_exists($provincia, $this->provincias)) { //Si es un dato nuevo lo guardamos
$prov = $this->Provincia->find('first', array('fields' => array('id'), 'conditions' => array('nombre LIKE' => $provincia)));
$tablaID = null;
if (!empty($prov)) {
$tablaID = $prov['Provincia']['id'];
} else {
$this->debug['provincias'] = true;
}
$this->Mapeo->create();
$this->Mapeo->save(array('tabla' => 'provincias', 'tabla_id' => $tablaID, 'dato' => $provincia, 'extra' => serialize(array('provincia' => $provincia))));
$this->provincias[$provincia] = $tablaID;
return $tablaID;
} else {
return $this->provincias[$provincia];
}
}
private function checkPoblacion($poblacion = null, $provincia = null) {
if (empty($provincia) || empty($provincia)) {
return null;
}
if (!array_key_exists($poblacion, $this->localidades)) { //Si es un dato nuevo lo guardamos y tratamos de mapearlo automáticamente
$temp = explode(":", $poblacion); //$poblacion en formato POBLACION:PROVINCIA
$loc = $this->Localidad->find('first', array('fields' => array('id'), 'conditions' => array('nombre LIKE' => $temp[0], 'provincia_id' => $provincia)));
$tablaID = null;
if (!empty($loc)) {
$tablaID = $loc['Localidad']['id'];
} else {
$this->debug['localidades'] = true;
}
$this->Mapeo->create();
$this->Mapeo->save(array('tabla' => 'localidades', 'tabla_id' => $tablaID, 'dato' => $poblacion, 'extra' => serialize(array('provincia' => $temp[1], 'poblacion' => $temp[0]))));
$this->localidades[$poblacion] = $tablaID;
return $tablaID;
} else {
return $this->localidades[$poblacion];
}
}
private function checkZona($zona = null, $poblacion = null) {
if (empty($zona) || empty($poblacion)) {
return null;
}
if (!array_key_exists($zona, $this->zonas)) { //Si es un dato nuevo lo guardamos y tratamos de mapearlo automáticamente
$temp = explode(":", $zona); //$zona en formato ZONA:POBLACION:PROVINCIA
$zone = $this->Zona->find('first', array('fields' => array('id'), 'conditions' => array('nombre LIKE' => $temp[0], 'localidad_id' => $poblacion)));
$tablaID = null;
if (!empty($zone)) {
$tablaID = $zone['Zona']['id'];
} else {
$this->debug['zonas'] = true;
}
$this->Mapeo->create();
$this->Mapeo->save(array('tabla' => 'zonas', 'tabla_id' => $tablaID, 'dato' => $zona, 'extra' => serialize(array('provincia' => $temp[2], 'poblacion' => $temp[1], 'zona' => $temp[0]))));
$this->zonas[$zona] = $tablaID;
return $tablaID;
} else {
return $this->zonas[$zona];
}
}
private function checkTipo($tipo = null) {
if (empty($tipo)) {
return null;
}
if (!array_key_exists($tipo, $this->tipos)) { //Si es un dato nuevo lo guardamos y tratamos de mapearlo automáticamente
$type = $this->InmuebleTipo->find('first', array('fields' => array('id'), 'conditions' => array('nombre LIKE' => $tipo)));
$tablaID = null;
if (!empty($type)) {
$tablaID = $type['InmuebleTipo']['id'];
} else {
$this->debug['tipologias'] = true;
}
$this->Mapeo->create();
$this->Mapeo->save(array('tabla' => 'inmuebles_tipos', 'tabla_id' => $tablaID, 'dato' => $tipo, 'extra' => serialize(array('tipologia' => $tipo))));
$this->tipos[$tipo] = $tablaID;
return $tablaID;
} else {
return $this->tipos[$tipo];
}
}
private function checkEstado($estado = null) {
if (empty($estado)) {
return null;
}
if (!array_key_exists($estado, $this->estados)) { //Si es un dato nuevo lo guardamos y tratamos de mapearlo automáticamente
$state = $this->InmuebleEstado->find('first', array('fields' => array('id'), 'conditions' => array('nombre LIKE' => $estado)));
$tablaID = null;
if (!empty($state)) {
$tablaID = $state['InmuebleEstado']['id'];
} else {
$this->debug['estados'] = true;
}
$this->Mapeo->create();
$this->Mapeo->save(array('tabla' => 'inmuebles_estados', 'tabla_id' => $tablaID, 'dato' => $estado, 'extra' => serialize(array('estado' => $estado))));
$this->estados[$estado] = $tablaID;
return $tablaID;
} else {
return $this->estados[$estado];
}
}
private function prepareXml() {
//Se permite cargar el array de xmls mediante string
if (!is_array($this->xml)) {
$this->xml = array($this->xml);
}
//Preparamos el array de xmls para trabajar con él
$xml = array();
foreach ($this->xml as $xmlUrl) {
$xml[$xmlUrl] = array('name' => basename($xmlUrl));
}
$this->xml = $xml;
}
private function getXmlImport() {
$xmlImport = $this->Config->findById('xml_import');
$this->xmlImport = unserialize($xmlImport['Config']['valor']);
}
}