#:::::::::::::::::::::::::::::::::::::::: # Snippet name: MemberCheck # Short Desc: checks logged in groups and displays chunks # Version: 1.0 # Created By Ryan Thrash (vertexworks.com) # Sanitized By Jason Coward (opengeek.com) # # Date: November 29, 2005 # # Changelog: # Nov 29, 05 -- initial release # #:::::::::::::::::::::::::::::::::::::::: # Description: # Checks to see if users belong to a certain group and # displays the specified chunk if they do. Performs several # sanity checks and allows to be used multiple times on a page. # # Params: # &groups (REQUIRED) # array of group names to check agains list. # # &chunk (REQUIRED) # name of the chunk to display # # &ph (optional) # name of the placeholder to set instead of directly retuning output # # &debug (optional) # turn on debug mode for extra troubleshooting # # Example Usage: # # [[MemberCheck? &groups=`siteadmin, registered users` &chunk=`privateSiteNav` &ph=`MemberMenu` &debug=`true`]] # # This would place the 'members-only' navigation store in the chunk 'privateSiteNav' # into a placeholder (called 'MemberMenu'). It will only do this as long as the user # is logged in as a webuser and is a member of the 'siteadmin' or the 'registered users' # groups. The optional debug parameter can be used to display informative error messages # when configuring this snippet for your site. For example, if the developer had # mistakenly typed 'siteowners' for the first group, and none existed with debug mode on, # it would have returned the error message: The group siteowners could not be found.... # #:::::::::::::::::::::::::::::::::::::::: # 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? '

Error: No Group Specified

': ''; } if(!isset($chunk)) { return $debug? '

Error: No Chunk Specified

': ''; } # 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; $idebug) { if (!$this->isValidGroup($groups[$i])) return "

The group " . $groups[$i] . " could not be found...

"; } } $check = $modx->isMemberOfWebGroup($groups); $chunkcheck = $modx->getChunk($chunk); $o.= ($check && $chunkcheck)? $chunkcheck : ''; if (!$chunkcheck) $o.= $this->debug? "

The chunk $chunk not found...

": ''; } else { $o.= "

No valid group names were specified!

"; } return $o; } } } $memberCheck= MemberCheck::getInstance($debug); return $memberCheck->getMemberChunk($groups, $chunk);