Discussion

18/09/2021 à 15h03 : m-ickael : Bonjour, bon weekend !

13/09/2021 à 11h07 : Swan : Bonjour à tous et bon dimanche ;)

11/09/2021 à 16h45 : m-ickael : Bonjour :)

10/09/2021 à 08h33 : Swan : Bonjour tout le monde ^^ N'oubliez pas, si besoin je suis sur le discord ;)

31/08/2021 à 11h38 : Swan : Bonjour tout le monde :lu La rentrée approche ;)

16/08/2021 à 17h40 : m-ickael : Bonne semaine !

15/08/2021 à 11h56 : Swan : Bon week end à tous :)

13/08/2021 à 11h43 : Swan : Salut tout le monde :sun

11/08/2021 à 17h52 : m-ickael : Salut.

11/08/2021 à 11h50 : Swan : Et merci encore une fois à Xtian ;)

11/08/2021 à 11h40 : Swan : Salut à tous les Aoutiens et Aoutiennes !! On va devoir faire la prière du Soleil cette année !!

10/07/2021 à 07h42 : m-ickael : Mais oui :) Tu connais la marmotte et le papier alu ?

09/07/2021 à 02h33 : NK-aide : rigole bien regarder les infos dans un peux moins de 15 jours :po-de-bol bientôt l'injection à la pisse ( chaque injection = sont variants * agent pathogène *) méditer :partage

08/07/2021 à 20h25 : m-ickael : Il parait (et visiblement), ça n'arrange pas les gens .. :rire

07/07/2021 à 16h23 : NK-aide : :coeur1 coucou la famille j'espère que tout le monde va bien en cette période troublé du virus l'injection qui infecte & de la division politique instrumentalisé par l'union européen a des fin pur de garder les riche + riche et les pauvre encore plus pauvre pour garder une pseudo démocratie digne d'un cartel mondial.

10/06/2021 à 19h53 : m-ickael : Bonjour

08/06/2021 à 12h15 : Nico_Las : Bonjour à tous

06/06/2021 à 11h10 : Swan : Bonjour à tous^^ et bon mois de Juin !

25/05/2021 à 21h22 : m-ickael : Bonjour :)

17/05/2021 à 13h13 : Swan : Bonjour tout le monde ^^ Théo D je te remercie d'avoir testé mon système de don: €0,01 EUR :ok

09/05/2021 à 09h28 : m-ickael : Bonjour :)

05/05/2021 à 09h49 : Swan : Bonjour tout le monde :fleur

02/05/2021 à 11h20 : Swan : Bon 1er mai à tous :) :nat0

29/04/2021 à 11h27 : Swan : :lu Bonjour tout le monde ^^

20/04/2021 à 21h32 : m-ickael : Bonjour

20/04/2021 à 17h53 : Swan : Coucou tout le monde ^^

18/04/2021 à 14h14 : m-ickael : Bonjour :)

15/04/2021 à 11h46 : Swan : Bonjour à tous ;)

11/04/2021 à 11h23 : Swan : Salut !! Bon dimanche à tous ^^

07/04/2021 à 12h32 : m-ickael : Bonjour :top

05/04/2021 à 15h03 : Swan : Youhou !! Joyeuses Pâques !!! :D

04/04/2021 à 16h09 : m-ickael : Bonjour.

04/04/2021 à 11h58 : Swan : Coucou tout le monde ^^ :coin3

03/04/2021 à 17h22 : m-ickael : Bonjour :)

28/03/2021 à 10h47 : Swan : Bonjour tout le monde ^^

04/03/2021 à 21h45 : m-ickael : Moi il est là :D

02/03/2021 à 11h37 : Swan : Il est ou le soleil !!! il est ouuUUUuuu ??? :rire

01/03/2021 à 22h47 : Swan : Bon 1er Mars à tous ;)

27/02/2021 à 07h48 : m-ickael : Bonjour

26/02/2021 à 11h16 : Swan : :lu Bonjour tout le monde ^^ Ce soir week end !!

23/02/2021 à 10h50 : Swan : Salut tout le monde ^^ On est toujours là hein !! ;)

07/02/2021 à 08h33 : m-ickael : :)

06/02/2021 à 11h38 : Swan : Bonjour tout le monde :lu Merci Mickael ^^

04/02/2021 à 18h22 : m-ickael : Salut. Long à charger par moment, mais oui ça marche :)

03/02/2021 à 08h28 : Swan : Salut !! Migration sur la 5.2 de Pbt en cours ;)

30/01/2021 à 13h20 : Swan : Salut tout le monde dites moi le site fonctionne correctement ?

22/01/2021 à 16h42 : m-ickael : :(

22/01/2021 à 11h07 : Swan : Bonjour à tous, on a vraiment le moral au ras des pâquerettes... :dehors2

21/01/2021 à 13h15 : Swan : Salut tout le monde ^^ Jour de pluie , jour heureux ??

14/01/2021 à 16h57 : m-ickael : :top

Vous n'êtes pas autorisé à ajouter un message !




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

 Le 19/05/2016 à 20h25 Myster Avatar  
 


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;
}

EDN Enraciné(e)


 Le 19/05/2016 à 20h26 Myster Avatar  
 


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');
?>

EDN Enraciné(e)


 Le 19/05/2016 à 20h26 Myster Avatar  
 


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 :)

EDN Enraciné(e)


 Le 19/05/2016 à 21h01 m-ickael Avatar  
 


Merci beaucoup :top

EDN Maitre-Sage


 Le 20/05/2016 à 10h48 Swan Avatar  
 


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.


Administrateur


 Le 20/05/2016 à 13h03 Myster Avatar  
 


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 :)

EDN Enraciné(e)


Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie
Qui est en ligne ?

Qui est en ligne ?

Au total il y a 1 Utilisateur en ligne :: 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
( basées sur les utilisateurs actifs des 5 dernières minutes )
Utilisateur en ligne: Aucun membre connecté

Membres connectés au cours des dernières 24 heures:

m-ickael,

Légende

 [ Administrateur(s) ]   [ Modérateur(s) ]   [ Helpers]   [ WebDesigner(s) ]   [ Membres ]