Merge branch 'w04_MDL-37728_m25_roledef' of git://github.com/skodak/moodle
authorSam Hemelryk <sam@moodle.com>
Mon, 28 Jan 2013 04:25:51 +0000 (17:25 +1300)
committerSam Hemelryk <sam@moodle.com>
Mon, 28 Jan 2013 04:25:51 +0000 (17:25 +1300)
1  2 
admin/roles/lib.php

@@@ -738,6 -738,39 +738,56 @@@ class define_role_table_advanced extend
          return $output;
      }
  
++    /**
++     * Returns an array of roles of the allowed type.
++     *
++     * @param string $type Must be one of: assign, switch, or override.
++     * @return array
++     */
+     protected function get_allow_roles_list($type) {
+         global $DB;
+         if ($type !== 'assign' and $type !== 'switch' and $type !== 'override') {
+             debugging('Invalid role allowed type specified', DEBUG_DEVELOPER);
+             return array();
+         }
+         if (empty($this->roleid)) {
+             return array();
+         }
+         $sql = "SELECT r.*
+                   FROM {role} r
+                   JOIN {role_allow_{$type}} a ON a.allow{$type} = r.id
+                  WHERE a.roleid = :roleid
+               ORDER BY r.sortorder ASC";
+         return $DB->get_records_sql($sql, array('roleid'=>$this->roleid));
+     }
++    /**
++     * Returns an array of roles with the allowed type.
++     *
++     * @param string $type Must be one of: assign, switch, or override.
++     * @return array Am array of role names with the allowed type
++     */
+     protected function get_allow_role_control($type) {
+         if ($roles = $this->get_allow_roles_list($type)) {
+             $roles = role_fix_names($roles, null, ROLENAME_ORIGINAL, true);
+             return implode(', ', $roles);
+         } else {
+             return get_string('none');
+         }
+     }
++    /**
++     * Returns information about the risks associated with a role.
++     *
++     * @return string
++     */
+     protected function get_role_risks_info() {
+         return '';
+     }
      protected function print_field($name, $caption, $field) {
          global $OUTPUT;
          // Attempt to generate HTML like formslib.
@@@ -882,6 -921,46 +938,57 @@@ class view_role_definition_table extend
          // Do nothing.
      }
  
++    /**
++     * Returns HTML risk icons.
++     *
++     * @return string
++     */
+     protected function get_role_risks_info() {
+         global $OUTPUT;
+         if (empty($this->roleid)) {
+             return '';
+         }
+         $risks = array();
+         $allrisks = get_all_risks();
+         foreach ($this->capabilities as $capability) {
+             $perm = $this->permissions[$capability->name];
+             if ($perm != CAP_ALLOW) {
+                 continue;
+             }
+             foreach ($allrisks as $type=>$risk) {
+                 if ($risk & (int)$capability->riskbitmask) {
+                     $risks[$type] = $risk;
+                 }
+             }
+         }
+         $risksurl = new moodle_url(get_docs_url(s(get_string('risks', 'role'))));
+         foreach ($risks as $type=>$risk) {
+             $pixicon = new pix_icon('/i/' . str_replace('risk', 'risk_', $type), get_string($type . 'short', 'admin'));
+             $risks[$type] = $OUTPUT->action_icon($risksurl, $pixicon, new popup_action('click', $risksurl));
+         }
+         return implode(' ', $risks);
+     }
++    /**
++     * Returns true if the row should be skipped.
++     *
++     * @param string $capability
++     * @return bool
++     */
+     protected function skip_row($capability) {
+         $perm = $this->permissions[$capability->name];
+         if ($perm == CAP_INHERIT) {
+             // Do not print empty rows in role overview, admins need to know quickly what is allowed and prohibited,
+             // if they want to see the list of all capabilities they can go to edit role page.
+             return true;
+         }
+         parent::skip_row($capability);
+     }
      protected function add_permission_cells($capability) {
          $perm = $this->permissions[$capability->name];
          $permname = $this->allpermissions[$perm];