49 $db = $DIC->database();
54 $lng = $DIC->language();
125 $query =
"SELECT rdat.title role_title,odat.title object_title, " .
126 " oref.ref_id object_ref " .
127 "FROM object_data rdat " .
128 "JOIN rbac_fa fa ON fa.rol_id = rdat.obj_id " .
129 "JOIN tree rtree ON rtree.child = fa.parent " .
130 "JOIN object_reference oref ON oref.ref_id = rtree.child " .
131 "JOIN object_data odat ON odat.obj_id = oref.obj_id " .
132 "WHERE rdat.obj_id = " . $this->db->quote($this->roleId,
'integer') .
" " .
133 "AND fa.assign = 'y' ";
135 if (!$row = $this->db->fetchObject(
$res)) {
139 $object_title = $row->object_title;
140 $object_ref = $row->object_ref;
141 $role_title = $row->role_title;
146 $domain = $object_title;
147 $local_part = $role_title;
150 $q =
"SELECT COUNT(DISTINCT dat.obj_id) count " .
151 "FROM object_data dat " .
152 "JOIN object_reference ref ON ref.obj_id = dat.obj_id " .
153 "JOIN tree ON tree.child = ref.ref_id " .
154 "WHERE title = " . $this->db->quote($object_title,
'text') .
" " .
155 "AND tree.tree = 1 ";
156 $res = $this->db->query($q);
157 $row = $this->db->fetchObject(
$res);
160 if ($row->count > 1) {
168 if ($domain != null && preg_match(
'/[\[\]\\]|[\x00-\x1f]|[\x28-\x29]|[;]/', $domain)) {
174 if ($domain != null &&
175 (preg_match(
'/[()<>@,;:\\".\[\]]/', $domain) ||
176 preg_match(
'/[^\x21-\x8f]/', $domain))
178 $domain =
'[' . $domain .
']';
184 if (strpos($role_title,
'il_') === 0 && $domain != null) {
185 $unambiguous_role_title = $role_title;
187 $pos = strpos($role_title,
'_', 3) + 1;
188 $local_part = substr(
191 strrpos($role_title,
'_') - $pos
201 if ($domain == null) {
202 $q =
"SELECT COUNT(DISTINCT dat.obj_id) count " .
203 "FROM object_data dat " .
204 "JOIN object_reference ref ON ref.obj_id = dat.obj_id " .
205 "JOIN tree ON tree.child = ref.ref_id " .
206 "WHERE title = " . $this->db->quote($local_part,
'text') .
" " .
207 "AND tree.tree = 1 ";
209 $q =
"SELECT COUNT(rd.obj_id) count " .
210 "FROM object_data rd " .
211 "JOIN rbac_fa fa ON rd.obj_id = fa.rol_id " .
212 "JOIN tree t ON t.child = fa.parent " .
213 "WHERE fa.assign = 'y' " .
214 "AND t.child = " . $this->db->quote($object_ref,
'integer') .
" " .
215 "AND rd.title LIKE " . $this->db->quote(
216 '%' . preg_replace(
'/([_%])/',
'\\\\$1', $local_part) .
'%',
221 $res = $this->db->query($q);
222 $row = $this->db->fetchObject(
$res);
226 if ($row->count > 1) {
227 $local_part = $unambiguous_role_title;
234 if (preg_match(
'/[\\"\x00-\x1f]/', $local_part)) {
235 $local_part = $unambiguous_role_title;
237 if (!preg_match(
'/^[\\x00-\\x7E]+$/i', $local_part)) {
239 $local_part = $unambiguous_role_title;
245 $local_part =
'#' . $local_part;
248 if (preg_match(
'/[()<>@,;:.\[\]\x20]/', $local_part)) {
249 $local_part =
'"' . $local_part .
'"';
252 $mailbox = ($domain == null) ?
254 $local_part .
'@' . $domain;
256 if ($this->localize) {
257 if (substr($role_title, 0, 3) ==
'il_') {
258 $phrase = $this->lng->txt(substr($role_title, 0, strrpos($role_title,
'_')));
260 $phrase = $role_title;
267 $phrase = preg_replace(
'/\s\s+/',
' ', $phrase);
268 $phrase = preg_replace(
'/[()<>@,;:\\".\[\]]/',
'', $phrase);
270 $mailbox = $phrase .
' <' . $mailbox .
'>';
275 $parser = $this->parserFactory->getParser((
string) $mailbox);
280 $res = $this->db->query(
"SELECT title FROM object_data WHERE obj_id = " . $this->db->quote(
284 if ($row = $this->db->fetchObject(
$res)) {
285 return '#' . $row->title;
value()
Returns the mailbox address of a role.
Class ilRoleMailboxAddress.
Class ilMailRfc822AddressParserFactory.
foreach($_POST as $key=> $value) $res
__construct(int $roleId, bool $localize=true, ilMailRfc822AddressParserFactory $parserFactory=null, ilDBInterface $db=null, ilLanguage $lng=null)
ilRoleMailboxAddress constructor.