/** * 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; }
/** * 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()); } }
/** * 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; }