 |
|
|
07-16-2008, 01:15 PM
|
Looking for some one who knows php
|
Posts: 94
|
Guys I have gone over this again and again. I am having trouble adding this extra $default variable. PHP is recognising the $default variable but it is not searching correctly to out put the right chunk.
Code:
<?php
#::::::::::::::::::::::::::::::::::::::::
# Snippet name: extMemberCheck
# Short Desc: checks logged in groups and displays a chunk
# Version: 1.0
# Created By Richard Pugh from the MemberCheck 1.0 snippet
# MemberCheck Created By Ryan Thrash (vertexworks.com)
# Sanitized By Jason Coward (opengeek.com)
#
# Date: February 5th, 2007
#
# Changelog:
# Feb 05, 07 -- 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 multiple uses on a page.
#
# Two modes of use are possible, if only one output chunk
# is specified then this snippet functions as the original
# MemberCheck returning the chunk if the user is in ANY
# of the groups specified.
#
# If several chunks are specified there must be a one to one
# correspondence between groups and chunks, i.e. there must be
# as many values specified in groups as in chunks. The snippet
# then checks if the user is in the groups one by one and
# outputs the corresponding chunk, i.e. if the user is part of
# group2 then chunk2 will be output. If you have a hierarchy
# of user groups please ensure that they are placed in
# descending order of importance in the group array as the
# first matching value found is always returned.
#
# Params:
# &groups [array] (REQUIRED)
# array of webuser group-names to check against
#
# &chunk [array] (REQUIRED)
# name of the chunk to use if passes the check
#
# &default [string] (optional)
# name of the chunk to use if no webuser group-names match
#
# &ph [string] (optional)
# name of the placeholder to set instead of directly returning chunk
#
# &debug [boolean] (optional | false)
# turn on debug mode for extra troubleshooting
#
# Example Usage:
#
# [[extMemberCheck? &groups=`group1, group2` &chunk=`chunk1, chunk2` &ph=`putItHere` &debug=`true`]]
#
# This would place the chunk 'chunk1' into a placeholder (called 'putItHere') if the user
# is logged in as a webuser and is a member of the 'group1' group. If he is a member of the
# 'group2' group, then 'chunk2' will be returned.
#
# If the chunk array contains only one value, then if the user is in either 'group1' OR 'group2'
# then the value of 'chunk1' is returned ( as in the original MemberCheck ).
#
# 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 'groupX' for the first group, and none existed with debug mode on,
# it would have returned the error message: The group 'groupX' 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 ? '<p>Error: No Group(s) Specified</p>' : '';
}
if (!isset ($chunk)) {
return $debug ? '<p>Error: No Chunk(s) Specified</p>' : '';
}
# check if default is set, if not sets value
$default = (isset($default))? $default : '';
# turn comma-delimited list of groups into an array
$groups = explode(',', $groups);
$chunk = explode(',', $chunk);
if (!class_exists('extMemberCheck')) {
class extMemberCheck {
var $allGroups = NULL;
var $debug;
function getInstance($debug) {
static $instance;
if (!isset ($instance)) {
$instance = new extMemberCheck($debug);
}
return $instance;
}
function extMemberCheck($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, $default)
{
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>The group <strong>" . $groups[$i] . "</strong> could not be found...</p>";
}
}
}
$check = $modx->isMemberOfWebGroup($groups);
$chunkcheck = $modx->getChunk($chunk);
$defaultcheck = $modx->getChunk($default);
if ( $check )
{
$o .= ($check && $chunkcheck) ? $chunkcheck : '';
if (!$chunkcheck)
$o .= $this->debug ? "<p>The chunk <strong>$chunk</strong> not found...</p>" : '';
}
else
{
if ($defaultcheck && (strlen($default) >= 1))
{
$o .= ($defaultcheck) ? $defaultcheck : '';
}
if (!$defaultcheck && (strlen($default) >= 1))
{
$o .= $this->debug ? "<p>The default chunk <strong>$default</strong> not found...</p>" : '';
}
}
}
else
{
$o .= "<p>No valid group names were specified!</p>";
}
return $o;
}
}
}
$memberCheck = extMemberCheck :: getInstance($debug);
if (!isset ($ph)) {
return $memberCheck->getMemberChunk($groups, $chunk, $default);
} else {
$modx->setPlaceholder($ph, $memberCheck->getMemberChunk($groups, $chunk, $default));
return '';
}
?>
Last edited by IG88; 07-19-2008 at 11:26 AM..
|
|
|
|
07-16-2008, 11:44 PM
|
Re: Calling all PHP pros
|
Posts: 2,918
Name: Keith Marshall
Location: Connecticut
|
Is the default var contain usable value or is it null oo empty?
__________________
<mgraphic /> - I don't have a solution but I admire the problem.
|
|
|
|
07-17-2008, 08:22 AM
|
Re: Calling all PHP pros
|
Posts: 94
|
Quote:
Originally Posted by mgraphic
Is the default var contain usable value or is it null oo empty?
|
The default var calls a chunk when no members are logged in. I have three members that when they log in they are displayed a certain chunk decided by they call. However when no one is logged in there is a default chunk that needs to be in place. See the Example Usages in each of these scripts;
Below you will see the original script that was updated to allow a default variable. The one above allows for more than one group and chunk for those groups. The one below only allowed for one group and chunk for that group. This should help.
Code:
<?php
#::::::::::::::::::::::::::::::::::::::::
# Snippet name: MemberCheck
# Short Desc: checks logged in groups and displays a chunk
# Version: 1.1
# Created By Ryan Thrash (vertexworks.com)
# Sanitized By Jason Coward (opengeek.com)
# Addition Of &default Param By Jason W. Falk (jason@falkicon.com)
#
# Date: April 03, 2007
#
# Changelog:
# Nov 29, 05 -- initial release
# Jul 13, 06 -- adjusted Singleton to work under PHP4, added placeholder code (by: garryn)
# Apr 02, 07 -- added &default peram code (by: Jason W. Falk (Whitefen))
#
#::::::::::::::::::::::::::::::::::::::::
# 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 [array] (REQUIRED)
# array of webuser group-names to check against
#
# &chunk [string] (REQUIRED)
# name of the chunk to use if passes the check
#
# &default [string] (optional)
# name of the chunk to use if no webuser group-names match
#
# &ph [string] (optional)
# name of the placeholder to set instead of directly retuning chunk
#
# &debug [boolean] (optional | false)
# turn on debug mode for extra troubleshooting
#
# Example Usage:
#
# [[MemberCheck? &groups=`siteadmin, registered users` &chunk=`privateSiteNav` &default=`publicSiteNav` &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. Otherwise, it will place the default chunk 'publicSiteNav' into the 'MemberMenu'
# placeholder. 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 ? '<p>Error: No Group Specified</p>' : '';
}
if (!isset ($chunk)) {
return $debug ? '<p>Error: No Chunk Specified</p>' : '';
}
# check if default is set, if not sets value
$default = (isset($default))? $default : '';
# turn comma-delimited list of groups into an array
$groups = explode(',', $groups);
if (!class_exists('MemberCheck')) {
class MemberCheck {
var $allGroups = NULL;
var $debug;
function getInstance($debug) {
static $instance;
if (!isset ($instance)) {
$instance = new MemberCheck($debug);
}
return $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, $default) {
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>The group <strong>" . $groups[$i] . "</strong> could not be found...</p>";
}
}
}
$check = $modx->isMemberOfWebGroup($groups);
$chunkcheck = $modx->getChunk($chunk);
$defaultcheck = $modx->getChunk($default);
if ( $check ) {
$o .= ($check && $chunkcheck) ? $chunkcheck : '';
if (!$chunkcheck)
$o .= $this->debug ? "<p>The chunk <strong>$chunk</strong> not found...</p>" : '';
}
else
{
if ($defaultcheck && (strlen($default) >= 1)) {
$o .= ($defaultcheck) ? $defaultcheck : '';
}
if (!$defaultcheck && (strlen($default) >= 1)) {
$o .= $this->debug ? "<p>The default chunk <strong>$default</strong> not found...</p>" : '';
}
}
} else {
$o .= "<p>No valid group names were specified!</p>";
}
return $o;
}
}
}
$memberCheck = MemberCheck :: getInstance($debug);
if (!isset ($ph)) {
return $memberCheck->getMemberChunk($groups, $chunk, $default);
} else {
$modx->setPlaceholder($ph, $memberCheck->getMemberChunk($groups, $chunk, $default));
return '';
}
?>
|
|
|
|
07-17-2008, 08:47 PM
|
Re: Calling all PHP pros
|
Posts: 2,918
Name: Keith Marshall
Location: Connecticut
|
Quote:
Originally Posted by IG88
The default var calls a chunk when no members are logged in. I have three members that when they log in they are displayed a certain chunk decided by they call. However when no one is logged in there is a default chunk that needs to be in place. See the Example Usages in each of these scripts;
Below you will see the original script that was updated to allow a default variable. The one above allows for more than one group and chunk for those groups. The one below only allowed for one group and chunk for that group. This should help.
|
This is hard to understand as I am only seeing a small window of a larger entity. If you turn on the debug mode, what kind of messages do you get?
__________________
<mgraphic /> - I don't have a solution but I admire the problem.
|
|
|
|
07-17-2008, 09:36 PM
|
Re: Calling all PHP pros
|
Posts: 94
|
It states that the default chunk can not be found. That is because I can not correctly code the getMemberChunk to look for the default chunk. If you look at the second script I posted it shows how the getMemberChunk includes the default chunk.I can just not figure out how to code it into the first script I posted. I tried as you can see, but it says that it can not find the default chunk.
|
|
|
|
07-17-2008, 10:03 PM
|
Re: Calling all PHP pros
|
Posts: 2,918
Name: Keith Marshall
Location: Connecticut
|
Maybe this line:
$defaultcheck = $modx->getChunk($default);
Is returning a false, null or empty value that will evaluate to false. You could do the following to see what the value is displayed on the screen:
$defaultcheck = $modx->getChunk($default);
echo htmlentities(var_dump($defaultcheck));
__________________
<mgraphic /> - I don't have a solution but I admire the problem.
|
|
|
|
07-17-2008, 10:48 PM
|
Re: Calling all PHP pros
|
Posts: 94
|
For some reason I had serious issues with that first script I posted for you so I had to redo it and here is what it should be. Or at least what I got to.
Code:
<?php
#::::::::::::::::::::::::::::::::::::::::
# Snippet name: extMemberCheck
# Short Desc: checks logged in groups and displays a chunk
# Version: 1.0
# Created By Richard Pugh from the MemberCheck 1.0 snippet
# MemberCheck Created By Ryan Thrash (vertexworks.com)
# Sanitized By Jason Coward (opengeek.com)
#
# Date: February 5th, 2007
#
# Changelog:
# Feb 05, 07 -- 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 multiple uses on a page.
#
# Two modes of use are possible, if only one output chunk
# is specified then this snippet functions as the original
# MemberCheck returning the chunk if the user is in ANY
# of the groups specified.
#
# If several chunks are specified there must be a one to one
# correspondence between groups and chunks, i.e. there must be
# as many values specified in groups as in chunks. The snippet
# then checks if the user is in the groups one by one and
# outputs the corresponding chunk, i.e. if the user is part of
# group2 then chunk2 will be output. If you have a hierarchy
# of user groups please ensure that they are placed in
# descending order of importance in the group array as the
# first matching value found is always returned.
#
# Params:
# &groups [array] (REQUIRED)
# array of webuser group-names to check against
#
# &chunk [array] (REQUIRED)
# name of the chunk to use if passes the check
#
# &ph [string] (optional)
# name of the placeholder to set instead of directly returning chunk
#
# &debug [boolean] (optional | false)
# turn on debug mode for extra troubleshooting
#
# Example Usage:
#
# [[extMemberCheck? &groups=`group1, group2` &chunk=`chunk1, chunk2` &ph=`putItHere` &debug=`true`]]
#
# This would place the chunk 'chunk1' into a placeholder (called 'putItHere') if the user
# is logged in as a webuser and is a member of the 'group1' group. If he is a member of the
# 'group2' group, then 'chunk2' will be returned.
#
# If the chunk array contains only one value, then if the user is in either 'group1' OR 'group2'
# then the value of 'chunk1' is returned ( as in the original MemberCheck ).
#
# 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 'groupX' for the first group, and none existed with debug mode on,
# it would have returned the error message: The group 'groupX' 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 ? '<p>Error: No Group(s) Specified</p>' : '';
}
if (!isset ($chunk)) {
return $debug ? '<p>Error: No Chunk(s) Specified</p>' : '';
}
# check if default is set, if not sets value
$default = (isset($default))? $default : '';
# turn comma-delimited list of groups into an array
$groups = explode(',', $groups);
$chunk = explode(',', $chunk);
if (!class_exists('extMemberCheck')) {
class extMemberCheck {
var $allGroups = NULL;
var $debug;
function getInstance($debug) {
static $instance;
if (!isset ($instance)) {
$instance = new extMemberCheck($debug);
}
return $instance;
}
function extMemberCheck($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, $default) {
global $modx;
$o = '';
if (!is_array($chunk)) {
$o .= "<p>No chunk names were specified!</p>";
return $o;
}
if (!is_array($groups)) {
$o .= "<p>No group names were specified!</p>";
return $o;
}
if ($defaultcheck && (strlen($default) >= 1)) {
$o .= ($defaultcheck) ? $defaultcheck : '';
}
if (!$defaultcheck && (strlen($default) >= 1)) {
$o .= $this->debug ? "<p>The default chunk <strong>$default</strong> not found...</p>" : '';
}
}
if (count($groups) != count($chunk)) {
if (count($chunk) != 1) {
$o .= "<p>Number of group names and chunks must be the same!</p>";
return $o;
}
}
for ($i = 0; $i < count($groups); $i++) {
$groups[$i] = trim($groups[$i]);
$chnk = trim($chunk[$i]);
if ($this->isValidGroup($groups[$i])) {
if (count($chunk) != 1) {
$group = array($groups[$i]);
$check = $modx->isMemberOfWebGroup($group);
if ($check) {
$chunkcheck = $modx->getChunk($chnk);
$o = ($chunkcheck) ? $chunkcheck : '';
if (!$chunkcheck)
$o .= $this->debug ? "<p>The chunk <strong>$chnk</strong> not found...</p>" : '';
return $o;
}
} else {
$check = $modx->isMemberOfWebGroup($groups);
$chunkcheck = $modx->getChunk($chnk);
$defaultcheck = $modx->getChunk($default);
$o .= ($check && $chunkcheck) ? $chunkcheck : '';
if (!$chunkcheck)
$o .= $this->debug ? "<p>The chunk <strong>$chnk</strong> not found...</p>" : '';
return $o;
}
} else {
if ($this->debug) {
return "<p>The group <strong>" . $groups[$i] . "</strong> could not be found...</p>";
}
}
}
}
}
}
$memberCheck = extMemberCheck :: getInstance($debug);
if (!isset ($ph)) {
return $memberCheck->getMemberChunk($groups, $chunk, $default);
} else {
$modx->setPlaceholder($ph, $memberCheck->getMemberChunk($groups, $chunk, $default));
return '';
}
?>
I do get an error with this and it is ...
Quote:
|
Parse error: syntax error, unexpected T_IF, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home/502view/public_html/manager/includes/document.parser.class.inc.php(769) : eval()'d code on line 142
|
I have installed your code but it did not seem to make much of a difference.
|
|
|
|
07-17-2008, 10:58 PM
|
Re: Calling all PHP pros
|
Posts: 94
|
ok, obviously I am tired.
When I went back in and fixed the code I had an extra { on line 142.
I removed that and I get no errors. The chunks show up for the logged in members but the default does not show up. Now we are back to square one.
I have added your code
echo htmlentities(var_dump($defaultcheck));
but nothing echo's out.
|
|
|
|
07-18-2008, 09:51 AM
|
Re: Calling all PHP pros
|
Posts: 2,918
Name: Keith Marshall
Location: Connecticut
|
Quote:
Originally Posted by IG88
I have added your code
echo htmlentities(var_dump($defaultcheck));
but nothing echo's out.
|
OK - That means it is never reaching that point if its not being echoed to the browser.
You can see all the global vars if you add this to the bottom of your script:
echo '<pre>' . htmlentities(print_r($GLOBALS)) . '</pre>';
__________________
<mgraphic /> - I don't have a solution but I admire the problem.
|
|
|
|
07-18-2008, 10:49 AM
|
Re: Calling all PHP pros
|
Posts: 94
|
I added that right before the ?> but I get nothing.
Interestingly though, every time I save it and run it it places an extra ?> at the end of the document. Even without adding
echo '<pre>' . htmlentities(print_r($GLOBALS)) . '</pre>';
|
|
|
|
07-18-2008, 06:32 PM
|
Re: Calling all PHP pros
|
Posts: 2,918
Name: Keith Marshall
Location: Connecticut
|
Is there a link I can view this publicly? We might need to add several output points to debug.
__________________
<mgraphic /> - I don't have a solution but I admire the problem.
|
|
|
|
07-18-2008, 07:38 PM
|
Re: Calling all PHP pros
|
Posts: 94
|
PMed
Thank you
|
|
|
|
07-19-2008, 11:25 AM
|
Re: Calling all PHP pros
|
Posts: 94
|
Sadly I think mgraphic has given up on this.
Is there anyone else who knows php?
|
|
|
|
07-20-2008, 06:38 PM
|
Re: Calling all PHP pros
|
Posts: 94
|
Can some one please help me?
|
|
|
|
|
« Reply to Calling all PHP pros
|
|
|
| Thread Tools |
Search this Thread |
|
|
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
|