示例#1
0
/**
 * deletes a completed given by completedid.
 * all related data such values or tracking data also will be deleted
 *
 * @global object
 * @param int $completedid
 * @return boolean
 */
function feedback_delete_completed($completedid)
{
    global $DB, $CFG;
    require_once $CFG->libdir . '/completionlib.php';
    if (!($completed = $DB->get_record('feedback_completed', array('id' => $completedid)))) {
        return false;
    }
    if (!($feedback = $DB->get_record('feedback', array('id' => $completed->feedback)))) {
        return false;
    }
    if (!($course = $DB->get_record('course', array('id' => $feedback->course)))) {
        return false;
    }
    if (!($cm = get_coursemodule_from_instance('feedback', $feedback->id))) {
        return false;
    }
    //first we delete all related values
    $DB->delete_records('feedback_value', array('completed' => $completed->id));
    //now we delete all tracking data
    $params = array('completed' => $completed->id, 'feedback' => $completed->feedback);
    if ($tracking = $DB->get_record('feedback_tracking', $params)) {
        $DB->delete_records('feedback_tracking', array('completed' => $completed->id));
    }
    // Update completion state
    $completion = new completion_info($course);
    if ($completion->is_enabled($cm) && $feedback->completionsubmit) {
        $completion->update_state($cm, COMPLETION_INCOMPLETE, $completed->userid);
    }
    // Last we delete the completed-record.
    $return = $DB->delete_records('feedback_completed', array('id' => $completed->id));
    // Trigger event for the delete action we performed.
    $event = \mod_feedback\event\response_deleted::create(array('relateduserid' => $completed->userid, 'objectid' => $completedid, 'courseid' => $course->id, 'context' => context_module::instance($cm->id), 'anonymous' => $completed->anonymous_response == FEEDBACK_ANONYMOUS_YES, 'other' => array('cmid' => $cm->id, 'instanceid' => $feedback->id, 'anonymous' => $completed->anonymous_response)));
    $event->add_record_snapshot('feedback_completed', $completed);
    $event->add_record_snapshot('course', $course);
    $event->add_record_snapshot('feedback', $feedback);
    $event->trigger();
    return $return;
}
示例#2
0
    /**
     * Tests for event validations related to feedback response deletion.
     */
    public function test_response_deleted_event_exceptions() {

        $this->resetAfterTest();

        $context = context_module::instance($this->eventcm->id);

        // Test not setting instanceid.
        try {
            \mod_feedback\event\response_deleted::create(array(
                'context'  => $context,
                'objectid' => $this->eventfeedbackcompleted->id,
                'other'    => array('cmid' => $this->eventcm->id, 'anonymous' => 2)
            ));
            $this->assertEventContextNotUsed($event);
            $this->fail("Event validation should not allow \\mod_feedback\\event\\response_deleted to be triggered without
                    other['instanceid']");
        } catch (coding_exception $e) {
            $this->assertContains("Field other['instanceid'] cannot be empty", $e->getMessage());
        }

        // Test not setting cmid.
        try {
            \mod_feedback\event\response_deleted::create(array(
                'context'  => $context,
                'objectid' => $this->eventfeedbackcompleted->id,
                'other'    => array('instanceid' => $this->eventfeedback->id, 'anonymous' => 2)
            ));
            $this->fail("Event validation should not allow \\mod_feedback\\event\\response_deleted to be triggered without
                    other['cmid']");
        } catch (coding_exception $e) {
            $this->assertContains("Field other['cmid'] cannot be empty", $e->getMessage());
        }

        // Test not setting anonymous.
        try {
            \mod_feedback\event\response_submitted::create(array(
                'context'  => $context,
                'objectid' => $this->eventfeedbackcompleted->id,
                'other'    => array('cmid' => $this->eventcm->id, 'instanceid' => $this->eventfeedback->id)
            ));
            $this->fail("Event validation should not allow \\mod_feedback\\event\\response_deleted to be triggered without
                    other['anonymous']");
        } catch (coding_exception $e) {
            $this->assertContains("Field other['anonymous'] cannot be empty", $e->getMessage());
        }
    }
示例#3
0
文件: lib.php 项目: evltuma/moodle
/**
 * deletes a completed given by completedid.
 * all related data such values or tracking data also will be deleted
 *
 * @param int|stdClass $completed
 * @param stdClass $feedback
 * @param stdClass|cm_info $cm
 * @param stdClass $course
 * @return boolean
 */
function feedback_delete_completed($completed, $feedback = null, $cm = null, $course = null)
{
    global $DB, $CFG;
    require_once $CFG->libdir . '/completionlib.php';
    if (!isset($completed->id)) {
        if (!($completed = $DB->get_record('feedback_completed', array('id' => $completed)))) {
            return false;
        }
    }
    if (!$feedback && !($feedback = $DB->get_record('feedback', array('id' => $completed->feedback)))) {
        return false;
    }
    if (!$course && !($course = $DB->get_record('course', array('id' => $feedback->course)))) {
        return false;
    }
    if (!$cm && !($cm = get_coursemodule_from_instance('feedback', $feedback->id))) {
        return false;
    }
    //first we delete all related values
    $DB->delete_records('feedback_value', array('completed' => $completed->id));
    // Update completion state
    $completion = new completion_info($course);
    if ($completion->is_enabled($cm) && $feedback->completionsubmit) {
        $completion->update_state($cm, COMPLETION_INCOMPLETE, $completed->userid);
    }
    // Last we delete the completed-record.
    $return = $DB->delete_records('feedback_completed', array('id' => $completed->id));
    // Trigger event for the delete action we performed.
    $event = \mod_feedback\event\response_deleted::create_from_record($completed, $cm, $feedback);
    $event->trigger();
    return $return;
}