Code de la version actuelle

This commit is contained in:
Fabrice PENHOËT 2021-11-02 11:23:49 +01:00
parent 70133e8356
commit ae08f8ddcf
259 changed files with 38060 additions and 0 deletions

140
config/config.example.php Executable file
View File

@ -0,0 +1,140 @@
<?php
/**
* Configurations générales de l'application
* à ne modifier qu'en connaissance de cause...
**/
// +++ Dimensions max/min et valeurs autorisées pour les champs
// Les données des utilisateurs.
const UTILISATEUR_MIN_PSEUDO=2;
const UTILISATEUR_MAX_PSEUDO=50;
const UTILISATEUR_MIN_PASSE=6;
const UTILISATEUR_MAX_PASSE=100;
const UTILISATEUR_MAX_EMAIL=70;
const UTILISATEUR_MAX_PRESENTATION=2000;
const UTILISATEUR_STATUTS="utilisateur|administrateur";
const UTILISATEUR_ILLUS_EXTENSIONS=".jpg|.jpeg|.png|.gif";
const UTILISATEUR_ILLUS_MAX_TAILLE="3000000";// ~ 3 Mo
const UTILISATEUR_ILLUS_MAX_LARGEUR=250;
const UTILISATEUR_MAX_ORIGINE=50;
// Données agenda périodes d'absence des utilisateurs.
const AGENDA_MIN_DESIGNATION=1;
const AGENDA_MAX_DESIGNATION=50;
// Données concernant les hubs
const HUB_MIN_NOM=5;
const HUB_MAX_NOM=150;
const HUB_MAX_DESCRIPTION=255;
const HUB_ILLUS_EXTENSIONS=".jpg|.jpeg|.png|.gif";
const HUB_ILLUS_MAX_TAILLE="3000000";// ~ 3 Mo
const HUB_ILLUS_MAX_LARGEUR=250;
const HUB_MAX_MEMO=255;
const HUB_LANGUES="fr|en|es|de|pt";
const HUB_RECHERCHE_MIN=3;
const HUB_RECHERCHE_MAX=150;
const HUB_RECHERCHE_MAX_RESULTATS=500;
// Données des sites sources des flux.
const SOURCE_MIN_NOM=2;
const SOURCE_MAX_NOM=50;
const SOURCE_MAX_URL=100;
const SOURCE_MAX_DESCRIPTION=255;
// Données des rubriques classant les flux.
const RUBRIQUE_MIN_NOM=5;
const RUBRIQUE_MAX_NOM=50;
const RUBRIQUE_MAX_DESCRIPTION=255;
// Données concernant les liens & posts
const POST_MIN_ANCRE=5;
const POST_MAX_ANCRE=255;
const POST_MAX_URL=500;//url à rallonge de gg news...
const POST_MIN_ANNONCE=300;
const POST_MAX_ANNONCE=10000;
const POST_ILLUS_EXTENSIONS=".jpg|.jpeg|.png|.gif";
const POST_ILLUS_MAX_TAILLE="3000000";// ~ 3 Mo
const POST_ILLUS_MAX_LARGEUR=250;
// Données concernant les flux
const FLUX_MIN_NOM=5;
const FLUX_MAX_NOM=150;
const FLUX_MAX_URL=150;
const FLUX_MAX_DESCRIPTION=255;
const FLUX_MAX_MEMO=255;
const FLUX_FREQUENCES="H|J";
const FLUX_LANGUES="fr|en|es|de|pt";
const FLUX_RECHERCHE_MIN=3;
const FLUX_RECHERCHE_MAX=150;
const FLUX_RECHERCHE_MAX_RESULTATS=500;
// Données concernant les annonces promotionnelles
const ANNONCE_EMPLACEMENTS="header|footer";
const ANNONCE_MAX_TITRE=50;
const ANNONCE_MAX_TEXTE=255;
const ANNONCE_MAX_URL=255;
const ANNONCE_MAX_ANCRE=255;
const ANNONCE_MAX_COMMENTAIRES=255;
// Données concernant les marque-pages des utilisateurs
const MP_MIN_ANCRE=3;
const MP_MAX_ANCRE=255;
const MP_MAX_URL=255;
const MP_MAX_DESCRIPTION=255;
const MP_MAX_MOTSCLES=255;
const MP_MIN_RECHERCHE=3;
const MP_MAX_RECHERCHE=50;
// Données concernant les abonnements
const ABO_MIN_DESIGNATION=2;
const ABO_MAX_DESIGNATION=50;
const ABO_JOURS="0|1|2|3|4|5|6";
const ABO_HORAIRES="matin|midi|soir";
const ABO_AFFICHAGES_CONTEXTE="email|site";
// +++ Les répertoires de stockage des fichiers et leurs droits.
define("BASE_REP",__DIR__."/");
// Le journal d'erreurs / administrateurs
define("JOURNAL_REP",BASE_REP."../journal");
const JOURNAL_REP_CHMOD=0705;
// Illustrations profils utilisateurs
const UTILISATEUR_ILLUS_REP="images/utilisateurs";
const UTILISATEUR_ILLUS_REP_CHMOD=0755;
// Illustrations hubs
const HUB_ILLUS_REP="images/hubs";
const HUB_ILLUS_REP_CHMOD=0755;
// Illustrations annonces
const POST_ILLUS_REP="images/posts";
const POST_ILLUS_REP_CHMOD=0755;
// Tickets divers
define("TICKET_VALID_REP",BASE_REP."../ticket/v");
define("TICKET_CONNECT_REP",BASE_REP."../ticket/c");
define("TICKET_SUPPR_REP",BASE_REP."../ticket/s");
const TICKET_REP_CHMOD=0705;
// Les caches fichiers
define("CACHE_REP",BASE_REP."../cache");
const CACHE_REP_CHMOD=0705;
const CACHE_REP_UTILISATEURS="u";
const CACHE_REP_SOURCES="s";
const CACHE_REP_RUBRIQUES="r";
const CACHE_REP_POSTS="p";
const CACHE_REP_LIENS="l";
const CACHE_REP_FLUX="f";
const CACHE_REP_HUB="h";
const CACHE_REP_ABO="ab";
const CACHE_REP_ANNONCES="a";
//Les sessions & cookies
define("SESSIONS_REP",BASE_REP."../ses");
define("SESSIONS_TEMP_REP",BASE_REP."../ses/tmp");
define("COOKIES_REP",BASE_REP."../ses/cookies");
// +++ Déclations et réglages divers...
// Format des dates transmises aux méthodes + masque pour expressions régulières.
const DATE_FORMAT="JJ/MM/AAAA";
const DATE_FORMAT_EREG="#^((0[1-9])|(1\d)|(2\d)|(3[0-1]))\/((0[1-9])|(1[0-2]))\/(\d{4})$#";
// Durée des sauvegardes des données utilisateurs après suppression de leur compte (à adapter suivant contraintes légales).
const DUREE_SVG_DONNEES=365;
// Fuseaux horaires des dom&tom
$DT_fuseau["971"]="America/Guadeloupe";
$DT_fuseau["972"]="America/Martinique";
$DT_fuseau["973"]="America/Cayenne";
$DT_fuseau["974"]="Indian/Reunion";
$DT_fuseau["975"]="America/Miquelon";
$DT_fuseau["976"]="Indian/Mayotte";
$DT_fuseau["986"]="Pacific/Wallis";
$DT_fuseau["987"]="Pacific/Tahiti";
$DT_fuseau["988"]="Pacific/Noumea";

82
config/config.perso.example.php Executable file
View File

@ -0,0 +1,82 @@
<?php
/**
* Configurations personnalisables de l'application
* à adapter donc !
**/
// Infos du site
const SITE_NOM="Hello facteur";
const SITE_URL="https://www.hellofacteur.com";
const SITE_SLOGAN="Votre actualité, comme une lettre à la poste.";
const SITE_LANG="fr-fr";
const SITE_COOKIES_DOMAINE="hellofacteur.com";
const UTF8_OK=true;
// Si on souhaite rendre automatique l'abonnement au hub des nouvelles du site
$hub_site["id"]=20451;
$hub_site["nom"]="Les nouvelles du facteur.";
$hub_site["duree_max"]=180; //nbre de jours après lequel l'abonnement par défaut est supprimé si aucun clic n'a été enregistré sur cette période.
// Fuseau horaire par défaut
date_default_timezone_set("Europe/Paris");
// Email & SMTP
const EMAIL_ADMIN="toto@example.com";//pour recevoir des notifications en cas de catastrophes :-)
const EMAIL_CONTACT="toto@example.com";//formulaire de contact
const EMAIL_TRANSACTIONNEL_DE="toto@example.com";//email utilisé lors des messages durant l'inscription, etc
const EMAIL_MAILINGS="toto@example.com";//email utilisé pour envoyer les mailings
// mailjet
const SMTP_SERVEUR="";//laisser à vide si utilisation fonction mail
const SMTP_NAME="";//laisser à vide si serveur ne demandant pas de s'identifier
const SMTP_PASSE="";//idem
const SMTP_PORT=587;//si différent de 25 sinon laisser vide
const SMTP_SECURE="";//si connexion sécurisée ("ssl" / "tls"), sinon laisser vide */
const PHPMAIL_LANG="fr";//langue des messages d'erreur de PHPMailer, vide pour anglais
// Base de données (mysql/mariaDB)
const BD_SERVEUR="";
const BD_NOM="";
const BD_LOGIN="";
const BD_PASSE="";
const BD_PORT="";
// Origines possibles des utilisateurs
const UTILISATEUR_ORIGINES="example1|example2|example3";
// Nbre de liens max par abonnements envoyés suivant choix
$Abo_max_liens["min"]=5;
$Abo_max_liens["medium"]=20;
$Abo_max_liens["max"]=150;
// Durées maximales en jours autorisées pour certaines procédures
const COMPTE_VALIDATION_MAX_DUREE="5";
const NOUVEL_EMAIL_MAX_DUREE_VALIDATION="3";
const COMPTE_LIEN_CONNEXION_MAX_DUREE="60";//minutes
const COMPTE_LIEN_SUPPRESSION_MAX_DUREE="8";//heures
// divers
const AUTORISE_CRON="*************";
const CREA_CACHE=false;//les fichiers cache appelés mais non trouvés doivent-ils être créés ?
const LIEN_IMPORT_MAX_JOURS=10;//nombre de jours en dessous desquels un nouveau lien n'est pas importé d'un flux (sert aussi à supprimer anciens liens dans bd)
const POSTS_MAX_JOURS=30;//nombre de jours maximum ou les messages des hubs sont gardés dans la base de données
const ABO_MAX_ENVOIS_PASSIFS=30;//nombre maximum d'envoi d'un abonnement sans clic, pour désactiver un abonnement.
const NB_JOURS_LOGS_AFFICHAGES=5;//nombre de jours durant lesquels les stats d'affichage des utilisateurs connectés sur le site sont gardés. Les stats d'affichages des affichages /email sont traités tous les débuts de mois.
// blocage du site...
const MSG_MAINTENANCE="";
// Google Actualités
const SOURCE_GG_NEWS_ID=34;
// Protections formulaires
const FORM_MIN_DUREE=3;//nombre de secondes minimum avant validation du formulaire
const FORM_CONNEXION_MAX_TENTATIVES=10;//nombre de tentatives de connexion avant d'être bloqué
// Template
const TEMPLATE_REP="themes/zz";
const FORMULAIRE_FILTRES_SPAM="example1|example2|example3";//liste de mots proposés aléatoirement pour limiter le spam
$header_flux[0]["url"]=SITE_URL."/blog/feed/rss";
$header_flux[0]["titre"]="Le blog du facteur (derniers articles).";
$header_flux[0]["type"]="rss";
// Gestion des erreurs (mettre 0 quand le site est en production -1 pour tout voir en cours de test/ développement)
error_reporting(0);

212
config/fr-fr.php Executable file
View File

@ -0,0 +1,212 @@
<?php
/**
* Toutes les textes pouvant s'afficher sur le site
* attention à ne pas modifier les __TEXTES_DEVANT_ÊTRE_REMPLACÉS__
* ou encore les urls des pages
*
* @author Fabrice PENHOËT
**/
// +++ Les messages envoyés à l'utilisateur.
// Validation création compte
define("COMPTE_VALIDATION_OBJET", "[".SITE_NOM."] Merci de valider votre inscription.");
define("COMPTE_VALIDATION_CORPS","Hello __NOM_UTILISATEUR__,\n\nMerci de valider votre inscription au site ".SITE_NOM.".\n\nPour ce faire, vous devez vous rendre sur la page suivante :\n".PAGE_VALIDATION_COMPTE."__ID__\n\nAttention vous n'avez que ".COMPTE_VALIDATION_MAX_DUREE." jours pour valider.\n\n".SITE_NOM);
define("COMPTE_VALIDATION_CORPS_HTML","<p>Hello __NOM_UTILISATEUR__,<br/><br/>Merci de valider votre inscription au site ".SITE_NOM." en utilisant le lien ci-dessous.<br/><br/>Ne tardez pas car vous n'avez <strong>que ".COMPTE_VALIDATION_MAX_DUREE." jours</strong> pour valider.</p>");
// Envoi mot de passe et autres infos suite validation du compte
define("ENVOI_MOT_PASSE_OBJET","[".SITE_NOM."] Bienvenue !");
define("ENVOI_MOT_PASSE_CORPS","Hello __NOM_UTILISATEUR__,\n\nVous venez de finaliser votre inscription au site ".SITE_NOM." et nous vous en remerçions :-)\n\nUn mot de passe vient de vous être attribué : __PASSE__\n\nIl vous sera nécessaire dès votre prochaine connexion.\n\nUne fois connecté vous pourrez le modifier en vous rendant sur la page suivante :\n".PAGE_MAJ_IDENTIFIANT."\n\nPour modifier/compléter vos autres informations :\n".PAGE_MAJ_INFOS_PERSO."\n\n".SITE_NOM."\n".SITE_URL);
define("ENVOI_MOT_PASSE_CORPS_HTML","<p>Hello __NOM_UTILISATEUR__,<br/><br/>Bienvenue ! vous venez de finaliser votre inscription à <strong>".SITE_NOM."</strong> :-)<br/><br/>Un mot de passe vient de vous être attribué : <strong>__PASSE__</strong><br/><br/>Notez-le bien car il vous sera nécessaire dès votre prochaine connexion.<br/><br/>Par ailleurs, voici quelques liens qui pourront vous être utiles sur ".SITE_NOM." :</p>");
// Envoi d'un nouveau mot de passe
define("ENVOI_NOUVEAU_MOT_PASSE_OBJET","[".SITE_NOM."] Votre nouveau mot de passe.");
define("ENVOI_NOUVEAU_MOT_PASSE_CORPS","Hello __NOM_UTILISATEUR__,\n\nSuite à votre demande, voici votre nouveau mot de passe pour le site ".SITE_NOM." : __PASSE__\n\nVous pouvez sans plus attendre vous en servir pour vous connecter au site :\n".PAGE_CONNEXION."\n\nUne fois connecté vous pourrez le modifier en vous rendant sur la page suivante :\n".PAGE_MAJ_IDENTIFIANT."\n\n".SITE_NOM."\n".SITE_URL);
define("ENVOI_NOUVEAU_MOT_PASSE_CORPS_HTML","<p>Hello __NOM_UTILISATEUR__,<br/><br/>Suite à votre demande, voici le nouveau mot de passe qui vient de vous être attribué : <strong>__PASSE__</strong><br/><br/>Vous pouvez sans plus attendre vous en servir pour vous connecter à ".SITE_NOM."<br/><br/><u>Une fois connecté</u>, vous pourrez modifier ce mot de passe selon votre préférence.</p>");
// Validation changement d'email
define("NOUVEL_EMAIL_VALIDATION_OBJET","[".SITE_NOM."] Valider votre nouvelle adresse.");
define("NOUVEL_EMAIL_VALIDATION_CORPS","Hello __NOM_UTILISATEUR__,\n\nVous venez de demander la modification de votre adresse email sur le site : ".SITE_NOM.".\n\nPour valider, merci de vous rendre sur la page suivante :\n".PAGE_VALIDATION_EMAIL."__ID__\n\nNe tardez pas car vous n'avez que ".NOUVEL_EMAIL_MAX_DUREE_VALIDATION." jours pour valider.\n\n".SITE_NOM);
define("NOUVEL_EMAIL_VALIDATION_CORPS_HTML","Hello __NOM_UTILISATEUR__,<br/><br/>Vous venez de demander la modification de votre adresse email sur <strong>".SITE_NOM."</strong>.<br/><br/>Pour valider, merci de cliquer sur le lien ci-dessous.<br/><br/>Ne tardez pas car vous n'avez que ".NOUVEL_EMAIL_MAX_DUREE_VALIDATION." jours pour le faire.");
// Connexion compte via un ticket
define("COMPTE_LIEN_CONNEXION_OBJET", "[".SITE_NOM."] Votre lien de connexion.");
define("COMPTE_LIEN_CONNEXION_CORPS","Hello __NOM_UTILISATEUR__,\n\nVous venez de demandez un lien de connexion au site ".SITE_NOM.".\n\nPour vous connectez, cliquez simplement sur le lien suivant :\n".PAGE_LIEN_CONNEXION_COMPTE."__ID__\n\n**Attention, pour des raisons de sécurité ce lien n'est valable que pendant ".COMPTE_LIEN_CONNEXION_MAX_DUREE." minutes après l'envoi de ce message**.\n\n".SITE_NOM);
define("COMPTE_LIEN_CONNEXION_CORPS_HTML","<p>Hello __NOM_UTILISATEUR__,<br/><br/>Suite à votre demande vous trouverez ci-dessous un lien vous permettant de vous connecter au site ".SITE_NOM.".<br/><br/><b>Ne tardez pas à l'utiliser</b>, car ce lien n'est valable que pendant ".COMPTE_LIEN_CONNEXION_MAX_DUREE." minutes après l'envoi de ce message.</p>");
// Procédure supppression compte
define("COMPTE_LIEN_SUPPRESSION_OBJET", "[".SITE_NOM."] Confirmer la suppression de votre compte.");
define("COMPTE_LIEN_SUPPRESSION_CORPS","Hello __NOM_UTILISATEUR__,\n\nVous venez de demander la suppression de votre compte sur ".SITE_NOM.".\n\nPour finaliser la procédure, merci de cliquer sur le lien suivant :\n".PAGE_LIEN_SUPPRESSION_COMPTE."__ID__\n\n**Attention, pour des raisons de sécurité ce lien n'est valable que pendant ".COMPTE_LIEN_SUPPRESSION_MAX_DUREE." heures après l'envoi de ce message**.\n\n".SITE_NOM);
define("COMPTE_LIEN_SUPPRESSION_CORPS_HTML","<p>Hello __NOM_UTILISATEUR__,<br/><br/>Suite à votre demande vous trouverez ci-dessous un lien vous permettant de confirmer la suppression de votre compte sur ".SITE_NOM.".<br/><br/><b>Ne tardez pas à l'utiliser</b>, car ce lien n'est valable que pendant ".COMPTE_LIEN_SUPPRESSION_MAX_DUREE." heures après l'envoi de ce message.</p>");
// Désactivation abonnement
define("DESACTIVATION_OBJET","[".SITE_NOM."] Désactivation d'un de vos abonnements.");
define("DESACTIVATION_CORPS","Hello __NOM_UTILISATEUR__,\n\nIl semble que votre abonnement \"__NOM_ABO__\" ne vous intéresse plus.\n\nAussi cet abonnement vient d'être désactivé, c'est-à-dire que vous ne recevrez plus d'email le concernant.\n\nÀ tout moment vous pouvez le réactiver en vous connectant à votre compte et en allant sur la page vous permettant de gérer vos abonnements :\n".PAGE_ABO_LISTE);
define("DESACTIVATION_CORPS_HTML","<p>Hello __NOM_UTILISATEUR__,<br/><br/>Il semble que votre abonnement <strong>__NOM_ABO__</strong> ne vous intéresse plus.<br/><br/>Aussi cet abonnement vient d'être désactivé, c'est-à-dire que vous ne recevrez plus d'email le concernant.<br/><br/>À tout moment vous pouvez le réactiver en vous connectant à votre compte et en allant sur la page vous permettant de gérer votre abonnement (lien ci-dessous).</p>");
// Nouvelle annonce à valider.
define("NOUVEAU_POST_OBJET","[".SITE_NOM."] Nouvelle annonce.");
define("NOUVEAU_POST_CORPS","Hello __NOM_UTILISATEUR__,\n\nUne nouvelle annonce vient d'être postée dans le bureau de poste : \"__NOM_HUB__\".\n\nVous devez maintenant la valider pour permettre sa diffusion :\n".PAGE_MAJ_POSTS."?id_post=__ID__");
define("NOUVEAU_POST_CORPS_HTML","<p>Hello __NOM_UTILISATEUR__,<br/><br/>Une nouvelle annonce vient d'être postée dans le bureau de poste : <strong>__NOM_HUB__</strong>.</p>");
// Validation publication de son annonce
define("NOUVEAU_POST_VALIDATION_OBJET","[".SITE_NOM."] Merci de valider votre annonce.");
define("NOUVEAU_POST_VALIDATION_CORPS","Hello __NOM_UTILISATEUR__,\n\nMerci de valider l'annonce que vous venez de publier sur le site ".SITE_NOM.".\n\nPour ce faire, vous devez vous rendre sur la page suivante :\n".PAGE_VALIDATION_POST."__ID__\n\nAttention vous n'avez que ".COMPTE_VALIDATION_MAX_DUREE." jours pour valider.\n\n".SITE_NOM);
define("NOUVEAU_POST_VALIDATION_CORPS_HTML","<p>Hello __NOM_UTILISATEUR__,<br/><br/>Merci de valider l'annonce que vous venez de publier sur le site ".SITE_NOM.".<br/><br/>Ne tardez pas car vous n'avez <strong>que ".COMPTE_VALIDATION_MAX_DUREE." jours</strong> pour la valider.</p>");
// Prévenir qu'une a été validée.
define("POST_VALIDE_OK_OBJET","[".SITE_NOM."] Votre annonce a été validée.");
define("POST_VALIDE_OK_CORPS_SANS_LIEN","Hello __NOM_UTILISATEUR__,\n\nCe message vous informe que votre annonce a été validée et va donc commencer à être diffusée aux abonnés du site ".SITE_NOM.".");
define("POST_VALIDE_OK_CORPS","Hello __NOM_UTILISATEUR__,\n\nCe message vous informe que votre annonce a été validée et sera don diffusée aux abonnés du site ".SITE_NOM.".\n\nVous pouvez la voir sur la page suivante :\n".PAGE_REPERTOIRE_POST_INFO."__ID__/");
define("POST_VALIDE_OK_CORPS_HTML","<p>Hello __NOM_UTILISATEUR__,<br/><br/>Ce message vous informe que votre annonce vient d'être validée et sera donc diffusée aux abonnés du site ".SITE_NOM.".</p>");
// +++ Les messages d'erreur
// Général
define("ERREUR_PARAM_MANQUANT","Paramètres manquants.");
define("ERREUR_PARAM_FORMAT","Paramètres n'ayant pas le bon format.");
define("ERREUR_PARAM_AUTORISES","Paramètres ayant un contenu non autorisé.");
define("ERREUR_IP","Une adresse IP non valide a été détectée.");
define("ERREUR_CHIFFREMENT","Erreur chiffrement d'un mot de passe.");
define("ERREUR_ACTION_NON_AUTORISEE","Une action a été lancée par un utilisateur non autorisé.");
// Fichiers, répertoires, images
define("ERREUR_FICHIER_EXISTE","Aucun fichier trouvé à l'adresse fournie.");
define("ERREUR_FICHIER_ECRITURE","Impossible d'écrire dans le fichier.");
define("ERREUR_FICHIER_CREA","Impossible de créer le fichier.");
define("ERREUR_FICHIER_SUPPR","Impossible de supprimer le fichier.");
define("ERREUR_FICHIER_POIDS","Le fichier téléchargé est trop lourd.");
define("ERREUR_REP_EXISTE","Aucun répertoire trouvé à l'adresse fournie.");
define("ERREUR_REP_CREA","Impossible de créer le répertoire.");
define("ERREUR_REP_DROIT","Vous n'avez pas les droits nécessaires sur ce répertoire.");
define("ERREUR_REP_VALIDE","Il ne s'agit pas d'un répertoire.");
define("ERREUR_IMAGE_VALIDE","Le fichier image ne semble pas valide.");
define("ERREUR_IMAGE_CREATION","Le fichier image n'a pu être créé.");
define("ERREUR_IMAGE_FORMAT","Le fichier image à un format non accepté.");
// Dates
define("ERREUR_DATE_FORMAT","La date n'a pas le format souhaité : ".DATE_FORMAT);
define("ERREUR_DATE_VALIDE","La date n'est pas valide.");
define("ERREUR_DATE_INTERVAL","L'intervalle entre les dates n'est pas correct.");
// Connexion base de données
define("ERREUR_CONNEXION_ABSENTE","Absence de connexion à la base de données.");
define("ERREUR_SQL_CHAMP_RECHERCHE","Le champs de la recherche n'est pas correct.");
define("ERREUR_SQL_ENREG_ABSENT","Enregistrement non trouvé.");
define("ERREUR_SQL_AJOUT","L'enregistrement a échoué.");
define("ERREUR_SQL_MAJ","La mise à jour a échoué.");
define("ERREUR_SQL_SUPPR","La suppression a échoué.");
define("ERREUR_SQL_DOUBLON","Un enregistrement similaire existe déjà.");
define("ERREUR_SQL_RECHERCHE","Aucun résultat pour votre recherche.");
// Cache
define("ERREUR_CACHE_REP","La constante fournissant le chemin du répertoire du cache n'a pas été définie.");
define("ERREUR_CACHE_ECRITURE","Erreur d'écriture du cache.");
define("ERREUR_CACHE_CONTENU_ABSENT","Aucun contenu trouvé à écrire dans le fichier.");
// email
define("ERREUR_EMAIL_ENVOI","Erreur envoi email.");
define("ERREUR_EMAIL_ADRESSE_FORMAT","Le format de l'adresse email fournie n'est pas correct.");
// Journal
define("ERREUR_JOURNAL_REP","La constante fournissant le chemin du répertoire du journal n'a pas été définie.");
define("ERREUR_JOURNAL_ECRITURE","Erreur d'écriture dans le journal.");
define("ERREUR_JOURNAL_LECTURE","Erreur de lecture du journal.");
define("ERREUR_JOURNAL_SUPPR","Erreur durant la suppression du journal.");
define("ERREUR_JOURNAL_LIGNE","Le numéro de ligne n'est pas valide.");
// Infos utilisateurs
//-- contrôle données saisies
define("ERREUR_UTILISA_CHAMPS_ABSENTS","Merci de compléter tous les champs obligatoires.");
define("ERREUR_IMPREVUE","Une erreur imprévue est survenue. Si ce problème persiste, n'hésitez pas à nous contacter en nous expliquant ce que vouliez faire.");
define("ERREUR_UTILISA_PSEUDO_LONG","Merci de fournir un pseudo comptant entre ".UTILISATEUR_MIN_PSEUDO." et ".UTILISATEUR_MAX_PSEUDO." caractères.");
define("ERREUR_UTILISA_PSEUDO_LIBRE","Le pseudo saisi est déjà utilisé par un autre utilisateur.");
define("ERREUR_UTILISA_PASSE_LONG","Le mot de passe doit compter entre ".UTILISATEUR_MIN_PASSE." et ".UTILISATEUR_MAX_PASSE." caractères.");
define("ERREUR_UTILISA_PASSE_CORRECT","Le mot de passe saisi ne semble pas correct.");
define("ERREUR_UTILISA_EMAIL_LONG","Merci de fournir un email comptant au maximum ".UTILISATEUR_MAX_EMAIL." caractères.");
define("ERREUR_UTILISA_EMAIL_LIBRE","L'adresse email saisie est déjà utilisée pour un autre compte utilisateur.<br/>La même adresse ne peut être utilisée par plusieurs comptes.");
define("ERREUR_UTILISA_CONNEXION","Les identifiants saisis ne sont pas corrects. Si vous avez oublié votre mot de passe, vous pouvez <a href='".PAGE_GET_PASSE."'>demander à en recevoir un nouveau par email</a>.");
define("ERREUR_UTILISA_EMAIL_CONNEXION","Aucun compte n'a été trouvé pour l'adresse email fournie. Si ce n'est déjà fait, vous pouvez <a href='".PAGE_INSCRIPTION."'>créer votre compte ici</a>.");
define("ERREUR_UTILISA_PRESENTATION_LONG","Votre texte de présentation dépasse les ".UTILISATEUR_MAX_PRESENTATION." caractères possibles.");
define("ERREUR_UTILISA_CP_LONG","Vous devez saisir au moins 3 caractères du nom de la ville ou encore son code postal.");
define("ERREUR_UTILISA_CP_VILLE_ABSENTE","Aucune ville n'a été trouvée pour votre saisie.");
define("ERREUR_UTILISA_CP_PLUSIEURS_VILLES","Merci de sélectionnez votre ville parmi les __NB__ trouvées pour votre saisie : ");
define("ERREUR_UTILISA_ANTISPAM","Vous n'avez pas saisi la bonne lettre dans le champ antispam. La lettre demandée est : ");
define("ERREUR_UTILISA_CGU","Merci de valider les CGU du site.");
define("ERREUR_UTILISA_ENVOI_MESSAGE","Une erreur est survenue durant l'envoi de votre message. Vous pouvez nous écrire directement sur l'adresse suivante :".EMAIL_CONTACT);
define("ERREUR_UTILISA_ENVOI_MESSAGE_PERSO","Une erreur imprévue est survenue durant l'envoi de votre message.");
define("MSG_UTILISA_CREATION_COMPTE_VALID","Votre demande d'inscription vient d'être enregistrée.<br>Vous devez cliquer sur le lien qui vient de vous être envoyé par email pour finaliser votre inscription.<br>En attendant vous pouvez déjà créer votre 1er abonnement en sélectionnant une thématique ci-dessous.");
define("MSG_UTILISA_GET_PASSE_OK","Votre mot de passe vient de vous être envoyé sur votre adresse email.<br>Si vous ne l'avez pas reçu, attendez quelques minutes et vérifier le dossier spam de votre messagerie internet.<br>Si le problème persiste, <a href=\"".PAGE_CONTACT."\">contactez-nous</a> pour obtenir de l'aide.");
define("MSG_UTILISA_GET_LIEN_CONNEXION_OK","Suite à votre demande, <b>un lien de connexion au site vient de vous être envoyé sur votre adresse email</b>.<br>Si vous ne l'avez pas reçu, attendez quelques minutes et vérifier le dossier spam de votre messagerie internet.<br>Si le problème persiste, <a href=\"".PAGE_CONTACT."\">contactez-nous</a> pour obtenir de l'aide.");
define("MSG_UTILISA_GET_LIEN_SUPPRESSION_OK","Suite à votre demande, <b>un lien vous permettant de finaliser la suppression de votre compte vient de vous être envoyé sur votre adresse email</b>.<br>Si vous ne l'avez pas reçu, attendez quelques minutes et vérifier le dossier spam de votre messagerie internet.<br>Si le problème persiste, <a href=\"".PAGE_CONTACT."\">contactez-nous</a> pour obtenir de l'aide.");
define("MSG_UTILISA_MAJ_IDENTIFIANTS_VALID","La mise à jour a bien été enregistrée.<br>Si vous avez modifié votre adresse email, vous devez cliquer sur le lien qui vous a été envoyé sur la nouvelle adresse pour qu'elle soit prise en compte.");
define("MSG_UTILISA_MAJ_INFOS_VALID","Votre mise à jour a bien été enregistrée.");
define("MSG_UTILISA_TELECHARGE_VALID","Votre fichier a bien été téléchargé.");
define("MSG_UTILISA_MAJ_SUPPR_VALID","Votre demande de suppression a bien été prise en compte.");
define("MSG_UTILISA_ENVOI_MESSAGE_VALID","Votre message a bien été envoyé.");
define("MSG_UTILISA_ENVOI_POST_VALID_CREA_COMPTE","Votre actualité a bien été enregistrée.<br><u>Vous devez maintenant cliquer sur le lien qui vient d'être envoyé sur votre adresse email</u> pour que votre demande soit traitée.");
define("MSG_UTILISA_ENVOI_POST_VALID","Votre actualité a bien été enregistrée. Merci de votre suggestion.<br>Si votre proposition est acceptée, un email vous informera du début de sa diffusion.<br>En attendant et si ce n'est déjà fait, vous pouvez <u><a href='".PAGE_MAJ_INFOS_PERSO."' title='votre présentation'>modifier les informations de votre profil (présentation, photo...)</a></u> qui sont visibles par les autres abonnés ".SITE_NOM." consultant votre annonce.");
define("MSG_ADMIN_VALID","Ok !");
define("ERREUR_UTILISA_STATUTS_EXISTE","La constante fournissant les statuts possibles pour un utilisateur n'a pas été définie.");
define("ERREUR_UTILISA_STATUT_VALIDE","Un statut non prévu a été détecté.");
define("ERREUR_UTILISA_PSEUDO_ABSENT","Le pseudo n'a pas été attribué au préalable.");
define("ERREUR_UTILISA_ILLUS_ABSENT","Le nom du fichier illustration n'a pas été attribué au préalable.");
define("ERREUR_UTILISA_ORIGINES_EXISTE","La constante fournissant les différentes origines possibles pour un utilisateur n'a pas été définie.");
define("ERREUR_UTILISA_ORIGINE_VALIDE","Une origine de compte non prévue a été détectée.");
//-- procédures
define("ERREUR_UTILISA_PASSE_ENVOI","Aucun compte utilisateur n'a été trouvé pour l'adresse saisie. Pour créer un compte, <a href='".PAGE_INSCRIPTION."'>cliquez-ici</a>.");
define("ERREUR_UTILISA_PASSE_CREA","Une erreur est survenue durant la génération du mot de passe de l'utilisateur.");
define("ERREUR_UTILISA_VALIDATION_MESSAGE","Une erreur est survenue durant l'envoi du message vous permettant de valider votre compte.");
define("ERREUR_UTILISA_VALIDATION_LIEN","Votre lien de validation ne semble plus valide.<br>Peut-être avez-vous déjà validé votre compte ou encore avez-vous dépassé la durée limite de validation ?<br>Dans le premier cas, un message vous a été envoyé sur votre adresse email avec votre mot de passe.<br>Dans ce deuxième cas, vous pouvez <a href='".PAGE_INSCRIPTION."' title='Formulaire inscription'>renouveler votre inscription</a>.");
define("ERREUR_UTILISA_VALIDATION_EXPIRE","Il semble que votre compte utilisateur n'existe plus.<br>Peut-être avez-vous dépassé la durée d'expiration ?<br>Si c'est le cas vous pouvez <a href='".PAGE_INSCRIPTION."' title='Formulaire inscription'>renouveler votre inscription</a>.");
define("ERREUR_UTILISA_VALIDATION_DOUBLE","Vous avez déjà validé votre compte. Vous pouvez maintenant <a href='".PAGE_CONNEXION."' title='Formulaire connexion'>vous connecter</a> avec le mot de passe qui vous a été envoyé.");
define("ERREUR_UTILISA_VALIDATION_EMAIL_LIEN","Le lien de validation ne semble pas correct.<br>Soit vous avez déjà validé votre nouvelle adresse, soit vous avez dépassé la durée d'expiration.<br>Dans ce 2ième cas vous pouvez <a href='".PAGE_MAJ_IDENTIFIANT."'>renouveler votre demande</a>.");
define("MSG_UTILISA_VALIDATION_EMAIL_LIEN","Votre nouvelle adresse email a bien été enregistrée.");
define("ERREUR_UTILISA_CREA_LIEN_CONNEXION","Une erreur imprévue est survenue durant l'envoi du lien vous permettant de vous connecter à votre compte.");
define("ERREUR_UTILISA_LIEN_CONNEXION","Votre lien de connexion ne semble plus valide. Vous pouvez en demander un nouveau <a href='".PAGE_CONNEXION."'>en cliquant ici</a>.");
define("ERREUR_UTILISA_CREA_LIEN_SUPPRESSION","Une erreur imprévue est survenue durant l'envoi du lien vous permettant de vous supprimer votre compte.");
define("ERREUR_UTILISA_LIEN_SUPPRESSION","Votre lien de suppression ne semble plus valide. Vous pouvez relancer la suppression de votre compte en <a href='".PAGE_MAJ_INFOS_PERSO."'>en cliquant ici</a>.");
define("ERREUR_UTILISA_VALIDATION_POST_LIEN","Le lien de validation ne semble pas correct.<br>Soit vous avez déjà validé votre annonce, soit vous avez dépassé la durée d'expiration.<br>Dans ce 2ième cas vous pouvez <a href='".PAGE_AJOUT_POST."'>renouveler votre demande</a>.");
//-- agenda
define("ERREUR_AGENDA_DESIGNATION_LONG","Merci de fournir un intitulé comptant entre ".AGENDA_MIN_DESIGNATION." et ".AGENDA_MAX_DESIGNATION." caractères.");
define("ERREUR_AGENDA_DATE_DEBUT_FORMAT","Veillez saisir une date de début au format : ".DATE_FORMAT);
define("ERREUR_AGENDA_DATE_FIN_FORMAT","Veillez saisir une date de fin au format : ".DATE_FORMAT);
define("ERREUR_AGENDA_DATE_FIN_DEBUT_ABSENT","Vous devez saisir la date de début avant la date de fin.");
define("ERREUR_AGENDA_DATE_FIN_PASSE","La date de fin ne doit pas être antérieure à celle d'aujourd'hui.");
define("ERREUR_AGENDA_DATE_FIN_AVANT_DEBUT","Vous ne pouvez enregistrer une date de fin précédent celle de début.");
//-- liens, posts, urls, flux...
define("ERREUR_POST_ANCRE_LONG","Merci de fournir un intitulé comptant entre __MIN__ et __MAX__ caractères.");
define("ERREUR_POST_DATE_DIFFUSION_FORMAT","Veillez saisir une date de début de diffusion au format : ".DATE_FORMAT);
define("ERREUR_POST_DATE_EXPIRATION_FORMAT","Veillez saisir une date d'expiration au format : ".DATE_FORMAT);
define("ERREUR_POST_DATE_DIFFUSION","La date de début de diffusion doit être postérieure à celle d'aujourd'hui.");
define("ERREUR_POST_DATE_EXPIRATION","La date d'expiration doit être postérieure d'au moins 7 jours à celle de début de diffusion.");
define("ERREUR_POST_ANCRE_ABSENT","Le titre de l'annonce doit être attribué au préalable.");
define("ERREUR_LIEN_URL_LONG","Merci de fournir une adresse internet (url) comptant entre __MIN__ et __MAX__ caractères.");
define("ERREUR_LIEN_URL_FORMAT","Le format de l'adresse internet (url) fournie ne semble pas correct.");
define("ERREUR_POST_ANNONCE_LONG","Merci de saisir une annonce comptant entre __MIN__ et __MAX__ caractères (actuellement __NB__ caractères).");
define("ERREUR_FLUX_MEMO_LONG","Merci de fournir un mémo ne comptant pas plus de __MAX__ caractères.");
define("ERREUR_LIEN_CONTENU_EXISTE","Aucun contenu trouvé à l'adresse fournie.");
define("ERREUR_FLUX_INFOS","Pas de flux à l'adresse fournie ou son format n'est pas correct.");
define("ERREUR_SOURCE_SUPPR_FLUX","Impossible de supprimer cette source, au moins un flux lui étant associé.");
define("ERREUR_RUBRIQUE_NOM_LONG","Merci de fournir un intitulé comptant entre __MIN__ et __MAX__ caractères.");
define("ERREUR_RUBRIQUE_DESCRIPTION_LONG","Merci de fournir une description comptant entre __MIN__ et __MAX__ caractères.");
define("ERREUR_RUBRIQUE_SUPPR_HUB","Impossible de supprimer cette rubrique qui sert à classer au moins un bureau de poste.");
define("ERREUR_RUBRIQUE_MERE","Impossible de classer une rubrique dans une de ses sous-rubriques (ou elle-même).");
define("ERREUR_RUBRIQUE_SUPPR_SUB","Impossible de supprimer cette rubrique qui sert à classer au moins une autre rubrique.");
define("ERREUR_FLUX_LECTURE","Erreur de lecture d'un flux.");
define("ERREUR_FLUX_VIDE","Flux vide.");
define("ERREUR_FLUX_DOUBLON","Le flux d'actualité existe déjà dans le répertoire.");
define("ERREUR_RECHERCHE_LONG","Votre recherche doit compter entre ".FLUX_RECHERCHE_MIN." et ".FLUX_RECHERCHE_MAX." caractères.");
define("ERREUR_RECHERCHE_MAX_RESULTATS","+ de ".FLUX_RECHERCHE_MAX_RESULTATS." résultats pour votre recherche. Merci de lancer une recherche plus précise.");
define("ERREUR_FLUX_SUPPR_ABO","Impossible de supprimer ce flux qui a au moins un abonné.");
define("ERREUR_ABO_DESIGNATION_LONG","Merci de fournir un intitulé comptant entre __MIN__ et __MAX__ caractères.");
define("ERREUR_ABO_NB_MAX_LIENS_ENTIER","Vous devez saisir un nombre entier pour le nombre maximum de liens par envoi.");
define("ERREUR_ABO_NB_MAX_LIENS_VALEUR","Merci de fournir un nombre maximum d'actualités par envoi compris entre __MIN__ et __MAX__.");
//-- hubs
define("ERREUR_HUB_NOM_LONG","Merci de fournir un nom pour le hub comptant entre __MIN__ et __MAX__ caractères.");
define("ERREUR_HUB_MEMO_LONG","Merci de fournir un mémo ne comptant pas plus de __MAX__ caractères.");
define("ERREUR_HUB_DOUBLON","Un hub différent portant le même nom existe déjà.");
define("ERREUR_HUB_SUPPR_ABO","Impossible de supprimer ce hub qui a au moins un abonné.");
define("MSG_HUB_AJOUT","Un nouveau hub vient d'être créé par un utilisateur : ");
//-- annonces promotionnelles
define("ERREUR_ANNONCE_TITRE_LONG","Merci de saisir un titre ne comptant pas plus de __MAX__ caractères.");
define("ERREUR_ANNONCE_TEXTE_LONG","Merci de saisir une annonce ne comptant pas plus de __MAX__ caractères.");
define("ERREUR_ANNONCE_LIEN_URL_LONG","Merci de saisir une url ne comptant pas plus de __MAX__ caractères.");
define("ERREUR_ANNONCE_LIEN_ANCRE_LONG","Merci de saisir une ancre pour le lien de l'annonce ne comptant pas plus de __MAX__ caractères.");
define("ERREUR_ANNONCE_COMMENTAIRE_LONG","Merci de saisir un commentaire ne comptant pas plus de __MAX__ caractères.");
$Jours_semaine=array("Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi");

