Esempio n. 1
0
 /**
  * @dataProvider data_for_message_from_template
  */
 public function test_badge_message_from_template($message, $params, $result)
 {
     $this->assertEquals(badge_message_from_template($message, $params), $result);
 }
Esempio n. 2
0
/**
 * Sends notifications to users about awarded badges.
 *
 * @param badge $badge Badge that was issued
 * @param int $userid Recipient ID
 * @param string $issued Unique hash of an issued badge
 * @param string $filepathhash File path hash of an issued badge for attachments
 */
function badges_notify_badge_award(badge $badge, $userid, $issued, $filepathhash)
{
    global $CFG, $DB;
    $admin = get_admin();
    $userfrom = new stdClass();
    $userfrom->id = $admin->id;
    $userfrom->email = !empty($CFG->badges_defaultissuercontact) ? $CFG->badges_defaultissuercontact : $admin->email;
    foreach (get_all_user_name_fields() as $addname) {
        $userfrom->{$addname} = !empty($CFG->badges_defaultissuername) ? '' : $admin->{$addname};
    }
    $userfrom->firstname = !empty($CFG->badges_defaultissuername) ? $CFG->badges_defaultissuername : $admin->firstname;
    $userfrom->maildisplay = true;
    $issuedlink = html_writer::link(new moodle_url('/badges/badge.php', array('hash' => $issued)), $badge->name);
    $userto = $DB->get_record('user', array('id' => $userid), '*', MUST_EXIST);
    $params = new stdClass();
    $params->badgename = $badge->name;
    $params->username = fullname($userto);
    $params->badgelink = $issuedlink;
    $message = badge_message_from_template($badge->message, $params);
    $plaintext = html_to_text($message);
    // Notify recipient.
    $eventdata = new stdClass();
    $eventdata->component = 'moodle';
    $eventdata->name = 'badgerecipientnotice';
    $eventdata->userfrom = $userfrom;
    $eventdata->userto = $userto;
    $eventdata->notification = 1;
    $eventdata->subject = $badge->messagesubject;
    $eventdata->fullmessage = $plaintext;
    $eventdata->fullmessageformat = FORMAT_HTML;
    $eventdata->fullmessagehtml = $message;
    $eventdata->smallmessage = '';
    // Attach badge image if possible.
    if (!empty($CFG->allowattachments) && $badge->attachment && is_string($filepathhash)) {
        $fs = get_file_storage();
        $file = $fs->get_file_by_hash($filepathhash);
        $eventdata->attachment = $file;
        $eventdata->attachname = str_replace(' ', '_', $badge->name) . ".png";
        message_send($eventdata);
    } else {
        message_send($eventdata);
    }
    // Notify badge creator about the award if they receive notifications every time.
    if ($badge->notification == 1) {
        $userfrom = core_user::get_noreply_user();
        $userfrom->maildisplay = true;
        $creator = $DB->get_record('user', array('id' => $badge->usercreated), '*', MUST_EXIST);
        $a = new stdClass();
        $a->user = fullname($userto);
        $a->link = $issuedlink;
        $creatormessage = get_string('creatorbody', 'badges', $a);
        $creatorsubject = get_string('creatorsubject', 'badges', $badge->name);
        $eventdata = new stdClass();
        $eventdata->component = 'moodle';
        $eventdata->name = 'badgecreatornotice';
        $eventdata->userfrom = $userfrom;
        $eventdata->userto = $creator;
        $eventdata->notification = 1;
        $eventdata->subject = $creatorsubject;
        $eventdata->fullmessage = html_to_text($creatormessage);
        $eventdata->fullmessageformat = FORMAT_HTML;
        $eventdata->fullmessagehtml = $creatormessage;
        $eventdata->smallmessage = '';
        message_send($eventdata);
        $DB->set_field('badge_issued', 'issuernotified', time(), array('badgeid' => $badge->id, 'userid' => $userid));
    }
}
Esempio n. 3
0
/**
 * Sends notifications to users about awarded badges.
 *
 * @param badge $badge Badge that was issued
 * @param int $userid Recipient ID
 * @param string $issued Unique hash of an issued badge
 * @param string $filepathhash File path hash of an issued badge for attachments
 */
function badges_notify_badge_award(badge $badge, $userid, $issued, $filepathhash)
{
    global $CFG, $DB;
    $admin = get_admin();
    $userfrom = new stdClass();
    $userfrom->id = $admin->id;
    $userfrom->email = !empty($CFG->badges_defaultissuercontact) ? $CFG->badges_defaultissuercontact : $admin->email;
    $userfrom->firstname = !empty($CFG->badges_defaultissuername) ? $CFG->badges_defaultissuername : $admin->firstname;
    $userfrom->lastname = !empty($CFG->badges_defaultissuername) ? '' : $admin->lastname;
    $userfrom->maildisplay = true;
    $issuedlink = html_writer::link(new moodle_url('/badges/badge.php', array('hash' => $issued)), $badge->name);
    $userto = $DB->get_record('user', array('id' => $userid), '*', MUST_EXIST);
    $params = new stdClass();
    $params->badgename = $badge->name;
    $params->username = fullname($userto);
    $params->badgelink = $issuedlink;
    $message = badge_message_from_template($badge->message, $params);
    $plaintext = format_text_email($message, FORMAT_HTML);
    if ($badge->attachment && $filepathhash) {
        $fs = get_file_storage();
        $file = $fs->get_file_by_hash($filepathhash);
        $attachment = $file->copy_content_to_temp();
        email_to_user($userto, $userfrom, $badge->messagesubject, $plaintext, $message, str_replace($CFG->dataroot, '', $attachment), str_replace(' ', '_', $badge->name) . ".png");
        @unlink($attachment);
    } else {
        email_to_user($userto, $userfrom, $badge->messagesubject, $plaintext, $message);
    }
    // Notify badge creator about the award if they receive notifications every time.
    if ($badge->notification == 1) {
        $creator = $DB->get_record('user', array('id' => $badge->usercreated), '*', MUST_EXIST);
        $a = new stdClass();
        $a->user = fullname($userto);
        $a->link = $issuedlink;
        $creatormessage = get_string('creatorbody', 'badges', $a);
        $creatorsubject = get_string('creatorsubject', 'badges', $badge->name);
        $eventdata = new stdClass();
        $eventdata->component = 'moodle';
        $eventdata->name = 'instantmessage';
        $eventdata->userfrom = $userfrom;
        $eventdata->userto = $creator;
        $eventdata->notification = 1;
        $eventdata->subject = $creatorsubject;
        $eventdata->fullmessage = $creatormessage;
        $eventdata->fullmessageformat = FORMAT_PLAIN;
        $eventdata->fullmessagehtml = format_text($creatormessage, FORMAT_HTML);
        $eventdata->smallmessage = '';
        message_send($eventdata);
        $DB->set_field('badge_issued', 'issuernotified', time(), array('badgeid' => $badge->id, 'userid' => $userid));
    }
}