示例#1
0
/**
 * this saves the temporary saved values permanently
 *
 * @global object
 * @param object $feedbackcompletedtmp the temporary completed
 * @param object $feedbackcompleted the target completed
 * @param int $userid
 * @return int the id of the completed
 */
function feedback_save_tmp_values($feedbackcompletedtmp, $feedbackcompleted, $userid)
{
    global $DB;
    $tmpcplid = $feedbackcompletedtmp->id;
    if ($feedbackcompleted) {
        //first drop all existing values
        $DB->delete_records('feedback_value', array('completed' => $feedbackcompleted->id));
        //update the current completed
        $feedbackcompleted->timemodified = time();
        $DB->update_record('feedback_completed', $feedbackcompleted);
    } else {
        $feedbackcompleted = clone $feedbackcompletedtmp;
        $feedbackcompleted->id = '';
        $feedbackcompleted->userid = $userid;
        $feedbackcompleted->timemodified = time();
        $feedbackcompleted->id = $DB->insert_record('feedback_completed', $feedbackcompleted);
    }
    //save all the new values from feedback_valuetmp
    //get all values of tmp-completed
    $params = array('completed' => $feedbackcompletedtmp->id);
    if (!($values = $DB->get_records('feedback_valuetmp', $params))) {
        return false;
    }
    foreach ($values as $value) {
        //check if there are depend items
        $item = $DB->get_record('feedback_item', array('id' => $value->item));
        if ($item->dependitem > 0) {
            $check = feedback_compare_item_value($tmpcplid, $item->dependitem, $item->dependvalue, true);
        } else {
            $check = true;
        }
        if ($check) {
            unset($value->id);
            $value->completed = $feedbackcompleted->id;
            $DB->insert_record('feedback_value', $value);
        }
    }
    //drop all the tmpvalues
    $DB->delete_records('feedback_valuetmp', array('completed' => $tmpcplid));
    $DB->delete_records('feedback_completedtmp', array('id' => $tmpcplid));
    // Trigger event for the delete action we performed.
    $cm = get_coursemodule_from_instance('feedback', $feedbackcompleted->feedback);
    $event = \mod_feedback\event\response_submitted::create(array('relateduserid' => $userid, 'objectid' => $feedbackcompleted->id, 'context' => context_module::instance($cm->id), 'anonymous' => $feedbackcompleted->anonymous_response == FEEDBACK_ANONYMOUS_YES, 'other' => array('cmid' => $cm->id, 'instanceid' => $feedbackcompleted->feedback, 'anonymous' => $feedbackcompleted->anonymous_response)));
    $event->add_record_snapshot('feedback_completed', $feedbackcompleted);
    $event->trigger();
    return $feedbackcompleted->id;
}
示例#2
0
    /**
     * Tests for event validations related to feedback response submittion.
     */
    public function test_response_submitted_event_exceptions() {

        $this->resetAfterTest();

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

        // Test not setting instanceid.
        try {
            \mod_feedback\event\response_submitted::create(array(
                'context'  => $context,
                'objectid' => $this->eventfeedbackcompleted->id,
                'other'    => array('cmid' => $this->eventcm->id, 'anonymous' => 2)
            ));
            $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_submitted::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
/**
 * this saves the temporary saved values permanently
 *
 * @global object
 * @param object $feedbackcompletedtmp the temporary completed
 * @param object $feedbackcompleted the target completed
 * @return int the id of the completed
 */
function feedback_save_tmp_values($feedbackcompletedtmp, $feedbackcompleted)
{
    global $DB;
    $tmpcplid = $feedbackcompletedtmp->id;
    if ($feedbackcompleted) {
        //first drop all existing values
        $DB->delete_records('feedback_value', array('completed' => $feedbackcompleted->id));
        //update the current completed
        $feedbackcompleted->timemodified = time();
        $DB->update_record('feedback_completed', $feedbackcompleted);
    } else {
        $feedbackcompleted = clone $feedbackcompletedtmp;
        $feedbackcompleted->id = '';
        $feedbackcompleted->timemodified = time();
        $feedbackcompleted->id = $DB->insert_record('feedback_completed', $feedbackcompleted);
    }
    $allitems = $DB->get_records('feedback_item', array('feedback' => $feedbackcompleted->feedback));
    //save all the new values from feedback_valuetmp
    //get all values of tmp-completed
    $params = array('completed' => $feedbackcompletedtmp->id);
    $values = $DB->get_records('feedback_valuetmp', $params);
    foreach ($values as $value) {
        //check if there are depend items
        $item = $DB->get_record('feedback_item', array('id' => $value->item));
        if ($item->dependitem > 0 && isset($allitems[$item->dependitem])) {
            $check = feedback_compare_item_value($tmpcplid, $allitems[$item->dependitem], $item->dependvalue, true);
        } else {
            $check = true;
        }
        if ($check) {
            unset($value->id);
            $value->completed = $feedbackcompleted->id;
            $DB->insert_record('feedback_value', $value);
        }
    }
    //drop all the tmpvalues
    $DB->delete_records('feedback_valuetmp', array('completed' => $tmpcplid));
    $DB->delete_records('feedback_completedtmp', array('id' => $tmpcplid));
    // Trigger event for the delete action we performed.
    $cm = get_coursemodule_from_instance('feedback', $feedbackcompleted->feedback);
    $event = \mod_feedback\event\response_submitted::create_from_record($feedbackcompleted, $cm);
    $event->trigger();
    return $feedbackcompleted->id;
}