55
config/url.page.php Executable file
View File

@ -0,0 +1,55 @@
<?php
/* Les diverses pages de l'application
* toute modification doit être répercutée dans le index.php
* */
define("PAGE_INSCRIPTION",SITE_URL."/compte/inscription.html");
define("PAGE_VALIDATION_COMPTE",SITE_URL."/compte/v/");
define("PAGE_CONNEXION",SITE_URL."/compte/connexion.html");
define("PAGE_LIEN_CONNEXION_COMPTE",SITE_URL."/compte/l/");
define("PAGE_LIEN_SUPPRESSION_COMPTE",SITE_URL."/compte/s/");
define("PAGE_GET_PASSE",SITE_URL."/compte/nouveau_passe.html");
define("PAGE_DECONNEXION",SITE_URL."/compte/deconnexion.html");
define("PAGE_ACCUEIL",SITE_URL."/accueil.html");
define("PAGE_CONTACT",SITE_URL."/contact.html");
define("PAGE_PLAN",SITE_URL."/plan.html");
define("PAGE_404",SITE_URL."/404.html");
define("PAGE_MAJ_IDENTIFIANT",SITE_URL."/compte/identifiant_maj.html");
define("PAGE_VALIDATION_EMAIL",SITE_URL."/compte/ve/");
define("PAGE_MAJ_INFOS_PERSO",SITE_URL."/compte/infos_maj.html");
define("PAGE_MAJ_ILLUSTRATION",SITE_URL."/compte/illustration_maj.html");
define("PAGE_MAJ_ABONNEMENTS",SITE_URL."/compte/abonnements_maj.html");
define("PAGE_REPERTOIRE_ACCUEIL",SITE_URL."/rubriques/index.html");
define("PAGE_REPERTOIRE_RUBRIQUE_INFO",SITE_URL."/rubrique/");
define("PAGE_REPERTOIRE_FLUX_INFO",SITE_URL."/flux/");
define("PAGE_REPERTOIRE_HUB_INFO",SITE_URL."/BP/");
define("PAGE_AJOUT_POST",SITE_URL."/annonce/a/");
define("PAGE_AJOUT_POST_ILLUSTRATION",SITE_URL."/annonce/a/illustration/");
define("PAGE_AJOUT_POST_CONSIGNES",SITE_URL."/annonce/consignes/");
define("PAGE_VALIDATION_POST",SITE_URL."/annonce/v/");
define("PAGE_REPERTOIRE_POST_INFO",SITE_URL."/annonce/");
define("PAGE_UTILISATEUR_INFO",SITE_URL."/auteur/");
define("PAGE_UTILISATEUR_CONTACT",SITE_URL."/ecrire/");
define("PAGE_ABO_CREA_RUBRIQUE",SITE_URL."/rubriques/abo/");
define("PAGE_ABO_CREA_VILLE",SITE_URL."/rubriques/local/abo/");
define("PAGE_ABO_CREA_HUB",SITE_URL."/BP/abo/");
define("PAGE_ABO_NOUVEAU_FLUX",SITE_URL."/flux/abo/n/");
define("PAGE_ABO_MAJ",SITE_URL."/abo/maj/");
define("PAGE_ABO_AFFICHE",SITE_URL."/abo/voir/");
define("PAGE_ABO_LISTE",SITE_URL."/abo/");
define("PAGE_ABSENCE_MAJ",SITE_URL."/absences/maj/");
define("PAGE_ABSENCES_LISTE",SITE_URL."/absences/");
define("PAGE_MAJ_SOURCE",SITE_URL."/sources/maj.html");
define("PAGE_MAJ_RUBRIQUES",SITE_URL."/rubriques/maj.html");
define("PAGE_MAJ_FLUX",SITE_URL."/flux/maj.html");
define("PAGE_MAJ_HUB",SITE_URL."/hub/maj.html");
define("PAGE_MAJ_HUB_ILLUSTRATION_ADMIN",SITE_URL."/hub/admin_illustration_maj.html");
define("PAGE_MAJ_POSTS",SITE_URL."/posts/maj.html");
define("PAGE_MAJ_ILLUSTRATION_POST",SITE_URL."/posts/illustration_maj.html");
define("PAGE_MAJ_ANNONCES",SITE_URL."/annonces/maj.html");
define("PAGE_MAJ_COMPTES",SITE_URL."/comptes/maj.html");
define("PAGE_STATS",SITE_URL."/stats/");
define("PAGE_STATS_EMAIL",SITE_URL."/stats/email/");
define("PAGE_CLIC_LIEN",SITE_URL."/go/");
define("PAGE_AFFICHE_LOGO",SITE_URL."/img/");
define("PAGE_CGU",SITE_URL."/cgu.html");
define("PAGE_INFOS_LEGALES",SITE_URL."/infos-legales.html");

41
cron/cron-index-bis.php Normal file
View File

@ -0,0 +1,41 @@
<?php
/**
* Script activé toutes les minutes lançant différentes tâches planifiées.
*
**/
if(!isset($DT_fuseau))
{
set_time_limit(6000);
require_once(__DIR__."/../config/config.php");
require_once(__DIR__."/../config/config.perso.php");
require_once(__DIR__."/../config/url.page.php");
require_once(__DIR__."/../config/".SITE_LANG.".php");
require_once(__DIR__."/../divers/utilitaires.php");
}
if(!empty(MSG_MAINTENANCE))
exit();
ini_set("display_errors",-1);
$heure=date("H");
$minute=date("i");
if(empty($Bd))
require(__DIR__."/../modele/connexion-bd.php");
if((isset_connexion(__FILE__,__LINE__)===false)) exit();
require_once(__DIR__."/../modele/FclFlux_utilisateur.php");
$import=FclFlux_utilisateur::sauve_journal_affichages();
//envoi des mailings
require_once(__DIR__."/../modele/FclFlux_abonnement.php");
$time_debut=microtime(true);
$envoi=FclFlux_abonnement::envoi_mailing(20);
$time_fin=microtime(true);
$duree=round($time_fin-$time_debut,2);
if(!empty($envoi))
echo "$envoi emails viennent d'être envoyés en $duree secondes.";
else
echo "Aucun envoi.";
$Bd=null;
exit();

133
cron/cron-index.php Executable file
View File

@ -0,0 +1,133 @@
<?php
/**
* Script activé toutes les minutes lançant différentes tâches planifiées.
*
**/
if(!isset($DT_fuseau))
{
set_time_limit(6000);
require_once(__DIR__."/../config/config.php");
require_once(__DIR__."/../config/config.perso.php");
require_once(__DIR__."/../config/url.page.php");
require_once(__DIR__."/../config/".SITE_LANG.".php");
require_once(__DIR__."/../divers/utilitaires.php");
}
if(!empty(MSG_MAINTENANCE))
exit();
ini_set("display_errors",1);
$heure=date("H");
$minute=date("i");
// lancé toutes les 24H (ici à 3h24')
if(($heure==3)&&($minute==24))
{
if(empty($Bd))
require(__DIR__."/../modele/connexion-bd.php");
if((isset_connexion(__FILE__,__LINE__)===false)) exit();
require_once(__DIR__."/../modele/FclFlux_post.php");
$nettoye2=FclFlux_post::supprime_anciens_posts();
require_once(__DIR__."/../modele/FclFlux_utilisateur.php");
$nettoye_u=FclFlux_utilisateur::supprime_anciens_utilisateurs();
$nettoye_stats=FclFlux_utilisateur::nettoye_logs_affichages();
require_once(__DIR__."/../modele/FclFlux_annonces.php");
$import_stats=FclFlux_annonce::sauve_stats_annonces();
require_once(__DIR__."/../modele/FclFlux_hub.php");
$nb_hubs_actualises=FclFlux_hub::actualise_liste_posts_date_diffusion();
$time_limite=time()-3600*24*30;
$date_limite=date("d/m/Y",$time_limite);
$nettoye_journal=journal_erreurs::vide_journal($date_limite);
}
// le journal de l'admin tous les matins avec les croissants :-)
if(($heure==6)&&($minute==49))
{
if(empty($Bd))
require(__DIR__."/../modele/connexion-bd.php");
require_once(__DIR__."/../modele/FclFlux_utilisateur.php");//inclut également la classe journal_erreurs
journal_erreurs::get_stats_journal_admin();
}
// lancé toutes les heures
if($minute==31)
{
if(empty($Bd))
require(__DIR__."/../modele/connexion-bd.php");
if((isset_connexion(__FILE__,__LINE__)===false)) exit();
require_once(__DIR__."/../modele/FclFlux_utilisateur.php");
$nettoye_fichiers=FclFlux_utilisateur::supprime_fichiers_temp();
$nettoye_sessions=FclFlux_utilisateur::sauve_sessions();
}
// lancé 4 fois / jour
if((strpos("[09][13][15][19]","[$heure]")!==false)&&($minute=="35"))
{
if(empty($Bd))
require(__DIR__."/../modele/connexion-bd.php");
if((isset_connexion(__FILE__,__LINE__)===false)) exit();
require_once(__DIR__."/../modele/FclFlux_abonnement.php");
// Les décalages horaires.
$maj_decalages=FclFlux_abonnement::actualise_decalages_horaires();
// Les périodes d'absence.
$maj_absences=FclFlux_abonnement::actualise_absences();
// Les abonnements n'ayant plus de flux...
$suppr_abos=FclFlux_abonnement::nettoye_abonnements_sans_hub();
// Désactivation des abonnements fantômes + suppression des anciens envois
$desactive_abos=FclFlux_abonnement::desactivation();
if(!empty($desactive_abos))
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,"$desactive_abos abonnements viennent d'être désactivés.","cron"));
}
// 6 fois / heure
if(strpos("[07][17][27][37][47][57]","[$minute]")!==false)
{
if(empty($Bd))
require(__DIR__."/../modele/connexion-bd.php");
if((isset_connexion(__FILE__,__LINE__)===false)) exit();
require_once(__DIR__."/../modele/FclFlux_post.php");
$import=FclFlux_post::sauve_journal_clics();
require_once(__DIR__."/../modele/FclFlux_annonces.php");
$import_a=FclFlux_annonce::sauve_journal_clics();
//import flux maj quotidienne
require_once(__DIR__."/../modele/FclFlux_flux.php");
$time_debut=microtime(true);
$import=FclFlux_flux::importation(10,"J");
$time_fin=microtime(true);
$duree=round($time_fin-$time_debut,2);
//if(!empty($import))
// $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,"$import flux (J) viennent d'être actualisés en $duree secondes."));
}
// 6 fois / heure
if(strpos("[03][13][23][33][43][53]","[$minute]")!==false)
{
if(empty($Bd))
require(__DIR__."/../modele/connexion-bd.php");
if((isset_connexion(__FILE__,__LINE__)===false)) exit();
//import flux maj toutes les heures
require_once(__DIR__."/../modele/FclFlux_flux.php");
$time_debut=microtime(true);
$import=FclFlux_flux::importation(10,"H");//mise à jour des derniers posts des hubs ?
$time_fin=microtime(true);
$duree=round($time_fin-$time_debut,2);
//if(!empty($import))
//$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,"$import flux (H) viennent d'être actualisés en $duree secondes."));
}
// 12 fois / heure
if(strpos("[00][05][10][15][20][25][30][35][40][45][50][55]","[$minute]")!==false)
{
if(empty($Bd))
require(__DIR__."/../modele/connexion-bd.php");
if((isset_connexion(__FILE__,__LINE__)===false)) exit();
require_once(__DIR__."/../modele/FclFlux_utilisateur.php");
$import=FclFlux_utilisateur::sauve_journal_affichages();
//envoi des mailings
require_once(__DIR__."/../modele/FclFlux_abonnement.php");
//$time_debut=microtime(true);
$envoi=FclFlux_abonnement::envoi_mailing(10);
//$time_fin=microtime(true);
///echo $time_fin;
//$duree=round($time_fin-$time_debut,2);
//if(!empty($envoi))
// $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,"$envoi emails viennent d'être envoyés en $duree secondes.","cron"));
//else
// echo "Aucun envoi.";
}
$Bd=null;
exit();

14
cron/cron-index2-bis.php Normal file
View File

@ -0,0 +1,14 @@
<?php
/**
* Script lancé toutes les minutes lançant différentes tâches planifiées.
*
**/
ini_set("display_errors",-1);
set_time_limit(6000);
require_once(__DIR__."/../config/config.php");
require_once(BASE_REP."../config/config.perso.php");
require_once(BASE_REP."../config/url.page.php");
require_once(BASE_REP."../config/".SITE_LANG.".php");
require_once(BASE_REP."../divers/utilitaires.php");
require_once("cron-index-bis.php");

22
cron/cron-index2.php Executable file
View File

@ -0,0 +1,22 @@
<?php
/**
* Script lancé toutes les minutes lançant différentes tâches planifiées.
*
**/
ini_set("display_errors",1);
set_time_limit(6000);
require_once(__DIR__."/../config/config.php");
require_once(BASE_REP."../config/config.perso.php");
require_once(BASE_REP."../config/url.page.php");
require_once(BASE_REP."../config/".SITE_LANG.".php");
require_once(BASE_REP."../divers/utilitaires.php");
if($page[2]!=AUTORISE_CRON)
{
$ip=getIp();
if((envoi_message(EMAIL_ADMIN,EMAIL_ADMIN,"[".SITE_NOM."] Alerte","Appel non autorisé aux tâches planifiées : ".$ip." ".AUTORISE_CRON))===false)
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_EMAIL_ENVOI));
exit();
}
require_once("cron-index.php");

41
ctrl/abo_mail_affichage.php Executable file
View File

@ -0,0 +1,41 @@
<?php
/**
* Script enregistrant dans un fichier les affichages d'un email via l'appel du logo
* qu'il faut donc afficher...
*
**/
if(empty($page[1]))
exit();
$param=explode("_",$page[1]);
if((empty($param[0]))||(empty($param[1])))
exit();
$id_abonnement=intval($param[0]);
$time_affiche=intval(str_replace(".jpg","",$param[1]));
$now=time();
if(($time_affiche<($now-365*3600*24))||($time_affiche>$now))
exit();
//je cherche les infos de l'abonnement.
require_once("../modele/FclFlux_abonnement.php");
$abo=new FclFlux_abonnement();
$abo->id_abonnement=$id_abonnement;
$infos_abo=$abo->get_infos_cache(false);//je ne force pas la création du cache pour éviter sql
if(empty($infos_abo))
exit();
if(empty($infos_abo["auteur_id"]))
exit();
$user=new FclFlux_utilisateur();
$user->id_utilisateur=intval($infos_abo["auteur_id"]);
$page="http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
$user->ajout_journal_affichage($page,"email");
unset($user);
unset($abo);
//après tous ces tests, le logo bien mérité !
header('Content-Type: image/jpg');
$Mail_html_url_logo=SITE_URL."/".TEMPLATE_REP."/mail/logo-header.jpg";
$mois=date('m');
$jour=intval(date('d'));
if(($mois=="12")&&($jour>10)||($mois=="01")&&($jour<7))
$code=file_get_contents(SITE_URL."/".TEMPLATE_REP."/mail/logo-header-noel.jpg");
else
$code=file_get_contents(SITE_URL."/".TEMPLATE_REP."/mail/logo-header.jpg");
echo $code;

14
ctrl/accueil.php Executable file
View File

@ -0,0 +1,14 @@
<?php
//home sweet home...
require("../modele/FclFlux_utilisateur.php");
$user=new FclFlux_utilisateur();
if($user->test_session())
{//si connecté l'utilisateur est envoyé vers sa page d'accueil personnalisée
header("Location:".PAGE_ACCUEIL);
exit();
}
else
{
unset($user);
include("../vues/accueil.php");
}

96
ctrl/accueil_compte.php Executable file
View File

@ -0,0 +1,96 @@
<?php
/* Page d'accueil de l'utilisateur connecté
* Différente suivant si administrateur ou simple utilisateur...
* Dans ce deuxième cas, on liste quelques liens pour chacun des abonnements du gus
*/
require_once("../modele/FclFlux_utilisateur.php");
// utilisateur connecté ?
$user=new FclFlux_utilisateur();
if(!$user->test_session(false))
{
unset($user);
$redirige=PAGE_ACCUEIL;
FclFlux_utilisateur::crea_cookie_redirection($redirige,1);
header("Location:".PAGE_CONNEXION);
exit();
}
if($_SESSION["statut"]=="utilisateur")
{
// liste des abonnements + derniers liens importés
require_once("../modele/FclFlux_abonnement.php");
$abos=FclFlux_abonnement::get_liste_abo_cache($user,CREA_CACHE);
if(empty($abos))
{
$_SESSION["message"]="Vous n'avez aucun abonnement pour l'instant. Vous pouvez créer le 1er en quelques instants ci-dessous.";
header("location:".PAGE_REPERTOIRE_ACCUEIL);
exit();
}
else
{
$mes_abos=array();$i=0;
$abo=new FclFlux_abonnement();
foreach($abos as $abo_infos)
{
$mes_abos[$i]["designation"]=$abo_infos["designation"];
$mes_abos[$i]["id_abonnement"]=$abo_infos["id_abonnement"];
$abo->id_abonnement=$abo_infos["id_abonnement"];
$liens_abo=$abo->get_liste_posts_cache(true);//liens des dernières 24H. La création du cache est forcée.
if(!empty($liens_abo))
$mes_abos[$i]["liens"]=$liens_abo;
$i++;
}
unset($abo);
}
include("../vues/accueil_compte_utilisateur.php");
}
else
{//page d'accueil de l'administrateur
// +++++++++++++++++++++++++++++++++++++++++ STATS DES DERNIÈRES 24 H +++++++++++++++++++++++++++++++++++++++ //
if(empty($Bd))
require("../modele/connexion-bd.php");
$present=time();
$blabla="";
$debut=time()-24*3600;
$stats_jour=FclFlux_utilisateur::get_stats_utilisateurs($debut);
if(!empty($stats_jour))
{
$blabla_stats_jour="<p>Sur cette période, <b>".$stats_jour["nb_comptes"]." compte(s)</b> et <b>".$stats_jour["nb_abo"]." abonnements</b> ont été créé(s) pour <b>".$stats_jour["nb_comptes_suppr"]." comptes supprimé(s)</b>.<br>
<b>".$stats_jour["nb_mail_envoyes"]." mails envoyés à ".$stats_jour["nb_mail_uniques_envoyes"]." utilisateurs</b> différents, ce qui a généré <b>".$stats_jour["nb_clics_email"]." clics de ".$stats_jour["nb_clics_uniques_email"]." utilisateurs</b> différents.<br>
Sur le partie web, <b>".$stats_jour["nb_clics_site"]." clics de ".$stats_jour["nb_clics_uniques_site"]." utilisateurs</b> différents, soit en tout : <b>".$stats_jour["nb_clics"]." clics de ".$stats_jour["nb_clics_uniques"]." utilisateurs</b> différents.</p>";
}
//total
$stats_totales=FclFlux_utilisateur::get_stats_utilisateurs(0);
$blabla_stats_tot="<p>En tout, <b>".$stats_totales["nb_comptes"]." comptes</b> utilisateur enregistrés dont ".$stats_totales["nb_comptes_valide"]." validés dont <b>".$stats_totales["nb_abonnes_email"]." abonnés (".round($stats_totales["nb_abonnes_email"]/($stats_totales["nb_comptes"]*0.01))." %) toujours actifs</b>.<br>
<b>".$stats_totales["nb_abo"]." abonnements</b> dont <b>".$stats_totales["nb_abo_email"]." par email</b> pour <b>".$stats_totales["nb_abonnes"]." abonnés</b> différents.<br>
Il y a actuellement <b>".$stats_totales["nb_fantomes"]." utilisateurs sans abonnement</b> parmi ceux validés, soit <b>".round($stats_totales["nb_fantomes"]/($stats_totales["nb_comptes"]*0.01))." %</b>.<br>
Et <b>".$stats_totales["nb_abonnes_desactives"]." abonnés qui ont été désactivés</b> soit <b>".round($stats_totales["nb_abonnes_desactives"]/($stats_totales["nb_comptes"]*0.01))." %</b> de tous les utilisateurs.</p>";
// +++++++++++++++++++++++++++++++++++++++++ LES BUGS DE LA DERNIÈRE HEURE! +++++++++++++++++++++++++++++++++++++++ //
$bug=new journal_erreurs;
$t_limite=time()-3600*24;
$date_debut=date("d/m/Y",$t_limite);
$date_fin=date("d/m/Y");
$erreurs_admin=$bug->get_journal_sansdoublon($date_debut,$date_fin);
$journal_erreurs="";
if(is_array($erreurs_admin))
{
$journal_erreurs="<ul>";
foreach($erreurs_admin as $infos)
{
if($infos["times_dernier"]>$t_limite)
{
$journal_erreurs.="<li><strong>".$infos["msg"]."</strong><br> >> ".$infos["script"].", ligne(s) : ".implode("|",$infos["lignes"])."<br>";
$journal_erreurs.=" >> Page(s) d'appel : ".implode("|",$infos["pages"])."<br><i> >> <b><u>".$infos["cpt"]." fois</u></b>";
if($infos["times_premier"]!=$infos["times_dernier"])
$journal_erreurs.=", du ".date("d/m/Y H:i:s",$infos["times_premier"])." au ".date("d/m/Y H:i:s",$infos["times_dernier"])."</i>.</li>";
else
$journal_erreurs.=" le ".date("d/m/Y H:i:s",$infos["times_premier"])."</i>.</li>";
}
}
$journal_erreurs.="</ul>";
}
//les bugs dans les bugs !
if(!empty($bug->erreurs))
$journal_erreurs.=affiche_tableau($bug->erreurs);
include("../vues/accueil_compte_admin.php");
}

172
ctrl/admin_annonces_affiche.php Executable file
View File

