hellofacteurV1/ctrl/repertoire_recherche.php

133 lines
5.7 KiB
PHP
Raw Permalink Normal View History

2021-11-02 11:23:49 +01:00
<?php
/**
* Script cherchant les hubs de l'annuaire correspondant à une recherche lancée par un utilisateur
* Les éventuels résultats sont listés pour sélection
* Si pas de résultat et que la recherche saisie correspond à une url, je vérifie si c'est un flux
* Si ce n'est pas un flux, je teste si des flux sont déclarés en entête du site
* Via une case à cocher, il est aussi possible de chercher sur Google news.
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$form["recherche"]=trim(strip_tags($_POST["recherche"]));
$ajax_on=false;
if(!empty($_POST["ajax"]))
{
$ajax_on=true;
session_save_path(SESSIONS_REP);
ini_set("session.use_only_cookies",1);
session_start();
header('Content-Type: text/html; charset=utf-8');
require_once("../modele/FclFlux_hub.php");
require_once("../modele/FclFlux_flux.php");
}
if(empty($form["recherche"]))
$select=get_html_alerte_msg((array) ERREUR_UTILISA_CHAMPS_ABSENTS);
else if((strlen($form["recherche"])<HUB_RECHERCHE_MIN)||(strlen($form["recherche"])>HUB_RECHERCHE_MAX))
$select=get_html_alerte_msg((array) ERREUR_RECHERCHE_LONG);
else
{
if(empty($Bd))
require_once("../modele/connexion-bd.php");
$max["url_long_max"]=FLUX_MAX_URL;
if(empty($_POST["gg_news_ok"]))
{//recherche hors gg news
$hubs=FclFlux_hub::recherche_globale($form["recherche"],"id_hub,nom");
$Bd=null;
if(!empty($hubs))
{
if(count($hubs)>FLUX_RECHERCHE_MAX_RESULTATS)
$select=get_html_alerte_msg((array) ERREUR_RECHERCHE_MAX_RESULTATS);
else
{
if(count($hubs)==1)
$label="1 résultat pour votre recherche :";
else
$label=count($hubs)." résultats trouvés pour votre recherche :";
$select="<div class='form-group'>
<label for='liste_hubs' class='col-sm-4 control-label'>$label</label>
<div class='col-sm-8'><select name='liste_hubs' id='liste_hubs' autofocus class='form-control'>
<option value='0'></option>";
foreach ($hubs as $hub_infos)
$select.="<option value='".$hub_infos["id_hub"]."'>".htmlentities(affiche_utf8($hub_infos["nom"],UTF8_OK))."</option>\n";
$select.="</select></div></div>";
}
}
else
{
//est-ce-que la recherche saisie correspond à une adresse de page internet ?
if((strpos($form["recherche"],"www")!==false)&&(strpos($form["recherche"],"http://")===false)&&(strpos($form["recherche"],"https://")===false))
$url_test="http://".$form["recherche"];
else
$url_test=$form["recherche"];
if(filter_var($url_test,FILTER_VALIDATE_URL))
{
//est-ce un flux et si oui, est-ce que j'arrive à le lire ?
$flux=new FclFlux_flux();
$flux->limites=$max;
$flux->set_url($url_test);
$liens_flux=$flux->lecture(3,false);
unset($flux);
if(!empty($liens_flux))
{
//on affiche le résultat et propose de s'y abonner
$select="<div class='liste_liens'><h3>Voici les dernières actualités pour ce flux.</h3>\n".get_html_liste_liens_simple($liens_flux,3,false)."<p><a href='".PAGE_ABO_NOUVEAU_FLUX.urlencode(str_replace("&","éé",str_replace("/","ùù",$url_test)))."/' class='btn btn-info btn-lg' rel='nofollow' target='_blank'>Je m'abonne aux actualités de ce site !</a></p></div>";
}
else
{
$lien=new Lien();
$lien->limites=$max;
$lien->set_url($url_test);
$entetes_flux=Flux::detecte_flux_entete($lien);
if(!empty($entetes_flux))
{
$flux_propose="";
foreach($entetes_flux as $flux_infos)
{
//je teste la lecture de chaque flux pour déterminer si je le propose ou pas
if((!empty($flux_infos["href"]))&&(!empty($flux_infos["title"])))
{
$flux_test=new FclFlux_flux();
$flux_test->limites=$max;
if((strpos($flux_infos["href"],"http://")===false)&&(strpos($flux_infos["href"],"https://")===false))
$url_flux=str_replace("http:/","http://",str_replace("//","/",$url_test.$flux_infos["href"]));
else
$url_flux=$flux_infos["href"];
$set_url=$flux_test->set_url($url_flux);
if($set_url===true)
{
$liens_flux=$flux_test->lecture(3,true);
if(!empty($liens_flux))
$flux_propose.="<p><b>".htmlspecialchars($flux_infos["title"])."</b></p>\n".get_html_liste_liens_simple($liens_flux,3,false)."<p><a href='".PAGE_ABO_NOUVEAU_FLUX.urlencode($url_flux)."/' class='btn btn-info btn-lg' rel='nofollow' target='_blank'>Je m'abonne à ces actualités.</a></p>";
}
unset($flux_test);
}
}
if(!empty($flux_propose))
$select="<div class='liste_liens'><h3>Voici les abonnements possibles pour le site recherché.</h3>\n$flux_propose</div>";
}
}
}
}
}
else
{// bing ou google ?
//$url_flux_news="http://www.bing.com/news/search?q=".urlencode($form["recherche"])."&format=RSS";
// exemple : https://news.google.com/news/rss/search/section/q/coucou/coucou?&hl=fr&gl=fr&scoring=n&num=20
$url_flux_news="https://news.google.com/news/rss/search/section/q/".urlencode($form["recherche"])."/".urlencode($form["recherche"])."?&hl=fr&gl=fr&scoring=n&num=20";
$hubs_test=new FclFlux_flux();
$hubs_test->limites=$max;
$set_url=$hubs_test->set_url($url_flux_news);
if($set_url===true)
{
$liens_flux=$hubs_test->lecture(5,false);
if(!empty($liens_flux))
$select="<div class='liste_liens'><h3>Voici les derniers articles trouvés par \"Google actualités\" pour votre recherche.</h3>\n".get_html_liste_liens_simple($liens_flux,5,false)."<p><a href='".PAGE_ABO_NOUVEAU_FLUX.urlencode($form["recherche"])."' class='btn btn-info btn-lg' rel='nofollow'>Je m'abonne à ces actualités !</a></p></div>";
}
unset($hubs_test);
}
if(empty($select))
$select=get_html_alerte_msg((array) ERREUR_SQL_RECHERCHE);
}
if((!empty($select))&&($ajax_on))
echo $select;