Пример #1
0
 /**
  * Produces a table to visually compare roles and capabilities.
  *
  * @param array $capabilities An array of capabilities to show comparison for.
  * @param int $contextid The context we are displaying for.
  * @param array $roles An array of roles to show comparison for.
  * @return string
  */
 public function capability_comparison_table(array $capabilities, $contextid, array $roles)
 {
     $strpermissions = $this->get_permission_strings();
     $permissionclasses = $this->get_permission_classes();
     if ($contextid === context_system::instance()->id) {
         $strpermissions[CAP_INHERIT] = new lang_string('notset', 'role');
     }
     $table = new html_table();
     $table->attributes['class'] = 'comparisontable';
     $table->head = array(' ');
     foreach ($roles as $role) {
         $url = new moodle_url('/admin/roles/define.php', array('action' => 'view', 'roleid' => $role->id));
         $table->head[] = html_writer::div(html_writer::link($url, $role->localname));
     }
     $table->data = array();
     foreach ($capabilities as $capability) {
         $contexts = tool_capability_calculate_role_data($capability, $roles);
         $captitle = new html_table_cell(get_capability_string($capability) . html_writer::span($capability));
         $captitle->header = true;
         $row = new html_table_row(array($captitle));
         foreach ($roles as $role) {
             if (isset($contexts[$contextid]->rolecapabilities[$role->id])) {
                 $permission = $contexts[$contextid]->rolecapabilities[$role->id];
             } else {
                 $permission = CAP_INHERIT;
             }
             $cell = new html_table_cell($strpermissions[$permission]);
             $cell->attributes['class'] = $permissionclasses[$permission];
             $row->cells[] = $cell;
         }
         $table->data[] = $row;
     }
     // Start the list item, and print the context name as a link to the place to make changes.
     if ($contextid == context_system::instance()->id) {
         $url = new moodle_url('/admin/roles/manage.php');
         $title = get_string('changeroles', 'tool_capability');
     } else {
         $url = new moodle_url('/admin/roles/override.php', array('contextid' => $contextid));
         $title = get_string('changeoverrides', 'tool_capability');
     }
     $context = context::instance_by_id($contextid);
     $html = $this->output->heading(html_writer::link($url, $context->get_context_name(), array('title' => $title)), 3);
     $html .= html_writer::table($table);
     // If there are any child contexts, print them recursively.
     if (!empty($contexts[$contextid]->children)) {
         foreach ($contexts[$contextid]->children as $childcontextid) {
             $html .= $this->capability_comparison_table($capabilities, $childcontextid, $roles, true);
         }
     }
     return $html;
 }
Пример #2
0
/**
 * Outputs a matrix of roles and capabilities.
 *
 * @param int $contextid The context we are displaying for.
 * @param array $capabilities An array of capabilities to show.
 * @param array $roles An array of roles to show.
 */
function capability_matrix($contextid, array $capabilities, array $roles)
{
    $strpermissions = get_permission_strings();
    if ($contextid === context_system::instance()->id) {
        $strpermissions[CAP_INHERIT] = new lang_string('notset', 'role');
    }
    // Start the list item.
    $context = context::instance_by_id($contextid);
    echo "\n" . $context->get_context_name() . "\t";
    // Display the role names as headings.
    foreach ($roles as $role) {
        echo $role->localname . "\t";
    }
    echo "\n\n";
    $matrix = array();
    foreach ($capabilities as $capability) {
        $contexts = tool_capability_calculate_role_data($capability, $roles);
        echo get_capability_string($capability) . "\t";
        foreach ($roles as $role) {
            if (isset($contexts[$contextid]->rolecapabilities[$role->id])) {
                $permission = $contexts[$contextid]->rolecapabilities[$role->id];
            } else {
                $permission = CAP_INHERIT;
            }
            echo $strpermissions[$permission] . "\t";
            $matrix[$role][$capability] = $permission;
            // for comparison matrix !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        }
        echo "\n";
    }
    // If there are any child contexts, print them recursively.
    if (!empty($contexts[$contextid]->children)) {
        foreach ($contexts[$contextid]->children as $childcontextid) {
            capability_comparison_table($capabilities, $childcontextid, $roles, true);
        }
    }
    return;
}