--- loncom/interface/loncreateuser.pm 2007/12/11 02:27:24 1.206 +++ loncom/interface/loncreateuser.pm 2007/12/21 05:40:43 1.212 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Create a user # -# $Id: loncreateuser.pm,v 1.206 2007/12/11 02:27:24 raeburn Exp $ +# $Id: loncreateuser.pm,v 1.212 2007/12/21 05:40:43 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -115,15 +115,6 @@ sub auth_abbrev { return %abv_auth; } -# ==================================================== Figure out author access - -sub authorpriv { - my ($auname,$audom)=@_; - unless ((&Apache::lonnet::allowed('cca',$audom.'/'.$auname)) - || (&Apache::lonnet::allowed('caa',$audom.'/'.$auname))) { return ''; } - return 1; -} - # ==================================================== sub portfolio_quota { @@ -209,12 +200,14 @@ END_SCRIPT # =================================================================== Phase one sub print_username_entry_form { - my ($r,$response,$srch,$forcenewuser) = @_; + my ($r,$context,$response,$srch,$forcenewuser) = @_; my $defdom=$env{'request.role.domain'}; my $formtoset = 'crtuser'; if (exists($env{'form.startrolename'})) { $formtoset = 'docustom'; $env{'form.rolename'} = $env{'form.startrolename'}; + } elsif ($env{'form.origform'} eq 'crtusername') { + $formtoset = $env{'form.origform'}; } my ($jsback,$elements) = &crumb_utilities(); @@ -252,7 +245,7 @@ sub print_username_entry_form { 'ecrp' => "Edit Custom Role Privileges", 'nr' => "Name of Role", 'cre' => "Custom Role Editor", - 'mod' => "to add/modify roles", + 'mod' => "to edit user information or add/modify roles", ); my $help = &Apache::loncommon::help_open_menu(undef,undef,282,'Instructor Interface'); my $helpsiur=&Apache::loncommon::help_open_topic('Course_Change_Privileges'); @@ -266,7 +259,7 @@ sub print_username_entry_form { $r->print("

$lt{'srch'} $sellink $lt{'mod'}$helpsiur

$response"); - $r->print(&entry_form($defdom,$srch,$forcenewuser)); + $r->print(&entry_form($defdom,$srch,$forcenewuser,$context)); } elsif ($env{'form.action'} eq 'custom') { if (&Apache::lonnet::allowed('mcr','/')) { $r->print(< $userpicker +ENDBLOCK + if ($cancreate && $env{'form.phase'} eq '') { + my $defdom=$env{'request.role.domain'}; + my $domform = &Apache::loncommon::select_dom_form($defdom,'srchdomain'); + my $helpcrt=&Apache::loncommon::help_open_topic('Course_Change_Privileges'); + my %lt=&Apache::lonlocal::texthash( + 'crnu' => 'Create a new user', + 'usr' => 'Username', + 'dom' => 'in domain', + 'cra' => 'Create user', + ); + $output .= <<"ENDDOCUMENT"; +
+ + + + + + + +

$lt{crnu}$helpcrt

+ + + + + + + +
$lt{'usr'}: $lt{'dom'}:$domform 
+
ENDDOCUMENT + } return $output; } @@ -329,7 +358,7 @@ END # =================================================================== Phase two sub print_user_selection_page { - my ($r,$response,$srch,$srch_results,$operation,$srcharray) = @_; + my ($r,$response,$srch,$srch_results,$operation,$srcharray,$context) = @_; my @fields = ('username','domain','lastname','firstname','permanentemail'); my $sortby = $env{'form.sortby'}; @@ -374,7 +403,7 @@ ENDSCRIPT faq=>282,bug=>'Instructor Interface',}); $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management')); $r->print("$lt{'usrch'}
"); - $r->print(&entry_form($srch->{'srchdomain'},$srch)); + $r->print(&entry_form($srch->{'srchdomain'},$srch,undef,$context)); $r->print('

'.$lt{'usel'}.'

