]> git.mjollnir.org Git - moodle.git/commitdiff
partial rewrite of role manage script, improved notice_yesno(), other minor fixes...
authorskodak <skodak>
Thu, 21 Sep 2006 22:34:45 +0000 (22:34 +0000)
committerskodak <skodak>
Thu, 21 Sep 2006 22:34:45 +0000 (22:34 +0000)
admin/roles/assign.php
admin/roles/manage.html
admin/roles/manage.php
admin/roles/override.php
lang/en_utf8/role.php
lib/accesslib.php
lib/adminlib.php
lib/weblib.php

index c6c6d3fea1d6f561d7a50df419f18a0d1a483d71..7b19cda2f7bdc59620028df59173c76eb199d4ea 100755 (executable)
         }
         echo '<input type="hidden" name="courseid" value="'.$courseid.'" />';
         echo '<input type="hidden" name="contextid" value="'.$context->id.'" />'.$strroletoassign.': ';
-        choose_from_menu ($assignableroles, 'roleid', $roleid, get_string('listallroles', 'role'), $script='rolesform.submit()');
+        choose_from_menu ($assignableroles, 'roleid', $roleid, get_string('listallroles', 'role').'...', $script='rolesform.submit()');
         echo '</div></form>';
 
         print_simple_box_start("center");
index 60078931a1ea8af75a6e7cf10f78bf2cebe2db06..fdeb7dc90b04e5b13f82a565abdaeb0b0d88f9e7 100755 (executable)
@@ -1,25 +1,80 @@
 <?php  //$Id$
 
     switch ($action) {
-        case 'add': $submitlabel = get_string('addrole', 'role'); break;
+        case 'add':
+            $submitlabel = get_string('addrole', 'role');
+            break;
+        case 'view':
+            $submitlabel = get_string('listallroles', 'role');
+            break;
         case 'edit':
-        default:  $submitlabel = get_string('savechanges');
+        default:
+            $submitlabel = get_string('savechanges');
     }
 ?>
+<table cellpadding="9" cellspacing="0" >
+
+<?php
+    if ($action == 'view') { ?>
+      <tr valign="top">
+        <td align="right"><?php print_string('selectrole', 'role') ?>:</td>
+        <td><table><tr>
+            <td><form name="switchrole" action="manage.php" method="get">
+                <input type="hidden" name="action" value="view" />
+                <?php choose_from_menu ($roleoptions, 'roleid', $roleid, get_string('listallroles', 'role').'...', $script='switchrole.submit()') ?>
+            </form></td>
+            <td><form name="editrole" action="manage.php" method="get">
+                <input type="hidden" name="roleid" value="<?php p($roleid) ?>" />
+                <input type="hidden" name="action" value="edit" />
+                <input type="submit" value="<?php print_string('edit') ?>" />
+            </form></td>
+            </tr></table>
+        </td>
+      </tr>
+<?php
+    }
+?>
+
 <form name="rolesform" action="manage.php" method="post">
 <input type="hidden" name="roleid" value="<?php p($roleid) ?>" />
 <input type="hidden" name="sesskey" value="<?php p(sesskey()) ?>" />
-<input type="hidden" name="action" value="<?php p($action) ?>" />
-<input type="hidden" name="contextid" value="<?php p($contextid) ?>" />
+<input type="hidden" name="action" value="<?php if ($action != 'view') { echo p($action); } ?>" />
+
+<tr valign="top">
+    <td align="right"><?php print_string('name') ?>:</td>
+    <td><?php
+    if ($action == 'view') {
+        p($role->name);
+    } else {
+        echo '<input type="text" name="name" maxlength="254" size="50" value="'.s($role->name).'" />';
+        if (isset($errors["name"])) formerr($errors["name"]);
+    } ?></td>
+</tr>
+<tr valign="top">
+    <td align="right"><?php print_string('shortname') ?>:</td>
+    <td><?php
+    if ($action == 'view') {
+        p($role->shortname);
+    } else {
+        echo '<input type="text" name="shortname" maxlength="20" size="15" value="'.s($role->shortname).'" />';
+        if (isset($errors["shortname"])) formerr($errors["shortname"]);
+    } ?></td>
+</tr>
+<tr valign="top">
+    <td align="right"><?php print_string('description') ?>:</td>
+    <td><?php
+    if ($action == 'view') {
+        p($role->description);
+        $usehtmleditor = false;
+    } else {
+        print_textarea($usehtmleditor, 10, 50, 50, 10, 'description', $role->description);
+    } ?></td>
+</tr>
+
+<tr valign="top">
+    <td align="right"><?php print_string('permissions','role') ?> :</td>
+    <td><table>
 
