/** * Function to be run periodically according to the moodle cron * Mails new conversations out to participants, checks for any new * participants, and cleans up expired/closed conversations * @return bool true when complete */ function dialogue_process_bulk_openrules() { global $CFG, $DB; require_once $CFG->dirroot . '/mod/dialogue/locallib.php'; mtrace('1. Dealing with bulk open rules...'); $sql = "SELECT dbor.*\r\n FROM {dialogue_bulk_opener_rules} dbor\r\n JOIN {dialogue_messages} dm ON dm.conversationid = dbor.conversationid\r\n WHERE dm.state = :bulkautomated\r\n AND dbor.lastrun = 0\r\n OR (dbor.includefuturemembers = 1 AND dbor.cutoffdate > dbor.lastrun)"; $params = array('bulkautomated' => \mod_dialogue\dialogue::STATE_BULK_AUTOMATED); $rs = $DB->get_recordset_sql($sql, $params); if ($rs->valid()) { foreach ($rs as $record) { // try and die elegantly try { // setup dialogue $dialogue = \mod_dialogue\dialogue::instance($record->dialogueid); if (!$dialogue->is_visible()) { mtrace(' Skipping hidden dialogue: ' . $dialogue->activityrecord->name); continue; } // setup conversation $conversation = new \mod_dialogue\conversation($dialogue, (int) $record->conversationid); $withcapability = 'mod/dialogue:receive'; $groupid = 0; // it either a course or a group, default to course $requiredfields = user_picture::fields('u'); if ($record->type == 'group') { $groupid = $record->sourceid; } $conversationsopened = 0; // get users that can receive $enrolledusers = get_enrolled_users($dialogue->context, $withcapability, $groupid, $requiredfields); $sentusers = $DB->get_records('dialogue_flags', array('conversationid' => $conversation->conversationid, 'flag' => \mod_dialogue\dialogue::FLAG_SENT), '', 'userid'); $users = array_diff_key($enrolledusers, $sentusers); foreach ($users as $user) { // don't start with author if ($user->id == $conversation->author->id) { continue; } // get a copy of the conversation $copy = $conversation->copy(); $copy->add_participant($user->id); $copy->save(); $copy->send(); // mark the sent in automated conversation, so can track who sent to $conversation->set_flag(\mod_dialogue\dialogue::FLAG_SENT, $user); unset($copy); mtrace(' opened ' . $conversation->subject . ' with ' . fullname($user)); // up open count $conversationsopened++; } $DB->set_field('dialogue_bulk_opener_rules', 'lastrun', time(), array('conversationid' => $record->conversationid)); mtrace(' Opened ' . $conversationsopened . ' for conversation ' . $conversation->subject); } catch (moodle_exception $e) { mtrace($e->module . ' : ' . $e->errorcode); } } } else { mtrace(' None to process'); } $rs->close(); return true; }
print_error('invalidid', 'dialogue'); } $course = $DB->get_record('course', array('id' => $activityrecord->course)); if (!$course) { print_error('coursemisconf'); } $context = \context_module::instance($cm->id, MUST_EXIST); require_login($course, false, $cm); $pageurl = new moodle_url('/mod/dialogue/conversation/close.php'); $pageurl->param('id', $conversationrecord->id); $returnurl = new moodle_url('/mod/dialogue/view.php', array('id' => $cm->id)); //$PAGE->set_pagelayout('base'); $PAGE->set_cm($cm, $course, $activityrecord); $PAGE->set_context($context); $PAGE->set_cacheable(false); $PAGE->set_url($pageurl); $dialogue = new \mod_dialogue\dialogue($cm, $course, $activityrecord); $conversation = new \mod_dialogue\conversation($dialogue, (int) $conversationrecord->id); if (!empty($confirm) && confirm_sesskey()) { $conversation->close(); // Trigger conversation closed event $eventparams = array('context' => $context, 'objectid' => $conversation->conversationid); $event = \mod_dialogue\event\conversation_closed::create($eventparams); $event->trigger(); redirect($returnurl, get_string('conversationclosed', 'dialogue', $conversation->subject)); } echo $OUTPUT->header($activityrecord->name); $pageurl->param('confirm', $conversation->conversationid); $notification = $OUTPUT->notification(get_string('conversationcloseconfirm', 'dialogue', $conversation->subject), 'notifymessage'); echo $OUTPUT->confirm($notification, $pageurl, $returnurl); echo $OUTPUT->footer();
$context = \context_module::instance($cm->id, MUST_EXIST); require_login($course, false, $cm); $pageparams = array('id' => $id, 'conversationid' => $conversationid, 'action' => $action); $pageurl = new moodle_url('/mod/dialogue/conversation.php', $pageparams); $returnurl = new moodle_url('/mod/dialogue/view.php', array('id' => $cm->id)); if (isset($SESSION->dialoguereturnurl)) { $returnurl = $SESSION->dialoguereturnurl; } $draftsurl = new moodle_url('/mod/dialogue/drafts.php', array('id' => $cm->id)); $PAGE->set_pagetype('mod-dialogue-conversation'); $PAGE->set_cm($cm, $course, $activityrecord); $PAGE->set_context($context); $PAGE->set_cacheable(false); $PAGE->set_url($pageurl); $dialogue = new \mod_dialogue\dialogue($cm, $course, $activityrecord); $conversation = new \mod_dialogue\conversation($dialogue, $conversationid); // form actions if ($action == 'create' or $action == 'edit') { require_capability('mod/dialogue:open', $context); $form = $conversation->initialise_form(); if ($form->is_submitted()) { $submitaction = $form->get_submit_action(); switch ($submitaction) { case 'cancel': redirect($returnurl); case 'send': if ($form->is_validated()) { $conversation->save_form_data(); $conversation->send(); if ($conversation->state == \mod_dialogue\dialogue::STATE_BULK_AUTOMATED) { $sendmessage = get_string('conversationopenedcron', 'dialogue');
$cm = get_coursemodule_from_instance('dialogue', $conversationrecord->dialogueid); if (!$cm) { print_error('invalidcoursemodule'); } $activityrecord = $DB->get_record('dialogue', array('id' => $cm->instance)); if (!$activityrecord) { print_error('invalidid', 'dialogue'); } $course = $DB->get_record('course', array('id' => $activityrecord->course)); if (!$course) { print_error('coursemisconf'); } $context = \context_module::instance($cm->id, MUST_EXIST); require_login($course, false, $cm); $dialogue = new \mod_dialogue\dialogue($cm, $course, $activityrecord); $conversation = new \mod_dialogue\conversation($dialogue, $conversationrecord->id); // Existing conversation. $form = $conversation->initialise_form(); if ($form->is_submitted()) { $submitaction = $form->get_submit_action(); switch ($submitaction) { case 'cancel': redirect($returnurl); case 'send': if ($form->is_validated()) { $conversation->save_form_data(); $conversation->send(); if ($conversation->state == \mod_dialogue\dialogue::STATE_BULK_AUTOMATED) { $sendmessage = get_string('conversationopenedcron', 'dialogue'); } else { $sendmessage = get_string('conversationopened', 'dialogue');
} $course = $DB->get_record('course', array('id' => $activityrecord->course)); if (!$course) { print_error('coursemisconf'); } $context = \context_module::instance($cm->id, MUST_EXIST); require_login($course, false, $cm); $pageurl = new moodle_url('/mod/dialogue/conversation/close.php'); $pageurl->param('id', $conversationrecord->id); $returnurl = new moodle_url('/mod/dialogue/view.php', array('id' => $cm->id)); //$PAGE->set_pagelayout('base'); $PAGE->set_cm($cm, $course, $activityrecord); $PAGE->set_context($context); $PAGE->set_cacheable(false); $PAGE->set_url($pageurl); $dialogue = new \mod_dialogue\dialogue($cm, $course, $activityrecord); $conversation = new \mod_dialogue\conversation($dialogue, (int) $conversationrecord->id); if (!empty($confirm) && confirm_sesskey()) { $conversation->delete(); // Trigger conversation deleted event $eventparams = array('context' => $context, 'objectid' => $conversation->conversationid); $event = \mod_dialogue\event\conversation_deleted::create($eventparams); $event->trigger(); // Redirect to the listing page we came from. redirect($returnurl, get_string('conversationdeleted', 'dialogue', $conversation->subject)); } echo $OUTPUT->header($activityrecord->name); $pageurl->param('confirm', $conversation->conversationid); $notification = $OUTPUT->notification(get_string('conversationdeleteconfirm', 'dialogue', $conversation->subject), 'notifyproblem'); echo $OUTPUT->confirm($notification, $pageurl, $returnurl); echo $OUTPUT->footer();