function local_mail_add_recipients($message, $recipients, $role) { global $DB; $context = context_course::instance($message->course()->id); $groupid = 0; $severalseparategroups = false; $roles = array('to', 'cc', 'bcc'); $role = ($role >= 0 and $role < 3) ? $role : 0; if ($message->course()->groupmode == SEPARATEGROUPS and !has_capability('moodle/site:accessallgroups', $context)) { $groups = groups_get_user_groups($message->course()->id, $message->sender()->id); if (count($groups[0]) == 0) { return; } else if (count($groups[0]) == 1) {// Only one group $groupid = $groups[0][0]; } else { $severalseparategroups = true;// Several groups } } // Make sure recipients ids are integers $recipients = clean_param_array($recipients, PARAM_INT); $participants = array(); list($select, $from, $where, $sort, $params) = local_mail_getsqlrecipients($message->course()->id, '', $groupid, 0, implode(',', $recipients)); $rs = $DB->get_recordset_sql("$select $from $where $sort", $params); foreach ($rs as $rec) { if (!array_key_exists($rec->id, $participants)) {// Avoid duplicated users if ($severalseparategroups) { $valid = false; foreach ($groups[0] as $group) { $valid = $valid || groups_is_member($group, $rec->id); } if (!$valid) { continue; } } $message->add_recipient($roles[$role], $rec->id); $participants[$rec->id] = true; } } $rs->close(); }
function local_mail_updaterecipients($message, $recipients, $roles) { global $DB; $context = context_course::instance($message->course()->id); $groupid = 0; $severalseparategroups = false; if ($message->course()->groupmode == SEPARATEGROUPS and !has_capability('moodle/site:accessallgroups', $context)) { $groups = groups_get_user_groups($message->course()->id, $message->sender()->id); if (count($groups[0]) == 0) { return array('msgerror' => '', 'info' => '', 'html' => '', 'redirect' => 'ok'); } else { if (count($groups[0]) == 1) { // Only one group $groupid = $groups[0][0]; } else { $severalseparategroups = true; // Several groups } } } // Make sure recipients ids are integers $recipients = clean_param_array($recipients, PARAM_INT); foreach ($recipients as $key => $recipid) { $roleids[$recipid] = isset($roles[$key]) ? clean_param($roles[$key], PARAM_INT) : false; } $participants = array(); list($select, $from, $where, $sort, $params) = local_mail_getsqlrecipients($message->course()->id, '', $groupid, 0, implode(',', $recipients)); $rs = $DB->get_recordset_sql("{$select} {$from} {$where} {$sort}", $params); foreach ($rs as $rec) { if (!array_key_exists($rec->id, $participants)) { // Avoid duplicated users if ($severalseparategroups) { $valid = false; foreach ($groups[0] as $group) { $valid = $valid || groups_is_member($group, $rec->id); } if (!$valid) { continue; } } $role = false; if ($roleids[$rec->id] === 0) { $role = 'to'; } else { if ($roleids[$rec->id] === 1) { $role = 'cc'; } else { if ($roleids[$rec->id] === 2) { $role = 'bcc'; } } } if ($message->has_recipient($rec->id)) { $message->remove_recipient($rec->id); } if ($role) { $message->add_recipient($role, $rec->id); } $participants[$rec->id] = true; } } $rs->close(); return array('msgerror' => '', 'info' => '', 'html' => '', 'redirect' => 'ok'); }