Voici un petit hack qui résoud le problème suivant :
L'ajout d'une ressource de type "lien" peut désigner toute ressource appartenant à un des cours de l'enseignant. Mais si l'étudiant n'a pas, lui, accès à ce cours, il ne peut voir la ressource.
Dans : mod/resource/type/link/resource.class.php § 24
1. ajouter un deuxième paramètre à valeur "true" à la construction de la ressource liée :
function display() {
global $CFG;
parent::display();
if (! $cm = get_coursemodule_from_id('resource', $this->resource->reference)) {
error('Course Module ID was incorrect');
}
if (! $resource = get_record('resource', 'id', $cm->instance)) {
error('Resource ID was incorrect');
}
require ($CFG->dirroot.'/mod/resource/type/'.$resource->type.'/resource.class.php');
$resourceclass = 'resource_'.$resource->type;
$resource_linked->resource->course = $this->resource->course;
$resource_linked->cm = $this->cm;
$resource_linked->course = $this->course;
$resource_linked->navigation = $this->navigation;
$resource_linked->display();
}
2. Dans les autres ressources, reprendre les fichiers resource.class.php et modifier le constructeur de chaque classe en acceptant et progageant un nouveau paramètre optionnel :
function resource_html($cmid=0) {
parent::resource_base($cmid);
}
Dans mod/resource/lib.php : à partir de §83
Modifier le constructeur par défaut de la ressource de base en acceptant le nouveau paramètre et en rendant conditionnel la vérification d'inscription au cours (elle a déjà été vérifiée sur l'appel du lien) :
function resource_base($cmid=0) {
global $CFG;
global $course; // Ugly hack, needed for course language ugly hack
if ($cmid) {
if (! $this->cm = get_coursemodule_from_id('resource', $cmid)) {
error("Course Module ID was incorrect");
}
if (! $this->course = get_record("course", "id", $this->cm->course)) {
error("Course is misconfigured");
}
$course = $this->course; // Make it a global so we can see it later
require_course_login($this->course, true, $this->cm);
if (! $this->resource = get_record("resource", "id", $this->cm->instance)) {
error("Resource ID was incorrect");
}
$this->strresource = get_string("modulename", "resource");
$this->strresources = get_string("modulenameplural", "resource");
if ($this->course->category) {
$this->navigation = "<a target=\"{$CFG->framename}\" href=\"$CFG->wwwroot/course/view.php?id={$this->course->id}\">{$this->course->shortname}</a> -> ".
"<a target=\"{$CFG->framename}\" href=\"index.php?id={$this->course->id}\">$this->strresources</a> ->";
} else {
$this->navigation = "<a target=\"{$CFG->framename}\" href=\"index.php?id={$this->course->id}\">$this->strresources</a> ->";
}
if (!$this->cm->visible and !isteacher($this->course->id)) {
$pagetitle = strip_tags($this->course->shortname.': '.$this->strresource);
print_header($pagetitle, $this->course->fullname, "$this->navigation $this->strresource", "", "", true, '', navmenu($this->course, $this->cm));
notice(get_string("activityiscurrentlyhidden"), "$CFG->wwwroot/course/view.php?id={$this->course->id}");
}
}
}