コード例 #1
0
/**
 * 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;
}
コード例 #2
0
    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();
コード例 #3
0
$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');
コード例 #4
0
$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');
コード例 #5
0
}
$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();