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

name : AdminImportacionController.php
<?php

App::uses('AdminController', 'Controller');
App::import('Vendor', 'Inmovilla/apiinmovilla');

class AdminImportacionController extends AdminController {

    public function beforeFilter() {
        parent::beforeFilter();
        array_push($this->uses, 'Provincia', 'Localidad', 'Zona', 'InmuebleTipo', 'InmuebleGestion', 'InmuebleEstado', 'Mapeo', 'Vivienda', 'ViviendaGaleria', 'Fuente');

        $this->set('fuentes', $this->Fuente->find('list', array('fields' => array('id', 'nombre'), 'order' => 'nombre ASC')));
        $this->set('estados', $this->InmuebleEstado->find('list', array('fields' => array('id', 'nombre'), 'order' => 'nombre ASC')));
        $this->set('tipologias', $this->InmuebleTipo->find('list', array('fields' => array('id', 'nombre'), 'order' => 'nombre ASC')));
        $provincies = $this->Provincia->find('list', array('fields' => array('id', 'nombre'), 'order' => array('nombre ASC')));
        $this->set('provincies', $provincies);
        /* PEDIMOS LAS LOCALIDADES AGRUPADAS POR PROVINCIA (array asociativo provincia => array(id,nombre) PARA GENERAR optiongroups en dropdownlist */
        $localidades = $this->Localidad->find('all', array('fields' => array('Localidad.id', 'Localidad.provincia_id', 'Localidad.nombre'), 'order' => array('Localidad.nombre ASC', 'Localidad.provincia_id ASC')));
        $zon = $this->Zona->find('all', array('fields' => array('Zona.id', 'Zona.localidad_id', 'Zona.nombre'), 'conditions' => array('localidad_id >' => 0), 'order' => array('Zona.nombre ASC', 'Zona.localidad_id ASC')));
        $poblaciones = array();
        $zonas = array();
        if ($localidades) {

            foreach ($localidades as $poblacion) {
                $poblaciones[$poblacion['Localidad']['id']] = "{$poblacion['Localidad']['nombre']} ({$provincies[$poblacion['Localidad']['provincia_id']]})";
            }
        }

        if ($zon) {

            foreach ($zon as $zona) {
                $zonas[$zona['Zona']['id']] = "{$zona['Zona']['nombre']}, {$poblaciones[$zona['Zona']['localidad_id']]}";
            }
        }
        $this->set('poblaciones', $poblaciones);
        $this->set('zonas', $zonas);
    }

    public function home() {

        $console = false;

        if ($this->request->is('get') && isset($this->request->query['action'])) {

            $source = (isset($this->request->query['source']) ? $this->request->query['source'] : 'inmovilla');

            switch ($this->request->query['action']) {

                case 'estados':
                    $this->estados($source);
                    $console = true;
                    break;

                case 'tipos':
                    $this->tipos($source);
                    $console = true;
                    break;

                case 'provincias':
                    $this->provincias($source);
                    $console = true;
                    break;

                case 'poblaciones':
                    $this->localidades($source);
                    $console = true;
                    break;

                case 'zonas':
                    $this->zonas();
                    $console = true;
                    break;

                case 'inmuebles':
                    $this->inmuebles($source);
                    $console = true;
                    break;
            }
        }

        $filtro = array(
            'dato' => false,
            'tabla' => Configure::read('Mapeo.tablas'),
            'fuente_id' => false
        );

        $this->set('filtro', $filtro);

        // $this->getListado('Mapeo', 20, array('Mapeo.id' => 'DESC'));
        $this->getListado('Mapeo', 20, array('Mapeo.tabla_id' => 'DESC'), $this->getConditionsFiltro($filtro, array(), 'Mapeo'));
        $this->set('console', $console);
        $this->renderView();
    }

    public function edit() {
        $this->Mapeo->id = $this->params->id;

        if (!$this->Mapeo->exists()) {
            throw new NotFoundException('Mapeo no encontrado');
        }

        $mapeo = $this->Mapeo->read(null, $this->Mapeo->id);

        if ($this->request->is('put') || $this->request->is('post')) {

            $this->Mapeo->create();
            $this->Mapeo->id = $this->params->id;

            if ($this->Mapeo->saveField('tabla_id', $this->request->data['Mapeo']['tabla_id'])) {
                $this->Session->setFlash('Mapeo actualizado con éxito.' . $this->btnClose, 'default', array('class' => 'alert alert-success'));
                $this->redirect(array('controller' => 'admin_importacion', 'action' => 'edit', 'id' => $this->Mapeo->id, 'tab' => $this->params->tab));
            } else {
                $this->errores = $this->Mapeo->validationErrors;
            }
        } else {
            $this->request->data = $mapeo;
        }


        $this->set('mapeo', $mapeo);

        $this->renderView();
    }

