[Partage] Points avec niveaux
Myster Membre non connecté
Booster Missile
- Booster Missile
- Voir le profil du membre Myster
- Inscrit le : 04/10/2010
- Groupes :
Suite à la demande de m-ickael membre de ce forum, j'ai donc réalisé un système de points avec niveau pour PHPBoost V5. Ce système permet à vos membres de gagner des points en participant à la vie de votre site. Il est entièrement compatible avec les modules qui permettent une contribution par le biais du panneaux de contributions, les membres reçoivent donc les points uniquement lorsqu'un administrateur ou modérateur traite la contribution. De plus, il gagne des points en ajoutant des sujets sur le forum et en répondant aux sujets sur le forum.
Les niveaux sont définis selon le nombre de points, par exemple 20 points du membres lui donne le niveau 1, 40 points le niveau 2 et ainsi de suite.
Ce module n'est pas en POO, et c'est mon premier module pour PHPBoost V5, et je suis pas encore "Expert" en PHP ... Mais c'est très bien fonctionnel
PHPBoost n'accepte pas les antislash en BBCode donc dans le code si vous voyez par exemple une apostrophe veuillez mettre un antislash juste devant
Création d'un système de points
Avant tout exécuter le code SQL suivant dans PHPMyAdmin
Code SQL :
CREATE TABLE IF NOT EXISTS `phpboost_member` ( `points` INT(11) NOT NULL DEFAULT '0', ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Remplacez phpboost par le le nom de votre préfixe de table
Procéder au téléchargement de ce fichier zip: Téléchargement du fichier
Dedans il y a plusieurs fichiers, donc pour ceux qui n'ont pas toucher une seule ligne de code du forum, vous pouvez donc tout extraire, et vous n'avez pas besoin de passer à la suite de ce tutoriel pour les autres, vous devez placer le dossier admin et template sur votre FTP
Dans forum/post.php à la ligne 193 en dessous de
Code PHP :
list($last_topic_id, $last_msg_id) = $Forumfct->Add_topic($id_get, $title, $subtitle, $contents, $type); //Insertion nouveau topic.
Ajoutez ceci:
Code PHP :
// 15 points pour la création d'un sujet PersistenceContext::get_querier()->inject("UPDATE " . DB_TABLE_MEMBER . " SET points = points + 15 WHERE user_id = '" . AppContext::get_current_user()->get_id(). "'");
A la ligne 473 juste après
Code PHP :
$last_msg_id = $Forumfct->Add_msg($idt_get, $topic['idcat'], $contents, $topic['title'], $last_page, $last_page_rewrite);
Ajoute ceci:
Code PHP :
PersistenceContext::get_querier()->inject("UPDATE " . DB_TABLE_MEMBER . " SET points = points + 10 WHERE user_id = '" . AppContext::get_current_user()->get_id(). "'");
Dans le fichier topic.php
à la ligne 228
Remplacez le code suivant
Code PHP :
$result = PersistenceContext::get_querier()->select("SELECT msg.id, msg.timestamp, msg.timestamp_edit, msg.user_id_edit, m.user_id, p.question, p.answers, p.voter_id, p.votes, p.type, m.display_name as login, m.level, m.groups, m.email, m.show_email, m.registration_date AS registered, ext_field.user_avatar, m.posted_msg, ext_field.user_sign, " . $extended_fields_to_recover_list . "m.warning_percentage, m.delay_readonly, m.delay_banned, m2.display_name as login_edit, s.user_id AS connect, tr.id AS trackid, tr.pm as trackpm, tr.track AS track, tr.mail AS trackmail, msg.contents
PAR
Code PHP :
$result = PersistenceContext::get_querier()->select("SELECT msg.id, msg.timestamp, msg.timestamp_edit, msg.user_id_edit, m.user_id, p.question, p.answers, p.voter_id, p.votes, p.type, m.display_name as login, m.level, m.groups, m.email, m.show_email, m.registration_date AS registered, ext_field.user_avatar, m.posted_msg, ext_field.user_sign, " . $extended_fields_to_recover_list . "m.warning_percentage, m.delay_readonly, m.delay_banned, m2.display_name as login_edit, s.user_id AS connect, tr.id AS trackid, tr.pm as trackpm, tr.track AS track, tr.mail AS trackmail, msg.contents, m.points
A la ligne 405 sous
Code PHP :
'USER_IMG_ASSOC' => $user_assoc_img,
Ajoutez ceci:
Code PHP :
'POINTS' => $row['points'],
Placez le code html ci-dessous dans forum_topic.tpl
Ensuite dans contribution_panel.php
A la ligne 193
Ajoutez en dessous de
Code PHP :
$fixer = PersistenceContext::get_querier()->select('SELECT * FROM ' . DB_TABLE_MEMBER . ' member WHERE user_id = :user_id', array('user_id' => $contribution->get_fixer_id()))->fetch();
Ceci
Code PHP :
PersistenceContext::get_querier()->inject("UPDATE " . DB_TABLE_MEMBER . " SET points = points + 15 WHERE user_id = '" . $contribution->get_poster_id(). "'");
Dans topic.php
A la ligne 404 ajouter ceci:
Code PHP :
// Système des niveaux, pour ajouter un autre niveau voir le tutoriel sur l'ajout d'un niveau sur le forum PHPBoost.com $points = $row['points']; $niveau = 0; if($points > 30 && $points < 80) { $niveau =1; } elseif($points >= 80 && $points < 150) { $niveau = 2; } elseif($points >= 150 && $points <250) { $niveau = 3; } elseif($points >= 250 && $points <500) { $niveau = 4; } elseif($points >= 500 && $points <800) { $niveau = 5; } elseif($points >= 800 && $points <1500) { $niveau = 6; } elseif($points >= 1500 && $points <2500) { $niveau = 7; } elseif($points >= 2500 && $points <3500) { $niveau = 8; } elseif($points >= 3500 && $points <5000) { $niveau = 9; } elseif($points >= 5000 && $points <7000) { $niveau = 10; } else { $niveau = 0; }
Extras
Pour retirer les points de l'utilisateur quand son topic est supprimé, allez dans Forum/forum.class.php
En dessous de la ligne 273 donc en dessous de ça :
Code PHP :
$topic['user_id'] = (int)$topic['user_id'];
Ajoutez ceci
Code PHP :
// Si le sujet est supprimé du forum on retire 15 points à l'auteur du sujet. PersistenceContext::get_querier()->inject("UPDATE " . DB_TABLE_MEMBER . " SET points = points - 15 WHERE user_id = '" . $topic['user_id']. "'"); PersistenceContext::get_querier()->insert('phpboost_historique', array( 'user_id' => ''. $topic['user_id'].'', 'points' => '-15', 'date' => ''. $date->format(Date::FORMAT_DAY_MONTH_YEAR_HOUR_MINUTE_TEXT) .'', 'description' => 'Suppression de votre topic sur le forum.' ));
Édité par Myster Le 21/05/2016 à 10h28
Myster Membre non connecté
Booster Missile
- Booster Missile
- Voir le profil du membre Myster
- Inscrit le : 04/10/2010
- Groupes :
Ce tutoriel ci-dessous vous permet d'ajouter un historique, selon les points que vous gagner ils seront inscrits dans votre historique sous la forme d'un tableau par exemple lorsque vous postez un sujet sur votre forum, vous verrez dans votre historique "Ajout d'un sujet sur le forum" +20 points.
Avant tout exécuter le code sql suivant en modifiant phpboost par le nom de votre préfixe
Code SQL :
CREATE TABLE IF NOT EXISTS `phpboost_historique` ( `id` INT(11) NOT NULL, `user_id` INT(11) NOT NULL, `points` VARCHAR(20) NOT NULL, `description` VARCHAR(255) NOT NULL, `date` VARCHAR(100) NOT NULL ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; ALTER TABLE `phpboost_mickahistorique` MODIFY `id` INT(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=1;
Pour cela nous allons requêter. Alors il suffit d'ouvrir le fichier post.php du module forum.
Juste en dessous de la requête que nous avons fait pour donner des points, je parle de cette requête:
Code PHP :
PersistenceContext::get_querier()->inject("UPDATE " . DB_TABLE_MEMBER . " SET points = points + 15 WHERE user_id = '" . AppContext::get_current_user()->get_id(). "'");
Veuillez ajouter cela:
Code PHP :
PersistenceContext::get_querier()->insert('phpboost_historique', array( 'user_id' => ''. AppContext::get_current_user()->get_id().'', 'points' => '+15', 'date' => ''. $date->format(Date::FORMAT_DAY_MONTH_YEAR_HOUR_MINUTE_TEXT) .'', 'description' => 'Ajout d'un sujet sur le forum' ));
Maintenant nous allons faire pareil mais pour les messages sur forum.
Donc en dessous de cette requête:
Code PHP :
PersistenceContext::get_querier()->inject("UPDATE " . DB_TABLE_MEMBER . " SET points = points + 10 WHERE user_id = '" . AppContext::get_current_user()->get_id(). "'");
Ajoutez ceci:
Code PHP :
PersistenceContext::get_querier()->insert('phpboost_historique', array( 'user_id' => ''. AppContext::get_current_user()->get_id().'', 'points' => '+10', 'date' => ''. $date->format(Date::FORMAT_DAY_MONTH_YEAR_HOUR_MINUTE_TEXT) .'', 'description' => 'Ajout d'un message sur le forum' ));
Maintenant dans le dossier user ouvrez le fichier contribution_panel.php
Sous cette requête:
Code PHP :
PersistenceContext::get_querier()->inject("UPDATE " . DB_TABLE_MEMBER . " SET points = points + 15 WHERE user_id = '" . $contribution->get_poster_id(). "'");
Mettez ceci
Code PHP :
PersistenceContext::get_querier()->inject("UPDATE " . DB_TABLE_MEMBER . " SET points = points + 15 WHERE user_id = '" . $contribution->get_poster_id(). "'"); PersistenceContext::get_querier()->insert('phpboost_historique', array( 'user_id' => ''. AppContext::get_current_user()->get_id().'', 'points' => '+15', 'date' => ''. $date->format(Date::FORMAT_DAY_MONTH_YEAR_HOUR_MINUTE_TEXT) .'', 'description' => 'Contribution au site' ));
Voici le fichier historique.php mettez le où vous voulez:
Code :
<?php
/*This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
###################################################*/
define('PATH_TO_ROOT', '..');
//Début du chargement de l'environnement
include_once('../kernel/init.php');
//Chargement d'un fichier css, ici le fichier css du module news
define('ALTERNATIVE_CSS', 'design');
//Titre de la page, ici Accueil
define('TITLE', 'Historique de vos points');
//Chargement de l'environnement ( header )
require_once('../kernel/header.php');
//Chargement des fichiers de langue et autres
global $LANG, $CONFIG;
if (!AppContext::get_current_user()->check_level(User::MEMBER_LEVEL))
{
echo '<div class="question">Vous n'avez pas le niveau requis ! </div>';
}
else
{
?>
<?php
$req_history = PersistenceContext::get_querier()->select("SELECT id,user_id, points, date, description
FROM " . PREFIX . "historique WHERE user_id = '". AppContext::get_current_user()->get_id()."'ORDER by id DESC LIMIT 0,20");
?>
<p>Cette page vous permet de consulter les 20 dernières entrées de votre historique de points </p>
<table class="formatter-table">
<tbody><tr class="formatter-table-row">
<th class="formatter-table-head" colspan="3">Historique de vos points</th>
<tr class="formatter-table-row">
<td class="formatter-table-col">Points</td>
<td class="formatter-table-col">Date</td>
<td class="formatter-table-col">Description</td>
</tr>
<?php
while ($row = $req_history->fetch())
{
echo '</tr><tr class="formatter-table-row">';
echo '<td class="formatter-table-col">' . $row['points'] . '</td>';
echo '<td class="formatter-table-col">' . $row['date'] . '</td>';
echo '<td class="formatter-table-col">' . $row['description'] . '</td>';
echo '</tr>';
}
echo '</tbody></table>';
?>
<?php
}
include_once('../kernel/footer.php');
?>
Édité par Myster Le 21/05/2016 à 15h46
Myster Membre non connecté
Booster Missile
- Booster Missile
- Voir le profil du membre Myster
- Inscrit le : 04/10/2010
- Groupes :
Rajout de dernière minute à faire pour TOUT LE MONDE
Remplacer admin_points.php
par : http://pastebin.com/WFhinu3A
Puis dans user/contribution_panel
Ajoutez
Code PHP :
$date = new Date();
Juste au dessus de la requête que nous avons fait plus haut
Édité par Myster Le 20/05/2016 à 11h59
benflovideo Membre non connecté
- Modérateur
- Voir le profil du membre benflovideo
- Inscrit le : 13/03/2010
- Groupes :
- Equipe Modération
- Equipe Communication
Personnellement je n'en ai pas besoin, mais merci pour le partage et les tutoriels très clairs que tu mets à disposition
Par contre le soucis c'est pour les futurs MAJ non ?
Benji
Myster Membre non connecté
Booster Missile
- Booster Missile
- Voir le profil du membre Myster
- Inscrit le : 04/10/2010
- Groupes :
Et malheureusement oui :S j'ai pas trouver comment requêter le forum sans passer par le fichier post.php :/
Mais bon c'est seulement les requêtes qui seront à remettre et ça va vite y'en a que quelques unes en 3 minutes c'est fait
MickaelFR Membre non connecté
Booster Fusée
- Booster Fusée
- Voir le profil du membre MickaelFR
- Inscrit le : 20/01/2014
- Site internet
- Groupes :
Myster Membre non connecté
Booster Missile
- Booster Missile
- Voir le profil du membre Myster
- Inscrit le : 04/10/2010
- Groupes :
Si la mise à jour de PHPBoost remplace le fichier post.php de forum, il faudra simplement replacer les requêtes du fichier post.php en suivant le tuto ci-dessus, mais comme dis y'en a pour 3 minutes même pas
MickaelFR Membre non connecté
Booster Fusée
- Booster Fusée
- Voir le profil du membre MickaelFR
- Inscrit le : 20/01/2014
- Site internet
- Groupes :
MickaelFR Membre non connecté
Booster Fusée
- Booster Fusée
- Voir le profil du membre MickaelFR
- Inscrit le : 20/01/2014
- Site internet
- Groupes :
Premier soucis, la requête ne fonctionne pas
Code SQL :
Requête SQL : CREATE TABLE IF NOT EXISTS \phpboost_member\ ( \points\ INT(11) NOT NULL DEFAULT '0', ) ENGINE=MyISAM DEFAULT CHARSET=latin1 MySQL a répondu: Documentation #1064 - You have an error IN your SQL syntax; CHECK the manual that corresponds TO your MariaDB server version FOR the RIGHT syntax TO USE near '\phpboost_member\ ( \points\ INT(11) NOT NULL DEFAULT '0', ) ENGINE=MyISAM ' at line 1
benflovideo Membre non connecté
- Modérateur
- Voir le profil du membre benflovideo
- Inscrit le : 13/03/2010
- Groupes :
- Equipe Modération
- Equipe Communication
Connectes toi à phpmyadmin et exécute la requête sans modification sur la base de données.
Benji
MickaelFR Membre non connecté
Booster Fusée
- Booster Fusée
- Voir le profil du membre MickaelFR
- Inscrit le : 20/01/2014
- Site internet
- Groupes :
Myster Membre non connecté
Booster Missile
- Booster Missile
- Voir le profil du membre Myster
- Inscrit le : 04/10/2010
- Groupes :
MickaelFR Membre non connecté
Booster Fusée
- Booster Fusée
- Voir le profil du membre MickaelFR
- Inscrit le : 20/01/2014
- Site internet
- Groupes :
Code SQL :
Requête SQL : CREATE TABLE IF NOT EXISTS \phpboost_member\ ( \points\ INT(11) NOT NULL DEFAULT '0', ) ENGINE=MariaDB DEFAULT CHARSET=latin1 MySQL a répondu: Documentation #1064 - You have an error IN your SQL syntax; CHECK the manual that corresponds TO your MariaDB server version FOR the RIGHT syntax TO USE near '\phpboost_member\ ( \points\ INT(11) NOT NULL DEFAULT '0', ) ENGINE=MariaDB ' at line 1
MickaelFR Membre non connecté
Booster Fusée
- Booster Fusée
- Voir le profil du membre MickaelFR
- Inscrit le : 20/01/2014
- Site internet
- Groupes :
Code PHP :
Notice : Undefined variable: date [0] /forum/post.php:488 Fatal error: Call to a member function format() on null in /home/myster/www/mickael/forum/post.php on line 488
Myster Membre non connecté
Booster Missile
- Booster Missile
- Voir le profil du membre Myster
- Inscrit le : 04/10/2010
- Groupes :
On va faire autrement, dans la table member créer une colonne qui s'appelle "points" en INT 11
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie