19 declare(strict_types=1);
31 $this->db = $db ?? $DIC->database();
78 $parser = $this->parser_factory->getParser($a_address_list);
79 $parsed_list = $parser->parse();
82 foreach ($parsed_list as $address) {
83 $local_part = $address->getMailbox();
84 if (!str_starts_with($local_part,
'#') && !($local_part[0] ===
'"' && $local_part[1] ===
'#')) {
90 $local_part = substr($local_part, 1);
93 if ($local_part[0] ===
'#' && $local_part[strlen($local_part) - 1] ===
'"') {
94 $local_part = substr($local_part, 1);
95 $local_part = substr($local_part, 0, -1);
98 if (str_starts_with($local_part,
'il_role_')) {
99 $role_id = substr($local_part, 8);
100 $query =
'SELECT t.tree ' .
102 'JOIN tree t ON t.child = fa.parent ' .
103 'WHERE fa.rol_id = ' . $this->db->quote($role_id,
'integer') .
' ' .
104 "AND fa.assign = 'y' " .
106 $res = $this->db->query($query);
107 if ($this->db->numRows(
$res) > 0) {
108 $role_ids[] = (
int) $role_id;
113 $domain = $address->getHost();
114 if (str_starts_with($domain,
'[') && strrpos($domain,
']')) {
115 $domain = substr($domain, 1, -1);
117 if ($local_part ===
'') {
118 $local_part = $domain;
125 $query =
'SELECT dat.obj_id ' .
126 'FROM object_data dat ' .
127 'JOIN rbac_fa fa ON fa.rol_id = dat.obj_id ' .
128 'JOIN tree t ON t.child = fa.parent ' .
129 'WHERE dat.title =' . $this->db->quote($local_part,
'text') .
' ' .
130 "AND dat.type = 'role' " .
131 "AND fa.assign = 'y' " .
135 $query =
'SELECT rdat.obj_id ' .
136 'FROM object_data odat ' .
137 'JOIN object_reference oref ON oref.obj_id = odat.obj_id ' .
138 'JOIN tree otree ON otree.child = oref.ref_id ' .
139 'JOIN rbac_fa rfa ON rfa.parent = otree.child ' .
140 'JOIN object_data rdat ON rdat.obj_id = rfa.rol_id ' .
141 'WHERE odat.title = ' . $this->db->quote($domain,
'text') .
' ' .
142 'AND otree.tree = 1 ' .
143 "AND rfa.assign = 'y' " .
144 'AND rdat.title LIKE ' .
146 '%' . preg_replace(
'/([_%])/',
'\\\\$1', $local_part) .
'%',
150 $res = $this->db->query($query);
153 while ($row = $this->db->fetchAssoc(
$res)) {
154 $role_ids[] = (
int) $row[
'obj_id'];
162 $q =
'SELECT dat.obj_id ' .
163 'FROM object_data dat ' .
164 'JOIN object_reference ref ON ref.obj_id = dat.obj_id ' .
165 'JOIN tree t ON t.child = ref.ref_id ' .
166 'WHERE dat.title = ' . $this->db->quote($domain,
'text') .
' ' .
167 "AND dat.type = 'role' " .
169 $res = $this->db->query(
$q);
171 while ($row = $this->db->fetchAssoc(
$res)) {
172 $role_ids[] = (
int) $row[
'obj_id'];
__construct(protected ilMailRfc822AddressParserFactory $parser_factory, ?ilDBInterface $db=null)
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
searchRoleIdsByAddressString(string $a_address_list)
Finds all role ids that match the specified user friendly role mailbox address list.