'); } else { $r->print($jscript."$lt{'stusrch'}
"); @@ -446,7 +475,7 @@ sub print_user_modification_page { my ($r,$ccuname,$ccdomain,$srch,$response,$context) = @_; if (($ccuname eq '') || ($ccdomain eq '')) { my $usermsg = &mt('No username and/or domain provided.'); - &print_username_entry_form($r,$usermsg); + &print_username_entry_form($r,$context,$usermsg); return; } my %abv_auth = &auth_abbrev(); @@ -474,7 +503,7 @@ sub print_user_modification_page { $domdesc,$curr_rules{$ccdomain}{'username'}, 'username'); } - &print_username_entry_form($r,$userchkmsg); + &print_username_entry_form($r,$context,$userchkmsg); return; } } @@ -709,8 +738,8 @@ $loginscript ENDTITLE $r->print('
'); my $personal_table = - &personal_data_display($ccuname,$ccdomain,$newuser, - $context,%inst_results); + &personal_data_display($ccuname,$ccdomain,$newuser,$context, + $inst_results{$ccuname.':'.$ccdomain}); $r->print($personal_table); my ($home_server_pick,$numlib) = &Apache::loncommon::home_server_form_item($ccdomain,'hserver', @@ -790,8 +819,8 @@ $forminfo ENDCHANGEUSER $r->print('
'); my ($personal_table,$showforceid) = - &personal_data_display($ccuname,$ccdomain,$newuser, - $context,%inst_results); + &personal_data_display($ccuname,$ccdomain,$newuser,$context, + $inst_results{$ccuname.':'.$ccdomain}); $r->print($personal_table); if ($showforceid) { $r->print(&Apache::lonuserutils::forceid_change($context)); @@ -932,7 +961,7 @@ ENDNOPORTPRIV } if (($role_code eq 'ca') || ($role_code eq 'aa')) { $area=~m{/($match_domain)/($match_username)}; - if (&authorpriv($2,$1)) { + if (&Apache::lonuserutils::authorpriv($2,$1)) { $allowed=1; } else { $allowed=0; @@ -1025,7 +1054,8 @@ ENDNOPORTPRIV # # Co-Author # - if (&authorpriv($env{'user.name'},$env{'request.role.domain'}) && + if (&Apache::lonuserutils::authorpriv($env{'user.name'}, + $env{'request.role.domain'}) && ($env{'user.name'} ne $ccuname || $env{'user.domain'} ne $ccdomain)) { # No sense in assigning co-author role to yourself $addrolesdisplay = 1; @@ -1076,7 +1106,8 @@ ENDNOPORTPRIV &Apache::loncommon::end_data_table_row()."\n". &Apache::loncommon::end_data_table()); } elsif ($env{'request.role'} =~ /^au\./) { - if (!(&authorpriv($env{'user.name'},$env{'request.role.domain'}))) { + if (!(&Apache::lonuserutils::authorpriv($env{'user.name'}, + $env{'request.role.domain'}))) { $r->print(''. &mt('You do not have privileges to assign co-author roles.'). ''); @@ -1322,7 +1353,7 @@ sub modify_login_block { } sub personal_data_display { - my ($ccuname,$ccdomain,$newuser,$context,%inst_results) = @_; + my ($ccuname,$ccdomain,$newuser,$context,$inst_results) = @_; my ($output,$showforceid,%userenv,%domconfig); if (!$newuser) { # Get the users information @@ -1363,8 +1394,12 @@ sub personal_data_display { } $output .= &Apache::lonhtmlcommon::row_title($rowtitle,undef,'LC_oddrow_value')."\n"; if ($newuser) { - if ($inst_results{$item} ne '') { - $output .= ''.$inst_results{$item}; + if (ref($inst_results) eq 'HASH') { + if ($inst_results->{$item} ne '') { + $output .= ''.$inst_results->{$item}; + } else { + $output .= ''; + } } else { $output .= ''; } @@ -1710,8 +1745,10 @@ sub update_user_data { # Strip leading and trailing whitespace $env{'form.c'.$item} =~ s/(\s+$|^\s+)//g; if (!$canmodify) { - if ($env{'form.c'.$item} ne $userenv{$item}) { - push(@mod_disallowed,$item); + if (defined($env{'form.c'.$item})) { + if ($env{'form.c'.$item} ne $userenv{$item}) { + push(@mod_disallowed,$item); + } } $env{'form.c'.$item} = $userenv{$item}; } @@ -1943,7 +1980,14 @@ END foreach my $field (@mod_disallowed) { $r->print('
  • '.$fieldtitles{$field}.'
  • '."\n"); } - $r->print(''.&mt("You do not have the authority to change these fields given the user's current set of active/future [_1] roles: [_2].",$contextname,$rolestr).'
    '.&mt('Contact your helpdesk for more information.',"javascript:helpMenu('display')").'
    '); + $r->print(''); + if (@mod_disallowed == 1) { + $r->print(&mt("You do not have the authority to change this field given the user's current set of active/future [_1] roles:",$contextname)); + } else { + $r->print(&mt("You do not have the authority to change these fields given the user's current set of active/future [_1] roles:",$contextname)); + } + $r->print(''.$rolestr.'
    '. + &mt('Contact your helpdesk for more information.',"javascript:helpMenu('display')").'
    '); } $r->print($no_forceid_alert. &Apache::lonuserutils::print_namespacing_alerts($env{'form.ccdomain'},\%alerts, \%curr_rules)); @@ -2198,6 +2242,9 @@ sub update_result_form { foreach my $item ('srchby','srchin','srchtype','srchterm','srchdomain','ccuname','ccdomain') { $outcome .= ''."\n"; } + if ($env{'form.origname'} ne '') { + $outcome .= ''."\n"; + } foreach my $item ('sortby','seluname','seludom') { if (exists($env{'form.'.$item})) { $outcome .= ''."\n"; @@ -2568,7 +2615,8 @@ sub handler { ({href=>"/adm/createuser", text=>"User Management"}); } - my ($permission,$allowed) = &get_permission($context); + my ($permission,$allowed) = + &Apache::lonuserutils::get_permission($context); if (!$allowed) { $env{'user.error.msg'}= "/adm/createuser:cst:0:0:Cannot create/modify user data ". @@ -2583,7 +2631,7 @@ sub handler { if (! exists($env{'form.action'})) { $r->print(&header()); $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management')); - $r->print(&print_main_menu($permission)); + $r->print(&print_main_menu($permission,$context)); $r->print(&Apache::loncommon::end_page()); } elsif ($env{'form.action'} eq 'upload' && $permission->{'cusr'}) { $r->print(&header()); @@ -2607,21 +2655,6 @@ sub handler { &Apache::lonuserutils::print_first_users_upload_form($r,$context); } $r->print(''.&Apache::loncommon::end_page()); - } elsif ($env{'form.action'} eq 'expire' && $permission->{'cusr'}) { - $r->print(&header()); - &Apache::lonhtmlcommon::add_breadcrumb - ({href=>'/adm/createuser?action=expire', - text=>"Expire User Roles"}); - $r->print(&Apache::lonhtmlcommon::breadcrumbs('Expire User Roles', - 'User_Management_Drops')); - if (! exists($env{'form.state'})) { - &Apache::lonuserutils::print_expire_menu($r,$context); - } elsif ($env{'form.state'} eq 'done') { - &Apache::lonuserutils::expire_user_list($r,$context); - } else { - &Apache::lonuserutils::print_expire_menu($r,$context); - } - $r->print(&Apache::loncommon::end_page()); } elsif ($env{'form.action'} eq 'singleuser' && $permission->{'cusr'}) { my $phase = $env{'form.phase'}; my @search = ('srchterm','srchby','srchin','srchtype','srchdomain'); @@ -2631,8 +2664,20 @@ sub handler { $srch->{$item} = $env{'form.'.$item}; } - if (($phase eq 'get_user_info') || ($phase eq 'userpicked')) { - if ($env{'form.phase'} eq 'get_user_info') { + if (($phase eq 'get_user_info') || ($phase eq 'userpicked') || + ($phase eq 'createnewuser')) { + if ($env{'form.phase'} eq 'createnewuser') { + my $response; + if ($env{'form.srchterm'} !~ /^$match_username$/) { + my $response = &mt('You must specify a valid username. Only the following are allowed: letters numbers - . @'); + &print_username_entry_form($r,$context,$response,$srch); + } else { + my $ccuname =&LONCAPA::clean_username($srch->{'srchterm'}); + my $ccdomain=&LONCAPA::clean_domain($srch->{'srchdomain'}); + &print_user_modification_page($r,$ccuname,$ccdomain, + $srch,$response,$context); + } + } elsif ($env{'form.phase'} eq 'get_user_info') { my ($currstate,$response,$forcenewuser,$results) = &user_search_result($srch); if ($env{'form.currstate'} eq 'modify') { @@ -2640,7 +2685,7 @@ sub handler { } if ($currstate eq 'select') { &print_user_selection_page($r,$response,$srch,$results, - 'createuser',\@search); + 'createuser',\@search,$context); } elsif ($currstate eq 'modify') { my ($ccuname,$ccdomain); if (($srch->{'srchby'} eq 'uname') && @@ -2661,7 +2706,7 @@ sub handler { } elsif ($currstate eq 'query') { &print_user_query_page($r,'createuser'); } else { - &print_username_entry_form($r,$response,$srch, + &print_username_entry_form($r,$context,$response,$srch, $forcenewuser); } } elsif ($env{'form.phase'} eq 'userpicked') { @@ -2673,7 +2718,7 @@ sub handler { } elsif ($env{'form.phase'} eq 'update_user_data') { &update_user_data($r,$context); } else { - &print_username_entry_form($r,undef,$srch); + &print_username_entry_form($r,$context,undef,$srch); } } elsif ($env{'form.action'} eq 'custom' && $permission->{'custom'}) { if ($env{'form.phase'} eq 'set_custom_roles') { @@ -2681,7 +2726,8 @@ sub handler { } else { &custom_role_editor($r); } - } elsif ($env{'form.action'} eq 'listusers' && $permission->{'view'}) { + } elsif (($env{'form.action'} eq 'listusers') && + ($permission->{'view'} || $permission->{'cusr'})) { if ($env{'form.phase'} eq 'bulkchange') { &Apache::lonhtmlcommon::add_breadcrumb ({href=>'backPage(document.studentform)', @@ -2722,21 +2768,6 @@ sub handler { $formname,$totcodes,$codetitles,$idlist,$idlist_titles); $r->print(&Apache::loncommon::end_page()); } - } elsif ($env{'form.action'} eq 'expire' && $permission->{'cusr'}) { - $r->print(&header()); - &Apache::lonhtmlcommon::add_breadcrumb - ({href=>'/adm/createuser?action=drop', - text=>"Expire Users"}); - $r->print(&Apache::lonhtmlcommon::breadcrumbs('Expire User Roles', - 'User_Management_Drops')); - if (! exists($env{'form.state'})) { - &Apache::lonuserutils::print_expire_menu($r,$context); - } elsif ($env{'form.state'} eq 'done') { - &Apache::lonuserutiles::expire_user_list($r,$context); - } else { - &print_expire_menu($r,$context); - } - $r->print(&Apache::loncommon::end_page()); } elsif ($env{'form.action'} eq 'dateselect') { if ($permission->{'cusr'}) { $r->print(&header(undef,undef,{'no_nav_bar' => 1}). @@ -2750,7 +2781,7 @@ sub handler { } else { $r->print(&header()); $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management')); - $r->print(&print_main_menu($permission)); + $r->print(&print_main_menu($permission,$context)); $r->print(&Apache::loncommon::end_page()); } return OK; @@ -2790,35 +2821,68 @@ END ############################################################### # Menu Phase One sub print_main_menu { - my ($permission) = @_; + my ($permission,$context) = @_; + my %links = ( + domain => { + upload => 'Upload a File of Users', + singleuser => 'Add/Manage a Single User', + listusers => 'Manage Multiple Users', + }, + author => { + upload => 'Upload a File of Co-authors', + singleuser => 'Add/Manage a Single Co-author', + listusers => 'Display Co-authors and Manage Multiple Users', + }, + course => { + upload => 'Upload a File of Course Users', + singleuser => 'Add/Manage a Single Course User', + listusers => 'Display Class Lists and Manage Multiple Users', + }, + ); my @menu = ( - { text => 'Upload a File of Users to Modify/Create Users and/or Add roles', + { text => $links{$context}{'upload'}, help => 'User_Management_Upload', action => 'upload', permission => $permission->{'cusr'}, }, - { text => 'Create User/Set User Roles for a single user', + { text => $links{$context}{'singleuser'}, help => 'User_Management_Single_User', action => 'singleuser', permission => $permission->{'cusr'}, }, - { text => 'Display Lists of Users', + { text => $links{$context}{'listusers'}, help => 'User_Management_List', action => 'listusers', - permission => $permission->{'view'}, - }, -# { text => 'Expire User Roles', -# help => 'User_Management_Drops', -# action => 'expire', -# permission => $permission->{'cusr'}, -# }, - { text => 'Edit Custom Roles', - help => 'Custom_Role_Edit', - action => 'custom', - permission => $permission->{'custom'}, + permission => ($permission->{'view'} || $permission->{'cusr'}), }, ); + if ($context eq 'domain' || $context eq 'course') { + my $customlink = { text => 'Edit Custom Roles', + help => 'Custom_Role_Edit', + action => 'custom', + permission => $permission->{'custom'}, + }; + push(@menu,$customlink); + } + if ($context eq 'course') { + my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; + my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + my @courselinks = + ( + { text => 'Automated Enrollment Manager', + permission => (&Apache::lonnet::auto_run($cnum,$cdom) + && $permission->{'cusr'}), + url => '/adm/populate', + }, + { text => 'Manage Course Groups', + help => 'Course_Manage_Group', + permission => $permission->{'grp_manage'}, + url => '/adm/coursegroups?refpage=cusr', + }, + ); + push(@menu,@courselinks); + } my $menu_html = ''; foreach my $menu_item (@menu) { next if (! $menu_item->{'permission'}); @@ -2840,57 +2904,6 @@ sub print_main_menu { return $menu_html; } -sub get_permission { - my ($context) = @_; - my %permission; - if ($context eq 'course') { - if ((&Apache::lonnet::allowed('cta',$env{'request.course.id'})) || - (&Apache::lonnet::allowed('cin',$env{'request.course.id'})) || - (&Apache::lonnet::allowed('ccr',$env{'request.course.id'})) || - (&Apache::lonnet::allowed('cep',$env{'request.course.id'})) || - (&Apache::lonnet::allowed('cst',$env{'request.course.id'}))) { - $permission{'cusr'} = 1; - $permission{'view'} = - &Apache::lonnet::allowed('vcl',$env{'request.course.id'}); - - } - if (&Apache::lonnet::allowed('ccr',$env{'request.course.id'})) { - $permission{'custom'} = 1; - } - if (&Apache::lonnet::allowed('vcl',$env{'request.course.id'})) { - $permission{'view'} = 1; - if (!$permission{'view'}) { - my $scope = $env{'request.course.id'}.'/'.$env{'request.course.sec'}; - $permission{'view'} = &Apache::lonnet::allowed('vcl',$scope); - if ($permission{'view'}) { - $permission{'view_section'} = $env{'request.course.sec'}; - } - } - } - } elsif ($context eq 'author') { - $permission{'cusr'} = &authorpriv($env{'user.name'},$env{'request.role.domain'}); - $permission{'view'} = $permission{'cusr'}; - } else { - if ((&Apache::lonnet::allowed('cad',$env{'request.role.domain'})) || - (&Apache::lonnet::allowed('cli',$env{'request.role.domain'})) || - (&Apache::lonnet::allowed('cau',$env{'request.role.domain'})) || - (&Apache::lonnet::allowed('csc',$env{'request.role.domain'})) || - (&Apache::lonnet::allowed('cdg',$env{'request.role.domain'})) || - (&Apache::lonnet::allowed('mau',$env{'request.role.domain'}))) { - $permission{'cusr'} = 1; - } - if (&Apache::lonnet::allowed('ccr',$env{'request.role.domain'})) { - $permission{'custom'} = 1; - } - $permission{'view'} = $permission{'cusr'}; - } - my $allowed = 0; - foreach my $perm (values(%permission)) { - if ($perm) { $allowed=1; last; } - } - return (\%permission,$allowed); -} - sub restore_prev_selections { my %saveable_parameters = ('srchby' => 'scalar', 'srchin' => 'scalar', @@ -3293,6 +3306,10 @@ sub crumb_utilities { srchtype => 'selectbox', srchdomain => 'selectbox', }, + crtusername => { + srchterm => 'text', + srchdomain => 'selectbox', + }, docustom => { rolename => 'selectbox', newrolename => 'textbox', @@ -3308,8 +3325,18 @@ sub crumb_utilities { my $jsback .= qq| function backPage(formname,prevphase,prevstate) { - formname.phase.value = prevphase; - formname.currstate.value = prevstate; + if (typeof prevphase == 'undefined') { + formname.phase.value = ''; + } + else { + formname.phase.value = prevphase; + } + if (typeof prevstate == 'undefined') { + formname.currstate.value = ''; + } + else { + formname.currstate.value = prevstate; + } formname.submit(); } |;