/** * Update grades in central gradebook * @param object $rcontent null means all rcontentbases * @param int $userid specific user only, 0 mean all */ function rcontent_update_grades($rcontent = null, $userid = 0, $nullifnone = true) { global $CFG, $DB; if (!function_exists('grade_update')) { //workaround for buggy PHP versions require_once $CFG->libdir . '/gradelib.php'; } if ($rcontent != null) { if ($grades = rcontent_get_user_grades($rcontent, $userid)) { rcontent_grade_item_update($rcontent, $grades); } else { if ($userid and $nullifnone) { $grade = new object(); $grade->userid = $userid; $grade->rawgrade = NULL; rcontent_grade_item_update($rcontent, $grade); } else { rcontent_grade_item_update($rcontent); } } } else { $sql = "SELECT s.*, cm.idnumber as cmidnumber\n FROM {$CFG->prefix}rcontent s, {$CFG->prefix}course_modules cm, {$CFG->prefix}modules m\n WHERE m.name='rcontent' AND m.id=cm.module AND cm.instance=s.id"; if ($rs = $DB->get_recordset_sql($sql)) { while ($rcontent = rs_fetch_next_record($rs)) { rcontent_update_grades($rcontent, 0, false); } rs_close($rs); } } }
// Save data in bd $update = new stdClass(); $update->id = $data->gradeid; $update->grade = round($data->grade, 2); $update->comments = $data->comment_editor['text']; $update->timemodified = time(); // Retrieve data of that registry from db to know if status must be update or not if ($rdatastatus = $DB->get_field('rcontent_grades', 'status', array('id' => $update->id))) { if ($rdatastatus == "POR_CORREGIR") { $update->status = "CORREGIDO"; } } $DB->update_record('rcontent_grades', $update); // Update gradebook $rcontent = $DB->get_record('rcontent', array('id' => $rcontent->id)); rcontent_update_grades($rcontent, $data->user); add_to_log($course->id, 'rcontent', 'update grades', 'grade.php?id=' . $data->id . '&user='******'popup'); $PAGE->navbar->add(get_string('comments', 'rcontent') . ':' . $struserfullname . ':' . format_string($rcontent->name), null, null, navigation_node::TYPE_CUSTOM, null); echo $OUTPUT->header(); echo $OUTPUT->heading($heading); // Print user information $picture = $OUTPUT->user_picture($user, array('courseid' => $course->id)); $userlink = '<a href="' . $CFG->wwwroot . '/user/view.php?id=' . $user->id . '&course=' . $rcontent->course . '">' . fullname($user, has_capability('moodle/site:viewfullnames', $contextmodule)) . '</a>'; echo $picture . ' ' . $userlink . ' (' . $user->email . ')'; // Print form $mform->display(); echo $OUTPUT->footer($course);
function get_ResultadoDetalleExtendido($ResultadoExtendido, $user, $passwd) { global $CFG, $USER, $DB; set_time_limit(0); try { // Seek rcontent data $rcontent = $DB->get_record('rcontent', array('id' => $ResultadoExtendido->idContenidoLMS)); if (!$rcontent) { return generate_error("InvalidIdContenidoLMS", $ResultadoExtendido->idContenidoLMS, "ResultadoDetalleExtendido"); } // Search book $book = rcommon_book::get($rcontent->bookid); if (!$book) { return generate_error("LibroInvalido", $rcontent->bookid, "ResultadoDetalleExtendido"); } //MARSUPIAL ********** AFEGIT -> Validating activity, unit and content in case of forzarGuardar = 1 //06/02/2014 . @naseq if (isForzarGuardar($ResultadoExtendido)) { $real_rcontent = get_real_rcontent($ResultadoExtendido, $rcontent, $book->id); if ($real_rcontent) { $rcontent = $real_rcontent; $ResultadoExtendido->idContenidoLMS = $real_rcontent->id; log_to_file('ForzarGuardar changed idContenidoLMS to ' . $ResultadoExtendido->idContenidoLMS); } } //*********** FI $cm = get_coursemodule_from_instance('rcontent', $rcontent->id, $rcontent->course); if (!rcommon_book::check_auth($book->id, $user, $passwd)) { return generate_error("Autenticacion", "", "ResultadoDetalleExtendido", $cm->id); } if ($CFG->center != $ResultadoExtendido->idCentro) { return generate_error("CentroInvalido", get_string('center', 'rcontent') . ": {$CFG->center} - {$ResultadoExtendido->idCentro}", "ResultadoDetalleExtendido", $cm->id); } // Valid mandatory if (!isset($ResultadoExtendido->idUsuario) || !isset($ResultadoExtendido->idContenidoLMS) || !valid_result_details($ResultadoExtendido)) { return generate_error("ValoresObligatorios", "", "ResultadoDetalleExtendido", $cm->id); } if (!valid_status_result($ResultadoExtendido)) { return generate_error("EstadoInvalido", "", "ResultadoDetalleExtendido", $cm->id); } if ($rcontent->course == SITEID) { if (!$DB->record_exists('user', array('id' => $ResultadoExtendido->idUsuario))) { return generate_error("UsrNoExisteEnCurso", get_string('user') . ": {$ResultadoExtendido->idUsuario} - " . get_string('course') . ": {$rcontent->course}", "ResultadoDetalleExtendido", $cm->id); } } else { if (!valid_user($ResultadoExtendido->idUsuario, $rcontent->course)) { return generate_error("UsrNoExisteEnCurso", get_string('user') . ": {$ResultadoExtendido->idUsuario} - " . get_string('course') . ": {$rcontent->course}", "ResultadoDetalleExtendido", $cm->id); } $contextmodule = context_module::instance($cm->id); if (!has_capability('mod/rcontent:savetrack', $contextmodule, $ResultadoExtendido->idUsuario)) { return generate_error("SinPermisosGuardarSeguimiento", get_string('user') . ": {$ResultadoExtendido->idUsuario}", "ResultadoDetalleExtendido", $cm->id); } } $unidad = valid_unit($ResultadoExtendido, $book, $rcontent->unitid); if (!$unidad) { return generate_error("UnidadInvalida", $ResultadoExtendido->idUnidad, "ResultadoDetalleExtendido"); } $unidadid = isset($unidad->id) ? $unidad->id : 0; $actividad = valid_activity($ResultadoExtendido, $book, $rcontent->activityid, $unidadid); if (!$actividad) { return generate_error("ActividadInvalida", $ResultadoExtendido->idActividad, "ResultadoDetalleExtendido"); } $actividadid = isset($actividad->id) ? $actividad->id : 0; // Prepare to insert/modify rcontent_grade $instance = new stdClass(); $instance->userid = $ResultadoExtendido->idUsuario; $instance->rcontentid = $ResultadoExtendido->idContenidoLMS; $instance->unitid = $unidadid; $instance->activityid = $actividadid; $instance->sumweights = isset($ResultadoExtendido->SumaPesos) ? $ResultadoExtendido->SumaPesos : 100; $instance->timemodified = time(); if (!empty($ResultadoExtendido->Resultado)) { require_once "{$CFG->dirroot}/mod/rcontent/lib.php"; $dat_result = $ResultadoExtendido->Resultado; $status = isset($dat_result->Estado) ? $dat_result->Estado : "FINALIZADO"; $instance->status = TiposEstado::Tipos($status); $instance->comments = isset($dat_result->Observaciones) ? $dat_result->Observaciones : ""; $instance->mingrade = isset($dat_result->MinCalificacion) ? $dat_result->MinCalificacion : 0; $instance->maxgrade = isset($dat_result->MaxCalificacion) ? $dat_result->MaxCalificacion : 100; $instance->attempt = isset($dat_result->Intentos) ? $dat_result->Intentos : 1; $instance->maxattempts = isset($dat_result->MaxIntentos) ? $dat_result->MaxIntentos : 1; if (isset($dat_result->Calificacion)) { $instance->grade = $dat_result->Calificacion; } if (isset($dat_result->FechaHoraInicio)) { $instance->starttime = $dat_result->FechaHoraInicio; } if (isset($dat_result->Duracion)) { $instance->totaltime = $dat_result->Duracion; } if (isset($dat_result->MaxDuracion)) { $instance->maxtotaltime = $dat_result->MaxDuracion; } if (isset($dat_result->URLVerResultados)) { $instance->urlviewresults = $dat_result->URLVerResultados; } $select = array('userid' => $instance->userid, 'rcontentid' => $instance->rcontentid, 'unitid' => $instance->unitid, 'activityid' => $instance->activityid, 'attempt' => $instance->attempt); if (!($rcont_gradeid = $DB->get_field('rcontent_grades', 'id', $select))) { $instance->timecreated = $instance->timemodified; $rcont_gradeid = $DB->insert_record('rcontent_grades', $instance); } else { $instance->id = $rcont_gradeid; $DB->update_record('rcontent_grades', $instance); } rcontent_update_grades($rcontent, $USER->id); if (!$rcont_gradeid) { return generate_error("GuardarGrades", "", "ResultadoDetalleExtendido", $cm->id); } } // Save details if (isset($ResultadoExtendido->Detalles)) { $detalles = $ResultadoExtendido->Detalles; if (is_array($detalles)) { $detalles = array_shift($detalles); } } if (isset($detalles) && isset($detalles->DetalleResultado)) { $detalles_resultado = $detalles->DetalleResultado; if (!is_array($detalles_resultado)) { $detalles_resultado = array($detalles_resultado); } foreach ($detalles_resultado as $detalle) { $instance = new stdClass(); $instance->userid = $ResultadoExtendido->idUsuario; $instance->rcontentid = $ResultadoExtendido->idContenidoLMS; $instance->unitid = $unidadid; $instance->activityid = $actividadid; $instance->timemodified = time(); $instance->mingrade = isset($detalle->MinCalificacion) ? $detalle->MinCalificacion : 0; $instance->maxgrade = isset($detalle->MaxCalificacion) ? $detalle->MaxCalificacion : 100; $instance->attempt = isset($detalle->Intentos) ? $detalle->Intentos : 1; $instance->maxattempts = isset($detalle->MaxIntentos) ? $detalle->MaxIntentos : 1; $instance->typeid = isset($detalle->IdTipoDetalle) ? strtoupper($detalle->IdTipoDetalle) : 'PREGUNTA'; $instance->weight = isset($detalle->Peso) ? $detalle->Peso : 1; if (isset($detalle->Calificacion)) { $instance->grade = $detalle->Calificacion; } if (isset($detalle->FechaHoraInicio)) { $instance->starttime = $detalle->FechaHoraInicio; } if (isset($detalle->Duracion)) { $instance->totaltime = $detalle->Duracion; } if (isset($detalle->MaxDuracion)) { $instance->maxtotaltime = $detalle->MaxDuracion; } if (isset($detalle->IdDetalle)) { $instance->code = $detalle->IdDetalle; } if (isset($detalle->Descripcion)) { $instance->description = $detalle->Descripcion; } if (isset($detalle->URLVerResultados)) { $instance->urlviewresults = $detalle->URLVerResultados; } $select = array('userid' => $instance->userid, 'rcontentid' => $instance->rcontentid, 'unitid' => $instance->unitid, 'activityid' => $instance->activityid, 'code' => $instance->code, 'attempt' => $instance->attempt); if (!($rcont_gradeid = $DB->get_field('rcontent_grades_details', 'id', $select))) { $instance->timecreated = $instance->timemodified; $rcont_gradeid = $DB->insert_record('rcontent_grades_details', $instance); } else { $instance->id = $rcont_gradeid; $DB->update_record('rcontent_grades_details', $instance); } if (!$rcont_gradeid) { return generate_error("GuardarGradesDetail", "", "ResultadoDetalleExtendido", $cm->id); } } } } catch (Exception $e) { return generate_error($e->getMessage(), "", "ResultadoDetalleExtendido", $cm->id); } $ret2 = new ResultadoDetalleExtendidoResponse(); $ret2->setOK(); return $ret2; }