--- loncom/interface/loncreateuser.pm	2007/06/07 23:11:05	1.152
+++ loncom/interface/loncreateuser.pm	2007/06/11 22:24:51	1.155
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Create a user
 #
-# $Id: loncreateuser.pm,v 1.152 2007/06/07 23:11:05 banghart Exp $
+# $Id: loncreateuser.pm,v 1.155 2007/06/11 22:24:51 banghart Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -1611,47 +1611,29 @@ sub custom_role_editor {
 	&print_username_entry_form($r);
         return;
     }
-    my $head_script = "\n";
-    $head_script .= '<script type="text/javascript">'."\n";
-    $head_script .= 'function set_ta() {'."\n";
-    my @ta_c = split(/:/,$Apache::lonnet::pr{'ta:c'});
-    foreach my $priv_item (@ta_c) {
-        my ($priv, $dummy) = split(/\&/,$priv_item);
-        $head_script .= "document.form1.$priv"."_c.checked = true;\n";
-    }
-    my @ta_d = split(/:/,$Apache::lonnet::pr{'ta:d'});
-    foreach my $priv_item (@ta_d) {
-        my ($priv, $dummy) = split(/\&/,$priv_item);
-        $head_script .= "document.form1.$priv"."_d.checked = true;\n";
-    }
-        
-    $head_script .= '}'."\n";
-    $head_script .= '</script>'."\n";
-    $r->print(&Apache::loncommon::start_page('Custom Role Editor',$head_script));
+# ------------------------------------------------------- What can be assigned?
+    my %full=();
+    my %courselevel=();
+    my %courselevelcurrent=();
     my $syspriv='';
     my $dompriv='';
     my $coursepriv='';
+    my $body_top;
     my ($disp_dummy,$disp_roles) = &Apache::lonnet::get('roles',["st"]);
     my ($rdummy,$roledef)=
 			 &Apache::lonnet::get('roles',["rolesdef_$rolename"]);
 # ------------------------------------------------------- Does this role exist?
-    $r->print('<h2>');
+    $body_top .= '<h2>';
     if (($rdummy ne 'con_lost') && ($roledef ne '')) {
-	$r->print(&mt('Existing Role').' "');
+	$body_top .= &mt('Existing Role').' "';
 # ------------------------------------------------- Get current role privileges
 	($syspriv,$dompriv,$coursepriv)=split(/\_/,$roledef);
     } else {
-	$r->print(&mt('New Role').' "');
+	$body_top .= &mt('New Role').' "';
 	$roledef='';
     }
-    $r->print($rolename.'"</h2>');
-# ------------------------------------------------------- What can be assigned?
-    my %full=();
-    my %courselevel=();
-    my %courselevelcurrent=();
-    my @roles = ("ta:c","ta:d","ta:s");
+    $body_top .= $rolename.'"</h2>';
     foreach my $item (split(/\:/,$Apache::lonnet::pr{'cr:c'})) {
-    
 	my ($priv,$restrict)=split(/\&/,$item);
         if (!$restrict) { $restrict='F'; }
         $courselevel{$priv}=$restrict;
@@ -1682,13 +1664,26 @@ sub custom_role_editor {
 	}
 	$full{$priv}=1;
     }
+    my $button_code = "\n";
+    my $head_script = "\n";
+    $head_script .= '<script type="text/javascript">'."\n";
+    my @template_roles = ("cc","in","ta","ep","st");
+    foreach my $role (@template_roles) {
+        $head_script .= &make_script_template($role);
+        $button_code .= &make_button_code($role);
+    }
+    $head_script .= '</script>'."\n";
+    $r->print(&Apache::loncommon::start_page('Custom Role Editor',$head_script));
+    $r->print($body_top);
     my %lt=&Apache::lonlocal::texthash(
 		    'prv'  => "Privilege",
 		    'crl'  => "Course Level",
                     'dml'  => "Domain Level",
                     'ssl'  => "System Level");
     $r->print('Select a Template<br />');
