### Eclipse Workspace Patch 1.0
#P moodle
Index: lib/accesslib.php
===================================================================
RCS file: /cvsroot/moodle/moodle/lib/accesslib.php,v
retrieving revision 1.88
diff -u -r1.88 accesslib.php
--- lib/accesslib.php	16 Sep 2006 05:56:51 -0000	1.88
+++ lib/accesslib.php	16 Sep 2006 08:03:21 -0000
@@ -844,15 +844,15 @@
 
     // Create default/legacy roles and capabilities.
     // (1 legacy capability per legacy role at system level).
-    $adminrole = create_role(get_string('administrator'), get_string('administratordescription'), 'moodle/legacy:admin');   
+    $adminrole = create_role(get_string('administrator'), 'def_administrator', get_string('administratordescription'), 'moodle/legacy:admin');   
     if (!assign_capability('moodle/site:doanything', CAP_ALLOW, $adminrole, $systemcontext->id)) {
         error('Could not assign moodle/site:doanything to the admin role');
     }
-    $coursecreatorrole = create_role(get_string('coursecreators'), get_string('coursecreatorsdescription'), 'moodle/legacy:coursecreator');   
-    $noneditteacherrole = create_role(get_string('noneditingteacher'), get_string('noneditingteacherdescription'), 'moodle/legacy:teacher');    
-    $editteacherrole = create_role(get_string('defaultcourseteacher'), get_string('defaultcourseteacherdescription'), 'moodle/legacy:editingteacher');    
-    $studentrole = create_role(get_string('defaultcoursestudent'), get_string('defaultcoursestudentdescription'), 'moodle/legacy:student');
-    $guestrole = create_role(get_string('guest'), get_string('guestdescription'), 'moodle/legacy:guest');
+    $coursecreatorrole = create_role(get_string('coursecreators'), 'def_creator', get_string('coursecreatorsdescription'), 'moodle/legacy:coursecreator');   
+    $noneditteacherrole = create_role(get_string('noneditingteacher'), 'def_noneditteacher', get_string('noneditingteacherdescription'), 'moodle/legacy:teacher');    
+    $editteacherrole = create_role(get_string('defaultcourseteacher'), 'def_teacher', get_string('defaultcourseteacherdescription'), 'moodle/legacy:editingteacher');    
+    $studentrole = create_role(get_string('defaultcoursestudent'), 'def_student', get_string('defaultcoursestudentdescription'), 'moodle/legacy:student');
+    $guestrole = create_role(get_string('guest'), 'def_guest', get_string('guestdescription'), 'moodle/legacy:guest');
 
 
     // Look inside user_admin, user_creator, user_teachers, user_students and
@@ -1124,19 +1124,26 @@
 /**
  * function that creates a role
  * @param name - role name
+ * @param shortname - role short name
  * @param description - role description
  * @param legacy - optional legacy capability
  * @return id or false
  */
