19 declare(strict_types=1);
38 $db = $DIC->database();
87 $parser = $this->parserFactory->getParser($a_address_list);
88 $parsedList = $parser->parse();
91 foreach ($parsedList as $address) {
92 $local_part = $address->getMailbox();
93 if (!str_starts_with($local_part,
'#') && !($local_part[0] ===
'"' && $local_part[1] ===
"#")) {
99 $local_part = substr($local_part, 1);
102 if ($local_part[0] ===
'#' && $local_part[strlen($local_part) - 1] ===
'"') {
103 $local_part = substr($local_part, 1);
104 $local_part = substr($local_part, 0, -1);
107 if (str_starts_with($local_part,
'il_role_')) {
108 $role_id = substr($local_part, 8);
109 $query =
"SELECT t.tree " .
111 "JOIN tree t ON t.child = fa.parent " .
112 "WHERE fa.rol_id = " . $this->db->quote($role_id,
'integer') .
" " .
113 "AND fa.assign = 'y' " .
115 $res = $this->db->query($query);
116 if ($this->db->numRows(
$res) > 0) {
117 $role_ids[] = (
int) $role_id;
122 $domain = $address->getHost();
123 if (str_starts_with($domain,
'[') && strrpos($domain,
']')) {
124 $domain = substr($domain, 1, -1);
126 if ($local_part ===
'') {
127 $local_part = $domain;
134 $query =
"SELECT dat.obj_id " .
135 "FROM object_data dat " .
136 "JOIN rbac_fa fa ON fa.rol_id = dat.obj_id " .
137 "JOIN tree t ON t.child = fa.parent " .
138 "WHERE dat.title =" . $this->db->quote($local_part,
'text') .
" " .
139 "AND dat.type = 'role' " .
140 "AND fa.assign = 'y' " .
144 $query =
"SELECT rdat.obj_id " .
145 "FROM object_data odat " .
146 "JOIN object_reference oref ON oref.obj_id = odat.obj_id " .
147 "JOIN tree otree ON otree.child = oref.ref_id " .
148 "JOIN rbac_fa rfa ON rfa.parent = otree.child " .
149 "JOIN object_data rdat ON rdat.obj_id = rfa.rol_id " .
150 "WHERE odat.title = " . $this->db->quote($domain,
'text') .
" " .
151 "AND otree.tree = 1 " .
152 "AND rfa.assign = 'y' " .
153 "AND rdat.title LIKE " .
155 '%' . preg_replace(
'/([_%])/',
'\\\\$1', $local_part) .
'%',
159 $res = $this->db->query($query);
162 while ($row = $this->db->fetchAssoc(
$res)) {
163 $role_ids[] = (
int) $row[
'obj_id'];
171 $q =
"SELECT dat.obj_id " .
172 "FROM object_data dat " .
173 "JOIN object_reference ref ON ref.obj_id = dat.obj_id " .
174 "JOIN tree t ON t.child = ref.ref_id " .
175 "WHERE dat.title = " . $this->db->quote($domain,
'text') .
" " .
176 "AND dat.type = 'role' " .
178 $res = $this->db->query(
$q);
180 while ($row = $this->db->fetchAssoc(
$res)) {
181 $role_ids[] = (
int) $row[
'obj_id'];
Class ilRoleMailboxSearch.
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
Class ilMailRfc822AddressParserFactory.
searchRoleIdsByAddressString(string $a_address_list)
Finds all role ids that match the specified user friendly role mailbox address list.
__construct(protected ilMailRfc822AddressParserFactory $parserFactory, ?ilDBInterface $db=null)