/** * Load all books from bd rcommon_books * @param int $levelid -> ID of the level * @param string $from -> to response in a format or other * @return array -> (id=>name) */ function rcontent_isbn_list($levelid = '', $from = 'ajax') { global $DB; $return = array(); if ($from == 'ajax') { $return[] = array('id' => 0, 'name' => '- ' . get_string('isbn', 'rcontent') . ' -'); } if (!empty($levelid)) { if ($records = rcommon_book::get_by_level($levelid, 'webcontent')) { foreach ($records as $r) { if ($from == 'ajax') { $return[] = array('id' => $r->id, 'name' => $r->name, 'group' => $r->publisher); } else { if (!isset($return[$r->publisher])) { $return[$r->publisher] = array(); } $return[$r->publisher][$r->id] = $r->name; } } } } return $return; }
break; case 'webcontent': default: if ($DB->record_exists_select('rcontent', 'bookid = :bookid AND course != :course', array('bookid' => $bookid, 'course' => SITEID))) { $success = false; } break; } if (!$success) { echo $OUTPUT->notification(get_string('book_deleted_act_error', 'local_rcommon', $bookid)); } else { $sql = 'SELECT * FROM {rcommon_user_credentials} RUC INNER JOIN {rcommon_books} RB ON RB.isbn = RUC.isbn WHERE RUC.euserid != 0 AND RB.id = :bookid'; if ($DB->record_exists_sql($sql, array('bookid' => $bookid))) { echo $OUTPUT->notification(get_string('book_deleted_cred_error', 'local_rcommon', $bookid)); } else { if (rcommon_book::delete($bookid, $id)) { echo $OUTPUT->notification(get_string('book_deleted', 'local_rcommon', $bookid)); } } } } } } $params = array('publisher' => $id); $sql = 'SELECT b.id, b.name, b.levelid, b.isbn, b.format, l.name AS levelname, count(uc.isbn) as total, SUM(case when uc.euserid > 0 THEN 1 ELSE 0 END) as assig FROM {rcommon_books} b INNER JOIN {rcommon_level} l ON b.levelid=l.id LEFT JOIN {rcommon_user_credentials} uc ON b.isbn = uc.isbn WHERE b.publisherid=:publisher
function save_book_structure($response, $book) { $units = isset($response['libros']['libro']['unidades']['unidad']) ? $response['libros']['libro']['unidades']['unidad'] : false; // Guarda los datos del libro $book->structureforaccess = count($units) > 0 ? 1 : 0; $bookid = rcommon_book::add_update($book); if (!$bookid) { return; } if ($units) { $docleaning = true; // If we have no errors, we will clean old units and activities $timemodified = time(); // Time to do the cleaning // If is not associtive, it will have only one unit if (is_associative_array($units)) { $units = array($units); } foreach ($units as $unit) { $actividades = isset($unit['actividades']['actividad']) ? $unit['actividades']['actividad'] : false; // Unit with no code detected! if (!isset($unit['id']) || empty($unit['id'])) { $docleaning = false; continue; } $unitinstance = new stdClass(); $unitinstance->bookid = $bookid; $unitinstance->code = $unit['id']; $unitinstance->name = isset($unit['titulo']) ? $unit['titulo'] : ""; $unitinstance->summary = $unitinstance->name; $unitinstance->sortorder = isset($unit['orden']) ? $unit['orden'] : ""; // echo "<li>Unit: {$unitinstance->name}"; $unitid = rcommon_unit::add_update($unitinstance); if (!$unitid) { // Cannot Add/Update Unit $docleaning = false; continue; } if ($actividades) { // If is not associtive, it will have only one activity if (is_associative_array($actividades)) { $actividades = array($actividades); } foreach ($actividades as $act) { // Activity with no code detected! if (!isset($act['id']) || empty($act['id'])) { $docleaning = false; continue; } $activityinstance = new stdClass(); $activityinstance->bookid = $bookid; $activityinstance->unitid = $unitid; $activityinstance->code = $act['id']; $activityinstance->name = isset($act['titulo']) ? $act['titulo'] : ""; $activityinstance->summary = $activityinstance->name; $activityinstance->sortorder = isset($act['orden']) ? $act['orden'] : ""; $activid = rcommon_activity::add_update($activityinstance); if (!$activid) { // Cannot Add/Update Activity $docleaning = false; } } } } if ($docleaning) { rcommon_book::clean($bookid, $timemodified); } } }
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; }