Hola, soy algo nuevo en Moodle y estoy tratando de desarrollar un módulo, en este momento estoy intentando obtener diferentes vistas dependiendo del rol del usuario, ya vi que se consigue hacer con has_capability, pero no me está funcionando, lo que hago es lo siguiente:
En el archivo access.php tengo lo siguiente
//a parte de los que vienen por defecto
//el módulo se llama collaborative
'mod/collaborative:manage' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_MODULE,
'archetypes' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'manager' => CAP_ALLOW
)
),
Y en el archivo view.php tengo lo siguiente:
require_once(dirname(dirname(dirname(__FILE__))).'/config.php');
require_once(dirname(__FILE__).'/lib.php');
$id = optional_param('id', 0, PARAM_INT); // Course_module ID, or
$n = optional_param('n', 0, PARAM_INT); // ... collaborative instance ID - it should be named as the first character of the module.
if ($id) {
$cm = get_coursemodule_from_id('collaborative', $id, 0, false, MUST_EXIST);
$course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
$collaborative = $DB->get_record('collaborative', array('id' => $cm->instance), '*', MUST_EXIST);
} else if ($n) {
$collaborative = $DB->get_record('collaborative', array('id' => $n), '*', MUST_EXIST);
$course = $DB->get_record('course', array('id' => $collaborative->course), '*', MUST_EXIST);
$cm = get_coursemodule_from_instance('collaborative', $collaborative->id, $course->id, false, MUST_EXIST);
} else {
error('You must specify a course_module ID or an instance ID');
}
require_login($course, true, $cm);
$context = context_module::instance($cm->id);//obtiene el contexto
$event = \mod_collaborative\event\course_module_viewed::create(array(
'objectid' => $collaborative->id,
'context' => $context,
));
$event->add_record_snapshot('course', $course);
$event->add_record_snapshot('collaborative', $collaborative);
$event->trigger();
// Print the page header.
$PAGE->set_url('/mod/collaborative/view.php', array('id' => $cm->id));
$PAGE->set_context($context);
$PAGE->set_cm($cm);
$PAGE->set_title(format_string($collaborative->name));
$PAGE->set_heading(format_string($course->fullname));
// Output starts here.
echo $OUTPUT->header();
if (has_capability('mod/collaborative:manage', $context)){
echo 'se puede ver este código...';
} //estoy intentando que un profesor sea quien vea ese código
// Finish the page.
echo $OUTPUT->footer();
//////////////////////////////////////////////////////////////////////////////////////////////////////
El problema es que con ningún rol (estudiante, profesor, administrador) puedo ver lo que se encuentra dentro del has_capability. Me guié de la documentación oficial que está en la página adding capabilities y roles and modules, y de los módulos que vienen instalados en moodle.
No entiendo qué más hay que hacer o dónde estoy fallando, si alguno me pudiera ayudar se lo agradecería.