@ -0,0 +1,172 @@
<?php
/**
* Script affichant un formulaire permettant de modifier / supprimer une annonce promotionnelle
* dont l'id a été passé en paramètre
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$ajax_on=false;
if(!empty($_GET["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_annonces.php");
}
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
else
{
$id_annonce=intval(trim($_GET["id_annonce"]));
if(empty($Bd))
require("../modele/connexion-bd.php");
$annonce=FclFlux_annonce::recherche($id_annonce,"*");
if(!empty($annonce))
{
$form_html[0]["nom"]="Informations de l'annonce n°$id_annonce.";
$form_html[0]["champs"]="<form method='post' id='maj_annonce' name='maj_annonce' action='".PAGE_MAJ_ANNONCES."?id_annonce=$id_annonce' role='form'>";
//stats affichages / clics de l'annonce
$annonce_stats=new FclFlux_annonce();
$annonce_stats->id_annonce=$annonce["id_annonce"];
$stats=$annonce_stats->get_stats();
if(!empty($stats))
{
$form_html[0]["champs"].="<div class='col-sm-12'><p class='help-block'><strong>Cette annonce a été diffusée ".$stats["nb_envois"]." fois à ".$stats["nb_envois_uniques"]." abonnés différents et a été cliquée ".$stats["nb_clics"]." fois par ".$stats["nb_clics_uniques"]." abonnés différents.";
if(($stats["nb_envois_uniques"]!=0)&&($stats["nb_clics_uniques"]!=0))
$form_html[0]["champs"].="<br>".round(($stats["nb_clics_uniques"]/($stats["nb_envois_uniques"]*0.01)))." % des abonnés ciblés ont cliqué au moins une fois sur l'annonce.";
$form_html[0]["champs"].="</strong></p></div>";
}
unset($annonce_stats);
//si date fin diffusion dépassée, on ne peut plus rien changer !
$aujourdhui=time();
$etat="";
if($annonce["time_fin"]<=$aujourdhui)
$etat="readonly";
$emplacements=explode("|",ANNONCE_EMPLACEMENTS);
$form_html[0]["champs"].="<div class='form-group'><label for='emplacement' class='col-sm-3 control-label'>Emplacement de l'annonce :</label>";
foreach ($emplacements as $emplacement)
{
if($emplacement==$annonce["emplacement"])
$form_html[0]["champs"].="<label class='checkbox-inline'><input type='radio' name='emplacement' value='$emplacement' checked='checked' $etat> ".$emplacement."</label>";
else
$form_html[0]["champs"].="<label class='checkbox-inline'><input type='radio' name='emplacement' value='$emplacement' $etat> ".$emplacement."</label>";
}
$form_html[0]["champs"].="<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Obligatoire</b>. Où l'annonce doit-elle apparaître dans les mailings ?</p></div>
</div>
<div class='form-group'>
<label for='titre' class='col-sm-3 control-label'>Titre.</label>
<div class='col-sm-9'><input class='form-control' type='text' maxlength='".ANNONCE_MAX_TITRE."' name='titre' id='titre' value=\"".htmlspecialchars($annonce["titre"])."\" required $etat></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Obligatoire</b>. Désignation interne de l'annonce (non publiée).</p></div>
</div>
<div class='form-group'>
<label for='annonce' class='col-sm-3 control-label'>Annonce.</label>
<div class='col-sm-9'><input class='form-control' type='text' maxlength='".ANNONCE_MAX_TEXTE."' name='annonce' id='annonce' value=\"".htmlspecialchars($annonce["annonce"])."\" required $etat></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Obligatoire</b>. Le texte de l'annonce.</p></div>
</div>
<div class='form-group'>
<label for='url' class='col-sm-3 control-label'>Adresse du lien.</label>
<div class='col-sm-9'><input class='form-control' type='url' maxlength='".ANNONCE_MAX_URL."' name='url' id='url' value=\"".$annonce["lien_url"]."\" required $etat></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Obligatoire</b>. L'adresse de la page dont le lien accompagne l'annonce.</p></div>
</div>
<div class='form-group'>
<label for='designation' class='col-sm-3 control-label'>Ancre du lien.</label>
<div class='col-sm-9'><input class='form-control' type='text' maxlength='".ANNONCE_MAX_ANCRE."' name='designation' id='designation' value=\"".htmlspecialchars($annonce["lien_ancre"])."\" required $etat></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Obligatoire</b>. Le texte servant d'ancre au lien.</p></div>
</div>";
if($annonce["time_debut"]<=$aujourdhui)
{
$form_html[0]["champs"].="<div class='form-group'><div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Date de début de la diffusion :</b> ".date("d/m/Y",$annonce["time_debut"]).".</p></div><input type='hidden' id='time_debut' name='time_debut' value=\"".date("d/m/Y",$annonce["time_debut"])."\"></div>";
}
else
{
$form_html[0]["champs"].="<div class='form-group'>
<label for='time_debut' class='col-sm-3 control-label'>Date de début :</label>
<div class='col-sm-9'><input class='form-control' type='text' name='time_debut' id='time_debut' value=\"".date("d/m/Y",$annonce["time_debut"])."\" required></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Obligatoire</b>. Le jour de début de diffusion de l'annonce. Format ".DATE_FORMAT."</p></div>
</div>";
}
if($annonce["time_fin"]<=$aujourdhui)
$form_html[0]["champs"].="<div class='form-group'><div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Date de fin de la diffusion :</b> ".date("d/m/Y",$annonce["time_fin"]).".</p></div><input type='hidden' id='time_fin' name='time_fin' value=\"".date("d/m/Y",$annonce["time_fin"])."\"></div>";
else
$form_html[0]["champs"].="<div class='form-group'>
<label for='time_fin' class='col-sm-3 control-label'>Date de fin :</label>
<div class='col-sm-9'><input class='form-control' type='text' name='time_fin' id='time_fin' value=\"".date("d/m/Y",$annonce["time_fin"])."\" required></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Obligatoire</b>.</p></div>
</div>";
$form_html[0]["champs"].="<div class='form-group'>
<label for='commentaires' class='col-sm-3 control-label'>Mémo.</label>
<div class='col-sm-9'><input class='form-control' type='text' maxlength='".ANNONCE_MAX_COMMENTAIRES."' name='commentaires' id='commentaires' value=\"".htmlspecialchars($annonce["commentaires"])."\" $etat></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Facultatif</b>. Mémo interne non publié.</p></div>
</div>
<div class='form-group'>
<div class='col-sm-offset-3 col-sm-9'>
<div class='checkbox'>
<label class='text-danger' for='suppr_ok'><input type='checkbox' name='suppr_ok' id='suppr_ok' value='1' $etat> Je souhaite supprimer cette annonce.</label>
</div></div></div>
<div id='msg_annonces'></div>
<input type='hidden' name='id_annonce' id='id_annonce' value='$id_annonce'>";
if($annonce["time_fin"]>$aujourdhui)//je ne peux plus modifier une annonce dont la diffusion est achevée.
{
$form_html[0]["champs"].="<div class='form-group'><div class='col-sm-offset-3 col-sm-9'><button type='submit' class='btn btn-success btn-lg'>Enregistrer.</button></div></div>";
}
$form_html[0]["champs"].="<p><br><br><a href='".PAGE_MAJ_ANNONCES."' title='Nouvelle saisie' class='btn btn-info btn-sm'>+ Nouvelle annonce.</a></p>
</form>";
//--rubriques de hubs dont les abonnés sont ciblés par cette annonce.
$Annonce=new FclFlux_annonce();
$Annonce->id_annonce=$id_annonce;
$rubriques=$Annonce->get_rubriques_infos();
unset($Annonce);
$txt_stats="";
$suppr_rubrique="";
if(!empty($rubriques))
{
foreach ($rubriques as $rubrique_info)
{
$rubrique_stats=new FclFlux_rubrique();
$rubrique_stats->id_rubrique=$rubrique_info["id_rubrique"];
$stats=$rubrique_stats->get_stats();
if(!empty($stats))
$txt_stats=" (".$stats["nb_abo_actifs_indirects"]." abonnés)";
unset($rubrique_stats);
$suppr_rubrique.="<div class='form-group'><p><b><a href='".PAGE_MAJ_RUBRIQUES."?id_rubrique=".$rubrique_info["id_rubrique"]."' title=\"+ d'infos sur la rubrique\" target='_blank'>".$rubrique_info["nom"]."</a></b>$txt_stats <label class='checkbox-inline' for='suppr_rubrique[]'><input name='suppr_rubrique[]' type='checkbox' id='suppr_rubrique_".$rubrique_info["id_rubrique"]."' value='".$rubrique_info["id_rubrique"]."' $etat>Supprimer cette rubrique cible.</label></p></div>\n";
}
}
else
{
require_once("../modele/FclFlux_abonnement.php");
$stats_abonnes=FclFlux_abonnement::get_stats_globales();
if(!empty($stats_abonnes))
$txt_stats="<div class='col-sm-12'><p class='help-block'><strong>Sans ciblage, l'annonce sera diffusée à ".$stats_abonnes["nb_abonnes_email"]." abonnés différents.</strong></p></div>";
}
$form_html[1]["nom"]="Rubriques cibles de l'annonce.";
$form_html[1]["champs"]="<div id='msg_annonces_classement'></div>
<form method='post' id='rubriques_annonce' name='rubriques_annonce' action='".PAGE_MAJ_RUBRIQUES."' role='form'>";
if($annonce["time_debut"]>$aujourdhui)//je ne peux plus modifier le ciblage d'une annonce dont la diffusion a débuté.
{
$form_html[1]["champs"].="<div class='form-group'>
<label for='recherche_rubrique'>Nouvelle rubrique cible.</label>
<input class='form-control' type='text' maxlength='20' name='recherche_rubrique' id='recherche_rubrique' $etat>
</div>
<div id='select_rubriques'></div>";
}
//rubriques déjà ciblées par cette annonce
if(!empty($suppr_rubrique))
$form_html[1]["champs"].="<p><strong>Rubriques enregistrées :</strong></p>$suppr_rubrique";
else
$form_html[1]["champs"].=$txt_stats;
if($annonce["time_fin"]>$aujourdhui)//je ne peux plus modifier une annonce dont la diffusion est achevée.
$form_html[1]["champs"].="<input type='hidden' name='id_annonce' id='id_annonce' value='$id_annonce'>
<button type='submit' class='btn btn-success btn-lg' $etat>Enregistrer.</button>";
else
$form_html[1]["champs"].="<br>";
$form_html[1]["champs"].="</form>";
if($ajax_on)
echo get_html_form($form_html,false);
}
else
$msg_form[]=ERREUR_SQL_ENREG_ABSENT;
}
if((!empty($msg_form))&&($ajax_on))
echo get_html_alerte_msg($msg_form);

View File

@ -0,0 +1,79 @@
<?php
/**
* Script testant les données envoyées lors des demandes de ciblage d'une rubrique de hub pour une annonce promotionnelle.
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
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_annonces.php");
}
if(!empty($_POST["id_annonce"]))
$id_annonce=intval(trim($_POST["id_annonce"]));
if(!empty($_POST["liste_rubriques"]))
$nouvelle_rubrique=intval(trim($_POST["liste_rubriques"]));
$suppr_rubriques=array();
if(!empty($_POST["suppr_rubrique"]))
{
foreach($_POST['suppr_rubrique'] as $id)
$suppr_rubriques[]=intval($id);
}
$msg_form_classement=array();
if(((empty($nouvelle_rubrique))&&(empty($suppr_rubriques)))||(empty($id_annonce)))
$msg_form_classement[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
else
{
if($_SESSION["statut"]!="administrateur")
$msg_form_classement[]=ERREUR_IMPREVUE;
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$annonce=new FclFlux_annonce();
$annonce->id_annonce=$id_annonce;
if(!empty($nouvelle_rubrique))
{
$rubrique=new FclFlux_rubrique();
$rubrique->id_rubrique=$nouvelle_rubrique;
$action=$annonce->ajout_rubrique_cible($rubrique);
unset($rubrique);
if(!empty($annonce->erreurs))
$msg_form_classement=$annonce->erreurs;
elseif($action===false)
$msg_form_classement[]=ERREUR_IMPREVUE;
}
if(!empty($suppr_rubriques))
{
foreach($suppr_rubriques as $rub_id)
{
$rubrique=new FclFlux_rubrique();
$rubrique->id_rubrique=$rub_id;
$action=$annonce->suppr_rubrique_cible($rubrique);
unset($rubrique);
if($action===false)
{
$msg_form_classement[]=ERREUR_IMPREVUE;
break;
}
}
}
if(empty($msg_form_classement))
$msg_form_classement[]=MSG_ADMIN_VALID;
$Bd=null;
}
}
if((!empty($msg_form_classement))&&($ajax_on))
{
if(($msg_form_classement[0]==MSG_ADMIN_VALID)&&(!empty($annonce->id_annonce)))
echo $annonce->id_annonce;
else
{
foreach($msg_form_classement as $message)
echo "<h4>$message</h4>";
}
}

View File

@ -0,0 +1,77 @@
<?php
/**
* Script testant les données envoyées lors de l'enregistrement des données saisies pour une annonce promotionnelle
* lors de sa création ou de sa mise à jour
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$form["emplacement"]=trim($_POST["emplacement"]);
$form["titre"]=trim($_POST["titre"]);
$form["annonce"]=trim($_POST["annonce"]);
$form["url"]=trim($_POST["url"]);
$form["designation"]=trim($_POST["designation"]);
$form["commentaires"]=trim($_POST["commentaires"]);
$form["time_debut"]=trim($_POST["time_debut"]);
$form["time_fin"]=trim($_POST["time_fin"]);
$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_annonces.php");
}
$msg_form=array();
if((empty($form["emplacement"]))||(empty($form["titre"]))||(empty($form["annonce"]))||(empty($form["url"]))||(empty($form["designation"]))||(empty($form["time_debut"]))||(empty($form["time_fin"])))
$msg_form[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
else
{
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
else
{
$auteur=new FclFlux_utilisateur();
$auteur->id_utilisateur=$_SESSION["id_utilisateur"];
$form["auteur"]=$auteur;
if(empty($Bd))
require("../modele/connexion-bd.php");
$form["limites"]["annonce_max_titre"]=ANNONCE_MAX_TITRE;
$form["limites"]["annonce_max_texte"]=ANNONCE_MAX_TEXTE;
$form["limites"]["url_long_max"]=ANNONCE_MAX_URL;
$form["limites"]["designation_long_max"]=ANNONCE_MAX_ANCRE;
$form["limites"]["annonce_max_commentaires"]=ANNONCE_MAX_COMMENTAIRES;
$annonce=new FclFlux_annonce($form);
if(!empty($annonce->erreurs))
$msg_form=array_merge($annonce->erreurs,$msg_form);
if(empty($msg_form))
{
if(!empty($_POST["id_annonce"]))
{
$form["id_annonce"]=$_POST["id_annonce"];//utile pour réaffichage si pas en ajax
$annonce->id_annonce=intval(trim($_POST["id_annonce"]));
$action=$annonce->actualise();
}
else
$action=$annonce->ajout();
if(!empty($annonce->erreurs))
$msg_form=array_merge($annonce->erreurs,$msg_form);
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
if(empty($msg_form))
$msg_form[]=MSG_ADMIN_VALID;
}
$Bd=null;
}
}
if((!empty($msg_form))&&($ajax_on))
{
if(($msg_form[0]==MSG_ADMIN_VALID)&&(!empty($annonce->id_annonce)))
echo $annonce->id_annonce;
else
{
foreach($msg_form as $message)
echo "<h4>$message</h4>";
}
}

59
ctrl/admin_annonces_maj.php Executable file
View File

@ -0,0 +1,59 @@
<?php
/**
* Script permettant à un administrateur
* de saisir ou modifier les annonces promotionnelles à inclure dans les mailings
*
**/
require_once("../modele/FclFlux_annonces.php");
$user=new FclFlux_utilisateur();
if(!$user->test_session(true,true))
{
header("Location:".SITE_URL);
exit();
}
else
{
if(isset($_POST["titre"]))
{
if(empty($_POST["suppr_ok"]))
include("../ctrl/admin_annonces_infos_tests.php");
else
include("../ctrl/admin_annonces_suppr_tests.php");
}
elseif(isset($_POST["recherche"]))
include("../ctrl/admin_annonces_recherche.php");
elseif(!empty($_GET["id_annonce"]))
{
include("../ctrl/admin_annonces_affiche.php");
}
else
{// saisie d'une nouvelle annonce
$form["emplacement"]="header";
$form["titre"]="";
$form["annonce"]="";
$form["url"]="http://";
$form["designation"]="";
$form["commentaires"]="";
$form["time_debut"]="";
$form["time_fin"]="";
//les éventuelles annonces en cours de diffusion
if(empty($Bd))
require("../modele/connexion-bd.php");
$encours=FclFlux_annonce::get_liste_annonces_encours(false);
if(!empty($encours))
{
$i=0;
foreach($encours as $annonce_infos)
{
$annonce_stats=new FclFlux_annonce();
$annonce_stats->id_annonce=$annonce_infos["id_annonce"];
$stats=$annonce_stats->get_stats();
if(!empty($stats))
$encours[$i]["stats"]=$stats;
unset($annonce_stats);unset($stats);
$i++;
}
}
}
include("../vues/admin_annonces_maj.php");
}

View File

@ -0,0 +1,46 @@
<?php
/**
* Script cherchant les annonces promotionnelles pour une recherche lancée par un administrateur
* Les éventuels résultats sont listés pour sélection
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$form["recherche"]=trim($_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_annonces.php");
}
if(empty($form["recherche"]))
$select=get_html_alerte_msg((array) ERREUR_UTILISA_CHAMPS_ABSENTS);
else
{
if($_SESSION["statut"]!="administrateur")
$select=get_html_alerte_msg((array) ERREUR_IMPREVUE);
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$annonces=FclFlux_annonce::recherche_globale($form["recherche"],"id_annonce,titre");
$Bd=null;
if(!empty($annonces))
{
$select="<div class='form-group'>
<label for='liste_annonces'>".count($annonces)." résultat(s) correspondant</label>
<select name='liste_annonces' id='liste_annonces' autofocus class='form-control'>
<option value='0'></option>";
foreach ($annonces as $annonce_info)
$select.="<option value='".$annonce_info["id_annonce"]."'>".htmlentities(affiche_utf8($annonce_info["titre"],UTF8_OK))."</option>\n";
$select.="</select></div>";
}
else
$select=get_html_alerte_msg((array) ERREUR_SQL_RECHERCHE);
}
}
if((!empty($select))&&($ajax_on))
echo $select;

View File

@ -0,0 +1,49 @@
<?php
/**
* Script testant les données envoyées lors d'une demande de suppression d'une annonce promotionnelle
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$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_annonces.php");
}
$msg_form=array();
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
if((empty($_POST["id_annonce"]))||(empty($_POST["suppr_ok"])))
$msg_form[]=ERREUR_IMPREVUE;
else
{
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$annonce=new FclFlux_annonce();
$form["id_annonce"]=$_POST["id_annonce"];//utile pour réaffichage si pas en ajax
$annonce->id_annonce=intval(trim($_POST["id_annonce"]));
$action=$annonce->supprime();
if(!empty($annonce->erreurs))
$msg_form=array_merge($annonce->erreurs,$msg_form);
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
if(empty($msg_form))
$msg_form[]=MSG_ADMIN_VALID;
$Bd=null;
}
}
if((!empty($msg_form))&&($ajax_on))
{
if($msg_form[0]==MSG_ADMIN_VALID)
echo str_replace("'","\"",get_html_alerte_msg($msg_form,"alert-success"));//pour comparaison en JS
else
echo get_html_alerte_msg($msg_form);
}

192
ctrl/admin_comptes_affiche.php Executable file
View File

@ -0,0 +1,192 @@
<?php
/**
* Script affichant un formulaire permettant de modifier / supprimer les données d'un utilisateur
* dont l'id a été passé en paramètre
* Peut être appelé en ajax ou directement en php si JS désactivé
**/
$ajax_on=false;
if(!empty($_GET["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_source.php");
}
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
else
{
$id_utilisateur=intval(trim($_GET["id_utilisateur"]));
require_once("../modele/connexion-bd.php");
$compte=FclFlux_utilisateur::recherche($id_utilisateur,"id_utilisateur","pseudo,email,statut,presentation,illustration,ip_crea,time_crea,time_validation,origine,fuseau_horaire,nb_clics");
if(!empty($compte))
{
//un peu de blabla suivant ce que j'ai sous la dent.
$infos_utilisateur="Ce compte utilisateur ($id_utilisateur) a été créé le ".date("d/m/Y",$compte["time_crea"])." et validé le ".date("d/m/Y",$compte["time_validation"]).".";
if(!empty($compte["nb_clics"]))
$infos_utilisateur.=" Ses annonces ont reçu ".$compte["nb_clics"]." clics.";
if(!empty($compte["origine"]))
$infos_utilisateur.=" Origine du compte : ".$compte["origine"].".";
$form_html["nom"]="Informations de l'utilisateur.";
$form_html["champs"]="<form method='post' id='maj_comptes' name='maj_comptes' action='".PAGE_MAJ_COMPTES."?id_utilisateur=$id_utilisateur' role='form'>
<p class='help-block'><b>$infos_utilisateur</b></p>
<div class='form-group'>
<label for='pseudo'>Pseudo.</label>
<input class='form-control' type='text' maxlength='".UTILISATEUR_MAX_PSEUDO."' name='pseudo' id='pseudo' value=\"".htmlspecialchars($compte["pseudo"])."\" required>
<p class='help-block'><b>Obligatoire</b>.</p>
</div>
<div class='form-group'>
<label for='email'>Email.</label>
<input class='form-control' type='email' maxlength='".UTILISATEUR_MAX_EMAIL."' name='email' id='email' value=\"".$compte["email"]."\" required>
<p class='help-block'><b>Obligatoire</b>. <a href=\"mailto:".$compte["email"]."\" title='Contact' class='btn btn-info btn-sm'>Contactez cet utilisateur.</a></p>
</div>
<div class='form-group'>
<label for='nouveau_passe'>Nouveau mot de passe.</label>
<input class='form-control' type='password' maxlength='".UTILISATEUR_MAX_PASSE."' name='passe' id='passe'>
<p class='help-block'>Facultatif</b>. Si vous souhaitez changer de mot de passe, le nouveau doit compter entre <b>".UTILISATEUR_MIN_PASSE." et ".UTILISATEUR_MAX_PASSE." caractères</b>. <b>Laisser ce champ vide dans le cas contraire</b>.</p>
</div>
<div class='form-group'>
<label for='presentation'>Texte de présentation.</label>
<textarea class='form-control' rows='4' name='presentation' id='presentation' maxlength='".UTILISATEUR_MAX_PRESENTATION."'>".htmlspecialchars($compte["presentation"])."</textarea>
<p class='help-block'><b>Facultatif</b>. ".UTILISATEUR_MAX_PRESENTATION." caractères maximum.</p>
</div>";
$fuseau_defaut=date_default_timezone_get();
$tz=new DateTimeZone($fuseau_defaut);
$zones=$tz->listIdentifiers();
$form_html["champs"].="<div id='fuseau_horaire'>
<div class='form-group'>
<label for='fuseau_horaire'>Fuseau horaire.</label>
<select name='fuseau_horaire' class='form-control'>";
foreach ($zones as $fuseau)
{
if($fuseau==$compte["fuseau_horaire"])
$form_html["champs"].="<option value='".$fuseau."' selected=selected>".htmlentities(affiche_utf8($fuseau,UTF8_OK))."</option>";
else
$form_html["champs"].="<option value='".$fuseau."'>".htmlentities(affiche_utf8($fuseau,UTF8_OK))."</option>";
}
$form_html["champs"].="</select><p class='help-block'>Fuseau horaise utilisé par déterminer l'heure d'envoi des alertes email.</p>
</div></div>";
//image ?
if(!empty($compte["illustration"]))
{
$fichier=$compte["illustration"];
$adresse_illustration=UTILISATEUR_ILLUS_REP."/".$fichier[0]."/".$fichier;
$form_html["champs"].="<p><strong>Photo actuelle.</strong><br><img src='".SITE_URL."/".$adresse_illustration."' alt='Illustration actuelle' class='img-responsive'></p>
<div class='form-group'>
<label class='checkbox-inline' for='suppr_illustration'></label><input name='suppr_illustration' type='checkbox' id='suppr_illustration' value='1'> Supprimer l'image.</label>
</div>";
}
if($compte["statut"]!="administrateur")
{
$statuts=explode("|",UTILISATEUR_STATUTS);
$form_html["champs"].="<div class='form-group'><label for='statut'>Statut.</label>
<select name='statut' id='statut' autofocus class='form-control'>";
foreach ($statuts as $statut)
{
if($statut==$compte["statut"])
$form_html["champs"].="<option value='".$compte["statut"]."' selected='selected'>".$compte["statut"]."</option>\n";
else
$form_html["champs"].="<option value='".$compte["statut"]."'>".$compte["statut"]."</option>\n";
}
$form_html["champs"].="</select></div>
<div class='form-group'><label class='checkbox-inline text-danger' for='suppr_ok'><input type='checkbox' id='suppr_ok' name='suppr_ok' value='1'> Je souhaite supprimer ce compte utilisateur.</label></div>";
}
else
$form_html["champs"].="<input type='hidden' name='statut' id='statut' value='administrateur'>";
$form_html["champs"].="<input type='hidden' name='id_utilisateur' id='id_utilisateur' value='$id_utilisateur'>
<div id='msg_utilisateurs'></div>
<button type='submit' class='btn btn-success btn-lg'>Enregistrer.</button>
<p><br><a href='".PAGE_MAJ_COMPTES."' title='Saisir un nouvel utilisateur' class='btn btn-info btn-sm'>+ Nouvel utilisateur.</a></p>
</fieldset></form>";
//quelques infos sur mon gus
$user=new FclFlux_utilisateur();
$user->id_utilisateur=$id_utilisateur;
$infos=$user->get_infos_admin();
//ses abonnements
if(!empty($infos["abos"]))
{
$nb_abo=count($infos["abos"]);
$form_html["champs"].="<p>Cet utilisateur a $nb_abo abonnement(s).<ul>";
foreach ($infos["abos"] as $abo)
{
//dernier envoi réussi ?
if(!empty($abo["time_dernier_envoi"]))
$time_envoi=date("d/m/Y à H:i:s",$abo["time_dernier_envoi"]);
else
$time_envoi="jamais";
if(!empty($abo["ville_insee"]))
{
$ville_infos=get_villes($abo["ville_insee"],"insee");
$infos_ville=" Abonnement local pour la ville de : ".$ville_infos[0]["nom"]." (".$ville_infos[0]["cp"].").";
unset($ville_infos);
}
else
$infos_ville="";
$form_html["champs"].="<li><b>".$abo["designation"]." (n°".$abo["id_abonnement"].")</b> - jours d'envoi : ".$abo["jours_alerte"].", heure d'envoi : ".$abo["heure_alerte"].", dernier envoi : $time_envoi, dernier traitement : ".date("d/m/Y à H:i:s",$abo["time_envoi"]).".".$infos_ville;
//liste des hubs concernés par cet abonnement
if(!empty($abo["hubs"]))
{
$nb_hub=count($abo["hubs"]);
$form_html["champs"].="<br>Cet abonnement concerne le(s) bureaux de poste :";
foreach ($abo["hubs"] as $hub_infos)
$form_html["champs"].=" <b>".$hub_infos["nom"]."</b> (<a href='".PAGE_MAJ_HUB."?id_hub=".$hub_infos["id_hub"]."' target='_blank'>Infos</a>) |";
}
$form_html["champs"].="</li>";
}
$form_html["champs"].="</ul></p>";
}
//les dernières sessions enregistrées
if(!empty($infos["sessions"]))
{
$nb_sessions=count($infos["sessions"]);
$form_html["champs"].="<p>$nb_sessions connexions comptabilisées les 7 derniers jours, dont voici les dernières :<ul>";
foreach ($infos["sessions"] as $session)
$form_html["champs"].="<li><b>Le ".date("d/m/Y à H:i:s",$session["time_session"])."</b> (ip : ".$session["ip_session"].", configuration : ".$session["config"].", provenance : ".$session["referer"].")</li>";
$form_html["champs"].="</ul></p>";
}
else
$form_html["champs"].="<p>Aucune connexion enregistrée ces 7 derniers jours.</p>";
//les pages où il est passé
if(!empty($infos["pages"]))
{
$nb_pages=count($infos["pages"]);
$form_html["champs"].="<p>$nb_pages affichages comptabilisés les 7 derniers jours, dont les suivants les dernières 24H :<ul>";
$hier=time()-3600*24;
foreach ($infos["pages"] as $page)
{
if($page["time_affichage"]>$hier)
$form_html["champs"].="<li><b>".$page["page"]."</b> (contexte : ".$page["contexte"].", le ".date("d/m/Y à H:i:s",$page["time_affichage"]).")</li>";
else
break;
}
$form_html["champs"].="</ul></p>";
}
else
$form_html["champs"].="<p>Aucun affichage enregistré ces 7 derniers jours.</p>";
//ses annonces
$auteur=new FclFlux_utilisateur();
$auteur->id_utilisateur=$id_utilisateur;
$annonces=FclFlux_post::get_liste_posts_auteur_cache($auteur,true);
unset($auteur);
if(!empty($annonces))
{
$nb_annonces=count($annonces);
$form_html["champs"].="<p id='posts'>$nb_annonces annonces ont été postées par cet utilisateur :<ul>";
$hier=time()-3600*24;
foreach ($annonces as $annonce_infos)
$form_html["champs"].="<li><b>".stripslashes($annonce_infos["ancre"])."</b> (<a href='".PAGE_MAJ_POSTS."?id_post=".intval($annonce_infos["id_post"])."' target='_blank'>Infos de l'annonce)</a></li>";
$form_html["champs"].="</ul></p>";
}
else
$form_html["champs"].="<p id='posts'>Aucune annonce postée par cet utilisateur.</p>";
if($ajax_on)
echo get_html_form($form_html,false);
}
else
$msg_form[]=ERREUR_SQL_ENREG_ABSENT;
}
if((!empty($msg_form))&&($ajax_on))
echo get_html_alerte_msg($msg_form);

View File

@ -0,0 +1,81 @@
<?php
/**
* Script testant les données envoyées lors de l'enregistrement d'une nouveau compte utilisateur
* ou encore de sa mise à jour
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$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_utilisateur.php");
}
$msg_form=array();
$form["pseudo"]=trim($_POST["pseudo"]);
$form["email"]=trim($_POST["email"]);
if(isset($_POST["abo_max_liens"]))
$form["abo_max_liens"]=trim($_POST["abo_max_liens"]);
if(isset($_POST["presentation"]))
$form["presentation"]=trim($_POST["presentation"]);
if(isset($_POST["origine"]))
$form["origine"]=$_POST["origine"];
if(isset($_POST["statut"]))
$form["statut"]=$_POST["statut"];
if(isset($_POST["fuseau_horaire"]))
$form["fuseau_horaire"]=$_POST["fuseau_horaire"];
if(isset($_POST["insee"]))
$form["insee"]=$_POST["insee"];
elseif(empty($_POST["insee"]))
$form["insee"]=null;
if((isset($_POST["passe"]))&&(!empty($_POST["passe"])))
$form["passe"]=$_POST["passe"];
if((empty($_POST["pseudo"]))||(empty($_POST["email"])))
$msg_form[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
else
{
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$utilisateur=new FclFlux_utilisateur($form);
if(!empty($utilisateur->erreurs))
$msg_form=array_merge($utilisateur->erreurs,$msg_form);
if(empty($msg_form))
{
if(!empty($_POST["id_utilisateur"]))
{
$form["id_utilisateur"]=$_POST["id_utilisateur"];//utile pour réaffichage si pas en ajax
$utilisateur->id_utilisateur=intval(trim($_POST["id_utilisateur"]));
$action=$utilisateur->actualise(false,true);
if((empty($utilisateur->erreurs))&&($action!==false))
{
if((isset($_POST["suppr_illustration"]))&&($_POST["suppr_illustration"]==1))
$action=$utilisateur->actualise(true);
}
}
else
$action=$utilisateur->ajout(false,false);
if(!empty($utilisateur->erreurs))
$msg_form=array_merge($utilisateur->erreurs,$msg_form);
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
if(empty($msg_form))
$msg_form[]=MSG_ADMIN_VALID;
}
$Bd=null;
}
}
if((!empty($msg_form))&&($ajax_on))
{
if(($msg_form[0]==MSG_ADMIN_VALID)&&(!empty($utilisateur->id_utilisateur)))
echo $utilisateur->id_utilisateur;//tout s'est bien passé, je recharge les données en ajax
else
echo get_html_alerte_msg($msg_form);
}

33
ctrl/admin_comptes_maj.php Executable file
View File

@ -0,0 +1,33 @@
<?php
/**
* Script permettant de consulter les infos concernant un utilisateur
* puis éventuellement modifier son statut ou encore supprimer son compte.
*
**/
require_once("../modele/FclFlux_source.php");
$user=new FclFlux_utilisateur();
if(!$user->test_session(true,true))
{
header("Location:".SITE_URL);
exit();
}
else
{
if(isset($_POST["pseudo"]))
{
if(empty($_POST["suppr_ok"]))
include("../ctrl/admin_comptes_infos_tests.php");
else
include("../ctrl/admin_comptes_suppr_tests.php");
}
elseif(isset($_POST["recherche"]))//validation d'une recherche
include("../ctrl/admin_comptes_recherche.php");
elseif(!empty($_GET["id_utilisateur"]))//id du compte passé par l'url
include("../ctrl/admin_comptes_affiche.php");
else
{//formulaire en mode saisie d'un nouvel utilisateur
$form["pseudo"]="";
$form["email"]="";
}
include("../vues/admin_comptes_maj.php");
}

View File

@ -0,0 +1,47 @@
<?php
/**
* Script cherchant les comptes utilisateur pour une recherche lancée par un administrateur
* Les éventuels résultats sont listés pour sélection et affichage
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$form["recherche"]=trim($_POST["recherche_compte"]);
$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_source.php");
}
$msg_form=array();
if(empty($form["recherche"]))
$select=get_html_alerte_msg((array) ERREUR_UTILISA_CHAMPS_ABSENTS);
else
{
if($_SESSION["statut"]!="administrateur")
$select=get_html_alerte_msg((array) ERREUR_IMPREVUE);
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$comptes=FclFlux_utilisateur::recherche_globale($form["recherche"],"id_utilisateur,pseudo,email");
$Bd=null;
if(!empty($comptes))
{
$select="<div class='form-group'>
<label for='liste_utilisateurs' class='col-sm-3 control-label'>".count($comptes)." résultat(s) correspondent : </label>
<div class='col-sm-9'><select name='liste_utilisateurs' id='liste_utilisateurs' autofocus class='form-control'>
<option value='0'></option>";
foreach ($comptes as $compte_info)
$select.="<option value='".$compte_info["id_utilisateur"]."'>".htmlentities(affiche_utf8($compte_info["pseudo"]." (".$compte_info["email"].")",UTF8_OK))."</option>\n";
$select.="</select></div></div>";
}
else
$select=get_html_alerte_msg((array) ERREUR_SQL_RECHERCHE);
}
}
if((!empty($select))&&($ajax_on))
echo $select;

View File

@ -0,0 +1,47 @@
<?php
/**
* Script testant les données envoyées lors d'une demande de suppression d'un compte utilisateur
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$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_source.php");
}
$msg_form=array();
if((empty($_POST["id_utilisateur"]))||(empty($_POST["suppr_ok"])))
$msg_form[]=ERREUR_IMPREVUE;
else
{
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$utilisateur=new FclFlux_utilisateur();
$form["id_utilisateur"]=$_POST["id_utilisateur"];//utile pour réaffichage si pas en ajax
$utilisateur->id_utilisateur=intval(trim($_POST["id_utilisateur"]));
$action=$utilisateur->supprime();
if(!empty($utilisateur->erreurs))
$msg_form=array_merge($utilisateur->erreurs,$msg_form);
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
if(empty($msg_form))
$msg_form[]=MSG_ADMIN_VALID;
$Bd=null;
}
}
if((!empty($msg_form))&&($ajax_on))
{
if($msg_form[0]==MSG_ADMIN_VALID)
echo str_replace("'","\"",get_html_alerte_msg($msg_form,"alert-success"));//pour comparaison en JS
else
echo get_html_alerte_msg($msg_form);
}

26
ctrl/admin_flux_a_valider.php Executable file
View File

@ -0,0 +1,26 @@
<?php
/**
* Script cherchant si il y a des flux à valider, suite à un ajout par un utilisateur.
* Si oui ils sont listées pour sélection
*
**/
$msg_form=array();
if($_SESSION["statut"]!="administrateur")
$select=get_html_alerte_msg((array) ERREUR_IMPREVUE);
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$flux=FclFlux_flux::get_a_valider();
$Bd=null;
if(!empty($flux))
{
$select="<div class='form-group'>
<label for='liste_flux'>".count($flux)." flux à contrôler.</label>
<select name='liste_flux' id='liste_flux' autofocus class='form-control'>
<option value='0'></option>";
foreach ($flux as $flux_info)
$select.="<option value='".$flux_info["id_flux"]."'>".htmlentities(affiche_utf8($flux_info["nom"],UTF8_OK))."</option>\n";
$select.="</select></div>";
}
}

106
ctrl/admin_flux_affiche.php Executable file
View File

@ -0,0 +1,106 @@
<?php
/**
* Script affichant un formulaire permettant de modifier / supprimer un flux
* dont l'id a été passé en paramètre
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$ajax_on=false;
if(!empty($_GET["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_flux.php");
}
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
else
{
$id_flux=intval(trim($_GET["id_flux"]));
if(empty($Bd))
require("../modele/connexion-bd.php");
$flux=FclFlux_flux::recherche($id_flux,"id_flux","nom,url,source_id,description,langue,frequence_maj,memo,time_lecture,nb_clics");
if(!empty($flux))
{
$form_html[0]["nom"]="Informations actuelles sur ce flux.";
$stats_txt="";
$flux_stats=new FclFlux_flux();
$flux_stats->id_flux=$id_flux;
$stats=$flux_stats->get_liste_abonnes();
if(!empty($stats))
$stats_txt="<br><strong>Ce flux compte ".count($stats["actifs"])." abonnés actifs, ".count($stats["inactifs"])." abonnements désactivés et ".count($stats["en_pause"])." abonnés en pause. Ses articles ont reçu ".$flux["nb_clics"]." clics.</strong>";
unset($flux_stats);unset($stats);
$form_html[0]["champs"]="<form method='post' id='maj_flux' name='maj_flux' action='".PAGE_MAJ_FLUX."?id_flux=$id_flux' role='form'>
<a href='".PAGE_REPERTOIRE_FLUX_INFO."$id_flux' title='Voir le flux' class='btn btn-info btn-sm' target='_blank'>Voir le flux.</a>";
// désignation de la source ?
if(!empty($flux["source_id"]))
{
$source=FclFlux_source::recherche($flux["source_id"],"nom,id_source");
if(!empty($source["nom"]))
$form_html[0]["champs"].="<p>Site propriétaire du flux : <a href='".PAGE_MAJ_SOURCE."?id_source=".$source["id_source"]."' target='_blank' title='+ infos sur ce site'>".$source["nom"]."</a> (dernière importation : ".date("d/m/Y à h:m:s",$flux["time_lecture"]).").$stats_txt</p>";
}
$form_html[0]["champs"].="<div class='form-group'>
<label for='cherche_source'>Changer le site propriétaire ? alors saisissez votre recherche :</label>
<input class='form-control' type='text' maxlength='20' name='cherche_source' id='cherche_source'>
</div>
<div id='sup_sources'>";
if(!empty($source["id_source"]))
$form_html[0]["champs"].="<input type='hidden' value='".$source["id_source"]."' name='source_id'>";
$form_html[0]["champs"].="</div>
<div class='form-group'>
<label for='designation'>Titre.</label>
<input class='form-control' type='text' maxlength='".FLUX_MAX_NOM."' name='designation' id='nom' value=\"".htmlspecialchars($flux["nom"])."\" required>
<p class='help-block'><b>Obligatoire</b>.</p>
</div>
<div class='form-group'>
<label for='url'>Adresse.</label>
<input class='form-control' type='url' maxlength='".FLUX_MAX_URL."' name='url' id='url' value=\"".$flux["url"]."\" required>
<p class='help-block'><b>Obligatoire</b>. L'adresse complète du flux dont la lecture sera testée au moment de l'enregistrement.</p>
</div>
<div class='form-group'>
<label for='description'>Description.</label>
<input class='form-control' type='text' maxlength='".FLUX_MAX_DESCRIPTION."' name='description' id='description' value=\"".htmlspecialchars($flux["description"])."\">
<p class='help-block'><b>Facultatif</b>.</p>
</div>";
$langues=explode("|",FLUX_LANGUES);
$form_html[0]["champs"].="<div class='form-group'><label for='langue'>Langue principale du flux :".$flux["langue"]."</label>";
foreach ($langues as $langue)
{
if($langue==$flux["langue"])
$form_html[0]["champs"].="<label class='checkbox-inline'><input type='radio' name='langue' value='$langue' checked='checked'> ".$langue."</label>";
else
$form_html[0]["champs"].="<label class='checkbox-inline'><input type='radio' name='langue' value='$langue'> ".$langue."</label>";
}
$form_html[0]["champs"].="<p class='help-block'><b>Obligatoire</b>.</p></div>";
$frequences=explode("|",FLUX_FREQUENCES);
$form_html[0]["champs"].="<div class='form-group'><label for='frequence_maj'>Fréquence d'actualisation du flux.</label>";
foreach ($frequences as $frequence)
{
if($frequence==$flux["frequence_maj"])
$form_html[0]["champs"].="<label class='checkbox-inline'><input type='radio' name='frequence_maj' value='$frequence' checked='checked'> ".$frequence."</label>";
else
$form_html[0]["champs"].="<label class='checkbox-inline'><input type='radio' name='frequence_maj' value='$frequence'> ".$frequence."</label>";
}
$form_html[0]["champs"].="<p class='help-block'><b>Obligatoire</b>.</p></div>
<div class='form-group'>
<label for='memo'>Mémo.</label>
<input class='form-control' type='text' maxlength='".FLUX_MAX_MEMO."' name='memo' id='memo' value=\"".htmlspecialchars($flux["memo"])."\">
<p class='help-block'><b>Facultatif</b>. Mémo interne non publié.</p>
</div>
<div class='form-group'><label class='checkbox-inline' for='suppr_ok'><input type='checkbox' id='suppr_ok' name='suppr_ok' value='1'> Je souhaite supprimer ce flux si il n'a pas de dépendances.</label></div>
<div class='form-group'><label class='checkbox-inline text-danger' for='suppr_ok_tot'><input type='checkbox' id='suppr_ok_tot' name='suppr_ok_tot' value='1'> Je souhaite supprimer ce flux, <u>y compris si il a des dépendances (abonnements...)</u>.</label></div>
<input type='hidden' name='id_flux' id='id_flux' value='$id_flux'>
<button type='submit' class='btn btn-success btn-lg'>Enregistrer.</button>
<p><br><br><a href='".PAGE_MAJ_FLUX."' title='Saisir un nouveau flux' class='btn btn-info btn-sm'>+ Nouveau flux.</a></p>
</form>";
if($ajax_on)
echo get_html_form($form_html,false);
}
else
$msg_form[]=ERREUR_SQL_ENREG_ABSENT;
}
if((!empty($msg_form))&&($ajax_on))
echo get_html_alerte_msg($msg_form);

89
ctrl/admin_flux_infos_tests.php Executable file
View File

@ -0,0 +1,89 @@
<?php
/**
* Script testant les données envoyées lors de l'enregistrement des données saisies pour un flux
* lors de sa création ou de sa mise à jour
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$form["designation"]=trim($_POST["designation"]);
$form["url"]=trim($_POST["url"]);
$form["description"]=trim($_POST["description"]);
if(!empty($_POST["source_id"]))
$form["source_id"]=intval(trim($_POST["source_id"]));
if(!empty($_POST["langue"]))
$form["langue"]=$_POST["langue"];
else
$form["langue"]="fr";
if(!empty($_POST["frequence_maj"]))
$form["frequence_maj"]=$_POST["frequence_maj"];
else
$form["frequence_maj"]="H";
$form["memo"]=trim($_POST["memo"]);
$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_flux.php");
}
$msg_form=array();
if((empty($_POST["designation"]))||(empty($_POST["url"]))||(empty($_POST["source_id"]))||(empty($_POST["langue"]))||(empty($_POST["frequence_maj"])))
$msg_form[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
else
{
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
else
{
$auteur=new FclFlux_utilisateur();
$auteur->id_utilisateur=$_SESSION["id_utilisateur"];
$form["auteur"]=$auteur;
$source=new FclFlux_source();
$source->id_source=$form["source_id"];
$form["source"]=$source;
require_once("../modele/connexion-bd.php");
$form["limites"]["designation_long_min"]=FLUX_MIN_NOM;
$form["limites"]["designation_long_max"]=FLUX_MAX_NOM;
$form["limites"]["url_long_max"]=FLUX_MAX_URL;
$form["limites"]["description_long_max"]=FLUX_MAX_DESCRIPTION;
$form["limites"]["memo_long_max"]=FLUX_MAX_MEMO;
$flux=new FclFlux_flux($form);//test les différentes valeurs fournies
if(!empty($flux->erreurs))
$msg_form=array_merge($flux->erreurs,$msg_form);
/*else if(empty($flux->lecture(5)))//test de lecture du flux (mais pas forcément un flux ! ex : meetoyen)
$msg_form[]=ERREUR_FLUX_INFOS;*/
else if(empty($flux->get_contenu(30.0)))//test de lecture du flux
$msg_form[]=ERREUR_FLUX_LECTURE;
if(empty($msg_form))
{
if(!empty($_POST["id_flux"]))
{
$form["id_flux"]=$_POST["id_flux"];//utile pour réaffichage si pas en ajax
$flux->id_flux=intval(trim($_POST["id_flux"]));
$action=$flux->actualise();
}
else
$action=$flux->ajout();
if(!empty($flux->erreurs))
$msg_form=array_merge($flux->erreurs,$msg_form);
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
if(empty($msg_form))
$msg_form[]=MSG_ADMIN_VALID;
}
$Bd=null;
}
}
if((!empty($msg_form))&&($ajax_on))
{
if(($msg_form[0]==MSG_ADMIN_VALID)&&(!empty($flux->id_flux)))
echo $flux->id_flux;//tout s'est bien passé, je recharge le flux en ajax
else
{
foreach($msg_form as $message)
echo "<h4>$message</h4>";
}
}

