hellofacteurV1/ctrl/compte_crea_abo_nouveau_flux.php

102 lines
3.6 KiB
PHP
Executable File

<?php
/* Script appelé lorsqu'un internaute souhaite s'abonner à un flux non encore enregisté dans l'annuaire ce qui passe par la création d'un hub.
* Ce hub peut ensuite être ajouté à un abonnement existant ou servir à créer un nouvel abonnement
* L'utilisateur doit être connecté.
* Le flux est contrôlé avant de l'enregistrer.
*
*/
require_once("../modele/FclFlux_abonnement.php");
// un utilisateur non connecté n'a rien à faire sur cette page.
$user=new FclFlux_utilisateur();
if(!$user->test_session(false))
{
header("location:".PAGE_404);
exit();
}
// on commence par vérifier que le flux existe...
// encodage du mot-clés saute avec certains navigateurs :
if(strpos($page[3],"%")===false)
$get=urlencode($page[3]);
else
$get=$page[3];
// on peut recevoir soit une url, soit un mot-clés si Google news
if(strpos($page[3],"http")===false)//google
//$flux_get="https://news.google.com/news/feeds?pz=1&cf=all&ned=fr&hl=fr&q=$get&output=rss";
$flux_get="https://news.google.com/news/rss/search/section/q/$get/$get?&hl=fr&gl=fr&scoring=n&num=20";
else
$flux_get=str_replace("éé","&",str_replace("ùù","/",urldecode($get)));
if(!filter_var($flux_get,FILTER_VALIDATE_URL))
{
$_SESSION["message"]=ERREUR_IMPREVUE;
header("location:".PAGE_ACCUEIL);
exit();
}
//test lecture et récup infos du flux
$max["url_long_max"]=FLUX_MAX_URL;
$flux=new FclFlux_flux();
$flux->limites=$max;
$flux->set_url($flux_get);
$flux_infos=$flux->get_infos_entete();
$flux_lecture=$flux->lecture(3,false);
if((empty($flux_infos))||(empty($flux_lecture)))
{
$_SESSION["message"]=ERREUR_IMPREVUE;
header("location:".PAGE_ACCUEIL);
exit();
}
if(empty($Bd))
require("../modele/connexion-bd.php");
$test=$flux->set_auteur($user);
if($test===false)
{
$_SESSION["message"]=ERREUR_IMPREVUE;
header("location:".PAGE_ACCUEIL);
exit();
}
// je vérifie tout de même que le flux n'est pas déjà dans la bd
$doublon_ok=FclFlux_flux::recherche($flux_get,"url","id_flux,nom");
if(empty($doublon_ok))
{
// dans le cas d'une recherche GG, je modifie les valeurs importées pour la désignation et la description
if(strpos($flux_get,"https://news.google.com")!==false)
{
$limites["designation_long_min"]=FLUX_MIN_NOM;
$limites["designation_long_max"]=FLUX_MAX_NOM;
$limites["description_long_max"]=FLUX_MAX_DESCRIPTION;
$flux->limites=$limites;
$flux->set_designation(ucfirst(urldecode($get))." sur Google Actualités.");
$flux->set_description("");
}
$sauve=$flux->ajout();//provoque la création d'une source + d'un hub dans lequel est placé ce flux.
if(empty($flux->id_flux))
{
$_SESSION["message"]=ERREUR_IMPREVUE;
header("location:".PAGE_ACCUEIL);
exit();
}
}
else
$flux->id_flux=$doublon_ok["id_flux"];
// que le flux soit nouveau ou un doublon il me faut connaître le hub dans lequel il est chargé pour permettre l'abonnement
$hub_abo=$flux->get_hubs();
if((empty($hub_abo))||(empty($hub_abo[0]["id_hub"])))
{
$_SESSION["message"]=ERREUR_IMPREVUE;
header("location:".PAGE_ACCUEIL);
exit();
}
$id_hub=$hub_abo[0]["id_hub"];//si + sieurs, on garde le premier...
//il me faut le nom du hub pour le proposer comme nom du nouvel abonnement.
$get_nom_hub=FclFlux_hub::recherche($id_hub,"id_hub","nom");
if(!empty($get_nom_hub))
$nom_hub=$get_nom_hub["nom"];
// liste des abonnements existants à proposer
$liste_abo="";
$abos=FclFlux_abonnement::get_liste_abo_cache($user,CREA_CACHE);
if(!empty($abos))
{
foreach ($abos as $abo_info)
$liste_abo.="<input type='radio' name='abo' value=\"".$abo_info["id_abonnement"]."\"> ".affiche_utf8(htmlentities($abo_info["designation"],ENT_QUOTES),UTF8_OK)."&nbsp;";
}
include("../vues/compte_crea_abo_nouveau_flux.php");