    private function tipos($source = 'inmovilla') {

        global $tipos;


        // array_push($this->uses,'InmuebleTipo','Mapeo');

        $totalRegistrosFuente = 0;

        if ($source == 'inmovilla') {

            Procesos('tipos', 1, "", "", "tipo asc");
            PedirDatos(972, "fern2sHy72", 1);
        } else {
            $xml = new XMLReader();
            $xml->open(WWW_ROOT . 'files/afilia/inmuebles_asociacion.xml');

            $rootElement = 'inmuebles';
            $element = 'inmueble';

            $tipos_inmueble = array();

            while ($xml->read()) {
                if ($xml->localName == $element && $xml->nodeType == XMLReader::ELEMENT) {

                    $inmueble = simplexml_load_string($xml->readOuterXml(), 'SimpleXMLElement', LIBXML_NOCDATA);
                    if (!in_array((string) $inmueble->tipo, $tipos_inmueble) && trim((string) $inmueble->tipo) != '') {
                        $temp[] = array('tipo' => (string) $inmueble->tipo);
                        $tipos_inmueble[] = (string) $inmueble->tipo;
                    }
                }
            }

            $tipos = array_merge(array(array('elementos' => count($tipos_inmueble))), $temp);
        }


        $totalRegistrosFuente = $tipos[0]["elementos"];

        if ($totalRegistrosFuente) { // Si hay datos de la fuente 
            //Conseguimos los elementos en mapeo actuales para la fuente de datos
            $tiposEnMapeo = $this->Mapeo->find('list', array('fields' => array('id', 'dato'), 'conditions' => array('tabla' => 'inmuebles_tipos', 'origen_datos' => $source)));

            //Pasamos a mayúsculas por posible diferencia de ortografia en los datos
            if ($tiposEnMapeo) {
                foreach ($tiposEnMapeo as $id => $tipoEnMapeo) {
                    $tiposEnMapeo[$id] = mb_strtoupper($tipoEnMapeo, 'UTF-8');
                }
            }

            $datosNuevoMapeo = array();
            $procesados = 0;
            $mapeados = 0;

            //Comprobamos los elementos de la fuente de datos y eliminamos los que no sean necesarios
            for ($i = 1; $i <= $totalRegistrosFuente; $i++) {
                $key = array_search(mb_strtoupper(trim($tipos[$i]['tipo']), 'UTF-8'), $tiposEnMapeo);

                if ($key === FALSE) { //Si es un dato nuevo lo guardamos
                    $this->Mapeo->create();
                    $this->Mapeo->save(array('tabla' => 'inmuebles_tipos', 'origen_datos' => $source, 'dato' => trim($tipos[$i]['tipo']), 'extra' => serialize($tipos[$i])));
                    $datosNuevoMapeo[$this->Mapeo->id] = trim($tipos[$i]['tipo']);
                    $procesados++;
                } else {
                    unset($tipos[$i]);
                }
            }
        }

        if (!empty($datosNuevoMapeo)) {

            //Tomamos los valores definidos en base de datos
            $types = $this->InmuebleTipo->find('list', array('fields' => array('id', 'nombre'), 'conditions' => array('tipo_id >' => 0)));

            if ($types) {

                foreach ($types as $id => $type) {
                    $types[$id] = mb_strtoupper($type, 'UTF-8');
                }
            }


            //Comprobamos si puede hacerse un mapeo automático
            foreach ($datosNuevoMapeo as $id => $tipo) {

                $key = array_search(mb_strtoupper($tipo, 'UTF-8'), $types);

                if ($key !== FALSE) {
                    $this->Mapeo->create();
                    $this->Mapeo->id = $id;
                    $this->Mapeo->saveField('tabla_id', $key);
                    $mapeados++;
                } else {
                    unset($datosNuevoMapeo[$id]);
                }
            }
        }

        $this->set('totalRegistros', $totalRegistrosFuente);
        $this->set('datosNuevoMapeo', $datosNuevoMapeo);
        $this->set('procesados', $procesados);
        $this->set('mapeados', $mapeados);
        $this->set('source', $source);
    }

    private function estados($source = 'inmovilla') {

        global $tipos_conservacion;

        // array_push($this->uses,'InmuebleTipo','Mapeo');

        $totalRegistrosFuente = 0;

        if ($source == 'inmovilla') {

            Procesos('tipos_conservacion', 1, 100, "", "");
            PedirDatos(972, "fern2sHy72", 1);
        } else {

            $xml = new XMLReader();
            $xml->open(WWW_ROOT . 'files/afilia/inmuebles_asociacion.xml');

            $rootElement = 'inmuebles';
            $element = 'inmueble';

            $estados_inmueble = array();

            while ($xml->read()) {
                if ($xml->localName == $element && $xml->nodeType == XMLReader::ELEMENT) {

                    $inmueble = simplexml_load_string($xml->readOuterXml(), 'SimpleXMLElement', LIBXML_NOCDATA);
                    if (!in_array((string) $inmueble->estado_vivienda, $estados_inmueble) && trim((string) $inmueble->estado_vivienda) != '') {
                        $temp[] = array('conserv' => (string) $inmueble->estado_vivienda);
                        $estados_inmueble[] = (string) $inmueble->estado_vivienda;
                    }
                }
            }

            $tipos_conservacion = array_merge(array(array('total' => count($estados_inmueble))), $temp);
        }


        $totalRegistrosFuente = $tipos_conservacion[0]["total"];

        if ($totalRegistrosFuente) { // Si hay datos de la fuente 
            //Conseguimos los elementos en mapeo actuales para la fuente de datos
            $estadosEnMapeo = $this->Mapeo->find('list', array('fields' => array('id', 'dato'), 'conditions' => array('tabla' => 'inmuebles_estados', 'origen_datos' => $source)));

            //Pasamos a mayúsculas por posible diferencia de ortografia en los datos
            if ($estadosEnMapeo) {
                foreach ($estadosEnMapeo as $id => $estadoEnMapeo) {
                    $estadosEnMapeo[$id] = mb_strtoupper($estadoEnMapeo, 'UTF-8');
                }
            }

            $datosNuevoMapeo = array();
            $procesados = 0;
            $mapeados = 0;

            //Comprobamos los elementos de la fuente de datos y eliminamos los que no sean necesarios
            for ($i = 1; $i <= $totalRegistrosFuente; $i++) {
                $key = array_search(mb_strtoupper(trim($tipos_conservacion[$i]['conserv']), 'UTF-8'), $estadosEnMapeo);

                if ($key === FALSE) { //Si es un dato nuevo lo guardamos
                    $this->Mapeo->create();
                    $this->Mapeo->save(array('tabla' => 'inmuebles_estados', 'origen_datos' => $source, 'dato' => trim($tipos_conservacion[$i]['conserv']), 'extra' => serialize($tipos_conservacion[$i])));
                    $datosNuevoMapeo[$this->Mapeo->id] = trim($tipos_conservacion[$i]['conserv']);
                    $procesados++;
                } else {
                    unset($tipos_conservacion[$i]);
                }
            }
        }

        if (!empty($datosNuevoMapeo)) {

            //Tomamos los valores definidos en base de datos
            $estados = $this->InmuebleEstado->find('list', array('fields' => array('id', 'nombre')));

            if ($estados) {

                foreach ($estados as $id => $estado) {
                    $estados[$id] = mb_strtoupper($estado, 'UTF-8');
                }
            }


            //Comprobamos si puede hacerse un mapeo automático
            foreach ($datosNuevoMapeo as $id => $estado) {

                $key = array_search(mb_strtoupper($estado, 'UTF-8'), $estados);

                if ($key !== FALSE) {
                    $this->Mapeo->create();
                    $this->Mapeo->id = $id;
                    $this->Mapeo->saveField('tabla_id', $key);
                    $mapeados++;
                } else {
                    unset($datosNuevoMapeo[$id]);
                }
            }
        }

        $this->set('totalRegistros', $totalRegistrosFuente);
        $this->set('datosNuevoMapeo', $datosNuevoMapeo);
        $this->set('procesados', $procesados);
        $this->set('mapeados', $mapeados);
        $this->set('source', $source);
    }

