--- loncom/interface/loncreateuser.pm 2006/03/19 22:15:46 1.110 +++ loncom/interface/loncreateuser.pm 2007/09/18 23:57:15 1.186 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Create a user # -# $Id: loncreateuser.pm,v 1.110 2006/03/19 22:15:46 albertel Exp $ +# $Id: loncreateuser.pm,v 1.186 2007/09/18 23:57:15 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -64,6 +64,8 @@ use Apache::Constants qw(:common :http); use Apache::lonnet; use Apache::loncommon; use Apache::lonlocal; +use Apache::longroup; +use LONCAPA qw(:DEFAULT :match); my $loginscript; # piece of javascript used in two separate instances my $generalrule; @@ -96,8 +98,8 @@ sub initialize_authen_forms { sub my_custom_roles { my %returnhash=(); my %rolehash=&Apache::lonnet::dump('roles'); - foreach (keys %rolehash) { - if ($_=~/^rolesdef\_(\w+)$/) { + foreach my $key (keys %rolehash) { + if ($key=~/^rolesdef\_(\w+)$/) { $returnhash{$1}=$1; } } @@ -113,51 +115,143 @@ sub authorpriv { return 1; } +# ==================================================== + +sub portfolio_quota { + my ($ccuname,$ccdomain) = @_; + my %lt = &Apache::lonlocal::texthash( + 'disk' => "Disk space allocated to user's portfolio files", + 'cuqu' => "Current quota", + 'cust' => "Custom quota", + 'defa' => "Default", + 'chqu' => "Change quota", + ); + my ($currquota,$quotatype,$inststatus,$defquota) = + &Apache::loncommon::get_user_quota($ccuname,$ccdomain); + my ($usertypes,$order) = &Apache::lonnet::retrieve_inst_usertypes($ccdomain); + my ($longinsttype,$showquota,$custom_on,$custom_off,$defaultinfo); + if ($inststatus ne '') { + if ($usertypes->{$inststatus} ne '') { + $longinsttype = $usertypes->{$inststatus}; + } + } + $custom_on = ' '; + $custom_off = ' checked="checked" '; + my $quota_javascript = <<"END_SCRIPT"; + +END_SCRIPT + if ($quotatype eq 'custom') { + $custom_on = $custom_off; + $custom_off = ' '; + $showquota = $currquota; + if ($longinsttype eq '') { + $defaultinfo = &mt('For this user, the default quota would be [_1] + Mb.',$defquota); + } else { + $defaultinfo = &mt("For this user, the default quota would be [_1] + Mb, as determined by the user's institutional + affiliation ([_2]).",$defquota,$longinsttype); + } + } else { + if ($longinsttype eq '') { + $defaultinfo = &mt('For this user, the default quota is [_1] + Mb.',$defquota); + } else { + $defaultinfo = &mt("For this user, the default quota of [_1] + Mb, is determined by the user's institutional + affiliation ([_2]).",$defquota,$longinsttype); + } + } + my $output = $quota_javascript. + '
$authformkrb
+$authformint
+$authformfsys
+$authformloc
+ENDAUTH + return $response; +} + # ================================================================= Phase Three sub update_user_data { - my $r=shift; + my ($r) = @_; my $uhome=&Apache::lonnet::homeserver($env{'form.ccuname'}, $env{'form.ccdomain'}); # Error messages @@ -882,15 +1320,41 @@ sub update_user_data { } else { $title='Modify User Privileges'; } - $r->print(&Apache::loncommon::start_page($title)); + + my ($jsback,$elements) = &crumb_utilities(); + my $jscript = ''."\n"; + + $r->print(&Apache::loncommon::start_page($title,$jscript)); + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"javascript:backPage(document.userupdate)", + text=>"User modify/custom role edit", + faq=>282,bug=>'Instructor Interface',}); + if ($env{'form.prevphase'} eq 'userpicked') { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"javascript:backPage(document.userupdate,'get_user_info','select')", + text=>"Select a user", + faq=>282,bug=>'Instructor Interface',}); + } + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"javascript:backPage(document.userupdate,'$env{'form.prevphase'}','modify')", + text=>"Set user role", + faq=>282,bug=>'Instructor Interface',}, + {href=>"/adm/createuser", + text=>"Result", + faq=>282,bug=>'Instructor Interface',}); + $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management')); + + my %disallowed; # Check Inputs if (! $env{'form.ccuname'} ) { $r->print($error.&mt('No login name specified').'.'.$end); return; } - if ( $env{'form.ccuname'} =~/\W/) { + if ( $env{'form.ccuname'} ne + &LONCAPA::clean_username($env{'form.ccuname'}) ) { $r->print($error.&mt('Invalid login name').'. '. - &mt('Only letters, numbers, and underscores are valid').'.'. + &mt('Only letters, numbers, periods, dashes, @, and underscores are valid').'.'. $end); return; } @@ -898,9 +1362,10 @@ sub update_user_data { $r->print($error.&mt('No domain specified').'.'.$end); return; } - if ( $env{'form.ccdomain'} =~/\W/) { + if ( $env{'form.ccdomain'} ne + &LONCAPA::clean_domain($env{'form.ccdomain'}) ) { $r->print($error.&mt ('Invalid domain name').'. '. - &mt('Only letters, numbers, and underscores are valid').'.'. + &mt('Only letters, numbers, periods, dashes, and underscores are valid').'.'. $end); return; } @@ -940,15 +1405,13 @@ sub update_user_data { $r->print($error.&mt('Invalid login mode or password').$end); return; } + + + $r->print(''.&mt('ERROR').': '.&mt('Unknown command').' '.$_.'
'.&mt('ERROR').': '.&mt('Unknown command').' '.$key.'
'.&mt('[_1] may not be used as the name for a section, as it is a reserved word.',$key)); + } else { + $r->print('
'.&mt('[_1] may not be used as the name for a section, as it is the name of a course group.',$key)); + } + $r->print(' '.&mt('Please go back and choose a different section name.').'
'.&mt('Create/Modify Another User').'
'); + $r->print(''."\n"); + foreach my $item ('srchby','srchin','srchtype','srchterm','srchdomain','ccuname','ccdomain') { + $r->print(''."\n"); + } + foreach my $item ('sortby','seluname','seludom') { + if (exists($env{'form.'.$item})) { + $r->print(''."\n"); + } + } + $r->print(''."\n". + ''."\n". + ''); $r->print(&Apache::loncommon::end_page()); } -sub commit_customrole { - my ($udom,$uname,$url,$three,$four,$five,$start,$end) = @_; - my $output = &mt('Assigning custom role').' "'.$five.'" by '.$four.'@'.$three.' in '.$url. - ($start?', '.&mt('starting').' '.localtime($start):''). - ($end?', ending '.localtime($end):'').': '. - &Apache::lonnet::assigncustomrole( - $udom,$uname,$url,$three,$four,$five,$end,$start). - '