/** * 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)); return $feedbackcompleted->id; }
$lastbreakposition = 0; $align = right_to_left() ? 'right' : 'left'; foreach ($feedbackitems as $feedbackitem) { if (!isset($startitem)) { //avoid showing double pagebreaks if ($feedbackitem->typ == 'pagebreak') { continue; } $startitem = $feedbackitem; } if ($feedbackitem->dependitem > 0) { //chech if the conditions are ok $fb_compare_value = feedback_compare_item_value($feedbackcompletedtmp->id, $feedbackitem->dependitem, $feedbackitem->dependvalue, true); if (!isset($feedbackcompletedtmp->id) OR !$fb_compare_value) { $lastitem = $feedbackitem; $lastbreakposition = $feedbackitem->position; continue; } } if ($feedbackitem->dependitem > 0) { $dependstyle = ' feedback_complete_depend'; } else { $dependstyle = ''; } echo $OUTPUT->box_start('feedback_item_box_'.$align.$dependstyle);
echo $OUTPUT->box_start('feedback_items'); $startitem = null; $itemnr = $DB->count_records_select('feedback_item', 'feedback = ? AND hasvalue = 1 AND position < ?', array($feedback->id, $startposition)); $lastbreakposition = 0; $align = right_to_left() ? 'right' : 'left'; foreach ($feedbackitems as $feedbackitem) { if (!isset($startitem)) { //avoid showing double pagebreaks if ($feedbackitem->typ == 'pagebreak') { continue; } $startitem = $feedbackitem; } if ($feedbackitem->dependitem > 0) { //chech if the conditions are ok if (!isset($feedbackcompletedtmp->id) or !feedback_compare_item_value($feedbackcompletedtmp->id, $feedbackitem->dependitem, $feedbackitem->dependvalue, true)) { $lastitem = $feedbackitem; $lastbreakposition = $feedbackitem->position; continue; } } if ($feedbackitem->dependitem > 0) { $dependstyle = ' feedback_complete_depend'; } else { $dependstyle = ''; } echo $OUTPUT->box_start('feedback_item_box_' . $align . $dependstyle); $value = ''; //get the value $frmvaluename = $feedbackitem->typ . '_' . $feedbackitem->id; if (isset($savereturn)) {
/** * this function checks the correctness of values. * the rules for this are implemented in the class of each item. * it can be the required attribute or the value self e.g. numeric. * the params first/lastitem are given to determine the visible range between pagebreaks. * * @global object * @param int $firstitem the position of firstitem for checking * @param int $lastitem the position of lastitem for checking * @return boolean */ function feedback_check_values($firstitem, $lastitem) { global $DB, $CFG; $feedbackid = optional_param('feedbackid', 0, PARAM_INT); //get all items between the first- and lastitem $select = "feedback = ?\n AND position >= ?\n AND position <= ?\n AND hasvalue = 1"; $params = array($feedbackid, $firstitem, $lastitem); if (!($feedbackitems = $DB->get_records_select('feedback_item', $select, $params))) { //if no values are given so no values can be wrong ;-) return true; } foreach ($feedbackitems as $item) { //get the instance of the item-class $itemobj = feedback_get_item_class($item->typ); //the name of the input field of the completeform is given in a special form: //<item-typ>_<item-id> eg. numeric_234 //this is the key to get the value for the correct item $formvalname = $item->typ . '_' . $item->id; if ($itemobj->value_is_array()) { //get the raw value here. It is cleaned after that by the object itself $value = optional_param_array($formvalname, null, PARAM_RAW); } else { //get the raw value here. It is cleaned after that by the object itself $value = optional_param($formvalname, null, PARAM_RAW); } $value = $itemobj->clean_input_value($value); // If the item is not visible due to its dependency so it shouldn't be required. // Many thanks to Pau Ferrer Ocaña. if ($item->dependitem > 0 and $item->required == 1) { $comparevalue = false; if ($feedbackcompletedtmp = feedback_get_current_completed($item->feedback, true)) { $comparevalue = feedback_compare_item_value($feedbackcompletedtmp->id, $item->dependitem, $item->dependvalue, true); } if (!$comparevalue) { $item->required = 0; // Override the required property. } } //check if the value is set if (is_null($value) and $item->required == 1) { return false; } //now we let check the value by the item-class if (!$itemobj->check_value($value, $item)) { return false; } } //if no wrong values so we can return true return true; }
/** * 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), 'other' => array('cmid' => $cm->id, 'instanceid' => $feedbackcompleted->feedback, 'anonymous' => $feedbackcompleted->anonymous_response))); $event->add_record_snapshot('feedback_completed', $feedbackcompleted); $event->trigger(); return $feedbackcompleted->id; }
/** * 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; }