$ratingoptions->component = $component; $ratingoptions->itemid = $itemid; $ratingoptions->scaleid = $scaleid; $ratingoptions->userid = $USER->id; if ($userrating != RATING_UNSET_RATING) { $rating = new rating($ratingoptions); $rating->update_rating($userrating); } else { // Delete the rating if the user set to Rate. $options = new stdClass(); $options->contextid = $context->id; $options->component = $component; $options->ratingarea = $ratingarea; $options->userid = $USER->id; $options->itemid = $itemid; $rm->delete_ratings($options); } // Try to update grades in case grading by entries. $df->grade_manager->update_calculated_grades(array('userid' => $rateduserid)); // Need to retrieve the updated item to get its new aggregate value. $item = new stdClass(); $item->id = $itemid; // Most of $ratingoptions variables were previously set. $ratingoptions->items = array($itemid => $item); $ratingoptions->aggregate = array(RATING_AGGREGATE_AVERAGE, RATING_AGGREGATE_MAXIMUM, RATING_AGGREGATE_MINIMUM, RATING_AGGREGATE_SUM); $items = $rm->get_ratings($ratingoptions); $firstitem = reset($items); $aggr = $field->get_rating_display_aggregates($firstitem->rating); // Result. $result->success = true; $result->ratingcount = $aggr->count;