Пример #1
0
/**
 * 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;
}
Пример #2
0
                    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
Пример #3
0
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);
        }
    }
}
Пример #4
0
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;
}