[XENFORO] Faire un registre des membres bannis de la shoutbox (#3)

Statut
N'est pas ouverte pour d'autres réponses.

Walky 🇫🇷

Cryptoboy
Ancien staff
Inscription
18 Octobre 2012
Messages
1 278
Réactions
1 188
Points
23 400
RGCoins
45
You must be registered for see images attach


Hey :neo:

Voici la troisième partie tutoriel qui va vous apprendre à créer un registre des membres bannis de la Shoutbox.

Première partie
Seconde partie

Dans la seconde partie, nous avions créer notre fichier d'Installation, maintenant nous allons nous occuper de la fonction va nous permettre d'ajouter un membre banni dans la table que nous avons déjà créée.

Tout d'abord, il va nous falloir créer un nouveau dossier que nous allons nommé DataWriter.
Je vous rappelle que ce dossier doit être créé dans le dossier BannedShoutboxMembers, que nous avons créé dans la première partie.

Et dans ce dossier (DataWriter), nous allons créé un fichier PHP nommé Shoutbox.php
Ouvrons le.

On va donc y insérer la base :​
PHP:
<?php
Pour ensuite y ajouter notre class que l'on va étendre :​
PHP:
class BannedShoutboxMembers_DataWriter_Shoutbox extends XenForo_DataWriter
On étend notre class par une class "mère" de XenForo pour pouvoir utiliser ses fonctions et les attribués à notre addon.

On va maintenant définir une protected function qui va récupérer les champs de notre table :​
PHP:
protected function _getFields()
{
    $visitor = XenForo_Visitor::getInstance();
    return array(
        'banned_shoutbox_members' => array(
            'ban_id'      => array('type' => self::TYPE_UINT, 'autoIncrement' => true),
            'banned_user_id' => array('type' => self::TYPE_UINT, 'required' => true),
            'ban_user_id'      => array('type' => self::TYPE_UINT, 'required' => true, 'default' => $visitor['user_id']),
            'ban_date'     => array('type' => self::TYPE_UINT, 'required' => true, 'default' => XenForo_Application::$time)
        )
    );
}
Je ne pense pas avoir besoin d'expliquer, il suffit d'être assez bon en anglais pour comprendre (autoIncrement, default, required)​
  • $visitor = On récupère les données du membre connecté.
  • banned_shoutbox_members = Nom de notre table dans la BDD.
  • ban_id | banned_user_id | ban_user_id | ban_date = Tous les champs de notre table.
  • XenForo_Application::$time = Horaire actuel en Unix TimeStamp.
Et on va ensuite y ajouter 3 nouvelles fonctions :​
PHP:
protected function _getExistingData($data)
{
    if (!$id = $this->_getExistingPrimaryKey($data, 'ban_id'))
    {
        return false;
    }

    return array('banned_shoutbox_members' => $this->_getShoutboxBanModel()->getBanById($id));
}
protected function _getUpdateCondition($tableName)
{
    return 'ban_id = ' . $this->_db->quote($this->getExisting('ban_id'));
}
protected function _getShoutboxBanModel()
{
    return $this->getModelFromCache('BannedShoutboxMembers_Model_Shoutbox');
}
Comme nous pouvons le voir, nous avons une fonction getBanById(), qui n'existe pas pour l'instant mais que nous allons l'ajouter plus tard...

Le fichier complet :​
PHP:
<?php

class BannedShoutboxMembers_DataWriter_Shoutbox extends XenForo_DataWriter
{
    protected function _getFields()
    {
       $visitor = XenForo_Visitor::getInstance();
        return array(
            'banned_shoutbox_members' => array(
                'ban_id'      => array('type' => self::TYPE_UINT, 'autoIncrement' => true),
                'banned_user_id' => array('type' => self::TYPE_UINT, 'required' => true),
                'ban_user_id'      => array('type' => self::TYPE_UINT, 'required' => true, 'default' => $visitor['user_id']),
                'ban_date'     => array('type' => self::TYPE_UINT, 'required' => true, 'default' => XenForo_Application::$time)
            )
        );
    }
    protected function _getExistingData($data)
    {
        if (!$id = $this->_getExistingPrimaryKey($data, 'ban_id'))
        {
            return false;
        }

        return array('banned_shoutbox_members' => $this->_getShoutboxBanModel()->getBanById($id));
    }
    protected function _getUpdateCondition($tableName)
    {
        return 'ban_id = ' . $this->_db->quote($this->getExisting('ban_id'));
    }
    protected function _getShoutboxBanModel()
    {
        return $this->getModelFromCache('BannedShoutboxMembers_Model_Shoutbox');
    }
}

Sauvegardez le fichier.

Maintenant, on va créer notre fonction getBanById() pour éviter une erreur.
Pour ce faire on va donc créer un autre dossier dans BannedShoutboxMembers, que l'on va appeler : Model.

Et on va ensuite créer un fichier PHP, Shoutbox.php.
Ouvrons le et insérons y la base (comme toujours) :​
PHP:
<?php
On va ensuite faire comme pour le DataWriter, on va étendre notre class par une class "mère" de XenForo :​
PHP:
class BannedShoutboxMembers_Model_Shoutbox extends XenForo_Model
Ensuite, on va créer notre fonction getBanById(), comme nous l'avons mise dans notre DataWriter :​
PHP:
public function getBanById($banId)
{
    return $this->_getDb()->fetchRow('
        SELECT *
        FROM banned_shoutbox_members AS ban
        LEFT JOIN xf_user AS user ON
            (user.user_id = ban.banned_user_id)
        WHERE ban.ban_id = ?
    ', $banId);
}
  • $banId = ID du bannissement
  • SELECT * = Sélection de tous les champs
  • FROM banned_shoutbox_members AS ban = Sélection des champs depuis notre table dans la BDD
  • LEFT JOIN xf_user AS user ON (user.user_id = ban.banned_user_id) = On joint la table xf_user (existe de base)
  • WHERE ban.ban_id = ? = On sélectionne le bannissement en fonction de son ID.
On va aussi y ajouter une fonction qui va nous permettre de récupérer tous les bannissements pour les afficher sur une page :
PHP:
public function getAllBans(array $fetchOptions = array())
{
    $limitOptions = $this->prepareLimitFetchOptions($fetchOptions);
 
    return $this->_getDb()->fetchAll($this->limitQueryResults('
        SELECT *
        FROM banned_shoutbox_members AS ban
        LEFT JOIN xf_user AS user ON
            (user.user_id = ban.banned_user_id)
        ', $limitOptions['limit'], $limitOptions['offset']
    ));
}
  • getAllBans = On récupère tous les bannissements
  • $limitOptions = Pour ajouter une limite à notre liste qui sera affichée (nous allons faire un système de pagination)
Le fichier complet :​
PHP:
<?php

class BannedShoutboxMembers_Model_Shoutbox extends XenForo_Model
{
    public function getBanById($banId)
    {
       return $this->_getDb()->fetchRow('
            SELECT *
            FROM banned_shoutbox_members AS ban
            LEFT JOIN xf_user AS user ON
               (user.user_id = ban.banned_user_id)
            WHERE ban.ban_id = ?
        ', $banId);
    }
    public function getAllBans(array $fetchOptions = array())
    {
       $limitOptions = $this->prepareLimitFetchOptions($fetchOptions);
   
       return $this->_getDb()->fetchAll($this->limitQueryResults('
           SELECT *
            FROM banned_shoutbox_members AS ban
            LEFT JOIN xf_user AS user ON
               (user.user_id = ban.banned_user_id)
           ', $limitOptions['limit'], $limitOptions['offset']
        ));
    }
}
NOTE : Ce fichier subira des modifications ultérieurement ;)

Sauvegardez :D

C'est ainsi que s'achève cette troisième partie :D
La quatrième partie arrive :espion: ...

© Good Topic Premium 2015 - Walky GTP
 
Dernière édition:
Sinon pour éviter de t'embêter avec une table etc., tu peux lister les membres qui n'ont pas la permission de voir la shoutbox :p
 
Sinon pour éviter de t'embêter avec une table etc., tu peux lister les membres qui n'ont pas la permission de voir la shoutbox :p
Oui mais je trouve ça plus propre de faire avec une table :p
 
Statut
N'est pas ouverte pour d'autres réponses.
Retour
Haut