-<br />
-<?php print_string('rolename', 'role'); ?>: <input type="text" name="name" value="<?php p($role->name) ?>" />&nbsp;
-<?php print_string('roleshortname', 'role'); ?>: <input type="text" name="shortname" value="<?php p($role->shortname) ?>" />
-<br />
-<?php print_string('roledescription', 'role'); ?>:
-<?php print_textarea($usehtmleditor, 10, 50, 50, 10, 'description', $role->description); ?>
-<p>
-<table>
 <tr>
 <td><?php print_string('capability','role') ?></td>
 <td><?php print_string('inherit','role') ?></td>
@@ -46,19 +101,23 @@ foreach ($capabilities as $capability) {
     $contextlevel = $capability->contextlevel;
     $component = $capability->component;
 
-   // check the capability override for this cap, this role in this context
-    $sitecontext = get_context_instance(CONTEXT_SYSTEM, SITEID);
-
-    $localoverride = get_local_override($roleid, $sitecontext->id, $capability->name);
+    if (empty($errors)) {
+       // check the capability override for this cap, this role in this context
+        $sitecontext = get_context_instance(CONTEXT_SYSTEM, SITEID);
+        $localoverride = get_local_override($roleid, $sitecontext->id, $capability->name);
+    } else {
+        $localoverride = new object();
+        $localoverride->permission = $role->{$capability->name};
+    }
 
     ?>
 
         <tr>
         <td><span title="<?php echo $capability->name ?>"><?php echo get_capability_string($capability->name); ?></span></td>
-        <td><input TYPE="radio" name="<?php echo $capability->name; ?>" value="0" <?php if (!isset($localoverride->permission) || $localoverride->permission==0){ echo 'checked="checked"'; }?> /></td>
-        <td><input TYPE="radio" name="<?php echo $capability->name; ?>" value="1" <?php if (isset($localoverride->permission) && $localoverride->permission==1){ echo 'checked="checked"'; }?> /></td>
-        <td ><input TYPE="radio" name="<?php echo $capability->name; ?>" value="-1" <?php if (isset($localoverride->permission) && $localoverride->permission==-1){ echo 'checked="checked"'; }?> /></td>
-        <td ><input TYPE="radio" name="<?php echo $capability->name; ?>" value="-1000" <?php if (isset($localoverride->permission) && $localoverride->permission==-1000){ echo 'checked="checked"'; }?> /></td>
+        <td><input type="radio" name="<?php echo $capability->name; ?>" value="<?php echo CAP_INHERIT ?>" <?php if (!isset($localoverride->permission) || $localoverride->permission==CAP_INHERIT){ echo 'checked="checked"'; }?> /></td>
+        <td><input type="radio" name="<?php echo $capability->name; ?>" value="<?php echo CAP_ALLOW ?>" <?php if (isset($localoverride->permission) && $localoverride->permission==CAP_ALLOW){ echo 'checked="checked"'; }?> /></td>
+        <td ><input type="radio" name="<?php echo $capability->name; ?>" value="<?php echo CAP_PREVENT ?>" <?php if (isset($localoverride->permission) && $localoverride->permission==CAP_PREVENT){ echo 'checked="checked"'; }?> /></td>
+        <td ><input type="radio" name="<?php echo $capability->name; ?>" value="<?php echo CAP_PROHIBIT ?>" <?php if (isset($localoverride->permission) && $localoverride->permission==CAP_PROHIBIT){ echo 'checked="checked"'; }?> /></td>
         <td><?php
             if (RISK_MANAGETRUST & (int)$capability->riskbitmask) {
                 echo "T";
@@ -79,8 +138,15 @@ foreach ($capabilities as $capability) {
         </tr>
 
 <?php } ?>
-</table>
-</p>
-<br />
-<input type="submit" value="<?php p($submitlabel); ?>" />
-</form>
+</table></td></tr>
+
+<tr>
+    <td />
+    <td><input type="submit" value="<?php p($submitlabel) ?>" />
+<?php if ($action != 'view') { ?>
+<input type="submit" name="cancel" value="<?php print_string('cancel') ?>" />
+<?php } ?>
+    </form>
+    </td>
+</tr>
+</table>
\ No newline at end of file
index abdea578543be88fdcdf8797ef1c5ee94796a6c8..edde142bb4a5872d8c36c9aa2446cf45524e5e61 100755 (executable)
 
     $roleid      = optional_param('roleid', 0, PARAM_INT);             // if set, we are editing a role
     $name        = optional_param('name', '', PARAM_MULTILANG);        // new role name
-    $shortname   = optional_param('shortname', '', PARAM_SAFEDIR);     // new role shortname
+    $shortname   = optional_param('shortname', '', PARAM_RAW);         // new role shortname, special cleaning before storage
     $description = optional_param('description', '', PARAM_CLEAN);     // new role desc
     $action      = optional_param('action', '', PARAM_ALPHA);
     $confirm     = optional_param('confirm', 0, PARAM_BOOL);
+    $cancel      = optional_param('cancel', 0, PARAM_BOOL);
 
     $sitecontext = get_context_instance(CONTEXT_SYSTEM, SITEID);
 
-    $strmanageroles = get_string('manageroles');
-    $strdelete = get_string('delete');
-
-    if ($roleid && $action!='delete') {
-        $role = get_record('role', 'id', $roleid);
-        $editingstr = '-> '.get_string('editinga', '', $role->name);
-    } else {
-        $editingstr ='';
+    if ($cancel) {
+        redirect('manage.php');
     }
 
-    admin_externalpage_print_header($adminroot);
+    $errors = array();
+    $newrole = false;
 
-    $currenttab = 'manage';
-    include_once('managetabs.php');
+    $roles = get_records('role', '', '', 'sortorder ASC, id ASC');
+    $rolescount = count($roles);
+
+/// fix sort order if needed
+    $rolesort = array();
+    $i = 0;
+    foreach ($roles as $rolex) {
+        $rolesort[] = $rolex->id;
+        if ($rolex->sortorder != $i) {
+            $r = new object();
+            $r->id = $rolex->id;
+            $r->sortorder = $i;
+            update_record('role', $r);
+            $roles[$rolex->id]->sortorder = $i;
+        }
+        $i++;
+    }
 
-    // form processing, editing a role, adding a role or deleting a role
-    if ($action && confirm_sesskey()) {
 
-        switch ($action) {
-            case 'add':
+/// form processing, editing a role, adding a role, deleting a role etc.
+    switch ($action) {
+        case 'add':
+            if ($data = data_submitted() and confirm_sesskey()) {
+
+                $shortname = moodle_strtolower(clean_param(clean_filename($shortname), PARAM_SAFEDIR)); // only lowercase safe ASCII characters
 
-                $newrole = create_role($name, $shortname, $description);
+                if (empty($name)) {
+                    $errors['name'] = get_string('errorbadrolename', 'role');
+                } else if (count_records('role', 'name', $name)) {
+                    $errors['name'] = get_string('errorexistsrolename', 'role');
+                }
 
-                $ignore = array('roleid', 'sesskey', 'action', 'name', 'description', 'contextid');
+                if (empty($shortname)) {
+                    $errors['shortname'] = get_string('errorbadroleshortname', 'role');
+                } else if (count_records('role', 'shortname', $shortname)) {
+                    $errors['shortname'] = get_string('errorexistsroleshortname', 'role');
+                }
 
-                $data = data_submitted();
+                if (empty($errors)) {
+                    $newrole = create_role($name, $shortname, $description, '', $rolescount);
+                } else {
+                    $newrole = new object();
+                    $newrole->name = $name;
+                    $newrole->shortname = $shortname;
+                    $newrole->description = $description;
+                }
+                $allowed_values = array(CAP_INHERIT, CAP_ALLOW, CAP_PREVENT, CAP_PROHIBIT);
 
                 foreach ($data as $capname => $value) {
-                    if (in_array($capname, $ignore)) {
+                    if (!preg_match('|^[a-z_]+/[a-z_]+:[a-z_]+$|', $capname)) {
+                        continue;
+                    }
+                    $value = (int)$value;
+                    if (!in_array($value, $allowed_values)) {
                         continue;
                     }
 
-                    assign_capability($capname, $value, $newrole, $sitecontext->id);
-
+                    if (empty($errors)) {
+                        assign_capability($capname, $value, $newrole, $sitecontext->id);
+                    } else {
+                        $newrole->$capname = $value;
+                    }
+                }
+                if (empty($errors)) {
+                    redirect('manage.php');
                 }
+            }
+            break;
 
-                break;
+        case 'edit':
+            if ($data = data_submitted() and confirm_sesskey()) {
 
-            case 'edit':
+                $shortname = moodle_strtolower(clean_param(clean_filename($shortname), PARAM_SAFEDIR)); // only lowercase safe ASCII characters
 
-                $ignore = array('roleid', 'sesskey', 'action', 'name', 'description', 'contextid');
+                if (empty($name)) {
+                    $errors['name'] = get_string('errorbadrolename', 'role');
+                } else {
+                    if ($rs = get_records('role', 'name', $name)) {
+                        unset($rs[$roleid]);
+                        if (!empty($rs)) {
+                            $errors['name'] = get_string('errorexistsrolename', 'role');
+                        }
+                    }
+                }
 
-                $data = data_submitted();
+                if (empty($shortname)) {
+                    $errors['shortname'] = get_string('errorbadroleshortname', 'role');
+                } else {
+                    if ($rs = get_records('role', 'shortname', $shortname)) {
+                        unset($rs[$roleid]);
+                        if (!empty($rs)) {
+                            $errors['shortname'] = get_string('errorexistsroleshortname', 'role');
+                        }
+                    }
+                }
+                if (!empty($errors)) {
+                    $newrole = new object();
+                    $newrole->name = $name;
+                    $newrole->shortname = $shortname;
+                    $newrole->description = $description;
+                }
+
+                $allowed_values = array(CAP_INHERIT, CAP_ALLOW, CAP_PREVENT, CAP_PROHIBIT);
 
                 foreach ($data as $capname => $value) {
-                    if (in_array($capname, $ignore)) {
+                    if (!preg_match('|^[a-z_]+/[a-z_]+:[a-z_]+$|', $capname)) {
+                        continue;
+                    }
+                    $value = (int)$value;
+                    if (!in_array($value, $allowed_values)) {
+                        continue;
+                    }
+
+                    if (!empty($errors)) {
+                        $newrole->$capname = $value;
                         continue;
                     }
 
                     // edit default caps
-                    $SQL = "select * from {$CFG->prefix}role_capabilities where
-                        roleid = $roleid and capability = '$capname' and contextid = $sitecontext->id";
+                    $SQL = "SELECT * FROM {$CFG->prefix}role_capabilities
+                            WHERE roleid = $roleid AND capability = '$capname'
+                              AND contextid = $sitecontext->id";
 
                     $localoverride = get_record_sql($SQL);
 
 
                 // update normal role settings
 
-                $role->id = $roleid;
-                $role->name = $name;
-                $role->description = $description;
+                if (empty($errors)) {
+                    $role->id = $roleid;
+                    $role->name = $name;
+                    $role->description = $description;
 
-                if (!update_record('role', $role)) {
-                    error('Could not update role!');
+                    if (!update_record('role', $role)) {
+                        error('Could not update role!');
+                    }
+                    redirect('manage.php');
                 }
+            }
+            break;
 
-                break;
+        case 'delete':
+            if ($confirm and data_submitted() and confirm_sesskey()) {
 
-            case 'delete':
-                if ($confirm) { // deletes a role
+                // first unssign all users
+                if (!role_unassign($roleid)) {
+                    error("Error while unassigning all users from role with ID $roleid!");
+                }
 
-                    // check for depedencies  XXX TODO
+                if (!delete_records('role', 'id', $roleid)) {
+                    error("Could not delete role with ID $roleid!");
+                }
 
-                    // delete all associated role-assignments?  XXX TODO
+            } else if (confirm_sesskey()){
+                // show confirmation
+                admin_externalpage_print_header($adminroot);
+                $optionsyes = new object();
+                $optionsyes->action = 'delete';
+                $optionsyes->roleid = $roleid;
+                $optionsyes->sesskey = sesskey();
+                $optionsyes->confirm = 1;
+                $a = new object();
+                $a->id = $roleid;
+                $a->name = $roles[$roleid]->name;
+                $a->shortname = $roles[$roleid]->shortname;
+                $a->count = (int)count_records('role_assignments', 'roleid', $roleid);
+                notice_yesno(get_string('deleterolesure', 'role', $a), 'manage.php', 'manage.php', $optionsyes, NULL, 'post', 'get');
+                admin_externalpage_print_footer($adminroot);
+                die;
+            }
+
+            redirect('manage.php');
+            break;
+
+        case 'moveup':
+            if (array_key_exists($roleid, $roles) and confirm_sesskey()) {
+                $role = $roles[$roleid];
+                if ($role->sortorder > 0) {
+                    $above = $roles[$rolesort[$role->sortorder - 1]];
+                    $r = new object();
+
+                    $r->id = $role->id;
+                    $r->sortorder = $above->sortorder;
+                    if (!update_record('role', $r)) {
+                        $errors[] = "Can not update role with ID $r->id!";
+                    }
 
-                    if (!delete_records('role', 'id', $roleid)) {
-                        error('Could not delete role!');
+                    $r->id = $above->id;
+                    $r->sortorder = $role->sortorder;
+                    if (!update_record('role', $r)) {
+                        $errors[] = "Can not update role with ID $r->id!";
                     }
 
-                } else {
-                    echo ('<form action="manage.php" method="POST">');
-                    echo ('<input type="hidden" name="action" value="delete">');
-                    echo ('<input type="hidden" name="roleid" value="'.$roleid.'">');
-                    echo ('<input type="hidden" name="sesskey" value="'.sesskey().'">');
-                    echo ('<input type="hidden" name="confirm" value="1">');
-                    notice_yesno(get_string('deleterolesure', 'role'),
-                       'manage.php?action=delete&roleid='.$roleid.'&sesskey='.sesskey().'&confirm=1', 'manage.php');
-                    admin_externalpage_print_footer($adminroot);
-                    exit;
+                    if (count($errors)) {
+                        $msg = '<p>';
+                        foreach ($errors as $e) {
+                            $msg .= $e.'<br />';
+                        }
+                        admin_externalpage_print_header($adminroot);
+                        notify($msg);
+                        print_continue('manage.php');
+                        admin_externalpage_print_footer($adminroot);
+                        die;
+                    }
                 }
+            }
+
+            redirect('manage.php');
+            break;
+
+        case 'movedown':
+            if (array_key_exists($roleid, $roles) and confirm_sesskey()) {
+                $role = $roles[$roleid];
+                if ($role->sortorder + 1 < $rolescount) {
+                    $bellow = $roles[$rolesort[$role->sortorder + 1]];
+                    $r = new object();
+
+                    $r->id = $role->id;
+                    $r->sortorder = $bellow->sortorder;
+                    if (!update_record('role', $r)) {
+                        $errors[] = "Can not update role with ID $r->id!";
+                    }
 
-                break;
+                    $r->id = $bellow->id;
+                    $r->sortorder = $role->sortorder;
+                    if (!update_record('role', $r)) {
+                        $errors[] = "Can not update role with ID $r->id!";
+                    }
 
-                /// add possible positioning switch here
+                    if (count($errors)) {
+                        $msg = '<p>';
+                        foreach ($errors as $e) {
+                            $msg .= $e.'<br />';
+                        }
+                        $msg .= '</p>';
+                        admin_externalpage_print_header($adminroot);
+                        notify($msg);
+                        print_continue('manage.php');
+                        admin_externalpage_print_footer($adminroot);
+                        die;
+                    }
+                }
+            }
 
-            default:
-                break;
+            redirect('manage.php');
+            break;
 
-        }
+        default:
+            break;
 
     }
 
-    $roles = get_records('role', '', '', 'sortorder ASC, id ASC');
+/// print UI now
+
+    admin_externalpage_print_header($adminroot);
 
-    if (($roleid && $action!='delete') || $action=='new') { // load the role if id is present
+    $currenttab = 'manage';
+    include_once('managetabs.php');
 
-        if ($roleid) {
-            $action='edit';
-            $role = get_record('role', 'id', $roleid);
+    if (($roleid and ($action == 'view' or $action == 'edit')) or $action == 'add') { // view or edit role details
+
+        if ($action == 'add') {
+            $roleid = 0;
+            if (empty($errors) or empty($newrole)) {
+                $role = new object();
+                $role->name='';
+                $role->shortname='';
+                $role->description='';
+            } else {
+                $role = stripslashes_safe($newrole);
+            }
+        } else if ($action == 'edit' and !empty($errors) and !empty($newrole)) {
+                $role = stripslashes_safe($newrole);
         } else {
-            $action='add';
-            $role->name='';
-            $role->shortname='';
-            $role->description='';
+            if(!$role = get_record('role', 'id', $roleid)) {
+                error('Incorrect role ID!');
+            }
         }
 
         foreach ($roles as $rolex) {
             $roleoptions[$rolex->id] = format_string($rolex->name);
         }
 
-        // prints a form to swap roles
-        print ('<form name="rolesform1" action="manage.php" method="post">');
-        print ('<div align="center">'.get_string('selectrole', 'role').': ');
-        choose_from_menu ($roleoptions, 'roleid', $roleid, get_string('listallroles', 'role'), $script='rolesform1.submit()');
-        print ('</div></form>');
-
         // this is the array holding capabilities of this role sorted till this context
         $r_caps = role_context_capabilities($roleid, $sitecontext);
 
         $capabilities = fetch_context_capabilities($sitecontext);
 
         $usehtmleditor = can_use_html_editor();
-        print_simple_box_start();
+
+        switch ($action) {
+            case 'add':
+                print_heading(get_string('addrole', 'role'));
+                break;
+            case 'view':
+                print_heading(get_string('viewrole', 'role'));
+                break;
+            case 'edit':
+                print_heading(get_string('editrole', 'role'));
+                break;
+        }
+        print_simple_box_start('center');
         include_once('manage.html');
         print_simple_box_end();
 
         $table = new object;
 
         $table->tablealign = 'center';
-        $table->align = array('right', 'left', 'left');
+        $table->align = array('right', 'left', 'middle');
         $table->wrap = array('nowrap', '', 'nowrap');
         $table->cellpadding = 5;
         $table->cellspacing = 0;
         $table->width = '90%';
+        $table->data = array();
 
-        $table->head = array(get_string('roles', 'role'),
+        $table->head = array(get_string('name'),
                              get_string('description'),
-                             get_string('delete'));
+                             get_string('shortname'),
+                             get_string('edit'));
 
         /*************************
          * List all current roles *
 
         foreach ($roles as $role) {
 
-            $table->data[] = array('<a href="manage.php?roleid='.$role->id.'&amp;sesskey='.sesskey().'">'.format_string($role->name).'</a>', format_text($role->description, FORMAT_HTML), '<a href="manage.php?action=delete&roleid='.$role->id.'&sesskey='.sesskey().'">'.$strdelete.'</a>');
+            $stredit     = get_string('edit');
+            $strdelete   = get_string('delete');
+            $strmoveup   = get_string('moveup');
+            $strmovedown = get_string('movedown');
+
+            $row = array();
+            $row[0] = '<a href="manage.php?roleid='.$role->id.'&amp;action=view">'.format_string($role->name).'</a>';
+            $row[1] = format_text($role->description, FORMAT_HTML);
+            $row[2] = s($role->shortname);
+            $row[3] = '<a title="'.$stredit.'" href="manage.php?action=edit&roleid='.$role->id.'">'.
+                         '<img src="'.$CFG->pixpath.'/t/edit.gif" height="11" width="11" border="0" alt="'.$stredit.'" /></a> ';
+            $row[3] .= '<a title="'.$strdelete.'" href="manage.php?action=delete&roleid='.$role->id.'&sesskey='.sesskey().'">'.
+                         '<img src="'.$CFG->pixpath.'/t/delete.gif" height="11" width="11" border="0" alt="'.$strdelete.'" /></a> ';
+            if ($role->sortorder != 0) {
+                $row[3] .= '<a title="'.$strmoveup.'" href="manage.php?action=moveup&roleid='.$role->id.'&sesskey='.sesskey().'">'.
+                     '<img src="'.$CFG->pixpath.'/t/up.gif" height="11" width="11" border="0" alt="'.$strmoveup.'" /></a> ';
+            } else {
+                $row[3] .= '<img src="'.$CFG->wwwroot.'/pix/spacer.gif" height="11" width="11" border="0" alt="" /> ';
+            }
+            if ($role->sortorder+1 < $rolescount) {
+                $row[3] .= '<a title="'.$strmovedown.'" href="manage.php?action=movedown&roleid='.$role->id.'&sesskey='.sesskey().'">'.
+                     '<img src="'.$CFG->pixpath.'/t/down.gif" height="11" width="11" border="0" alt="'.$strmovedown.'" /></a> ';
+            } else {
+                $row[3] .= '<img src="'.$CFG->wwwroot.'/pix/spacer.gif" height="11" width="11" border="0" alt="" /> ';
+            }
+
+            $table->data[] = $row;
 
         }
         print_table($table);
 
-        $options = new object;
-        $options->sesskey = sesskey();
-        $options->action = 'new';
-        print_single_button('manage.php', $options, get_string('addrole', 'role'), 'POST');
+        $options = new object();
+        $options->action = 'add';
+        print_single_button('manage.php', $options, get_string('addrole', 'role'), 'get');
     }
 
     admin_externalpage_print_footer($adminroot);
index 9f7e097a1fcedddf915649ca2c65b49a72c86f5c..d61952f305bbdc0608f3120188ac6c06c13f04c8 100755 (executable)
             echo '<input type="hidden" name="courseid" value="'.$courseid.'" />';
         }
         echo '<input type="hidden" name="contextid" value="'.$context->id.'" />'.$strroletooverride.': ';
-        choose_from_menu ($overridableroles, 'roleid', $roleid, get_string('listallroles', 'role'), $script='rolesform.submit()');
+        choose_from_menu ($overridableroles, 'roleid', $roleid, get_string('listallroles', 'role').'...', $script='rolesform.submit()');
         echo '</div></form>';
 
         $parentcontexts = get_parent_contexts($context);
index 8fb85e013a1f530eeffda0905dda01b2752406c7..14b063d0b57c94e29ded3e4a54fe0a0db2316f8e 100644 (file)
@@ -11,9 +11,15 @@ $string['capabilities'] = 'Capabilities';
 $string['currentrole'] = 'Current role';
 $string['currentcontext'] = 'Current context';
 $string['defineroles'] = 'Define roles';
+$string['deleterolesure'] = '<p>Are you sure, that you want to delete role \"$a->name ($a->shortname)\"?</p><p>Currently this role is assigned to $a->count users.</p>';
+$string['editrole'] = 'Edit role';
+$string['errorbadrolename'] = 'Incorrect role name';
+$string['errorexistsrolename'] = 'Role name already exists';
+$string['errorbadroleshortname'] = 'Incorrect role name';
+$string['errorexistsroleshortname'] = 'Role name already exists';
 $string['existingusers'] = '$a existing users';
 $string['inherit'] = 'Inherit';
-$string['listallroles'] = 'List all roles...';
+$string['listallroles'] = 'List all roles';
 $string['manageroles'] = 'Manage roles';
 $string['metaassignerror'] = 'Can not assign this role to user \"$a\" because Manage metacourse capability is needed.';
 $string['metaunassignerror'] = 'Role of user \"$a\" was automatically reassigned, please unassign the role in child courses instead.';
@@ -26,13 +32,11 @@ $string['prevent'] = 'Prevent';
 $string['prohibit'] = 'Prohibit';
 $string['risks'] = 'Risks';
 $string['roleassignments'] = 'Role assignments';
-$string['roledescription'] = 'Role description';
-$string['rolename'] = 'Role name';
-$string['roleshortname'] = 'Role short name (ASCII)';
 $string['roletoassign'] = 'Role to assign';
 $string['roletooverride'] = 'Role to override';
 $string['roles'] = 'Roles';
 $string['selectrole'] = 'Select a role';
+$string['viewrole'] = 'View role details';
 
 $string['site:doanything'] = 'Allowed to do everything';
 $string['legacy:guest'] = 'LEGACY ROLE: Guest';
@@ -100,4 +104,4 @@ $string['question:export'] = 'Export questions';
 $string['question:managecategory'] = 'Manage question category';
 $string['question:manage'] = 'Manage questions';
 
-?>
+?>
\ No newline at end of file
index 407033a6525e8d7ff6d006fc553ba9d9e76bb972..2d1c6a254c8fed2cb3b44b5d84ebd170fc7c1a65 100755 (executable)
@@ -1188,7 +1188,7 @@ function get_local_override($roleid, $contextid, $capability) {
  * @param legacy - optional legacy capability
  * @return id or false
  */
-function create_role($name, $shortname, $description, $legacy='') {
+function create_role($name, $shortname, $description, $legacy='', $sortorder = -1) {
 
     // check for duplicate role name
 
@@ -1200,10 +1200,17 @@ function create_role($name, $shortname, $description, $legacy='') {
         error('there is already a role with this shortname!');
     }
 
+    $role = new object();
     $role->name = $name;
     $role->shortname = $shortname;
     $role->description = $description;
 
+    if ($sortorder = -1) {
+        $role->sortorder = count_records('role');
+    } else {
+        $role->sortorder = $sortorder;
+    }
+
     $context = get_context_instance(CONTEXT_SYSTEM, SITEID);
 
     if ($id = insert_record('role', $role)) {
@@ -2626,21 +2633,21 @@ function get_user_capability_course($capability, $userid='') {
  * @return array
  */
 function get_roles_on_exact_context($context) {
-    
+
     global $CFG;
 
-    return get_records_sql("SELECT DISTINCT r.* 
+    return get_records_sql("SELECT DISTINCT r.*
                             FROM {$CFG->prefix}role_assignments ra,
                                  {$CFG->prefix}role r
                             WHERE ra.roleid = r.id
                                   AND ra.contextid = $context->id");
-  
+
 }
 
-/* 
+/*
  * Switches the current user to another role for the current session and only
- * in the given context.  If roleid is not valid (eg 0) or the current user 
- * doesn't have permissions to be switching roles then the user's session 
+ * in the given context.  If roleid is not valid (eg 0) or the current user
+ * doesn't have permissions to be switching roles then the user's session
  * is compltely reset to have their normal roles.
  * @param integer $roleid
  * @param object $context
@@ -2652,7 +2659,7 @@ function role_switch($roleid, $context) {
     global $db;
 
 /// If we can't use this or are already using it or no role was specified then bail completely and reset
-    if (empty($roleid) || !has_capability('moodle/role:switchroles', $context) 
+    if (empty($roleid) || !has_capability('moodle/role:switchroles', $context)
         || !empty($USER->switchrole[$context->id])  || !confirm_sesskey()) {
         load_user_capability('', $context);   // Reset all permissions for this context to normal
         unset($USER->switchrole[$context->id]);  // Delete old capabilities
@@ -2695,9 +2702,9 @@ function role_switch($roleid, $context) {
 
 // get any role that has an override on exact context
 function get_roles_with_override_on_context($context) {
-    
+
     global $CFG;
-    
+
     return get_records_sql("SELECT DISTINCT r.*
                             FROM {$CFG->prefix}role_capabilities rc,
                                  {$CFG->prefix}role r
@@ -2707,10 +2714,10 @@ function get_roles_with_override_on_context($context) {
 
 // get all capabilities for this role on this context (overrids)
 function get_capabilities_from_role_on_context($role, $context) {
-    
+
     global $CFG;
-    
-    return get_records_sql("SELECT * 
+
+    return get_records_sql("SELECT *
                             FROM {$CFG->prefix}role_capabilities
                             WHERE contextid = $context->id
                                   AND roleid = $role->id");
@@ -2719,13 +2726,13 @@ function get_capabilities_from_role_on_context($role, $context) {
 /* find all user assignemnt of users for this role, on this context
  */
 function get_users_from_role_on_context($role, $context) {
-    
+
     global $CFG;
-    
+
     return get_records_sql("SELECT *
                             FROM {$CFG->prefix}role_assignments
                             WHERE contextid = $context->id
-                                  AND roleid = $role->id");  
+                                  AND roleid = $role->id");
 }
 
 ?>
index 3dafb3114c7aa78bfe36e94459c1d7a9c1e679fb..7841dd0e27ea7da1f3b496d55fcb20a02a4b0a9f 100644 (file)
@@ -381,7 +381,6 @@ function upgrade_activity_modules($return) {
 
     if ($updated_modules) {
         print_continue($return);
-        print_footer();
         die;
     }
 }
index a60ec085a04b68e8ab2f9313cc6954d5b9f85230..13da6c8b2f9e53a9127a72fff1419b4f2b00db0d 100644 (file)
@@ -4600,7 +4600,7 @@ function notice ($message, $link='') {
  * @param string $linkyes The link to take the user to if they choose "Yes"
  * @param string $linkno The link to take the user to if they choose "No"
  */
-function notice_yesno ($message, $linkyes, $linkno) {
+function notice_yesno ($message, $linkyes, $linkno, $optionsyes=NULL, $optionsno=NULL, $methodyes='post', $methodno='post') {
 
     global $CFG;
 
@@ -4611,9 +4611,9 @@ function notice_yesno ($message, $linkyes, $linkno) {
     print_simple_box_start('center', '60%', '', 5, 'generalbox', 'notice');
     echo '<p align="center">'. $message .'</p>';
     echo '<table align="center" cellpadding="20"><tr><td>';
-    print_single_button($linkyes, NULL, get_string('yes'), 'post', $CFG->framename);
+    print_single_button($linkyes, $optionsyes, get_string('yes'), $methodyes, $CFG->framename);
     echo '</td><td>';
-    print_single_button($linkno, NULL, get_string('no'), 'post', $CFG->framename);
+    print_single_button($linkno, $optionsno, get_string('no'), $methodno, $CFG->framename);
     echo '</td></tr></table>';
     print_simple_box_end();
 }