--- loncom/interface/loncreateuser.pm 2003/06/19 21:46:38 1.55 +++ loncom/interface/loncreateuser.pm 2003/07/18 13:45:14 1.60 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Create a user # -# $Id: loncreateuser.pm,v 1.55 2003/06/19 21:46:38 www Exp $ +# $Id: loncreateuser.pm,v 1.60 2003/07/18 13:45:14 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -46,7 +46,7 @@ # 05/10,10/16 Gerd Kortemeyer # 02/11/02 Matthew Hall # -# $Id: loncreateuser.pm,v 1.55 2003/06/19 21:46:38 www Exp $ +# $Id: loncreateuser.pm,v 1.60 2003/07/18 13:45:14 www Exp $ ### package Apache::loncreateuser; @@ -83,6 +83,18 @@ BEGIN { } +# ======================================================= Existing Custom Roles + +sub my_custom_roles { + my %returnhash=(); + my %rolehash=&Apache::lonnet::dump('roles'); + foreach (keys %rolehash) { + if ($_=~/^rolesdef\_(\w+)$/) { + $returnhash{$_}=$_; + } + } + return %returnhash; +} # ==================================================== Figure out author access @@ -107,6 +119,9 @@ sub print_username_entry_form { my $selscript=&Apache::loncommon::studentbrowser_javascript(); my $sellink=&Apache::loncommon::selectstudent_link ('crtuser','ccuname','ccdomain'); + my %existingroles=&my_custom_roles(); + my $choice=&Apache::loncommon::select_form('make new role','rolename', + ('make new role' => 'Generate new role ...',%existingroles)); $r->print(<<"ENDDOCUMENT"); <html> <head> @@ -116,15 +131,19 @@ $selscript $bodytag <form action="/adm/createuser" method="post" name="crtuser"> <input type="hidden" name="phase" value="get_user_info"> -<p> +<h2>Set Individual User Roles</h2> <table> <tr><td>Username:</td><td><input type="text" size="15" name="ccuname"> </td><td rowspan="2">$sellink</td></tr><tr><td> Domain:</td><td>$domform</td></tr> -</table> -</p> -<input type="submit" value="Continue"> +</table> +<input name="userrole" type="submit" value="User Roles" /> </form> +<form action="/adm/createuser" method="post" name="docustom"> +<input type="hidden" name="phase" value="selected_custom_edit"> +<h2>Edit Custom Role Privileges</h2> +Name of Role: $choice <input type="text" size="15" name="newrolename" /><br /> +<input name="customeditor" type="submit" value="Custom Role Editor" /> </body> </html> ENDDOCUMENT @@ -136,6 +155,14 @@ sub print_user_modification_page { my $ccuname=$ENV{'form.ccuname'}; my $ccdomain=$ENV{'form.ccdomain'}; + $ccuname=~s/\W//gs; + $ccdomain=~s/\W//gs; + + unless (($ccuname) && ($ccdomain)) { + &print_username_entry_form($r); + return; + } + my $defdom=$ENV{'request.role.domain'}; my ($krbdef,$krbdefdom) = @@ -237,7 +264,7 @@ ENDNEWUSER $dochead <h1>Change User Privileges</h1> $forminfo -<h2>User "$ccuname" in domain $ccdomain </h2> +<h2>User "$ccuname" in domain "$ccdomain"</h2> ENDCHANGEUSER # Get the users information my %userenv = &Apache::lonnet::get('environment', @@ -286,12 +313,15 @@ END my $allowed=0; my $delallowed=0; if ($area =~ /^\/(\w+)\/(\d\w+)/ ) { + my ($coursedom,$coursedir) = ($1,$2); + # $1.'_'.$2 is the course id (eg. 103_12345abcef103l3). my %coursedata= &Apache::lonnet::coursedescription($1.'_'.$2); my $carea; if (defined($coursedata{'description'})) { $carea='Course: '.$coursedata{'description'}. - '<br />Domain: '.$1; + '<br />Domain: '.$coursedom.(' 'x8). + &Apache::loncommon::syllabuswrapper('Syllabus',$coursedir,$coursedom); } else { $carea='Unavailable course: '.$area; } @@ -345,7 +375,11 @@ END if (($active) && ($allowed)) { $row.= '<input type="checkbox" name="rev:'.$thisrole.'">'; } else { - $row.=' '; + if ($active) { + $row.=' '; + } else { + $row.='expired or revoked'; + } } $row.='</td><td>'; if ($delallowed) { @@ -724,20 +758,20 @@ END # Revoke roles if ($_=~/^form\.rev/) { if ($_=~/^form\.rev\:([^\_]+)\_([^\_]+)$/) { - $r->print('Revoking '.$2.' in '.$1.': '. + $r->print('Revoking '.$2.' in '.$1.': <b>'. &Apache::lonnet::assignrole($ENV{'form.ccdomain'}, - $ENV{'form.ccuname'},$1,$2,$now).'<br>'); + $ENV{'form.ccuname'},$1,$2,$now).'</b><br>'); if ($2 eq 'st') { $1=~/^\/(\w+)\/(\w+)/; my $cid=$1.'_'.$2; - $r->print('Drop from classlist: '. + $r->print('Drop from classlist: <b>'. &Apache::lonnet::critical('put:'. $ENV{'course.'.$cid.'.domain'}.':'. $ENV{'course.'.$cid.'.num'}.':classlist:'. &Apache::lonnet::escape($ENV{'form.ccuname'}.':'. $ENV{'form.ccdomain'}).'='. &Apache::lonnet::escape($now.':'), - $ENV{'course.'.$cid.'.home'}).'<br>'); + $ENV{'course.'.$cid.'.home'}).'</b><br>'); } } } elsif ($_=~/^form\.del/) { @@ -748,14 +782,14 @@ END if ($2 eq 'st') { $1=~/^\/(\w+)\/(\w+)/; my $cid=$1.'_'.$2; - $r->print('Drop from classlist: '. + $r->print('Drop from classlist: <b>'. &Apache::lonnet::critical('put:'. $ENV{'course.'.$cid.'.domain'}.':'. $ENV{'course.'.$cid.'.num'}.':classlist:'. &Apache::lonnet::escape($ENV{'form.ccuname'}.':'. $ENV{'form.ccdomain'}).'='. &Apache::lonnet::escape($now.':'), - $ENV{'course.'.$cid.'.home'}).'<br>'); + $ENV{'course.'.$cid.'.home'}).'</b><br>'); } } } elsif ($_=~/^form\.act/) { @@ -776,16 +810,16 @@ END # Assign the role and report it $r->print('Assigning: '.$3.' in '.$url. ($start?', starting '.localtime($start):''). - ($end?', ending '.localtime($end):'').': '. + ($end?', ending '.localtime($end):'').': <b>'. &Apache::lonnet::assignrole( $ENV{'form.ccdomain'},$ENV{'form.ccuname'}, $url,$3,$end,$start). - '<br>'); + '</b><br>'); # Handle students differently if ($3 eq 'st') { $url=~/^\/(\w+)\/(\w+)/; my $cid=$1.'_'.$2; - $r->print('Add to classlist: '. + $r->print('Add to classlist: <b>'. &Apache::lonnet::critical( 'put:'.$ENV{'course.'.$cid.'.domain'}.':'. $ENV{'course.'.$cid.'.num'}.':classlist:'. @@ -794,7 +828,7 @@ END $ENV{'form.ccdomain'} ).'='. &Apache::lonnet::escape($end.':'.$start), $ENV{'course.'.$cid.'.home'}) - .'<br>'); + .'</b><br>'); } } elsif ($_=~/^form\.act\_([^\_]+)\_([^\_]+)$/) { # Activate roles for sections with two id numbers @@ -808,16 +842,72 @@ END my $url='/'.$1.'/'; # Assign the role and report it. $r->print('Assigning: '.$2.' in '.$url.': '. + ($start?', starting '.localtime($start):''). + ($end?', ending '.localtime($end):'').': <b>'. &Apache::lonnet::assignrole( $ENV{'form.ccdomain'},$ENV{'form.ccuname'}, $url,$2,$end,$start) - .'<br>'); + .'</b><br>'); } } } # End of foreach (keys(%ENV)) $r->print('</body></html>'); } +# ========================================================== Custom Role Editor + +sub custom_role_editor { + my $r=shift; + my $rolename=$ENV{'form.rolename'}; + + if ($rolename eq 'make new role') { + $rolename=$ENV{'form.newrolename'}; + } + + $rolename=~s/\W//gs; + + unless ($rolename) { + &print_username_entry_form($r); + return; + } + + $r->print(&Apache::loncommon::bodytag( + 'Create Users, Change User Privileges').'<h2>'); + my ($rdummy,$roledef)= + &Apache::lonnet::get('roles',["rolesdef_$rolename"]); +# ------------------------------------------------------- Does this role exist? + if (($rdummy ne 'con_lost') && ($roledef ne '')) { + $r->print('Existing Role "'); + } else { + $r->print('New Role "'); + $roledef=''; + } + $r->print($rolename.'"</h2>'); +# ------------------------------------------------------- What can be assigned? + my %full=(); + my %courselevel=(); + foreach (split(/\:/,$Apache::lonnet::pr{'cr:c'})) { + my ($priv,$restrict)=split(/\&/,$_); + unless ($restrict) { $restrict='F'; } + $courselevel{$priv}=$restrict; + $full{$priv}=1; + } + my %domainlevel=(); + foreach (split(/\:/,$Apache::lonnet::pr{'cr:d'})) { + my ($priv,$restrict)=split(/\&/,$_); + unless ($restrict) { $restrict='F'; } + $domainlevel{$priv}=$restrict; + $full{$priv}=1; + } + $r->print('<table border="2"><tr><th>Privilege</th><th>Course Level</th><th>Domain Level</th></tr>'); + foreach (sort keys %full) { + $r->print('<tr><td>'.&Apache::lonnet::plaintext($_).'</td><td>'. + $courselevel{$_}.'</td><td>'.$domainlevel{$_}.'</td></tr>'); + } + $r->print('</table>'); + $r->print('Not yet implemented.'); +} + # ================================================================ Main Handler sub handler { my $r = shift; @@ -843,6 +933,8 @@ sub handler { &print_user_modification_page($r); } elsif ($ENV{'form.phase'} eq 'update_user_data') { &update_user_data($r); + } elsif ($ENV{'form.phase'} eq 'selected_custom_edit') { + &custom_role_editor($r); } } else { $ENV{'user.error.msg'}=