#::::::::::::::::::::::::::::::::::::::::
#::::::::::::::::::::::::::::::::::::::::
# Nom du snippet : MemberCheck
# Description : Teste à quel groupe d'utilisateur appartient l'utilisateur courant et retourne un chunk si la condition est vérifiée
# Version : 1.0
# Créé par Ryan Thrash (vertexworks.com)
# Optimisé Par Jason Coward (opengeek.com)
#
# Date : 29 Novembre 2005
#
# Changelog :
# 29 Nov 05 -- sortie de la 1ere version
#
#::::::::::::::::::::::::::::::::::::::::
# Description :
# Vérifie si les utilisateurs appartienent à un certain groupe et
# Checks to see if users belong to a certain group and
# affiche le chunk spécifié si la condition est vérifiée. Effectue plusieurs
# displays the specified chunk if they do. Performs several
# tests et autorise à être utilisé plusieurs fois sur une page
# sanity checks and allows to be used multiple times on a page.
#
# Paramètres :
# &groups [array] (REQUIS)
# nom des groupes à vérifier
# array of webuser group-names to check against
#
# &chunk [string] (REQUIS)
# nom du chunk à utiliser si la vérification est réussie
# name of the chunk to use if passes the check
#
# &ph [string] (optionel)
# nom du placeholder à mettre plutôt que renvoyer directement un chunk
#
# &debug [boolean] (optionnel | false)
# active le mode de débogage pour une meilleure correction d'erreurs
# turn on debug mode for extra troubleshooting
#
# Exemple d'Utilisation :
#
# [[MemberCheck? &groups=`siteadmin, registered users` &chunk=`privateSiteNav` &ph=`MemberMenu` &debug=`true`]]
#
# Ce devrait placer la navigation 'members-only' stockée dans le chunk 'privateSiteNav'
# dans un placeholder (appelé 'MemberMenu'). Ce devrait faire ceci aussi longtemps que l'utilisateur
# est authentifié comme un membre et qu'il est membre du groupe 'siteadmin' ou 'registered users'.
# Le paramètre optionnel de débogage peut être utilisé pour afficher des messages d'erreur informatifs
# quand vous configurez ce snippet pour votre site. Par exemple, si le dévellopeur a
# malencontreusement tapé 'siteowners' pour le premier groupe, et qu'il n'existe pas, avec le mode de débogage activé,
# ce message d'erreur devrait être retourné: Le groupe siteowners n'a pas pu être trouvé ...
#
#::::::::::::::::::::::::::::::::::::::::
# debug parameter
$debug = isset($debug)? $debug: false;
# check if inside manager
if ($m = $modx->insideManager()) {
return ''; # don't go any further when inside manager
}
if(!isset($groups)) {
return $debug? '<p>Erreur: Aucun Groupe Spécifié</p>': '';
}
if(!isset($chunk)) { return $debug? '<p>Erreur: Aucun Chunk Spécifié</p>': ''; }
# turn comma-delimited list of groups into an array
$groups = explode(',', $groups);
if (!class_exists('MemberCheck')) {
class MemberCheck {
static $instance = NULL;
var $allGroups = NULL;
var $debug;
function getInstance($debug=false) {
global $modx;
if (self::$instance == NULL) {
self::$instance= new MemberCheck($debug);
}
return self::$instance;
}
function MemberCheck($debug=false) {
global $modx;
$this->debug= $debug;
if ($debug) {
$this->allGroups= array();
$tableName= $modx->getFullTableName('webgroup_names');
$sql= "SELECT name FROM $tableName";
if ($rs= $modx->db->query($sql)) {
while ($row= $modx->db->getRow($rs)) {
array_push($this->allGroups, stripslashes($row['name']));
}
}
}
}
function isValidGroup($groupName) {
$isValid = !(array_search($groupName, $this->allGroups)===false);
return $isValid;
}
function getMemberChunk(&$groups,$chunk) {
global $modx;
$o= '';
if (is_array($groups)) {
for ($i=0; $i<count($groups); $i++) {
$groups[$i]= trim($groups[$i]);
if ($this->debug) {
if (!$this->isValidGroup($groups[$i])) return "<p>Le groupe <strong>" . $groups[$i] . "</strong> n'a pas pu être trouvé...</p>";
}
}
$check = $modx->isMemberOfWebGroup($groups);
$chunkcheck = $modx->getChunk($chunk);
$o.= ($check && $chunkcheck)? $chunkcheck : '';
if (!$chunkcheck) $o.= $this->debug? "<p>Le chunk <strong>$chunk</strong> n'a pas été trouvé...</p>": '';
} else {
$o.= "<p>Aucun noms de groupe valides n'ont été spécifiés!</p>";
}
return $o;
}
}
}
$memberCheck= MemberCheck::getInstance($debug);
return $memberCheck->getMemberChunk($groups, $chunk);
