Example #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));
    return $feedbackcompleted->id;

}
Example #2
0
            $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);
Example #3
0
 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)) {
Example #4
0
/**
 * 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;
}
Example #5
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), 'other' => array('cmid' => $cm->id, 'instanceid' => $feedbackcompleted->feedback, 'anonymous' => $feedbackcompleted->anonymous_response)));
    $event->add_record_snapshot('feedback_completed', $feedbackcompleted);
    $event->trigger();
    return $feedbackcompleted->id;
}
Example #6
0
/**
 * 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;
}