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