    private function provincias($source = 'inmovilla') {
        global $provincias;
        global $ciudades;

        $totalRegistrosFuente = 0;

        if ($source == 'inmovilla') {

            //Da problemas la peticion y sólo devuelve 100
            Procesos('provincias', 1, "", "", "provincia asc");
            PedirDatos(972, "fern2sHy72", 1);

            // $totalRegistrosFuente = $provincias[0]["elementos"];
            $totalRegistrosFuente = $provincias[0]["elementos"];
            $prov = array();

            for ($i = 1; $i <= $totalRegistrosFuente; $i++) {

                if (!isset($prov[$provincias[$i]['codprov']])) {
                    $prov[$provincias[$i]['codprov']] = $provincias[$i];
                }
            }

            //Utilizamos de manera indirecta la peticion de ciudades para conseguir el resto de provincias
            Procesos('ciudades', 1, "", "", "provincia asc");
            PedirDatos(972, "fern2sHy72", 1);

            $totalRegistrosFuente = $ciudades[0]["total"];

            for ($i = 1; $i <= $totalRegistrosFuente; $i++) {

                if (!isset($prov[$ciudades[$i]['codprov']])) {
                    $prov[$ciudades[$i]['codprov']] = array('codprov' => $ciudades[$i]['codprov'], 'provincia' => $ciudades[$i]['provincia']);
                }
            }
            $provincias = array();
            $provincias = array_merge(array(array('elementos' => count($prov), 'total' => count($prov))), $prov);
        } else {

            $xml = new XMLReader();
            $xml->open(WWW_ROOT . 'files/afilia/inmuebles_asociacion.xml');

            $rootElement = 'inmuebles';
            $element = 'inmueble';

            $prov = array();

            /* Recorremos el xml en busca de todas las zonas */
            $rootElement = 'inmuebles';
            $element = 'inmueble';
            while ($xml->read()) {
                if ($xml->localName == $element && $xml->nodeType == XMLReader::ELEMENT) {

                    $inmueble = simplexml_load_string($xml->readOuterXml(), 'SimpleXMLElement', LIBXML_NOCDATA);

                    if (!in_array((string) $inmueble->provincia, $prov) && trim((string) $inmueble->provincia) != '') {
                        $prov[] = (string) $inmueble->provincia;
                        $temp[] = array('provincia' => (string) $inmueble->provincia, 'pais' => (string) $inmueble->pais);
                    }
                }
            }

            $provincias = array_merge(array(array('elementos' => count($prov))), $temp);
        }

        // debug($provincias);die;
        $totalRegistrosFuente = $provincias[0]["elementos"];

        if ($totalRegistrosFuente) { // Si hay datos de la fuente 
            //Conseguimos los elementos en mapeo actuales para la fuente de datos
            $provinciasEnMapeo = $this->Mapeo->find('list', array('fields' => array('id', 'dato'), 'conditions' => array('tabla' => 'provincias', 'origen_datos' => $source)));

            //Pasamos a mayúsculas por posible diferencia de ortografia en los datos
            if ($provinciasEnMapeo) {
                foreach ($provinciasEnMapeo as $id => $provinciaEnMapeo) {
                    $provinciasEnMapeo[$id] = mb_strtoupper($provinciaEnMapeo, 'UTF-8');
                }
            }

            $datosNuevoMapeo = array();
            $procesados = 0;
            $mapeados = 0;

            //Comprobamos los elementos de la fuente de datos y eliminamos los que no sean necesarios
            for ($i = 1; $i <= $totalRegistrosFuente; $i++) {
                $key = array_search(mb_strtoupper(trim($provincias[$i]['provincia']), 'UTF-8'), $provinciasEnMapeo);

                if ($key === FALSE) { //Si es un dato nuevo lo guardamos
                    $this->Mapeo->create();
                    $this->Mapeo->save(array('tabla' => 'provincias', 'origen_datos' => $source, 'dato' => trim($provincias[$i]['provincia']), 'extra' => serialize($provincias[$i])));
                    $datosNuevoMapeo[$this->Mapeo->id] = trim($provincias[$i]['provincia']);
                    $procesados++;
                } else {
                    unset($provincias[$i]);
                }
            }
        }

        if (!empty($datosNuevoMapeo)) {

            //Tomamos los valores definidos en base de datos
            $states = $this->Provincia->find('list', array('fields' => array('id', 'nombre')));

            if ($states) {

                foreach ($states as $id => $state) {
                    $states[$id] = mb_strtoupper($state, 'UTF-8');
                }
            }


            //Comprobamos si puede hacerse un mapeo automático
            foreach ($datosNuevoMapeo as $id => $provincia) {

                $key = array_search(mb_strtoupper($provincia, 'UTF-8'), $states);

                if ($key !== FALSE) {
                    $this->Mapeo->create();
                    $this->Mapeo->id = $id;
                    $this->Mapeo->saveField('tabla_id', $key);
                    $mapeados++;
                } else {
                    unset($datosNuevoMapeo[$id]);
                }
            }
        }

        $this->set('totalRegistros', $totalRegistrosFuente);
        $this->set('datosNuevoMapeo', $datosNuevoMapeo);
        $this->set('procesados', $procesados);
        $this->set('mapeados', $mapeados);
        $this->set('source', $source);
    }

