require_once 'includes/config_iagestion.php'; require_once 'includes/lang_config.php'; // Helper for translations $t_inm = fn($key) => t($key, 'inmuebles'); $trans_types = $t_inm('types'); $trans_ops = $t_inm('ops'); function slugify(string $t): string { $t = mb_strtolower($t,'UTF-8'); $t = strtr($t,['á'=>'a','é'=>'e','í'=>'i','ó'=>'o','ú'=>'u','ü'=>'u','ñ'=>'n','à'=>'a','è'=>'e','ì'=>'i','ò'=>'o','ù'=>'u']); $t = preg_replace('/[^a-z0-9\s\-]/','', $t); return trim(preg_replace('/[\s\-]+/','-',$t),'-'); } function urlFicha(object $inm): string { return 'inmueble-'.slugify($inm->Tipo??'inmueble').'-'.slugify($inm->Operacion??'venta').'-'.slugify($inm->Municipio??'espana').'-'.$inm->Id; } // ── Obtener ID ───────────────────────────────────────────────────────────────── $id = intval($_GET['id'] ?? 0); if (!$id) { header('Location: inmuebles'); exit; } // ── Llamada API ficha ────────────────────────────────────────────────────────── $ch = curl_init('https://pasarelas.iagestion.com/api-gestioninmo/v2/inmueble/'); curl_setopt_array($ch,[CURLOPT_RETURNTRANSFER=>true,CURLOPT_POST=>true,CURLOPT_TIMEOUT=>15, CURLOPT_POSTFIELDS=>['usuario'=>$user_api,'password'=>$pass_api,'Id'=>$id]]); $resp = curl_exec($ch); curl_close($ch); $api = $resp ? json_decode($resp) : null; $inm = ($api && isset($api->inmueble)) ? $api->inmueble : null; if (!$inm || !in_array($inm->Estado??'', ['Disponible','Reservado','Pendiente'])) { header('HTTP/1.1 301 Moved Permanently'); header('Location: inmuebles'); exit; } // ── Limpiar emojis del texto ──────────────────────────────────────────────────── function limpiar(string $t): string { $t = preg_replace('/[\x{1F000}-\x{1FFFF}]/u','',$t); $t = preg_replace('/[\x{2600}-\x{27BF}]/u','',$t); return trim(preg_replace('/\s+/',' ',$t)); } $titulo = !empty($inm->TituloBuscadores) ? limpiar($inm->TituloBuscadores) : ($inm->Tipo.' en '.($inm->Poblacion?:$inm->Municipio)); $desc_raw = !empty($inm->ObservacionesParaWeb) ? $inm->ObservacionesParaWeb : ($inm->Observaciones_Publicas??''); $descripcion = limpiar($desc_raw); // ── Precio ───────────────────────────────────────────────────────────────────── if ($inm->CheckConsultarPrecio==='si') $precio = 'Consultar precio'; elseif ($inm->Precio > 0) { $precio = number_format($inm->Precio,0,',','.').' €'; if ($inm->Operacion==='Alquiler') $precio.='/mes'; } else $precio=''; // ── Fotos ────────────────────────────────────────────────────────────────────── $fotos=[]; if (!empty($api->Fotos)) foreach($api->Fotos as $f) { $fotos[] = !empty($f->URL) ? $f->URL : (!empty($f->URLenCRM)?$f->URLenCRM:''); } $fotos = array_filter($fotos); // ── Características ──────────────────────────────────────────────────────────── $esTrue = fn($v) => in_array(strtolower(trim((string)($v??''))) ,['si','1','yes','true']); $caract = []; if ($esTrue($inm->CheckAireAcondicionado??null)||$esTrue($inm->Climatizacion??null)) $caract[]='Aire acondicionado'; if (!empty($inm->Calefaccion)&&$inm->Calefaccion!=='0') $caract[]='Calefacción'; if ($esTrue($inm->CheckBarbacoa??null)) $caract[]='Barbacoa'; if (!empty($inm->Cocina)&&strtolower($inm->Cocina)==='equipada') $caract[]='Cocina equipada'; if ($esTrue($inm->CheckJardin??null)) $caract[]='Jardín'; if (($inm->Garajes??0)>0||($inm->Aparcamientos??0)>0) $caract[]='Parking/Garaje'; if ($esTrue($inm->Piscina??null)||$esTrue($inm->PiscinaPropia??null)||$esTrue($inm->PiscinaComunitaria??null)) $caract[]='Piscina'; if (($inm->Terraza??0)>0||($inm->Metros_Terraza??0)>0) $caract[]='Terraza'; if (($inm->Balcon??0)>0) $caract[]='Balcón'; if (($inm->Ascensor??0)>0) $caract[]='Ascensor'; if (($inm->Trastero??0)>0) $caract[]='Trastero'; if ($esTrue($inm->ArmarioEmpotrado??null)) $caract[]='Armarios empotrados'; if ($esTrue($inm->CheckChimenea??null)) $caract[]='Chimenea'; if ($esTrue($inm->CheckPuertaBlindada??null)) $caract[]='Puerta blindada'; if ($esTrue($inm->CheckVideoPortero??null)) $caract[]='Videoportero'; if ($esTrue($inm->CheckAlarma??null)) $caract[]='Alarma'; if ($esTrue($inm->CheckDomotica??null)) $caract[]='Domótica'; if ($esTrue($inm->Exterior??null)) $caract[]='Exterior'; if ($esTrue($inm->CheckAmueblado??null)) $caract[]='Amueblado'; if ($esTrue($inm->CheckVistasMar??null)) $caract[]='Vistas al mar'; sort($caract); // ── Propiedades similares ────────────────────────────────────────────────────── $ch2 = curl_init('https://pasarelas.iagestion.com/api-gestioninmo/v2/inmuebles/'); curl_setopt_array($ch2,[CURLOPT_RETURNTRANSFER=>true,CURLOPT_POST=>true,CURLOPT_TIMEOUT=>10, CURLOPT_POSTFIELDS=>['usuario'=>$user_api,'password'=>$pass_api,'publicadosWeb'=>1,'Estado'=>'Disponible', 'numXpagina'=>5,'pagina'=>0,'TipoOperacion'=>$inm->Operacion,'Tipo'=>json_encode([$inm->Tipo])]]); $resp2 = curl_exec($ch2); curl_close($ch2); $similares=[]; if ($resp2) foreach((json_decode($resp2)->inmuebles??[]) as $s) if ($s->Id!=$inm->Id){ $similares[]=$s; if(count($similares)>=4) break; } // ── SEO ──────────────────────────────────────────────────────────────────────── $site_url = 'https://sendahogar.com/'; $slug_url = urlFicha($inm); $canonical = $site_url.$slug_url; $seo_title = $titulo.' | Senda Hogar'; $seo_desc = $precio ? "$titulo. Precio: $precio. " : "$titulo. "; $seo_desc .= $inm->Municipio ? "En ".$inm->Municipio.". " : ''; $seo_desc .= 'Senda Hogar, tu inmobiliaria de confianza.'; $og_img = $fotos[0] ?? $site_url.'img/og-image.jpg'; // ── Envío formulario contacto ────────────────────────────────────────────────── $form_ok = false; $form_err = ''; if ($_SERVER['REQUEST_METHOD']==='POST' && !empty($_POST['gestioninmo_nombre'])) { if (empty($_POST['chk_legal'])) { $form_err = 'Debes aceptar las condiciones legales.'; } else { $dem=['usuario'=>$user_api,'password'=>$pass_api,'id_inmueble'=>$inm->Id, 'nombre'=>$_POST['gestioninmo_nombre']??'','email'=>$_POST['gestioninmo_email']??'', 'telefono'=>$_POST['gestioninmo_movil']??'','portal'=>'Web','notas'=>'Interesado en este inmueble']; $chd=curl_init('https://pasarelas.iagestion.com/api-gestioninmo/v1/grabar_demanda_automatica'); curl_setopt_array($chd,[CURLOPT_RETURNTRANSFER=>true,CURLOPT_POST=>true,CURLOPT_POSTFIELDS=>$dem,CURLOPT_TIMEOUT=>8]); curl_exec($chd); curl_close($chd); $form_ok = true; } } ?> Quick Overview | Senda Hogar