// Forum Elv.
// Date de modification : 4/11/08.
function elv_forum($id_discussion = '') {
require_once('pagination.php');
require_once('tri.php');
global $connexion; // On récupère la connexion.
if (isset($id_discussion) AND is_numeric($id_discussion) AND $id_discussion != 0) {
// Requête de sélection de tous les messages d'un fil de discussion.
$requete = requete('
SELECT date, elvakt_messages.titre, message, nom, prenom
FROM elvakt_messages
INNER JOIN elvakt_membres
ON elvakt_messages.ref_membre = id_membre
INNER JOIN elvakt_discussions
ON ref_discussion = id_discussion
WHERE ref_discussion = ' . $id_discussion . '
ORDER BY date DESC;'
);
while ($resultat = rechligne($requete)) {
$messages .= '
'
. pagination($nb_pages);
}
else {
// Sélection des discussions du forum.
$requete = requete('
SELECT id_discussion, elvakt_discussions.titre AS discussion, nom AS nom_createur, prenom AS prenom_createur, id_membre, COUNT(id_message) AS nb_messages
FROM elvakt_discussions
INNER JOIN elvakt_membres
ON elvakt_discussions.ref_membre = id_membre
INNER JOIN elvakt_messages
ON ref_discussion = id_discussion
GROUP BY discussion;'
);
// On place les résultats dans un tableau.
while ($resultat = rechligne($requete)) {
$tableau[] = $resultat;
}
// Inutile de conserver la requête.
mysqli_free_result($requete);
// Tri des résultats.
$ordre = isset($_GET['ordre']) ? $_GET['ordre'] : 'discussion'; // Ordre des résultats.
$option = isset($_GET['option']) ? $_GET['option'] : ''; // Option de tri.
// Seulement s'il y a des résultats, pour éviter d'afficher un message d'erreur.
if (is_array($tableau)) {
foreach ($tableau AS $cle => $element) {
// On récupère le dernier message de chaque discussion.
$last_post = rechligne(requete('SELECT date, titre FROM elvakt_messages INNER JOIN elvakt_membres ON ref_membre = id_membre WHERE ref_discussion = ' . $tableau[$cle]['id_discussion'] . ' ORDER BY date DESC LIMIT 1;', $connexion));
$tableau[$cle]['date'] = $last_post['date'];
$tableau[$cle]['titre'] = $last_post['titre'];
$tri[$cle] = strip_tags($tableau[$cle][$ordre]); // Tri selon la colonne.
}
$option_tri = $option == 'desc' ? SORT_DESC : SORT_ASC; // Option de tri pour la fonction multisort.
$tri_lower = array_map('strtolower', $tri); // On rend le tri insensible à la casse.
array_multisort($tri_lower, $option_tri, $tableau); // Tri dynamique des résultats.
}
$page = (isset($_GET['page']) AND is_numeric($_GET['page'])) ? $_GET['page'] : 1; // Déclaration du numéro de la page en cours.
$nb_resultats = count($tableau); // Comptabilisation du nombre de lignes de résultats.
$nb_resultats_p_page = 20; // Nombre de résultats souhaités par page.
$nb_pages = ceil($nb_resultats / $nb_resultats_p_page); // Calcul du nombre de pages.
$premier_resultat = ($page * $nb_resultats_p_page) - ($nb_resultats_p_page - 1); // Calcul du numéro du premier résultat de la page.
$dernier_resultat = $premier_resultat + ($nb_resultats_p_page + 1) > $nb_resultats ? $nb_resultats : $page * $nb_resultats_p_page; // Calcul du numéro du dernier résultat de la page.
// Tant que l'on n'a pas atteint le nombre de résultats souhaités par page, on continue l'affichage des éléments de la liste.
$i = 0;
$k = ($page * $nb_resultats_p_page) - $nb_resultats_p_page; // Permet de déterminer sur quel résultat on se positionne. Par exemple, k vaut 0 pour la page 1 (les array commencent à 0), 10 pour la page 2, 20 pour la page 3 etc...
while ($i < $nb_resultats_p_page) {
if (!empty($tableau[$k])) {
$discussions .= '
'
. pagination($nb_pages);
}
return $sortie;
}
?>
Forum | Archiwum Kazimierza Twardowskiego Fatal error: Uncaught Error: Call to undefined function elv_forum() in /sites/elvakt/www/web_main/ressources/forum.php:44
Stack trace:
#0 {main}
thrown in /sites/elvakt/www/web_main/ressources/forum.php on line 44