comunic/inc/functions/main.php
2016-11-19 12:08:12 +01:00

3214 lines
99 KiB
PHP
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* Project's main function file
* For Comunic project use only
* All rights reserved
*
* @author Pierre HUBERT
* @date Began by the end of 2013
*/
//Avertissement : ce fichier nécessite l'inclusion de la configuration (config.php)
//Affichage de l'avatar
//Recherche de l'avatar de la personne
function avatar($idavatar, $urlsite="./", $whidth=32, $height=32, $id="", $juste_avatar = false)
{
//On définit l'adresse de l'avatar
$adresse_avatar = "0.jpg";
if(file_exists(relativeUserDataFolder("avatars/adresse_avatars/".$idavatar.".txt")))
{
//Contrôle du niveau de visibilité
$niveau_visibilite_avatar = (get_niveau_visibilite_avatar($idavatar, $urlsite));
//On définit que c'est n'est pas bon.
$ok = false;
//On contrôle l'avatar
$ok = ($niveau_visibilite_avatar == 3 ? true : $ok); //On vérifie si l'avatar est ouvert
//On vérifie si ce n'est pas encore bon et si l'utilisateur est connecté
if(!$ok AND isset($_SESSION['ID']))
{
$ok = (($niveau_visibilite_avatar == 2) AND (isset($_SESSION['ID'])) ? true : $ok); //On vérifie si l'avatar est ouvert et si l'utilisateur est connecté
$ok = ($idavatar == $_SESSION['ID'] ? true : $ok); //On vérifie si il s'agit de l'avatar de l'utilisateur actuel
//On vérifie si ce n'est pas encore bon et si les deux personnes sont amies
//Inclusion de la base de données
include('connexiondb.php');
if(!$ok AND detectesilapersonneestamie($_SESSION['ID'], $idavatar, $bdd))
{
//Dans ce ce cas c'est OK
$ok = true;
}
}
//Si possible, on change l'adresse de l'avatar
if($ok)
$adresse_avatar = file_get_contents(relativeUserDataFolder("avatars/adresse_avatars/".$idavatar.".txt"));
}
//Renvoi du résultat
if(!$juste_avatar)
return "<img src='".webUserDataFolder()."avatars/".$adresse_avatar."' whidth='".$whidth."' height='".$height."' id='".$id."' />";
else
return webUserDataFolder()."avatars/".$adresse_avatar;
}
//Affichage de l'image de fond
//Recherche de l'image de fond de la personne
function imgfond($id_img_fond, $urlsite="./", $whidth=32, $height=32, $id="", $juste_url = false)
{
//On vérifie si un complément est disponible
if(file_exists(relativeUserDataFolder("imgfond/adresse_imgfond/".$id_img_fond.".txt")))
$url = webUserDataFolder("imgfond/".file_get_contents(relativeUserDataFolder("imgfond/adresse_imgfond/".$id_img_fond.".txt")));
else
$url = webUserDataFolder("imgfond/0.jpg");
if(!$juste_url)
return "<img src='".$url."' whidth='".$whidth."' height='".$height."' id='".$id."' />";
else
return $url;
}
//Fonction permettant de définir le niveau de visibilité de l'avatar de l'utilisateur
//Valeur de retour :
// 1 - L'utilisateur et ses amis uniquement
// 2 - L'utilisateur, ses amis et les personnes connectées
// 3 - L'utilisateur, ses amis, les personnes connectées et non connectées -> Tout le monde
function get_niveau_visibilite_avatar($id, $urlsite = "./")
{
//On définit qu'il est visible par tout le monde
$niveau_visibilite_avatar = 3;
//On vérifie si ce niveau de visibilité a été personalisé par l'utilisateur
$adresse_fichier = relativeUserDataFolder("avatars/adresse_avatars/limit_view_".$id.".txt");
if(file_exists($adresse_fichier))
{
//Récupération du contenu du fichier
$content_file = file_get_contents($adresse_fichier);
//Contrôle du contenu du fichier (on ne prendra en compte sa valeur que si elle ne présente un intérêt
if( $content_file == 1 OR $content_file == 2 )
$niveau_visibilite_avatar = $content_file; //On enregistre la nouvelle valeur
}
//Renvoi du résultat
return $niveau_visibilite_avatar;
}
//Fonction de modification du niveau de visibilité de l'avatar
function modifie_niveau_visibilite_avatar($id_personne, $nouveau_niveau, $urlsite = "./")
{
//Définition de l'adresse du fichier
$adresse_fichier = relativeUserDataFolder("avatars/adresse_avatars/limit_view_".$id_personne.".txt");
//Contrôle du nouveau niveau
if($nouveau_niveau == 3)
{
//Niveau égal à trois -> Suppression du fichier
if(file_exists($adresse_fichier))
//Suppression du message
return unlink($adresse_fichier);
else
//Rien à faire, retour positif
return true;
}
elseif($nouveau_niveau == 2 OR $nouveau_niveau == 1)
{
//Edition du fichier et retour (positif ou négatif suivant la réponse)
return file_put_contents($adresse_fichier, $nouveau_niveau);
}
else
//Erreur
return false;
}
//Fonction d'ajout de texte
function ajouttexte($idpersonne, $texte, $bdd, $niveau_visibilite = 2, $type="texte", $path = "", $annee_fin = 0, $mois_fin = 0, $jour_fin = 0, $url_page="", $titre_page = "", $description_page = "", $image_page = "")
{
$sql = 'INSERT INTO texte (ID_personne, date_envoi, texte, niveau_visibilite, type, path, annee_fin, mois_fin, jour_fin, url_page, titre_page, description_page, image_page) VALUES (?, NOW(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ';
//Exécution de la requete
$insertion = $bdd->prepare($sql);
$insertion->execute(array($idpersonne, corrige_echapement($texte), $niveau_visibilite, $type, $path, $annee_fin, $mois_fin, $jour_fin, $url_page, $titre_page, $description_page, $image_page));
//Et la notification (uniquement si nécessaire => Si le post n'a pas un niveau égal à 3)
if(!visibilite_privee($niveau_visibilite))
sendnotification($_SESSION['ID'], "a ajout&eacute; un texte sur sa page.", $bdd, "page:".$_SESSION['ID']);
else
sendnotification($_SESSION['ID'], "a ajout&eacute; un texte sur sa page.", $bdd, "page:".$_SESSION['ID'], "", "texte", list_personnes_groupes($niveau_visibilite, $bdd));
}
//Fonction d'ajout de texte sur la page d'un amis
//Paramètres de la fonction
//$idpersonne : la personne qui ENVOI le texte
//$idamis la personne à qui est DESTINE le texte
//-----------------------------------------
//DB SQL
//ID_personne : la personne à qui est DESTINE le texte
//ID_amis : la personne qui ENVOI le texte
function ajouttexte_amis($idpersonne, $idamis, $texte, $bdd, $niveau_visibilite = 2, $type = "texte", $path = "", $annee_fin = 0, $mois_fin = 0, $jour_fin = 0, $url_page="", $titre_page = "", $description_page = "", $image_page = "")
{
$sql = 'INSERT INTO texte (ID_personne, ID_amis, date_envoi, texte, niveau_visibilite, type, path, annee_fin, mois_fin, jour_fin, url_page, titre_page, description_page, image_page) VALUES (?, ?, NOW(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ';
//Exécution de la requete
$insertion = $bdd->prepare($sql);
$insertion->execute(array($idamis, $idpersonne, corrige_echapement($texte), $niveau_visibilite, $type, $path, $annee_fin, $mois_fin, $jour_fin, $url_page, $titre_page, $description_page, $image_page));
//La notification UNIQUEMENT SI LE POST EST OUVERT AUX AMIS
if(!visibilite_privee($niveau_visibilite))
{
//And the notification
$infopersonne = cherchenomprenom($idamis, $bdd);
sendnotification($_SESSION['ID'], "a ajout&eacute; un texte sur la page de ".$infopersonne['prenom'].' '.$infopersonne['nom'].".", $bdd, "page:".$infopersonne['ID'], $idamis);
}
else
{
//And the notification
$infopersonne = cherchenomprenom($idamis, $bdd);
sendnotification($_SESSION['ID'], "a ajout&eacute; un texte sur la page de ".$infopersonne['prenom'].' '.$infopersonne['nom'].".", $bdd, "page:".$infopersonne['ID'], $idamis, "texte", list_personnes_groupes($niveau_visibilite, $bdd));
}
//Inclusion de la configuration
include('inc/config/config.php');
$info_destinataire = cherchenomprenom($idamis, $bdd);
//Vérification de l'autorisation d'envoi de mails
if($active_envoi_mail == "oui" && $info_destinataire['autorise_mail'] == 1)
{
//Envoi d'un message au demandé
$info_amis = cherchenomprenom($idpersonne, $bdd);
$send_mail = true;
$sujet = "Nouveau texte sur votre page";
$description_rapide = "Un de vos amis a post&eacute; un texte sur votre page.";
$nom_destinataire = $info_destinataire['prenom']." ".$info_destinataire['nom'];
$adresse_mail_destinataire = $info_amis['mail'];
$texte_message = "
<h3 class='titre'>Nouveau texte sur votre page</h3>
<p>Un de vos amis a post&eacute; un texte sur votre page.</p>
<p>Voici le texte:</p>
<table align='center'>
<tr><td>
".avatar($idamis, $urlsite)."</td><td>
<a href='".$urlsite."?id=".$idpersonne."'>".$info_amis['prenom']."</a><br />
".$info_amis['nom']."
</td></tr>
<tr><td colspan='2'>
".$texte."
</td></tr>
</table>
<p><a href='".$urlsite."'>Connectez-vous</a> pour acc&eacute;der &agrave; toute les notifications de Comunic.</a></p>
";
//Envoi du message
include('inc/envoi_mail.php');
}
}
//Fonction de demande en amis
//Fonction nécessaire : liste_amis
function demandeamis($idpersonne, $iddemandeur, $bdd)
{
//On vérifie si une demande n'a pas déjà été postée
$liste_verification = liste_amis($idpersonne, $bdd, 0);
//On vérifie
foreach($liste_verification as $verifier)
{
if($verifier == $iddemandeur)
{
//On affiche un message d'erreur
echo "<script>alert('La personne a déja été demandée en amis.');</script>";
//On bloque le tout
$bloque = 1;
}
}
//On vérifie si un bloquage a été effectué
if(!isset($bloque))
{
//On poste la demande
$sql = "INSERT INTO amis (ID_personne, ID_amis) VALUES (?, ?)";
//Exécution de la requete
$insertionamis = $bdd->prepare($sql);
$insertionamis->execute(array($idpersonne, $iddemandeur));
//Inclusion de la configuration
include('inc/config/config.php');
//Vérification de l'autorisation d'envoi de mails
$info_destinataire_demande = cherchenomprenom($idpersonne, $bdd);
if($active_envoi_mail == "oui" && $info_destinataire_demande['autorise_mail'] == 1)
{
//Envoi d'un message au demandé
$info_demandeur = cherchenomprenom($iddemandeur, $bdd);
$send_mail = true;
$sujet = "Demande d'amis de ".$info_demandeur['prenom']." ".$info_demandeur['nom'];
$description_rapide = "Vous avez une nouvelle demande d'amis sur Comunic";
$nom_destinataire = $info_destinataire_demande['prenom']." ".$info_destinataire_demande['nom'];
$adresse_mail_destinataire = $info_destinataire_demande['mail'];
$texte_message = "
<h3 class='titre'>Nouvelle demande d'amis</h3>
<p>Une nouvelle demande d'amis a &eacute;t&eacute; post&eacute;e sur votre compte.</p>
<p>Voici la personne qui vous a demand&eacute; en amis:</p>
<a href='".$urlsite."?id=".$iddemandeur."'>
<table align='center'>
<tr><td>
".avatar($iddemandeur, $urlsite)."
</td><td>
".$info_demandeur['prenom']."<br />
".$info_demandeur['nom']."<br />
</td>
</tr>
</table></a>
<p><a href='".$urlsite."'>Connectez-vous</a> pour acc&eacute;der &agrave; toute les notifications de Comunic.</a></p>
";
//Envoi du message
include('inc/envoi_mail.php');
}
}
}
//Fonction permettant de vérifier si une demande à devenir ami a déjà été faite
function isset_demande_amis($idpersonne, $iddemandeur, $bdd)
{
//On vérifie si une demande n'a pas déjà été postée
$liste_verification = liste_amis($idpersonne, $bdd, 0);
//On vérifie
foreach($liste_verification as $verifier)
{
if($verifier == $iddemandeur)
{
return true;
}
}
return false;
}
//Fonction de recherche de tous les textes
function affichertextes($id, $bdd, $lignedepart = 0, $limit = 10, $niveau_visibilite = 2, $tous_texte_personne = false, $post_precis = false, $liste_groupes = array(), $type = "all")
{
//Complément de source pour les groupes
$complement_source_groupes = "";
foreach($liste_groupes as $ajouter)
{
$complement_source_groupes .= " OR (niveau_visibilite LIKE '%|".$ajouter."')";
$complement_source_groupes .= " OR (niveau_visibilite LIKE '%|".$ajouter."|%')";
}
//Complément de source pour les types de post
$complement_source_type = "";
if($type != "all")
$complement_source_type = "AND type = '".$type."' ";
//Recherche des textes de la personne (en fonction de de tous ou non)
if(isset($_SESSION['ID']))
{
if($post_precis != false)
{
$sql = "SELECT * FROM texte WHERE (ID_personne = ".$id.") ".$complement_source_type." AND (((niveau_visibilite <= ?) OR (niveau_visibilite LIKE ?)) ".$complement_source_groupes.") AND ID = ".$post_precis*1;
}
elseif(!$tous_texte_personne)
$sql = "SELECT * FROM texte WHERE (ID_personne = ".$id.") ".$complement_source_type." AND ((((niveau_visibilite <= ?) OR (niveau_visibilite LIKE ?)) ".$complement_source_groupes.") OR ID_amis = ".(isset($_SESSION['ID']) ? $_SESSION['ID'] : "'null'").") ORDER BY ID DESC LIMIT ".$lignedepart.", ".$limit;
else
$sql = "SELECT * FROM texte WHERE (ID_personne = ".$id.") ".$complement_source_type." AND (((niveau_visibilite <= ?) OR (niveau_visibilite LIKE ?) ".$complement_source_groupes.") OR ID_amis = ".(isset($_SESSION['ID']) ? $_SESSION['ID'] : "'null'").") ORDER BY ID DESC LIMIT ".$lignedepart.", ".$limit;
}
else
{
if($post_precis != false)
{
$sql = "SELECT * FROM texte WHERE ID_personne = ".$id." ".$complement_source_type." AND niveau_visibilite = 1 AND ID = ".$post_precis*1;
}
elseif(!$tous_texte_personne)
$sql = "SELECT * FROM texte WHERE ID_personne = ".$id." ".$complement_source_type." AND niveau_visibilite = 1 ORDER BY ID DESC LIMIT ".$lignedepart.", ".$limit;
else
$sql = "SELECT * FROM texte WHERE ID_personne = ".$id." ".$complement_source_type." AND niveau_visibilite = 1 ORDER BY ID DESC LIMIT ".$lignedepart.", ".$limit;
}
//Exécution de la requete
$textes = $bdd->prepare($sql);
$textes->execute(array($niveau_visibilite, $niveau_visibilite."%"));
//Affichage des résultats
$retour = array();
while($afficherresultats = $textes->fetch())
{
$retour[] = $afficherresultats;
}
//On renvoi les résultats
return $retour;
//Fermeture de la requete
$textes->closeCursor();
}
//Fonction qui permet d'aimer ou de ne plus aimer
function aimeaimeplus($actionid, $idtextelike, $idpersonne, $bdd, $type = "texte")
{
//Recherche de la cause d'appel de cette fonction
$sql = "SELECT * FROM aime WHERE (ID_type = ?) && (ID_personne = ?) && (type = ?)";
$requete = $bdd->prepare($sql);
$requete->execute(array($idtextelike, $idpersonne, $type));
$tour = "0";
while($executionrequete = $requete->fetch())
{
$tour = "1";
}
if($actionid == 2)
{
$action = "Je n'aime plus";
}
else
{
$action = "J'aime";
}
//Fermeture de la requete de recherche
$requete->closeCursor();
//Si la requete est d'aimer, ajouter une entrée dans la table aimer
if($action == "J'aime")
{
//On vérifie avant si la personne n'aime pas déjà
if($tour != 0)
{
//On affiche un message d'erreur: la personne aime déjà le texte
echo '<script type="text/javascript">alert("Vous aimez déjà ce contenu! Il n\'est pas autorisé d\'aimer plusieurs fois un contenu.");</script>';
}
else
{
//Requete d'insertion
$sql = "INSERT INTO aime (ID_type, ID_personne, Date_envoi, type) VALUES (?, ?, NOW(), ?)";
$insertion = $bdd->prepare($sql);
$insertion->execute(array($idtextelike, $idpersonne, $type));
}
}
//Si la requete est de ne plus aimer, supprimer l'entrée de la table
if ($action == "Je n'aime plus")
{
$sql = "DELETE FROM aime WHERE (ID_type = ?) && (ID_personne = ?) && (type = ?)";
$suppression = $bdd->prepare($sql);
$suppression->execute(array($idtextelike, $idpersonne, $type));
}
}
//Fonction de requete de recherche des aime
function requeteaime($idtexte, $bdd, $type = "texte")
{
//On compte ensuite les j'aime pour le texte
$sqlaime = ("SELECT * FROM aime WHERE ID_type = ? && type= ?");
$requeteaime = $bdd->prepare($sqlaime);
$requeteaime->execute(array($idtexte, $type));
$retour['personnesaiment'] = 0;
$retour['vousaimez'] = 0;
if(isset($_SESSION['ID']))
{
$idpourlescom = $_SESSION['ID'];
}
else
{
$idpourlescom = 'x';
}
while($afficheraime = $requeteaime->fetch())
{
if($afficheraime['ID_personne'] != $idpourlescom)
{
$retour['personnesaiment']++;
}
else
{
$retour['vousaimez'] = 1;
$retour['personnesaiment']++;
}
}
//On renvoi le résultat
return $retour;
//Fermeture de la requete
$requeteaime->closeCursor();
}
//Fonction permettant de supprimer tous les "aimes" d'un type pour un id
function delete_aimes_type_id($idcontent, $type, $bdd)
{
//Exécution de la requête
$sql = "DELETE FROM aime WHERE (ID_type = ?) && (type = ?)";
$requete = $bdd->prepare($sql);
$requete->execute(array($idcontent, $type));
}
//Fonction d'affichage du bouton j'aime pour un commentaire
function bouton_aime_commentaire($idcommentaire, $idtexte, $bdd)
{
//Recherche du nombre de j'aime
$nombre_aime = requeteaime($idcommentaire, $bdd, "commentaire");
//Développement uniquement
//print_r($nombre_aime);
echo "&nbsp;&nbsp;<img src='".path_img_asset()."aime";
echo ($nombre_aime['vousaimez'] != 0 ? "" : "_vide");
echo ".png'";
// Uniquement si l'utilisateur est connecté
if(isset($_SESSION['ID']))
{
echo " onClick='like_comment(".$idcommentaire.", ".$idtexte.",".$nombre_aime['vousaimez'].");'";
}
echo " id='like_comment_".$idcommentaire."' />&nbsp;";
echo $nombre_aime["personnesaiment"];
}
//Fonction de suppression de commentaires
function suppcom($id, $bdd)
{
//On récupère les informations dans la base de données
$infos_commentaire = select_sql("commentaires", "ID = ?", $bdd, array($id));
//On supprime les mentions "j'aime" du commentaire
delete_aimes_type_id($id, "commentaire", $bdd);
//On vérifie si une image est associée au commentaire
if(preg_match("<file:>", $infos_commentaire[0]['image_commentaire']))
{
$fichier = relativeUserDataFolder(str_replace('file:', '', $infos_commentaire[0]['image_commentaire']));
//Suppression du fichier
if(!preg_match('<.php>', $fichier))
unlink($fichier);
else
die("Major error found ! Deletion stopped !");
echo "One image deleted.";
}
//Exécution de la suppression
$sql = "DELETE FROM commentaires WHERE ID = ".$infos_commentaire[0]['ID'];
//Exécution de la requete
$suppcommentaire = $bdd->query($sql);
//On redirige vers la meme page pour éviter les collisions
$retour = "Suppression terminée, redirection en cours....<br />";
$retour .= '<meta http-equiv="refresh" content="0">';
//On renvoie le résultat
return $retour;
}
//Fonction d'affichage des commentaires
function affichecommentaire($idtexte, $bdd)
{
//Affichage des commentaires
$sql = 'SELECT * FROM commentaires WHERE ID_texte = '.$idtexte.' ORDER BY ID';
//Exécution de la requete
$commentaires = $bdd->query($sql);
//Enregistrement des commentaires dans une variable
$retour = array();
while($affichercommentaires = $commentaires->fetch())
{
//On corrige la longueur des mots des commentaires
$affichercommentaires['commentaire'] = corrige_longueur_mots_commentaires($affichercommentaires['commentaire']);
$retour[] = $affichercommentaires;
}
//On renvoi le résultat
return $retour;
//On ferme la requete
$commentaires->closeCursor();
}
//Fonction de suppression de texte
function deletetexte($idtexte, $texte, $bdd, $other_info = array())
{
//!!! OBSOLETE -> DANGER SYSTEME !!! On vérifie si il ne s'agit pas d'une image (ancienne -> ancien système)
/*$chaine = '/imgcomunicpostbyuser/';
if(preg_match($chaine, $texte))
{
//On récupère le nom de l'image pour la supprimer...
$nomimg = str_replace('imgcomunicpostbyuser', '', $texte);
$nomimg = strstr($nomimg, 'endof', true);
//On supprime l'image
unlink('imgpost/'.$nomimg.'.jpg');
}*/
//On vérifie si il ne s'agit d'une image (plus récente -> nouveau système)
//On vérifie si les informations ont été données
if(count($other_info) != 0)
{
//On vérifie si il s'agit d'une image
if($other_info['type'] == "image" || $other_info['type'] == "pdf")
{
//Dans ce cas on supprime l'image
unlink(relativeUserDataFolder($other_info['path']));
}
}
//On supprime les aimes des commentaires
$commentaires = affichecommentaire($idtexte, $bdd);
//Suppression des aimes des commentaires
foreach($commentaires as $info_commentaire)
{
//On supprime les 'aimes' du commentaire
delete_aimes_type_id($info_commentaire['ID'], "commentaire", $bdd);
}
//On supprime le texte et les commentaires associés
$sql1 = "DELETE FROM texte WHERE ID = ".$idtexte;
$sql2 = "DELETE FROM commentaires WHERE ID_texte = ".$idtexte;
$sql3 = "DELETE FROM aime WHERE ID_type = ".$idtexte." AND type = 'texte'";
//Exécution de la requete
$supptxt1 = $bdd->query($sql1);
$supptxt2 = $bdd->query($sql2);
$supptxt3 = $bdd->query($sql3);
}
//Fonction d'ajout de commentaire
function ajoutcommentaire($idpersonne, $idtexte, $commentaire, $bdd)
{
//Préparation du contrôle de la présence d'une image
$image = "";
if(isset($_FILES['image']))
{
if($_FILES['image']['error'] == 0)
{
ob_start();
if($infos_image = getimagesize($_FILES['image']['tmp_name']))
{
ob_end_clean();
if(is_array($infos_image))
{
//Exemple de réponse
/* Array (
[0] => 1280
[1] => 1024
[2] => 3
[3] =>
width="1280"
height="1024"
[bits] => 8
[mime] => image/png
) */
//On ne continue que si le type d'image est correcte
if(in_array($infos_image['mime'], array('image/png', 'image/gif', 'image/jpeg')))
{
//On récupère les dimensions de l'image
$width = $infos_image[0];
$height = $infos_image[1];
//On diminue les dimensions de l'image tant qu'elles sont supérieures à la limite
while($width > 350 OR $height > 550)
{
$width = $width*0.9;
$height = $height*0.9;
}
//On simplifie les valeurs trouvées
$width = floor($width);
$height = floor($height);
//On redimensionne l'image
// Fichier et nouvelle taille
$filename = $_FILES['image']['tmp_name'];
// Création de la nouvelle image
$thumb = imagecreatetruecolor($width, $height);
if($infos_image['mime']=='image/jpeg')
{
// Création des instances d'image (jpeg)
$source = imagecreatefromjpeg($filename);
}
elseif($infos_image['mime']=='image/png')
{
// Création des instances d'image (png)
$source = imagecreatefrompng($filename);
}
elseif($infos_image['mime']=='image/gif')
{
// Création des instances d'image (gif)
$source = imagecreatefromgif($filename);
}
else
{
die("<p>Type d'image incompatible avec ce service.</p>");
}
// Redimensionnement
imagecopyresized($thumb, $source, 0, 0, 0, 0, $width, $height, $infos_image[0], $infos_image[1]);
//Détermination du nom de l'image
$nom_img_commentaire = sha1(time().$_SESSION['ID'].sha1($commentaire).$_SERVER['REMOTE_ADDR']);
//Checking user's folder path
checkPersonnalFolder(relativeUserDataFolder("imgcommentaire/"), $_SESSION['ID']);
//Check if an image with the same name already exists
while(file_exists(relativeUserDataFolder("imgcommentaire/".$_SESSION['ID']."/".$nom_img_commentaire.".png")))
$nom_img_commentaire = crypt($nom_img_commentaire);
$nom_img_commentaire = "imgcommentaire/".$_SESSION['ID']."/".$nom_img_commentaire.".png";
//Ecriture du fichier
imagepng($thumb, relativeUserDataFolder($nom_img_commentaire));
//On indique où se trouve dans le fichier dans la bdd
$image = "file:".$nom_img_commentaire;
}
}
}
else
ob_end_clean();
}
}
//Contrôle de la validité du commentaire (nécessite verifie_validite_ajout)
if(verifie_validite_ajout($commentaire, true) || $image != "")
{
//Insertion du commentaire
$sql = "INSERT INTO commentaires (ID_personne, ID_texte, date_envoi, commentaire, image_commentaire) VALUES (".$idpersonne.", ".$idtexte.", NOW(), ?, ?)";
$insertion = $bdd->prepare($sql);
$insertion->execute(array(corrige_echapement($commentaire), $image));
}
else
{
//Message d'erreur
echo "<script>alert('Commentaire invalide !');</script>";
}
}
//Fonction de recherche des informations d'une personne
function cherchenomprenom($ID, $bdd = false, $type = 'ID', $messageerreur = "<p>Erreur! Le profil demand&eacute; n'existe pas.</p>")
{
//On vérifie si il s'agit ou non du fil d'actualité
if($ID != "fil" && $bdd)
{
//Recherche du nom de la personne
$sql = "SELECT * FROM utilisateurs WHERE ".$type." = ?";
$nompersonne = $bdd->prepare($sql);
$nompersonne->execute(array($ID));
//Affichage du nom de la personne
ob_start();
if(!$infos_user = $nompersonne->fetch())
{
ob_end_clean();
echo $messageerreur;
die();
}
ob_end_clean();
//Fermeture de la requete
$nompersonne->closeCursor();
}
elseif($ID == "fil")
{
//Informations factices
/* Echantillon d'exemple ---
[ID] => 1
[nom] => Hubert
[prenom] => Pierre
[date_creation] => 2013-11-10 09:17:56
[mail] => pierrot42100@yahoo.fr
[password] => dsqfqdfqsgq5
[affiche_chat] => 0
[public] => 1
[pageouverte] => 1,
[bloquecommentaire]
--- */
$infos_user = array(
"ID" => "fil",
"nom" => "d'actualite",
"prenom" => "Fil",
"date_creation" => "0000-00-00 00:00:00",
"mail" => "no-reply@communiquons.org",
"password" => "",
"public" => 1,
"site_web" => "",
"page_verifiee" => 0,
"autoriser_post_amis" => 1,
"liste_amis_publique" => 0,
"bloquecommentaire" => 0
);
}
else
{
?><p>Informations manquantes pour acc&eacute;der &agrave; la base de donn&eacute;es. Ce n'est pas de votre faute, cependant cette erreur implique l'arr&ecirc;t du chargement de la page.
Essayez d'actualiser la page pour essayer de corriger le probl&egrave;m.</p><?php
die();
}
//Détermination du nom complet de la personne
$infos_user['nom_complet'] = $infos_user['prenom']." ".$infos_user['nom'];
return $infos_user;
}
//Fonction permettant de vérifier si une page est publique ou non
function detectepagepublique($idpersonne, $bdd)
{
//On vérifie si la page est publique
$sql = 'SELECT * FROM utilisateurs WHERE ID = ?';
$requeteverification = $bdd->prepare($sql);
$requeteverification->execute(array($idpersonne));
//On prépare les variables pour l'étapge suivante
$autorisationspeciale = 0;
//On vérifie maintenant
if($verifier = $requeteverification->fetch())
{
if(($verifier['public'] == 1) && ($verifier['pageouverte'] == 1))
{
//On donne alors une autorisation spéciale
$autorisationspeciale = 1;
}
//Fermeture de la requete
$requeteverification->closeCursor();
}
//On renvoi le résultat suivant si la page est publique ou non
if($autorisationspeciale == 1)
{
return true;
}
else
{
return false;
}
}
//Fonction qui permet de vérifier si une personne est un ami ou non
function detectesilapersonneestamie($personneconnecte, $secondepersonne, $bdd)
{
//On vérifie si c'est un amis
$sql = "SELECT * FROM amis WHERE (ID_personne = ?) && (ID_amis = ?) && (actif = 1)";
//Exécution de la requete
$requeteamis = $bdd->prepare($sql);
$requeteamis->execute(array($personneconnecte, $secondepersonne));
//On renvoi le résultat suivant si la personne est amie ou non
if(!$verifieramis = $requeteamis->fetch())
{
return false;
}
else
{
return true;
}
//Fermeture de la requete
$requeteamis->closeCursor();
}
/**
* Fonction d'envoi d'image en ligne (nouvelle version)
*
* @param Int $idpersonne The ID of sender
* @param String $nomimage Image description
* @param Object $bdd BDD object
* @param Int $idamis Optionnal - Specify the ID of a friend if it is one whom send image
* @param Int $niveau_visibilite Optional - Specify if specific visibility level has been defined
* @return Boolean True or false depending of the success of the operation
*/
function envoiimage($idpersonne, $nomimage, $bdd, $idamis = 0, $niveau_visibilite = 2)
{
//On vérifie si il y a eu une erreur
if($_FILES['image']['error'] == 0)
{
//On vérifie si un dossier a été allouée à la personne, création automatique le cas échéant
$folder_user = checkPersonnalFolder(relativeUserDataFolder("imgpost/"), $_SESSION['ID']);
$folder_user = str_replace(relativeUserDataFolder(), "", $folder_user);
//On recherche le nom de l'image
$imagePath = $folder_user.(isset($_SERVER['UNIQUE_ID']) ? $_SERVER['UNIQUE_ID'] : sha1($_SERVER['HTTP_USER_AGENT']))
.$_SESSION['ID'].$_SERVER['REQUEST_TIME'].".jpg"; //Nom introuvable
// On peut valider l'image de fond et la stocker définitivement
if(move_uploaded_file($_FILES['image']['tmp_name'], relativeUserDataFolder($imagePath)))
{
//Préparation de la requete
$contenu = $nomimage;
//On enregistre l'image dans la base
$sql = 'INSERT INTO texte (ID_personne, date_envoi, texte, ID_amis, niveau_visibilite, type, size, file_type, path) VALUES ('.$idpersonne.', NOW(), ?, ?, ?, ?, ?, ?, ?) ';
//Exécution de la requete
$insertion = $bdd->prepare($sql);
$insertion->execute(array($contenu, $idamis, $niveau_visibilite, "image", $_FILES['image']['size'], $_FILES['image']['type'], $imagePath));
return true;
}
else
echo "<p>Une erreur a survenue durant l'envoi de l'image, veuillez r&eacute;essayer...</p>";
}
else
{
echo "<p>Une erreur a survenue durant l'envoi de l'image.</p>";
}
}
//Fonction de vérification de l'existence d'une demande de nouveaux amis
function issetdemandesamis($idpersonne, $bdd)
{
//On vérifie si il y a des demandes d'amis non acceptés
$sql = "SELECT * FROM amis WHERE (ID_personne = ".$idpersonne.") && (actif = 0)";
//Exécution de la requete
$verificationnouveauxamis = $bdd->query($sql);
//Calcul du résultat
if($test = $verificationnouveauxamis->fetch())
{
return true;
}
else
{
return false;
}
//Fermeture de la requete
$verificationnouveauxamis->closeCursor();
}
//Fonction de correction des caractères spéciaux
function corrige_caracteres_speciaux($source)
{
//On corrige les caractères spéciaux
$source = str_replace("è", "&egrave;", $source);
$source = str_replace("é", "&eacute;", $source);
$source = str_replace("ê", "&ecirc;", $source);
$source = str_replace("ë", "&euml;", $source);
$source = str_replace("î", "&icirc;", $source);
$source = str_replace("à", "&agrave;", $source);
$source = str_replace('ç', '&ccedil;', $source);
$source = str_replace('ù', '&ugrave;', $source);
$source = str_replace('â', '&acirc;', $source);
$source = str_replace('ô', '&ocirc;', $source);
$source = str_replace('û', '&ucirc;', $source);
$source = str_replace('', '&rsquo;', $source);
//On renvoi le résultat
return $source;
}
//Fonction de décorrection des caractères spéciaux
function decorrige_caracteres_speciaux($source)
{
//On corrige les caractères spéciaux
$source = str_replace("&egrave;", "è",$source);
$source = str_replace("&eacute;", "e", $source);
$source = str_replace("&ecirc;", "ê", $source);
$source = str_replace("&euml;", "ë", $source);
$source = str_replace("&icirc;", "î", $source);
$source = str_replace("&agrave;", "à", $source);
$source = str_replace('&ccedil;', 'ç', $source);
$source = str_replace('&ugrave;', 'ù', $source);
$source = str_replace('&acirc;', 'â', $source);
$source = str_replace('&ocirc;', 'ô', $source);
$source = str_replace('&ucirc;', 'û', $source);
$source = str_replace('&rsquo;', '', $source);
//On renvoi le résultat
return $source;
}
//Fonction d'enregistrement de post de chat
function postchat($idpersonne, $message, $bdd)
{
//On enregistre le chat
$query = $bdd->prepare("INSERT INTO chat(message, ID_personne, Date_envoi) VALUES(?, ?, NOW())");
$query->execute(array($message, $idpersonne));
}
//Fonction de récupération du contenu du chat
function recuperecontenuchat($bdd, $nbpost = 10)
{
$sql = "SELECT * FROM chat ORDER BY ID DESC LIMIT 0,".$nbpost;
$requetechat = $bdd->query($sql);
//Enregistrement des résultats
$retour = array();
while($afficherchat = $requetechat->fetch())
{
$retour[] = $afficherchat;
}
//Renvoi du résultat
return $retour;
}
//Fonction permettant de vérifier si le chat doit être automatiquement ouvert
function verifierouvertureautomatiquechat($idpersonne, $bdd)
{
//On vérifie si le chat doit être automatiquement ouvert
$sql = "SELECT * FROM utilisateurs WHERE ID = ".$idpersonne;
//Exécution de la requete
$verifierchat = $bdd->query($sql);
//On vérifie et on affiche la source javascript en fonction des parametres
$verfier = $verifierchat->fetch();
if($verfier['affiche_chat'] == 1)
{
return true;
}
else
{
return false;
}
//Fermeture de la requete
$verifierchat->closeCursor();
}
//Fonction permettant de connecter l'utilisateur
function connnecteruser($mail, $motdepasse, $bdd, $cryptage_necessaire = true, $active_login = true, $return_infos_user = false)
{
if($cryptage_necessaire)
{
//Hachage du mot de passe
$motdepasse = sha1($motdepasse);
$motdepasse = crypt($motdepasse, $motdepasse);
}
//Préparation de la requete
$sql = "SELECT * FROM utilisateurs WHERE (mail = ?) && (password = ?) ";
//Execution de la requete
$requete = $bdd->prepare($sql);
$requete->execute(array($mail, $motdepasse));
if($traiter = $requete->fetch())
{
//On connecte alors l'utilisateur
if($active_login)
//Ouverture de la session
$_SESSION['ID'] = $traiter['ID'];
//On vérifie si il faut retourner les informations de l'utilisateur
if(!$return_infos_user)
return true;
else
return $traiter;
}
else
{
return false;
}
//Fermeture de la requete
$requete->closeCursor();
}
//Fonction permettant de voir si l'utilisateur est connecté
function verifieconnnexionutilisateur()
{
//On cache les erreurs
ob_start();
//session_start();
ob_end_clean();
//Si l'utilisateur est connecté, on renvoi true sinon on renvoi false
if(isset($_SESSION['ID']))
{
return true;
}
else
{
return false;
}
}
//Fonction qui adapte les textes pour afficher les images
function adaptetexteimage($texte, $basesite = './')
{
$texte = str_replace('endofimgcomunicpostbyuser', '.jpg" />', $texte);
$texte = str_replace('imgcomunicpostbyuser', '<img width="100" height="100" src="'.$basesite.'/user_data/imgpost/', $texte);
$texte = str_replace('endofnameofimg', '</center>', $texte);
$texte = str_replace('nameofimg', '<center>', $texte);
//On retourne le réslutat
return $texte;
}
//Fonction de recherche de personnes
function searchuser($nom, $bdd, $limite = 10)
{
//Mettons "" à la place de "%"
$nom = str_replace("%", "", $nom);
//Continuons de protéger les personnes et la table
$nom = str_replace("'", '"', $nom);
//Rendons flexible la requete
$nom = str_replace(' ', '%', $nom);
$nom = "%".$nom."%";
//Nous pouvons maintenant faire la recherche
//Requête SQL
$sql = "SELECT * FROM utilisateurs WHERE (nom LIKE ?) || (prenom LIKE ?) || (CONCAT(prenom, '%', nom) LIKE ? ) || (CONCAT(prenom, ' ', nom) LIKE ? ) || (mail LIKE ?) ORDER BY prenom LIMIT ".$limite;
//Exécution de la requete SQL
$recherche = $bdd->prepare($sql);
$recherche->execute(array($nom, $nom, $nom, $nom, $nom));
//Enregistrement des résultats
$retour = array();
while($afficherrecherche = $recherche->fetch())
{
$retour[] = $afficherrecherche;
}
//Fermeture de la requete
$recherche->closeCursor();
//On retourne le résultat
return $retour;
}
//Fonction qui permet de rechercher les messages d'un utilisateur
function recherchermessageutilisateur($idpersonne, $bdd, $id = '?')
{
if($id == '?')
{
//On recherche les messages de l'utilisateur
//Et on les renvoies dans un tableau
$sql = 'SELECT * FROM messagerie WHERE ID_destinataire = '.$idpersonne;
$requete = $bdd->query($sql);
}
else
{
//Si on recherche un message précis, on adapte la requête
$sql = 'SELECT * FROM messagerie WHERE ID_destinataire = ? && ID = ?';
$requete = $bdd->prepare($sql);
$requete->execute(array($idpersonne, $id));
}
//On prépare l'enregistrement des résultats
$retour = array('lu'=>array(), 'nonlu'=>array());
//On enregistre les résultats
while($enregistrer = $requete->fetch())
{
if($enregistrer['lu'] == 0)
{
$retour['nonlu'][] = $enregistrer;
}
else
{
$retour['lu'][] = $enregistrer;
}
}
//On retourne les résultats
return $retour;
//On ferme la requete
$requete->closeCursor();
}
//Fonction de récupération de la liste des pages publiques
function get_page_publique($bdd){
//On récupère la liste de toute les pages publiques
$sql = "SELECT * FROM utilisateurs WHERE pageouverte = 1 ORDER BY prenom";
//Exécution de la requete
$requete = $bdd->query($sql);
//On enregistre les résultats
$liste = array();
while($enregistre = $requete->fetch())
{
$liste[] = $enregistre;
}
//On renvoi le résultat
return($liste);
//On ferme la requête
$requete->closeCursor();
}
//Fonction permettant l'affichage des smiley dans les textes:
function affiche_smile($source, $urlsite = "./", $liste_smiley = false)
{
//Inclusion de la liste (si nécessaire
if(!$liste_smiley)
include('inc/liste_smile.php');
//Traitement de la liste
foreach($liste_smiley as $afficher)
{
//On affiche les smiley
$source = str_ireplace($afficher[0], ' <img src="'.$urlsite.$afficher[1].'" title="'.$afficher[2].'" /> ', $source);
}
//On renvoi le résultat
return($source);
}
//Fonction de protection contre le code source
function bloquebalise($source, $type="tout")
{
//On protège la source
$source = str_replace('<', '&lt;', $source);
$source = str_replace('>', '&gt;', $source);
//Fonction sépciale réservée aux commentaires
if($type == "commentaire")
{
//Anulation de la correction pour <span class='corrige_longueur_mots'></span> par <span></span>
$source = str_replace("&lt;span class='corrige_longueur_mots'&gt;&lt;/span&gt;", "<span></span>", $source);
}
//On renvoi le résultat
return($source);
}
//Fonction qui définit et inclus le bon fichier de langue
function detecteinstallelangue()
{
/*if(isset($_COOKIE['langue']))
{
if(file_exists('lang/'.$_COOKIE['langue'].'.php'))
{
//Inclusion du fichier de langue
include('lang/'.$_COOKIE['langue'].'.php');
}
else
{
//Sinon on inclus la langue française
include('lang/fr.php');
}
}
else
{
//On détecte la langue
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
{
if(preg_match('/fr/', $_SERVER['HTTP_ACCEPT_LANGUAGE']))
{
//On définit le cookie pour la France
setcookie('langue', 'fr', time() + 365*24*3600);
//Et on charge la lague francaise
include('lang/fr.php');
}
else
{
//Langue par défaut: Anglais
setcookie('langue', 'en');
//Et on charge la langue anglaise
include('lang/en.php');
}
}
else
{
//Langue par défaut: Anglais
setcookie('langue', 'en');
//Et on charge la langue anglaise
include('lang/en.php');
}
}*/
include(websiteRelativePath('inc/lang/fr.php'));
//Renvoi des textes de la langue
return $lang;
}
//Fonction qui permet de choisir sa langue
function choisirlangue($langue = 'fr')
{
//On vérifie que la langue est correcte
if(str_replace('.', '', $langue) != $langue)
die("Erreur"); //Sécurité
//On définit la langue de l'utilisateur
setcookie('langue', $langue, time()+60*60*24*30);
}
//Fonction qui permet l'échappement des guillemets ' en HTML
function echap_guillemet_html($source)
{
//On échappe les guillemetes
$source = str_replace("'", "&prime;", $source);
//On renvoi le résultat
return($source);
}
//Fonction de bloquage du javascript et du CSS
function bloque_javascript_css($source)
{
//On bloque le javascript
$source = str_ireplace("<script", "<!--<script", $source);
$source = str_ireplace("/script>", "/script>-->", $source);
$source = str_ireplace("/ script>", "/script>-->", $source);
//On bloque le CSS
$source = str_ireplace("<style", "<!--<style", $source);
$source = str_ireplace("/style>", "/style>-->", $source);
$source = str_ireplace("/ style>", "/style>-->", $source);
//Blockage au sein des balises
$source = str_ireplace("onClick=", "unknow=", $source);
$source = str_ireplace("onLoad=", "unknow=", $source);
$source = str_ireplace("onBlur=", "unknow=", $source);
$source = str_ireplace("onMouseOver=", "unknow=", $source);
$source = str_ireplace("onMouseOut=", "unknow2=", $source);
//$source = str_ireplace("style=", "unknow=", $source);
//Adaption pour TinyMCE
$source = str_ireplace('unknow="this.src', 'onMouseOver="this.src', $source);
$source = str_ireplace('unknow2="this.src', 'onMouseOut="this.src', $source);
//On bloque les balises meta
$source = str_ireplace("<meta", "&lt;meta", $source);
//On renvoi le résultat
return($source);
}
//Fonction de protection de la création de compte
function trouve_caractere_tableau($tableau_a_verifier, $caractere = '<')
{
//On annonce que l'on a pour le moment il n'y a pas de problème de sécurité
$probleme_securite = false;
//On analyse les variables
foreach ($tableau_a_verifier as $tester)
{
if(preg_match('/'.$caractere.'/', $tester))
{
//On enregistre qu'il y a un problème de sécurités
$probleme_securite = true;
}
}
//On renvoi le résultat
return $probleme_securite;
}
//Fonction qui permet de lister l'ensemble des amis d'une personne
// $id: identifiant de la personne
//$bdd: Connexion à la base de donnée (PDO)
//$actif: indique si l'ami doit être actif ou non
function liste_amis($id, $bdd, $actif = 1)
{
//On prépare le tableau final
$listeamis = array();
//Requete de recherche d'amis
$sql = "SELECT * FROM amis WHERE ID_personne = ".$id." && actif = ".$actif;
//Exécution de la requete
$requeteamis = $bdd->query($sql);
//Enregistrement des résultats
while($enregistrer = $requeteamis->fetch())
{
//On enregistre l'amis
$listeamis[] = $enregistrer['ID_amis'];
}
//Fermeture de la base de données
$requeteamis->closeCursor();
//On renvoi le résultat
return $listeamis;
}
//Fonction d'adaptation des textes pour les images
function adapte_texte_image($source, $pathimage = "./")
{
$source = str_replace('endofimgcomunicpostbyuser', '.jpg" />', $source);
$source = str_replace('imgcomunicpostbyuser', '<img height="200" src="user_data/imgpost/', $source);
$source = str_replace('endofnameofimg', '</center>', $source);
$source = str_replace('nameofimg', '<center>', $source);
//On renvoi le résultat
return $source;
}
//Fonction de correction des échappements
function corrige_echapement($source)
{
//On corrige les échappements
$source = str_replace("\'", "'", $source);
$source = str_replace('\"', '"', $source);
//On renvoi le résultat
return($source);
}
//Private Chat
//This function should be used only for the private chat
//Info:
//Parametres :
//$id : ID of the connected personn
//$idother : ID of the other personn
//$bdd : Connexion PDO to the DB
//$nbposts (optional, default 10) : Number of posts
//This function need these functions :
//bloquebalise : The HTML isn't allowed in the private chat...
//affiche_smile: but the users can decide to show there emotions!
//Infos of get_content_private_chat ended
function get_content_private_chat ($id, $idother, $bdd, $nbposts = 10, $id_last_post = "*", $urlsite = "./")
{
//On vérifie si il s'agit d'un rafraîchissement ou non
if($id_last_post == "*")
{
//First, SQL
$sql = "SELECT * FROM chatprive WHERE (ID_personne = ? && ID_destination = ?) || (ID_personne = ? && ID_destination = ?) ORDER BY ID DESC LIMIT 0,".$nbposts;
//Send request
$get_content = $bdd->prepare($sql);
$get_content->execute(array($id, $idother, $idother, $id));
}
else
{
//First, SQL
$sql = "SELECT * FROM chatprive WHERE ((ID_personne = ? && ID_destination = ?) || (ID_personne = ? && ID_destination = ?)) AND ID > ? ORDER BY ID DESC ";
//Send request
$get_content = $bdd->prepare($sql);
$get_content->execute(array($id, $idother, $idother, $id, $id_last_post));
}
//Save results in $content_chat
$content_chat = array();
while($save = $get_content -> fetch())
{
//We stop HTML code
$save['contenu'] = affiche_smile(bloquebalise(wordwrap(str_replace(')', ') ', $save['contenu']), 30, " ", true)), $urlsite);
//We save the entry
$content_chat[] = $save;
}
//Send result
return $content_chat;
//Close request
$get_content->closeCursor();
}
//Save a post for the private chat
function save_private_chat_message($id, $idother, $bdd, $message = "A basic message")
{
$query = $bdd->prepare("INSERT INTO chatprive(ID_personne, ID_destination, date_envoi, contenu) VALUES(?, ?, NOW(), ?)");
$query->execute(array($id, $idother, $message));
}
//List all the personns which have already send chat to the connected personn
function list_all_person_private_chatted($id, $bdd)
{
//SQL -> create request
$sql = "SELECT * FROM chatprive WHERE (ID_destination = ?)";
//SQL -> send request
$request = $bdd->prepare($sql);
$request->execute(array($id));
//Saving results in $results
$results = array();
while($save = $request->fetch())
{
//Check if result isn't already saved
if(!isset($results[$save['ID_personne']]))
{
//Save result
$results[$save['ID_personne']] = "true";
}
}
//Send results
return $results;
//SQL -> close request
$request->closeCursor();
}
//We send a notification to all the friends of the user
function sendnotification($id, $message, $bdd, $adresse="", $idamis = "", $type = "", $list_friend = false)
{
//On vérifie si la liste est déjà fournie
if(!$list_friend)
//We search the friend of the personn
$list_friend = liste_amis($id, $bdd);
//We insert in notification the message
foreach($list_friend as $insert_friend)
{
//On vérifie déjà que les deux personnes sont amies
$ok = true;
if($idamis != "")
{
if(!detectesilapersonneestamie($idamis, $insert_friend, $bdd))
{
//On arrête l'envoi
$ok = false;
}
if($idamis == $insert_friend)
{
//On autorise l'envoi
$ok = true;
}
}
if($ok)
{
//On vérifie que la personne est abonnée aux notifications de l'utilisateur
if(personne_abonnee_notification_ami($insert_friend, $id, $bdd))
{
//On vérifie si une notification similaire existe déjà
$sql = "SELECT COUNT(*) AS nb_notifications FROM notification WHERE ID_personne = ? AND adresse = ? AND type = ? AND vu = 0";
$requete = $bdd->prepare($sql);
$requete->execute(array($insert_friend, $adresse, $type));
//Récupération des informations
if($infos = $requete->fetch())
{
if($infos['nb_notifications'] == 0)
{
//We INSERT now
$sql = "INSERT INTO notification (ID_personne, ID_createur, date_envoi, message, adresse, type) VALUES (?, ?, NOW(), ?, ?, ?)";
//Send request
$insert = $bdd->prepare($sql);
$insert->execute(array($insert_friend, $id, $message, $adresse, $type));
}
}
else
{
echo "<!-- Error -->";
}
//Fermeture de la requête
$requete->closeCursor();
}
}
}
}
//Similaire mais pour un seul utilisateur
function sendnotification_one_user($id, $iddestination, $message, $bdd, $adresse="")
{
//Prépartion de l'exécution de la fonction
$retour = false;
//On vérifie si une notification similaire existe déjà
$sql = "SELECT COUNT(*) AS nb_notifications FROM notification WHERE ID_personne = ? AND ID_createur = ? AND message = ? AND adresse = ? AND vu = 0";
$requete = $bdd->prepare($sql);
$requete->execute(array($iddestination, $id, $message, $adresse));
//Récupération des informations
if($infos = $requete->fetch())
{
if($infos['nb_notifications'] == 0)
{
//We INSERT now
$sql = "INSERT INTO notification (ID_personne, ID_createur, date_envoi, message, adresse) VALUES (?, ?, NOW(), ?, ?)";
//Send request
$insert = $bdd->prepare($sql);
$insert->execute(array($iddestination, $id, $message, $adresse));
//On confirme l'envoi
$retour = true;
}
}
//Fermeture de la requête
$requete->closeCursor();
//Renvoi du résultat
return $retour;
}
//We search the notifications of the actual user
function searchnotification($id, $bdd, $limit = 10, $lignedepart = 0, $vu="none", $order = "DESC", $update_vu = 0)
{
//SQL -> creating request
if($vu == "none")
$sql = "SELECT * FROM notification WHERE ID_personne = ? ORDER BY ID ".$order." LIMIT ".$lignedepart.", ".$limit;
else
$sql = "SELECT * FROM notification WHERE (ID_personne = ? AND vu = ".$vu.") ORDER BY ID ".$order." LIMIT ".$lignedepart.", ".$limit;
//SQL -> sending request
$request = $bdd->prepare($sql);
$request->execute(array($id));
//Saving results
$results = array();
while($save = $request->fetch())
{
//Save result
$results[] = $save;
if($update_vu == 1)
{
//On met la notification en vu
$sql = "UPDATE notification SET vu = 1 WHERE ID = ".$save['ID'];
//Exécution de la requête
$update = $bdd->query($sql);
}
}
//Sending results
return $results;
//SQL -> close request
$request -> closeCursor();
}
//Function for send message
function sendmessage($id_expediteur, $id_destinataire, $sujet, $message, $bdd)
{
//On enregistre le message
$sql = "INSERT INTO messagerie (ID_expediteur, ID_destinataire, objet, message, date_envoi) VALUEs (?, ?, ?, ?, NOW())";
//Exécution de la requête
$insertion = $bdd->prepare($sql);
if($insertion->execute(array($id_expediteur, $id_destinataire, $sujet, $message)))
{
return true;
}
else
{
return false;
}
}
//Fonction de recherche d'informations sur un sujet
function info_sujet($id, $bdd)
{
//Requete de recherche des informations sur le sujet
$sql = 'SELECT * FROM forum_sujet WHERE ID = ?';
//Exécution de la requete
$requete = $bdd->prepare($sql);
$requete->execute(array($id));
//Enregistrement des résultats
$info = $requete->fetch();
//Fermeture de la requete
$requete->closeCursor();
//On renvoi le résultat
return $info;
}
//Fonction de recherche d'informations sur les réponses d'un sujet
function info_reponses($id, $bdd)
{
//Requete de recherche des informations sur le sujet
$sql = 'SELECT * FROM forum_reponse WHERE ID_sujet = ?';
//Exécution de la requete
$requete = $bdd->prepare($sql);
$requete->execute(array($id));
//Enregistrement des résultats
$info = array();
while($enregistrer = $requete->fetch())
{
$info[] = $enregistrer;
}
//Fermeture de la requete
$requete->closeCursor();
//On renvoi le résultat
return $info;
}
//Défini un message en vu
function metslemessageenvu($idmessage, $bdd)
{
//On défini un message en tant que vu
$sql = "UPDATE messagerie SET lu = 1 WHERE ID = ".$idmessage;
//Exécution de la requête
$update = $bdd->query($sql);
}
//Suppression d'un message depuis son ID
function suppmessagefromid($id_personne, $id_message, $bdd)
{
//Requête de suppression d'un message
$sql = "DELETE FROM messagerie WHERE ID = ? AND ID_destinataire = ?";
//Exécution de la requête
$requete = $bdd->prepare($sql);
$requete->execute(array($id_message, $id_personne));
}
//Enregistrement de l'activité de l'utilisateur
function update_last_activity($id, $bdd, $time = "undefined")
{
//On enregistre time() si nécessaire
if($time == "undefined")
{
$time = time();
}
//On met à jour la dernière activité de l'utilisateur
$sql = "UPDATE utilisateurs SET last_activity = ? WHERE ID = ?";
//Exécution de la requête
$requete = $bdd->prepare($sql);
$requete->execute(array($time, $id));
}
//Fonction qui permet de retirer la corrections des caractères spéciaux
function retire_adapte_caracters_speciaux($source)
{
//On retire les adaptations
$source = str_replace("&egrave;", "e", $source);
$source = str_replace("&eacute;", "e", $source);
$source = str_replace("&ecirc;", "e", $source);
$source = str_replace("&euml;", "e", $source);
$source = str_replace("&icirc;", "i", $source);
$source = str_replace("&agrave;", "a", $source);
$source = str_replace('&ccedil;', 'c', $source);
$source = str_replace('&ugrave; ', 'u', $source);
$source = str_replace('&ocirc; ', 'o', $source);
$source = str_replace('&acirc; ', 'a', $source);
$source = str_replace('&ucirc; ', 'u', $source);
//On renvoi le réslutat
return($source);
}
//Fonction de correction des erreurs d'accents dûes aux scripts javascript
function corrige_accent_javascript($source)
{
//On corrige les erreures javascript
$source = str_replace("é", "é", $source);
$source = str_replace("è", "è", $source);
$source = str_replace("ê", "ê", $source);
$source = str_replace("à§", "ç", $source);
$source = str_replace("Ã", "à", $source);
$source = str_replace("ù", "ù", $source);
$source = str_replace("à´", "ô", $source);
$source = str_replace("’", "", $source);
$source = str_replace("à§", "ç", $source);
$source = str_replace("à®", "î", $source);
//$source = str_replace("à¢", "â", $source);
$source = str_replace("€", "€", $source);
//On renvoi le résultat
return($source);
}
//Fonction de retirement de correction des erreurs d'accents dûes aux scripts javascript
function decorrige_accent_javascript($source)
{
//On retire les corrections javascript
$source = str_replace("é", "é", $source);
$source = str_replace("è", "è", $source);
$source = str_replace("ê", "ê", $source);
$source = str_replace("ç", "à§", $source);
$source = str_replace("à", "Ã", $source);
$source = str_replace("ù", "ù", $source);
//$source = str_replace("ô", "à´", $source);
//$source = str_replace("î", "à®", $source);
//$source = str_replace("â", "à¢", $source);
$source = str_replace("€", "€", $source);
//On renvoi le résultat
return($source);
}
//Fonction déterminant si une notification existe
function notification_exists($id_createur, $id_destination, $message, $adresse, $bdd)
{
//Prépartion de l'exécution de la fonction
$retour = false;
//On vérifie si une notification similaire existe déjà
$sql = "SELECT COUNT(*) AS nb_notifications FROM notification WHERE ID_personne = ? AND ID_createur = ? AND message = ? AND adresse = ? AND vu = 0";
$requete = $bdd->prepare($sql);
$requete->execute(array($id_destination, $id_createur, $message, $adresse));
//Récupération des informations
if($infos = $requete->fetch())
{
if($infos['nb_notifications'] == 0)
//Il n'y en a pas
$retour = false;
else
//Il y en a
$retour = true;
}
else
//On considère qu'il n'y en a pas
$retour = false;
//Fermeture de la requête
$requete->closeCursor();
//Renvoi du résultat
return $retour;
}
//Fonction mettant en 'vu' le chat d'une personne
function mettre_en_vu_private_chat($id, $id_emetteur, $bdd)
{
//Mise à jour de la base de données
$sql = "UPDATE chatprive SET vu = 1 WHERE ID_destination = ? AND ID_personne = ?";
//Exécution de la requête
$requete = $bdd->prepare($sql);
$requete->execute(array($id, $id_emetteur));
//On supprime les notifications relatives au chat privé pour cette personne
$sql = "DELETE FROM notification WHERE ID_personne = ? AND ID_createur = ? AND message = ?";
$suppression = $bdd->prepare($sql);
$suppression->execute(array($_SESSION['ID'], $id_emetteur, "vous a envoy&eacute; un message dans le chat priv&eacute;."));
}
//Fonction permettant de vérifier si un post de chat privé d'une personne n'a pas été vu
function verifier_si_post_chat_prive_non_vu($id, $id_emetteur, $bdd)
{
//First, SQL
$sql = "SELECT * FROM chatprive WHERE ID_personne = ? && ID_destination = ? && vu = 0 LIMIT 0, 1";
//Send request
$get_content = $bdd->prepare($sql);
$get_content->execute(array($id_emetteur, $id));
if($afficher = $get_content->fetch())
{
return true;
}
else
{
return false;
}
//Fermeture de la requête
$get_content->closeCursor();
}
//Fonction de vérification de l'existence de nouveaux messages pour l'utilisateur
function verifier_nouveaux_messages_utilisateur($id, $bdd)
{
//First, SQL
$sql = "SELECT * FROM messagerie WHERE ID_destinataire = ? && lu = 0 LIMIT 0, 1";
//Send request
$check_content = $bdd->prepare($sql);
$check_content->execute(array($id));
if($afficher = $check_content->fetch())
{
return true;
}
else
{
return false;
}
//Fermeture de la requête
$check_content->closeCursor();
}
//Fonction permettant de récupérer un extrait de source ayant un commencement et une fin
function getsourceprecise($source, $debut, $fin = '\n')
{
preg_match_all('#'.$debut.'(.*?)'.$fin.'#is', $source, $resultat, PREG_PATTERN_ORDER);
//On renvoi le résultat
return $resultat[0];
}
//Fonction d'affichage de lien
function afficher_lien($source)
{
//On prépare l'ajout des liens
$source = " ".$source." ";
$source = str_replace("<", " <", $source);
$listetype = array("http://", "ftp://", "https://");
foreach($listetype as $debut)
{
//On récupère la liste des liens
$liste = getsourceprecise($source, " ".$debut, " ");
//On modifie les liens
foreach($liste as $modifier)
{
//On modifie les liens avec un str_replace
$source = str_replace($modifier, "<a href='".$modifier."' title='Ouvrir la page' target='_blank'>".$modifier."</a>", $source);
}
}
//On renvoi le résultat
return $source;
}
//Fonction d'affichage de la source nécessaire pour ajouter des smiles dans les commentaires
function source_ajout_smiley($id_texte)
{
echo "<img src='".path_img_asset('smiley/smile_gris.gif')."' class='bouton_ajout_smiley' onClick='affiche_liste_smile(\"addcommentaire".$id_texte."\");' />";
}
//Fonction permettant de définir si une personne est connectée ou non
function determine_si_personne_connecte($id, $bdd)
{
//Récupération des informations de la personne
$informations = cherchenomprenom($id, $bdd);
//Récupération du temps actuel
$time = time();
$time = $time-35;
//Renvoi du résultat
return ($time > $informations['last_activity'] ? false : true);
}
//Fonction de correction de la longueur mots des commentaires
function corrige_longueur_mots_commentaires($source)
{
//Séparation de tous les mots
//$liste_mots = getsourceprecise($source, " ", " "); //Non fiable
//Insertion de retours à la ligne automatiques
$source = wordwrap($source, 100, " ", true);
//Renvoi du résultat
return($source);
}
//Fonction de récupération de la liste de toute les pages
function get_liste_pages($id_personne, $bdd)
{
//Requête de recherche
$sql = "SELECT * FROM pages WHERE ID_personne = ?";
//Exécution de la requête
$requete = $bdd->prepare($sql);
$requete->execute(array($id_personne));
//Préparation de l'enregistrement
$enregistrement = array();
//Enregistrement des résultats
while($enregistrer = $requete->fetch())
{
//Enregistrement de la page
$enregistrement[] = $enregistrer;
}
//Fermeture de la requete
$requete->closeCursor();
//Renvoi du résultat
return $enregistrement;
}
//Fonction permettant de vérifier la validité d'un post ou d'un texte
function verifie_validite_ajout($source, $exception = false)
{
//On enlève les balises de paragraphe
$source = str_ireplace('<p>', "", $source);
$source = str_ireplace('</p>', "", $source);
//On enlève les balises de mise en page
$source = str_ireplace('<i>', "", $source);
$source = str_ireplace('</i>', "", $source);
$source = str_ireplace('<strong>', "", $source);
$source = str_ireplace('</strong>', "", $source);
$source = str_ireplace('<b>', "", $source);
$source = str_ireplace('</b>', "", $source);
$source = str_ireplace('<s>', "", $source);
$source = str_ireplace('</s>', "", $source);
$source = str_ireplace('</a>', "", $source);
//On compte le nombre de caractères différents
$tableau_caracteres = count_chars($source, 3);
//Vérification du nombre
if(strlen($tableau_caracteres) > 2)
{
//Le post est valide
$valide = true;
}
else
{
//Le post est invalide
$valide = false;
}
//Il y a deux exceptions (si autorisées)
if($exception)
{
$valide = ($source == ":)" || $source == ":(" ? true : $valide);
}
//Retour du résultat
return $valide;
}
//Fonction affichant le formulaire permettant choisir quel est le niveau de visibilité du contenu
function choisir_niveau_visibilite($niveau = 1)
{
//Il y a trois niveaux :
// 1 - Tout le monde (disponible uniquement si la page est ouverte)
// 2 - Uniquement les amis
// 3 - Uniquement la personne ayant posté le texte (et si il s'agit d'une page amie, le propriétaire de la page également)
?><div class='choix_niveau_visibilite'>
<ul>
<li>
<label>
<input type='radio' name='niveau_visibilite' value='3' />
<?php echo code_inc_img(path_img_asset('user.png')); ?>
<span class="label">Moi</span>
</label>
</li>
<li>
<label>
<input type='radio' name='niveau_visibilite' value='2' checked />
<?php echo code_inc_img(path_img_asset('users_3.png')); ?>
<span class="label">Mes amis</span>
</label>
</li>
<li>
<label>
<input type='radio' name='niveau_visibilite' value='1' />
<?php echo code_inc_img(path_img_asset('users_5.png')); ?>
<span class="label">Tout le monde</span>
</label>
</li>
<!--<li><label><input type='radio' name='niveau_visibilite' value='3' onchange="affiche_formulaire_groupes(this);" /><img src='img/small/cog.png' /> <span class="label">Personnalis&eacute;</span> </label></li>-->
</ul>
</div><?php
}
//Fonction affichant le menu permettant de changer le niveau de visibilité
function affiche_menu_change_niveau_visibilite($niveau_actuel, $id, $peut_modifier_niveau = false)
{
//On établit l'ID du menu de changement du niveau de visibilité
$id_menu_changement_niveau_visibilite = "change_niveau_visibilite_".$id;
//On commence par afficher (systématiquement) le niveau actuel
echo "<img id='".$id_menu_changement_niveau_visibilite."_img'";
if($niveau_actuel == "1")
echo " src='".path_img_asset('users_5.png')."' title='Visible par tous le monde' />";
elseif($niveau_actuel == "2")
echo " src='".path_img_asset('users_3.png')."' title='Visible par moi et mes amis' />";
elseif($niveau_actuel == "3")
echo " src='".path_img_asset('user.png')."' title='Visible par moi uniquement' />";
else
echo " src='".path_img_asset('cog.png')."' title='Personnalis&eacute;' />";
//Si l'utilisateur est autorisé, on lui affiche le menu de modification
if($peut_modifier_niveau)
{
//On met une flèche pour proposer à l'utilisateur de changer le niveau de visibilité
echo " <img src='".path_img_asset('bullet_arrow_right.png')."' title='Changer le niveau de visibilit&eacute;' onClick='show_hide_id(\"".$id_menu_changement_niveau_visibilite."\", \"visible\");' />";
//On envoi le code source de changement du niveau
echo "<span id='".$id_menu_changement_niveau_visibilite."' class='change_niveau_visibilite'>";
echo "<img src='".path_img_asset('user.png')."' title='Visible par moi uniquement' onClick='change_niveau_visibilite_post(".$id." ,3)' /> ";
echo "<img src='".path_img_asset('users_3.png')."' title='Visible par moi et mes amis' onClick='change_niveau_visibilite_post(".$id." ,2)' /> ";
echo "<img src='".path_img_asset('users_5.png')."' title='Visible par tous le monde' onClick='change_niveau_visibilite_post(".$id." ,1)' /> ";
echo "<img src='".path_img_asset('small/cross.png')."' title='Fermer ce menu' onClick='this.parentNode.style.visibility=\"hidden\"' /> ";
echo "</span>";
//On masque maintenant le menu de changement de niveau
echo "<style type='text/css'>#".$id_menu_changement_niveau_visibilite." { visibility: hidden; }</style>";
}
}
//Fonction permettant de redimensionner et d'enregistrer une nouvelle image
function redimensionnne_enregistre_image($x1, $x2, $y1, $y2, $adresse_source_image, $adresse_destination_image, $width, $height, $resize = "yes", $resize_width = 128, $resize_height = 128)
{
//Sécurité
$x1 = $x1*1;
$x2 = $x2*1;
$y1 = $y1*1;
$y2 = $y2*1;
//Récupération des inofrmations initiales sur l'image
$info_image = getimagesize($adresse_source_image);
if($info_image['mime']=='image/jpeg')
{
// Création des instances d'image (jpeg)
$src = imagecreatefromjpeg($adresse_source_image);
}
elseif($info_image['mime']=='image/png')
{
// Création des instances d'image (png)
$src = imagecreatefrompng($adresse_source_image);
}
elseif($info_image['mime']=='image/gif')
{
// Création des instances d'image (gif)
$src = imagecreatefromgif($adresse_source_image);
}
else
{
die("<p>Type d'image incompatible avec ce service.</p>");
}
//Création de l'image de destination
$dest = imagecreatetruecolor($width, $height);
// Copie (varie en fonction de la nécessité de redimensionner ou pas l'image)
if($resize == "yes")
imagecopyresized($dest, $src, 0, 0, $x1, $y1, $resize_width, $resize_height, $x2-$x1, $y2-$y1); //Copie avec redimensionnement
else
imagecopy($dest, $src, 0, 0, $x1, $y1, $x2-$x1, $y2-$y1); //Copie avec redimensionnement
//Suppression de l'ancienne image
if(file_exists($adresse_source_image))
{
//Suppression de l'image
unlink($adresse_source_image);
}
// Affichage et libération de la mémoire
//header('Content-Type: image/gif');
imagejpeg($dest, $adresse_destination_image);
imagedestroy($dest);
imagedestroy($src);
}
//Fonction permettant d'établir si un répertoire désigne un utilisateur de Comunic
function folder_is_an_user($repertoire, $bdd)
{
//Requête de recherche
$sql = "SELECT * FROM utilisateurs WHERE sous_repertoire = ?";
$requete = $bdd->prepare($sql);
$requete->execute(array($repertoire));
//Analyse
if($analyser = $requete->fetch())
return $analyser; //Le résultat est positif
else
return false; //Le résultat est négatif
//Fermeture de la requête
$requete->closeCursor();
}
//Fonction permettant de vérifier si un répertoire est libre, valide et autorisé
function verifie_validite_sous_repertoire($nom, $bdd)
{
$valide = true;
//Liste des caractères incorrects
$list_invalid_chars = array(
"/",
"&",
"?",
"^",
"\\",
"$",
"£",
"*",
"]",
"'",
'"',
"{",
"~",
".php",
".htm",
".jpg",
".gif",
".png",
".exe",
".gif",
".tar",
".txt",
".bat",
"../",
".cgi",
".py",
".ht"
);
//Liste noire
$black_list = array(
"admin",
"help",
"img",
"css",
"js",
"audio",
"index.php",
"action.php",
"lang",
"winpe",
"upload",
"doc",
"fonts",
"comunic",
"communiquons",
"service.pierre"
);
//On commence par vérifier qu'il ne possède pas de caractères comprommettants et qu'il n'est pas vide
$valide = ($nom == "" ? false : $valide);
foreach($list_invalid_chars as $verifier)
$valide = (str_replace($verifier, "", $nom) != $nom ? false : $valide);
//On vérifie maintenant si il n'est pas sur la liste noire
foreach($black_list as $verifier)
$valide = ($nom == $verifier ? false : $valide);
//On vérifie si il est disponible
$valide = (folder_is_an_user($nom, $bdd) ? false : $valide);
//On renvoi le résultat
return $valide;
}
//Fonctions de vidéo
//Fonction permettant de lister l'ensemble des vidéos de l'utilisateur
function liste_videos_user($id, $bdd)
{
$sql = "SELECT * FROM galerie_video WHERE ID_user = ?";
//Exécution de la requête
$requete = $bdd->prepare($sql);
$requete->execute(array($id));
//Enregistrement des résulats
$liste = array();
while($enregistrer = $requete->fetch())
{
$liste[] = $enregistrer;
}
//Fermeture de la requête
$requete->closeCursor();
//Renvoi du résultat
return $liste;
}
//Fonction d'affichage de vidéo (ancienne version) ! La nouvelle version n'étant pas fonctionelle, on utilise celle-là à la place !
function affiche_video($liste_url, $preload="metadata", $width="640", $height="264", $image_par_defaut="none", $controls = "controls", $autoload_videojs = true, $id_video = false)
{
?><video id="<?php echo (!$id_video ? sha1($width.$height.$liste_url[0][0]) : $id_video); ?>" class="video-js vjs-default-skin" <?php echo $controls; ?> preload="<?php echo $preload; ?>" width="<?php echo $width; ?>" height="<?php echo $height; ?>" <?php
if($image_par_defaut != "none") echo ' poster="'.$image_par_defaut.'"'; //Image par défaut
if($autoload_videojs) echo ' data-setup="{}"'; //Chargement de VideoJS automatique
echo ' >'; //Fermeture de la balise
//Listage des URL de source
foreach($liste_url as $afficher)
{
echo "<source src='".webUserDataFolder($afficher[0])."' type='".$afficher[1]."' />";
}
?>
<p class="vjs-no-js">Afin de pouvoir visionner cette vid&eacute;o, veuillez activer Javasript ou mettre votre navigateur &agrave; jour.</a></p>
</video><?php
}
//Fonction de conversion du nombre d'octets vers le nombre de MO.
function convertis_octets_vers_mo($valeur)
{
//Conversion de la valeur
$valeur = $valeur/1024; //Convertion en KO
$valeur = $valeur/1024; //Convertion en MO
$valeur = round($valeur, 2); //Arrondis de la valeur à deux chiffres après la virgule
//Renvoi du résultat
return $valeur;
}
//Fonction renvoyant l'ID de la vidéo la plus récente de l'utilisateur
function id_video_plus_recente($id, $bdd)
{
//Requête de recherche de la vidéo la plus récente
$sql = "SELECT * FROM galerie_video WHERE ID_user = ? ORDER BY ID DESC LIMIT 1";
//Exécution de la requête
$requete = $bdd->prepare($sql);
$requete->execute(array($id));
//Vérification et envoi du résultat
if($afficher = $requete->fetch())
{
//Fermeture du curseur
$requete->closeCursor();
//Renvoi du résultat
return $afficher['ID'];
}
//Fermeture du curseur
$requete->closeCursor();
//Message d'erreur
die("Il n'y a pas de vid&eacute;o disponible pour cet utilisateur. <a href='index.php'>Retour</a>");
}
//Fonction permettant de vérifier l'existence d'une vidéo
function isset_video($id_video, $id_user, $bdd)
{
//Requête de recherche de la vidéo
$sql = "SELECT * FROM galerie_video WHERE ID = ? && ID_user = ?";
//Exécution de la requête
$requete = $bdd->prepare($sql);
$requete->execute(array($id_video*1, $id_user*1)); //Inclusion de sécurité
//Vérification et envoi du résultat
if($afficher = $requete->fetch())
{
//Fermeture du curseur
$requete->closeCursor();
//Renvoi du résultat
return true;
}
//Fermeture du curseur
$requete->closeCursor();
//Retour négatif
return false;
}
//Fonction d'ajout de vidéo
function add_movie($idpersonne, $texte, $idvideo, $bdd, $niveau_visibilite = 2, $amis = 0)
{
$sql = 'INSERT INTO texte (ID_personne, date_envoi, idvideo, type, ID_amis, texte, niveau_visibilite) VALUES (?, NOW(), ?, ?, ?, ?, ?) ';
//Exécution de la requete
$insertion = $bdd->prepare($sql);
$insertion->execute(array($idpersonne, $idvideo, "video", $amis, corrige_echapement($texte), $niveau_visibilite));
//Et la notification (uniquement si nécessaire => Si le post n'a pas un niveau égal à 3)
if(!visibilite_privee($niveau_visibilite))
{
if($amis == 0) //Envoi de la notification
sendnotification($_SESSION['ID'], "a ajout&eacute; une vid&eacute;o personnelle sur sa page.", $bdd, "page:".$_SESSION['ID'], "", "video");
else //Si c'est un ami
{
$infopersonne = cherchenomprenom($idpersonne, $bdd);
sendnotification($_SESSION['ID'], "a ajout&eacute; une vid&eacute;o personnelle sur la page de ".$infopersonne['prenom'].' '.$infopersonne['nom'].".", $bdd, "page:".$infopersonne['ID'], $infopersonne['ID'], "video");
}
}
else
{
if($amis == 0) //Envoi de la notification
sendnotification($_SESSION['ID'], "a ajout&eacute; une vid&eacute;o personnelle sur sa page.", $bdd, "page:".$_SESSION['ID'], "", "video", list_personnes_groupes($niveau_visibilite, $bdd));
else //Si c'est un ami
{
$infopersonne = cherchenomprenom($idpersonne, $bdd);
sendnotification($_SESSION['ID'], "a ajout&eacute; une vid&eacute;o personnelle sur la page de ".$infopersonne['prenom'].' '.$infopersonne['nom'].".", $bdd, "page:".$infopersonne['ID'], $infopersonne['ID'], "video", list_personnes_groupes($niveau_visibilite, $bdd));
}
}
}
//Fonction de récupération des informations d'une vidéo
function get_info_video($id, $bdd)
{
//Requête de recherche
$sql = "SELECT * FROM galerie_video WHERE ID = ?";
//Exécution de la requête
$requete = $bdd->prepare($sql);
$requete->execute(array($id*1)); //Sécurité implémentée
//Récupération du résultat
$retour = $requete->fetch();
//Fermeture de la requête
$requete->closeCursor();
//Renvoi du résultat
return $retour;
}
//Fonction permettant de lister l'ensemble des posts relatifs à une vidéo
function list_ensemble_posts_relatif_a_video($id, $bdd)
{
//Requête de recherche
$sql = "SELECT * FROM texte WHERE idvideo = ?";
//Exécution de la requete
$requete = $bdd->prepare($sql);
$requete->execute(array($id));
//Enregistrement des résultats
$liste = array();
while($enregistrer = $requete->fetch())
{
$liste[] = $enregistrer;
}
//Fermeture de la requête
$requete->closeCursor();
//Renvoi du résultat
return $liste;
}
//Fonction permettant de vérifier si un compte existe
function isset_account($id, $bdd)
{
//Requête de recherche
$sql = "SELECT * FROM utilisateurs WHERE ID = ?";
$requete = $bdd->prepare($sql);
$requete->execute(array($id*1)); //Sécurité incorporée
//Vérification
if($verifier = $requete->fetch())
$retour = true;
else
$retour = false;
//Fermeture de la requête
$requete->closeCursor();
//Renvoi du résultat
return $retour;
}
//Fonction permettant de récupérer la liste des types de contact
function get_list_type_contact($bdd)
{
//Requête de recherche
$sql = "SELECT * FROM sujet_contact";
$requete = $bdd->query($sql);
//Enregistrement des résultats
$liste = array();
while($enregistrer_type_contact = $requete->fetch())
{
$liste[] = $enregistrer_type_contact;
}
//Fermeture de la requête
$requete->closeCursor();
//Renvoi du résultat
return $liste;
}
//Fonction de cryptage de mot de passe selon la stratégie de mot de passe utilisateur de Comunic
function crypt_password($password)
{
//Cryptage du mot de passe et renvoi du résultat
$password = sha1($password);
return crypt($password, $password);
}
//Fonction permettant d'ajouter l'URL du site sur un block de texte
function add_url_site($source, $urlsite)
{
//Conversion et renvoi du résultat
return str_replace("%URL_SITE%", $urlsite, $source);
}
//Transforme une date issue d'un datepicker en date normalisée pour la base de données
function normalise_datepicker($date)
{
//Transformation de la date en tableau
$array_date = explode(".", $date);
//Vérification de sécurité
if(count($array_date) != 3)
die("Date incorrecte!");
return $array_date[2]."-".$array_date[1]."-".$array_date[0]." 00:00:00";
}
//Fonction permettant de déterminer si une personne est abonnée aux notifications d'une autre
function personne_abonnee_notification_ami($ami, $personne_connectee, $bdd)
{
//On récupère les informations sur la table ami
$sql = "SELECT * FROM amis WHERE (ID_personne = ?) && (ID_amis = ?) && (actif = 1)";
$requeteamis = $bdd->prepare($sql);
$requeteamis->execute(array($ami, $personne_connectee));
//On renvoi le résultat suivant si la personne est amie ou non
if(!$info_ami = $requeteamis->fetch())
{
//Fermeture de la requete
$requeteamis->closeCursor();
//La personne ne peut pas être abonnée: elle n'est pas amie
return false;
}
//Fermeture de la requete
$requeteamis->closeCursor();
//On définit maintenant si la personne est amie ou pas
return ($info_ami['abonnement'] == 0 ? false : true);
}
//Fonction d'enregistrement d'une image encodée en base64 vers un fichier
function base64_to_jpeg($base64_string, $output_file) {
$ifp = fopen($output_file, "wb");
$data = explode(',', $base64_string);
fwrite($ifp, base64_decode($data[1]));
fclose($ifp);
return $output_file;
}
//Fonction de nettoyage des anciennes notifications
function nettoie_anciennes_notifications($id, $bdd)
{
//Récupération des informations sur l'utilisateur
$info_user = cherchenomprenom($id, $bdd);
//On vérifie que le nettoyage automatique des anciennes notifications est activé
if($info_user['nettoyage_automatique_notifications'] == 1)
{
//On crée la date avant laquelle les notifications seront supprimées
$array_date = getdate();
//On récupère la date en seconde en dessous de laquelle les notifications seront supprimées
$time = strtotime("-".$info_user['mois_nettoyage_automatique_notifications']." month -".$info_user['jour_nettoyage_automatique_notifications']." days -".$info_user['heure_nettoyage_automatique_notifications']." hours");
//On convertit la date en format normalisé
$date = date("Y-m-d H:i:s", $time);
//On supprime les notifications antérieurs à cette date MAINTENANT
$sql = "DELETE FROM notification WHERE date_envoi <= ? AND ID_personne = ?";
//Exécution de la requête
$requete = $bdd->prepare($sql);
$requete->execute(array($date, $id));
}
}
//Fonction retournant le prénom suivi du nom d'un utilisateur
function return_nom_prenom_user($id, $bdd)
{
//On recherche le prénom et le nom de l'utilisateur
$info_user = cherchenomprenom($id, $bdd);
//On renvoi le résultat
return $info_user['prenom']." ".$info_user['nom'];
}
//Fonction optimisant la fonction return_nom_prenom_user en évitant de faire des requêtes inutiles
function optimise_search_info_users($id, $bdd, $liste = array())
{
if(!isset($liste[$id]['table_utilisateurs']) || !isset($liste[$id]['avatar_32_32']))
{
$liste[$id]['table_utilisateurs'] = cherchenomprenom($id, $bdd);
$liste[$id]['avatar_32_32'] = avatar($id, "./", 32, 32);
}
//Renvoi de la liste
return $liste;
}
//Fonction d'affichage de la vidéo d'un texte
function affiche_video_texte($id, $bdd)
{
//Récupération des informations de la vidéo
$info_video = get_info_video($id, $bdd);
//Préparation de l'affichage des vidéos
echo "<div class='video_contener'>";
//Affichage de la vidéo
affiche_video(array(array($info_video['URL'], $info_video['file_type'])));
//Fermeture de l'affichage de la vidéo
echo "</div>";
}
//Fonction d'affichage de l'image d'un texte
function affiche_image_texte($info, $afficher_infos = false)
{
//On vérifie qu'il s'agit d'une image
if($info["type"] == "image")
{
//Affichage de l'image
echo '<a class="fancybox" rel="group" href="';
echo webUserDataFolder($info['path']);
echo '"><img height="200" src="';
echo webUserDataFolder($info['path']);
echo '" alt="" /></a> <br />';
//Si nécessaire on affiche les données techniques de l'image
if($afficher_infos)
{
echo "Taille de l'image: ".convertis_octets_vers_mo($info['size'])." Mo;";
echo " Type d'image: ".$info['file_type'].";";
echo " Chemin d'acc&egrave;s: <a href='".webUserDataFolder($info['path'])."'>".webUserDataFolder($info['path'])."</a><br />";
}
}
}
//Fonction de suppression d'une vidéo
function delete_movie($idvideo, $iduser, $bdd)
{
//Récupération des informations
$sql = "SELECT * FROM galerie_video WHERE ID = ? AND ID_user = ?";
//Exécution de la requête
$requete = $bdd->prepare($sql);
$requete->execute(array($idvideo, $iduser));
if(!$analyser = $requete->fetch())
die("Vid&eacute;o non trouv&eacute;.");
//Fermeture de la requête
$requete->closeCursor();
//Suppression des posts relatifs à la video
$list_posts_relatif = list_ensemble_posts_relatif_a_video($_GET['delete'], $bdd); //Récupération de la liste
foreach($list_posts_relatif as $enregistrer)
{
//Suppression du post
deletetexte($enregistrer['ID'], $enregistrer['texte'], $bdd);
}
//Suppression du fichier
unlink(relativeUserDataFolder($analyser['URL']));
//Suppression de l'entrée dans la base de données
$sql = "DELETE FROM galerie_video WHERE ID = ? AND ID_user = ?";
//Exécution de la requete
$requete = $bdd->prepare($sql);
$requete->execute(array($_GET['delete'], $_SESSION['ID']));
}
//Fonction permettant de définir si une personne est autorisée à visualiser une page ou pas et avec quel niveau de visibilité
function is_allowed_to_view_page($idpage, $bdd)
{
//Récupération des informations sur la page
$info_page = cherchenomprenom($idpage, $bdd);
//On vérifie si la personne n'est pas connectée
if(!isset($_SESSION['ID']))
{
if($info_page['pageouverte'] == 0)
return false; //Personne non autorisée
else
return 1; //Personne autorisée à voire les posts publiques uniquements
}
//La personne est connectée
//On vérifie si c'est la page de la persone
if($_SESSION['ID'] == $idpage)
return 3; //La personne peut voire tout les posts
//On vérifie si les persones sont amies
if(!detectesilapersonneestamie($_SESSION['ID'], $idpage, $bdd))
{
//On vérifie si la page est publique
if($info_page['public'] == 1)
return 1; //La personne est autorisée à visualiser les posts publics
else
return false; //La personne n'est pas autorisée à visualiser les posts publiques
}
//La personne est autorisée à visualiser les posts de niveau 2 (avec les amis)
return 2;
}
//Fonction renvoyant le code source pour afficher une vidéo YouTube
function code_video_youtube($adresse)
{
//Préparation de la source
$source = "";
//Génération de la source
$source .= '<iframe width="420" height="315" src="https:/';
$source .= '/www.youtube.com/embed/';
$source .= $adresse;
$source .= '?rel=0" frameborder="0" allowfullscreen></iframe> <br />';
//Renvoi du code source
return $source;
}
//Fonction convertissant une date type "NOW()" en timestamp
//Exemple de date : 2013-11-16 14:30:00
function to_timestamp($source)
{
//Création d'un premier tableau
$array_1 = explode(" ", $source);
if(count($array_1) != 2) return $source; //Rien à faire
//Création du second tableau
$array_2 = explode("-", $array_1[0]);
if(count($array_2) != 3) return $source; //Rien à faire
//Création du troisième tableau
$array_3 = explode(":", $array_1[1]);
if(count($array_2) != 3) return $source; //Rien à faire
//Création et renvoi du résultat
return mktime($array_3[0], $array_3[1], $array_3[2], $array_2[1], $array_2[2], $array_2[0]);
}
//Fonction permettant d'adapter la date pour l'affichages d'une page
function adapte_date($source, $timestamp = 0)
{
if($timestamp == 0)
$timestamp = to_timestamp($source)-3600; //Exemple de date : 2013-11-16 14:30:00
$now = time();
$difference = $now-$timestamp;
if($difference == 0) //Il y a moins d'une seconde
return "Il y a quelques instants";
elseif($difference == 1) //Il y a une seconde
return "Il y a une seconde";
elseif($difference <= 60) //Inférieur à une minute
return "Il y a ".$difference." secondes";
elseif($difference <= 3600) //Inférieur à une heure
{
$nb_minutes = floor($difference/60);
if($nb_minutes == 1)
return "Il y a une minute";
else
return "Il y a ".$nb_minutes." minutes";
}
elseif($difference <= 86400) //Inférieur à un jour
{
$nb_heures = floor(($difference/60)/60);
if($nb_heures == 1)
return "Il y a une heure";
else
return "Il y a ".$nb_heures." heures";
}
elseif($difference <= 2678400) //Inférieur à un mois
{
$nb_jours = floor((($difference/60)/60)/24);
if($nb_jours == 1)
return "Il y a un jour";
else
return "Il y a ".$nb_jours." jours";
}
elseif($source != "") //On affiche le jour précis
{
//On se sert du timestamp : $timestamp
$datas_date = date( "w|j|n|Y|H|i|s" , $timestamp);
$array_date = explode('|', $datas_date);
//On vérifie que la date est correcte
if(count($array_date) != 7)
return $date; //Rien à faire
//Définition des données
$days = array("dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi");
$months = array("janvier", "f&eacute;vrier", "mars", "avril", "mai", "juin", "juillet", "ao&ucirc;t", "septembre", "octobre", "novembre", "d&eacute;cembre");
//Renvoi du résultat
return "Le ".$days[$array_date[0]]." ".$array_date[1]." ".$months[$array_date[2]-1]." ".$array_date[3]." &agrave; ".$array_date[4].":".$array_date[5].":".$array_date[6];
}
else //Rien à faire, on renvoi la date
return $source;
}
//Fonction permettant de récupérer la source des commentaires dans un tableau
function getsourcecommentaire_html($source, $type, $fin = '\n')
{
preg_match_all('#'.$type.'(.*?)'.$fin.'#is', $source, $resultat, PREG_PATTERN_ORDER);
//On renvoi le résultat
return $resultat[0];
}
//Fonction de compilation de code source (nécessite : getsourcecommentaire_html)
function compile_code_source($source, $allow_comment_slash_slash = false, $free_hosting = false)
{
if($allow_comment_slash_slash == false)
{
$source = str_replace(":/"."/", ':adaptecompilewithcomunicforsecurityofhttppleasedontremove', $source); //Protection http://
$source = str_replace(getsourcecommentaire_html($source, '/'.'/'), '', $source);
$source = str_replace(':adaptecompilewithcomunicforsecurityofhttppleasedontremove', ":/"."/", $source); //Retire protection http://
}
$source = str_replace("\n", ' ', $source);
$source = str_replace(getsourcecommentaire_html($source, '<!'.'--', '-'.'->'), '', $source);
//$source = str_replace(getsourcecommentaire_html($source, '/*', '*/'), '', $source);
//$source = str_replace(getsourcecommentaire_html($source, '', ''), '', $source);
$source = str_replace(' ', ' ', $source);
//Correction des problèmes Javascript
$source = str_replace(' xhr.send(null);', "\n xhr.send(null);", $source);
//On enlève les espaces en trop
for ($i = 0; 15>$i; $i++)
{
$source = str_replace(' ', ' ', $source);
}
//Dernières corrections... ! Non opérationnel !
//$source = str_replace('> <', '><', $source);
//$source = str_replace('; ', ';', $source);
//On adapte si il s'agit de Comunic
if($free_hosting == true)
{
//Adaptation de la page
$source = str_replace('chat.js', 'comunicrapid.js', $source);
$source = str_replace('chat.css', 'comunicrapid.css', $source);
$source = str_replace('chat.php', 'comunicrapid.php', $source);
}
//Renvoi de la source
return $source;
}
//Fonction permettant de lister l'ensemble des groupes d'une personne
function list_groupes_personnes($id_personne, $bdd)
{
//Requête de recherche
$sql = "SELECT * FROM groupe_personnes WHERE ID_personne = ?";
//Exécution de la requête
$requete = $bdd->prepare($sql);
$requete->execute(array($id_personne*1));
//Enregistrement des résultats
$retour = array();
while($enregistrer = $requete->fetch())
{
$retour[] = $enregistrer;
}
//Fermeture de la requête
$requete->closeCursor();
//Renvoi du résultat
return $retour;
}
//Print_r d'un tableau avec <pre> intégré
function print_r_pre($tableau)
{
echo "<pre>";
print_r($tableau);
echo "</pre>";
}
//Fonction permettant de rechercher l'appartenance à un groupe
function search_appartenance_groupes($id_user, $id_user_connected, $bdd, $open = true)
{
//On vérifie si l'on doit chercher tous les groupes ou non
if(!$open)
{
//Requête de recherche
$sql = "SELECT ID FROM groupe_personnes WHERE ID_personne = ? AND ((liste_ID = ?) OR (liste_ID LIKE ?) OR (liste_ID LIKE ?) OR (liste_ID LIKE ?))";
$requete = $bdd->prepare($sql);
$requete->execute(array($id_user, $id_user_connected, "%|".$id_user_connected, $id_user_connected."|%", "%|".$id_user_connected."|%"));
}
else
{
//Requête de recherche
$sql = "SELECT ID FROM groupe_personnes WHERE (liste_ID = ?) OR (liste_ID LIKE ?) OR (liste_ID LIKE ?) OR (liste_ID LIKE ?)";
$requete = $bdd->prepare($sql);
$requete->execute(array($id_user_connected, "%|".$id_user_connected, $id_user_connected."|%", "%|".$id_user_connected."|%"));
}
//Enregistrement des résultats
$retour = array();
while($enregistrer = $requete->fetch())
{
$retour[] = $enregistrer['ID'];
}
//Fermeture de la requête
$requete->closeCursor();
//Retour des résultat
return $retour;
}
//Fonction permettant de dire si la vidéo est partiellement (ou totalement) restreinte
function visibilite_privee($niveau_visibilite)
{
if($niveau_visibilite == 3)
return true;
elseif(preg_match("<3>", $niveau_visibilite))
return true;
else
return false; //La vidéo est publique
}
//Fonction permettant de finir la compilation de source
function fin_mise_en_cache()
{
$source = ob_get_contents();
ob_end_clean();
echo compile_code_source($source);
}
//Fonction permettant de définir si une page en cache est disponible ou non pour ce fichier
function is_page_cached($nom_page)
{
if(file_exists("cache/".sha1($nom_page)))
return true;
else
return false;
}
//Fonction d'écriture du fichier dans le cache
function write_cache($file, $source)
{
//Adaptation du nom de fichier si nécessaire
if(!preg_match("<cache/>", $file))
$file = "cache/".sha1($file);
//Ecriture du fichier dans le cache
file_put_contents($file, $source);
}
//Fonction permettant d'afficher un message d'erreur
function affiche_message_erreur($message, $metro_enabled = false)
{
if(!$metro_enabled)
echo '<span class="metro"><p class="padding20 bg-darkRed fg-white"><span class="icon-warning"> &nbsp; '.$message.'</span></p></span>';
else
echo '<p class="padding20 bg-darkRed fg-white"><span class="icon-warning"> &nbsp; '.$message.'</span></p>';
}
//Fonction d'affichage d'un compte à rebours
function affiche_compte_rebours($infos_texte)
{
//Détermination de la date de fin
//$date_fin = date("D M d Y H:i:s", strtotime($infos_texte['annee_fin']."-".$infos_texte['mois_fin']."-".$infos_texte['jour_fin']))." UTC"; //Sun Aug 05 2035 12:00:00 GMT+0200
//$date_fin = date("c", strtotime($infos_texte['annee_fin']."-".$infos_texte['mois_fin']."-".$infos_texte['jour_fin']))." GMT+0200"; //Sun Aug 05 2035 12:00:00 GMT+0200
$date_fin = strtotime($infos_texte['annee_fin']."-".$infos_texte['mois_fin']."-".$infos_texte['jour_fin']);
//$date_fin = time();
$id_counter = 'time_'.$infos_texte['ID'];
echo '<timers>'.$id_counter.'|'.$date_fin.'</timers><div class="metro"><div class="countdown" id="'.$id_counter.'" data-role="countdown" data-stoptimer="'.$date_fin.'" data-style-background="bg-cyan" style="font-size: 60px"></div></div>';
?><script>launch_countdown(<?php echo $date_fin; ?>, '<?php echo $id_counter; ?>');</script><?php
}
//Fonction d'affichage d'un lien vers une page externe
function affiche_lien_webpage($infos_texte)
{
if($infos_texte['type'] == "webpage_link")
{
if($infos_texte['url_page'] != "")
{
//Titre de la page
if($infos_texte['titre_page'] != "default")
$titre_page = $infos_texte['titre_page'];
else
$titre_page = "Page Web";
//Description de la page
if($infos_texte['description_page'] != "default")
$description_page = $infos_texte['description_page'];
else
$description_page = "Page web externe";
//Image de la page
if($infos_texte['image_page'] != "default")
$image_page = $infos_texte['image_page'];
else
$image_page = path_img_asset('world.png');
?><div class="link_webpage">
<a target="_blank" href="<?php echo $infos_texte['url_page']; ?>">
<img class="image_webpage" src="<?php echo $image_page; ?>" />
<div class="titre_webpage"><?php echo $titre_page; ?></div>
<div class="url_webpage"><?php echo $infos_texte['url_page']; ?></div>
<div class="description_webpage"><?php echo $description_page; ?></div>
</a>
</div>
<?php
}
}
}
//Fonction d'affichage d'un lien vers un PDF
function affiche_lien_pdf($infos_texte)
{
if($infos_texte['type'] == "pdf")
{
if($infos_texte['path'] != "")
{
//Titre de la page
?><div class="link_pdf">
<a target="_blank" href="<?php echo webUserDataFolder($infos_texte['path']); ?>">
<?php echo code_inc_img(path_img_asset('file_extension_pdf.png'), "T&eaucte;l&eacute;charger le PDF"); ?>
Fichier PDF
</a>
</div>
<?php
}
}
}
//Fonction permettant de définir toutes les personnes autorisées à voir un post
function list_personnes_groupes($valeur, $bdd)
{
//On importe la liste dans un tableau
$array = explode("|", $valeur);
//On supprime la première valeur (valeur à validité générale)
unset($array[0]);
//Préparation du retour
$retour = array();
//On ne continue que si la liste n'est pas vide
if(count($array) != 0)
{
//On traite maintenant la liste
$sql = "SELECT * FROM groupe_personnes WHERE ID = ? ";
foreach($array as $ajouter)
{
$sql .= "OR ID = ? ";
}
$array[0] = $array[1];
//Exécution de la requête
$requete = $bdd->prepare($sql);
$requete->execute($array);
//Affichage des résultats
while($afficher = $requete->fetch())
{
//Récupération de la liste des membres du groupe
$liste_membres = explode('|', $afficher['liste_ID']);
$liste_membres[] = $afficher['ID_personne'];
//Traitement de la liste des membres
foreach($liste_membres as $traiter)
{
//On vérifie si le membre a déjà été ajouté
if(!in_array($traiter, $retour, true))
$retour[] = $traiter; //Ajout de l'entrée
}
}
//Fermeture de la requête
$requete->closeCursor();
}
return $retour;
}
//Fonction permettant d'afficher qu'une page est vérifiée
function message_checked_page()
{
echo "</td><td><img style='vertical-align: middle;' src='img/tick.png' title='Page v&eacute;rifi&eacute;e' />";
}
//Fonction permettant de rapporter une erreur durant l'exécution du comunic
function report_error($nom_erreur, $raison = "La raison n'a pas &eacute;t&eacute; sp&eacute;cifi&eacute;e.", $details = array())
{
//Inclusion de la configuration
include('inc/config/config.php');
//Envoi du message
//Vérification de l'autorisation d'envoi de mails
if($active_envoi_mail == "oui")
{
//Envoi du message
$send_mail = true;
$sujet = "[Erreur Comunic] Erreur lors de l'exécution d'une page dans Comunic"; //Sujet
$description_rapide = "Une erreure fatale est arrivee dans une requete pour Comunic.";
$nom_destinataire = "Dev de Comunic";
$adresse_mail_destinataire = $mail_envoi_erreur_sql;
$message = "<h2 style='text-align: center'>Erreur dans une page Comunic</h2>
<p>Bonjour, ce message vous a &eacute;t&eacute; adress&eacute; suite &agrave; une erreur fatale dans un script PHP. L'erreur PHP est la suivante : <i>".$nom_erreur."</i></p>
<p>La raison de l'erreur est la suivante: ".$raison."</p>
<p>Les informations compl&eacute;mentaires sont les suivantes :</p>
<table>
<tr><td><b>$"."_POST</b></td></tr>";
//Parcours de la variable $_POST
foreach($_POST as $nom=>$valeur)
$message.= "<tr><td>".$nom." :</td><td>".$valeur."</td></tr>";
$message .= "<tr><td><b>$"."_GET</b></td></tr>";
//Parcours de la variable $_GET
foreach($_GET as $nom=>$valeur)
$message.= "<tr><td>".$nom." :</td><td>".$valeur."</td></tr>";
$message .= "<tr><td><b>$"."_SERVER</b></td></tr>";
//Parcours de la variable $_SERVER
foreach($_SERVER as $nom=>$valeur)
$message.= "<tr><td>".$nom." :</td><td>".$valeur."</td></tr>";
$message .= "<tr><td><b>$"."_SESSION</b></td></tr>";
//Parcours de la variable $_SESSION
foreach($_SESSION as $nom=>$valeur)
$message.= "<tr><td>".$nom." :</td><td>".$valeur."</td></tr>";
$message .= "<tr><td><b>$"."details</b></td></tr>";
//Parcours de la variable $details
foreach($details as $nom=>$valeur)
$message.= "<tr><td>".$nom." :</td><td>".$valeur."</td></tr>";
$message .= "</table>"; //Message
$texte_message = $message;
//Envoi du message
include(websiteRelativePath('inc/envoi_mail.php'));
echo "<!-- MailAdmin sent -->";
}
}
//Fonction permettant de déterminer si une personne a déjà participé à un sondage ou non
//Retourne false si la personne n'a pas voté
//Retourne l'ID du choix si la personne a voté
function vote_personne_sondage($id_personne, $id_sondage, $bdd)
{
//Récupération des informations dans la base de données
$infos_vote_sondage = select_sql("sondage_reponse", "ID_utilisateurs = ? AND ID_sondage = ?", $bdd, array($id_personne, $id_sondage));
//On détermine si la personne a voté ou non
if(count($infos_vote_sondage) == 0)
{
//Retour négatif
return false;
}
else
{
//Retour de l'ID du choix
return $infos_vote_sondage[0]['ID_sondage_choix'];
}
}
//Fonction d'affichage d'erreur
function echo_erreur($erreur)
{
echo "<p><b>Erreur : </b> ".$erreur."</p>";
}
//Récupération d'un sondage par l'ID du texte correspondant
function get_sondage_by_text_id($id_texte, $bdd)
{
//Récupération des informations sur le sondage
$infos_sondage = select_sql("sondage", "ID_texte = ?", $bdd, array($id_texte));
//Si il n'y a pas de sondage => Erreur
if(count($infos_sondage) == 0)
{
//Rapport d'erreur
report_error('', 'Un sondage devrait &ecirc;tre affich&eacute;, mais celui-ci est introuvable dans la BDD. Erreur dans le fichier view_textes.php (inc).');
//On casse la chaîne après erreur
affiche_message_erreur("Une erreur a survenue lors de r&eacute;cup&eacute;ration d'informations relatives au post (Err Get Info Sond0.). Passage au texte suivant");
echo "</td></tr>";
return false;
}
return $infos_sondage;
}
//Fonction permettant de vérifier si un dossier appartient bien à un utilisateur
function checkPersonnalFolder($container_path, $id_user) {
//Détermination du chemin
$path = $container_path.$id_user."/";
//On vérifie l'existence du dossier
if(!is_dir($path))
{
if(!mkdir($path))
{
//Rapport d'erreur
report_error("Error in checkPersonnalFolder()", "Impossible de cr&eacute;er un dossier personnel d'utilisateur", $details = array("path" => $path));
//Erreur fatale
echo "<p>Une erreur fatale a survenue (checkPersonnalFolder in creating personnal folder). Veuillez r&eacute;essayer...</p>";
exit();
}
}
//On vérifie l'existence d'un fichier index.php de sécurité
if(!file_exists($path."index.html"))
{
$file_content = "<html><title>Acess Forbiden</title><h1>Access Forbiden.</h1><a href='/'>Go back to main page.</a></html>";
$file_name = $path."index.html";
if(!file_put_contents($file_name, $file_content))
{
//Rapport d'erreur
report_error("Erreur in checkPersonnalFolder()", "Impossible de cr&eacute;er le fichier de s&eacute;curit&eacute; <i>index.html</i>", $details = array(
"file" => $file_name,
"content" => $file_content));
//Erreur fatale
echo "<p>Une erreur fatale a survenue (checkPersonnalFolder in creating security file). Veuillez r&eacute;essayer...</p>";
exit();
}
}
//Renvoi du chemin du dossier
return $path;
}
//End Of File
//Merci d'utiliser le Service Pierre avec Comunic ! :)