Jump to content

Help combining two scripts


IG88

Recommended Posts

Hey everyone. I am very glad I found this forum. I have been having problems with taking 2 different scripts and combining them. These were built for Modx but it is still php. Basically what I have is that both scripts are pretty identical, but I need to take one variable from one script and put it in another.

 

The first script is called

MemberCheck. It checks to see if a member of a certain group is logged in and if so then it displays a template chunk to them. If they are not logged in then it displays the default template chunk.

 

The other script is called

extMemberCheck. It checks to see if a member of a certain group is logged in and will allow for checks of multiple groups and multiple corresponding template chunks. However, this one was not coded with the default variable. That is what I am trying to accomplish. To get the default variable into the extMembercheck.

 

You would think that this would be pretty straight forward.... not for a php noob like me.

 

MemberCheck.

<?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 '';
}
?>

 

 

extMemberCheck

<?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>' : '';
}

# 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) {
            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 (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);
                        $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);
} else {
    $modx->setPlaceholder($ph, $memberCheck->getMemberChunk($groups, $chunk));
    return '';
}
?>

 

and here is my attempt at integrating the default variable into the extMemberCheck.

<?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 (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;
                        } 
                    } 
                        $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>" : '';
                    }
                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>" : '';
                    }
                }
            
               {
                    if ($this->debug) {
                        return "<p>The group <strong>" . $groups[$i] . "</strong> could not be found...</p>";
                    }
                    return $o;
                }
            }
        }
    }
}

$memberCheck = extMemberCheck :: getInstance($debug);

if (!isset ($ph)) {
    echo htmlentities(var_dump($memberCheck));
    return $memberCheck->getMemberChunk($groups, $chunk, $default);
} else {
    $modx->setPlaceholder($ph, $memberCheck->getMemberChunk($groups, $chunk, $default));
    return '';
}
?>

 

The section of the script that holds the key is the getmemberchunk

 

MemberChunk

        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 '';
}
?>

 

 

extMemberChunk

        function getMemberChunk(&$groups, $chunk) {
            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 (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);
                        $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);
} else {
    $modx->setPlaceholder($ph, $memberCheck->getMemberChunk($groups, $chunk));
    return '';
}
?>

Link to comment
Share on other sites

OK here is the deal.

 

Membercheck allows for a chunk of html to be shown to a certain Usergroup when they are logged in. If that Usergroup is not logged in then there is a default chunk of html that is shown in it's place. This works very well just like this. However you can only set it for one Group and one corresponding Chunk. SO basically you can show a default Chunk(Lets say a link), such as "Log In" but when you do log in that link will change to something else that relates to that group.

 

extMemberCheck is just like Membercheck, but it allows for you to set more than one Group and more than one Chunk that corresponds with the Group. The only problem is that this extMemberCheck does not have the default variable included like the MemberCheck does. Therefore when you view the site and you are not logged in you do not see anything.

Link to comment
Share on other sites

Sorry. I was just asking for help. I have indeed tried writing it myself and below is what I have.

 

<?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 (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;
                        } 
                    } 
                        $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>" : '';
                    }
			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>" : '';
				}
			}
            
               {
                    if ($this->debug) {
                        return "<p>The group <strong>" . $groups[$i] . "</strong> could not be found...</p>";
                    }
				return $o;
                }
            }
        }
    }
}

$memberCheck = extMemberCheck :: getInstance($debug);

if (!isset ($ph)) {
    echo htmlentities(var_dump($memberCheck));
    return $memberCheck->getMemberChunk($groups, $chunk, $default);
} else {
    $modx->setPlaceholder($ph, $memberCheck->getMemberChunk($groups, $chunk, $default));
    return '';
}
?>

 

I added the echo htmlentities(var_dump($memberCheck)); to see if it would give any ideas. It echo's

 

object(extmembercheck)(2) { ["allGroups"]=>  array(5) { [0]=>  string(11) "Blank Group" [1]=>  string(6) "Brides" [2]=>  string(7) "Editors" [3]=>  string(7) "Vendors" [4]=>  string(8) "VendorsB" } ["debug"]=>  string(4) "true" }

 

The group Vendors could not be found...

 

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.