| Server IP : 54.36.91.62 / Your IP : 216.73.217.112 Web Server : Apache System : Linux webm013.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : coopiak ( 151928) PHP Version : 8.3.23 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/c/o/o/coopiak/www/cj79373/libraries/regularlabs/src/Condition/ |
Upload File : |
<?php
/**
* @package Regular Labs Library
* @version 23.5.7450
*
* @author Peter van Westen <info@regularlabs.com>
* @link http://regularlabs.com
* @copyright Copyright © 2023 Regular Labs All Rights Reserved
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
*/
namespace RegularLabs\Library\Condition;
defined('_JEXEC') or die;
use Joomla\CMS\Factory as JFactory;
use RegularLabs\Library\DB as RL_DB;
/**
* Class UserGrouplevel
* @package RegularLabs\Library\Condition
*/
class UserGrouplevel extends User
{
static $user_group_children;
public function pass()
{
$user = JFactory::getApplication()->getIdentity() ?: JFactory::getUser();
if ( ! empty($user->groups))
{
$groups = array_values($user->groups);
}
else
{
$groups = $user->getAuthorisedGroups();
}
if ( ! $this->params->match_all && $this->params->inc_children)
{
$this->setUserGroupChildrenIds();
}
$this->selection = $this->convertUsergroupNamesToIds($this->selection);
if ($this->params->match_all)
{
return $this->passMatchAll($groups);
}
return $this->passSimple($groups);
}
private function convertUsergroupNamesToIds($selection)
{
$names = [];
foreach ($selection as $i => $group)
{
if (is_numeric($group))
{
continue;
}
unset($selection[$i]);
$names[] = strtolower(str_replace(' ', '', $group));
}
if (empty($names))
{
return $selection;
}
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select($db->quoteName('id'))
->from('#__usergroups')
->where('LOWER(REPLACE(' . $db->quoteName('title') . ', " ", ""))'
. RL_DB::in($names));
$db->setQuery($query);
$group_ids = $db->loadColumn();
return array_unique(array_merge($selection, $group_ids));
}
private function getUserGroupChildrenIds($groups)
{
$children = [];
foreach ($groups as $group)
{
$group_children = $this->getUserGroupChildrenIdsByGroup($group);
if (empty($group_children))
{
continue;
}
$children = array_merge($children, $group_children);
$group_grand_children = $this->getUserGroupChildrenIds($group_children);
if (empty($group_grand_children))
{
continue;
}
$children = array_merge($children, $group_grand_children);
}
$children = array_unique($children);
return $children;
}
private function getUserGroupChildrenIdsByGroup($group)
{
$group = (int) $group;
if ( ! is_null(self::$user_group_children))
{
return self::$user_group_children[$group] ?? [];
}
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select(['id', 'parent_id'])
->from($db->quoteName('#__usergroups'));
$db->setQuery($query);
$groups = $db->loadAssocList('id', 'parent_id');
foreach ($groups as $id => $parent)
{
if ( ! isset(self::$user_group_children[$parent]))
{
self::$user_group_children[$parent] = [];
}
self::$user_group_children[$parent][] = $id;
}
return self::$user_group_children[$group] ?? [];
}
private function passMatchAll($groups)
{
$pass = ! array_diff($this->selection, $groups) && ! array_diff($groups, $this->selection);
return $this->_($pass);
}
private function setUserGroupChildrenIds()
{
$children = $this->getUserGroupChildrenIds($this->selection);
if ($this->params->inc_children == 2)
{
$this->selection = $children;
return;
}
$this->selection = array_merge($this->selection, $children);
}
}