Skip to content

Commit

Permalink
MDL-53189 tool_lp: Create event for user competency viewed
Browse files Browse the repository at this point in the history
  • Loading branch information
taboubi authored and Frederic Massart committed Apr 18, 2016
1 parent 9157252 commit 6402015
Show file tree
Hide file tree
Showing 16 changed files with 1,232 additions and 4 deletions.
92 changes: 92 additions & 0 deletions admin/tool/lp/classes/api.php
Original file line number Diff line number Diff line change
Expand Up @@ -3290,6 +3290,98 @@ public static function user_competency_stop_review($userid, $competencyid) {
return $uc->update();
}

/**
* Log user competency viewed event.
*
* @param user_competency|int $usercompetencyorid The user competency object or user competency id
* @return bool
*/
public static function user_competency_viewed($usercompetencyorid) {
$uc = $usercompetencyorid;
if (!is_object($uc)) {
$uc = new user_competency($uc);
}

if (!$uc || !$uc->can_read()) {
throw new required_capability_exception($uc->get_context(), 'tool/lp:usercompetencyread', 'nopermissions', '');
}

\tool_lp\event\user_competency_viewed::create_from_user_competency_viewed($uc)->trigger();
return true;
}

/**
* Log user competency viewed in plan event.
*
* @param user_competency|int $usercompetencyorid The user competency object or user competency id
* @param int $planid The plan ID
* @return bool
*/
public static function user_competency_viewed_in_plan($usercompetencyorid, $planid) {
$uc = $usercompetencyorid;
if (!is_object($uc)) {
$uc = new user_competency($uc);
}

if (!$uc || !$uc->can_read()) {
throw new required_capability_exception($uc->get_context(), 'tool/lp:usercompetencyread', 'nopermissions', '');
}
$plan = new plan($planid);
if ($plan->get_status() == plan::STATUS_COMPLETE) {
throw new coding_exception('To log the user competency in completed plan use user_competency_plan_viewed method.');
}

\tool_lp\event\user_competency_viewed_in_plan::create_from_user_competency_viewed_in_plan($uc, $planid)->trigger();
return true;
}

/**
* Log user competency viewed in course event.
*
* @param user_competency|int $usercompetencyorid The user competency object or user competency id
* @param int $courseid The course ID
* @return bool
*/
public static function user_competency_viewed_in_course($usercompetencyorid, $courseid) {
$uc = $usercompetencyorid;
if (!is_object($uc)) {
$uc = new user_competency($uc);
}

if (!$uc || !$uc->can_read()) {
throw new required_capability_exception($uc->get_context(), 'tool/lp:usercompetencyread', 'nopermissions', '');
}
// Validate the course, this will throw an exception if not valid.
self::validate_course($courseid);

\tool_lp\event\user_competency_viewed_in_course::create_from_user_competency_viewed_in_course($uc, $courseid)->trigger();
return true;
}

/**
* Log user competency plan viewed event.
*
* @param user_competency_plan|int $usercompetencyplanorid The user competency plan object or user competency plan id
* @return bool
*/
public static function user_competency_plan_viewed($usercompetencyplanorid) {
$ucp = $usercompetencyplanorid;
if (!is_object($ucp)) {
$ucp = new user_competency_plan($ucp);
}

if (!$ucp || !user_competency::can_read_user($ucp->get_userid())) {
throw new required_capability_exception($ucp->get_context(), 'tool/lp:usercompetencyread', 'nopermissions', '');
}
$plan = new plan($ucp->get_planid());
if ($plan->get_status() != plan::STATUS_COMPLETE) {
throw new coding_exception('To log the user competency in non-completed plan use user_competency_viewed_in_plan method.');
}

\tool_lp\event\user_competency_plan_viewed::create_from_user_competency_plan($ucp)->trigger();
return true;
}

/**
* Check if template has related data.
*
Expand Down
142 changes: 142 additions & 0 deletions admin/tool/lp/classes/event/user_competency_plan_viewed.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* User competency plan viewed event.
*
* @package tool_lp
* @copyright 2016 Issam Taboubi <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

namespace tool_lp\event;

use core\event\base;
use tool_lp\user_competency_plan;

defined('MOODLE_INTERNAL') || die();

/**
* User competency plan viewed event class.
*
* @property-read array $other {
* Extra information about event.
*
* - int planid: id of plan for which competency is associated.
* - int competencyid: id of the competency.
* }
*
* @package tool_lp
* @since Moodle 3.1
* @copyright 2016 Issam Taboubi <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class user_competency_plan_viewed extends base {

/**
* Convenience method to instantiate the event.
*
* @param user_competency_plan $usercompetencyplan The user competency plan.
* @return self
*/
public static function create_from_user_competency_plan(user_competency_plan $usercompetencyplan) {
if (!$usercompetencyplan->get_id()) {
throw new \coding_exception('The user competency plan ID must be set.');
}
$event = static::create(array(
'contextid' => $usercompetencyplan->get_context()->id,
'objectid' => $usercompetencyplan->get_id(),
'relateduserid' => $usercompetencyplan->get_userid(),
'other' => array(
'planid' => $usercompetencyplan->get_planid(),
'competencyid' => $usercompetencyplan->get_competencyid()
)
));
$event->add_record_snapshot(user_competency_plan::TABLE, $usercompetencyplan->to_record());
return $event;
}

