/**
  * 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
파일: external.php 프로젝트: evltuma/moodle
 /**
  * Grade a competency in a plan.
  *
  * @param int $planid The plan id
  * @param int $competencyid The competency id
  * @param int $grade The new grade value
  * @param string $note A note to add to the evidence
  * @return bool
  */
 public static function grade_competency_in_plan($planid, $competencyid, $grade, $note = null)
 {
     global $USER, $PAGE;
     $params = self::validate_parameters(self::grade_competency_in_plan_parameters(), array('planid' => $planid, 'competencyid' => $competencyid, 'grade' => $grade, 'note' => $note));
     $plan = new plan($params['planid']);
     $context = $plan->get_context();
     self::validate_context($context);
     $output = $PAGE->get_renderer('core');
     $evidence = api::grade_competency_in_plan($plan->get_id(), $params['competencyid'], $params['grade'], $params['note']);
     $competency = api::read_competency($params['competencyid']);
     $scale = $competency->get_scale();
     $exporter = new evidence_exporter($evidence, ['actionuser' => $USER, 'scale' => $scale, 'usercompetency' => null, 'usercompetencyplan' => null]);
     return $exporter->export($output);
 }
예제 #4
0
 /**
  * Set-up a plan page.
  *
  * Example:
  * list($title, $subtitle) = page_helper::setup_for_plan($url, $template, $pagetitle);
  * echo $OUTPUT->heading($title);
  * echo $OUTPUT->heading($subtitle, 3);
  *
  * @param  int $userid The user ID.
  * @param  moodle_url $url The current page.
  * @param  \core_competency\plan $plan The plan, if any.
  * @param  string $subtitle The title of the subpage, if any.
  * @param  string $returntype The desired return page.
  * @return array With the following:
  *               - Page title
  *               - Page sub title
  *               - Return URL (main plan page)
  */
 public static function setup_for_plan($userid, moodle_url $url, $plan = null, $subtitle = '', $returntype = null)
 {
     global $PAGE, $USER;
     // Check that the user is a valid user.
     $user = core_user::get_user($userid);
     if (!$user || !core_user::is_real_user($userid)) {
         throw new \moodle_exception('invaliduser', 'error');
     }
     $context = context_user::instance($user->id);
     $plansurl = new moodle_url('/admin/tool/lp/plans.php', array('userid' => $userid));
     $planurl = null;
     if ($plan) {
         $planurl = new moodle_url('/admin/tool/lp/plan.php', array('id' => $plan->get_id()));
     }
     $returnurl = $plansurl;
     if ($returntype != 'plans' && $planurl) {
         $returnurl = $planurl;
     }
     $PAGE->navigation->override_active_url($plansurl);
     $PAGE->set_context($context);
     // If not his own plan, we want to extend the navigation for the user.
     $iscurrentuser = $USER->id == $user->id;
     if (!$iscurrentuser) {
         $PAGE->navigation->extend_for_user($user);
         $PAGE->navigation->set_userid_for_parent_checks($user->id);
     }
     if (!empty($plan)) {
         $title = format_string($plan->get_name(), true, array('context' => $context));
     } else {
         $title = get_string('learningplans', 'tool_lp');
     }
     $PAGE->set_pagelayout('standard');
     $PAGE->set_url($url);
     $PAGE->set_title($title);
     $PAGE->set_heading($title);
     if (!empty($plan)) {
         $PAGE->navbar->add($title, $planurl);
         if (!empty($subtitle)) {
             $PAGE->navbar->add($subtitle, $url);
         }
     } else {
         if (!empty($subtitle)) {
             // We're in a sub page without a specific plan.
             $PAGE->navbar->add($subtitle, $url);
         }
     }
     return array($title, $subtitle, $returnurl);
 }
예제 #5
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);
            }
        }
    }
}