    private function localidades($source = 'inmovilla') {

        global $ciudades;

        $totalRegistrosFuente = 0;

        if ($source == 'inmovilla') {

            Procesos('ciudades', 1, "", "", "city asc, provincia asc");
            PedirDatos(972, "fern2sHy72", 1);
        } else {

            $xml = new XMLReader();
            $xml->open(WWW_ROOT . 'files/afilia/inmuebles_asociacion.xml');

            $rootElement = 'inmuebles';
            $element = 'inmueble';

            $pob = array();
            $provPob = array();

            /* Recorremos el xml en busca de todas las zonas */
            $rootElement = 'inmuebles';
            $element = 'inmueble';
            while ($xml->read()) {
                if ($xml->localName == $element && $xml->nodeType == XMLReader::ELEMENT) {

                    $inmueble = simplexml_load_string($xml->readOuterXml(), 'SimpleXMLElement', LIBXML_NOCDATA);

                    if (!isset($provPob[(string) $inmueble->provincia])) {
                        $provPob[(string) $inmueble->provincia] = array();
                    }

                    if (!in_array((string) $inmueble->poblacion, $provPob[(string) $inmueble->provincia]) && trim((string) $inmueble->poblacion) != '') {
                        $pob[] = (string) $inmueble->poblacion;
                        $provPob[(string) $inmueble->provincia][] = (string) $inmueble->poblacion;
                        $temp[] = array('provincia' => (string) $inmueble->provincia, 'city' => (string) $inmueble->poblacion);
                    }
                }
            }

            $ciudades = array_merge(array(array('elementos' => count($pob))), $temp);
        }

        $totalRegistrosFuente = $ciudades[0]["elementos"];
        // $this->set('ciudades',$ciudades);
        // debug($ciudades);die;
        // array_push($this->uses,'Localidad','Provincia','Mapeo');

        if ($totalRegistrosFuente) { // Si hay datos de la fuente 
            //Conseguimos los elementos en mapeo actuales para la fuente de datos
            $ciudadesEnMapeo = $this->Mapeo->find('list', array('fields' => array('id', 'dato'), 'conditions' => array('tabla' => 'localidades', 'origen_datos' => $source)));

            //Pasamos a mayúsculas por posible diferencia de ortografia en los datos
            if ($ciudadesEnMapeo) {
                foreach ($ciudadesEnMapeo as $id => $ciudadEnMapeo) {
                    $ciudadesEnMapeo[$id] = mb_strtoupper($ciudadEnMapeo, 'UTF-8');
                }
            }

            //Conseguimos los elementos en mapeo actuales para la fuente de datos
            $provinciasEnMapeo = $this->Mapeo->find('list', array('fields' => array('dato', 'tabla_id'), 'conditions' => array('tabla' => 'provincias', 'origen_datos' => $source)));

            $datosNuevoMapeo = array();
            $procesados = 0;
            $mapeados = 0;

            //Comprobamos los elementos de la fuente de datos y eliminamos los que no sean necesarios
            for ($i = 1; $i <= $totalRegistrosFuente; $i++) {

                $key = array_search(mb_strtoupper(trim($ciudades[$i]['city']) . ":" . trim($ciudades[$i]['provincia']), 'UTF-8'), $ciudadesEnMapeo);

                if ($key === FALSE) { //Si es un dato nuevo lo guardamos (En el caso de poblaciones guardamos tambien la provincia. Ej: [poblacion]:[provincia])
                    $this->Mapeo->create();
                    $this->Mapeo->save(array('tabla' => 'localidades', 'origen_datos' => $source, 'dato' => trim($ciudades[$i]['city']) . ":" . trim($ciudades[$i]['provincia']), 'extra' => serialize($ciudades[$i])));
                    $datosNuevoMapeo[$this->Mapeo->id] = trim($ciudades[$i]['city']) . ":" . trim($ciudades[$i]['provincia']);
                    $procesados++;
                } else {
                    unset($ciudades[$i]);
                }
            }
        }

        if (!empty($datosNuevoMapeo)) {

            //Tomamos los valores definidos en base de datos de poblaciones por provincia
            $cities = $this->Localidad->find('all', array('fields' => array('id', 'provincia_id', 'nombre'), 'order' => array('provincia_id ASC', 'nombre ASC')));
            $provinciasPoblaciones = array();

            if ($cities) {

                foreach ($cities as $city) {
                    $provinciasPoblaciones[$city['Localidad']['provincia_id']][$city['Localidad']['id']] = mb_strtoupper($city['Localidad']['nombre'], 'UTF-8');
                }
            }

            // debug($datosNuevoMapeo);die;
            //Comprobamos si puede hacerse un mapeo automático
            foreach ($datosNuevoMapeo as $id => $localidad) {

                $temp = explode(":", $localidad);
                $city = $temp[0];
                $state = $temp[1];
                $key = FALSE;

                if (array_key_exists($state, $provinciasEnMapeo) && $provinciasEnMapeo[$state] > 0 && is_array($provinciasPoblaciones[$provinciasEnMapeo[$state]])) {
                    $key = array_search(mb_strtoupper($city, 'UTF-8'), $provinciasPoblaciones[$provinciasEnMapeo[$state]]);
                }

                if ($key !== FALSE) {
                    $this->Mapeo->create();
                    $this->Mapeo->id = $id;
                    $this->Mapeo->saveField('tabla_id', $key);
                    $datosNuevoMapeo[$id] = "$city ($state)";
                    $mapeados++;
                } else {
                    unset($datosNuevoMapeo[$id]);
                }
            }
        }

        $this->set('totalRegistros', $totalRegistrosFuente);
        $this->set('datosNuevoMapeo', $datosNuevoMapeo);
        $this->set('procesados', $procesados);
        $this->set('mapeados', $mapeados);
        $this->set('source', $source);
    }

    private function zonas($source = 'inmovilla') {

        global $zonas;
        global $ciudades;

        $totalRegistrosFuente = 0;
        $total = 0;

        // //Volcado de ciudades mapeadas
        // //Conseguimos los elementos en mapeo actuales para la fuente de datos
        // $ciudadesEnMapeo = $this->Mapeo->find('list',array('fields'=>array('tabla_id','extra'),'conditions'=>array('tabla'=>'localidades','origen_datos'=>$source,'tabla_id >'=>0)));
        // $last = FALSE;
        // $zones = array();
        // foreach($ciudadesEnMapeo as $id=>$localidad){
        // $temp = unserialize($localidad);
        // $codCiu = $temp['cod_ciu'];
        // Procesos ('zonas',1,"","key_loca=$codCiu","zone asc");
        // PedirDatos(972,"fern2sHy72",1);
        // $totalRegistrosFuente = 0;
        // if($zonas[0]["elementos"] > 0 && $zonas[1]["cod_zona"] != $last[1]["cod_zona"]){
        // $totalRegistrosFuente = $zonas[0]["elementos"];
        // for($i=1;$i<=$totalRegistrosFuente;$i++){
        // $zones[$id][$zonas[$i]["cod_zona"]] = $zonas[$i];
        // $total++;
        // $this->Zona->create();
        // $this->Zona->save(array('localidad_id'=>$id,'nombre'=>$zonas[$i]["zone"],'seo'=>mb_strtolower(Inflector::slug($zonas[$i]["zone"],"-") ) ) );
        // }
        // $last = $zonas;
        // }
        // }
        // //Volcado de todas las ciudades
        // Procesos ('ciudades',1,9999,"","provincia ASC, city ASC");
        // PedirDatos(972,"fern2sHy72",1);
        // $cities = array();
        // $zones = array();
        // $last = FALSE;
        // if($ciudades[0]["total"] > 0){
        // $cities = $ciudades;
        // $totalRegistrosFuente = $cities[0]["elementos"];
        // $totalRegistrosFuente2 = 0;
        // for($i=1;$i<=$totalRegistrosFuente;$i++){
        // $codCiu = $ciudades[$i]['cod_ciu'];
        // Procesos ('zonas',1,"","key_loca=$codCiu","zone asc");
        // PedirDatos(972,"fern2sHy72",1);
        // echo "<br><br>Ciudad: $codCiu --> {$ciudades[$i]['city']}";
        // if($zonas[0]["total"] > 0 && $zonas[1]["cod_zona"] != $last[1]["cod_zona"]){
        // $totalRegistrosFuente2 = $zonas[0]["total"];
        // for($j=1;$j<=$totalRegistrosFuente2;$j++){
        // echo "<br>Zona: {$zonas[$j]["cod_zona"]} --> {$zonas[$j]["zone"]}";
        // $this->Zona->create();
        // $this->Zona->save(array('nombre'=>$zonas[$j]["zone"],'seo'=>mb_strtolower(Inflector::slug($zonas[$j]["zone"],"-") ),'cod_ciu'=> $codCiu) );
        // $zones[$codCiu][$zonas[$j]["cod_zona"]] = $zonas[$j];
        // $total++;
        // }
        // $last = $zonas;
        // echo "<br>";
        // }
        // }
        // }
        // // Actualizacion de datos
        // //Conseguimos los elementos en mapeo actuales para la fuente de datos
        // $ciudadesEnMapeo = $this->Mapeo->find('list',array('fields'=>array('tabla_id','extra'),'conditions'=>array('tabla'=>'localidades','origen_datos'=>$source,'tabla_id >'=>0)));
        // foreach($ciudadesEnMapeo as $id=>$localidad){
        // $temp = unserialize($localidad);
        // $codCiu = $temp['cod_ciu'];
        // // $this->Zona->create();
        // $this->Zona->updateAll(array('localidad_id'=>$id),array('cod_ciu'=> $codCiu) );
        // }
        // debug($total);
        // debug($zones);
        // $mapeo = $this->Mapeo->find('list',array('fields'=>array('id','extra'),'conditions'=>array('tabla'=>'localidades','origen_datos'=>'inmovilla')));
        // foreach($mapeo as $id=>$extra){
        // $temp = unserialize($extra);
        // $this->Mapeo->updateAll(array('dato_id'=>$temp['cod_ciu'],'dato_padre_id'=>$temp['codprov']),array('id'=> $id) );
        // }

        die;
    }