38
ctrl/admin_flux_maj.php Executable file
View File

@ -0,0 +1,38 @@
<?php
/**
* Script permettant à un utilisateur d'ajouter
* ou encore modifier / supprimer une de ses périodes d'absence
*
**/
require_once("../modele/FclFlux_flux.php");
$user=new FclFlux_utilisateur();
if(!$user->test_session(true,true))
{
header("Location:".SITE_URL);
exit();
}
else
{
include("../ctrl/admin_flux_a_valider.php");
if(isset($_POST["nom"]))
{
if((empty($_POST["suppr_ok"]))&&(empty($_POST["suppr_ok_tot"])))
include("../ctrl/admin_flux_infos_tests.php");
else
include("../ctrl/admin_flux_suppr_tests.php");
}
elseif(isset($_POST["recherche"]))
include("../ctrl/admin_flux_recherche.php");
elseif(!empty($_GET["id_flux"]))
include("../ctrl/admin_flux_affiche.php");
else
{//formulaire en mode saisie d'un nouveau flux
$form["nom"]="";
$form["url"]="http://";
$form["description"]="";
$form["langue"]="fr";
$form["frequence_maj"]="J";
$form["memo"]="";
}
include("../vues/admin_flux_maj.php");
}

46
ctrl/admin_flux_recherche.php Executable file
View File

@ -0,0 +1,46 @@
<?php
/**
* Script cherchant les flux pour une recherche lancée par un administrateur
* Les éventuels résultats sont listés pour sélection
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$form["recherche"]=trim($_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_flux.php");
}
if(empty($form["recherche"]))
$select=get_html_alerte_msg((array) ERREUR_UTILISA_CHAMPS_ABSENTS);
else
{
if($_SESSION["statut"]!="administrateur")
$select=get_html_alerte_msg((array) ERREUR_IMPREVUE);
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$flux=FclFlux_flux::recherche_globale($form["recherche"],"id_flux,nom");
$Bd=null;
if(!empty($flux))
{
$select="<div class='form-group'>
<label for='liste_flux'>".count($flux)." résultat(s) correspondant</label>
<select name='liste_flux' id='liste_flux' autofocus class='form-control'>
<option value='0'></option>";
foreach ($flux as $flux_info)
$select.="<option value='".$flux_info["id_flux"]."'>".htmlentities(affiche_utf8($flux_info["nom"],UTF8_OK))."</option>\n";
$select.="</select></div>";
}
else
$select=get_html_alerte_msg((array) ERREUR_SQL_RECHERCHE);
}
}
if((!empty($select))&&($ajax_on))
echo $select;

50
ctrl/admin_flux_select.php Executable file
View File

@ -0,0 +1,50 @@
<?php
/**
* Script cherchant les sources de flux pour une recherche lancée par un administrateur
* en vue de définir le site propriétaire d'un flux
* Les éventuels résultats sont listés pour sélection
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$form["recherche"]=trim($_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_source.php");
}
$msg_form=array();
if(!empty($form["recherche"]))
{
if($_SESSION["statut"]!="administrateur")
$source_select=ERREUR_IMPREVUE;
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$sources=FclFlux_source::recherche_globale($form["recherche"],"id_source,nom");
$Bd=null;
if(!empty($sources))
{
$source_select=$sources;
if($ajax_on)
{
echo "<p><label for='source_id'> >> Sélectionnez le site propriétaire du flux parmi les ".count($sources)." résultat(s) : </label> <select name='source_id' autofocus>\n";
foreach ($source_select as $source_info)
echo "<option value='".$source_info["id_source"]."'>".htmlentities(affiche_utf8($source_info["nom"],UTF8_OK))."</option>\n";
echo "</select>.</p>\n";
}
}
else
{
if(!$ajax_on)
$msg_form[]=ERREUR_SQL_RECHERCHE;
else
echo "<p><strong>".ERREUR_SQL_RECHERCHE."</strong></p>";
}
}
}

49
ctrl/admin_flux_suppr_tests.php Executable file
View File

@ -0,0 +1,49 @@
<?php
/**
* Script testant les données envoyées lors d'une demande de suppression d'un flux
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$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_flux.php");
}
$msg_form=array();
if((empty($_POST["id_flux"]))||(((empty($_POST["suppr_ok"])))&&((empty($_POST["suppr_ok_tot"])))))
$msg_form[]=ERREUR_IMPREVUE;
else
{
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
else
{
require_once("../modele/connexion-bd.php");
$flux=new FclFlux_flux();
$form["id_flux"]=$_POST["id_flux"];//utile pour réaffichage si pas en ajax
$flux->id_flux=intval(trim($_POST["id_flux"]));
if(empty($_POST["suppr_ok_tot"]))
$action=$flux->supprime();
else
$action=$flux->supprime(false);
if(!empty($flux->erreurs))
$msg_form=array_merge($flux->erreurs,$msg_form);
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
if(empty($msg_form))
$msg_form[]=MSG_ADMIN_VALID;
$Bd=null;
}
}
if((!empty($msg_form))&&($ajax_on))
{
if($msg_form[0]==MSG_ADMIN_VALID)
echo str_replace("'","\"",get_html_alerte_msg($msg_form,"alert-success"));//pour comparaison en JS
else
echo get_html_alerte_msg($msg_form);
}

26
ctrl/admin_hub_a_valider.php Executable file
View File

@ -0,0 +1,26 @@
<?php
/**
* Script cherchant si il y a des hubs ou posts à valider, suite à la création ou l'ajout par un utilisateur.
* Si oui ils sont listées pour sélection
*
**/
$msg_form=array();
if($_SESSION["statut"]!="administrateur")
$select=get_html_alerte_msg((array) ERREUR_IMPREVUE);
else
{
if(empty($Bd))
require_once("../modele/connexion-bd.php");
$hubs=FclFlux_hub::get_a_valider();
$Bd=null;
if(!empty($hubs))
{
$select="<div class='form-group'>
<label for='liste_hubs'>".count($hubs)." hubs à contrôler.</label>
<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>";
}
}

76
ctrl/admin_hub_admins_tests.php Executable file
View File

@ -0,0 +1,76 @@
<?php
/**
* Script testant les données envoyées lors des demandes d'ajout/suppression d'administrateurs à un hub.
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
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");
}
if(!empty($_POST["id_hub"]))
$id_hub=intval(trim($_POST["id_hub"]));
if(!empty($_POST["liste_utilisateurs"]))
$nouvel_admin=intval(trim($_POST["liste_utilisateurs"]));
$suppr_admin=array();
if(!empty($_POST["suppr_admin"]))
{
foreach($_POST['suppr_admin'] as $id)
$suppr_admin[]=intval($id);
}
$msg_form=array();
if(((empty($nouvel_admin))&&(empty($suppr_admin)))||(empty($id_hub)))
$msg_form[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
else
{
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$hub=new FclFlux_hub();
$hub->id_hub=$id_hub;
if(!empty($nouvel_admin))
{
$admin=new FclFlux_utilisateur();
$admin->id_utilisateur=$nouvel_admin;
$action=$hub->ajout_admin($admin);
if(!empty($hub->erreurs))
$msg_form=$hub->erreurs;
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
}
if(!empty($suppr_admin))
{
foreach($suppr_admin as $admin_id)
{
$admin=new FclFlux_utilisateur();
$admin->id_utilisateur=$admin_id;
$action=$hub->suppr_admin($admin);
if(!empty($hub->erreurs))
$msg_form=$hub->erreurs;
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
}
}
if(empty($msg_form))
$msg_form[]=MSG_ADMIN_VALID;
$Bd=null;
}
}
if((!empty($msg_form))&&($ajax_on))
{
if(($msg_form[0]==MSG_ADMIN_VALID)&&(!empty($hub->id_hub)))
echo $hub->id_hub;//tout s'est bien passé, j'actualise l'affichage
else
{
foreach($msg_form as $message)
echo "<h4>$message</h4>";
}
}

233
ctrl/admin_hub_affiche.php Executable file
View File

@ -0,0 +1,233 @@
<?php
/**
* Script affichant un formulaire permettant de modifier / supprimer un hub
* dont l'id a été passé en paramètre
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$ajax_on=false;
if(!empty($_GET["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");
}
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
else
{
$id_hub=intval(trim($_GET["id_hub"]));
if(empty($Bd))
require("../modele/connexion-bd.php");
$hub_infos=FclFlux_hub::recherche($id_hub,"id_hub","nom,publication_ok,index_ok,description,illustration,langue,mots_cles,memo");
if(!empty($hub_infos))
{
$access_rapides="<p class='liste_liens_btn'>Accès rapide : <a href='".PAGE_REPERTOIRE_HUB_INFO."$id_hub' title='Voir la page du hub' class='btn btn-info btn-xs' target='_blank'>Voir le hub.</a> <a href='#maj_hub' class='btn btn-info btn-xs' title='Infos du hub'>Informations générales.</a> <a href='#maj_hub_illustration' class='btn btn-info btn-xs' title='Illustration du hub'>Illustrations.</a> <a href='#post_hub' class='btn btn-info btn-xs' title='Ajouter un post dans ce hub'>+ Nouveau post.</a> <a href='#rubriques_hub' class='btn btn-info btn-xs' title='Classement du hub'>Le classement.</a> <a href='#flux_hub' class='btn btn-info btn-xs' title='Les flux à importer dans ce hub'>Flux à importer.</a> <a href='#admin_hub' class='btn btn-info btn-xs' title='Désigner les administrateurs du hub'>Administrateurs.</a> </p>";
$stats_txt="";
$hub_stats=new FclFlux_hub();
$hub_stats->id_hub=$id_hub;
$stats=$hub_stats->get_liste_abonnes();
$stats["nb_clics"]=$hub_stats->get_nb_clics();
if(!empty($stats))
$stats_txt="<div class='col-sm-12'><p class='help-block'><strong>Ce bureau de poste compte ".count($stats["actifs"])." abonnés actifs, ".count($stats["inactifs"])." abonnements désactivés et ".count($stats["en_pause"])." abonnés en pause. Depuis le début ses flux ont reçu ".$stats["nb_clics"]." clics.</strong></p></div>";
unset($hub_stats);unset($stats);
$form_html[0]["nom"]="Informations actuelles sur ce hub ($id_hub).";
$form_html[0]["champs"]="$stats_txt$access_rapides<form method='post' id='maj_hub' name='maj_hub' action='".PAGE_MAJ_HUB."?id_hub=$id_hub' role='form'>
<div class='form-group'>
<label for='nom'>Désignation.</label>
<input class='form-control' type='text' maxlength='".HUB_MAX_NOM."' name='nom' id='nom' value=\"".htmlspecialchars($hub_infos["nom"])."\" required>
<p class='help-block'><b>Obligatoire</b>.</p>
</div>
<div class='form-group'>
<label for='description'>Description.</label>
<input class='form-control' type='text' maxlength='".HUB_MAX_DESCRIPTION."' name='description' id='description' value=\"".htmlspecialchars($hub_infos["description"])."\">
<p class='help-block'><b>Facultatif</b>.</p>
</div>
<div class='form-group'>
<label for='mots_cles'>Mots-clés.</label>
<textarea class='form-control' rows='4' name='mots_cles' id='mots_cles'>".htmlspecialchars($hub_infos["mots_cles"])."</textarea>
<p class='help-block'><b>Facultatif</b>. Utile pour les recherches des utilisateurs. À séparer par des virgules.</p>
</div>";
$langues=explode("|",HUB_LANGUES);
$form_html[0]["champs"].="<div class='form-group'><label for='langue'>Langue principale du hub :".$hub_infos["langue"]."</label>";
foreach ($langues as $langue)
{
if($langue==$hub_infos["langue"])
$form_html[0]["champs"].="<label class='checkbox-inline'><input type='radio' name='langue' value='$langue' checked='checked'> ".$langue."</label>";
else
$form_html[0]["champs"].="<label class='checkbox-inline'><input type='radio' name='langue' value='$langue'> ".$langue."</label>";
}
$form_html[0]["champs"].="<p class='help-block'><b>Obligatoire</b>.</p></div>";
if($hub_infos["publication_ok"]==1)
$form_html[0]["champs"].="<div class='form-group'><label class='checkbox-inline'><input type='checkbox' id='publication_ok' name='publication_ok' value='1' checked='checked'> Publication autorisée.</label></div>";
else
$form_html[0]["champs"].="<div class='form-group'><label class='checkbox-inline'><input type='checkbox' id='publication_ok' name='publication_ok' value='1'> Publication autorisée.</label></div>";
if($hub_infos["index_ok"]==1)
$form_html[0]["champs"].="<div class='form-group'><label class='checkbox-inline'><input type='checkbox' id='index_ok' name='index_ok' value='1' checked='checked'> Indexation autorisée.</label></div>";
else
$form_html[0]["champs"].="<div class='form-group'><label class='checkbox-inline'><input type='checkbox' id='index_ok' name='index_ok' value='1'> Indexation autorisée.</label></div>";
$form_html[0]["champs"].="
<div class='form-group'>
<label for='memo'>Mémo.</label>
<input class='form-control' type='text' maxlength='".HUB_MAX_MEMO."' name='memo' id='memo' value=\"".htmlspecialchars($hub_infos["memo"])."\">
<p class='help-block'><b>Facultatif</b>. Mémo interne non publié.</p>
</div>
<div class='form-group'><label class='checkbox-inline' for='suppr_ok'><input type='checkbox' id='suppr_ok' name='suppr_ok' value='1'> Je souhaite supprimer ce hub si il n'a pas de dépendances.</label></div>
<div class='form-group'><label class='checkbox-inline text-danger' for='suppr_ok_tot'><input type='checkbox' id='suppr_ok_tot' name='suppr_ok_tot' value='1'> Je souhaite supprimer ce hub, <u>y compris si il a des dépendances (abonnements...)</u>.</label></div>
<input type='hidden' name='id_hub' id='id_hub' value='$id_hub'>
<button type='submit' class='btn btn-success btn-lg'>Enregistrer.</button>
<p><br><br><a href='".PAGE_MAJ_HUB."' title='Saisir un nouveau hub' class='btn btn-info btn-sm'>+ Nouveau hub.</a></p>
</form>";
// les divers éléments annexes au hub
$hub=new FclFlux_hub();
$hub->id_hub=$id_hub;
// éventuelle illustration
if(!empty($hub_infos["illustration"]))
{
$fichier=$hub_infos["illustration"];
$adresse_illustration=HUB_ILLUS_REP."/".$fichier[0]."/".$fichier;
}
$form_html[1]["nom"]="Illustration du hub.";
$form_html[1]["champs"]="$access_rapides<form method='post' id='maj_hub_illustration' action='".PAGE_MAJ_HUB_ILLUSTRATION_ADMIN."' enctype='multipart/form-data' role='form' class='form-horizontal' target='uploadFrame'>";
if((!empty($adresse_illustration))&&(file_exists($adresse_illustration)))
{
$form_html[1]["champs"].="
<p><strong>Illustration actuelle.</strong><br>
<img src='".SITE_URL."/".$adresse_illustration."' alt='Illustration actuelle' class='img-responsive'>
</p>
<div class='form-group'>
<label for='illustration' class='col-sm-3 control-label'>Téléchargez une nouvelle image :</label>
<div class='col-sm-9'><input type='file' name='illustration' id='illustration'></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Facultatif</b>. Vous pouvez télécharger une nouvelle image pour remplacer celle actuelle. Formats autorisés : ".str_replace("|",", ",HUB_ILLUS_EXTENSIONS).".</p></div>
</div>
<div class='form-group'>
<div class='col-sm-offset-3 col-sm-9'>
<div class='checkbox'>
<label for='suppr_illustration'>
<input name='suppr_illustration' type='checkbox' id='suppr_illustration' value='1'> Je souhaite supprimer l'illustration actuelle sans en télécharger une nouvelle.
</label>
</div>
</div>
</div>";
}
else
{
$form_html[1]["champs"].="
<div class='form-group'>
<label for='illustration' class='col-sm-3 control-label'>Téléchargez une illustration :</label>
<div class='col-sm-9'><input type='file' name='illustration' id='illustration'></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Facultatif</b>. Vous pouvez télécharger une image pour illustrer ce hub. Formats autorisés : ".str_replace("|",", ",HUB_ILLUS_EXTENSIONS).".</p></div>
</div>";
}
$form_html[1]["champs"].="<iframe id='uploadFrame' name='uploadFrame' src='#' style='width:90%;height:100px;border:0 solid;'></iframe>
<div id='msg_illustration'></div>
<input type='hidden' name='nom' id='nom' value='".htmlspecialchars($hub_infos["nom"])."'>
<input type='hidden' name='id_hub' id='id_hub' value='$id_hub'>
<div class='form-group'><div class='col-sm-offset-3 col-sm-9'>
<button type='submit' class='btn btn-success btn-lg'>Enregistrer.</button>
</div></div>
</form>\n";
//ajout d'une annonce dans ce hub.
$form_html[2]["nom"]="Saisir une nouvelle annonce dans ce hub.";
$form_html[2]["champs"]="$access_rapides<div id='msg_form_post'></div><form method='post' id='post_hub' name='post_hub' action='".PAGE_MAJ_HUB."' role='form'>
<div class='form-group'>
<label for='ancre'>Ancre.</label>
<input class='form-control' type='text' maxlength='".POST_MAX_ANCRE."' name='ancre' id='ancre' required>
<p class='help-block'><b>Obligatoire</b>.</p>
</div>
<div class='form-group'>
<label for='url'>Adresse (url).</label>
<input class='form-control' type='url' maxlength='".POST_MAX_URL."' name='url' id='url'>
<p class='help-block'><b>Obligatoire si pas de texte d'annonce</b>.</p>
</div>
<div class='form-group'>
<label for='annonce'>Annonce.</label>
<textarea class='form-control' rows='4' name='annonce' id='annonce'></textarea>
<p class='help-block'><b>Obligatoire si pas d'adresse pour l'article</b>.</p>
</div>
<input type='hidden' name='id_hub' id='id_hub' value='$id_hub'>
<button type='submit' class='btn btn-success btn-lg'>Enregistrer.</button></form>";
//classement du hub en rubriques
$rubriques=$hub->get_rubriques_infos();
$suppr_rubrique="";
if(!empty($rubriques))
{
foreach ($rubriques as $rubrique_info)
{
$suppr_rubrique.="<div class='form-group'><ul><a href='".PAGE_MAJ_RUBRIQUES."?id_rubrique=".$rubrique_info["id_rubrique"]."' title=\"+ d'infos sur la rubrique\" target='_blank'>".$rubrique_info["nom"]."</a><li><label class='checkbox-inline' for='suppr_rubrique[]'><input name='suppr_rubrique[]' type='checkbox' id='suppr_rubrique_".$rubrique_info["id_rubrique"]."' value='".$rubrique_info["id_rubrique"]."'>Supprimer ce classement.</label></li>";
if($rubrique_info["reference_ok"]==1)
$suppr_rubrique.="<li><label class='checkbox-inline' for='suppr_reference_ok[]'><input name='suppr_reference_ok[]' type='checkbox' id='suppr_reference_ok_".$rubrique_info["id_rubrique"]."' value='".$rubrique_info["id_rubrique"]."'> Ne plus être un des hubs de référence de cette rubrique.</label></li>";
else
$suppr_rubrique.="<li><label class='checkbox-inline' for='ajout_reference_ok[]'><input name='ajout_reference_ok[]' type='checkbox' id='ajout_reference_ok_".$rubrique_info["id_rubrique"]."' value='".$rubrique_info["id_rubrique"]."'> Désigné comme hub de référence de cette rubrique.</label></li>";
$suppr_rubrique.="</ul></div>\n";
}
}
$form_html[3]["nom"]="Classement du hub.";
$form_html[3]["champs"]=" $access_rapides<div id='msg_form_classement'></div><form method='post' id='rubriques_hub' name='rubriques_hub' action='".PAGE_MAJ_HUB."' role='form'>
<div class='form-group'>
<label for='recherche_rubrique'>Nouvelle rubrique classer le hub.</label>
<input class='form-control' type='text' maxlength='20' name='recherche_rubrique' id='recherche_rubrique'>
</div>
<div id='select_rubriques'></div>
<div class='form-group'><label class='checkbox-inline' for='reference_ok'><input type='checkbox' id='reference_ok' name='reference_ok' value='1'> Désigné comme hub de référence dans cette rubrique.</label></div>";
if(!empty($suppr_rubrique))
$form_html[3]["champs"].="<p><strong>Classement actuel.</strong></p>$suppr_rubrique";
$form_html[3]["champs"].="<input type='hidden' name='id_hub' id='id_hub' value='$id_hub'>
<button type='submit' class='btn btn-success btn-lg'>Enregistrer le nouveau classement.</button></form>";
//désignation des flux importés dans ce hub.
$flux=$hub->get_flux();
$suppr_flux="";
if(!empty($flux))
{
foreach ($flux as $flux_id)
{
$flux_infos=FclFlux_flux::recherche($flux_id["id_flux"],"id_flux","nom");
if(!empty($flux_infos))
$suppr_flux.="<div class='form-group'><label class='checkbox-inline' for='suppr_flux[]'><input name='suppr_flux[]' type='checkbox' id='suppr_flux_".$flux_id["id_flux"]."' value='".$flux_id["id_flux"]."'><a href='".PAGE_MAJ_FLUX."?id_flux=".$flux_id["id_flux"]."' title=\"+ d'infos sur ce flux\" target='_blank'>".$flux_infos["nom"]."</a>.</label></div>\n";
}
}
$form_html[4]["nom"]="Flux importés dans ce hub.";
$form_html[4]["champs"]="$access_rapides<div id='msg_form_flux'></div><form method='post' id='flux_hub' name='flux_hub' action='".PAGE_MAJ_HUB."' role='form'>
<div class='form-group'>
<label for='recherche_flux'>Nouveau flux à importer dans ce hub.</label>
<input class='form-control' type='text' maxlength='20' name='recherche_flux' id='recherche_flux'>
</div>
<div id='select_flux'></div>";
if(!empty($suppr_flux))
$form_html[4]["champs"].="<p><strong>Flux déjà importés (cocher ceux à supprimer) :</strong></p>$suppr_flux";
$form_html[4]["champs"].="<input type='hidden' name='id_hub' id='id_hub' value='$id_hub'>
<button type='submit' class='btn btn-success btn-lg'>Enregistrer.</button></form>";
//désignation des administrateurs du hub
$admins=$hub->get_admins();
$suppr_admins="";
if(!empty($admins))
{
foreach ($admins as $admin_id)
{
$admin_infos=FclFlux_utilisateur::recherche($admin_id["id_utilisateur"],"id_utilisateur","pseudo,email");
if(!empty($admin_infos))
$suppr_admins.="<div class='form-group'><label class='checkbox-inline' for='suppr_admin[]'><input name='suppr_admin[]' type='checkbox' id='suppr_admin_".$admin_id["id_utilisateur"]."' value='".$admin_id["id_utilisateur"]."'><a href='".PAGE_MAJ_COMPTES."?id_utilisateur=".$admin_id["id_utilisateur"]."' title=\"+ d'infos sur cet utilisateur\" target='_blank'>".$admin_infos["pseudo"]." (".$admin_infos["email"].")</a>.</label></div>\n";
}
}
$form_html[5]["nom"]="Administrateurs du hub.";
$form_html[5]["champs"]="$access_rapides<div id='msg_form_admin'></div><form method='post' id='admin_hub' name='admin_hub' action='".PAGE_MAJ_HUB."' role='form'>
<div class='form-group'>
<label for='recherche_admin'>Nouvel administrateur pour ce hub.</label>
<input class='form-control' type='text' maxlength='20' name='recherche_admin' id='recherche_admin'>
</div>
<div id='select_admins'></div>";
if(!empty($suppr_admins))
$form_html[5]["champs"].="<p><strong>Administrateurs actuels (cocher ceux à supprimer) :</strong></p>$suppr_admins";
$form_html[5]["champs"].="<input type='hidden' name='id_hub' id='id_hub' value='$id_hub'>
<button type='submit' class='btn btn-success btn-lg'>Enregistrer.</button></form>";
if($ajax_on)
echo get_html_form($form_html,false);
}
else
$msg_form[]=ERREUR_SQL_ENREG_ABSENT;
}
if((!empty($msg_form))&&($ajax_on))
echo get_html_alerte_msg($msg_form);

View File

@ -0,0 +1,123 @@
<?php
/**
* Script testant les données envoyées lors des demandes de ()classement d'un hub
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
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");
}
if(!empty($_POST["id_hub"]))
$id_hub=intval(trim($_POST["id_hub"]));
if(!empty($_POST["liste_rubriques"]))
$nouvelle_rubrique=intval(trim($_POST["liste_rubriques"]));
$suppr_rubriques=array();
if(!empty($_POST["suppr_rubrique"]))
{
foreach($_POST['suppr_rubrique'] as $id)
$suppr_rubriques[]=intval($id);
}
$suppr_ref_ok=array();
if(!empty($_POST["suppr_reference_ok"]))
{
foreach($_POST['suppr_reference_ok'] as $id)
$suppr_ref_ok[]=intval($id);
}
$ajout_ref_ok=array();
if(!empty($_POST["ajout_reference_ok"]))
{
foreach($_POST['ajout_reference_ok'] as $id)
$ajout_ref_ok[]=intval($id);
}
$msg_form_classement=array();
if(((empty($nouvelle_rubrique))&&(empty($suppr_rubriques))&&(empty($suppr_ref_ok))&&(empty($ajout_ref_ok)))||(empty($id_hub)))
$msg_form_classement[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
else
{
if($_SESSION["statut"]!="administrateur")
$msg_form_classement[]=ERREUR_IMPREVUE;
else
{
require_once("../modele/connexion-bd.php");
$hub=new FclFlux_hub();
$hub->id_hub=$id_hub;
if(!empty($nouvelle_rubrique))
{
$reference_ok=0;
if(!empty($_POST["reference_ok"]))
$reference_ok=1;
$rubrique=new FclFlux_rubrique();
$rubrique->id_rubrique=$nouvelle_rubrique;
$action=$hub->ajout_rubrique($rubrique,$reference_ok);
unset($rubrique);
if(!empty($hub->erreurs))
$msg_form_classement=$hub->erreurs;
elseif($action===false)
$msg_form_classement[]=ERREUR_IMPREVUE;
}
if(!empty($suppr_rubriques))
{
foreach($suppr_rubriques as $rub_id)
{
$rubrique=new FclFlux_rubrique();
$rubrique->id_rubrique=$rub_id;
$action=$hub->suppr_rubrique($rubrique);
unset($rubrique);
if($action===false)
{
$msg_form_classement[]=ERREUR_IMPREVUE;
break;
}
}
}
if(!empty($suppr_ref_ok))
{
foreach($suppr_ref_ok as $rub_id)
{
$rubrique=new FclFlux_rubrique();
$rubrique->id_rubrique=$rub_id;
$action=$hub->actualise_rubrique_ref_ok($rubrique,0);
unset($rubrique);
if($action===false)
{
$msg_form_classement[]=ERREUR_IMPREVUE;
break;
}
}
}
if(!empty($ajout_ref_ok))
{
foreach($ajout_ref_ok as $rub_id)
{
$rubrique=new FclFlux_rubrique();
$rubrique->id_rubrique=$rub_id;
$action=$hub->actualise_rubrique_ref_ok($rubrique,1);
unset($rubrique);
if($action===false)
{
$msg_form_classement[]=ERREUR_IMPREVUE;
break;
}
}
}
if(empty($msg_form_classement))
$msg_form_classement[]=MSG_ADMIN_VALID;
$Bd=null;
}
}
if((!empty($msg_form_classement))&&($ajax_on))
{
if(($msg_form_classement[0]==MSG_ADMIN_VALID)&&(!empty($hub->id_hub)))
echo $hub->id_hub;//tout s'est bien passé, j'actualise l'affichage
else
{
foreach($msg_form_classement as $message)
echo "<h4>$message</h4>";
}
}

View File

@ -0,0 +1,75 @@
<?php
/**
* Script testant les données envoyées lors des demandes d'ajout/suppression d'un flux à importer dans un hub.
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
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");
}
if(!empty($_POST["id_hub"]))
$id_hub=intval(trim($_POST["id_hub"]));
if(!empty($_POST["liste_flux"]))
$nouveau_flux=intval(trim($_POST["liste_flux"]));
$suppr_rubriques=array();
if(!empty($_POST["suppr_flux"]))
{
foreach($_POST['suppr_flux'] as $id)
$suppr_flux[]=intval($id);
}
$msg_form_classement=array();
if(((empty($nouveau_flux))&&(empty($suppr_flux)))||(empty($id_hub)))
$msg_form_classement[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
else
{
if($_SESSION["statut"]!="administrateur")
$msg_form_classement[]=ERREUR_IMPREVUE;
else
{
require_once("../modele/connexion-bd.php");
$hub=new FclFlux_hub();
$hub->id_hub=$id_hub;
if(!empty($nouveau_flux))
{
$flux=new FclFlux_flux();
$flux->id_flux=$nouveau_flux;
$action=$flux->ajout_hub($hub);
if(!empty($flux->erreurs))
$msg_form=$flux->erreurs;
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
}
if(!empty($suppr_flux))
{
foreach($suppr_flux as $flux_id)
{
$flux=new FclFlux_flux();
$flux->id_flux=$flux_id;
$action=$flux->suppr_hub($hub);
if(!empty($flux->erreurs))
$msg_form=$flux->erreurs;
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
}
}
if(empty($msg_form))
$msg_form[]=MSG_ADMIN_VALID;
$Bd=null;
}
}
if((!empty($msg_form))&&($ajax_on))
{
if(($msg_form[0]==MSG_ADMIN_VALID)&&(!empty($hub->id_hub)))
echo $hub->id_hub;//tout s'est bien passé, j'actualise l'affichage
else
{
foreach($msg_form as $message)
echo "<h4>$message</h4>";
}
}

View File

@ -0,0 +1,49 @@
<?php
/**
* Script contrôlant les données envoyées leur d'une demande de mise à jour de l'image illustrant un hub
*
**/
require_once("../modele/FclFlux_hub.php");
$user=new FclFlux_utilisateur();
if(!$user->test_session(true,true))
{
header("Location:".SITE_URL);
exit();
}
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$msg_form=array();
if((empty($_POST["id_hub"]))||(empty($_POST["nom"])))
$msg_form[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
else
{
$form["limites"]["nom_long_min"]=HUB_MIN_NOM;
$form["limites"]["nom_long_max"]=HUB_MAX_NOM;
$form["id_hub"]=intval(trim($_POST["id_hub"]));
$form["nom"]=trim($_POST["nom"]);
$hub=new FclFlux_hub($form);
if(!empty($hub->erreurs))
$msg_form=array_merge($hub->erreurs,$msg_form);
if(empty($msg_form))
{
if(!empty($_FILES['illustration']['tmp_name']))
{
$hub->set_illustration($_FILES['illustration']);
if(empty($hub->erreurs))
$action=$hub->actualise_illustration();
}
if(!empty($_POST["suppr_illustration"]))
$action=$hub->actualise_illustration(true);//supprime le fichier
if(!empty($hub->erreurs))
$msg_form=array_merge($hub->erreurs,$msg_form);
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
if(empty($msg_form))
$msg_form[]=MSG_ADMIN_VALID;
}
}
//affiche les résultats dans l'iframe
include("../vues/admin_hub_illustration_maj.php");
}

84
ctrl/admin_hub_infos_tests.php Executable file
View File

@ -0,0 +1,84 @@
<?php
/**
* Script testant les données envoyées lors de l'enregistrement des données saisies pour un hub
* lors de sa création ou de sa mise à jour
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$form["nom"]=trim($_POST["nom"]);
$form["description"]=trim($_POST["description"]);
if(!empty($_POST["langue"]))
$form["langue"]=$_POST["langue"];
else
$form["langue"]="fr";
if(!empty($_POST["publication_ok"]))
$form["publication_ok"]=1;
else
$form["publication_ok"]=0;
if(!empty($_POST["index_ok"]))
$form["index_ok"]=1;
else
$form["index_ok"]=0;
$form["mots_cles"]=trim($_POST["mots_cles"]);
$form["memo"]=trim($_POST["memo"]);
$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");
}
$msg_form=array();
if((empty($_POST["nom"]))||(empty($_POST["langue"])))
$msg_form[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
else
{
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
else
{
$auteur=new FclFlux_utilisateur();
$auteur->id_utilisateur=$_SESSION["id_utilisateur"];
$form["auteur"]=$auteur;
if(empty($Bd))
require("../modele/connexion-bd.php");
$form["limites"]["nom_long_min"]=HUB_MIN_NOM;
$form["limites"]["nom_long_max"]=HUB_MAX_NOM;
$form["limites"]["description_long_max"]=HUB_MAX_DESCRIPTION;
$form["limites"]["memo_long_max"]=HUB_MAX_MEMO;
$hub=new FclFlux_hub($form);//test les différentes valeurs fournies
if(!empty($hub->erreurs))
$msg_form=array_merge($hub->erreurs,$msg_form);
if(empty($msg_form))
{
if(!empty($_POST["id_hub"]))
{
$form["id_hub"]=$_POST["id_hub"];//utile pour réaffichage si pas en ajax
$hub->id_hub=intval(trim($_POST["id_hub"]));
$action=$hub->actualise(true);
}
else
$action=$hub->ajout();
if(!empty($hub->erreurs))
$msg_form=array_merge($hub->erreurs,$msg_form);
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
if(empty($msg_form))
$msg_form[]=MSG_ADMIN_VALID;
}
$Bd=null;
}
}
if((!empty($msg_form))&&($ajax_on))
{
if(($msg_form[0]==MSG_ADMIN_VALID)&&(!empty($hub->id_hub)))
echo $hub->id_hub;//tout s'est bien passé, je recharge le hub en ajax
else
{
foreach($msg_form as $message)
echo "<h4>$message</h4>";
}
}

40
ctrl/admin_hub_maj.php Executable file
View File

@ -0,0 +1,40 @@
<?php
/**
* Script permettant à un administrateur
* d'ajouter / modifier ou encore supprimer
* les informations concernant un hub
*
**/
require_once("../modele/FclFlux_hub.php");
$user=new FclFlux_utilisateur();
if(!$user->test_session(true,true))
{
header("Location:".SITE_URL);
exit();
}
else
{
include("../ctrl/admin_hub_a_valider.php");//hubs à valider.
if(isset($_POST["nom"]))
{
if((empty($_POST["suppr_ok"]))&&(empty($_POST["suppr_ok_tot"])))
include("../ctrl/admin_hub_infos_tests.php");
else
include("../ctrl/admin_hub_suppr_tests.php");
}
elseif(isset($_POST["recherche"]))
include("../ctrl/admin_hub_recherche.php");
elseif(!empty($_GET["id_hub"]))
include("../ctrl/admin_hub_affiche.php");
else
{//formulaire en mode saisie d'un nouveau hub
$form["nom"]="";
$form["description"]="";
$form["mots_cles"]="";
$form["langue"]="fr";
$form["publication_ok"]=0;
$form["index_ok"]=0;
$form["memo"]="";
}
include("../vues/admin_hub_maj.php");
}

