Cosas de Desarrolladores

problemas con has_capability()

 
Imagen de Saúl Chacón Grimaldo
problemas con has_capability()
 

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.

 
Promedio de calificaciones: -
Samoo Marketing
Re: problemas con has_capability()
Grupo Moodlers de gran ayuda

Hola, has editado la capability teniendo el plugin instalado?

Si es asi, tienes que desinstalar el plugin e instalarlo con la capability creada en el access.php.

Un saludo!

 
Promedio de calificaciones: -
Imagen de Saúl Chacón Grimaldo
Re: problemas con has_capability()
 
Hola José, cada vez que modifico el archivo access.php lo desinstalo e instalo el módulo nuevamente, he intentado colocarle un nombre diferente, cambiando el modo escritura y lectura, haciendo cosas sencillas como imprimir un simple echo, hasta un if(has_capability('mod/collaborative:addinstance',$context)... pero no quiere mostrar nada, en verdad no sé qué me hace falta. Ya comprobé el rol de los usuarios dentro del curso que tengo de prueba y sí los tiene correctamente.
 
Promedio de calificaciones: -
Samoo Marketing
Re: problemas con has_capability()
Grupo Moodlers de gran ayuda

Hola, te respondo antes de irme, tendria que revisar el codigo a fondo pero... 

¿El contexto que estas obteniendo, es realmente el que deberia? Haz un echo de ese contexto, y en paralelo, comprueba en la base de datos el contexto que tiene el coursemodule, uniendo las tablas que tienes que unir.. El codigo en si, parece correcto..

Quedo atento al post! 

Un saludo 

 
Promedio de calificaciones: -
Imagen de Saúl Chacón Grimaldo
Re: problemas con has_capability()
 

José, hice lo que me dijiste y todo está en orden, los roles, el contexto, los permisos, y la base de datos está correcta. Pero te informo que ya pude resolver el error que tenía, en el archivo access.php no separe correctamente el array

$capabilities = array('mod/collaborative:addinstance' => array(...),

                                     'mod/collaborative:view' => array(...),

                                     'mod/collaborative:submit' => array(...), //me hacía falta esta coma.

                                     'mod/collaborative:manage' => array(...)

);

Te agradezco por estar pendiente al problema que se me presentó, cualquier duda o avance que tenga te contacto. Muchas gracias, un saludo.

 
Promedio de calificaciones:Útil (1)