diff --git a/mod/feedback/classes/event/course_module_viewed.php b/mod/feedback/classes/event/course_module_viewed.php new file mode 100644 index 00000000000..f4e95876bc7 --- /dev/null +++ b/mod/feedback/classes/event/course_module_viewed.php @@ -0,0 +1,127 @@ +. + +/** + * This file contains an event for when a feedback activity is viewed. + * + * @package mod_feedback + * @copyright 2013 Ankit Agarwal + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_feedback\event; +defined('MOODLE_INTERNAL') || die(); + +/** + * Event for when a feedback activity is viewed. + * + * @package mod_feedback + * @copyright 2013 Ankit Agarwal + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class course_module_viewed extends \core\event\content_viewed { + + /** + * Init method. + */ + protected function init() { + $this->data['crud'] = 'r'; + $this->data['level'] = self::LEVEL_PARTICIPATING; + $this->data['objecttable'] = 'feedback'; + } + + /** + * Returns non-localised description of what happened. + * + * @return string + */ + public function get_description() { + return 'User with id ' . $this->userid . ' viewed feedback activity ' . $this->get_url(); + } + + /** + * Returns localised general event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventcoursemoduleviewed', 'mod_feedback'); + } + + /** + * Get URL related to the action + * + * @return \moodle_url + */ + public function get_url() { + return new \moodle_url('/mod/feedback/view.php', array('id' => $this->other['cmid'])); + } + + /** + * Define whether a user can view the event or not. Make sure no one except admin can see details of an anonymous response. + * + * @param int|\stdClass $userorid ID of the user. + * @return bool True if the user can view the event, false otherwise. + */ + public function can_view($userorid = null) { + global $USER; + + if (empty($userorid)) { + $userorid = $USER; + } + if ($this->other['anonymous'] == FEEDBACK_ANONYMOUS_YES) { + return is_siteadmin($userorid); + } else { + return has_capability('mod/feedback:viewreports', $this->context, $userorid); + } + } + + /** + * Replace add_to_log() statement.Do this only for the case when anonymous mode is off, + * since this is what was happening before. + * + * @return array of parameters to be passed to legacy add_to_log() function. + */ + protected function get_legacy_logdata() { + if ($this->other['anonymous'] == FEEDBACK_ANONYMOUS_YES) { + return null; + } else { + return array($this->courseid, 'feedback', 'view', 'view.php?id=' . $this->other['cmid'], $this->other['instanceid'], + $this->other['cmid']); + } + } + + /** + * Custom validations. + * + * @throws \coding_exception in case of any problems. + */ + protected function validate_data() { + if (!isset($this->other['anonymous'])) { + throw new \coding_exception("Field other['anonymous'] cannot be empty"); + } + if (!isset($this->other['cmid'])) { + throw new \coding_exception("Field other['cmid'] cannot be empty"); + } + if (!isset($this->other['instanceid'])) { + throw new \coding_exception("Field other['instanceid'] cannot be empty"); + } + + // Call parent validations. + parent::validate_data(); + } +} + diff --git a/mod/feedback/classes/event/instances_list_viewed.php b/mod/feedback/classes/event/instances_list_viewed.php new file mode 100644 index 00000000000..88a2d739df8 --- /dev/null +++ b/mod/feedback/classes/event/instances_list_viewed.php @@ -0,0 +1,74 @@ +. + +/** + * mod_feedback instances list viewed event. + * + * @package mod_feedback + * @copyright 2013 Ankit Agarwal + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_feedback\event; +defined('MOODLE_INTERNAL') || die(); + +/** + * mod_feedback instances list viewed event class. + * + * @package mod_feedback + * @copyright 2013 Ankit Agarwal + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class instances_list_viewed extends \core\event\course_module_instances_list_viewed { + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + return "User $this->userid viewed the list of feedback activities in the course $this->courseid."; + } + + /** + * Return the legacy event log data. + * + * @return array + */ + protected function get_legacy_logdata() { + return array($this->courseid, 'feedback', 'view all', 'index.php?id=' . $this->courseid, ''); + } + + /** + * Return localised event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventinstanceslistviewed', 'mod_feedback'); + } + + /** + * Get URL related to the action + * + * @return \moodle_url + */ + public function get_url() { + return new \moodle_url('/mod/feedback/index.php', array('id' => $this->courseid)); + } + +} + diff --git a/mod/feedback/classes/event/response_deleted.php b/mod/feedback/classes/event/response_deleted.php new file mode 100644 index 00000000000..49bee251413 --- /dev/null +++ b/mod/feedback/classes/event/response_deleted.php @@ -0,0 +1,112 @@ +. + +/** + * Event to be triggered when a feedback response is deleted. + * + * @package mod_feedback + * @copyright 2013 Ankit Agarwal + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later. + */ + +namespace mod_feedback\event; +defined('MOODLE_INTERNAL') || die(); + +/** + * Class response_deleted + * + * Class for event to be triggered when a feedback response is deleted. + * + * @package mod_feedback + * @copyright 2013 Ankit Agarwal + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later. + */ +class response_deleted extends \core\event\base { + + /** + * Set basic properties for the event. + */ + protected function init() { + $this->data['objecttable'] = 'feedback_completed'; + $this->data['crud'] = 'd'; + $this->data['level'] = self::LEVEL_PARTICIPATING; + } + + /** + * Returns localised general event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventresponsedeleted', 'mod_feedback'); + } + + /** + * Returns non-localised event description with id's for admin use only. + * + * @return string + */ + public function get_description() { + return 'The feedback from user ' . $this->other['relateduserid']. ' was deleted by' . $this->userid; + } + + /** + * Replace add_to_log() statement. + * + * @return array of parameters to be passed to legacy add_to_log() function. + */ + protected function get_legacy_logdata() { + return array($this->courseid, 'feedback', 'delete', 'view.php?id=' . $this->other['cmid'], $this->other['instanceid'], + $this->other['instanceid']); + } + + /** + * Define whether a user can view the event or not. Make sure no one except admin can see details of an anonymous response. + * + * @param int|\stdClass $userorid ID of the user. + * @return bool True if the user can view the event, false otherwise. + */ + public function can_view($userorid = null) { + global $USER; + + if (empty($userorid)) { + $userorid = $USER; + } + if ($this->other['anonymous'] == FEEDBACK_ANONYMOUS_YES) { + return is_siteadmin($userorid); + } else { + return has_capability('mod/feedback:viewreports', $this->context, $userorid); + } + } + + /** + * Custom validations + * + * @throws \coding_exception in case of any problems. + */ + protected function validate_data() { + if (!isset($this->other['anonymous'])) { + throw new \coding_exception("Field other['anonymous'] cannot be empty"); + } + if (!isset($this->other['cmid'])) { + throw new \coding_exception("Field other['cmid'] cannot be empty"); + } + if (!isset($this->other['instanceid'])) { + throw new \coding_exception("Field other['instanceid'] cannot be empty"); + } + } +} + diff --git a/mod/feedback/classes/event/response_submitted.php b/mod/feedback/classes/event/response_submitted.php new file mode 100644 index 00000000000..74abca974de --- /dev/null +++ b/mod/feedback/classes/event/response_submitted.php @@ -0,0 +1,134 @@ +. + +/** + * Event to be triggered when a feedback response is submitted. + * + * @package mod_feedback + * @copyright 2013 Ankit Agarwal + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later. + */ + +namespace mod_feedback\event; +defined('MOODLE_INTERNAL') || die(); + +/** + * Class response_submitted + * + * Class for event to be triggered when a feedback response is submitted. + * + * @package mod_feedback + * @copyright 2013 Ankit Agarwal + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later. + */ +class response_submitted extends \core\event\base { + + /** + * Set basic properties for the event. + */ + protected function init() { + global $CFG; + + require_once($CFG->dirroot.'/mod/feedback/lib.php'); + $this->data['objecttable'] = 'feedback_completed'; + $this->data['crud'] = 'c'; + $this->data['level'] = self::LEVEL_PARTICIPATING; + } + + /** + * Returns localised general event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventresponsesubmitted', 'mod_feedback'); + } + + /** + * Returns non-localised event description with id's for admin use only. + * + * @return string + */ + public function get_description() { + return 'The user ' . $this->other['relateduserid']. ' submited a feedback'; + } + + /** + * Returns relevant URL based on the anonymous mode of the response. + * @return \moodle_url + */ + public function get_url() { + if ($this->other['anonymous'] == FEEDBACK_ANONYMOUS_YES) { + return new \moodle_url('/mod/feedback/show_entries.php' , array('id' => $this->other['cmid'], + 'do_show' => 'showoneentry' , 'userid' => $this->relateduserid)); + } else { + return new \moodle_url('/mod/feedback/show_entries_anonym.php', array('id' => $this->other['cmid'], + 'do_show' => 'showoneentry', 'showall', 'showcompleted' => $this->objectid)); + } + } + + /** + * Replace add_to_log() statement. Do this only for the case when anonymous mode is off, + * since this is what was happening before. + * + * @return array of parameters to be passed to legacy add_to_log() function. + */ + protected function get_legacy_logdata() { + if ($this->other['anonymous'] == FEEDBACK_ANONYMOUS_YES) { + return null; + } else { + return array($this->courseid, 'feedback', 'submit', 'view.php?id=' . $this->other['cmid'], + $this->other['instanceid'], $this->other['cmid'], $this->relateduserid); + } + } + + /** + * Define whether a user can view the event or not. Make sure no one except admin can see details of an anonymous response. + * + * @param int|\stdClass $userorid ID of the user. + * @return bool True if the user can view the event, false otherwise. + */ + public function can_view($userorid = null) { + global $USER; + + if (empty($userorid)) { + $userorid = $USER; + } + if ($this->other['anonymous'] == FEEDBACK_ANONYMOUS_YES) { + return is_siteadmin($userorid); + } else { + return has_capability('mod/feedback:viewreports', $this->context, $userorid); + } + } + + /** + * Custom validations. + * + * @throws \coding_exception in case of any problems. + */ + protected function validate_data() { + if (!isset($this->other['anonymous'])) { + throw new \coding_exception("Field other['anonymous'] cannot be empty"); + } + if (!isset($this->other['cmid'])) { + throw new \coding_exception("Field other['cmid'] cannot be empty"); + } + if (!isset($this->other['instanceid'])) { + throw new \coding_exception("Field other['instanceid'] cannot be empty"); + } + } +} + diff --git a/mod/feedback/lang/en/feedback.php b/mod/feedback/lang/en/feedback.php index f6d4fc9875a..f793a2cd2ef 100644 --- a/mod/feedback/lang/en/feedback.php +++ b/mod/feedback/lang/en/feedback.php @@ -102,6 +102,10 @@ You can view it here.'; $string['entries_saved'] = 'Your answers have been saved. Thank you.'; $string['export_questions'] = 'Export questions'; $string['export_to_excel'] = 'Export to Excel'; +$string['eventcoursemoduleviewed'] = 'Course module viewed'; +$string['eventresponsedeleted'] = 'Response deleted'; +$string['eventresponsesubmitted'] = 'Response submitted'; +$string['eventinstanceslistviewed'] = 'Instances list viewed'; $string['feedback:addinstance'] = 'Add a new feedback'; $string['feedbackclose'] = 'Allow answers to'; $string['feedback:complete'] = 'Complete a feedback';