View File

@ -0,0 +1,68 @@
<?php
/**
* Script testant les données envoyées lors de l'enregistrement des données saisies pour un hub
* lors de sa création ou de sa mise à jour
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$form["ancre"]=trim($_POST["ancre"]);
$form["annonce"]=trim($_POST["annonce"]);
$form["url"]=trim($_POST["url"]);
$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_post.php");
}
$msg_form=array();
if((empty($form["ancre"]))||((empty($form["url"]))&&(empty($form["annonce"])))||(empty($_POST["id_hub"])))
$msg_form[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
else
{
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
else
{
$auteur=new FclFlux_utilisateur();
$auteur->id_utilisateur=$_SESSION["id_utilisateur"];
$form["auteur"]=$auteur;
$hub=new FclFlux_hub();
$hub->id_hub=intval(trim($_POST["id_hub"]));
$form["hub"]=$hub;
if(empty($Bd))
require("../modele/connexion-bd.php");
$form["limites"]["ancre_long_min"]=POST_MIN_ANCRE;
$form["limites"]["ancre_long_max"]=POST_MAX_ANCRE;
$form["limites"]["annonce_long_min"]=POST_MIN_ANNONCE;
$form["limites"]["annonce_long_max"]=POST_MAX_ANNONCE;
$form["limites"]["url_long_max"]=POST_MAX_URL;
$post=new FclFlux_post($form);
if(!empty($post->erreurs))
$msg_form=array_merge($post->erreurs,$msg_form);
if(empty($msg_form))
{
$action=$post->ajout();
if(!empty($post->erreurs))
$msg_form=array_merge($post->erreurs,$msg_form);
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
if(empty($msg_form))
$msg_form[]=MSG_ADMIN_VALID;
}
$Bd=null;
}
}
if((!empty($msg_form))&&($ajax_on))
{
if(($msg_form[0]==MSG_ADMIN_VALID)&&(!empty($hub->id_hub)))
echo $hub->id_hub;//tout s'est bien passé, je recharge le hub en ajax
else
{
foreach($msg_form as $message)
echo "<h4>$message</h4>";
}
}

45
ctrl/admin_hub_recherche.php Executable file
View File

@ -0,0 +1,45 @@
<?php
/**
* Script cherchant les hubs pour une recherche lancée par un administrateur
* Les éventuels résultats sont listés pour sélection
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$form["recherche"]=trim($_POST["recherche_hub"]);
$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");
}
if(empty($form["recherche"]))
$select_hubs=get_html_alerte_msg((array) ERREUR_UTILISA_CHAMPS_ABSENTS);
else
{
if($_SESSION["statut"]!="administrateur")
$select_hubs=get_html_alerte_msg((array) ERREUR_IMPREVUE);
else
{
require_once("../modele/connexion-bd.php");
$hubs=FclFlux_hub::recherche_globale($form["recherche"],"id_hub,nom");
$Bd=null;
if(!empty($hubs))
{
$select_hubs="<div class='form-group'>
<label for='liste_hubs' class='col-sm-3 control-label'>".count($hubs)." résultat(s) correspondant :</label>
<div class='col-sm-9'><select name='liste_hubs' id='liste_hubs' autofocus class='form-control'>
<option value='0'></option>";
foreach ($hubs as $hub_infos)
$select_hubs.="<option value='".$hub_infos["id_hub"]."'>".htmlentities(affiche_utf8($hub_infos["nom"],UTF8_OK))."</option>\n";
$select_hubs.="</select></div></div>";
}
else
$select_hubs=get_html_alerte_msg((array) ERREUR_SQL_RECHERCHE);
}
}
if((!empty($select_hubs))&&($ajax_on))
echo $select_hubs;

50
ctrl/admin_hub_suppr_tests.php Executable file
View File

@ -0,0 +1,50 @@
<?php
/**
* Script testant les données envoyées lors d'une demande de suppression d'un hub
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$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_rubrique.php");
require_once("../modele/FclFlux_abonnement.php");
}
$msg_form=array();
if((empty($_POST["id_hub"]))||(((empty($_POST["suppr_ok"])))&&((empty($_POST["suppr_ok_tot"])))))
$msg_form[]=ERREUR_IMPREVUE;
else
{
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
else
{
require_once("../modele/connexion-bd.php");
$hub=new FclFlux_hub();
$form["id_hub"]=$_POST["id_hub"];//utile pour réaffichage si pas en ajax
$hub->id_hub=intval(trim($_POST["id_hub"]));
if(empty($_POST["suppr_ok_tot"]))
$action=$hub->supprime();
else
$action=$hub->supprime(false);
if(!empty($hub->erreurs))
$msg_form=array_merge($hub->erreurs,$msg_form);
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
if(empty($msg_form))
$msg_form[]=MSG_ADMIN_VALID;
$Bd=null;
}
}
if((!empty($msg_form))&&($ajax_on))
{
if($msg_form[0]==MSG_ADMIN_VALID)
echo str_replace("'","\"",get_html_alerte_msg($msg_form,"alert-success"));//pour comparaison en JS
else
echo get_html_alerte_msg($msg_form);
}

26
ctrl/admin_posts_a_valider.php Executable file
View File

@ -0,0 +1,26 @@
<?php
/**
* Script cherchant si il y a des posts à valider, suite à l'ajout par un utilisateur.
* Si oui ils sont listées pour sélection
*
**/
$msg_form=array();
if($_SESSION["statut"]!="administrateur")
$select=get_html_alerte_msg((array) ERREUR_IMPREVUE);
else
{
if(empty($Bd))
require_once("../modele/connexion-bd.php");
$posts=FclFlux_post::get_a_valider();
$Bd=null;
if(!empty($posts))
{
$select="<div class='form-group'>
<label for='liste_posts' class='col-sm-3 control-label'>".count($posts)." posts à contrôler.</label>
<div class='col-sm-9'><select name='liste_posts' id='liste_posts' autofocus class='form-control'>
<option value='0'></option>";
foreach ($posts as $post_infos)
$select.="<option value='".$post_infos["id_post"]."'>".htmlentities(affiche_utf8($post_infos["ancre"],UTF8_OK))."</option>\n";
$select.="</select></div></div>";
}
}

240
ctrl/admin_posts_affiche.php Executable file
View File

@ -0,0 +1,240 @@
<?php
/**
* Script affichant un formulaire permettant de modifier / supprimer un post dont l'id a été passé en paramètre
* et sinon d'en saisir un nouveau en sélectionnant son hub.
* Peut être appelé en ajax ou directement en php si JS désactivé.
*
**/
$ajax_on=false;
if(!empty($_GET["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_post.php");
}
if($_SESSION["statut"]!="administrateur")
{
$msg_form[]=ERREUR_IMPREVUE;
echo get_html_alerte_msg($msg_form);
exit();
}
$ancre="";
$url="";
$annonce="";
$date_diffusion="";
$date_expiration="";
if(!empty($_GET["id_post"]))
{
$id_post=intval(trim($_GET["id_post"]));
if(empty($Bd))
require("../modele/connexion-bd.php");
$post=FclFlux_post::recherche($id_post,"ancre,url,annonce,hub_id,flux_id,auteur_id,time_diffusion,time_expiration,illustration,time_crea,time_validation");
if(!empty($post))
{
$form_html[0]["nom"]="Informations actuelles de ce post ($id_post).";
$form_html[0]["champs"]="<form method='post' id='maj_post' name='maj_post' action='".PAGE_MAJ_POSTS."?id_post=$id_post' role='form' class='form-horizontal'>
<fieldset>
<input type='hidden' name='hub_id' id='hub_id' value='".$post["hub_id"]."'>
<input type='hidden' name='flux_id' id='flux_id' value='".$post["flux_id"]."'>
<input type='hidden' name='auteur_id' id='auteur_id' value='".$post["auteur_id"]."'>
<div class='col-sm-12'><p>Post enregistré le ".date("d/m/Y",$post["time_crea"]);
if(!empty($post["time_crea"]))
{
if(!empty($post["time_validation"]))
$form_html[0]["champs"].=" et validé le ".date("d/m/Y",$post["time_validation"]).".<br>";
else
$form_html[0]["champs"].=" et <b>non encore validé</b>.<br>";
}
if(!empty($post["hub_id"]))
$hub_infos=FclFlux_hub::recherche($post["hub_id"],"id_hub","nom");
if(!empty($post["auteur_id"]))
$auteur_infos=FclFlux_utilisateur::recherche($post["auteur_id"],"id_utilisateur","pseudo,email");
elseif(!empty($post["flux_id"]))
$flux_infos=FclFlux_flux::recherche($post["flux_id"],"id_flux","nom");
if(!empty($hub_infos["nom"]))
{
$form_html[0]["champs"].="Post publié dans le hub : <a href='".PAGE_REPERTOIRE_HUB_INFO.$post["hub_id"]."' target='_blank' title=\"Page du hub\" >".$hub_infos["nom"]."</a>";
if(!empty($auteur_infos["pseudo"]))
$form_html[0]["champs"].=" par : <a href='".PAGE_MAJ_COMPTES."?id_utilisateur=".$post["auteur_id"]."#posts' target='_blank' title=\"Derniers posts de l'utilisateur\">".$auteur_infos["pseudo"]."</a></p>";
elseif(!empty($flux_infos["nom"]))
$form_html[0]["champs"].=" en provenance du flux : <a href='".PAGE_MAJ_FLUX."?id_flux=".$post["flux_id"]."' target='_blank' title=\"Informations du flux\">".$flux_infos["nom"]."</a></p>";
}
else
$form_html[0]["champs"].="</p>".get_html_alerte_msg((array) "Attention, ce post n'a pas de hub !");
$form_html[0]["champs"].="</div>";
$ancre=htmlspecialchars($post["ancre"]);
$url=$post["url"];
// le texte de l'annonce peut déjà contenir du html ou pas...
if(empty($post["annonce"]))
$annonce="";
else
{
$annonce=htmlspecialchars($post["annonce"]);
if(strpos($post["annonce"],"<a ")===false)
$annonce=crea_liens_texte($annonce);
if(strpos($post["annonce"],"<br")===false)
$annonce=nl2br($annonce);
if(strpos($post["annonce"],"</p>")===false)
$annonce="<p>$annonce</p>";
}
// des dates peuvent avoir été fournies ou non pour le début de la diffusion et l'expiration
if(!empty($post["time_diffusion"]))
$date_diffusion=date("d/m/Y",$post["time_diffusion"]);
if(!empty($post["time_expiration"]))
$date_expiration=date("d/m/Y",$post["time_expiration"]);
}
else
{
$msg_form[]=ERREUR_SQL_ENREG_ABSENT;
echo get_html_alerte_msg($msg_form);
exit();
}
}
else
{//saisie d'une nouvelle annonce
$form_html[0]["nom"]="Saisie d'un nouveau post.";
$form_html[0]["champs"]="<form method='post' id='maj_post' name='maj_post' action='".PAGE_MAJ_POSTS."' role='form' class='form-horizontal'>
<fieldset>
<input type='hidden' name='auteur_id' id='auteur_id' value='".$user->id_utilisateur."'>";
}
$form_html[0]["champs"].="
<div class='form-group'>
<label for='ancre' class='col-sm-3 control-label'>Titre :</label>
<div class='col-sm-9'><input class='form-control' type='text' maxlength='".POST_MAX_ANCRE."' name='ancre' id='ancre' value=\"$ancre\" required></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Obligatoire</b>.</p></div>
</div>
<div class='form-group'>
<label for='url' class='col-sm-3 control-label'>Adresse (url) :</label>
<div class='col-sm-9'><input class='form-control' type='url' maxlength='".POST_MAX_URL."' name='url' id='url' value=\"$url\"></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Obligatoire si pas de texte pour l'annonce</b>.";
if(!empty($url))
$form_html[0]["champs"].=" <a href='".$post["url"]."' target='_blank' class='btn btn-success bt-sm'>Visitez la page.</a>";
$form_html[0]["champs"].="</p></div>
<div class='form-group'>
<label for='time_diffusion' class='col-sm-3 control-label'>Date de diffusion :</label>
<div class='col-sm-9'><input class='form-control' type='text' name='time_diffusion' id='time_diffusion' value=\"".$date_diffusion."\"></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Facultatif</b>. Le jour de début de diffusion du post si différent de la date de validation. Format ".DATE_FORMAT."</p></div>
</div>";
if(empty($id_post))
{
$form_html[0]["champs"].="<div class='form-group'>
<label for='recherche_hub' class='col-sm-3 control-label'>Cherchez le hub :</label>
<div class='col-sm-9'><input class='form-control' name='recherche_hub' id='recherche_hub' placeholder=\"Hub à rechercher\" required></div>
</div>
<div id='selection_hubs'>";
if(!empty($select_hubs))
$form_html[0]["champs"].=$select_hubs;
$form_html[0]["champs"].="</div>";
}
$form_html[0]["champs"].="<div class='form-group'>
<label for='time_expiration' class='col-sm-3 control-label'>Date d'expiration :</label>
<div class='col-sm-9'><input class='form-control' type='text' name='time_expiration' id='time_expiration' value=\"".$date_expiration."\"></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Facultatif</b>. Date le post doit être supprimé. Par défaut, il sera supprimé ".POSTS_MAX_JOURS." jours après le début de sa diffusion.</p></div>
</div>
<div class='form-group'>
<label for='annonce' class='col-sm-3 control-label'>Texte de l'annonce :</label>
<div class='col-sm-9'><textarea class='form-control' rows='10' name='annonce' id='annonce'>$annonce</textarea></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Obligatoire si pas d'adresse fournie</b>.</p></div>";
if((!empty($annonce))&&((isset($post["time_validation"]))&&(!empty($post["time_validation"]))))
$form_html[0]["champs"].="<div class='col-sm-offset-3 col-sm-9'><p><a href='".PAGE_REPERTOIRE_POST_INFO."".$id_post."' target='_blank' class='btn btn-success bt-sm'>Voir l'annonce.</a></p></div>";
$form_html[0]["champs"].="</div>";
if(!empty($id_post))
{
$form_html[0]["champs"].="<div class='form-group'>
<div class='col-sm-offset-3 col-sm-9'>
<div class='checkbox'>
<label class='text-danger' for='suppr_ok'><input type='checkbox' name='suppr_ok' id='suppr_ok' value='1'> Je souhaite supprimer cette post.</label>
</div></div></div>
<input type='hidden' name='id_post' id='id_post' value='$id_post'>";
}
$form_html[0]["champs"].="<div id='msg_posts' class='col-sm-offset-3 col-sm-9'></div>
<div class='form-group'>
<div class='col-sm-12'>
<div class='col-sm-offset-3 col-sm-3'><button type='submit' class='btn btn-success btn-lg'>Enregistrer.</button></div>
<div class='col-sm-offset-1 col-sm-2'><a href='".PAGE_MAJ_POSTS."' class='btn btn-success btn-lg'>Nouveau post.</a></div>
</div>
</div>
</fieldset></form>";
if(!empty($id_post))
{
if(!empty($post["illustration"]))
{
$fichier=$post["illustration"];
$adresse_illustration=POST_ILLUS_REP."/".$fichier[0]."/".$fichier;
}
$form_html[1]["nom"]="Illustration.";
$form_html[1]["champs"]="
<form method='post' id='maj_illustration' action='".PAGE_MAJ_ILLUSTRATION_POST."' enctype='multipart/form-data' role='form' class='form-horizontal' target='uploadFrame'>
<input type='hidden' name='id_post_illustration' id='id_post_illustration' value='$id_post'>
<input type='hidden' name='ancre_illustration' id='ancre_illustration' value=\"$ancre\">";
if((!empty($adresse_illustration))&&(file_exists($adresse_illustration)))
{
$form_html[1]["champs"].="
<p><strong>Illustration actuelle.</strong><br>
<img src='".SITE_URL."/".$adresse_illustration."' alt='Illustration actuelle' class='img-responsive'>
</p>
<div class='form-group'>
<label for='illustration' class='col-sm-3 control-label'>Téléchargez une nouvelle image :</label>
<div class='col-sm-9'><input type='file' name='illustration' id='illustration'></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Facultatif</b>. Vous pouvez télécharger une nouvelle image pour remplacer celle actuelle. Formats autorisés : ".str_replace("|",", ",POST_ILLUS_EXTENSIONS).".</p></div>
</div>
<div class='form-group'>
<div class='col-sm-offset-3 col-sm-9'>
<div class='checkbox'>
<label for='suppr_illustration'>
<input name='suppr_illustration' type='checkbox' id='suppr_illustration' value='1'> Je souhaite supprimer l'illustration actuelle sans en télécharger une nouvelle.
</label>
</div></div></div>";
}
else
{
$form_html[1]["champs"].="
<div class='form-group'>
<label for='illustration' class='col-sm-3 control-label'>Téléchargez une illustration :</label>
<div class='col-sm-9'><input type='file' name='illustration' id='illustration'></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Facultatif</b>. Vous pouvez télécharger une image pour illustrer ce post. Formats autorisés : ".str_replace("|",", ",POST_ILLUS_EXTENSIONS).".</p></div>
</div>";
}
$form_html[1]["champs"].="<iframe id='uploadFrame' name='uploadFrame' src='#' style='width:90%;height:100px;border:0 solid;'></iframe>
<div id='msg_illustration'></div>
<div class='form-group'>
<div class='col-sm-offset-3 col-sm-12'><button type='submit' class='btn btn-success btn-lg'>Enregistrer.</button></div>
</div>
</form>\n";
$form_html[2]["nom"]="Changer le hub où est classé ce post.";
$form_html[2]["champs"]="<form method='post' id='change_hub_post' name='change_hub_post' action='".PAGE_MAJ_POSTS."' class='form-horizontal' role='form'>
<fieldset>
<div class='form-group'>
<label class='sr-only' for='recherche_hub' class='col-sm-3 control-label'>Rechercher le nouvel hub :</label>
<div class='col-sm-7'><input type='text' class='form-control' name='recherche_hub' id='recherche_hub' placeholder=\"Hub à rechercher\" required></div>
<div class='col-sm-2'><button type='submit' class='btn btn-default'>Rechercher le nouvel hub.</button></div>
</div>
<input type='hidden' name='id_post_hub' id='id_post_hub' value='$id_post'>
<div id='selection_hubs'>";
if(!empty($select_hubs))
$form_html[2]["champs"].=$select_hubs;
$form_html[2]["champs"].="</div>
</fieldset></form>";
$form_html[3]["nom"]="Changer l'auteur de ce post.";
$form_html[3]["champs"]="<form method='post' id='change_auteur_post' name='change_auteur_post' action='".PAGE_MAJ_POSTS."' class='form-horizontal' role='form'>
<fieldset>
<div class='form-group'>
<label class='sr-only' for='recherche_auteur' class='col-sm-3 control-label'>Rechercher le nouvel auteur :</label>
<div class='col-sm-7'><input type='text' class='form-control' name='recherche_compte' id='recherche_compte' placeholder=\"Auteur à rechercher\" required></div>
<div class='col-sm-2'><button type='submit' class='btn btn-default'>Rechercher le nouvel auteur.</button></div>
</div>
<input type='hidden' name='id_post_auteur' id='id_post_auteur' value='$id_post'>
<div id='selection_auteurs'>";
if(!empty($select))
$form_html[3]["champs"].=$select;
$form_html[3]["champs"].="</div>
</fieldset></form>";
}
if($ajax_on)
echo get_html_form($form_html,false);

View File

@ -0,0 +1,60 @@
<?php
/**
* Script testant les données envoyées lors d'une demande de changement de l'auteur d'un post
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$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_post.php");
}
$msg_form=array();
if((empty($_POST["id_post_auteur"]))||(empty($_POST["liste_utilisateurs"])))
$msg_form[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
else
{
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
else
{
$id_post=intval($_POST["id_post_auteur"]);
$id_auteur=intval($_POST["liste_utilisateurs"]);
if(empty($Bd))
require("../modele/connexion-bd.php");
$form["id_post"]=$id_post;
$auteur=new FclFlux_utilisateur();
$auteur->id_utilisateur=$id_auteur;
$form["auteur"]=$auteur;
unset($auteur);
$post=new FclFlux_post($form);
if(!empty($post->erreurs))
$msg_form=array_merge($post->erreurs,$msg_form);
if(empty($msg_form))
{
$action=$post->change_auteur();
if(!empty($post->erreurs))
$msg_form=array_merge($post->erreurs,$msg_form);
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
if(empty($msg_form))
$msg_form[]=MSG_ADMIN_VALID;
}
$Bd=null;
}
}
if((!empty($msg_form))&&($ajax_on))
{
if(($msg_form[0]==MSG_ADMIN_VALID)&&(!empty($post->id_post)))
echo $post->id_post;//tout s'est bien passé, je recharge le post en ajax
else
{
foreach($msg_form as $message)
echo "<h4>$message</h4>";
}
}

View File

@ -0,0 +1,60 @@
<?php
/**
* Script testant les données envoyées lors d'une demande de changement du hub est diffusé un post
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$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_post.php");
}
$msg_form=array();
if((empty($_POST["id_post_hub"]))||(empty($_POST["liste_hubs"])))
$msg_form[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
else
{
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
else
{
$id_post=intval($_POST["id_post_hub"]);
$id_hub=intval($_POST["liste_hubs"]);
if(empty($Bd))
require("../modele/connexion-bd.php");
$form["id_post"]=$id_post;
$hub=new FclFlux_hub();
$hub->id_hub=$id_hub;
$form["hub"]=$hub;
unset($hub);
$post=new FclFlux_post($form);
if(!empty($post->erreurs))
$msg_form=array_merge($post->erreurs,$msg_form);
if(empty($msg_form))
{
$action=$post->change_hub();
if(!empty($post->erreurs))
$msg_form=array_merge($post->erreurs,$msg_form);
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
if(empty($msg_form))
$msg_form[]=MSG_ADMIN_VALID;
}
$Bd=null;
}
}
if((!empty($msg_form))&&($ajax_on))
{
if(($msg_form[0]==MSG_ADMIN_VALID)&&(!empty($post->id_post)))
echo $post->id_post;//tout s'est bien passé, je recharge le post en ajax
else
{
foreach($msg_form as $message)
echo "<h4>$message</h4>";
}
}

View File

@ -0,0 +1,81 @@
<?php
/**
* Script testant les données envoyées lors de la mise à jour d'un post.
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$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_post.php");
}
$msg_form=array();
if(((empty($_POST["auteur_id"]))&&(empty($_POST["flux_id"])))||((empty($_POST["hub_id"]))&&(empty($_POST["liste_hubs"])))||(empty($_POST["ancre"]))||((empty($_POST["url"]))&&(empty($_POST["annonce"]))))
$msg_form[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
else
{
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$form["ancre"]=trim($_POST["ancre"]);
$form["url"]=trim($_POST["url"]);
$form["annonce_html"]=trim($_POST["annonce"]);
$form["time_diffusion"]=trim($_POST["time_diffusion"]);
$form["time_expiration"]=trim($_POST["time_expiration"]);
$form["limites"]["ancre_long_min"]=POST_MIN_ANCRE;
$form["limites"]["ancre_long_max"]=POST_MAX_ANCRE;
$form["limites"]["url_long_max"]=POST_MAX_URL;
$form["limites"]["annonce_long_min"]=POST_MIN_ANNONCE;
$form["limites"]["annonce_long_max"]=POST_MAX_ANNONCE;
$hub=new FclFlux_hub();
if(!empty($_POST["id_post"]))
$hub->id_hub=intval(trim($_POST["hub_id"]));
else
$hub->id_hub=intval(trim($_POST["liste_hubs"]));
$form["hub"]=$hub;
$post=new FclFlux_post($form);
if(!empty($post->erreurs))
$msg_form=array_merge($post->erreurs,$msg_form);
if(empty($msg_form))
{
if(!empty($_POST["id_post"]))
{// mise à jour d'un post
$post->id_post=intval(trim($_POST["id_post"]));
$action=$post->actualise();
}
else
{//enregistrement d'un nouveau post.
$auteur=new FclFlux_utilisateur();
$auteur->id_utilisateur=intval(trim($_POST["auteur_id"]));
$post->set_auteur($auteur);
if(empty($post->erreurs))
$action=$post->ajout();
}
if(!empty($post->erreurs))
$msg_form=array_merge($post->erreurs,$msg_form);
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
if(empty($msg_form))
{
$msg_form[]=MSG_ADMIN_VALID;
$form["id_post"]=$post->id_post;//utile pour réaffichage si pas en ajax
}
}
$Bd=null;
}
}
if((!empty($msg_form))&&($ajax_on))
{
if(($msg_form[0]==MSG_ADMIN_VALID)&&(!empty($post->id_post)))
echo $post->id_post;//tout s'est bien passé, je recharge le post en ajax
else
echo get_html_alerte_msg($msg_form);
}

27
ctrl/admin_posts_maj.php Executable file
View File

@ -0,0 +1,27 @@
<?php
/**
* Script permettant à un administrateur de gérer les posts pour les enregister, modifier ou supprimer.
*
**/
require_once("../modele/FclFlux_post.php");
$user=new FclFlux_utilisateur();
if(!$user->test_session(true,true))
{
header("Location:".SITE_URL);
exit();
}
else
{
include("../ctrl/admin_posts_a_valider.php");
if(isset($_POST["ancre"]))
{
if(empty($_POST["suppr_ok"]))
include("../ctrl/admin_posts_infos_tests.php");
else
include("../ctrl/admin_posts_suppr_tests.php");
}
elseif(isset($_POST["recherche"]))
include("../ctrl/admin_posts_recherche.php");
include("../ctrl/admin_posts_affiche.php");
include("../vues/admin_posts_maj.php");
}

45
ctrl/admin_posts_recherche.php Executable file
View File

@ -0,0 +1,45 @@
<?php
/**
* Script cherchant les posts pour une recherche lancée par un administrateur
* Les éventuels résultats sont listés pour sélection
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$form["recherche"]=trim($_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_post.php");
}
if(empty($form["recherche"]))
$select=get_html_alerte_msg((array) ERREUR_UTILISA_CHAMPS_ABSENTS);
else
{
if($_SESSION["statut"]!="administrateur")
$select=get_html_alerte_msg((array) ERREUR_IMPREVUE);
else
{
require_once("../modele/connexion-bd.php");
$posts=FclFlux_post::recherche_globale($form["recherche"],"id_post,ancre");
$Bd=null;
if(!empty($posts))
{
$select="<div class='form-group'>
<label for='liste_posts' class='col-sm-3 control-label'>".count($posts)." résultat(s) correspondant</label>
<div class='col-sm-9'><select name='liste_posts' id='liste_posts' autofocus class='form-control'>
<option value='0'></option>";
foreach ($posts as $post_info)
$select.="<option value='".$post_info["id_post"]."'>".htmlentities(affiche_utf8($post_info["ancre"],UTF8_OK))."</option>\n";
$select.="</select></div></div>";
}
else
$select=get_html_alerte_msg((array) ERREUR_SQL_RECHERCHE);
}
}
if((!empty($select))&&($ajax_on))
echo $select;

View File

@ -0,0 +1,49 @@
<?php
/**
* Script testant les données envoyées lors d'une demande de suppression d'un post
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$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_post.php");
}
$msg_form=array();
if((empty($_POST["id_post"]))||(empty($_POST["suppr_ok"]))||(empty($_POST["hub_id"])))
$msg_form[]=ERREUR_IMPREVUE;
else
{
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$form["id_post"]=intval(trim($_POST["id_post"]));
$hub=new FclFlux_hub();
$hub->id_hub=intval(trim($_POST["hub_id"]));
$form["hub"]=$hub;
$post=new FclFlux_post($form);
$action=$post->supprime();
if(!empty($post->erreurs))
$msg_form=array_merge($post->erreurs,$msg_form);
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
if(empty($msg_form))
$msg_form[]=MSG_ADMIN_VALID;
$Bd=null;
}
}
if((!empty($msg_form))&&($ajax_on))
{
if($msg_form[0]==MSG_ADMIN_VALID)
echo str_replace("'","\"",get_html_alerte_msg($msg_form,"alert-success"));//pour comparaison en JS
else
echo get_html_alerte_msg($msg_form);
}

View File

@ -0,0 +1,76 @@
<?php
/**
* Script affichant un formulaire permettant de modifier / supprimer une rubrique
* dont l'id a été passé en paramètre
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$ajax_on=false;
if(!empty($_GET["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_rubrique.php");
}
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
else
{
$id_rubrique=intval(trim($_GET["id_rubrique"]));
require_once("../modele/connexion-bd.php");
$rubrique=FclFlux_rubrique::recherche($id_rubrique,"nom,description,mere_id,reference_ok,insee");
if(!empty($rubrique))
{
$form_html["nom"]="Informations de la rubrique ($id_rubrique).";
$form_html["champs"]="<form method='post' id='maj_rubrique' name='maj_rubrique' action='".PAGE_MAJ_RUBRIQUES."?id_rubrique=$id_rubrique' role='form'>";
$rubrique_stats=new FclFlux_rubrique();
$rubrique_stats->id_rubrique=$id_rubrique;
$stats=$rubrique_stats->get_stats();
if(!empty($stats))
$form_html["champs"].="<div class='col-sm-12'><p class='help-block'><strong>Les bureaux de poste classés dans cette rubrique comptent ".$stats["nb_abo_actifs_directs"]." abonnés différents (".$stats["nb_abo_inactifs_directs"]." inactifs et ".$stats["nb_abo_en_pause_directs"]." en pause) et ".$stats["nb_abo_actifs_indirects"]." en comptant les sous-rubriques (".$stats["nb_abo_inactifs_indirects"]." inactifs et ".$stats["nb_abo_en_pause_indirects"]." en pause).</strong></p></div>";
unset($rubrique_stats);
if(!empty($rubrique["mere_id"]))
{
$mere=FclFlux_rubrique::recherche($rubrique["mere_id"],"nom,id_rubrique");
if(!empty($mere["nom"]))
$form_html["champs"].="<h3>Rubrique supérieure actuelle : <a href='".PAGE_MAJ_RUBRIQUES."?id_rubrique=".$mere["id_rubrique"]."' target='_blank' title='+ infos sur cette rubrique'>".$mere["nom"]."</a></h3>";
}
$form_html["champs"].="
<div class='form-group'>
<label for='cherche_mere'>Changer la rubrique supérieure.</label>
<input class='form-control' type='text' maxlength='20' name='cherche_mere' id='cherche_mere'>
<p class='help-block'><b>Facultatif</b>. Si vous souhaitez modidier le classement de cette rubrique, cherchez le nom de la rubrique supérieure.</p>
</div><div id='sup_meres'></div>
<div class='form-group'>
<label for='nom'>Nom de la rubrique.</label>
<input class='form-control' type='text' maxlength='".RUBRIQUE_MAX_NOM."' name='nom' id='nom' value=\"".htmlspecialchars($rubrique["nom"])."\" required>
<p class='help-block'><b>Obligatoire</b>.</p>
</div>
<div class='form-group'>
<label for='description'>Description.</label>
<input class='form-control' type='text' maxlength='".RUBRIQUE_MAX_DESCRIPTION."' name='description' id='description' value=\"".htmlspecialchars($rubrique["description"])."\">
<p class='help-block'><b>Facultatif</b>.</p>
</div>";
if($rubrique["reference_ok"]==1)
$form_html["champs"].="<div class='form-group'><label class='checkbox-inline'><input type='checkbox' id='reference_ok' name='reference_ok' value='1' checked='checked'> Rubrique de référence pour les abonnements rapides.</label></div>";
else
$form_html["champs"].="<div class='form-group'><label class='checkbox-inline'><input type='checkbox' id='reference_ok' name='reference_ok' value='1'> Rubrique de référence pour les abonnements rapides.</label></div>";
$form_html["champs"].="
<div class='form-group'><label class='checkbox-inline' for='suppr_ok'><input type='checkbox' id='suppr_ok' name='suppr_ok' value='1'> Je souhaite supprimer cette rubrique.</label></div>
<div class='form-group'><label class='checkbox-inline text-danger' for='suppr_ok_tot'><input type='checkbox' id='suppr_ok_tot' name='suppr_ok_tot' value='1'> Je souhaite supprimer cette rubrique, <u>y compris si elle a des dépendances (hubs, abonnements...)</u>.</label></div>
<input type='hidden' name='id_rubrique' id='id_rubrique' value='$id_rubrique'>
<div id='msg_rubrique'></div>
<button type=\"submit\" class=\"btn btn-success btn-lg\">Enregistrer.</button>
<p><br><br><a href='".PAGE_MAJ_RUBRIQUES."' title='Saisir une nouvelle rubrique' class='btn btn-info btn-sm'>+ Nouvelle rubrique.</a></p>
</form>";
if($ajax_on)
echo get_html_form($form_html,false);
}
else
$msg_form[]=ERREUR_SQL_ENREG_ABSENT;
}
if((!empty($msg_form))&&($ajax_on))
echo get_html_alerte_msg($msg_form);

View File

@ -0,0 +1,76 @@
<?php
/**
* Script testant les données envoyées lors de l'enregistrement d'une nouvelle rubrique
* ou encore de sa mise à jour
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
if(!empty($_POST["id_rubrique"]))
$form["id_rubrique"]=$_POST["id_rubrique"];//utile pour certains tests sur autres attributs de l'objet.
$form["nom"]=trim($_POST["nom"]);
$form["description"]=trim($_POST["description"]);
if(!empty($_POST["reference_ok"]))
$form["reference_ok"]=1;
else
$form["reference_ok"]=0;
$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_rubrique.php");
}
$msg_form=array();
if(empty($_POST["nom"]))
$msg_form[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
else
{
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
else
{
$auteur=new FclFlux_utilisateur();
$auteur->id_utilisateur=$_SESSION["id_utilisateur"];
$form["auteur"]=$auteur;
if(!empty($_POST["mere_id"]))
{
$mere=new FclFlux_rubrique();
$mere->id_rubrique=$_POST["mere_id"];
$form["rubrique_sup"]=$mere;
}
require_once("../modele/connexion-bd.php");
$form["limites"]["nom_long_min"]=RUBRIQUE_MIN_NOM;
$form["limites"]["nom_long_max"]=RUBRIQUE_MAX_NOM;
$form["limites"]["description_long_max"]=RUBRIQUE_MAX_DESCRIPTION;
$rubrique=new FclFlux_rubrique($form);//test les différentes valeurs fournies
if(!empty($rubrique->erreurs))
$msg_form=array_merge($rubrique->erreurs,$msg_form);
if(empty($msg_form))
{
if(!empty($_POST["id_rubrique"]))
{
$rubrique->id_rubrique=intval(trim($_POST["id_rubrique"]));
$action=$rubrique->actualise();
}
else
$action=$rubrique->ajout();
if(!empty($rubrique->erreurs))
$msg_form=array_merge($rubrique->erreurs,$msg_form);
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
if(empty($msg_form))
$msg_form[]=MSG_ADMIN_VALID;
}
$Bd=null;
}
}
if((!empty($msg_form))&&($ajax_on))
{
if(($msg_form[0]==MSG_ADMIN_VALID)&&(!empty($rubrique->id_rubrique)))
echo $rubrique->id_rubrique;//tout s'est bien passé, je recharge l'abonnement en ajax
else
echo get_html_alerte_msg($msg_form);
}

35
ctrl/admin_rubriques_maj.php Executable file
View File

@ -0,0 +1,35 @@
<?php
/**
* Script permettant de chercher une rubrique pour l'afficher
* puis éventuellement la modifier / supprimer
* on peut aussi saisir une nouvelle rubrique
*
**/
require_once("../modele/FclFlux_rubrique.php");
$user=new FclFlux_utilisateur();
if(!$user->test_session(true,true))
{
header("Location:".SITE_URL);
exit();
}
else
{
if(isset($_POST["nom"]))
{
if((empty($_POST["suppr_ok"]))&&(empty($_POST["suppr_ok_tot"])))
include("../ctrl/admin_rubriques_infos_tests.php");
else
include("../ctrl/admin_rubriques_suppr_tests.php");
}
elseif(isset($_POST["recherche"]))
include("../ctrl/admin_rubriques_recherche.php");
elseif(!empty($_GET["id_rubrique"]))
include("../ctrl/admin_rubriques_affiche.php");
else
{//formulaire en mode saisie d'une nouvelle rubrique
$form["nom"]="";
$form["description"]="";
$form["reference_ok"]=0;
}
include("../vues/admin_rubriques_maj.php");
}

View File

@ -0,0 +1,56 @@
<?php
/**
* Script cherchant les rubriques pour une recherche lancée par un administrateur
* Les éventuels résultats sont listés pour sélection
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$form["recherche"]=trim($_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_rubrique.php");
}
if(empty($form["recherche"]))
$select=get_html_alerte_msg((array) ERREUR_UTILISA_CHAMPS_ABSENTS);
else
{
if($_SESSION["statut"]!="administrateur")
$select=get_html_alerte_msg((array) ERREUR_IMPREVUE);
else
{
require_once("../modele/connexion-bd.php");
$rubriques=FclFlux_rubrique::recherche_globale($form["recherche"],"id_rubrique,nom");
if(!empty($rubriques))
{
$select="<div class='form-group'>
<label for='liste_rubriques'>".count($rubriques)." résultat(s) correspondant</label>
<select name='liste_rubriques' id='liste_rubriques' autofocus class='form-control'>
<option value='0'></option>";
foreach ($rubriques as $rubrique_info)
{
if(!empty($_POST["get_nb_abos"]))
{
$rubrique_liste=new FclFlux_rubrique();
$rubrique_liste->id_rubrique=$rubrique_info["id_rubrique"];
$rubrique_liste_stats=$rubrique_liste->get_stats();
$select.="<option value='".$rubrique_info["id_rubrique"]."'>".htmlentities(affiche_utf8($rubrique_info["nom"],UTF8_OK))." (".$rubrique_liste_stats["nb_abo_actifs_indirects"]." abonnés actifs)</option>\n";
unset($rubrique_liste);unset($rubrique_liste_stats);
}
else
$select.="<option value='".$rubrique_info["id_rubrique"]."'>".htmlentities(affiche_utf8($rubrique_info["nom"],UTF8_OK))."</option>\n";
}
$select.="</select></div>";
}
else
$select=get_html_alerte_msg((array) ERREUR_SQL_RECHERCHE);
$Bd=null;
}
}
if((!empty($select))&&($ajax_on))
echo $select;

52
ctrl/admin_rubriques_select.php Executable file
View File

@ -0,0 +1,52 @@
<?php
/**
* Script cherchant les rubriques pour une recherche lancée par un administrateur
* en vue de définir la rubrique supérieure
* Les éventuels résultats sont listés pour sélection
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$form["recherche"]=trim($_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_rubrique.php");
}
$msg_form=array();
if(!empty($form["recherche"]))
{
if($_SESSION["statut"]!="administrateur")
$mere_select=get_html_alerte_msg((array) ERREUR_IMPREVUE);
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$rubriques=FclFlux_rubrique::recherche_globale($form["recherche"],"id_rubrique,nom");
$Bd=null;
if(!empty($rubriques))
{
$mere_select=$rubriques;
if($ajax_on)
{
echo "<div class='form-group'>
<label for='mere_id'> >> Sélectionnez la rubrique supérieure parmi les ".count($rubriques)." résultat(s).</label>
<select name='mere_id' autofocus class='form-control'>";
foreach ($rubriques as $rubrique_info)
echo "<option value='".$rubrique_info["id_rubrique"]."'>".htmlentities(affiche_utf8($rubrique_info["nom"],UTF8_OK))."</option>\n";
echo "</select></div>";
}
}
else
{
if(!$ajax_on)
$msg_form[]=ERREUR_SQL_RECHERCHE;
else
echo get_html_alerte_msg((array) ERREUR_SQL_RECHERCHE);
}
}
}

View File

@ -0,0 +1,50 @@
<?php
/**
* Script testant les données envoyées lors d'une demande de suppression d'une rubrique
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$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_rubrique.php");
}
$msg_form=array();
if((empty($_POST["id_rubrique"]))||(((empty($_POST["suppr_ok"])))&&((empty($_POST["suppr_ok_tot"])))))
$msg_form[]=ERREUR_IMPREVUE;
else
{
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$rubrique=new FclFlux_rubrique();
$form["id_rubrique"]=$_POST["id_rubrique"];//utile pour réaffichage si pas en ajax
$rubrique->id_rubrique=intval(trim($_POST["id_rubrique"]));
if(empty($_POST["suppr_ok_tot"]))
$action=$rubrique->supprime();
else
$action=$rubrique->supprime(false);
if(!empty($rubrique->erreurs))
$msg_form=array_merge($rubrique->erreurs,$msg_form);
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
if(empty($msg_form))
$msg_form[]=MSG_ADMIN_VALID;
$Bd=null;
}
}
if((!empty($msg_form))&&($ajax_on))
{
if($msg_form[0]==MSG_ADMIN_VALID)
echo str_replace("'","\"",get_html_alerte_msg($msg_form,"alert-success"));//pour comparaison en JS
else
echo get_html_alerte_msg($msg_form);
}

View File

@ -0,0 +1,26 @@
<?php
/**
* Script cherchant si il y a des sites sources à valider, suite à un ajout par un utilisateur.
* Si oui elles sont listées pour sélection
*
**/
$msg_form=array();
if($_SESSION["statut"]!="administrateur")
$select=get_html_alerte_msg((array) ERREUR_IMPREVUE);
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$sources=FclFlux_source::get_a_valider();
$Bd=null;
if(!empty($sources))
{
$select="<div class='form-group'>
<label for='liste_sources'>".count($sources)." source(s) à contrôler.</label>
<select name='liste_sources' id='liste_sources' autofocus class='form-control'>
<option value='0'></option>";
foreach ($sources as $source_info)
$select.="<option value='".$source_info["id_source"]."'>".htmlentities(affiche_utf8($source_info["nom"],UTF8_OK))."</option>\n";
$select.="</select></div>";
}
}

