--- loncom/interface/loncreateuser.pm	2007/06/07 22:34:56	1.151
+++ loncom/interface/loncreateuser.pm	2007/07/20 23:55:12	1.158
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Create a user
 #
-# $Id: loncreateuser.pm,v 1.151 2007/06/07 22:34:56 albertel Exp $
+# $Id: loncreateuser.pm,v 1.158 2007/07/20 23:55:12 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -65,7 +65,6 @@ use Apache::lonnet;
 use Apache::loncommon;
 use Apache::lonlocal;
 use Apache::longroup;
-use lib '/home/httpd/lib/perl/';
 use LONCAPA qw(:DEFAULT :match);
 
 my $loginscript; # piece of javascript used in two separate instances
@@ -222,10 +221,10 @@ sub print_username_entry_form {
     $r->print(<<"ENDDOCUMENT");
 $start_page
 <form action="/adm/createuser" method="post" name="crtuser">
-<input type="hidden" name="phase" value="get_user_info">
+<input type="hidden" name="phase" value="get_user_info" />
 <h2>$lt{siur}$helpsiur</h2>
 <table>
-<tr><td>$lt{usr}:</td><td><input type="text" size="15" name="ccuname">
+<tr><td>$lt{usr}:</td><td><input type="text" size="15" name="ccuname" />
 </td><td rowspan="2">$sellink</td></tr><tr><td>
 $lt{'dom'}:</td><td>$domform</td></tr>
 </table>
@@ -235,7 +234,7 @@ ENDDOCUMENT
    if (&Apache::lonnet::allowed('mcr','/')) {
        $r->print(<<ENDCUSTOM);
 <form action="/adm/createuser" method="post" name="docustom">
-<input type="hidden" name="phase" value="selected_custom_edit">
+<input type="hidden" name="phase" value="selected_custom_edit" />
 <h2>$lt{'ecrp'}$helpecpr</h2>
 $lt{'nr'}: $choice <input type="text" size="15" name="newrolename" /><br />
 <input name="customeditor" type="submit" value="$lt{'cre'}" />
@@ -429,9 +428,8 @@ ENDSCRIPT
             var checkcurr = str.match(re1);
             if (checkcurr != null) {
                 if (document.cu.elements[i-1].checked == true) {
-                    var re2 = /^currsec_[a-zA-Z0-9]+_[a-zA-Z0-9]+_(\\w+)\$/;
-                    match = re2.exec(str);
-                    var role = match[1];
+		    var match = str.split('_');
+                    var role = match[3];
                     if (role == 'cc') {
                         alert("Section designations do not apply to Course Coordinator roles.\\nA course coordinator role will be added with access to all sections.");
                     }
@@ -506,12 +504,12 @@ ENDSECCODE
 
     my $forminfo =<<"ENDFORMINFO";
 <form action="/adm/createuser" method="post" name="cu">
-<input type="hidden" name="phase"       value="update_user_data">
-<input type="hidden" name="ccuname"     value="$ccuname">
-<input type="hidden" name="ccdomain"    value="$ccdomain">
-<input type="hidden" name="pres_value"  value="" >
-<input type="hidden" name="pres_type"   value="" >
-<input type="hidden" name="pres_marker" value="" >
+<input type="hidden" name="phase"       value="update_user_data" />
+<input type="hidden" name="ccuname"     value="$ccuname" />
+<input type="hidden" name="ccdomain"    value="$ccdomain" />
+<input type="hidden" name="pres_value"  value="" />
+<input type="hidden" name="pres_type"   value="" />
+<input type="hidden" name="pres_marker" value="" />
 ENDFORMINFO
     my $uhome=&Apache::lonnet::homeserver($ccuname,$ccdomain);
     my %inccourses;
@@ -730,7 +728,7 @@ END
                my $active=1;
                $active=0 if (($role_end_time) && ($now>$role_end_time));
                if (($active) && ($allowed)) {
-                   $row.= '<input type="checkbox" name="rev:'.$thisrole.'">';
+                   $row.= '<input type="checkbox" name="rev:'.$thisrole.'" />';
                } else {
                    if ($active) {
                       $row.='&nbsp;';
@@ -740,13 +738,13 @@ END
                }
 	       $row.='</td><td>';
                if ($allowed && !$active) {
-                   $row.= '<input type="checkbox" name="ren:'.$thisrole.'">';
+                   $row.= '<input type="checkbox" name="ren:'.$thisrole.'" />';
                } else {
                    $row.='&nbsp;';
                }
 	       $row.='</td><td>';
                if ($delallowed) {
-                   $row.= '<input type="checkbox" name="del:'.$thisrole.'">';
+                   $row.= '<input type="checkbox" name="del:'.$thisrole.'" />';
                } else {
                    $row.='&nbsp;';
                }
@@ -999,13 +997,13 @@ ENDNOPRIV
                $num_domain_level ++;
                $domaintext .= 
 &Apache::loncommon::start_data_table_row().
-'<td><input type=checkbox name="act_'.$thisdomain.'_'.$role.'"></td>
+'<td><input type=checkbox name="act_'.$thisdomain.'_'.$role.'" /></td>
 <td>'.$plrole.'</td>
 <td>'.$thisdomain.'</td>
-<td><input type=hidden name="start_'.$thisdomain.'_'.$role.'" value="">
+<td><input type=hidden name="start_'.$thisdomain.'_'.$role.'" value="" />
 <a href=
 "javascript:pjump('."'date_start','Start Date $plrole',document.cu.start_$thisdomain\_$role.value,'start_$thisdomain\_$role','cu.pres','dateset'".')">'.$lt{'ssd'}.'</a></td>
-<td><input type=hidden name="end_'.$thisdomain.'_'.$role.'" value="">
+<td><input type=hidden name="end_'.$thisdomain.'_'.$role.'" value="" />
 <a href=
 "javascript:pjump('."'date_end','End Date $plrole',document.cu.end_$thisdomain\_$role.value,'end_$thisdomain\_$role','cu.pres','dateset'".')">'.$lt{'sed'}.'</a></td>'.
 &Apache::loncommon::end_data_table_row();
@@ -1022,10 +1020,10 @@ ENDNOPRIV
 
     if ($env{'request.role'} =~ m{^dc\./($match_domain)/$}) {
         $r->print(&course_level_dc($1,'Course'));
-        $r->print('<hr /><input type="button" value="'.&mt('Modify User').'" onClick="setCourse()">'."\n");
+        $r->print('<hr /><input type="button" value="'.&mt('Modify User').'" onClick="setCourse()" />'."\n");
     } else {
         $r->print(&course_level_table(%inccourses));
-        $r->print('<hr /><input type="button" value="'.&mt('Modify User').'" onClick="setSections()">'."\n");
+        $r->print('<hr /><input type="button" value="'.&mt('Modify User').'" onClick="setSections()" />'."\n");
     }
     $r->print("</form>".&Apache::loncommon::end_page());
 }
@@ -1611,43 +1609,29 @@ sub custom_role_editor {
 	&print_username_entry_form($r);
         return;
     }
-    my $head_script = <<END_SCRIPT;
-    <script type="text/javascript">
-    function setchecks() {
-        document.form1.bre_c.checked = false;
-    }
-    </script>
-END_SCRIPT
-    
-    $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 = ("st:c","st:d");
-    #foreach my $item (@roles) {
-    #    &Apache::lonnet::logthis(" roles for $item: ".$Apache::lonnet::pr{$item});
-    #}
-     
+    $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;
@@ -1678,12 +1662,26 @@ END_SCRIPT
 	}
 	$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('<form action=""><input type="button" onClick="setchecks()" value="Click" /></form>');
+    $r->print('Select a Template<br />');
+    $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" />
@@ -1710,10 +1708,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="'.&mt("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) = @_;
@@ -1862,7 +1931,7 @@ sub course_level_table {
 	    if (&Apache::lonnet::allowed('c'.$role,$thiscourse)) {
 		my $plrole=&Apache::lonnet::plaintext($role);
 		$table .= &Apache::loncommon::start_data_table_row().
-'<td><input type="checkbox" name="act_'.$protectedcourse.'_'.$role.'"></td>
+'<td><input type="checkbox" name="act_'.$protectedcourse.'_'.$role.'" /></td>
 <td>'.$plrole.'</td>
 <td>'.$area.'<br />Domain: '.$domain.'</td>'."\n";
 	        if ($role ne 'cc') {
@@ -1875,22 +1944,22 @@ sub course_level_table {
                         $currsec.'</td>'.
                      '<td>&nbsp;&nbsp;</td>'.
                      '<td valign="top">&nbsp;'.$lt{'new'}.'<br />'.
-                     '<input type="text" name="newsec_'.$protectedcourse.'_'.$role.'" value="" /></td>'.
+                     '<input type="text" name="newsec_'.$protectedcourse.'_'.$role.'" value="" />'.
                      '<input type="hidden" '.
-                     'name="sec_'.$protectedcourse.'_'.$role.'"></td>'.
+                     'name="sec_'.$protectedcourse.'_'.$role.'" /></td>'.
                      '</tr></table></td>';
                     } else {
                         $table .= '<td><input type="text" size="10" '.
-                     'name="sec_'.$protectedcourse.'_'.$role.'"></td>';
+                     'name="sec_'.$protectedcourse.'_'.$role.'" /></td>';
                     }
                 } else { 
 		    $table .= '<td>&nbsp</td>';
                 }
 		$table .= <<ENDTIMEENTRY;
-<td><input type=hidden name="start_$protectedcourse\_$role" value=''>
+<td><input type=hidden name="start_$protectedcourse\_$role" value='' />
 <a href=
 "javascript:pjump('date_start','Start Date $plrole',document.cu.start_$protectedcourse\_$role.value,'start_$protectedcourse\_$role','cu.pres','dateset')">$lt{'ssd'}</a></td>
-<td><input type=hidden name="end_$protectedcourse\_$role" value=''>
+<td><input type=hidden name="end_$protectedcourse\_$role" value='' />
 <a href=
 "javascript:pjump('date_end','End Date $plrole',document.cu.end_$protectedcourse\_$role.value,'end_$protectedcourse\_$role','cu.pres','dateset')">$lt{'sed'}</a></td>
 ENDTIMEENTRY
@@ -1903,7 +1972,7 @@ ENDTIMEENTRY
                 my $customrole=$protectedcourse.'_cr_cr_'.$env{'user.domain'}.
 		    '_'.$env{'user.name'}.'_'.$plrole;
 		$table .= &Apache::loncommon::start_data_table_row().
-'<td><input type="checkbox" name="act_'.$customrole.'"></td>
+'<td><input type="checkbox" name="act_'.$customrole.'" /></td>
 <td>'.$plrole.'</td>
 <td>'.$area.'</td>'."\n";
                 if (%sections_count) {
@@ -1916,17 +1985,17 @@ ENDTIMEENTRY
                    '<td valign="top">&nbsp;'.$lt{'new'}.'<br />'.
                    '<input type="text" name="newsec_'.$customrole.'" value="" /></td>'.
                    '<input type="hidden" '.
-                   'name="sec_'.$customrole.'"></td>'.
+                   'name="sec_'.$customrole.'" /></td>'.
                    '</tr></table></td>';
                 } else {
                     $table .= '<td><input type="text" size="10" '.
-                     'name="sec_'.$customrole.'"></td>';
+                     'name="sec_'.$customrole.'" /></td>';
                 }
                 $table .= <<ENDENTRY;
-<td><input type=hidden name="start_$customrole" value=''>
+<td><input type=hidden name="start_$customrole" value='' />
 <a href=
 "javascript:pjump('date_start','Start Date $plrole',document.cu.start_$customrole.value,'start_$customrole','cu.pres','dateset')">$lt{'ssd'}</a></td>
-<td><input type=hidden name="end_$customrole" value=''>
+<td><input type=hidden name="end_$customrole" value='' />
 <a href=
 "javascript:pjump('date_end','End Date $plrole',document.cu.end_$customrole.value,'end_$customrole','cu.pres','dateset')">$lt{'sed'}</a></td>
 ENDENTRY
@@ -1943,9 +2012,7 @@ ENDENTRY
 '<th>'.$lt{'act'}.'</th><th>'.$lt{'rol'}.'</th><th>'.$lt{'ext'}.'</th>
 <th>'.$lt{'grs'}.'</th><th>'.$lt{'sta'}.'</th><th>'.$lt{'end'}.'</th>'.
 &Apache::loncommon::end_data_table_header_row().
-&Apache::loncommon::start_data_table_row().
 $table.
-&Apache::loncommon::end_data_table_row().
 &Apache::loncommon::end_data_table();
     return $result;
 }
@@ -2020,10 +2087,10 @@ sub course_level_dc {
                      '<input type="hidden" name="groups" value="" /></td>'.
                      '</tr></table></td>';
     $otheritems .= <<ENDTIMEENTRY;
-<td><input type=hidden name="start" value=''>
+<td><input type=hidden name="start" value='' />
 <a href=
 "javascript:pjump('date_start','Start Date',document.cu.start.value,'start','cu.pres','dateset')">$lt{'ssd'}</a></td>
-<td><input type=hidden name="end" value=''>
+<td><input type=hidden name="end" value='' />
 <a href=
 "javascript:pjump('date_end','End Date',document.cu.end.value,'end','cu.pres','dateset')">$lt{'sed'}</a></td>
 ENDTIMEENTRY