Ejemplo n.º 1
0
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;
}