    private function inmuebles($source = 'inmovilla') {

        ini_set('memory_limit', '-1');
        ini_set('max_execution_time', 0);

        global $paginacion;
        global $fotos;
        global $ficha;
        global $videos;
        global $descripciones;

        $origen_datos = false;
        $debug = '';
        $inicio = time();
        $registros = 50;

        if (preg_match('/^inmovilla/', $source)) {
            $origen_datos = 'inmovilla';
            //TODO Esto habrá que generalizarlo para la inmobiliaria si la fuente de datos es API inmovilla
            define("NUM_AGENCIA", 972); //numagencia
            define("API_KEY", "fern2sHy72");
        } elseif ($source == 'afilia') {
            $origen_datos = $source;
            //TODO Esto habrá que generalizarlo para la inmobiliaria si la fuente de datos es API inmovilla
            define("NUM_AGENCIA", "inmojet.com"); //nombre_agencia
        }

        if (!$origen_datos) {
            $debug .= 'El origen de datos seleccionado no es válido.';
        } else {
            $provincias = $this->Mapeo->find('list', array('fields' => array('dato', 'tabla_id'), 'conditions' => array('origen_datos' => $origen_datos, 'tabla' => 'provincias', 'tabla_id >' => 0)));
            $localidades = $this->Mapeo->find('list', array('fields' => array('dato_id', 'tabla_id'), 'conditions' => array('origen_datos' => $origen_datos, 'tabla' => 'localidades', 'tabla_id >' => 0)));
            $localidades2 = $this->Mapeo->find('list', array('fields' => array('dato', 'dato_id'), 'conditions' => array('origen_datos' => $origen_datos, 'tabla' => 'localidades', 'tabla_id >' => 0)));
            $zonas = $this->Zona->find('list', array('fields' => array('nombre', 'id', 'cod_ciu'), 'conditions' => array('localidad_id >' => 0)));
            $gestiones = $this->InmuebleGestion->find('list', array('fields' => array('nombre', 'id')));
            $tipos = $this->Mapeo->find('list', array('fields' => array('dato', 'tabla_id'), 'conditions' => array('origen_datos' => $origen_datos, 'tabla' => 'inmuebles_tipos', 'tabla_id >' => 0)));
            $eficiencias = Configure::read('Inmueble.eficiencias');
            $inmuebles = $this->Vivienda->find('list', array('fields' => array('id', 'origen_inmueble_id'), 'conditions' => array('web_id' => 1, 'origen_datos' => $origen_datos)));

            if ($source == 'inmovilla') {
                $registros = 50;
                //Petición API  (inicial para conocer el número de elementos totales de la cartera)
                Procesos('paginacion', 1, $registros, "", "cod_ofer DESC");
                PedirDatos(NUM_AGENCIA, API_KEY, 1);
            } elseif ($source == 'inmovilla_xml') {

                // Feed XML
                $xml = new XMLReader();
                $xml->open(WWW_ROOT . 'files/inmovilla/inmojet.xml');

                /* Recorremos el xml en busca de todas las zonas */
                $rootElement = 'propiedades';
                $element = 'propiedad';
                $ii = 1;
                $paginacion = array();
                $paginacion[0]["total"] = 0;

                while ($xml->read()) {
                    if ($xml->localName == $element && $xml->nodeType == XMLReader::ELEMENT) {

                        $inmueble = simplexml_load_string($xml->readOuterXml(), 'SimpleXMLElement', LIBXML_NOCDATA);

                        $referencia = array_shift(explode("/", (string) $inmueble->referencia));
                        $gestion = ((int) $inmueble->precioventa ? ((int) $inmueble->precioalquiler ? 3 : 1) : ((int) $inmueble->precioalquiler ? 2 : null)); //Deducimos la gestión

                        $paginacion[$ii] = array(
                            'cod_ofer' => (string) $inmueble->unico,
                            'numagencia' => (string) $inmueble->numagencia,
                            'ref' => $referencia,
                            'keyacci' => $gestion,
                            'nbtipo' => (string) $inmueble->tipo,
                            'provincia' => (string) $inmueble->provincia,
                            'key_loca' => (isset($localidades2[(string) $inmueble->ciudad . ":" . (string) $inmueble->provincia]) ? $localidades2[(string) $inmueble->ciudad . ":" . (string) $inmueble->provincia] : null),
                            'zona' => (string) $inmueble->zona,
                            'latitud' => (string) $inmueble->latitud,
                            'altitud' => (string) $inmueble->longitud,
                            'precioinmo' => ((int) $inmueble->precioventa > 0 ? (string) $inmueble->precioventa : null),
                            'precioalq' => ((int) $inmueble->precioalquiler > 0 ? (string) $inmueble->precioalquiler : null),
                            'outlet' => null,
                            'descrip' => (string) $inmueble->descripcion,
                            'energialetra' => (string) $inmueble->calificacion_energetica,
                            'habitaciones' => (string) $inmueble->habitaciones,
                            'banyos' => (string) $inmueble->banos,
                            'aseos' => (string) $inmueble->aseos,
                            'm_parcela' => (string) $inmueble->parcela,
                            'm_cons' => (string) $inmueble->superificie,
                            'm_uties' => null,
                            'ascensor' => ((string) $inmueble->ascensor == 'X' ? 1 : 0),
                            'aire_con' => ((string) $inmueble->aire_con == 'X' ? 1 : 0),
                            'calefaccion' => ((string) $inmueble->calefaccion == 'X' ? 1 : 0),
                            'garaje' => ((string) $inmueble->garaje == 'X' ? 1 : 0),
                            'parking' => ((string) $inmueble->parking == 'X' ? 1 : 0),
                            'jardin' => ((string) $inmueble->jardin == 'X' ? 1 : 0),
                            'piscina_com' => ((string) $inmueble->piscina == 'X' ? 1 : 0),
                            'terraza' => ((string) $inmueble->terraza == 'X' ? 1 : 0),
                            'trastero' => ((string) $inmueble->trastero == 'X' ? 1 : 0),
                        );

                        //Procesamos imagenes
                        $jj = 1;

                        $hayImagenes = TRUE;
                        $fotos = array();

                        while ($hayImagenes) {
                            $campo = "foto$jj";
                            if ((string) $inmueble->$campo != '') {
                                $fotos[] = (string) $inmueble->$campo;
                                $jj++;
                            } else {
                                $hayImagenes = FALSE;
                            }
                        }

                        $paginacion[$ii]['fotos'] = $fotos;
                        //
                        //Procesamos video
                        $jj = 1;

                        $hayVideos = TRUE;
                        $videos = array();


                        if ((string) $inmueble->video != '') {
                            $videos[] = (string) $inmueble->video;
                        }


                        $paginacion[$ii]['videos'] = $videos;
                        //

                        $ii++;
                    }
                }

                $paginacion[0]["total"] = count($paginacion) - 1;
                $paginacion[0]["elementos"] = $paginacion[0]["total"];
                $registros = $paginacion[0]["total"];
            } // end if(source==inmovilla_xml)
            elseif ($source == 'afilia') {


                // Feed XML
                $xml = new XMLReader();
                $xml->open(WWW_ROOT . 'files/afilia/inmuebles_asociacion.xml');

                /* Recorremos el xml en busca de todas las zonas */
                $rootElement = 'inmuebles';
                $element = 'inmueble';
                $ii = 1;
                $paginacion = array();
                $paginacion[0]["total"] = 0;
                $gestionesAfilia = Configure::read('Mapeo.gestionesAfilia');

                while ($xml->read()) {
                    if ($xml->localName == $element && $xml->nodeType == XMLReader::ELEMENT) {

                        $inmueble = simplexml_load_string($xml->readOuterXml(), 'SimpleXMLElement', LIBXML_NOCDATA);

                        $gestion = false;
                        $precio_venta = null;
                        $precio_alquiler = null;

                        foreach ($inmueble->gestiones as $inmuebleGestion) {
                            $tipogestion = (string) $inmuebleGestion->gestion->tipo;

                            if ($tipogestion == 'Compra-venta' || $tipogestion == 'Venta') {
                                $precio_venta = str_replace(array('.', ','), array('', '.'), $inmuebleGestion->gestion->precio);
                            }

                            if ($tipogestion == 'Alquilar' || $tipogestion == 'Alquiler op. compra') {
                                $precio_alquiler = str_replace(array('.', ','), array('', '.'), $inmuebleGestion->gestion->precio);
                            }

                            if ($gestion) {
                                $gestion = 4;
                            } else {
                                $gestion = $gestionesAfilia[$tipogestion];
                            }
                        }

                        $paginacion[$ii] = array(
                            'cod_ofer' => (string) $inmueble->referencia_unica,
                            'ref' => (string) $inmueble->referencia_anunciante,
                            'numagencia' => (string) $inmueble->nombre_agencia,
                            'keyacci' => $gestion,
                            'nbtipo' => (string) $inmueble->tipo,
                            'provincia' => (string) $inmueble->provincia,
                            'key_loca' => (isset($localidades2[(string) $inmueble->poblacion . ":" . (string) $inmueble->provincia]) ? $localidades2[(string) $inmueble->poblacion . ":" . (string) $inmueble->provincia] : null),
                            'zona' => (string) $inmueble->zona,
                            'latitud' => (string) $inmueble->latitud,
                            'altitud' => (string) $inmueble->longitud,
                            'precioinmo' => $precio_venta,
                            'precioalq' => $precio_alquiler,
                            'outlet' => null,
                            'descrip' => (string) $inmueble->descripcion,
                            'energialetra' => (string) $inmueble->eficiencia_energetica_tipo,
                            'habitaciones' => (string) $inmueble->n_habitaciones,
                            'banyos' => (string) $inmueble->n_banos,
                            'aseos' => (string) $inmueble->n_aseos,
                            'm_parcela' => (string) $inmueble->m2_terreno,
                            'm_cons' => (string) $inmueble->m2_construidos,
                            'm_uties' => (string) $inmueble->m2_utiles,
                            'ascensor' => (string) $inmueble->ascensor_01,
                            'aire_con' => (string) $inmueble->a_acondicionado_01,
                            'calefaccion' => (string) $inmueble->calefaccion_01,
                            'aire_con' => (string) $inmueble->calefaccion_01,
                            'garaje' => (string) $inmueble->garaje_01,
                            'parking' => (string) $inmueble->parking,
                            'jardin' => (string) $inmueble->jardin_01,
                            'piscina_com' => (string) $inmueble->piscina_01,
                            'terraza' => (string) $inmueble->terraza_01,
                            'trastero' => (string) $inmueble->trastero_01,
                        );

                        //Procesamos imagenes
                        $jj = 1;

                        $hayImagenes = TRUE;
                        $fotos = array();

                        if (!empty($inmueble->fotos)) {

                            foreach ($inmueble->fotos as $gallery) {

                                foreach ($gallery->url_foto as $foto) {
                                    $fotos[] = (string) $foto;
                                }
                            }
                        }

                        $paginacion[$ii]['fotos'] = $fotos;
                        //
                        //Procesamos videos
                        $jj = 1;

                        $hayVideos = TRUE;
                        $videos = array();

                        if (!empty($inmueble->videos)) {

                            foreach ($inmueble->videos as $gallery) {

                                foreach ($gallery->url_video as $video) {
                                    $urlVideo = (string) $video;

                                    if (preg_match('/youtube.com\/v\/([^&]+)&?/', $urlVideo, $matches)) {
                                        $videos[] = array_pop($matches);
                                    }
                                }
                            }
                        }

                        $paginacion[$ii]['videos'] = $videos;
                        //

                        $ii++;
                    }
                }

                $paginacion[0]["total"] = count($paginacion) - 1;
                $paginacion[0]["elementos"] = $paginacion[0]["total"];
                $registros = $paginacion[0]["total"];
            }

            // debug($paginacion);die;

            if ($paginacion[0]["total"]) {

                /* Variables de control */
                $total = 0;
                $errores = 0;
                $last = FALSE;
                $desde = 1;


                //Condicion para recorrer todo el feed o realizar todas las peticiones necesarias para obtener todo el feed por API
                if ($source == 'inmovilla') {
                    $paginas = ceil($paginacion[0]["total"] / $registros);
                    // $paginas = 20; //TODO sólo para test
                } else { //En otro caso es sólo un pagina
                    $paginas = 1;
                }

                for ($pagina = 1; $pagina <= $paginas; $pagina++) {

                    if ($source == 'inmovilla') { //vamos realizando las peticiones necesarias a la API
                        $desde = ($pagina - 1) * $registros + 1;

                        if ($desde > 1) {
                            //Petición API
                            Procesos('paginacion', $desde, $registros, "", "cod_ofer DESC");
                            PedirDatos(NUM_AGENCIA, API_KEY, 1);

                            if ($paginacion[0]["total"] == 0 || $paginacion[0]["elementos"] == 0) {
                                break;
                            }
                        }
                    }

                    for ($i = 1; $i <= $registros; $i++) {


                        $codOfer = $paginacion[$i]["cod_ofer"];
                        $update = FALSE;
                        $id = FALSE;

                        if ($inmuebles) {
                            $id = array_search($codOfer, $inmuebles);
                        }

                        if ($id !== FALSE) {
                            $update = TRUE;
                        }

                        if ($source == 'inmovilla') {
                            Procesos('ficha', 1, 1, "cod_ofer=$codOfer", "");
                            PedirDatos(NUM_AGENCIA, API_KEY, 1);
                        } else {
                            /* Por feed XML fijamos $fotos y $descripciones */
                            $ficha[0]["total"] = 1;
                            $ficha[1] = $paginacion[$i];
                            $fotos[$codOfer] = $paginacion[$i]['fotos'];
                            $descripciones[$codOfer][1]['descrip'] = $paginacion[$i]['descrip'];
                            /* */
                        }

                        if ($ficha[0]["total"] > 0 && $last[1]["cod_ofer"] != $ficha[1]["cod_ofer"]) {

                            @$data = array(
                                'web_id' => 1, //temporal
                                'referencia' => $ficha[1]["ref"],
                                'inmueble_gestion_id' => $ficha[1]["keyacci"],
                                'inmueble_tipo_id' => $tipos[$ficha[1]["nbtipo"]],
                                'provincia_id' => $provincias[$ficha[1]["provincia"]],
                                'localidad_id' => $localidades[$ficha[1]["key_loca"]],
                                // 'zona_id'=>$zonas[$localidades[$ficha[1]["key_loca"]]][$ficha[1]["zona"]],
                                'zona_id' => $zonas[$ficha[1]["key_loca"]][$ficha[1]["zona"]],
                                'geolocalizacion' => "{$ficha[1]["latitud"]},{$ficha[1]["altitud"]}",
                                'precio' => $ficha[1]["precioinmo"],
                                'precio_alquiler' => $ficha[1]["precioalq"],
                                'precio_anterior' => $ficha[1]["outlet"],
                                'texto' => $descripciones[$ficha[1]["cod_ofer"]][1]['descrip'],
                                'eficiencia_energetica' => ($ficha[1]["energialetra"] == 'tramites' ? 'En trámites' : ($ficha[1]["energialetra"] == '' ? 'Exento' : $ficha[1]["energialetra"]) ),
                                'num_habitaciones' => ( $ficha[1]['habitaciones'] + $ficha[1]['habdobles'] ? $ficha[1]['habitaciones'] + $ficha[1]['habdobles'] : 0 ),
                                'num_banos' => ($ficha[1]['banyos'] ? $ficha[1]['banyos'] : 0),
                                'num_aseos' => ($ficha[1]['aseos'] ? $ficha[1]['aseos'] : 0),
                                'superficie_parcela' => $ficha[1]['m_parcela'],
                                'superficie_construida' => $ficha[1]['m_cons'],
                                'superficie_util' => $ficha[1]['m_uties'],
                                'ascensor' => ($ficha[1]['ascensor'] ? $ficha[1]['ascensor'] : 0),
                                'calefaccion' => ($ficha[1]['calefaccion'] ? $ficha[1]['calefaccion'] : 0),
                                'aire_acondicionado' => ($ficha[1]['aire_con'] ? $ficha[1]['aire_con'] : 0),
                                'garaje' => ($ficha[1]['garaje'] ? 1 : 0),
                                'parking' => ($ficha[1]['parking'] ? 1 : 0),
                                'jardin' => ($ficha[1]['jardin'] ? 1 : 0),
                                'piscina' => ( ($ficha[1]['piscina_com'] || $ficha[1]['piscina_prop']) ? 1 : 0),
                                'terraza' => ($ficha[1]['terraza'] ? 1 : 0),
                                'trastero' => ($ficha[1]['trastero'] ? 1 : 0),
                                'origen_datos' => 'inmovilla',
                                'origen_inmueble_id' => $ficha[1]['cod_ofer'],
                                'publicado' => 1,
                                'portal' => ($ficha[1]['numagencia'] == NUM_AGENCIA ? 1 : 0)
                            );


                            $this->Vivienda->create();

                            if ($update) {
                                $this->Vivienda->id = $id;
                            }


                            if ($this->Vivienda->save($data, array('fieldList' => array_keys($data)))) {
                                $total++;


                                // Galeria de imagenes
                                $imagenes = FALSE;
                                $newGallery = FALSE;

                                if (!empty($fotos[$ficha[1]['cod_ofer']])) {
                                    foreach ($fotos[$ficha[1]['cod_ofer']] as $foto) {
                                        $imagenes[] = $foto;
                                    }
                                }


                                if ($imagenes) {

                                    $gallery = $this->ViviendaGaleria->find('list', array('fields' => array('id', 'imagen_original_name'), 'conditions' => array('vivienda_id' => $this->Vivienda->id, 'video_source' => null)));

                                    foreach ($imagenes as $indiceImagen => $imagen) {


                                        $this->ViviendaGaleria->create();

                                        $imageID = FALSE;

                                        if ($gallery) {
                                            $imageID = array_search($imagen, $gallery);
                                        }

                                        if ($imageID !== FALSE) {
                                            $this->ViviendaGaleria->id = $imageID;
                                            $newGallery[] = $this->ViviendaGaleria->id; //Guardamos los registros de la galeria, para borrar al final lo que sobre
                                            $dataImage = array('orden' => $indiceImagen + 1);
                                            $this->ViviendaGaleria->saveField('orden', $indiceImagen + 1);
                                        } else {
                                            // Adecuamos el nombre de la imagen y la extension ( y datos a guardar)
                                            $path = "/blobs/vivienda/{$this->Vivienda->id}/galeria/";
                                            $file = array_pop(explode("/", $imagen));
                                            $file_name = array_shift(explode(".", $file));
                                            $file_extension = strtolower(array_pop(explode(".", $file)));
                                            $file_extension = str_replace('jpeg', 'jpg', $file_extension);
                                            $file = $path . $file_name . "." . $file_extension;
                                            $dataImage = array('vivienda_id' => $this->Vivienda->id, 'imagen' => $file, 'imagen_original_name' => $imagen, 'orden' => $indiceImagen + 1,);

                                            //Obtenemos el mime
                                            $size = getimagesize($imagen);
                                            if ($size) {
                                                $dataImage['imagen_mime'] = $size['mime'];
                                            }

                                            //Guardamos imagen
                                            if ($this->ViviendaGaleria->save($dataImage)) {

                                                $newGallery[] = $this->ViviendaGaleria->id; //Guardamos los registros de la galeria, para borrar al final lo que sobre

                                                if ($imageID === FALSE) { //Si es nueva
                                                    $this->ViviendaGaleria->set('imagen', $path . $this->ViviendaGaleria->id . "." . $file_extension);
                                                    $this->ViviendaGaleria->set('imagen_name', $this->ViviendaGaleria->id . "." . $file_extension);

                                                    //Actualizamos nombre de la imagen con el ID y guardamos el archivo en local
                                                    if ($this->ViviendaGaleria->save()) {

                                                        // Actualizamos el campo 'imagen_dn' del anuncio
                                                        if ($indiceImagen == 0) {
                                                            $this->Vivienda->saveField('imagen_dn', $path . $this->ViviendaGaleria->id . "." . $file_extension, array('validate' => FALSE, 'callbacks' => FALSE));
                                                            $this->Vivienda->saveField('imagen_original_dn', Configure::read('App.imagen_original'), array('validate' => FALSE, 'callbacks' => FALSE));
                                                        }

                                                        if (!is_dir(WWW_ROOT . $path)) {
                                                            mkdir(WWW_ROOT . $path, 0777, true);
                                                        }

                                                        file_put_contents(WWW_ROOT . $path . $this->ViviendaGaleria->id . "." . $file_extension, file_get_contents($imagen));
                                                    }
                                                }
                                            } else {
                                                $debug .= var_export($this->ViviendaGaleria->validationErrors, true);
                                            }
                                        } //End else
                                    } //end foreach
                                } //End if($imagenes)
                                //Borramos los archivos que sobren
                                if (!empty($newGallery)) {
                                    $this->ViviendaGaleria->deleteAll(array('ViviendaGaleria.id NOT' => $newGallery, 'vivienda_id' => $this->Vivienda->id, 'video_source' => null), false, true);
                                } else {
                                    $this->ViviendaGaleria->deleteAll(array('vivienda_id' => $this->Vivienda->id, 'video_source' => null), false, true);
                                }


                                //Galeria videos
                                $videosVivienda = FALSE;
                                $newVideoGallery = FALSE;

                                if (!empty($videos[$ficha[1]['cod_ofer']])) {
                                    foreach ($videos[$ficha[1]['cod_ofer']] as $video) {
                                        $videosVivienda[] = $video;
                                    }
                                }


                                if ($videosVivienda) {

                                    $videoGallery = $this->ViviendaGaleria->find('list', array('fields' => array('id', 'video_code'), 'conditions' => array('vivienda_id' => $this->Vivienda->id, 'video_source NOT' => null)));

                                    foreach ($videosVivienda as $indiceVideo => $video) {


                                        $this->ViviendaGaleria->create();

                                        $videoID = FALSE;

                                        if ($gallery) {
                                            $videoID = array_search($video, $videoGallery);
                                        }

                                        // Adecuamos el nombre de la imagen y la extension ( y datos a guardar)

                                        $dataImage = array('vivienda_id' => $this->Vivienda->id, 'video_code' => $videoCode, 'video_source' => 'youtube', 'orden' => $indiceVideo + 1,);


                                        //Guardamos imagen
                                        if ($this->ViviendaGaleria->save($dataImage)) {
                                            $newVideoGallery[] = $this->ViviendaGaleria->id; //Guardamos los registros de la galeria videos, para borrar al final lo que sobre                                              
                                        } else {
                                            $debug .= var_export($this->ViviendaGaleria->validationErrors, true);
                                        }
                                    } //end foreach
                                } //End if($imagenes)
                                //Borramos los videos que sobren
                                if (!empty($newVideoGallery)) {
                                    $this->ViviendaGaleria->deleteAll(array('ViviendaGaleria.id NOT' => $newGallery, 'vivienda_id' => $this->Vivienda->id, 'video_source NOT' => null), false, true);
                                } else {
                                    $this->ViviendaGaleria->deleteAll(array('vivienda_id' => $this->Vivienda->id, 'video_source NOT' => null), false, true);
                                }
                            } else {
                                $debug .= var_export($ficha[1], true);
                                $debug .= var_export($this->Vivienda->validationErrors, true);
                                $errores++;
                            }

                            $last = $ficha;
                        } //End if procesado datos ficha inmueble
                    } //End for recorre una pagina de resultados del feed
                } // End for recoger todas las paginas del feed

                $debug .= "Total inmuebles : " . ($total + $errores);
                $debug .= "<br>Importados : $total";
                $debug .= "<br>Errores : $errores<br>";
            }
        }




        //Por ultimo el tiempo al culminar
        $final = time();
        //La resta del final - inicio nos dará el tiempo de ejecución
        $total = $final - $inicio;

        $debug .='<br>Resultado ejecutado en ' . gmdate('H:i:s', $total) . '<br>';
        // die; 

        $this->set('debug', $debug);
    }

}
© 2026 GrazzMean