| Server IP : 46.105.57.169 / Your IP : 216.73.217.8 Web Server : Apache System : Linux webd003.cluster120.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64 User : maitricfuz ( 93378) PHP Version : 8.4.22 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/maitricfuz/www/saint-martin-lg/libraries/regularlabs/src/Form/Field/ |
Upload File : |
<?php
/**
* @package Regular Labs Library
* @version 26.7.20176
*
* @author Peter van Westen <info@regularlabs.com>
* @link https://regularlabs.com
* @copyright Copyright © 2026 Regular Labs All Rights Reserved
* @license GNU General Public License version 2 or later
*/
namespace RegularLabs\Library\Form\Field;
defined('_JEXEC') or die;
use Joomla\CMS\Language\Text as JText;
use RegularLabs\Library\RegEx;
use RegularLabs\Library\DB;
use RegularLabs\Library\Form\FormField;
use RegularLabs\Library\Json;
use RegularLabs\Library\User;
use SimpleXMLElement;
class UserGroupsField extends FormField
{
static $options;
public bool $is_select_list = \true;
public bool $use_tree_select = \true;
// public bool $use_ajax = true;
public function getNamesByIds(array $values, array $attributes): array
{
$query = $this->db->getQuery(\true)->select('a.title')->from('#__usergroups AS a')->where(DB::is('a.id', $values))->order('a.lft ASC');
$this->db->setQuery($query);
return $this->db->loadColumn();
}
public function setup(SimpleXMLElement $element, $value, $group = null)
{
$values = is_string($value) ? Json::decode($value, null, \true) : null;
$values = is_array($values) ? $values : $value;
if (self::hasSymbolicValue($values)) {
$value = User::resolveUserGroupIds($values);
$multiple = strtolower((string) $element['multiple']);
if (!in_array($multiple, ['1', 'true', 'multiple'], \true)) {
$value = $value[0] ?? '';
}
}
return parent::setup($element, $value, $group);
}
protected function getOptions()
{
if (empty(self::$options)) {
$query = $this->db->getQuery(\true)->select('a.id as value, a.title as text, a.parent_id AS parent')->from('#__usergroups AS a')->select('COUNT(DISTINCT b.id) AS level')->join('LEFT', '#__usergroups AS b ON a.lft > b.lft AND a.rgt < b.rgt')->group('a.id')->order('a.lft ASC');
$this->db->setQuery($query);
self::$options = $this->db->loadObjectList();
}
$options = self::$options;
if (!$this->get('show_all')) {
return $options;
}
array_unshift($options, (object) ['value' => -1, 'text' => JText::_('JALL'), 'parent' => 0, 'level' => 0]);
return $options;
}
private static function hasSymbolicValue(mixed $value): bool
{
foreach ((array) $value as $group) {
if (is_string($group) && !RegEx::matchesEntireString('-?[0-9]+', $group, $match, '')) {
return \true;
}
}
return \false;
}
}