function get_real_rcontent($ResultadoExtendido, $rcontent_original, $bookid) { global $DB; log_to_file("Forzar Guardar"); $rcontentoriginalid = $ResultadoExtendido->idContenidoLMS; log_to_file('Original rcontenid:' . $rcontentoriginalid); // Search UNIT $unit = false; if (isset($ResultadoExtendido->idUnidad) && !empty($ResultadoExtendido->idUnidad)) { $unit = rcommon_unit::get_from_code($ResultadoExtendido->idUnidad, $bookid); } if (!$unit) { // No unit provided, the real rcontent is the original return false; } log_to_file('unit:' . $unit->code . '-' . $unit->id); // Search ACTIVITY $activity = false; if (isset($ResultadoExtendido->idActividad) && !empty($ResultadoExtendido->idActividad)) { $activity = rcommon_activity::get_from_code($ResultadoExtendido->idActividad, $unit->id, $bookid); } if ($activity) { log_to_file('activity:' . $activity->code . '-' . $activity->id); if ($rcontent_original->unitid == $unit->id && $rcontent_original->activityid == $activity->id) { // Unit and activity match, the real rcontent is the original return $rcontent_original; } } else { if ($rcontent_original->unitid == $unit->id) { // Unit match but No activity provided, the real rcontent is the original return $rcontent_original; } } $rcontents = false; // ALL OK Searching for real Rcontent with activity if ($activity) { $rcontents = $DB->get_records('rcontent', array('bookid' => $bookid, 'unitid' => $unit->id, 'activityid' => $activity->id), 'id'); } // Not found with activity Searching for real Rcontent without activity if (!$rcontents) { $rcontents = $DB->get_records('rcontent', array('bookid' => $bookid, 'unitid' => $unit->id), 'id'); } // Something found, validating data if ($rcontents) { //Filter only the Rcontets with user access $filtered_rcontents = array(); foreach ($rcontents as $rcontent) { if (valid_user($ResultadoExtendido->idUsuario, $rcontent->course)) { $cm = get_coursemodule_from_instance('rcontent', $rcontent->id, $rcontent->course); $contextmodule = context_module::instance($cm->id); if (has_capability('mod/rcontent:savetrack', $contextmodule, $ResultadoExtendido->idUsuario)) { $filtered_rcontents[] = $rcontent; } } } if ($filtered_rcontents) { if (count($filtered_rcontents) == 1) { // Only one record, OK! return array_shift($filtered_rcontents); } else { log_to_file('Warning, more than one valid rcontent found'); // More than one, try courses first foreach ($rcontents as $rcontent) { if ($rcontent->course == $rcontent_original->course) { // First with the same course log_to_file('Returned the first with the same course'); return $rcontent; } } log_to_file('All rcontents found outside the original course, returning the first'); return array_shift($rcontents); } } } // Not found, no need to save nothing return false; }