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); } } }
/** * 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; }
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; }