Ejemplo n.º 1
0
/**
 * Hook when a comment is added.
 *
 * @param  stdClass $comment The comment.
 * @param  stdClass $params The parameters.
 * @return array
 */
function core_competency_comment_add($comment, $params)
{
    global $USER;
    if (!get_config('core_competency', 'enabled')) {
        return;
    }
    if ($params->commentarea == 'user_competency') {
        $uc = new user_competency($params->itemid);
        // Message both the user and the reviewer, except when they are the author of the message.
        $recipients = array($uc->get_userid());
        if ($uc->get_reviewerid()) {
            $recipients[] = $uc->get_reviewerid();
        }
        $recipients = array_diff($recipients, array($comment->userid));
        if (empty($recipients)) {
            return;
        }
        // Get the sender.
        $user = $USER;
        if ($USER->id != $comment->userid) {
            $user = core_user::get_user($comment->userid);
        }
        $fullname = fullname($user);
        // Get the competency.
        $competency = $uc->get_competency();
        $competencyname = format_string($competency->get_shortname(), true, array('context' => $competency->get_context()));
        // We want to send a message for one plan, trying to find an active one first, or the last modified one.
        $plan = null;
        $plans = $uc->get_plans();
        foreach ($plans as $candidate) {
            if ($candidate->get_status() == plan::STATUS_ACTIVE) {
                $plan = $candidate;
                break;
            } else {
                if (!empty($plan) && $plan->get_timemodified() < $candidate->get_timemodified()) {
                    $plan = $candidate;
                } else {
                    if (empty($plan)) {
                        $plan = $candidate;
                    }
                }
            }
        }
        // Urls.
        // TODO MDL-52749 Replace the link to the plan with the user competency page.
        if (empty($plan)) {
            $urlname = get_string('userplans', 'core_competency');
            $url = url::plans($uc->get_userid());
        } else {
            $urlname = $competencyname;
            $url = url::user_competency_in_plan($uc->get_userid(), $uc->get_competencyid(), $plan->get_id());
        }
        // Construct the message content.
        $fullmessagehtml = get_string('usercommentedonacompetencyhtml', 'core_competency', array('fullname' => $fullname, 'competency' => $competencyname, 'comment' => format_text($comment->content, $comment->format, array('context' => $params->context->id)), 'url' => $url->out(true), 'urlname' => $urlname));
        if ($comment->format == FORMAT_PLAIN || $comment->format == FORMAT_MOODLE) {
            $format = FORMAT_MOODLE;
            $fullmessage = get_string('usercommentedonacompetency', 'core_competency', array('fullname' => $fullname, 'competency' => $competencyname, 'comment' => $comment->content, 'url' => $url->out(false)));
        } else {
            $format = FORMAT_HTML;
            $fullmessage = $fullmessagehtml;
        }
        $message = new \core\message\message();
        $message->courseid = SITEID;
        $message->component = 'moodle';
        $message->name = 'competencyusercompcomment';
        $message->notification = 1;
        $message->userfrom = core_user::get_noreply_user();
        $message->subject = get_string('usercommentedonacompetencysubject', 'core_competency', $fullname);
        $message->fullmessage = $fullmessage;
        $message->fullmessageformat = $format;
        $message->fullmessagehtml = $fullmessagehtml;
        $message->smallmessage = get_string('usercommentedonacompetencysmall', 'core_competency', array('fullname' => $fullname, 'competency' => $competencyname));
        $message->contexturl = $url->out(false);
        $message->contexturlname = $urlname;
        // Message each recipient.
        foreach ($recipients as $recipient) {
            $msgcopy = clone $message;
            $msgcopy->userto = $recipient;
            message_send($msgcopy);
        }
    } else {
        if ($params->commentarea == 'plan') {
            $plan = new plan($params->itemid);
            // Message both the user and the reviewer, except when they are the author of the message.
            $recipients = array($plan->get_userid());
            if ($plan->get_reviewerid()) {
                $recipients[] = $plan->get_reviewerid();
            }
            $recipients = array_diff($recipients, array($comment->userid));
            if (empty($recipients)) {
                return;
            }
            // Get the sender.
            $user = $USER;
            if ($USER->id != $comment->userid) {
                $user = core_user::get_user($comment->userid);
            }
            $fullname = fullname($user);
            $planname = format_string($plan->get_name(), true, array('context' => $plan->get_context()));
            $urlname = $planname;
            $url = url::plan($plan->get_id());
            // Construct the message content.
            $fullmessagehtml = get_string('usercommentedonaplanhtml', 'core_competency', array('fullname' => $fullname, 'plan' => $planname, 'comment' => format_text($comment->content, $comment->format, array('context' => $params->context->id)), 'url' => $url->out(true), 'urlname' => $urlname));
            if ($comment->format == FORMAT_PLAIN || $comment->format == FORMAT_MOODLE) {
                $format = FORMAT_MOODLE;
                $fullmessage = get_string('usercommentedonaplan', 'core_competency', array('fullname' => $fullname, 'plan' => $planname, 'comment' => $comment->content, 'url' => $url->out(false)));
            } else {
                $format = FORMAT_HTML;
                $fullmessage = $fullmessagehtml;
            }
            $message = new \core\message\message();
            $message->courseid = SITEID;
            $message->component = 'moodle';
            $message->name = 'competencyplancomment';
            $message->notification = 1;
            $message->userfrom = core_user::get_noreply_user();
            $message->subject = get_string('usercommentedonaplansubject', 'core_competency', $fullname);
            $message->fullmessage = $fullmessage;
            $message->fullmessageformat = $format;
            $message->fullmessagehtml = $fullmessagehtml;
            $message->smallmessage = get_string('usercommentedonaplansmall', 'core_competency', array('fullname' => $fullname, 'plan' => $planname));
            $message->contexturl = $url->out(false);
            $message->contexturlname = $urlname;
            // Message each recipient.
            foreach ($recipients as $recipient) {
                $msgcopy = clone $message;
                $msgcopy->userto = $recipient;
                message_send($msgcopy);
            }
        }
    }
}