/**
* Returns description of what happened.
*
* @return string
*/
public function get_description() {
return "The user with id '$this->userid' viewed the user competency plan with id '$this->objectid'";
}

/**
* Return localised event name.
*
* @return string
*/
public static function get_name() {
return get_string('eventusercompetencyplanviewed', 'tool_lp');
}

/**
* Get URL related to the action
*
* @return \moodle_url
*/
public function get_url() {
return new \moodle_url('/admin/tool/lp/user_competency_in_plan.php', array(
'competencyid' => $this->other['competencyid'],
'userid' => $this->relateduserid,
'planid' => $this->other['planid']
));
}

/**
* Init method.
*
* @return void
*/
protected function init() {
$this->data['crud'] = 'r';
$this->data['edulevel'] = self::LEVEL_PARTICIPATING;
$this->data['objecttable'] = user_competency_plan::TABLE;
}

/**
* Get_objectid_mapping method.
*
* @return string the name of the restore mapping the objectid links to
*/
public static function get_objectid_mapping() {
return base::NOT_MAPPED;
}

/**
* Custom validation.
*
* Throw \coding_exception notice in case of any problems.
*/
protected function validate_data() {
if ($this->other === null) {
throw new \coding_exception('The \'competencyid\' and \'planid\' values must be set.');
}

if (!isset($this->other['competencyid'])) {
throw new \coding_exception('The \'competencyid\' value must be set.');
}

if (!isset($this->other['planid'])) {
throw new \coding_exception('The \'planid\' value must be set.');
}
}

}
132 changes: 132 additions & 0 deletions admin/tool/lp/classes/event/user_competency_viewed.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* User competency viewed event.
*
* @package tool_lp
* @copyright 2016 Issam Taboubi <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

namespace tool_lp\event;

use core\event\base;
use tool_lp\user_competency;
use context_course;
defined('MOODLE_INTERNAL') || die();

/**
* User competency viewed event class.
*
* @property-read array $other {
* Extra information about event.
*
* - int competencyid: id of competency.
* }
*
* @package tool_lp
* @since Moodle 3.1
* @copyright 2016 Issam Taboubi <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class user_competency_viewed extends base {

/**
* Convenience method to instantiate the event.
*
* @param user_competency $usercompetency The user competency.
* @return self
*/
public static function create_from_user_competency_viewed(user_competency $usercompetency) {
if (!$usercompetency->get_id()) {
throw new \coding_exception('The user competency ID must be set.');
}
$params = array(
'contextid' => $usercompetency->get_context()->id,
'objectid' => $usercompetency->get_id(),
'relateduserid' => $usercompetency->get_userid(),
'other' => array(
'competencyid' => $usercompetency->get_competencyid()
)
);

$event = static::create($params);
$event->add_record_snapshot(user_competency::TABLE, $usercompetency->to_record());
return $event;
}

/**
* Returns description of what happened.
*
* @return string
*/
public function get_description() {
return "The user with id '$this->userid' viewed the user competency with id '$this->objectid'";
}

/**
* Return localised event name.
*
* @return string
*/
public static function get_name() {
return get_string('eventusercompetencyviewed', 'tool_lp');
}

/**
* Get URL related to the action
*
* @return \moodle_url
*/
public function get_url() {
return new \moodle_url('/admin/tool/lp/user_competency.php', array(
'id' => $this->objectid
));
}

/**
* Init method.
*
* @return void
*/
protected function init() {
$this->data['crud'] = 'r';
$this->data['edulevel'] = self::LEVEL_PARTICIPATING;
$this->data['objecttable'] = user_competency::TABLE;
}

/**
* Get_objectid_mapping method.
*
* @return string the name of the restore mapping the objectid links to
*/
public static function get_objectid_mapping() {
return base::NOT_MAPPED;
}

/**
* Custom validation.
*
* Throw \coding_exception notice in case of any problems.
*/
protected function validate_data() {
if (!isset($this->other) || !isset($this->other['competencyid'])) {
throw new \coding_exception('The \'competencyid\' value must be set.');
}
}

}
Loading

0 comments on commit 6402015

Please sign in to comment.