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