67
ctrl/admin_sources_affiche.php Executable file
View File

@ -0,0 +1,67 @@
<?php
/**
* Script affichant un formulaire permettant de modifier / supprimer une source de flux
* dont l'id a été passé en paramètre
* Peut être appelé en ajax ou directement en php si JS désactivé
**/
$ajax_on=false;
if(!empty($_GET["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_source.php");
}
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
else
{
$id_source=intval(trim($_GET["id_source"]));
if(empty($Bd))
require("../modele/connexion-bd.php");
$source=FclFlux_source::recherche($id_source,"nom,url,description");
if(!empty($source))
{
$form_html["nom"]="Informations de la source n°$id_source.";
$stats_txt="";
$source_stats=new FclFlux_source();
$source_stats->id_source=$id_source;
$stats=$source_stats->get_liste_abonnes();
$stats["nb_clics"]=$source_stats->get_nb_clics();
if(!empty($stats))
$stats_txt="<p><strong>Cette source compte ".count($stats["actifs"])." abonnés actifs, ".count($stats["inactifs"])." abonnements désactivés et ".count($stats["en_pause"])." abonnés en pause. Depuis le début ses flux ont reçu ".$stats["nb_clics"]." clics.</strong>.</p>";
unset($source_stats);unset($stats);
$form_html["champs"]="<form method='post' id='maj_source' name='maj_source' ction='".PAGE_MAJ_SOURCE."?id_source=$id_source' role='form'>
$stats_txt
<div class='form-group'>
<label for='designation'>Nom du site.</label>
<input class='form-control' type='text' maxlength='".SOURCE_MAX_NOM."' name='designation' id='designation' value=\"".htmlspecialchars($source["nom"])."\" required>
<p class='help-block'><b>Obligatoire</b>.</p>
</div>
<div class='form-group'>
<label for='url'>Adresse du site.</label>
<input class='form-control' type='url' maxlength='".SOURCE_MAX_URL."' name='url' id='url' value=\"".$source["url"]."\" required>
<p class='help-block'><b>Obligatoire</b>. <a href=\"".$source["url"]."\" title='Voir le site' class='btn btn-info btn-sm' target='_blank'>Voir le site.</a></p>
</div>
<div class='form-group'>
<label for='description'>Description.</label>
<input class='form-control' type='text' maxlength='".SOURCE_MAX_DESCRIPTION."' name='description' id='description' value=\"".htmlspecialchars($source["description"])."\">
<p class='help-block'><b>Facultatif</b>.</p>
</div>
<div class='form-group'><label class='checkbox-inline' for='suppr_ok'><input type='checkbox' id='suppr_ok' name='suppr_ok' value='1'> Je souhaite supprimer cette source.</label></div>
<div class='form-group'><label class='checkbox-inline text-danger' for='suppr_ok_tot'><input type='checkbox' id='suppr_ok_tot' name='suppr_ok_tot' value='1'> Je souhaite supprimer cette source, <u>y compris si elle a des dépendances (flux, abonnements...)</u>.</label></div>
<input type='hidden' name='id_source' id='id_source' value='$id_source'>
<div id='msg_sources'></div>
<button type='submit' class='btn btn-success btn-lg'>Enregistrer.</button>
<p><br><a href='".PAGE_MAJ_SOURCE."' title='Saisir une nouvelle source' class='btn btn-info btn-sm'>+ Nouvelle source.</a></p>
</fieldset></form>";
if($ajax_on)
echo get_html_form($form_html,false);
}
else
$msg_form[]=ERREUR_SQL_ENREG_ABSENT;
}
if((!empty($msg_form))&&($ajax_on))
echo get_html_alerte_msg($msg_form);

View File

@ -0,0 +1,70 @@
<?php
/**
* Script testant les données envoyées lors de l'enregistrement d'une nouvelle source de flux
* ou encore de sa mise à jour
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$form["designation"]=trim($_POST["designation"]);
$form["url"]=trim($_POST["url"]);
$form["description"]=trim($_POST["description"]);
$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_source.php");
}
$msg_form=array();
if((empty($_POST["designation"]))||(empty($_POST["url"])))
$msg_form[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
else
{
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
else
{
$form["limites"]["designation_long_min"]=SOURCE_MIN_NOM;
$form["limites"]["designation_long_max"]=SOURCE_MAX_NOM;
$form["limites"]["url_long_max"]=SOURCE_MAX_URL;
$form["limites"]["description_long_max"]=SOURCE_MAX_DESCRIPTION;
$auteur=new FclFlux_utilisateur();
$auteur->id_utilisateur=$_SESSION["id_utilisateur"];
$form["auteur"]=$auteur;
if(empty($Bd))
require("../modele/connexion-bd.php");
$source=new FclFlux_source($form);
if(!empty($source->erreurs))
$msg_form=array_merge($source->erreurs,$msg_form);
else if(empty($source->get_entetes()))
$msg_form[]=ERREUR_LIEN_CONTENU_EXISTE;
if(empty($msg_form))
{
if(!empty($_POST["id_source"]))
{
$form["id_source"]=$_POST["id_source"];//utile pour réaffichage si pas en ajax
$source->id_source=intval(trim($_POST["id_source"]));
$action=$source->actualise();
}
else
$action=$source->ajout();
if(!empty($source->erreurs))
$msg_form=array_merge($source->erreurs,$msg_form);
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
if(empty($msg_form))
$msg_form[]=MSG_ADMIN_VALID;
}
$Bd=null;
}
}
if((!empty($msg_form))&&($ajax_on))
{
if(($msg_form[0]==MSG_ADMIN_VALID)&&(!empty($source->id_source)))
echo $source->id_source;//tout s'est bien passé, je recharge les données en ajax
else
echo get_html_alerte_msg($msg_form);
}

35
ctrl/admin_sources_maj.php Executable file
View File

@ -0,0 +1,35 @@
<?php
/**
* Script permettant de chercher une source de flux pour l'afficher
* puis éventuellement la modifier / supprimer
*
**/
require_once("../modele/FclFlux_source.php");
$user=new FclFlux_utilisateur();
if(!$user->test_session(true,true))
{
header("Location:".SITE_URL);
exit();
}
else
{
include("../ctrl/admin_sources_a_valider.php");
if(isset($_POST["designation"]))
{
if((empty($_POST["suppr_ok"]))&&(empty($_POST["suppr_ok_tot"])))
include("../ctrl/admin_sources_infos_tests.php");
else
include("../ctrl/admin_sources_suppr_tests.php");
}
elseif(isset($_POST["recherche"]))//validation d'une recherche
include("../ctrl/admin_sources_recherche.php");
elseif(!empty($_GET["id_source"]))//id de la source passé par l'url
include("../ctrl/admin_sources_affiche.php");
else
{//formulaire en mode saisie d'une nouvelle source
$form["designation"]="";
$form["url"]="http://";
$form["description"]="";
}
include("../vues/admin_sources_maj.php");
}

View File

@ -0,0 +1,47 @@
<?php
/**
* Script cherchant les sources pour une recherche lancée par un administrateur
* Les éventuels résultats sont listés pour sélection
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$form["recherche"]=trim($_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_source.php");
}
$msg_form=array();
if(empty($form["recherche"]))
$select=get_html_alerte_msg((array) ERREUR_UTILISA_CHAMPS_ABSENTS);
else
{
if($_SESSION["statut"]!="administrateur")
$select=get_html_alerte_msg((array) ERREUR_IMPREVUE);
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$sources=FclFlux_source::recherche_globale($form["recherche"],"id_source,nom");
$Bd=null;
if(!empty($sources))
{
$select="<div class='form-group'>
<label for='liste_sources'>".count($sources)." résultat(s) correspondant</label>
<select name='liste_sources' id='liste_sources' autofocus class='form-control'>
<option value='0'></option>";
foreach ($sources as $source_info)
$select.="<option value='".$source_info["id_source"]."'>".htmlentities(affiche_utf8($source_info["nom"],UTF8_OK))."</option>\n";
$select.="</select></div>";
}
else
$select=get_html_alerte_msg((array) ERREUR_SQL_RECHERCHE);
}
}
if((!empty($select))&&($ajax_on))
echo $select;

View File

@ -0,0 +1,50 @@
<?php
/**
* Script testant les données envoyées lors d'une demande de suppression d'une source de flux
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$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_source.php");
}
$msg_form=array();
if((empty($_POST["id_source"]))||(((empty($_POST["suppr_ok"])))&&((empty($_POST["suppr_ok_tot"])))))
$msg_form[]=ERREUR_IMPREVUE;
else
{
if($_SESSION["statut"]!="administrateur")
$msg_form[]=ERREUR_IMPREVUE;
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$source=new FclFlux_source();
$form["id_source"]=$_POST["id_source"];//utile pour réaffichage si pas en ajax
$source->id_source=intval(trim($_POST["id_source"]));
if(empty($_POST["suppr_ok_tot"]))
$action=$source->supprime();
else
$action=$source->supprime(false);
if(!empty($source->erreurs))
$msg_form=array_merge($source->erreurs,$msg_form);
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
if(empty($msg_form))
$msg_form[]=MSG_ADMIN_VALID;
$Bd=null;
}
}
if((!empty($msg_form))&&($ajax_on))
{
if($msg_form[0]==MSG_ADMIN_VALID)
echo str_replace("'","\"",get_html_alerte_msg($msg_form,"alert-success"));//pour comparaison en JS
else
echo get_html_alerte_msg($msg_form);
}

45
ctrl/admin_stats.php Executable file
View File

@ -0,0 +1,45 @@
<?php
/* Page affichants les principales statistiques pour l'administrateur */
require_once("../modele/FclFlux_utilisateur.php");
// utilisateur connecté ?
$user=new FclFlux_utilisateur();
if(!$user->test_session(false,true))
{
header("Location:".SITE_URL);
exit();
}
if(empty($Bd))
require("../modele/connexion-bd.php");
// +++++++++++++++++++++++++++++++++++++++++ STATS DEPUIS LE DÉBUT +++++++++++++++++++++++++++++++++++++++ //
//total
$stats_totales=FclFlux_utilisateur::get_stats_utilisateurs(0);
if(!empty($stats_totales))
{
$blabla_stats_tot="<p>En tout, <b>".$stats_totales["nb_comptes"]." comptes</b> utilisateur enregistrés dont <b>".$stats_totales["nb_comptes_valide"]." validés</b>.<br>
<b>".$stats_totales["nb_abo"]." abonnements</b> dont <b>".$stats_totales["nb_abo_email"]." par email</b> pour <b>".$stats_totales["nb_abonnes"]." abonnés</b> différents.<br>
Il y a actuellement <b>".$stats_totales["nb_fantomes"]." utilisateurs sans abonnement</b> parmi ceux validés, soit <b>".round($stats_totales["nb_fantomes"]/($stats_totales["nb_comptes"]*0.01))." %</b>.<br>
Et <b>".$stats_totales["nb_abonnes_desactives"]." abonnés qui ont été désactivés</b> soit <b>".round($stats_totales["nb_abonnes_desactives"]/($stats_totales["nb_comptes"]*0.01))." %</b> de tous les utilisateurs.<br>
Il reste <b>".$stats_totales["nb_abonnes_email_6mois"]." abonnés actifs ayant + de 6 mois</b>, soit <b>".round($stats_totales["nb_abonnes_email_6mois"]/($stats_totales["nb_abonnes_6mois"]*0.01))." % des abonnés</b> ou encore <b>".round($stats_totales["nb_abonnes_email_6mois"]/($stats_totales["nb_comptes_6mois"]*0.01))." % des comptes</b>.<br>
Et <b>".$stats_totales["nb_abonnes_email_1an"]." abonnés actifs de + de 1 an</b>, soit <b>".round($stats_totales["nb_abonnes_email_1an"]/($stats_totales["nb_abonnes_1an"]*0.01))." % des abonnés</b> ou encore <b>".round($stats_totales["nb_abonnes_email_1an"]/($stats_totales["nb_comptes_1an"]*0.01))." % des comptes</b>.</p>";
}
// +++++++++++++++++++++++++++++++++++++++++ STATS DES 7 DERNIERS JOURS +++++++++++++++++++++++++++++++++++++++ //
$debut=time()-7*24*3600;
$stats_semaine=FclFlux_utilisateur::get_stats_utilisateurs($debut);
if(!empty($stats_semaine))
{
$blabla_stats_semaine="<p>Sur cette période, <b>".$stats_semaine["nb_comptes"]." compte(s)</b> et <b>".$stats_semaine["nb_abo"]." abonnements</b> ont été créé(s) pour <b>".$stats_semaine["nb_comptes_suppr"]." comptes supprimé(s)</b>.<br>
<b>".$stats_semaine["nb_mail_envoyes"]." mails envoyés à ".$stats_semaine["nb_mail_uniques_envoyes"]." utilisateurs</b> différents, ce qui a généré <b>".$stats_semaine["nb_clics_email"]." clics de ".$stats_semaine["nb_clics_uniques_email"]." utilisateurs</b> différents.<br>
Sur le partie web, <b>".$stats_semaine["nb_clics_site"]." clics de ".$stats_semaine["nb_clics_uniques_site"]." utilisateurs</b> différents, soit en tout : <b>".$stats_semaine["nb_clics"]." clics de ".$stats_semaine["nb_clics_uniques"]." utilisateurs</b> différents.</p>";
}
// +++++++++++++++++++++++++++++++++++++++++ STATS DES 30 DERNIERS JOURS +++++++++++++++++++++++++++++++++++++++ //
$debut=time()-30*24*3600;
$stats_mois=FclFlux_utilisateur::get_stats_utilisateurs($debut);
if(!empty($stats_mois))
{
$blabla_stats_mois="<p>Sur cette période, <b>".$stats_mois["nb_comptes"]." compte(s)</b> et <b>".$stats_mois["nb_abo"]." abonnements</b> ont été créé(s) pour <b>".$stats_mois["nb_comptes_suppr"]." comptes supprimé(s)</b>.<br>
<b>".$stats_mois["nb_mail_envoyes"]." mails envoyés à ".$stats_mois["nb_mail_uniques_envoyes"]." utilisateurs</b> différents, ce qui a généré <b>".$stats_mois["nb_clics_email"]." clics de ".$stats_mois["nb_clics_uniques_email"]." utilisateurs</b> différents.<br>
Sur le partie web, <b>".$stats_mois["nb_clics_site"]." clics de ".$stats_mois["nb_clics_uniques_site"]." utilisateurs</b> différents, soit en tout : <b>".$stats_mois["nb_clics"]." clics de ".$stats_mois["nb_clics_uniques"]." utilisateurs</b> différents.</p>";
}
include("../vues/admin_stats.php");

48
ctrl/admin_stats_email.php Executable file
View File

@ -0,0 +1,48 @@
<?php
/* Page affichants les principales statistiques pour l'administrateur */
require_once("../modele/FclFlux_utilisateur.php");
// utilisateur connecté ?
$user=new FclFlux_utilisateur();
if(!$user->test_session(false,true))
{
header("Location:".SITE_URL);
exit();
}
if(empty($Bd))
require("../modele/connexion-bd.php");
// +++++++++++++++++++++++++++++++++++++++++ STATS PAR FOURNISSEURS D'EMAIL +++++++++++++++++++++++++++++++++++++++ //
// le nombre total pour les stats :
$stats_totales=FclFlux_utilisateur::get_stats_utilisateurs(0);
$nb_min=10;
$debut=time()-30*24*3600;
$stats_email_mois=FclFlux_utilisateur::get_stats_email($debut,0,$nb_min);
$stats_comptes_mois=FclFlux_utilisateur::get_stats_utilisateurs($debut);
$debut=time()-30*7*3600;
$stats_email_hebdo=FclFlux_utilisateur::get_stats_email($debut,0,$nb_min);
$stats_comptes_hebdo=FclFlux_utilisateur::get_stats_utilisateurs($debut);
$stats_email_global=array();
if(!empty($stats_email_mois["liste_emails_total"]))
{
foreach($stats_email_mois["liste_emails_total"] as $stats)
$stats_email_global[$stats["ndd"]]["nb_comptes"]=$stats["cpt"];
}
if(!empty($stats_email_mois["liste_emails_actifs"]))
{
foreach($stats_email_mois["liste_emails_actifs"] as $stats)
$stats_email_global[$stats["ndd"]]["nb_comptes_actifs"]=$stats["cpt"];
}
if(!empty($stats_email_mois["liste_emails_cliqueur"]))
{
foreach($stats_email_mois["liste_emails_cliqueur"] as $stats)
$stats_email_global[$stats["ndd"]]["nb_cliqueurs_mois"]=$stats["cpt"];
}
if(!empty($stats_email_hebdo["liste_emails_cliqueur"]))
{
foreach($stats_email_hebdo["liste_emails_cliqueur"] as $stats)
$stats_email_global[$stats["ndd"]]["nb_cliqueurs_hebdo"]=$stats["cpt"];
}
include("../vues/admin_stats_email.php");

172
ctrl/compte_abo_affiche.php Executable file
View File

@ -0,0 +1,172 @@
<?php
/**
* Script affichant le formulaire permettant de modifier / supprimer un abonnement
* dont l'id a été passé en paramètre
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$ajax_on=false;
if(!empty($_GET["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_abonnement.php");
}
$form_html="";
if(empty($_SESSION["id_utilisateur"]))
$form_html=ERREUR_IMPREVUE;
else
{
$user=new FclFlux_utilisateur();
$user->id_utilisateur=intval($_SESSION["id_utilisateur"]);
$id_abonnement=intval(trim($_GET["id_abonnement"]));
if(empty($Bd))
require("../modele/connexion-bd.php");
$tab_infos=FclFlux_abonnement::recherche($id_abonnement,$user,"designation,jours_alerte,heure_alerte,max_liens,ville_insee");
$form["designation"]=$tab_infos["designation"];
$form["jours_alerte"]=$tab_infos["jours_alerte"];
$form["heure_alerte"]=$tab_infos["heure_alerte"];
$form["max_liens"]=$tab_infos["max_liens"];
$form["ville_insee"]=$tab_infos["ville_insee"];
$form["id_abonnement"]=$id_abonnement;
$abo=new FclFlux_abonnement();
$abo->id_abonnement=$id_abonnement;
$hubs_existants=$abo->get_liste_hubs();
if(!empty($hubs_existants))
{
$hubs_actuels=array();$i=0;
foreach($hubs_existants as $hub_id)
{
$hub_cherche=FclFlux_hub::recherche($hub_id["id_hub"],"id_hub","id_hub,nom,description");
if(!empty($hub_cherche))
{
$hubs_actuels[$i]=$hub_cherche;
$i++;
}
}
$hubs_proposes=$abo->get_propose_hubs($hubs_existants);
if(!empty($hubs_proposes))
{
$hubs_nouveaux=array();$i=0;
foreach($hubs_proposes as $hub_id)
{
$hub_cherche=FclFlux_hub::recherche($hub_id["id_hub"],"id_hub","id_hub,nom,description");
if(!empty($hub_cherche))
{
$hubs_nouveaux[$i]=$hub_cherche;
$i++;
}
}
}
unset($hubs_proposes);
}
unset($hubs_existants);
// abonnement aux actus locales ?
if(!empty($form["ville_insee"]))
{
$ville_infos=get_villes(strval($form["ville_insee"]),"insee");
if(empty($ville_infos))
$form["ville_insee"]=null;
}
$Bd=null;
if(!empty($form))
{
$access_rapides="<p class='liste_liens_btn'><b>Autres actions possibles :</b> <a href='".PAGE_ABSENCES_LISTE."' class='btn btn-success' title=\"Gérer mes périodes d'absence.\" target='_blank'>Stopper les envois temporairement.</a> <a href='".PAGE_ABO_AFFICHE.$id_abonnement."/' class='btn btn-success' title=\"Voir les actus.\" target='_blank'>Voir cet abonnement.</a> <a href='".PAGE_REPERTOIRE_ACCUEIL."' class='btn btn-info' title='Créer un nouvel abonnement' target='_blank'>+ Nouvel abonnement.</a></p>";
$form["nom"]="Mon abonnement.";
$form["champs"]="<form method='post' id='maj_abo' action='".PAGE_ABO_MAJ.$id_abonnement."' role='form' class='form-horizontal'>
<div class='form-group'>
<label for='designation' class='col-sm-3 control-label'>Désignation :</label>
<div class='col-sm-9'><input class='form-control' type='text' maxlength='".ABO_MAX_DESIGNATION."' name='designation' id='designation' value=\"".htmlspecialchars($form["designation"])."\" required></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Obligatoire</b>.</p></div>
</div>";
$jours=explode(",",$form["jours_alerte"]);
$form["champs"].="<div class='form-group'><label for='jours_alerte[]' class='col-sm-3 control-label'>Jours de réception : </label><div class='col-sm-9'>";
$i=0;
while(isset($Jours_semaine[$i]))
{
if(strpos($form["jours_alerte"],"[$i]")!==false)
$form["champs"].="<label class='checkbox-inline'><input type='checkbox' name='jours_alerte[]' value='$i' checked='checked'> ".$Jours_semaine[$i]."</label>";
else
$form["champs"].="<label class='checkbox-inline'><input type='checkbox' name='jours_alerte[]' value='$i'> ".$Jours_semaine[$i]."</label>";
$i++;
}
$form["champs"].="</div><div class='col-sm-offset-3 col-sm-9'><p class='help-block'>Si vous ne souhaitez recevoir aucun email, ne laissez coché aucun jour de la semaine.<br>Vous pourrez continuer à consulter votre abonnement sur le site.</p></div>
</div>";
$heures_ok=explode("|","00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23");
$form["champs"].="<div id='heure_alerte'>
<div class='form-group'>
<label for='heure_alerte' class='col-sm-3 control-label'>Heure d'envoi :</label>
<div class='col-sm-9'><select name='heure_alerte' class='form-control' style='width:100px'>";
foreach ($heures_ok as $heure)
{
if($heure==$form["heure_alerte"])
$form["champs"].="<option value='".$heure."' selected=selected>".htmlentities(affiche_utf8($heure,UTF8_OK))." H</option>";
else
$form["champs"].="<option value='".$heure."'>".htmlentities(affiche_utf8($heure,UTF8_OK))." H</option>";
}
$form["champs"].="</select></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'>Heure de départ pour l'envoi de votre abonnement par email.<br>
Il peut y a voir un délai de 24H avant que le changement d'heure de départ soit pris en compte.</p></div>
</div>
<div class='form-group'>
<label for='max_liens' class='col-sm-3 control-label'>Nombre maximum d'actualités par envoi ?</label>
<div class='col-sm-9'><input class='form-control' type='text' maxlength='3' name='max_liens' id='max_liens' value=\"".intval($form["max_liens"])."\" required></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'>Choisissez le nombre <b><u>maximum d'actualités</u></b> (il peut y en avoir moins !) que pourront contenir les messages envoyés par Hello facteur pour cet abonnement. Ce nombre doit être compris entre ".$Abo_max_liens["min"]." et ".$Abo_max_liens["max"].".</p></div>
</div>";
// si actus locales, on peut ici modifier la ville centrale.
if(!empty($ville_infos))
{
$form["champs"].="<div id='sup_villes'><div class='col-sm-12'><p><b>Cet abonnement a été créé pour la ville de : ".htmlentities(affiche_utf8($ville_infos[0]["nom"],UTF8_OK))." (".$ville_infos[0]["cp"].")</b>.<br>Si ce n'est plus la bonne ville, saisissez ci-dessous le bon code postal (ou au moins 3 lettres du nom la nouvelle ville). Ceci se répercutera sur les actualités locales que vous recevez.</p></div>
<input type='hidden' name='insee' id='insee' value=\"".$ville_infos[0]["insee"]."\" ></div>
<div class='form-group'>
<label for='cp_ville' class='col-sm-3 control-label'>Votre nouvelle ville :</label>
<div class='col-sm-9'><input class='form-control' type='text' maxlength='35' name='cp_ville' id='cp_ville'></div>
</div>
<input type='hidden' name='a_insee' id='a_insee' value=\"".$ville_infos[0]["insee"]."\" >";
}
$form["champs"].="<div class='form-group'>
<div class='col-sm-offset-3 col-sm-9'>
<div class='checkbox'>
<label class='text-danger' for='abo_suppr'>
<input type='checkbox' name='abo_suppr' id='abo_suppr' value='1'> Je souhaite supprimer cet abonnement.
</label>
</div></div></div>
<div id='msg_abo'></div>
<div class='form-group'><div class='col-sm-offset-3 col-sm-9'><button type='submit' class='btn btn-success btn-lg' id='btn_submit1'>Enregistrer.</button></div></div>
<br>
$access_rapides";
if(!empty($hubs_actuels))
{
$form["champs"].="<div class='form-group list_overflow'><div class='col-sm-offset-1 col-sm-11'><label for='hubs_suppr[]'>Cet abonnement concerne actuellement :</label><ul>";
foreach($hubs_actuels as $hub_infos)
{
$form["champs"].="<li><b>".$hub_infos["nom"]."</b> <input type='checkbox' name='hubs_suppr[]' value='".$hub_infos["id_hub"]."'> Enlever de mon abonnement.";
if(!empty($hub_infos["description"]))
$form["champs"].="<br><i>".$hub_infos["description"]."</i>";
$form["champs"].="</li>";
}
$form["champs"].="</ul></div></div>
<div class='form-group'><div class='col-sm-offset-3 col-sm-9'><button type='submit' class='btn btn-success btn-lg' id='btn_submit2'>Enregistrer.</button></div></div>";
if(!empty($hubs_nouveaux))
{
$form["champs"].="<div class='form-group list_overflow'><div class='col-sm-offset-1 col-sm-11'><label for='hubs_ajout[]'>Autres suggestions pour cet abonnement :</label><ul>";
foreach($hubs_nouveaux as $hub_infos)
{
$form["champs"].="<li><b>".$hub_infos["nom"]."</b> <input type='checkbox' name='hubs_ajout[]' value='".$hub_infos["id_hub"]."'> Ajouter à mon abonnement.";
if(!empty($hub_infos["description"]))
$form["champs"].="<br><i>".$hub_infos["description"]."</i>";
$form["champs"].="</li>";
}
$form["champs"].="</ul></div></div>
<div class='form-group'><div class='col-sm-offset-3 col-sm-9'><button type='submit' class='btn btn-success btn-lg' id='btn_submit3'>Enregistrer.</button></div></div>";
}
}
$form["champs"].="<p><input type='hidden' name='id_abonnement' id='id_abonnement' value='".$form["id_abonnement"]."'></form>";
}
}
if((!empty($form))&&($ajax_on))
echo get_html_form($form,false);

39
ctrl/compte_abo_liste.php Executable file
View File

@ -0,0 +1,39 @@
<?php
/* Script préparant la page listant les abonnements d'un utilisateur qui doit donc être connecté
*
*/
require_once("../modele/FclFlux_abonnement.php");
// utilisateur connecté ?
$user=new FclFlux_utilisateur();
if(!$user->test_session(false))
{
unset($user);
$redirige=PAGE_ABO_LISTE;
FclFlux_utilisateur::crea_cookie_redirection($redirige,1);
header("Location:".PAGE_CONNEXION);
exit();
}
// liste des abonnements enregistrés pour cet utilisateur
$abos=FclFlux_abonnement::get_liste_abo_cache($user,true);//force la création du cache
if(empty($abos))
{
$_SESSION["message"]="Vous n'avez aucun abonnement pour l'instant mais vous pouvez créer le 1er en quelques instants ci-dessous.";
header("location:".PAGE_REPERTOIRE_ACCUEIL);
exit();
}
else
{
$mes_abos=array();$i=0;
foreach($abos as $abo_infos)
{
$mes_abos[$i]=$abo_infos;
$abo=new FclFlux_abonnement();
$abo->id_abonnement=$abo_infos["id_abonnement"];
$hubs=$abo->get_liste_hubs_cache(CREA_CACHE);
if(!empty($hubs))
$mes_abos[$i]["hubs"]=$hubs;
unset($abo);
$i++;
}
}
include("../vues/compte_abo_liste.php");

97
ctrl/compte_abo_maj.php Executable file
View File

@ -0,0 +1,97 @@
<?php
/**
* Script affichant les informations d'un abonnement dans un formulaire pour enregistrer une mise à jour ou le suppprimer
* Données concernées : désignation de l'abonnement, jours & horaires de l'envoi, liste des hubs concernés, nombre maximum de lien et ville principale si abonnement aux actualités locales.
*
**/
require_once("../modele/FclFlux_abonnement.php");
$user=new FclFlux_utilisateur();
if((!empty($page[3]))&&(!empty($page[4])))
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$user->crea_session_lien_abo($page[3],$page[4]);
if(!empty($user->connexion_ok))
{
header("Location:".PAGE_ABO_MAJ.$page[2]);// évite de garder les paramètres de connexion dans l'url.
exit();
}
}
if(!$user->test_session(false))
{
unset($user);
$redirige=PAGE_ABO_MAJ.$page[2];
FclFlux_utilisateur::crea_cookie_redirection($redirige,1);
header("Location:".PAGE_CONNEXION);
exit();
}
else
{
if(isset($_POST["designation"]))
include("../ctrl/compte_abo_maj_tests.php");
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$abo_infos=FclFlux_abonnement::recherche(intval($page[2]),$user,"id_abonnement,designation,jours_alerte,heure_alerte,max_liens,ville_insee");
if(!empty($abo_infos["designation"]))
{
$form["designation"]=$abo_infos["designation"];
$form["jours_alerte"]=$abo_infos["jours_alerte"];
$form["heure_alerte"]=$abo_infos["heure_alerte"];
$form["id_abonnement"]=$abo_infos["id_abonnement"];
$form["max_liens"]=$abo_infos["max_liens"];
$form["ville_insee"]=$abo_infos["ville_insee"];
$abo=new FclFlux_abonnement();
$abo->id_abonnement=$abo_infos["id_abonnement"];
$hubs_existants=$abo->get_liste_hubs();
if(!empty($hubs_existants))
{
$hubs_actuels=array();$i=0;
foreach($hubs_existants as $hub_id)
{
$hub_cherche=FclFlux_hub::recherche($hub_id["id_hub"],"id_hub","id_hub,nom,description");
if(!empty($hub_cherche))
{
$hubs_actuels[$i]=$hub_cherche;
$i++;
}
}
$hubs_proposes=$abo->get_propose_hubs($hubs_existants);
if(!empty($hubs_proposes))
{
$hubs_nouveaux=array();$i=0;
foreach($hubs_proposes as $hub_id)
{
$hub_cherche=FclFlux_hub::recherche($hub_id["id_hub"],"id_hub","id_hub,nom,description");
if(!empty($hub_cherche))
{
$hubs_nouveaux[$i]=$hub_cherche;
$i++;
}
}
}
}
unset($hubs_existants);
unset($hubs_proposes);
// abonnement aux actus locales ?
if(!empty($form["ville_insee"]))
{
$ville_infos=get_villes(strval($form["ville_insee"]),"insee");
if(empty($ville_infos))
$form["ville_insee"]=null;
}
$Bd=null;
}
else
{//j'ai essayé d'afficher un abonnement n'existant pas/plus ou ne m'appartenant pas
$Bd=null;
$user->supprime_session();
unset($user);
header("Location:".SITE_URL);
exit();
}
}
//formulaire d'inscription
include("../vues/compte_abo_maj.php");
}

143
ctrl/compte_abo_maj_tests.php Executable file
View File

