diff --git a/message.html b/message.html new file mode 100644 index 0000000..6ee95fb --- /dev/null +++ b/message.html @@ -0,0 +1,59 @@ +
\ No newline at end of file diff --git a/messageselect.php b/messageselect.php new file mode 100644 index 0000000..604d8f4 --- /dev/null +++ b/messageselect.php @@ -0,0 +1,181 @@ +. + +/** + * Copied from Moodle 3.3 messageselect.php - allows sending messages to multiple users. + * + * @copyright 1999 Martin Dougiamas http://dougiamas.com + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @package core_user + */ +require_once('../../config.php'); +require_once($CFG->dirroot.'/message/lib.php'); +$id = required_param('id', PARAM_INT); +$messagebody = optional_param('messagebody', '', PARAM_CLEANHTML); +$send = optional_param('send', '', PARAM_BOOL); +$preview = optional_param('preview', '', PARAM_BOOL); +$edit = optional_param('edit', '', PARAM_BOOL); +$returnto = optional_param('returnto', '', PARAM_LOCALURL); +$format = optional_param('format', FORMAT_MOODLE, PARAM_INT); +$deluser = optional_param('deluser', 0, PARAM_INT); +$url = new moodle_url('/user/messageselect.php', array('id' => $id)); +if ($messagebody !== '') { + $url->param('messagebody', $messagebody); +} +if ($send !== '') { + $url->param('send', $send); +} +if ($preview !== '') { + $url->param('preview', $preview); +} +if ($edit !== '') { + $url->param('edit', $edit); +} +if ($returnto !== '') { + $url->param('returnto', $returnto); +} +if ($format !== FORMAT_MOODLE) { + $url->param('format', $format); +} +if ($deluser !== 0) { + $url->param('deluser', $deluser); +} +$PAGE->set_url($url); +if (!$course = $DB->get_record('course', array('id' => $id))) { + print_error('invalidcourseid'); +} +require_login($course); +$coursecontext = context_course::instance($id); // Course context. +$systemcontext = context_system::instance(); // SYSTEM context. +require_capability('moodle/course:bulkmessaging', $coursecontext); +if (empty($SESSION->emailto)) { + $SESSION->emailto = array(); +} +if (!array_key_exists($id, $SESSION->emailto)) { + $SESSION->emailto[$id] = array(); +} +if ($deluser) { + if (array_key_exists($id, $SESSION->emailto) && array_key_exists($deluser, $SESSION->emailto[$id])) { + unset($SESSION->emailto[$id][$deluser]); + } +} +if (empty($SESSION->emailselect[$id]) || $messagebody) { + $SESSION->emailselect[$id] = array('messagebody' => $messagebody); +} +$messagebody = $SESSION->emailselect[$id]['messagebody']; +$count = 0; +if ($data = data_submitted()) { + require_sesskey(); + $namefields = get_all_user_name_fields(true); + foreach ($data as $k => $v) { + if (preg_match('/^(user|teacher)(\d+)$/', $k, $m)) { + if (!array_key_exists($m[2], $SESSION->emailto[$id])) { + if ($user = $DB->get_record_select('user', "id = ?", array($m[2]), 'id, '. + $namefields . ', idnumber, email, mailformat, lastaccess, lang, '. + 'maildisplay, auth, suspended, deleted, emailstop, username')) { + $SESSION->emailto[$id][$m[2]] = $user; + $count++; + } + } + } + } +} +if ($course->id == SITEID) { + $strtitle = get_string('sitemessage'); + $PAGE->set_pagelayout('admin'); +} else { + $strtitle = get_string('coursemessage'); + $PAGE->set_pagelayout('incourse'); +} +$link = null; +if (has_capability('moodle/course:viewparticipants', $coursecontext) || + has_capability('moodle/site:viewparticipants', $systemcontext)) { + $link = new moodle_url("/user/index.php", array('id' => $course->id)); +} +$PAGE->navbar->add(get_string('participants'), $link); +$PAGE->navbar->add($strtitle); +$PAGE->set_title($strtitle); +$PAGE->set_heading($strtitle); +echo $OUTPUT->header(); + +if ($count) { + if ($count == 1) { + $heading = get_string('addedrecip', 'moodle', $count); + } else { + $heading = get_string('addedrecips', 'moodle', $count); + } + echo $OUTPUT->heading($heading); +} +if (!empty($messagebody) && !$edit && !$deluser && ($preview || $send)) { + require_sesskey(); + if (count($SESSION->emailto[$id])) { + if (!empty($preview)) { + echo '"; + } else if (!empty($send)) { + $fails = array(); + foreach ($SESSION->emailto[$id] as $user) { + if (!message_post_message($USER, $user, $messagebody, $format)) { + $user->fullname = fullname($user); + $fails[] = get_string('messagedselecteduserfailed', 'moodle', $user); + }; + } + if (empty($fails)) { + echo $OUTPUT->heading(get_string('messagedselectedusers')); + unset($SESSION->emailto[$id]); + unset($SESSION->emailselect[$id]); + } else { + echo $OUTPUT->heading(get_string('messagedselectedcountusersfailed', 'moodle', count($fails))); + echo ''.get_string('backtoparticipants').'
'; + } + echo $OUTPUT->footer(); + exit; + } else { + echo $OUTPUT->notification(get_string('nousersyet')); + } +} +echo ''.get_string("keepsearching").''. + ((count($SESSION->emailto[$id])) ? ', '.get_string('usemessageform') : '').'
'; +if ((!empty($send) || !empty($preview) || !empty($edit)) && (empty($messagebody))) { + echo $OUTPUT->notification(get_string('allfieldsrequired')); +} +if (count($SESSION->emailto[$id])) { + require_sesskey(); + require("message.html"); +} +$PAGE->requires->yui_module('moodle-core-formchangechecker', + 'M.core_formchangechecker.init', + array(array( + 'formid' => 'theform' + )) +); +$PAGE->requires->string_for_js('changesmadereallygoaway', 'moodle'); +echo $OUTPUT->footer(); \ No newline at end of file diff --git a/renderer.php b/renderer.php index 93a19a4..d08b4f6 100644 --- a/renderer.php +++ b/renderer.php @@ -1177,8 +1177,6 @@ class mod_attendance_renderer extends plugin_renderer_base { if ($bulkmessagecapability) { // Require that the user can bulk message users. // Display check boxes that will allow the user to send a message to the students that have been checked. $output = html_writer::empty_tag('input', array('name' => 'sesskey', 'type' => 'hidden', 'value' => sesskey())); - $output .= html_writer::empty_tag('input', array('name' => 'formaction', 'type' => 'hidden', - 'value' => 'messageselect.php')); $output .= html_writer::empty_tag('input', array('name' => 'id', 'type' => 'hidden', 'value' => $COURSE->id)); $output .= html_writer::empty_tag('input', array('name' => 'returnto', 'type' => 'hidden', 'value' => s(me()))); $output .= html_writer::table($table).html_writer::tag('div', get_string('users').': '.count($reportdata->users));; @@ -1187,7 +1185,7 @@ class mod_attendance_renderer extends plugin_renderer_base { 'value' => get_string('messageselectadd'), 'class' => 'btn btn-secondary')), array('class' => 'buttons')); - $url = new moodle_url('/user/action_redir.php'); + $url = new moodle_url('/mod/attendance/messageselect.php'); return html_writer::tag('form', $output, array('action' => $url->out(), 'method' => 'post')); } else { return html_writer::table($table).html_writer::tag('div', get_string('users').': '.count($reportdata->users));