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 : ImportacionUrbanizaController.php
<?

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']);
    }

}
© 2026 GrazzMean