@ -0,0 +1,143 @@
<?php
/**
* Script testant les données envoyées lors d'une demande de mise à jour / suppression d'un abonnement
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$form["id_abonnement"]=intval($_POST["id_abonnement"]);
$form["designation"]=trim($_POST["designation"]);
$form["jours_alerte"]="";
if(!empty($_POST["jours_alerte"]))
$form["jours_alerte"]=implode(",",$_POST["jours_alerte"]);
$form["heure_alerte"]="";
if(!empty($_POST["heure_alerte"]))
$form["heure_alerte"]=$_POST["heure_alerte"];
if(isset($_POST["max_liens"]))
$form["max_liens"]=intval($_POST["max_liens"]);
$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_abonnement.php");
}
$msg_form=array();
if((empty($_SESSION["id_utilisateur"]))||(empty($form["id_abonnement"])))
$msg_form[]=ERREUR_IMPREVUE;
elseif(!empty($_POST["abo_suppr"]))
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$user=new FclFlux_utilisateur();
$user->id_utilisateur=$_SESSION["id_utilisateur"];
$form["proprietaire"]=$user;
$abo_suppr=new FclFlux_abonnement($form);
if(empty($abo_suppr->erreurs))
{
$suppr=$abo_suppr->supprime();
if(!empty($abo_suppr->erreurs))
$msg_form=array_merge($abo_suppr->erreurs,$msg_form);
elseif($suppr===false)
$msg_form[]=ERREUR_IMPREVUE;
else
{
$_SESSION["message"]=MSG_UTILISA_MAJ_SUPPR_VALID;
if($ajax_on)
$msg_form[]=MSG_UTILISA_MAJ_SUPPR_VALID;
else
{
header("location:".PAGE_ABO_LISTE);
exit();
}
}
}
}
elseif((empty($_POST["designation"]))||(empty($form["max_liens"])))
$msg_form[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$user=new FclFlux_utilisateur();
$user->id_utilisateur=$_SESSION["id_utilisateur"];
$form["proprietaire"]=$user;
$abo_maj=new FclFlux_abonnement($form);
if(!empty($abo_maj->erreurs))
$msg_form=array_merge($abo_maj->erreurs,$msg_form);
//suppression des hubs / abonnement
if((empty($msg_form))&&(!empty($_POST["hubs_suppr"])))
{
$liste_hubs=array();$i=0;
foreach($_POST["hubs_suppr"] as $hub_id)
{
$hub_suppr=new FclFlux_hub();
$hub_suppr->id_hub=$hub_id;
$liste_hubs[$i]=$hub_suppr;
unset($hub_suppr);
$i++;
}
if($i>0)
{
$action=$abo_maj->supprime_hubs($liste_hubs);
if(!empty($abo_maj->erreurs))
$msg_form=array_merge($abo_maj->erreurs,$msg_form);
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
}
}
//ajout hub / abonnement
if((empty($msg_form))&&(empty($abo_maj->erreurs))&&(!empty($_POST["hubs_ajout"])))
{
$liste_hubs=array();$i=0;
foreach($_POST["hubs_ajout"] as $hub_id)
{
$hub_ajout=new FclFlux_hub();
$hub_ajout->id_hub=$hub_id;
$liste_hubs[$i]=$hub_ajout;
unset($hub_ajout);
$i++;
}
if($i>0)
{
$action=$abo_maj->ajout_hubs($liste_hubs);
if(!empty($abo_maj->erreurs))
$msg_form=array_merge($abo_maj->erreurs,$msg_form);
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
}
}
//changement de ville ?
if((empty($msg_form))&&(empty($abo_maj->erreurs))&&(!empty($_POST["insee"]))&&($_POST["a_insee"]!=$_POST["insee"]))
{
$abo_maj->set_ville_insee($_POST["insee"]);
$chgt_ville=$abo_maj->abo_rapide_nouvelle_ville($_POST["insee"],$user);
if(!empty($abo_maj->erreurs))
$msg_form=array_merge($abo_maj->erreurs,$msg_form);
elseif($chgt_ville===false)
$msg_form[]=ERREUR_IMPREVUE;
}
// les autres infos.
if((empty($msg_form))&&(empty($abo_maj->erreurs)))
{
$maj=$abo_maj->actualise();
if(!empty($abo_maj->erreurs))
$msg_form=array_merge($abo_maj->erreurs,$msg_form);
elseif($maj===false)
$msg_form[]=ERREUR_IMPREVUE;
}
if(empty($msg_form))
$msg_form[]=MSG_UTILISA_MAJ_INFOS_VALID;
$Bd=null;
}
if((!empty($msg_form))&&($ajax_on))
{
if(($msg_form[0]==MSG_UTILISA_MAJ_INFOS_VALID)&&(!empty($abo_maj->id_abonnement)))
echo $abo_maj->id_abonnement;//tout s'est bien passé, je recharge l'abonnement en ajax
elseif($msg_form[0]==MSG_UTILISA_MAJ_SUPPR_VALID)
echo str_replace("\"","'",MSG_UTILISA_MAJ_SUPPR_VALID);//pour comparaison en JS
else
echo get_html_alerte_msg($msg_form);
}

49
ctrl/compte_abo_voir.php Executable file
View File

@ -0,0 +1,49 @@
<?php
/* Page affichant les derniers liens pour l'abonnement d'un utilisateur
* l'id de l'abonnement étant passé par l'url
*/
require_once("../modele/FclFlux_abonnement.php");
$user=new FclFlux_utilisateur();
if((!empty($page[3]))&&(!empty($page[4])))
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$user->crea_session_lien_abo($page[3],$page[4]);
if(!empty($user->connexion_ok))
{
header("Location:".PAGE_ABO_AFFICHE.$page[2]);//évite de garder les paramètres de connexion dans l'url
exit();
}
}
if(!$user->test_session(false))
{
unset($user);
$redirige=PAGE_ABO_AFFICHE.$page[2];
FclFlux_utilisateur::crea_cookie_redirection($redirige,1);
header("Location:".PAGE_CONNEXION);
exit();
}
// infos de l'abonnement + derniers liens importés
$abo=new FclFlux_abonnement();
$abo->id_abonnement=intval($page[2]);
$abo_infos=$abo->get_infos_cache(true);
if(empty($abo_infos)||($abo_infos["auteur_id"]!=$_SESSION["id_utilisateur"]))
{
$_SESSION["message"]="Vous avez essayé de vous connecter à une page n'existant plus ou à laquelle vous n'avez pas le droit d'accéder.";
unset($abo);
header("location:".PAGE_ACCUEIL);
exit();
}
else
{
if((!empty($page[3])&&($page[3]=="S")))
$liens_abo=$abo->get_liste_posts_cache(true,"semaine");
elseif(!empty($page[3]))
{//petit malin, n'ira pas bien loin :-)
header("location:".PAGE_ACCUEIL);
exit();
}
else
$liens_abo=$abo->get_liste_posts_cache(true);//par défaut, les liens des dernières 24H
include("../vues/compte_abo_voir.php");
}

View File

@ -0,0 +1,91 @@
<?php
/**
* Script affichant le formulaire permettant de modifier / supprimer une période d'absence
* dont l'id a été passé en paramètre
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$ajax_on=false;
if((!empty($_GET["ajax"]))&&(!empty($_GET["id_periode"])))
{
$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_absences.php");
$id_periode=intval(trim($_GET["id_periode"]));
}
elseif(!empty($page[2]))
$id_periode=intval(trim($page[2]));
else
$form_html=ERREUR_IMPREVUE;
$form_html="";
if(empty($_SESSION["id_utilisateur"]))
$form_html=ERREUR_IMPREVUE;
else
{
$user=new FclFlux_utilisateur();
$user->id_utilisateur=intval($_SESSION["id_utilisateur"]);
if(empty($Bd))
require("../modele/connexion-bd.php");
$tab_infos=FclFlux_absences::recherche($id_periode,$user,"designation,time_debut,time_fin");
$form["designation"]=$tab_infos["designation"];
$form["time_debut"]=$tab_infos["time_debut"];
$form["time_fin"]=$tab_infos["time_fin"];
$form["id_periode"]=$id_periode;
//liste des abonnements du gus pour pouvoir sélectionner ceux concernés par cette période d'absence.
$abos=FclFlux_abonnement::get_liste_abo_cache($user,true);
//ceux déjà sélectionnés par l'utilisateur
$preselection="";
$periode=new FclFlux_absences($form);
$abos_selection=$periode->get_liste_abonnements();
if(!empty($abos_selection))
$preselection=";".implode(";",$abos_selection).";";
$Bd=null;
if(!empty($form))
{
$date_exemple=date("d/m/Y");
$form["nom"]="Votre période d'absence.";
$form["champs"]="<form method='post' id='maj_periode' action='".PAGE_ABSENCE_MAJ.$id_periode."' role='form' class='form-horizontal'>
<div class='form-group'>
<label for='designation' class='col-sm-3 control-label'>Désignation :</label>
<div class='col-sm-9'><input class='form-control' type='text' maxlength='".AGENDA_MAX_DESIGNATION."' name='designation' id='designation' value=\"".htmlspecialchars($form["designation"])."\" required></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Obligatoire</b>.</p></div>
</div>
<div class='form-group'>
<label for='time_debut' class='col-sm-3 control-label'>Date de début :</label>
<div class='col-sm-9'><input class='form-control' type='text' name='time_debut' id='time_debut' value=\"".date("d/m/Y",$form["time_debut"])."\" required></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Obligatoire</b>. Le jour vos abonnements s'arrêteront. Exemple : $date_exemple.</p></div>
</div>
<div class='form-group'>
<label for='time_fin' class='col-sm-3 control-label'>Date de fin :</label>
<div class='col-sm-9'><input class='form-control' type='text' name='time_fin' id='time_fin' value=\"".date("d/m/Y",$form["time_fin"])."\" required></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Obligatoire</b>. Le jour vos abonnements reprendront. Date forcément postérieure à celle de début.</p></div>
</div>";
if(!empty($abos))
{
$form["champs"].="<div class='form-group'><div class='col-sm-offset-2 col-sm-9'><label for='abo_concerne[]'>Durant cette période, je ne souhaite plus recevoir les actualités de :</label><ul>";
foreach($abos as $abo_infos)
{
if(strpos($preselection,";".$abo_infos["id_abonnement"].";")!==false)
$form["champs"].="<li><input type='checkbox' name='abo_concerne[]' value='".$abo_infos["id_abonnement"]."' checked='checked'> <b>".$abo_infos["designation"]."</b></li>";
else
$form["champs"].="<li><input type='checkbox' name='abo_concerne[]' value='".$abo_infos["id_abonnement"]."'> <b>".$abo_infos["designation"]."</b></li>";
}
$form["champs"].="</ul></div></div>";
}
$form["champs"].="<div class='form-group'>
<div class='col-sm-offset-3 col-sm-9'>
<div class='checkbox'>
<label class='text-danger' for='abo_suppr'>
<input type='checkbox' name='periode_suppr' id='periode_suppr' value='1'> Je souhaite supprimer cette période d'absence.
</label>
</div></div></div>
<div id='msg_periode'></div>
<div class='form-group'><div class='col-sm-offset-3 col-sm-9'><button type='submit' class='btn btn-success btn-lg' id='btn_submit1'>Enregistrer.</button></div></div>";
$form["champs"].="<p><input type='hidden' name='id_periode' id='id_periode' value='".$form["id_periode"]."'></form>";
}
}
if((!empty($form))&&($ajax_on))
echo get_html_form($form,false);

View File

@ -0,0 +1,110 @@
<?php
/**
* Script testant les données envoyées lors d'une demande de création / mise à jour / suppression d'une période d'absence.
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$form["designation"]=trim($_POST["designation"]);
$form["time_debut"]=trim($_POST["time_debut"]);
$form["time_fin"]=trim($_POST["time_fin"]);
if(!empty($_POST["id_periode"]))
$form["id_periode"]=intval($_POST["id_periode"]);//sinon c'est que j'enregistre une nouvelle période
$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_absences.php");
}
$msg_form=array();
if(empty($_SESSION["id_utilisateur"]))
$msg_form[]=ERREUR_IMPREVUE;
elseif(!empty($_POST["periode_suppr"]))
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$user=new FclFlux_utilisateur();
$user->id_utilisateur=$_SESSION["id_utilisateur"];
$form["proprietaire"]=$user;
$periode_suppr=new FclFlux_absences($form);
if((empty($msg_form))&&(empty($periode_suppr->erreurs)))
{
$suppr=$periode_suppr->supprime();
if(!empty($periode_suppr->erreurs))
$msg_form=array_merge($periode_suppr->erreurs,$msg_form);
elseif($suppr===false)
$msg_form[]=ERREUR_IMPREVUE;
else
{
$_SESSION["message"]=MSG_UTILISA_MAJ_SUPPR_VALID;
if($ajax_on)
$msg_form[]=MSG_UTILISA_MAJ_SUPPR_VALID;//c'est js qui provoquera la redirection
else
{
header("location:".PAGE_ABSENCES_LISTE);
exit();
}
}
}
}
elseif((empty($form["designation"]))||(empty($form["time_debut"]))||(empty($form["time_fin"])))
{
$msg_form[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
exit();
}
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$user=new FclFlux_utilisateur();
$user->id_utilisateur=$_SESSION["id_utilisateur"];
$form["proprietaire"]=$user;
$periode=new FclFlux_absences($form);
if((empty($msg_form))&&(empty($periode->erreurs)))
{
if(!empty($form["id_periode"]))
$action=$periode->actualise();
else
$action=$periode->ajout();
if(!empty($periode->erreurs))
$msg_form=array_merge($periode->erreurs,$msg_form);
elseif($periode===false)
$msg_form[]=ERREUR_IMPREVUE;
}
//actualisation des abonnements concernés par cette période d'absence
if((empty($msg_form))&&(empty($action->erreurs))&&(!empty($_POST["abo_concerne"])))
{
$liste_abos=array();$i=0;
foreach($_POST["abo_concerne"] as $abo_id)
{
$abo_concerne=new FclFlux_abonnement();
$abo_concerne->id_abonnement=$abo_id;
$liste_abos[$i]=$abo_concerne;
unset($abo_concerne);
$i++;
}
if($i>0)
{
$action=$periode->set_liste_abonnements($liste_abos);
if(!empty($periode->erreurs))
$msg_form=array_merge($periode->erreurs,$msg_form);
elseif($action===false)
$msg_form[]=ERREUR_IMPREVUE;
}
}
if(empty($msg_form))
$msg_form[]=MSG_UTILISA_MAJ_INFOS_VALID;
$Bd=null;
}
if((!empty($msg_form))&&($ajax_on))
{
if(($msg_form[0]==MSG_UTILISA_MAJ_INFOS_VALID)&&(!empty($periode->id_periode)))
echo $periode->id_periode;//tout s'est bien passé, je recharge l'abonnement en ajax
elseif($msg_form[0]==MSG_UTILISA_MAJ_SUPPR_VALID)
echo str_replace("\"","'",MSG_UTILISA_MAJ_SUPPR_VALID);//pour comparaison et redirection en JS
else
echo get_html_alerte_msg($msg_form);
}

35
ctrl/compte_absences_liste.php Executable file
View File

@ -0,0 +1,35 @@
<?php
/* Script préparant la page listant les périodes d'absences enregistrées par un utilisateur qui doit donc être connecté
*
*/
require_once("../modele/FclFlux_absences.php");
// utilisateur connecté ?
$user=new FclFlux_utilisateur();
if(!$user->test_session(false))
{
unset($user);
$redirige=PAGE_ABSENCES_LISTE;
FclFlux_utilisateur::crea_cookie_redirection($redirige,1);
header("Location:".PAGE_CONNEXION);
exit();
}
// liste des abonnements enregistrés pour cet utilisateur
if(empty($Bd))
require("../modele/connexion-bd.php");
$periodes=FclFlux_absences::get_liste_utilisateur($user);
if(!empty($periodes))
{
$mes_periodes=array();$i=0;
foreach($periodes as $periode_infos)
{
$mes_periodes[$i]=$periode_infos;
$periode=new FclFlux_absences();
$periode->id_periode=$periode_infos["id_periode"];
$abos=$periode->get_liste_abonnements(true);
if(!empty($abos))
$mes_periodes[$i]["abos"]=$abos;
unset($periode);
$i++;
}
}
include("../vues/compte_absences_liste.php");

30
ctrl/compte_absences_maj.php Executable file
View File

@ -0,0 +1,30 @@
<?php
/**
* Script permettant à un utilisateur d'ajouter
* ou encore modifier / supprimer une de ses périodes d'absence
*
**/
require_once("../modele/FclFlux_absences.php");
$user=new FclFlux_utilisateur();
if(!$user->test_session(false))
{
header("Location:".SITE_URL);
exit();
}
else
{
if(isset($_POST["designation"]))
include("../ctrl/compte_absences_infos_tests.php");
elseif(!empty($page[2]))
include("../ctrl/compte_absences_affiche.php");
else
{
//formulaire en mode saisie d'un nouveau flux
$form["designation"]="";
$form["time_debut"]="";
$form["time_fin"]="";
//liste des abonnements du gus pour pouvoir sélectionner ceux concernés par cette période d'absence.
$abos=FclFlux_abonnement::get_liste_abo_cache($user,true);
}
include("../vues/compte_absences_maj.php");
}

76
ctrl/compte_connect_tests.php Executable file
View File

@ -0,0 +1,76 @@
<?php
/**
* Script testant les données envoyées lors de la tentative de connexion d'un utilisateur
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$form["email"]=trim($_POST["email"]);
if(!empty($_POST["passe"]))
$form["passe"]=trim($_POST["passe"]);
$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_utilisateur.php");
}
$msg_form=array();
if(empty($form["email"])||(empty($form["passe"])&&(empty($_POST["passe_nok"]))))
$msg_form[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
else
{
if((empty($_SESSION["Nb_tentatives"]))||($_SESSION["Nb_tentatives"]>FORM_CONNEXION_MAX_TENTATIVES)||(empty($_SESSION["timeS"]))||((time()-intval($_SESSION["timeS"]))<FORM_MIN_DUREE))
$msg_form[]=ERREUR_IMPREVUE;
else
{
$persistence_ok=false;
if(!empty($_POST["persistence_ok"]))
$persistence_ok=true;
if(empty($Bd))
require("../modele/connexion-bd.php");
$user=new FclFlux_utilisateur($form);
if((empty($msg_form))&&(empty($user->erreurs)))
{
if(empty($_POST["passe_nok"]))
$conn=$user->test_connexion($persistence_ok);
else
$conn=$user->get_lien_connexion($persistence_ok);
}
$Bd=null;
if(!empty($user->erreurs))
$msg_form=array_merge($user->erreurs,$msg_form);
elseif($conn===false)
$msg_form[]=ERREUR_IMPREVUE;
if(empty($msg_form))
{
unset($_SESSION["Nb_tentatives"]);
if((empty($_POST["passe_nok"]))&&(!$ajax_on))
{
// si l'utilisateur connecté et a un cookie de redirection
// je le redirige vers la page qui l'intéressait avant connexion
$redirige=PAGE_ACCUEIL;
if(!empty($_COOKIE["rdg"]))
{
if(strpos($_COOKIE["rdg"],SITE_COOKIES_DOMAINE)===false)
$redirige=$_COOKIE["rdg"];
//dans tous les cas, je mange mon cookie :-)
setcookie("rdg","",-1600,"/",SITE_COOKIES_DOMAINE);
}
header("location:".$redirige);
exit();
}
elseif(!empty($_POST["passe_nok"]))
$msg_form[]=MSG_UTILISA_GET_LIEN_CONNEXION_OK;
}
}
}
if((!empty($msg_form))&&($ajax_on))
{
if($msg_form[0]==MSG_UTILISA_GET_LIEN_CONNEXION_OK)
echo get_html_alerte_msg($msg_form,"alert-success");
else
echo get_html_alerte_msg($msg_form);
}

95
ctrl/compte_crea_abo_hub.php Executable file
View File

@ -0,0 +1,95 @@
<?php
/* Script appelé lorsqu'un internaute souhaite s'abonner à un hub
* Le hub peut être ajouté à un abonnement existant ou servir à créer un nouvel abonnement
* L'utilisateur doit être connecté.
* Si ce n'est pas le cas, je stocke dans un cookie de courte durée l'adresse de la page et l'y ramène après connexion / création compte
* L'utilisateur peut aussi arriver sur cette page via le formulaire d'inscription d'un site tiers. Un email peut alors avoir été fourni.
*
*/
require_once("../modele/FclFlux_abonnement.php");
//on commence par vérifier que le hub existe...
$hub=new FclFlux_hub();
$hub->id_hub=$page[2];
$hub_infos=$hub->get_infos_cache(false);
if(empty($hub_infos))
{
header("location:".PAGE_404);
exit();
}
//utilisateur connecté ?
$user=new FclFlux_utilisateur();
if(!$user->test_session(false))
{
unset($user);
$redirige=PAGE_ABO_CREA_HUB.intval($page[2]);
FclFlux_utilisateur::crea_cookie_redirection($redirige,2);
$_SESSION["hub_abo"]=$hub_infos["nom"];
if(!empty($_POST["email_abo"]))
{
$_SESSION["email_abo"]=trim(strip_tags($_POST["email_abo"]));
//je cherche si un abonné existe déjà pour cette adresse
if(empty($Bd))
require("../modele/connexion-bd.php");
$cherche_email=FclFlux_utilisateur::recherche($_POST["email_abo"],"email","id_utilisateur");
if(!empty($cherche_email))
{
unset($Bd);
header("Location:".PAGE_CONNEXION);
exit();
}
unset($Bd);
}
header("Location:".PAGE_INSCRIPTION);
exit();
}
//les rubriques "mères" pour le fil d'ariane
$meres=$hub->get_liste_rubriques_cache(CREA_CACHE);
// 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;";
}
//l'utilisateur à valider le formulaire
if(isset($_POST["nouvel_abo"]))//pour ne pas confondre avec l'arrivée du site tiers
{
if(empty($Bd))
require("../modele/connexion-bd.php");
if(!empty($_POST["abo"]))
{
//ajout d'un hub à un abonnement existant
$abo=new FclFlux_abonnement();
$abo->id_abonnement=intval($_POST["abo"]);
$action=$abo->ajout_hubs(array($hub));
$Bd=null;
}
else
{
//je vais créé un nouvel abonnement et lui associer ce hub
if(!empty($_POST["nouvel_abo"]))
$infos["designation"]=$_POST["nouvel_abo"];
else
$infos["designation"]="Nouvel abonnement.";
$infos["proprietaire"]=$user;
$abo=new FclFlux_abonnement($infos);
$action=$abo->ajout();
if($action!==false)
$action=$abo->ajout_hubs(array($hub));
}
$Bd=null;
if((!$action)||(!empty($abo->erreurs)))
{
$_SESSION["message"]=ERREUR_IMPREVUE;
header("location:".PAGE_ACCUEIL);
exit();
}
else
{
$_SESSION["message"]="Votre nouvel abonnement a bien été créé !";
header("location:".PAGE_ABO_AFFICHE.$abo->id_abonnement);
exit();
}
}
include("../vues/compte_crea_abo_hub.php");

View File

@ -0,0 +1,101 @@
<?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");

View File

@ -0,0 +1,44 @@
<?php
/**
* Script contrôlant les données envoyées leur d'une demande de création d'un nouvel abonnement basé sur les hubs de référence d'une rubrique
* L'utilisateur doit être connecté.
* Si ce n'est pas le cas, je stocke dans un cookie de courte durée l'adresse de la page et l'y ramène après connexion / création compte
*
**/
require_once("../modele/FclFlux_abonnement.php");
//la rubrique existe vraiment ?
$rubrique=new FclFlux_rubrique();
$rubrique->id_rubrique=$page[2];
$rubrique_info=$rubrique->get_infos_cache(CREA_CACHE);
if(empty($rubrique_info))
{
header("location:".PAGE_404);
exit();
}
$user=new FclFlux_utilisateur();
if(!$user->test_session(false))
{
unset($user);
$redirige=PAGE_ABO_CREA_RUBRIQUE.intval($page[2]);
FclFlux_utilisateur::crea_cookie_redirection($redirige,2);
header("Location:".PAGE_INSCRIPTION);
exit();
}
//tout semble ok... je tente la création du nouvel abonnement
$abo=new FclFlux_abonnement();
if(empty($Bd))
require("../modele/connexion-bd.php");
$action=$abo->abo_rapide_rubrique($user,$rubrique);
$Bd=null;
if(!$action)
{
$_SESSION["message"]=ERREUR_IMPREVUE;
header("location:".PAGE_ACCUEIL);
exit();
}
else
{
$_SESSION["message"]="Votre nouvel abonnement a bien été créé !";
header("location:".PAGE_ABO_AFFICHE.$abo->id_abonnement);
exit();
}

27
ctrl/compte_crea_abo_ville.php Executable file
View File

@ -0,0 +1,27 @@
<?php
/* Script appelé lorsqu'un utilisateur souhaite s'abonner aux actualités locales d'une ville.
* L'utilisateur doit être connecté.
* Il doit fournir la ville centrale de l'abonnement.
* On le prévient si il a déjà un abonnement aux actus locales.
*
*/
require_once("../modele/FclFlux_abonnement.php");
// utilisateur connecté ?
$user=new FclFlux_utilisateur();
if(!$user->test_session(false))
{
unset($user);
$_SESSION["message"]="Pour recevoir les actualités locales, commencez par créer gratuitement votre compte utilisateur ci-dessous, en renseignant bien votre ville. Si avez déjà un compte Hello facteur, <b><a href='".PAGE_CONNEXION."'>cliquez-ici pour vous connecter</a></b>.";
header("Location:".PAGE_INSCRIPTION);
exit();
}
// on vérifie si des abonnements "locaux" existent déjà ?
if(empty($Bd))
require("../modele/connexion-bd.php");
$abos_ville=FclFlux_abonnement::get_liste_abo_ville_cache($user,true);
unset($Bd);
// l'utilisateur à validé le formulaire
if(isset($_POST["cp_ville"]))
require("../ctrl/compte_crea_abo_ville_tests.php");
// formulaire de saisie.
include("../vues/compte_crea_abo_ville.php");

View File

@ -0,0 +1,48 @@
<?php
/**
* Script créant un abonnement aux actus locales pour la ville renseignée.
* L'utilisateur doit être connecté et avoir saisi le nom de la ville.
* Ce script peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$ajax_on=false;
if(!empty($_POST["ajax"]))
{
$ajax_on=true;
header('Content-Type: text/html; charset=utf-8');
require_once("../modele/FclFlux_abonnement.php");
}
$user=new FclFlux_utilisateur();
if(!$user->test_session(true))
{
header("Location:".SITE_URL);
exit();
}
$msg_form=array();
$form["insee"]=strip_tags(trim($_POST["insee"]));
if(empty($form["insee"]))
$msg_form[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
if(empty($msg_form))
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$abo_ville=new FclFlux_abonnement();
$crea_abo_ville=$abo_ville->abo_rapide_ville($user,$form["insee"]);
if(!empty($abo_ville->erreurs))
$msg_form[]=$abo_ville->erreurs;
elseif($crea_abo_ville===false)
$msg_form[]=ERREUR_IMPREVUE;
else
{
$_SESSION["message"]="Votre abonnement a bien été créé. Si vous le souhaitez vous pouvez le configurer ci-dessous.<br>Pour voir les dernières actualités, <u><a href='".PAGE_ABO_AFFICHE."/".$abo_ville->id_abonnement."'>cliquez-ici</a></u>.";
if($ajax_on)
echo $abo_ville->id_abonnement;//c'est js qui provoquera la redirection
else
{
header("Location:".PAGE_ABO_MAJ."/".$abo_ville->id_abonnement);
exit();
}
}
}
if((!empty($msg_form))&&($ajax_on))
echo get_html_alerte_msg($msg_form);

129
ctrl/compte_crea_tests.php Executable file
View File

@ -0,0 +1,129 @@
<?php
/**
* Script testant les données envoyées lors de l'inscription d'un utilisateur
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$form["email"]=trim($_POST["email"]);
$form["pseudo"]=trim($_POST["pseudo"]);
$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_utilisateur.php");
}
if(!empty($_COOKIE["origine"]))
$form["origine"]=trim($_COOKIE["origine"]);
$msg_form=array();
if((empty($form["email"]))||(empty($form["pseudo"]))||((empty($_SESSION["coregistration"]))&&(empty($_POST["test"]))))
$msg_form[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
else
{
if(((empty($_SESSION["mot"]))||(empty($_SESSION["lettre"]))||((time()-intval($_SESSION["timeS"]))<FORM_MIN_DUREE))&&(empty($_SESSION["coregistration"])))
$msg_form[]=ERREUR_IMPREVUE;
else
{
if(empty($_SESSION["coregistration"]))
{
$mot=$_SESSION["mot"];
$nb_lettre=$_SESSION["lettre"]-1;//puisque index débute à 0...
if((strtolower(trim($_POST["test"])))!=($mot[$nb_lettre]))
$msg_form[]=ERREUR_UTILISA_ANTISPAM.$mot[$nb_lettre];
}
if(empty($_POST["cgu_ok"]))
$msg_form[]=ERREUR_UTILISA_CGU;
if(empty($_POST["ajax"])) //recherche la ville si un code postal a été saisi
include("../ctrl/get_ville_cp.php");
if(empty($Bd))
require("../modele/connexion-bd.php");
// impact sur le fuseau horaire si ville dans les dom tom
if(isset($_POST["insee"]))
{
$dep=get_villes($_POST["insee"],"insee");
if(!empty($dep))
{
$num=$dep[0]["dep_num"];
if(isset($DT_fuseau["$num"]))
$form["fuseau_horaire"]=$DT_fuseau["$num"];
}
}
$user=new FclFlux_utilisateur($form);
if((empty($msg_form))&&(empty($user->erreurs)))
{
if(empty($_SESSION["coregistration"]))
$ajout=$user->ajout(true);//avec true de passé, créer une session si tout se passe bien
else
$ajout=$user->ajout(true,false);//on évite la validation car l'email a déjà été contrôlé par meetoyen
}
if(!empty($user->erreurs))
$msg_form=array_merge($user->erreurs,$msg_form);
elseif((isset($ajout))&&($ajout===false))
$msg_form[]=ERREUR_IMPREVUE;
if(empty($msg_form))
{
if(!empty($_COOKIE["donnees_meetoyen"]))
setcookie("donnees_meetoyen","",time()-42000,"/",SITE_COOKIES_DOMAINE);
if(!empty($_COOKIE["donnees_mailing"]))
setcookie("donnees_mailing","",time()-42000,"/",SITE_COOKIES_DOMAINE);
// il peut y avoir un hub auxquel on est automatiquement abonné lorsque l'on créé son compte
if(!empty($hub_site))
{
require_once("../modele/FclFlux_abonnement.php");
$infos_abo["designation"]=$hub_site["nom"];
$infos_abo["proprietaire"]=$user;
$abo_news=new FclFlux_abonnement($infos_abo);
$crea_abo_news=$abo_news->ajout();
if($crea_abo_news===true)
{
$hub=new FclFlux_hub();
$hub->id_hub=$hub_site["id"];
$abo_news->ajout_hubs(array($hub));
}
unset($abo_news);
}
// si l'utilisateur a fourni sa ville, on essaye aussi de l'abonner aux actus locales.
if(!empty($_POST["insee"]))
{
$abo_local=new FclFlux_abonnement();
$crea_abo_local=$abo_local->abo_rapide_ville($user,$_POST["insee"]);
if($crea_abo_local===true)
{
$_SESSION["message"]="Votre compte a bien été créé. <u>Vous devez néanmoins le valider via un lien qui vient de vous être envoyé par email</u>.<br>En attendant vous pouvez déjà configurer ci-dessous votre abonnement aux actualités locales ou encore <u>voir le résultat <a href='".PAGE_ABO_AFFICHE.$abo_local->id_abonnement."' title='voir les dernières actualités pour votre abonnement'>en cliquant ici</a></u>.";
$Bd=null;
if(!$ajax_on)
header("location:".PAGE_ABO_MAJ.$abo->id_abonnement);
else
echo $abo_local->id_abonnement;//pour redirection en javascript
exit();
}
}
$Bd=null;
if((!empty($_SESSION["coregistration"]))&&(empty($form["insee"])))
$_SESSION["redirige"]=null;//pas la peine d'aller sur la page de création de l'abonnement
$_SESSION["message"]="Votre compte a bien été créé. Vous devez néanmoins le valider via un lien qui vient de vous être envoyé par email.<br>En attendant vous pouvez déjà créer votre premier abonnement ci-dessous.";
if(!$ajax_on)
{
// si l'utilisateur est connecté et a un cookie de redirection
// je le redirige vers la page qui l'intéressait avant la création de son compte
$redirige=PAGE_REPERTOIRE_ACCUEIL;
if(!empty($_SESSION["redirige"]))
$redirige=$_SESSION["redirige"];
elseif(!empty($_COOKIE["rdg"]))
{
if(strpos($_COOKIE["rdg"],SITE_COOKIES_DOMAINE)!==false)
$redirige=$_COOKIE["rdg"];
//dans tous les cas, je mange le cookie :-)
setcookie("rdg","",-1600,"/",SITE_COOKIES_DOMAINE);
}
header("location:".$redirige);
exit();
}
}
}
}
if((!empty($msg_form))&&($ajax_on))
echo get_html_alerte_msg($msg_form);

View File

@ -0,0 +1,36 @@
<?php
/**
* Script contrôlant le paramètre passé par l'url
* permettant de valider la modification de l'email de l'utilisateur
*
**/
require_once("../modele/FclFlux_utilisateur.php");
$user=new FclFlux_utilisateur();
if(!($user->test_session(false)))
{
unset($user);
$redirige=PAGE_VALIDATION_EMAIL.$page[2];
FclFlux_utilisateur::crea_cookie_redirection($redirige,1);
header("Location:".PAGE_CONNEXION);
exit();
}
else
{
$ticket=$page[2];
if(empty($Bd))
require("../modele/connexion-bd.php");
$validation=$user->valide_email($ticket);
$Bd=null;
if(!empty($user->erreurs))
$msg_form=$user->erreurs;
else if(!$validation)
$msg_form=ERREUR_IMPREVUE;
else
{
$_SESSION["message"]=MSG_UTILISA_VALIDATION_EMAIL_LIEN;
header("Location:".PAGE_ACCUEIL);
exit();
}
//vue
include("../vues/compte_email_maj_validation.php");
}

47
ctrl/compte_get_passe.php Executable file
View File

@ -0,0 +1,47 @@
<?php
/**
* Script testant les données envoyées lors d'une demande de nouveau de passe
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$form["email"]=trim($_POST["email"]);
$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_utilisateur.php");
}
$msg_form=array();
if(empty($form["email"]))
$msg_form[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
else
{
if((empty($_SESSION["timeS"]))||((time()-intval($_SESSION["timeS"]))<FORM_MIN_DUREE))
$msg_form[]=ERREUR_IMPREVUE;
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$user=new FclFlux_utilisateur($form);
if((empty($msg_form))&&(empty($user->erreurs)))
$envoi=$user->get_nouveau_passe();
$Bd=null;
if(!empty($user->erreurs))
$msg_form=array_merge($user->erreurs,$msg_form);
elseif($envoi===false)
$msg_form[]=ERREUR_IMPREVUE;
else
$msg_form[]=MSG_UTILISA_GET_PASSE_OK;
}
}
if((!empty($msg_form))&&($ajax_on))
{
if($msg_form[0]==MSG_UTILISA_GET_PASSE_OK)
echo get_html_alerte_msg($msg_form,"alert-success");
else
echo get_html_alerte_msg($msg_form);
}

40
ctrl/compte_identifiant_maj.php Executable file
View File

@ -0,0 +1,40 @@
<?php
/**
* Script contrôlant les données envoyées leur d'une demande de mise à jour des identifiants de connexion (email & passe)
* l'utilisateur doit fournir le mot de passe actuel pour que sa demande soit acceptée
* * ! les utilisateurs n'ayant pas validé leur compte ne doivent pas pouvoir utiliser cette page
*
**/
require_once("../modele/FclFlux_utilisateur.php");
$user=new FclFlux_utilisateur();
if(!$user->test_session(false))
{
unset($user);
$redirige=PAGE_MAJ_IDENTIFIANT;
FclFlux_utilisateur::crea_cookie_redirection($redirige,1);
header("Location:".PAGE_CONNEXION);
exit();
}
else
{
if(isset($_POST["email"]))
include("../ctrl/compte_identifiant_maj_tests.php");
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$tab_infos=$user->recherche(intval($user->id_utilisateur),"id_utilisateur","email,time_validation");
$Bd=null;
if(!empty($tab_infos["email"]))
$form["email"]=$tab_infos["email"];
else
{
$user->supprime_session();
unset($user);
header("Location:".SITE_URL);
exit();
}
}
//formulaire
include("../vues/compte_identifiant_maj.php");
}