-    $r->print('<form action=""><input type="button" onClick="set_ta()" value="TA" /></form>');
+    $r->print('<form action="">');
+    $r->print($button_code);
+    $r->print('</form>');
     $r->print(<<ENDCCF);
 <form name=form1 method="post">
 <input type="hidden" name="phase" value="set_custom_roles" />
@@ -1715,10 +1710,81 @@ ENDCCF
              &Apache::loncommon::end_data_table_row());
     }
     $r->print(&Apache::loncommon::end_data_table().
-   '<input type="submit" value="'.&mt('Define Role').'" /></form>'.
+   '<input type="reset" value="Reset" /><input type="submit" value="'.&mt('Define Role').'" /></form>'.
 	      &Apache::loncommon::end_page());
 }
-
+# --------------------------------------------------------
+sub make_script_template {
+    my ($role) = @_;
+    my %full_c=();
+    my %full_d=();
+    my %full_s=();
+    my $return_script;
+    foreach my $item (split(/\:/,$Apache::lonnet::pr{'cr:c'})) {
+        my ($priv,$restrict)=split(/\&/,$item);
+        $full_c{$priv}=1;
+    }
+    foreach my $item (split(/\:/,$Apache::lonnet::pr{'cr:d'})) {
+        my ($priv,$restrict)=split(/\&/,$item);
+        $full_d{$priv}=1;
+    }
+    foreach my $item (split(/\:/,$Apache::lonnet::pr{'cr:s'})) {
+        my ($priv,$restrict)=split(/\&/,$item);
+        $full_s{$priv}=1;
+    }
+    $return_script .= 'function set_'.$role.'() {'."\n";
+    my @temp = split(/:/,$Apache::lonnet::pr{$role.':c'});
+    my %role_c;
+    foreach my $priv (@temp) {
+        my ($priv_item, $dummy) = split(/\&/,$priv);
+        $role_c{$priv_item} = 1;
+    }
+    foreach my $priv_item (keys(%full_c)) {
+        my ($priv, $dummy) = split(/\&/,$priv_item);
+        if (exists($role_c{$priv})) {
+            $return_script .= "document.form1.$priv"."_c.checked = true;\n";
+        } else {
+            $return_script .= "document.form1.$priv"."_c.checked = false;\n";
+        }
+    }
+    my %role_d;
+    @temp = split(/:/,$Apache::lonnet::pr{$role.':d'});
+    foreach my $priv(@temp) {
+        my ($priv_item, $dummy) = split(/\&/,$priv);
+        $role_d{$priv_item} = 1;
+    }
+    foreach my $priv_item (keys(%full_d)) {
+        my ($priv, $dummy) = split(/\&/,$priv_item);
+        if (exists($role_d{$priv})) {
+            $return_script .= "document.form1.$priv"."_d.checked = true;\n";
+        } else {
+            $return_script .= "document.form1.$priv"."_d.checked = false;\n";
+        }
+    }
+    my %role_s;
+    @temp = split(/:/,$Apache::lonnet::pr{$role.':s'});
+    foreach my $priv(@temp) {
+        my ($priv_item, $dummy) = split(/\&/,$priv);
+        $role_s{$priv_item} = 1;
+    }
+    foreach my $priv_item (keys(%full_s)) {
+        my ($priv, $dummy) = split(/\&/,$priv_item);
+        if (exists($role_s{$priv})) {
+            $return_script .= "document.form1.$priv"."_s.checked = true;\n";
+        } else {
+            $return_script .= "document.form1.$priv"."_s.checked = false;\n";
+        }
+    }
+    $return_script .= '}'."\n";
+    return ($return_script);
+}
+# ----------------------------------------------------------
+sub make_button_code {
+    my ($role) = @_;
+    my $label = &Apache::lonnet::plaintext($role);
+    my $button_code = '<input type="button" onClick="set_'.$role.'()" value="'.$label.'" />';    
+    return ($button_code);
+}
 # ---------------------------------------------------------- Call to definerole
 sub set_custom_role {
     my ($r) = @_;