You must be registered for see images attach
Hey !

Voici la quatrième partie tutoriel qui va vous apprendre à créer un registre des membres bannis de la Shoutbox.
Première partie
Seconde partie
Troisième partie
Quatrième partie
Dans la quatrième partie, nous avions étendu la fonction du bannissement pour faire en que l'utilisateur banni soit ajouté dans notre table sur la BDD !
Dans cette partie, nous allons lister tous les membres bannis

Pour ce faire, ré-ouvrons notre fichier Shoutbox.php qui se trouve dans le dossier ControllerPublic et ajoutons y une deux nouvelles fonctions et modifier notre première fonction pour ajouter une petite sécurité :
PHP:
public function actionBan()
{
$response = parent::actionBan();
if (isset($response->redirectType) && $response->redirectType == XenForo_ControllerResponse_Redirect::SUCCESS)
{
$taigamodel = $this->_getTaigaChatModel();
$banModel = $this->_getBanModel();
$messageId = $this->_input->filterSingle('id', XenForo_Input::UINT);
$message = $taigamodel->getMessageById($messageId);
$bannedUsersIds = $banModel->getBannedUsersIds();
if (!in_array($message['user_id'], $bannedUsersIds))
{
$dw = XenForo_DataWriter::create('BannedShoutboxMembers_DataWriter_Shoutbox');
$dw->set('banned_user_id', $message['user_id']);
$dw->save();
}
}
return $response;
}
public function actionMembresBannis()
{
$banModel = $this->_getBanModel();
$page = $this->_input->filterSingle('page', XenForo_Input::UINT);
$perPage = 15;
$totalBans = $banModel->countBans();
$bannedUsers = $banModel->getAllBans(array(
'page' => $page,
'perPage' => $perPage
));
foreach ($bannedUsers AS &$bannedUser)
{
$userModel = XenForo_Model::create('XenForo_Model_User');
$bannedUser['ban_username'] = $userModel->getUserById($bannedUser['ban_user_id'])['username'];
}
$viewParams = array(
'bannedUsers' => $bannedUsers,
'page' => $page,
'perPage' => $perPage,
'totalBans' => $totalBans
);
return $this->responseView('BannedShoutboxMembers_ViewPublic_Shoutbox_BannedMembers', 'shoutbox_membres_bannis', $viewParams);
}
protected function _getBanModel()
{
return $this->getModelFromCache('BannedShoutboxMembers_Model_Shoutbox');
}
Quelques explications :
- $banModel = On récupère le Model
- getBannedUsersIds = On récupère les IDs des utilisateurs bannis, cette fonction n'existe pas, nous allons l'ajouter
- if (!in_array($message['user_id'], $bannedUsersIds)) = On exécute la suite du code si l'utilisateur n'apparaît pas dans notre table, donc s'il n'est pas déjà banni
- $page = On compte à quelle page le visiteur est
- $perPage = Nombre de bannissements par page, ici j'ai forcé la valeur sur 15
- $totalBans = On compte le nombre total de bannissements. La fonction n'existe pas encore dans notre Model mais nous allons l'ajouter
- $bannedUsers = On récupère tous les utilisateurs bannis en ajoutant comme paramètre, le nombre de bannissements que l'on souhaite afficher par page, et le numéro de la page à laquelle le visiteur est
- $viewParams = On récupère dans un array() les variables que l'ont veut utiliser dans notre futur template
- shoutbox_membres_bannis = Nom du template à afficher, il n'existe pas encore mais nous allons le créer !
Sauvegardez !
Le fichier complet devrait ressembler à ceci :
Le fichier complet devrait ressembler à ceci :
PHP:
<?php
class BannedShoutboxMembers_ControllerPublic_Shoutbox extends XFCP_BannedShoutboxMembers_ControllerPublic_Shoutbox
{
public function actionBan()
{
$response = parent::actionBan();
if (isset($response->redirectType) && $response->redirectType == XenForo_ControllerResponse_Redirect::SUCCESS)
{
$taigamodel = $this->_getTaigaChatModel();
$banModel = $this->_getBanModel();
$messageId = $this->_input->filterSingle('id', XenForo_Input::UINT);
$message = $taigamodel->getMessageById($messageId);
$bannedUsersIds = $banModel->getBannedUsersIds();
if (!in_array($message['user_id'], $bannedUsersIds))
{
$dw = XenForo_DataWriter::create('BannedShoutboxMembers_DataWriter_Shoutbox');
$dw->set('banned_user_id', $message['user_id']);
$dw->save();
}
}
return $response;
}
public function actionMembresBannis()
{
$banModel = $this->_getBanModel();
$page = $this->_input->filterSingle('page', XenForo_Input::UINT);
$perPage = 15;
$totalBans = $banModel->countBans();
$bannedUsers = $banModel->getAllBans(array(
'page' => $page,
'perPage' => $perPage
));
foreach ($bannedUsers AS &$bannedUser)
{
$userModel = XenForo_Model::create('XenForo_Model_User');
$bannedUser['ban_username'] = $userModel->getUserById($bannedUser['ban_user_id'])['username'];
}
$viewParams = array(
'bannedUsers' => $bannedUsers,
'page' => $page,
'perPage' => $perPage,
'totalBans' => $totalBans
);
return $this->responseView('BannedShoutboxMembers_ViewPublic_Shoutbox_BannedMembers', 'shoutbox_membres_bannis', $viewParams);
}
protected function _getBanModel()
{
return $this->getModelFromCache('BannedShoutboxMembers_Model_Shoutbox');
}
}
Maintenant, ouvrons le fichier Shoutbox.php mais qui celui-ci se trouve dans le dossier Model, et on y ajoute la fameuse fonction qui va compter tous les bannissements :
PHP:
public function getBannedUsersIds()
{
return $this->_getDb()->fetchCol('
SELECT banned_user_id
FROM banned_shoutbox_members
');
}
public function countBans()
{
return $this->_getDb()->fetchOne('
SELECT COUNT(*)
FROM banned_shoutbox_members
');
}
Sauvegardez le fichier 
Le fichier sera donc comme ceci :
Le fichier sera donc comme ceci :
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']
));
}
public function getBannedUsersIds()
{
return $this->_getDb()->fetchCol('
SELECT banned_user_id
FROM banned_shoutbox_members
');
}
public function countBans()
{
return $this->_getDb()->fetchOne('
SELECT COUNT(*)
FROM banned_shoutbox_members
');
}
}
Il ne nous manque plus que le template !
Pour ce faire, il va falloir créer un nouveau template, on accède facilement au formulaire de création d'un template via ce lien : admin.php?templates/add&style_id=0
Faîtes attention, il faut que style_id soit égal à 0, car 0 est le Style Maître !
Nom du template : shoutbox_membres_bannis
Contenu du template :
Pour ce faire, il va falloir créer un nouveau template, on accède facilement au formulaire de création d'un template via ce lien : admin.php?templates/add&style_id=0
Faîtes attention, il faut que style_id soit égal à 0, car 0 est le Style Maître !
Nom du template : shoutbox_membres_bannis
Contenu du template :
HTML:
<xen:title>Membres Bannis de la Shoutbox</xen:title>
<xen:pagenav link="taigachat/membres-bannis" page="{$page}" perpage="{$perPage}" total="{$totalBans}" />
<xen:if is="{$bannedUsers}">
<xen:foreach loop="$bannedUsers" value="$bannedUser">
<xen:include template="shoutbox_membres_bannis_item" />
</xen:foreach>
<xen:else />
Pas de membres bannis pour le moment.
</xen:if>
<xen:pagenav link="taigachat/membres-bannis" page="{$page}" perpage="{$perPage}" total="{$totalBans}" />
Addon : Membres bannis de la shoutbox
On créé un autre template :
Nom du template : shoutbox_membres_bannis_item
Contenu du template :
On créé un autre template :
Nom du template : shoutbox_membres_bannis_item
Contenu du template :
HTML:
<xen:require css="xenforo_member_list_item.css" />
<li class="primaryContent memberListItem">
<xen:avatar user="$bannedUser" size="s" />
<div class="member">
<h3 class="username"><xen:username user="$bannedUser" rich="true" class="StatusTooltip" title="{xen:helper snippet, $bannedUser.status, 0, {xen:array 'stripPlainTag=1'}}" /></h3>
<div class="userInfo">
<div class="userBlurb dimmed">{xen:helper userBlurb, $bannedUser}</div>
<dl class="userStats pairsInline">
<dt>Banni par:</dt> <dd>{$bannedUser.ban_username}</dd>
<dt>Banni le:</dt> <dd><xen:datetime time="$bannedUser.date" /></dd>
</dl>
</div>
</div>
</li>
Je n'expliquerais rien sur les codes du template !
A vous de le modifier à votre guise pour faire votre propre CSS etc...
Et bah voilà ! Nous avons notre liste des membres bannis accessibles via ce lien : index.php?taigachat/membres-bannis
Dans la prochaine partie, la dernière sûrement
; nous allons :
A vous de le modifier à votre guise pour faire votre propre CSS etc...
Et bah voilà ! Nous avons notre liste des membres bannis accessibles via ce lien : index.php?taigachat/membres-bannis
Dans la prochaine partie, la dernière sûrement

- Faire en sorte que l'utilisateur disparaisse de la liste une fois débanni !
© Good Topic Premium 2015 - Walky GTP