View File

@ -0,0 +1,50 @@
<?php
/**
* Script testant les données envoyées lors de l'enregistrement d'une mise à jour des identifiants de connexion
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$form["email"]=trim($_POST["email"]);
$form["passe"]=trim($_POST["passe"]);
$nouveau_passe=trim($_POST["nouveau_passe"]);
$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_utilisateur.php");
}
$msg_form=array();
if(empty($form["email"])||empty($form["passe"]))
$msg_form[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
else
{
if(empty($_SESSION["id_utilisateur"]))
$msg_form[]=ERREUR_IMPREVUE;
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$user=new FclFlux_utilisateur($form);
$user->id_utilisateur=$_SESSION["id_utilisateur"];
if((empty($msg_form))&&(empty($user->erreurs)))
$maj=$user->actualise_infos_connexion($nouveau_passe);
$Bd=null;
if(!empty($user->erreurs))
$msg_form=array_merge($user->erreurs,$msg_form);
elseif($maj===false)
$msg_form[]=ERREUR_IMPREVUE;
if(empty($msg_form))
$msg_form[]=MSG_UTILISA_MAJ_IDENTIFIANTS_VALID;
}
}
if((!empty($msg_form))&&($ajax_on))
{
if($msg_form[0]==MSG_UTILISA_MAJ_IDENTIFIANTS_VALID)//à revoir, il faudrait en fait rafraichir le formulaire ... ou pas ?
echo get_html_alerte_msg($msg_form,"alert-success");
else
echo get_html_alerte_msg($msg_form);
}

View File

@ -0,0 +1,66 @@
<?php
/**
* Script contrôlant les données envoyées leur d'une demande de mise à jour de l'image illustrant le profil
*
**/
require_once("../modele/FclFlux_utilisateur.php");
$user=new FclFlux_utilisateur();
if(!$user->test_session(false))
{
unset($user);
header("Location:".PAGE_CONNEXION);
exit();
}
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$msg_form=array();
if(!empty($_FILES['illustration']['tmp_name']))
{
$set_illus=$user->set_illustration($_FILES['illustration']);
if($set_illus===true)
{
$maj=$user->actualise();
if(!empty($user->erreurs))
$msg_form=$user->erreurs;
elseif($maj===false)
$msg_form[]=ERREUR_IMPREVUE;
else
$msg_form[]=MSG_UTILISA_TELECHARGE_VALID;
}
else
$msg_form[]=ERREUR_IMPREVUE;
}
if(!empty($_POST["suppr_illustration"]))
{
$suppr=$user->actualise(true);//supprime le fichier
if(!empty($user->erreurs))
$msg_form=$user->erreurs;
else if($suppr===false)
$msg_form[]=ERREUR_IMPREVUE;
else
$msg_form[]=MSG_UTILISA_MAJ_SUPPR_VALID;
}
/*
//j'ai besoin de savoir si il y a déjà une illustration pour l'afficher et proposer sa suppression
$tab_infos=$user->recherche(intval($user->id_utilisateur),"id_utilisateur","illustration,email,time_validation");
$Bd=null;
if(!empty($tab_infos))
{
if(!empty($tab_infos["illustration"]))
{
$fichier=$tab_infos["illustration"];
$adresse_illustration=UTILISATEUR_ILLUS_REP."/".$fichier[0]."/".$fichier;
}
}
else
{
$user->supprime_session();
unset($user);
header("Location:".SITE_URL);
exit();
}*/
//affiche les résultats dans l'iframe
include("../vues/compte_illustration_maj.php");
}

130
ctrl/compte_infos_affiche.php Executable file
View File

@ -0,0 +1,130 @@
<?php
/**
* Script réaffichant le formulaire permettant de modifier / supprimer les infos persos après une mise à jour
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$ajax_on=false;
if(!empty($_GET["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_utilisateur.php");
}
$form_html="";
if(empty($_SESSION["id_utilisateur"]))
$form_html=ERREUR_IMPREVUE;
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$user=new FclFlux_utilisateur();
$user->id_utilisateur=$_SESSION["id_utilisateur"];
$tab_infos=$user->recherche(intval($user->id_utilisateur),"id_utilisateur","pseudo,presentation,fuseau_horaire,illustration,email");
if(!empty($tab_infos["pseudo"]))
{
$form[0]["pseudo"]=$tab_infos["pseudo"];
$form[0]["presentation"]=$tab_infos["presentation"];
if(!empty($tab_infos["illustration"]))
{
$fichier=$tab_infos["illustration"];
$adresse_illustration=UTILISATEUR_ILLUS_REP."/".$fichier[0]."/".$fichier;
}
$form[0]["email"]=$tab_infos["email"];//nécessaire pour procédure de suppression de compte.
$Bd=null;
}
else
{
$Bd=null;
unset($user);
exit();
}
if(!empty($form))
{
$form[0]["nom"]="Actualiser vos informations.";
$form[0]["champs"]="<form method='post' id='maj_infos' action='".PAGE_MAJ_INFOS_PERSO."' role='form' class='form-horizontal'>
<div class='form-group'>
<label for='pseudo' class='col-sm-3 control-label'>Votre nom / pseudo :</label>
<div class='col-sm-9'><input class='form-control' type='text' maxlength='".UTILISATEUR_MAX_PSEUDO."' name='pseudo' id='pseudo' value=\"".htmlspecialchars($form[0]["pseudo"])."\" required></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Obligatoire</b>.</p></div>
</div>";
$fuseau_defaut=date_default_timezone_get();
$tz=new DateTimeZone($fuseau_defaut);
$zones=$tz->listIdentifiers();
$form[0]["champs"].="<div id='fuseau_horaire'>
<div class='form-group'>
<label for='insee' class='col-sm-3 control-label'>Quel est votre fuseau horaire ?</label>
<div class='col-sm-9'><select name='fuseau_horaire' class='form-control'>";
foreach ($zones as $fuseau)
{
if($fuseau==$tab_infos["fuseau_horaire"])
$form[0]["champs"].="<option value='".$fuseau."' selected=selected>".htmlentities(affiche_utf8($fuseau,UTF8_OK))."</option>";
else
$form[0]["champs"].="<option value='".$fuseau."'>".htmlentities(affiche_utf8($fuseau,UTF8_OK))."</option>";
}
$form[0]["champs"].="</select></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'>Votre fuseau horaire est utile par déterminer l'heure d'envoi de vos abonnements (décalage horaire, heure d'été...).</p></div>
</div></div>
<div class='form-group'>
<label for='presentation' class='col-sm-3 control-label'>Présentez-vous :</label>
<div class='col-sm-9'><textarea class='form-control' rows='8' name='presentation' id='presentation' maxlength='".UTILISATEUR_MAX_PRESENTATION."'>".htmlspecialchars($form[0]["presentation"])."</textarea></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Facultatif</b>. Décrivez-vous en quelques mots. ".UTILISATEUR_MAX_PRESENTATION." caractères maximum.</p></div>
</div>
<div class='form-group'>
<div class='col-sm-offset-3 col-sm-9'>
<div class='checkbox'>
<label for='compte_suppr' class='text-danger'><input type='checkbox' name='compte_suppr' id='compte_suppr' value='1'> <b>Je souhaite supprimer définitivement mon compte utilisateur.</b></label>
</div>
</div>
</div>
<div id='msg_infos'></div>
<input type='hidden' name='email' id='email' value=\"".$form[0]["email"]."\" >
<div class='form-group'><div class='col-sm-offset-3 col-sm-9'><button type='submit' class='btn btn-success btn-lg'>Enregistrer.</button></div></div>
</form>";
$form[1]["nom"]="Votre photo.";
$form[1]["champs"]="
<form method='post' id='maj_illustration' action='".PAGE_MAJ_ILLUSTRATION."' enctype='multipart/form-data' role='form' class='form-horizontal' target='uploadFrame'>";
if((!empty($adresse_illustration))&&(file_exists($adresse_illustration)))
{
$form[1]["champs"].="
<p><strong>Photo actuelle.</strong><br>
<img src='".SITE_URL."/".$adresse_illustration."' alt='Illustration actuelle' class='img-responsive'>
</p>
<div class='form-group'>
<label for='illustration' class='col-sm-3 control-label'>Téléchargez une nouvelle photo :</label>
<div class='col-sm-9'><input type='file' name='illustration' id='illustration'></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Facultatif</b>. Vous pouvez télécharger une nouvelle photo pour remplacer celle actuelle. Formats autorisés : ".str_replace("|",", ",UTILISATEUR_ILLUS_EXTENSIONS).".</p></div>
</div>
<div class='form-group'>
<div class='col-sm-offset-3 col-sm-9'>
<div class='checkbox'>
<label for='suppr_illustration'>
<input name='suppr_illustration' type='checkbox' id='suppr_illustration' value='1'> Je souhaite supprimer la photo actuelle sans en télécharger une nouvelle.
</label>
</div>
</div>
</div>";
}
else
{
$form[1]["champs"].="
<div class='form-group'>
<label for='illustration' class='col-sm-3 control-label'>Téléchargez votre photo :</label>
<div class='col-sm-9'><input type='file' name='illustration' id='illustration'></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'><b>Facultatif</b>. Vous pouvez télécharger une photo pour illustrer votre profil utilisateur. Formats autorisés : ".str_replace("|",", ",UTILISATEUR_ILLUS_EXTENSIONS).".</p></div>
</div>";
}
$form[1]["champs"].="<iframe id='uploadFrame' name='uploadFrame' src='#' style='width:90%;height:100px;border:0 solid;'></iframe>
<div id='msg_illustration'></div>
<div class='form-group'><div class='col-sm-offset-3 col-sm-9'>
<button type='submit' class='btn btn-success btn-lg'>Enregistrer.</button>
</div></div>
</form>\n";
}
}
if((!empty($form))&&($ajax_on))
echo get_html_form($form,false);

50
ctrl/compte_infos_maj.php Executable file
View File

@ -0,0 +1,50 @@
<?php
/**
* Script permettant de modifier ses infos personnelles hors identifiants
* Données concernées : le pseudo (qui doit rester unique), le texte de présentation et le fuseau horaire. L'illustration est traitée via une iframe.
* ! les utilisateurs n'ayant pas encore validé leur compte ne doivent pas pouvoir utiliser ce script.
*
**/
require_once("../modele/FclFlux_utilisateur.php");
$user=new FclFlux_utilisateur();
if(!$user->test_session(false))
{
unset($user);
$redirige=PAGE_MAJ_INFOS_PERSO;
FclFlux_utilisateur::crea_cookie_redirection($redirige,1);
header("Location:".PAGE_CONNEXION);
exit();
}
else
{
if(isset($_POST["pseudo"]))
include("../ctrl/compte_infos_maj_tests.php");
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$tab_infos=$user->recherche(intval($user->id_utilisateur),"id_utilisateur","pseudo,presentation,email,time_validation,fuseau_horaire,illustration");
if(!empty($tab_infos["pseudo"]))
{
$form["pseudo"]=$tab_infos["pseudo"];
$form["presentation"]=$tab_infos["presentation"];
$form["email"]=$tab_infos["email"];// nécessaire pour la procédure de suppression du compte.
if(!empty($tab_infos["illustration"]))
{
$fichier=$tab_infos["illustration"];
$adresse_illustration=UTILISATEUR_ILLUS_REP."/".$fichier[0]."/".$fichier;
}
$Bd=null;
}
else
{
$Bd=null;
$user->supprime_session();
unset($user);
header("Location:".SITE_URL);
exit();
}
}
//formulaire
include("../vues/compte_infos_maj.php");
}

73
ctrl/compte_infos_maj_tests.php Executable file
View File

@ -0,0 +1,73 @@
<?php
/**
* Script testant les données envoyées lors de l'enregistrement d'une mise à jour des infos de l'utilisateur
* Peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$form["pseudo"]=trim($_POST["pseudo"]);
$form["presentation"]=trim($_POST["presentation"]);
$form["fuseau_horaire"]=trim($_POST["fuseau_horaire"]);
$form["email"]=$_POST["email"];
$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_utilisateur.php");
}
$msg_form=array();
if(empty($_POST["pseudo"]))
$msg_form[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
else
{
if(empty($_SESSION["id_utilisateur"]))
$msg_form[]=ERREUR_IMPREVUE;
elseif(!empty($_POST["compte_suppr"]))
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$user=new FclFlux_utilisateur($form);
$user->id_utilisateur=$_SESSION["id_utilisateur"];
$suppr=$user->get_lien_suppression();
if(!empty($user->erreurs))
$msg_form=array_merge($user->erreurs,$msg_form);
elseif($suppr===false)
$msg_form[]=ERREUR_IMPREVUE;
else
{
if($ajax_on)
$msg_form[]=MSG_UTILISA_GET_LIEN_SUPPRESSION_OK;
}
}
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$user=new FclFlux_utilisateur($form);//test les différentes valeurs fournies
$user->id_utilisateur=$_SESSION["id_utilisateur"];
if((empty($msg_form))&&(empty($user->erreurs)))
$maj=$user->actualise();
if(!empty($user->erreurs))
$msg_form=array_merge($user->erreurs,$msg_form);
elseif($maj===false)
$msg_form[]=ERREUR_IMPREVUE;
$Bd=null;
if(empty($msg_form))
{
$_SESSION["pseudo"]=$form["pseudo"];//peut avoir changé !
$msg_form[]=MSG_UTILISA_MAJ_INFOS_VALID;
}
}
}
if((!empty($msg_form))&&($ajax_on))
{
if($msg_form[0]==MSG_UTILISA_MAJ_INFOS_VALID)
echo str_replace("\"","'",MSG_UTILISA_MAJ_INFOS_VALID);//pour comparaison en JS
elseif($msg_form[0]==MSG_UTILISA_GET_LIEN_SUPPRESSION_OK)
echo str_replace("\"","'",MSG_UTILISA_GET_LIEN_SUPPRESSION_OK);//pour comparaison en JS
else
echo get_html_alerte_msg($msg_form);
}

32
ctrl/compte_lien_connexion.php Executable file
View File

@ -0,0 +1,32 @@
<?php
/**
* Script contrôlant le paramètre passé par l'url
* permettant de se connecter sans mot de passe.
*
**/
require_once("../modele/FclFlux_utilisateur.php");
$user=new FclFlux_utilisateur();
$ticket=$page[2];
require("../modele/connexion-bd.php");
$connexion=$user->crea_session_lien_connexion($ticket);
$Bd=null;
if(!empty($user->erreurs))
$msg_form=$user->erreurs;
else if(!$connexion)
$msg_form=ERREUR_IMPREVUE;
else
{
// si l'utilisateur connecté et a un cookie de redirection
// je le redirige vers la page qui l'intéressait avant connexion
$redirige=PAGE_ACCUEIL;
if(!empty($_COOKIE["rdg"]))
{
if(strpos($_COOKIE["rdg"],SITE_COOKIES_DOMAINE)===false)
$redirige=$_COOKIE["rdg"];
//dans tous les cas, je mange mon cookie :-)
setcookie("rdg","",-1600,"/",SITE_COOKIES_DOMAINE);
}
header("location:".$redirige);
exit();
}
include("../vues/compte_lien_connexion.php");

View File

@ -0,0 +1,17 @@
<?php
/**
* Script contrôlant le paramètre passé par l'url
* permettant de finaliser la suppression d'un compte
*
**/
require_once("../modele/FclFlux_utilisateur.php");
$user=new FclFlux_utilisateur();
$ticket=$page[2];
require("../modele/connexion-bd.php");
$suppr=$user->test_lien_suppression($ticket);
$Bd=null;
if(!empty($user->erreurs))
$msg_form=$user->erreurs;
else if(!$suppr)
$msg_form=ERREUR_IMPREVUE;
include("../vues/compte_lien_suppression.php");

22
ctrl/compte_validation.php Executable file
View File

@ -0,0 +1,22 @@
<?php
/**
* Script contrôlant le paramètre passé par l'url
* permettant de valider la création d'un compte
*
**/
require_once("../modele/FclFlux_utilisateur.php");
$user=new FclFlux_utilisateur();
$ticket=$page[2];
require("../modele/connexion-bd.php");
$validation=$user->valide($ticket,true);
$Bd=null;
if(!empty($user->erreurs))
$msg=$user->erreurs;
else if(!$validation)
$msg=ERREUR_IMPREVUE;
else
{
header("Location:".PAGE_ACCUEIL);
exit();
}
include("../vues/compte_validation.php");

33
ctrl/connexion.php Executable file
View File

@ -0,0 +1,33 @@
<?php
/**
* Script contrôlant les données envoyées par le formulaire d'inscription du site
*
**/
require_once("../modele/FclFlux_utilisateur.php");
$user=new FclFlux_utilisateur();
if($user->test_session(false))
{
header("Location:".PAGE_ACCUEIL);
exit();
}
else
{
unset($user);
if(isset($_POST["email"]))
{
$form["email"]=trim($_POST["email"]);
include("../ctrl/compte_connect_tests.php");
}
elseif(!empty($_SESSION["email_abo"]))//internautes venant d'un site tiers
$form["email"]=$_SESSION["email_abo"];
else
$form["email"]=null;
//anti-bots
$_SESSION["timeS"]=time();
if(!isset($_SESSION["Nb_tentatives"]))
$_SESSION["Nb_tentatives"]=1;
else
$_SESSION["Nb_tentatives"]=$_SESSION["Nb_tentatives"]+1;
//formulaire d'inscription
include("../vues/connexion.php");
}

41
ctrl/contact.php Executable file
View File

@ -0,0 +1,41 @@
<?php
/**
* Script contrôlant les données envoyées par le formulaire de contact
*
**/
require_once("../modele/FclFlux_utilisateur.php");
$user=new FclFlux_utilisateur();
$user->test_session(false);//pour personnaliser le formulaire si possible
if(isset($_POST["message"]))
include("../ctrl/contact_tests.php");
else
{
$form["sujet"]=null;
$form["message"]=null;
if(!empty($user->connexion_ok))
{
$infos_user=$user->get_infos_cache(true);
if(empty($infos_user))//pas normal...
$user->supprime_session();
else
{
$form["email"]=$infos_user["email"];
$form["pseudo"]=$infos_user["pseudo"];
}
unset($infos_user);
}
if(empty($user->connexion_ok))//j'ai pu me faire sauvagement déconnecté précédement...
{
$form["email"]=null;
$form["pseudo"]=null;
//antispam
$mots=explode("|",FORMULAIRE_FILTRES_SPAM);
$hasard=array_rand($mots,1);
$_SESSION["mot"]=$mots[$hasard];
$max=min(strlen($_SESSION["mot"]),6);//au-delà de 6, difficile à compter ?
$_SESSION["lettre"]=rand(2,$max);
$_SESSION["timeS"]=time();
}
}
//formulaire de contact
include("../vues/contact.php");

70
ctrl/contact_tests.php Executable file
View File

@ -0,0 +1,70 @@
<?php
/**
* Script testant les données envoyées lors de l'envoi d'un message par un internaute
* qui peut être connecté au site ou non
* Ce script peut être appelé en ajax ou directement en php si JS désactivé
*
**/
$form["email"]=strip_tags(trim($_POST["email"]));
$form["pseudo"]=strip_tags(trim($_POST["pseudo"]));
$form["sujet"]=strip_tags(trim($_POST["sujet"]));
$form["message"]=strip_tags(trim($_POST["message"]));
$ajax_on=false;
if(!empty($_POST["ajax"]))
{
$ajax_on=true;
require_once("../modele/FclFlux_utilisateur.php");
$user=new FclFlux_utilisateur();
$user->test_session(false);//besoin de savoir si utilisateur est connecté ou pas...
header('Content-Type: text/html; charset=utf-8');
}
$msg_form=array();$pre_message="";
if(empty($user->connexion_ok))//internaute non connecté
{
if(empty($_POST["test"])||empty($form["email"])||empty($form["pseudo"])||empty($form["sujet"])||empty($form["message"]))
$msg_form[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
else
{
if((empty($_SESSION["mot"]))||(empty($_SESSION["lettre"]))||((time()-intval($_SESSION["timeS"]))<FORM_MIN_DUREE))
$msg_form[]=ERREUR_IMPREVUE;
else
{
$mot=$_SESSION["mot"];
$nb_lettre=$_SESSION["lettre"]-1;//puisque index débute à 0...
if((strtolower($_POST["test"]))!=($mot[$nb_lettre]))
$msg_form[]=ERREUR_UTILISA_ANTISPAM.$mot[$nb_lettre];
}
}
if(empty($msg_form))
{
$ip=getIp();
$Config=$_SERVER['HTTP_USER_AGENT'];
$pre_message="Ce message a été envoyé par un utilisateur non connecté (nom fourni : ".$form["pseudo"].") ayant comme adresse IP : $ip et comme configuration : $Config.";
}
}
else
{
if(empty($form["sujet"])||empty($form["message"]))
$msg_form[]=ERREUR_UTILISA_CHAMPS_ABSENTS;
else
{
$ip=getIp();
$Config=$_SERVER['HTTP_USER_AGENT'];
$pre_message="Ce message a été envoyé pour un utilisateur connecté (pseudo : ".$form["pseudo"].", id: ".$_SESSION["id_utilisateur"].") ayant comme adresse IP : $ip et comme configuration : $Config.";
}
}
if(empty($msg_form))
{
$envoi=envoi_message($form["email"],EMAIL_CONTACT,"[".SITE_NOM."] ".$form["sujet"],$pre_message."\n\n".$form["message"],$form["pseudo"]);
if($envoi)
$msg_form[]=MSG_UTILISA_ENVOI_MESSAGE_VALID;
else
$msg_form[]=ERREUR_UTILISA_ENVOI_MESSAGE;
}
if((!empty($msg_form))&&($ajax_on))
{
if(($msg_form[0]==MSG_UTILISA_ENVOI_MESSAGE_VALID)||($msg_form[0]==ERREUR_UTILISA_ENVOI_MESSAGE))
echo str_replace("\"","'",$msg_form[0]);//mise en forme via JS
else
echo get_html_alerte_msg($msg_form);
}

12
ctrl/deconnexion.php Executable file
View File

@ -0,0 +1,12 @@
<?php
/**
* Script permettant de l'utilisateur de se déconnecter
* avant de le renvoyer vers la page d'accueil du site
*
**/
require_once("../modele/FclFlux_utilisateur.php");
$user=new FclFlux_utilisateur();
$user->supprime_session();
unset($user);
header("location:".SITE_URL);
exit();

62
ctrl/get_ville_cp.php Executable file
View File

@ -0,0 +1,62 @@
<?php
/**
* Script contrôlant un code postal saisi
* Et retournant la/les ville(s) correspondant si trouvé
* Peut être appelé en ajax ou directement en php
**/
if(isset($_POST["cp_ville"]))
$form["cp_ville"]=$_POST["cp_ville"];
$ajax_on=false;
if(!empty($_POST["ajax"]))
{
header('Content-Type: text/html; charset=utf-8');
$ajax_on=true;
}
if(!empty($form["cp_ville"]))
{
if(strlen($form["cp_ville"])<3)
$msg_form[]=ERREUR_UTILISA_CP_LONG;
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$villes=get_villes($form["cp_ville"]);
if(empty($villes))
{
$msg_erreur=ERREUR_UTILISA_CP_VILLE_ABSENTE;
if(!$ajax_on)
$msg_form[]=$msg_erreur;
else
echo get_html_alerte_msg((array) $msg_erreur);
}
else if(count($villes)==1)
{
if(!$ajax_on)
$form["ville"]=$villes[0];
else
{
$msg[0]="Ville trouvée pour votre saisie : <strong>".htmlentities(affiche_utf8($villes[0]["nom"],UTF8_OK))." (".$villes[0]["cp"].")</strong>.<br>
Si ce n'est pas la bonne, essayez une autre recherche.<input type='hidden' name='insee' id='insee' value='".$villes[0]["insee"]."'>
<input type='hidden' name='a_insee' id='a_insee' value=\"".$villes[0]["insee"]."\" >";//pour savoir si l'utilisateur a changé de ville (répercussion sur l'abonnement local).";
echo get_html_alerte_msg($msg,"alert-success");
}
}
else
{
$villes_select=$villes;
if(!$ajax_on)
$msg_form[]=str_replace("__NB__",count($villes),ERREUR_UTILISA_CP_PLUSIEURS_VILLES);
else
{
echo "<div class='form-group'>
<label for='insee' class='col-sm-3 control-label'> >> ".str_replace("__NB__",count($villes),ERREUR_UTILISA_CP_PLUSIEURS_VILLES).htmlentities($form["cp_ville"])."</label>
<div class='col-sm-9'><select name='insee' id='insee' autofocus class='form-control'>";
foreach ($villes_select as $ville_info)
echo "<option value='".$ville_info["insee"]."'>".htmlentities(affiche_utf8($ville_info["nom"],UTF8_OK))." (".$ville_info["cp"].").</option>";
echo "</select></div>
<div class='col-sm-offset-3 col-sm-9'><p class='help-block'>Si votre ville n'est pas dans la liste, essayez une autre recherche.</p></div>
</div>";
}
}
}
}

56
ctrl/inscription.php Executable file
View File

@ -0,0 +1,56 @@
<?php
/**
* Script contrôlant les données envoyées par le formulaire d'inscription du site
*
**/
require_once("../modele/FclFlux_utilisateur.php");
$user=new FclFlux_utilisateur();
if($user->test_session(false))
{
header("Location:".PAGE_ACCUEIL);
exit();
}
else
{
if(isset($_POST["pseudo"]))
include("../ctrl/compte_crea_tests.php");
else
{
if(empty($form["pseudo"]))//ça a pu foirer au-dessus...
{
if(isset($_GET["o"]))
$origine=htmlentities($_GET["o"],ENT_QUOTES);
else
$origine="inconnue";
//internautes venant d'un site tiers
if(!empty($_SESSION["email_abo"]))
{
$form["email"]=$_SESSION["email_abo"];
$pseudo=explode("@",$form["email"]);
$form["pseudo"]=$pseudo[0];
$origine="tiers";
}
else
{
$form["email"]=null;
$form["pseudo"]=null;
}
}
$mots=explode("|",FORMULAIRE_FILTRES_SPAM);
$hasard=array_rand($mots,1);
$_SESSION["mot"]=$mots[$hasard];
$max=min(strlen($_SESSION["mot"]),6);
$_SESSION["lettre"]=rand(2,$max);
$_SESSION["timeS"]=time();
//je créé un cookie pour savoir d'où vient l'utilisateur même si il ne s'inscrit pas aujourd'hui
if((empty($_COOKIE["origine"]))&&(!empty($origine)))
{
$date_expire_cookie=time()+(3600*24)*7;
setcookie("origine",$origine,$date_expire_cookie,"/",SITE_COOKIES_DOMAINE);
}
else
$origine=$_COOKIE["origine"];
}
//formulaire d'inscription
include("../vues/inscription.php");
}

89
ctrl/liens_clic.php Executable file
View File

@ -0,0 +1,89 @@
<?php
/**
* Script enregistrant dans un fichier les clics des utilisateurs
* et les redirigeant vers la page souhaitée
*
* exemple : http://www.hellofacteur.com/go/48/1041417/30
*
* Pour limiter les ressources consommées du fait de faux clics (spam),
* les infos de l'abonnement doivent être trouvées dans un fichier cache existant et l'id de l'utilisateur cohérent.
**/
set_time_limit(120);
require_once("../modele/journal_erreurs.php");
if((empty($page[1]))||(empty($page[2]))||(empty($page[3])))
{
header("location:".SITE_URL."/404.php");
exit();
}
$id_abonnement=intval($page[1]);
$id_post=intval($page[2]);
$id_utilisateur=intval($page[3]);
$url_redirection="";
//je vérifie que l'abonnement existe et qu'il appartient bien à cet utilisateur
require_once("../modele/FclFlux_abonnement.php");
$abo=new FclFlux_abonnement();
$abo->id_abonnement=$id_abonnement;
$infos_abo=$abo->get_infos_cache(false);
if(!empty($infos_abo))
{
if($infos_abo["auteur_id"]==$id_utilisateur)
{
$posts_abo=$abo->get_liste_posts_cache(false,"mois");// version mois du fichier me permet de chercher un lien ancien (mail lu tardivement) - ici, pas de calcul du cache pour éviter de recharger des flux buggés à chaque clic.
if(!empty($posts_abo))
{
foreach($posts_abo as $post_infos)
{
if($post_infos["id_post"]==$id_post)
{
if(!empty($post_infos["auteur_id"]))
{// si une annonce a été saisie, on reste sur le site
$post=new FclFlux_post();
$post->id_post=$post_infos["id_post"];
$post_infos=$post->get_infos_cache(true);
if(!empty($post_infos["annonce"]))
$url_redirection=PAGE_REPERTOIRE_POST_INFO.$post->id_post;
unset($post);
}
if(empty($url_redirection)&&(!empty($post_infos["url"])))
$url_redirection=str_replace("&amp;","&",$post_infos["url"]);
break;
}
}
}
unset($posts_abo);
//pas trouvé dans fichier, je cherche dans la bd
if((empty($url_redirection))&&(empty($MSG_MAINTENANCE)))
{
// je cherche dans la bd
require("../modele/connexion-bd.php");
$cherche_post=FclFlux_post::recherche($id_post,"url,annonce");
if(!empty($cherche_post["annonce"]))
$url_redirection=PAGE_REPERTOIRE_POST_INFO.$id_post;
elseif(!empty($cherche_post["url"]))
$url_redirection=str_replace("&amp;","&",$cherche_post["url"]);
$Bd=null;
}
}
}
unset($infos_abo);
if(empty($url_redirection))
{
header("location:".SITE_URL."/404.php");
exit();
}
else
{
$post=new FclFlux_post();
$post->id_post=$id_post;
$user=new FclFlux_utilisateur();
$user->id_utilisateur=$id_utilisateur;
if((!empty($page[4]))&&($page[4]=="s"))
$post->ajout_journal_clic($user,$abo,"site");
else
$post->ajout_journal_clic($user,$abo,"email");
//que cela aie marché ou pas, je redirige vers la page :
unset($post);unset($user);unset($abo);
echo "<html><head><meta charset=\"utf-8\"><meta http-equiv=\"refresh\" content=\"5;URL=$url_redirection\"><script>document.location.href='$url_redirection';</script><title>Hello facteur - redirection en cours.</title></head><body><h1>Si vous n'êtes pas redirigé(e) d'ici quelques secondes, <a href='$url_redirection'>cliquez-ici</a>.</h1></body></html>";
//header("location:".$url_redirection);
exit();
}

52
ctrl/liens_clic_annonce.php Executable file
View File

@ -0,0 +1,52 @@
<?php
/**
* Script enregistrant dans un fichier les clics des utilisateurs sur une annonce promotionnelle
* et les redirigeant vers l'url de l'annonce
*
**/
set_time_limit(120);
if((empty($page[2]))||(empty($page[3]))||(empty($page[4])))
{
header("location:".SITE_URL."/404.html");
exit();
}
$id_annonce=intval($page[2]);
$id_utilisateur=intval($page[3]);
$time_crea_annonce=intval($page[4]);
$url_redirection="";
//je vérifie que l'annonce existe
require_once("../modele/FclFlux_annonces.php");
$annonce=new FclFlux_annonce();
$annonce->id_annonce=$id_annonce;
$infos=$annonce->get_infos_cache(true);//force le calcul du fichier si nécessaire
if(!empty($infos))
{
if($infos["time_crea"]==$time_crea_annonce)
$url_redirection=$infos["lien_url"];
}
unset($infos);
//pas trouvé dans fichier, je cherche dans la bd
if((empty($url_redirection))&&(empty($MSG_MAINTENANCE)))
{
require("../modele/connexion-bd.php");
$cherche_lien=FclFlux_annonce::recherche($id_annonce,"lien_url");
if($cherche_lien!==false)
$url_redirection=$cherche_lien["lien_url"];
$Bd=null;
}
if(empty($url_redirection))
{
unset($annonce);
header("location:".SITE_URL."/404.html");
exit();
}
else
{
$user=new FclFlux_utilisateur();
$user->id_utilisateur=$id_utilisateur;
$annonce->ajout_journal_clic($user);
//que cela aie marché ou pas, je redirige vers la page :
unset($annonce);unset($user);
header("location:".$url_redirection);
exit();
}

24
ctrl/nouveau_passe.php Executable file
View File

@ -0,0 +1,24 @@
<?php
/**
* Script contrôlant les données envoyées par le formulaire de demande d'un nouveau mot de passe
*
**/
require_once("../modele/FclFlux_utilisateur.php");
$user=new FclFlux_utilisateur();
if($user->test_session(false))
{
header("Location:".PAGE_ACCUEIL);
exit();
}
else
{
unset($user);
if(isset($_POST["email"]))
include("../ctrl/compte_get_passe.php");
else
$form["email"]="";
//anti-bots
$_SESSION["timeS"]=time();
//formulaire
include("../vues/nouveau_passe.php");
}

54
ctrl/post_ajout.php Executable file
View File

@ -0,0 +1,54 @@
<?php
/**
* Script contrôlant les données envoyées par le formulaire permettant à un internaute (connecté ou non) de soumettre une annonce.
* * ! les utilisateurs n'ayant pas encore validé leur compte ne doivent pas pouvoir soumettre d'actualité.
*
**/
require_once("../modele/FclFlux_post.php");
$user=new FclFlux_utilisateur();
$user->test_session(false);//pour adapter le formulaire et les tests suivant si connecté ou non
if(isset($_POST["message"]))
include("../ctrl/post_ajout_tests.php");
else
{
$form["ancre"]=null;
$form["url"]="";
$form["annonce"]=null;
$form["type"]="annonce";
$form["insee"]=null;
if(!empty($user->connexion_ok))
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$infos_user=$user->recherche(intval($user->id_utilisateur),"id_utilisateur","time_validation,email,pseudo");
$Bd=null;
//$infos_user=$user->get_infos_cache(true);
if(empty($infos_user))//pas normal...
$user->supprime_session();
else
{
$form["email"]=$infos_user["email"];
$form["pseudo"]=$infos_user["pseudo"];
$form["ville"]["insee"]=null;
$form["ville"]["cp"]=null;
$form["ville"]["nom"]=null;
}
}
if(empty($user->connexion_ok))//j'ai pu me faire sauvagement déconnecté précédement...
{
$form["email"]=null;
$form["pseudo"]=null;
$form["ville"]["insee"]=null;
$form["ville"]["cp"]=null;
$form["ville"]["nom"]=null;
//antispam
$mots=explode("|",FORMULAIRE_FILTRES_SPAM);
$hasard=array_rand($mots,1);
$_SESSION["mot"]=$mots[$hasard];
$max=min(strlen($_SESSION["mot"]),6);//au-delà de 6, difficile à compter ?
$_SESSION["lettre"]=rand(2,$max);
$_SESSION["timeS"]=time();
}
}
//formulaire de contact
include("../vues/post_ajout.php");

View File

@ -0,0 +1,38 @@
<?php
/**
* Script permettant à un utilisateur de télécharger une illustration suite à la soumission d'un post.
*
**/
require_once("../modele/FclFlux_post.php");
$user=new FclFlux_utilisateur();
if(!$user->test_session(false))
{// en théorie, pas possible mais...
unset($user);
$redirige=PAGE_AJOUT_POST_ILLUSTRATION.$page[3];
FclFlux_utilisateur::crea_cookie_redirection($redirige,1);
header("Location:".PAGE_CONNEXION);
exit();
}
else
{
if(!empty($_FILES['illustration']['tmp_name']))
include("../ctrl/post_illustration_maj.php");
else
{
if(empty($Bd))
require("../modele/connexion-bd.php");
$post_infos=FclFlux_post::recherche(intval($page[3]),"ancre,auteur_id,time_validation");
if(empty($post_infos["ancre"])||(empty($post_infos["auteur_id"])))
{// pareil, en théorie, ce n'est pas possible.
header("Location:".PAGE_ACCUEIL);
exit();
}
elseif(($post_infos["auteur_id"]!=$user->id_utilisateur)||($post_infos["time_validation"]!=0))//!!! ajouter un test pour savoir si l'actu n'a pas été validée.
{// là, il y a un problème...
header("Location:".PAGE_ACCUEIL);
exit();
}
}
// le formulaire de téléchargement de l'illustration.
include("../vues/post_ajout_illustration.php");
}

Some files were not shown because too many files have changed in this diff Show More