Easy-Design.Net forum




Aide générale [PBT V5] Faire un système de points avec niveaux

Myster Membre non connecté

EDN Enraciné(e)

Rang

Avatar

Inscrit le : 19/01/2011 à 16h42

Messages: 871

Le 19/05/2016 à 20h25
Bonsoir,

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
Code HTML :
<p class="left">Points: {msg.POINTS}</p>

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;
}
   
Myster Membre non connecté

EDN Enraciné(e)

Rang

Avatar

Inscrit le : 19/01/2011 à 16h42

Messages: 871

Le 19/05/2016 à 20h26
Ajout d'un historique des points
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 user_id, points, date, description
        FROM " . PREFIX . "historique WHERE user_id = '".  AppContext::get_current_user()->get_id()."' ORDER by id DESC LIMIT 0,20");
            $req_history  = PersistenceContext::get_querier()->select_rows(PREFIX . '
historique', array('user_idpointsdescriptiondate'), 'WHERE user_id = :id', array('id' => AppContext::get_current_user()->get_id()));
?>
<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');
?>
   
Myster Membre non connecté

EDN Enraciné(e)

Rang

Avatar

Inscrit le : 19/01/2011 à 16h42

Messages: 871

Le 19/05/2016 à 20h26

Rajout de dernière minute à faire pour TOUT LE MONDE



Remplacer admin_points.php

par : http://pastebin.com/VFpGZVG0

Puis dans user/contribution_panel
Ajoutez

Code PHP :
$date = new Date();
 


Juste au dessus de la requête que nous avons fait plus haut :)
   
m-ickael Membre non connecté

EDN Maitre-Sage

Rang

Avatar

Inscrit le : 23/02/2010 à 09h15

Messages: 2296

Le 19/05/2016 à 21h01
Merci beaucoup :top
Swan Membre non connecté

Administrateur

Rang

Avatar

Inscrit le : 01/08/2009 à 22h53

Messages: 8431

Le 20/05/2016 à 10h48
Bonjour,

Franchement pas mal ^^
Pour le mettre dans les extras, est ce que tu peux me faire un screen après mise en place Myster ?

merci pour tes contributions ;)

Swan.


swan_signature

Site web    
Myster Membre non connecté

EDN Enraciné(e)

Rang

Avatar

Inscrit le : 19/01/2011 à 16h42

Messages: 871

Le 20/05/2016 à 13h03
Merci Swan,

Oui je fais faire en screen mais j'y apporte des améliorations et modification je posterais plus tard un extras pour l'échange de points entre membres et le fameux système de coupons que j'ai mis en place sur mon site :)
   
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie