Ejemplo n.º 1
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);
        }
    }
}
Ejemplo n.º 2
0
/**
 * Load the units of a determinate book from bd rcommon_books_units
 * @param $bookid int -> ID of the book
 * @param $from string -> for select the array structure of the response
 * @return array -> (id=>name)
 */
function rcontent_unit_list($bookid = '', $from = 'ajax')
{
    global $DB;
    $return = array();
    if ($from == 'updateform') {
        $return[0] = '- ' . get_string('unit', 'rcontent') . ' -';
    } else {
        $return[] = array('id' => 0, 'name' => '- ' . get_string('unit', 'rcontent') . ' -');
    }
    if (!empty($bookid)) {
        if ($records = rcommon_unit::get_by_book($bookid)) {
            foreach ($records as $r) {
                if ($from == 'updateform') {
                    $return[$r->id] = $r->name;
                } else {
                    $return[] = array('id' => $r->id, 'name' => $r->name);
                }
            }
        }
    }
    return $return;
}
Ejemplo n.º 3
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;
}