/**
  * Convenience method to instantiate the plan review stopped event.
  *
  *
  * @param plan $plan The plan.
  * @return self
  */
 public static final function create_from_plan(plan $plan)
 {
     if (!$plan->get_id()) {
         throw new \coding_exception('The plan ID must be set.');
     }
     $event = static::create(array('contextid' => $plan->get_context()->id, 'objectid' => $plan->get_id(), 'relateduserid' => $plan->get_userid()));
     $event->add_record_snapshot(plan::TABLE, $plan->to_record());
     return $event;
 }
예제 #2
0
 /**
  * Manually grade a user competency from the plans page.
  *
  * @param mixed $planorid
  * @param int $competencyid
  * @param int $grade
  * @param string $note A note to attach to the evidence
  * @return array of \core_competency\user_competency
  */
 public static function grade_competency_in_plan($planorid, $competencyid, $grade, $note = null)
 {
     global $USER;
     static::require_enabled();
     $plan = $planorid;
     if (!is_object($planorid)) {
         $plan = new plan($planorid);
     }
     $context = $plan->get_context();
     if (!user_competency::can_grade_user($plan->get_userid())) {
         throw new required_capability_exception($context, 'moodle/competency:competencygrade', 'nopermissions', '');
     }
     // Throws exception if competency not in plan.
     $competency = $plan->get_competency($competencyid);
     $competencycontext = $competency->get_context();
     if (!has_any_capability(array('moodle/competency:competencyview', 'moodle/competency:competencymanage'), $competencycontext)) {
         throw new required_capability_exception($competencycontext, 'moodle/competency:competencyview', 'nopermissions', '');
     }
     $action = evidence::ACTION_OVERRIDE;
     $desckey = 'evidence_manualoverrideinplan';
     $result = self::add_evidence($plan->get_userid(), $competency, $context->id, $action, $desckey, 'core_competency', $plan->get_name(), false, null, $grade, $USER->id, $note);
     if ($result) {
         $uc = static::get_user_competency($plan->get_userid(), $competency->get_id());
         $event = \core\event\competency_user_competency_rated_in_plan::create_from_user_competency($uc, $plan->get_id());
         $event->trigger();
     }
     return $result;
 }
예제 #3
0
파일: lib.php 프로젝트: lucaboesch/moodle
/**
 * 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);
            }
        }
    }
}