?
| Current Path : /home/w/e/b/webyoo/www/leumi/site/ |
| Current File : /home/w/e/b/webyoo/www/leumi/site/smart_search.php |
<?php
include "start.php";
// =====================================================================
// Recherche "intelligente" — analyse une phrase en langage naturel
// (hébreu) et la traduit en critères pour listing-all-properties.php.
// 100% PHP, sans API : extraction par mots-clés + liste réelle des villes.
// =====================================================================
$q = isset($_REQUEST['q']) ? trim($_REQUEST['q']) : '';
// Si vide : retour à la liste
if ($q === '') {
header("Location: listing-all-properties.php");
exit;
}
$params = array();
$keywords = array();
// Normalisation légère des guillemets hébreux (ממ"ד / ממ״ד)
$qn = str_replace(array('×´', 'â€', '“', '"', '׳', '\''), '"', $q);
// ---- 1) Nombre de pièces -------------------------------------------
$rooms = '';
if (preg_match('/(\d+)\s*(?:\.5\s*)?חדר/u', $qn, $m)) {
$rooms = $m[1];
} else {
// nombres écrits en lettres
$wordNums = array(
'עשרה'=>'10','תשע'=>'9','×©×ž×•× ×”'=>'8','שבע'=>'7','שש'=>'6','שיש'=>'6',
'חמש'=>'5','×רבע'=>'4','שלוש'=>'3','שתי'=>'2','×©× ×™'=>'2','×חד'=>'1','חדר '=>'1'
);
foreach ($wordNums as $w => $n) {
if (mb_stripos($qn, $w) !== false && mb_stripos($qn, 'חדר') !== false) { $rooms = $n; break; }
}
}
if ($rooms !== '') { $params['room'] = $rooms; }
// ---- 2) Type de bien (ordre : du plus spécifique au plus générique) -
$typeMap = array(
'דירת גן' => 'דירת גן',
'דירת גג' => 'דירת גג',
'×¤× ×˜×”×וז' => '×’×’ / ×¤× ×˜×”×וז',
'דופלקס' => 'דופלקס',
'קוטג' => 'בית פרטי / קוטג',
'וילה' => 'בית פרטי / קוטג',
'בית פרטי' => 'בית פרטי / קוטג',
'דו משפחתי' => 'דו משפחתי',
'סטודיו' => 'סטודיו / לופט',
'לופט' => 'סטודיו / לופט',
'מרתף' => 'מרתף',
'יחידת דיור' => 'יחידת דיור',
'יחידה' => 'יחידת דיור',
'דירה' => 'דירה',
);
foreach ($typeMap as $kw => $val) {
if (mb_stripos($qn, $kw) !== false) { $params['type_property'] = $val; break; }
}
// ---- 3) Équipements (features[]) -----------------------------------
$featureMap = array(
'ממ"ד' => 'mamad',
'ממד' => 'mamad',
'מרחב מוגן' => 'mamad',
'ממ"ק' => 'mamak',
'ממק' => 'mamak',
'מקלט' => 'shelter',
'מרפסת' => 'balcony',
'מעלית' => 'elevator',
'מיזוג' => 'air_cond',
'מזגן' => 'air_cond',
'×—× ×™×”' => 'parking',
'×—× ×™×™×”' => 'parking',
'מחסן' => 'storeroom',
'סורג' => 'bars',
'חימו×' => 'heater',
'× ×’×™×©' => 'accessibility',
'חיות' => 'pets',
'מחמד' => 'pets',
'חצר' => 'courtyard',
'משופצ' => 'renovated',
'מרוהט' => 'furnished',
'ריהוט' => 'furnished',
'בלעדי' => 'exclusive',
'שותפ' => 'roommates',
'×’×™× ×”' => 'garden',
);
$features = array();
foreach ($featureMap as $kw => $key) {
if (mb_stripos($qn, $kw) !== false && !in_array($key, $features, true)) {
$features[] = $key;
}
}
if (!empty($features)) { $params['features'] = $features; }
// ---- 4) Ville / région : comparaison avec les valeurs réelles en base
$locResult = mysqli_query($link, "SELECT DISTINCT city FROM rent_properties WHERE city <> '' UNION SELECT DISTINCT region FROM rent_properties WHERE region <> ''");
$places = array();
if ($locResult) {
while ($r = mysqli_fetch_row($locResult)) {
$p = trim($r[0]);
if ($p !== '') { $places[] = $p; }
}
}
// Trier du plus long au plus court pour capter les noms composés d'abord
usort($places, function ($a, $b) { return mb_strlen($b) - mb_strlen($a); });
foreach ($places as $place) {
if (mb_stripos($qn, $place) !== false) {
$keywords[] = $place;
break; // une localité suffit
}
}
// ---- 5) Mot-clé de recherche ---------------------------------------
if (!empty($keywords)) {
$params['key-word'] = implode(' ', $keywords);
} elseif (empty($params)) {
// Rien reconnu : on transmet la phrase telle quelle en recherche libre
$params['key-word'] = $q;
}
// ---- On transporte aussi la phrase complète (affichage + ré-édition)
$params['q'] = $q;
// ---- Redirection vers la page de résultats -------------------------
header("Location: listing-all-properties.php?" . http_build_query($params));
exit;