-function create_role($name, $description, $legacy='') {
+function create_role($name, $shortname, $description, $legacy='') {
           
     // check for duplicate role name
                 
     if ($role = get_record('role','name', $name)) {
         error('there is already a role with this name!');  
     }
+
+    if ($role = get_record('role','shortname', $shortname)) {
+        error('there is already a role with this shortname!');  
+    }
     
+    $role = new Object();
     $role->name = $name;
+    $role->name = $shortname;
     $role->description = $description;
     
     $context = get_context_instance(CONTEXT_SYSTEM, SITEID);                           
Index: lib/moodlelib.php
===================================================================
RCS file: /cvsroot/moodle/moodle/lib/moodlelib.php,v
retrieving revision 1.747
diff -u -r1.747 moodlelib.php
--- lib/moodlelib.php	14 Sep 2006 09:08:09 -0000	1.747
+++ lib/moodlelib.php	16 Sep 2006 08:03:29 -0000
@@ -138,6 +138,11 @@
 define('PARAM_NOTAGS',   0x0008);
 
 /**
+ * PARAM_TITLE - general title compatible with multilang filter, no other html tags.
+ */
+define('PARAM_TITLE',  0x0009);
+
+/**
  * PARAM_FILE - safe file name, all dangerous chars are stripped, protects against XSS, SQL injections and directory traversals
  */
 define('PARAM_FILE',     0x0010);
@@ -365,6 +370,9 @@
             }
             return $param;
 
+        case PARAM_TITLE:       // leave only tags needed for multilang
+            return clean_param(strip_tags($param, '<lang><span>'), PARAM_CLEAN);
+
         case PARAM_NOTAGS:       // Strip all tags
             return strip_tags($param);
 
Index: lib/db/install.xml
===================================================================
RCS file: /cvsroot/moodle/moodle/lib/db/install.xml,v
retrieving revision 1.20
diff -u -r1.20 install.xml
--- lib/db/install.xml	12 Sep 2006 15:19:10 -0000	1.20
+++ lib/db/install.xml	16 Sep 2006 08:03:33 -0000
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<XMLDB PATH="lib/db" VERSION="20060912" COMMENT="XMLDB file for core Moodle tables"
+<XMLDB PATH="lib/db" VERSION="20060916" COMMENT="XMLDB file for core Moodle tables"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="../../lib/xmldb/xmldb.xsd"
 >
@@ -914,8 +914,9 @@
     <TABLE NAME="role" COMMENT="moodle roles" PREVIOUS="blog_tag_instance" NEXT="context">
       <FIELDS>
         <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" ENUM="false" NEXT="name"/>
-        <FIELD NAME="name" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" ENUM="false" PREVIOUS="id" NEXT="description"/>
-        <FIELD NAME="description" TYPE="text" LENGTH="small" NOTNULL="true" SEQUENCE="false" ENUM="false" PREVIOUS="name" NEXT="sortorder"/>
+        <FIELD NAME="name" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" ENUM="false" PREVIOUS="id" NEXT="shortname"/>
+        <FIELD NAME="shortname" TYPE="char" LENGTH="100" NOTNULL="true" SEQUENCE="false" ENUM="false" PREVIOUS="name" NEXT="description"/>
+        <FIELD NAME="description" TYPE="text" LENGTH="small" NOTNULL="true" SEQUENCE="false" ENUM="false" PREVIOUS="shortname" NEXT="sortorder"/>
         <FIELD NAME="sortorder" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="description"/>
       </FIELDS>
       <KEYS>
Index: lib/db/postgres7.sql
===================================================================
RCS file: /cvsroot/moodle/moodle/lib/db/postgres7.sql,v
retrieving revision 1.150
diff -u -r1.150 postgres7.sql
--- lib/db/postgres7.sql	12 Sep 2006 06:08:57 -0000	1.150
+++ lib/db/postgres7.sql	16 Sep 2006 08:03:41 -0000
@@ -680,6 +680,7 @@
 CREATE TABLE prefix_role (   
   id SERIAL PRIMARY KEY,     
   name varchar(255) NOT NULL default '',     
+  name varchar(100) NOT NULL default '',     
   description text NOT NULL default '',      
   sortorder integer NOT NULL default '0'     
 );   
Index: lib/db/postgres7.php
===================================================================
RCS file: /cvsroot/moodle/moodle/lib/db/postgres7.php,v
retrieving revision 1.215
diff -u -r1.215 postgres7.php
--- lib/db/postgres7.php	12 Sep 2006 08:17:33 -0000	1.215
+++ lib/db/postgres7.php	16 Sep 2006 08:03:41 -0000
@@ -1812,6 +1812,26 @@
         }
     }
 
+    if ($oldversion < 2006091602) {
+        table_column('role', '', 'shortname', 'varchar', '100', '', '', 'not null', 'name');
+        if ($roles = get_records('role')) {
+            foreach ($roles as $role) {
+                $updated = new object();
+                $updated->id = $role->id;
+                switch ($role->name) {
+                    case 'Administrator':       $updated->shortname = 'def_administrator'; break;
+                    case 'Course creator':      $updated->shortname = 'def_creator'; break;
+                    case 'Non-editing teacher': $updated->shortname = 'def_noneditteacher'; break;
+                    case 'Teacher':             $updated->shortname = 'def_teacher'; break;
+                    case 'Student':             $updated->shortname = 'def_student'; break;
+                    case 'Guest':               $updated->shortname = 'def_guest'; break;
+                    default:                    $updated->shortname = 'def_'.clean_param(moodle_strtolower($role->name), PARAM_SAFEDIR);
+                }
+                update_record('role', $updated);
+            }
+        }
+    }
+
     return $result;
 }
 
Index: lib/db/mysql.sql
===================================================================
RCS file: /cvsroot/moodle/moodle/lib/db/mysql.sql,v
retrieving revision 1.176
diff -u -r1.176 mysql.sql
--- lib/db/mysql.sql	12 Sep 2006 06:08:57 -0000	1.176
+++ lib/db/mysql.sql	16 Sep 2006 08:03:39 -0000
@@ -909,6 +909,7 @@
 CREATE TABLE prefix_role (
   `id` int(10) unsigned NOT NULL auto_increment,
   `name` varchar(255) NOT NULL default '',
+  `shortname` varchar(100) NOT NULL default '',
   `description` text NOT NULL default '',
   `sortorder` int(10) unsigned NOT NULL default '0',
   KEY `sortorder` (`sortorder`),
Index: lib/db/mysql.php
===================================================================
RCS file: /cvsroot/moodle/moodle/lib/db/mysql.php,v
retrieving revision 1.234
diff -u -r1.234 mysql.php
--- lib/db/mysql.php	12 Sep 2006 08:17:33 -0000	1.234
+++ lib/db/mysql.php	16 Sep 2006 08:03:36 -0000
@@ -2212,6 +2212,26 @@
         }
     }
 
