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();
}
Beispiel #2
0
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');
}