+    if ($oldversion < 2006091602) {
+        table_column('role', '', 'shortname', 'varchar', '100', '', '', 'not null', 'name');
+        if ($roles = get_records('role')) {
+            foreach ($roles as $role) {
+                $updated = new object();
+                $updated->id = $role->id;
+                switch ($role->name) {
+                    case 'Administrator':       $updated->shortname = 'def_administrator'; break;
+                    case 'Course creator':      $updated->shortname = 'def_creator'; break;
+                    case 'Non-editing teacher': $updated->shortname = 'def_noneditteacher'; break;
+                    case 'Teacher':             $updated->shortname = 'def_teacher'; break;
+                    case 'Student':             $updated->shortname = 'def_student'; break;
+                    case 'Guest':               $updated->shortname = 'def_guest'; break;
+                    default:                    $updated->shortname = 'def_'.clean_param(moodle_strtolower($role->name), PARAM_SAFEDIR);
+                }
+                update_record('role', $updated);
+            }
+        }
+    }
+
     return $result;
 }
 
Index: admin/roles/manage.html
===================================================================
RCS file: /cvsroot/moodle/moodle/admin/roles/manage.html,v
retrieving revision 1.6
diff -u -r1.6 manage.html
--- admin/roles/manage.html	16 Aug 2006 09:11:43 -0000	1.6
+++ admin/roles/manage.html	16 Sep 2006 08:03:16 -0000
@@ -3,6 +3,7 @@
 <input type="hidden" name="sesskey" value="<?php print (sesskey()); ?>">
 <input type="hidden" name="action" value="<?php echo $action; ?>">
 <br/>Role Name: <input type="text" name="name" value="<?php echo $role->name; ?>">
+Role short name (ASCII): <input type="text" name="shortname" value="<?php echo $role->shortname; ?>">
 <br/>Role Description: 
 
 <?php print_textarea($CFG->htmleditor, 10, 50, 50, 10, 'description', "$role->description"); ?>
Index: admin/roles/manage.php
===================================================================
RCS file: /cvsroot/moodle/moodle/admin/roles/manage.php,v
retrieving revision 1.14
diff -u -r1.14 manage.php
--- admin/roles/manage.php	14 Sep 2006 15:20:44 -0000	1.14
+++ admin/roles/manage.php	16 Sep 2006 08:03:16 -0000
@@ -9,8 +9,9 @@
 
     $roleid      = optional_param('roleid', 0, PARAM_INT); // if set, we are editing a role
     $action      = optional_param('action', '', PARAM_ALPHA);
-    $name        = optional_param('name', '', PARAM_ALPHA); // new role name
-    $description = optional_param('description', '', PARAM_NOTAGS); // new role desc
+    $name        = optional_param('name', '', PARAM_TITLE); // new role name - must be multilang compatible
+    $shortname   = optional_param('shortname', '', PARAM_SAFEDIR); // safe short name - must be ASCII only
+    $description = optional_param('description', '', PARAM_TITLE); // multilang compatible, no extra HTML formatting
     $confirm     = optional_param('confirm', 0, PARAM_BOOL);
 
     $sitecontext = get_context_instance(CONTEXT_SYSTEM, SITEID);
@@ -36,7 +37,7 @@
         switch ($action) {
             case 'add':
 
-                $newrole = create_role($name, $description);        
+                $newrole = create_role($name, $shortname, $description);        
 
                 $ignore = array('roleid', 'sesskey', 'action', 'name', 'description', 'contextid');
 
@@ -97,6 +98,7 @@
 
                 $role->id = $roleid;
                 $role->name = $name;
+                $role->shortname = $shortname;
                 $role->description = $description;    
 
                 update_record('role', $role);
Index: version.php
===================================================================
RCS file: /cvsroot/moodle/moodle/version.php,v
retrieving revision 1.380
diff -u -r1.380 version.php
--- version.php	15 Sep 2006 14:39:16 -0000	1.380
+++ version.php	16 Sep 2006 08:03:16 -0000
@@ -6,7 +6,7 @@
 // This is compared against the values stored in the database to determine
 // whether upgrades should be performed (see lib/db/*.php)
 
-   $version = 2006091500;  // YYYYMMDD = date
+   $version = 2006091602;  // YYYYMMDD = date
                            //       XY = increments within a single day
 
    $release = '1.7 dev';    // Human-friendly version name
