--- loncom/interface/loncreateuser.pm 2009/07/27 14:09:14 1.300 +++ loncom/interface/loncreateuser.pm 2009/08/06 20:40:59 1.305 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Create a user # -# $Id: loncreateuser.pm,v 1.300 2009/07/27 14:09:14 raeburn Exp $ +# $Id: loncreateuser.pm,v 1.305 2009/08/06 20:40:59 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -143,6 +143,7 @@ sub portfolio_quota { $custom_off = ' checked="checked" '; my $quota_javascript = <<"END_SCRIPT"; END_SCRIPT if ($quotatype eq 'custom') { @@ -246,13 +248,15 @@ sub build_tools_display { &Apache::lonnet::usertools_access($ccuname,$ccdomain,$item,undef, $context); if ($userenv{$context.'.'.$item} eq '') { - $custom_access = 'default'; + $custom_access = + &mt('Availability determined currently from default setting.'); if (!$curr_access) { $tool_off = 'checked="checked" '; $tool_on = ''; } } else { - $custom_access = 'custom'; + $custom_access = + &mt('Availability determined currently from custom setting.'); $cust_on = ' checked="checked" '; $cust_off = ''; if ($userenv{$context.'.'.$item} == 0) { @@ -264,8 +268,7 @@ sub build_tools_display { ' '.$lt{$item}.''."\n". ' '."\n". &Apache::loncommon::start_data_table_row()."\n". - ' '.&mt('Availability determined currently from [_1] setting.',$custom_access). - '     '.$lt{'avai'}.': '. + ' '.$custom_access.(' 'x5).$lt{'avai'}.': '. ($curr_access?&mt('Yes'):&mt('No')).''."\n". &Apache::loncommon::end_data_table_row()."\n". &Apache::loncommon::start_data_table_row()."\n". @@ -335,7 +338,9 @@ sub print_username_entry_form { my $jscript = &Apache::loncommon::studentbrowser_javascript()."\n". ''."\n"; my %loaditems = ( @@ -502,7 +507,7 @@ sub user_modification_js { return < - +// END } # =================================================================== Phase two sub print_user_selection_page { - my ($r,$response,$srch,$srch_results,$srcharray,$context) = @_; + my ($r,$response,$srch,$srch_results,$srcharray,$context,$opener_elements) = @_; my @fields = ('username','domain','lastname','firstname','permanentemail'); my $sortby = $env{'form.sortby'}; @@ -538,6 +543,7 @@ sub print_user_selection_page { my $jscript = (< +// ENDSCRIPT @@ -560,28 +567,32 @@ ENDSCRIPT 'firstname' => "first name", 'permanentemail' => "permanent e-mail", ); - $r->print(&Apache::loncommon::start_page('User Management',$jscript)); + if ($context eq 'requestcrs') { + $r->print('
'); + } else { + $r->print(&Apache::loncommon::start_page('User Management',$jscript)); - my %breadcrumb_text = &singleuser_breadcrumb(); - &Apache::lonhtmlcommon::add_breadcrumb - ({href=>"javascript:backPage(document.usersrchform,'','')", - text=>$breadcrumb_text{'search'}, - faq=>282,bug=>'Instructor Interface',}, - {href=>"javascript:backPage(document.usersrchform,'get_user_info','select')", - text=>$breadcrumb_text{'userpicked'}, - faq=>282,bug=>'Instructor Interface',}); - if ($env{'form.action'} eq 'singleuser') { - $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management', - 'Course_Change_Privileges')); - $r->print("$lt{'usrch'}
"); - $r->print(&entry_form($srch->{'srchdomain'},$srch,undef,$context)); - $r->print('

'.$lt{'usel'}.'

'); - } elsif ($env{'form.action'} eq 'singlestudent') { - $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management', - 'Course_Add_Student')); - $r->print($jscript."$lt{'stusrch'}
"); - $r->print(&entry_form($srch->{'srchdomain'},$srch,undef,$context)); - $r->print('

'.$lt{'stusel'}.'

'); + my %breadcrumb_text = &singleuser_breadcrumb(); + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"javascript:backPage(document.usersrchform,'','')", + text=>$breadcrumb_text{'search'}, + faq=>282,bug=>'Instructor Interface',}, + {href=>"javascript:backPage(document.usersrchform,'get_user_info','select')", + text=>$breadcrumb_text{'userpicked'}, + faq=>282,bug=>'Instructor Interface',}); + if ($env{'form.action'} eq 'singleuser') { + $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management', + 'Course_Change_Privileges')); + $r->print("$lt{'usrch'}
"); + $r->print(&entry_form($srch->{'srchdomain'},$srch,undef,$context)); + $r->print('

'.$lt{'usel'}.'

'); + } elsif ($env{'form.action'} eq 'singlestudent') { + $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management', + 'Course_Add_Student')); + $r->print($jscript."$lt{'stusrch'}
"); + $r->print(&entry_form($srch->{'srchdomain'},$srch,undef,$context)); + $r->print('

'.$lt{'stusel'}.'

'); + } } $r->print('
'. &Apache::loncommon::start_data_table()."\n". @@ -606,8 +617,20 @@ ENDSCRIPT foreach my $user (@sorted_users) { my ($uname,$udom) = split(/:/,$user); + my $onclick; + if ($context eq 'requestcrs') { + $onclick = + 'onclick="javascript:gochoose('."'$uname','$udom',". + "'$srch_results->{$user}->{firstname}',". + "'$srch_results->{$user}->{lastname}',". + "'$srch_results->{$user}->{permanentemail}'".');"'; + } else { + $onclick = + ' onclick="javascript:pickuser('."'".$uname."'".','."'".$udom."'".');"'; + } $r->print(&Apache::loncommon::start_data_table_row(). - ''. + ''. ''.$uname.''. ''.$udom.''); foreach my $field ('lastname','firstname','permanentemail') { @@ -627,7 +650,11 @@ ENDSCRIPT ' '."\n". ' '."\n". ' '."\n"); - $r->print($response.'
'.&Apache::loncommon::end_page()); + if ($context eq 'requestcrs') { + $r->print($opener_elements.'
'); + } else { + $r->print($response.''.&Apache::loncommon::end_page()); + } } sub print_user_query_page { @@ -794,7 +821,9 @@ $crumbs $response $forminfo

$lt{'cnu'} "$ccuname" $lt{'ind'} $ccdomain @@ -807,6 +836,7 @@ ENDTITLE &personal_data_display($ccuname,$ccdomain,$newuser,$context, $inst_results{$ccuname.':'.$ccdomain}); $r->print($personal_table); +#FIXME my ($home_server_pick,$numlib) = &Apache::loncommon::home_server_form_item($ccdomain,'hserver', 'default','hide'); @@ -818,6 +848,13 @@ $lt{'hs'}: $home_server_pick } else { $r->print($home_server_pick); } + if (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) { + $r->print('

'.&mt('User Can Request Creation of Courses in this Domain?').'

'. + &Apache::loncommon::start_data_table(). + &build_tools_display($ccuname,$ccdomain, + 'requestcourses'). + &Apache::loncommon::end_data_table()); + } $r->print(''."\n".'

'. $lt{'lg'}.'

'); my ($fixedauth,$varauth,$authmsg); @@ -851,7 +888,7 @@ KERB } else { if ($authtype eq 'int') { $varauth = '
'. -&mt('[_1] Internally authenticated (with initial password [_2])','','')."'; +&mt('[_1] Internally authenticated (with initial password [_2])','','')."'; } elsif ($authtype eq 'loc') { $varauth = '
'. &mt('[_1] Local Authentication with argument [_2]','','')."\n"; @@ -993,7 +1030,7 @@ ENDNOTOOLSPRIV } ## End of new user/old user logic if ($env{'form.action'} eq 'singlestudent') { - $r->print('
'."\n"); + $r->print('
'."\n"); } else { $r->print('

'.&mt('Add Roles').'

'); my $addrolesdisplay = 0; @@ -1006,14 +1043,14 @@ ENDNOTOOLSPRIV $addrolesdisplay = $add_domainroles; } $r->print(&course_level_dc($env{'request.role.domain'},'Course')); - $r->print('
'."\n"); + $r->print('
'."\n"); } elsif ($context eq 'author') { if ($addrolesdisplay) { $r->print('
print(' onClick="auth_check()" \>'."\n"); + $r->print(' onclick="auth_check()" \>'."\n"); } else { - $r->print('onClick="this.form.submit()" \>'."\n"); + $r->print('onclick="this.form.submit()" \>'."\n"); } } else { $r->print('
'. @@ -1021,7 +1058,7 @@ ENDNOTOOLSPRIV } } else { $r->print(&course_level_table(%inccourses)); - $r->print('
'."\n"); + $r->print('
'."\n"); } } $r->print(&Apache::lonhtmlcommon::echo_form_input(['phase','userrole','ccdomain','prevphase','currstate','ccuname','ccdomain'])); @@ -1089,7 +1126,11 @@ sub validation_javascript { $nondc_setsection_code,$groupslist); my ($jsback,$elements) = &crumb_utilities(); $js .= "\n". - ''; + ''."\n"; return $js; } @@ -1442,7 +1483,9 @@ sub user_authentication { my $choices = &Apache::lonuserutils::set_login($ccdomain,$authformkrb,$authformint,$authformloc); $outcome = < +// $lt{'err'}: $lt{'uuas'} ($currentauth). $lt{'sldb'}. @@ -1471,7 +1514,9 @@ ENDBADAUTH ); $outcome = ''."\n". '

'.$lt{'ld'}.'

'. &Apache::loncommon::start_data_table(). @@ -1802,7 +1847,10 @@ sub update_user_data { my $newuser = 0; my ($jsback,$elements) = &crumb_utilities(); my $jscript = ''."\n"; + '// '."\n". + ''."\n"; my %breadcrumb_text = &singleuser_breadcrumb(); my $args; if ($env{'form.popup'}) { @@ -3242,13 +3290,16 @@ sub custom_role_editor { my ($jsback,$elements) = &crumb_utilities(); my $button_code = "\n"; my $head_script = "\n"; - $head_script .= ''."\n"; + $head_script .= "\n".$jsback."\n" + .'// ]]>'."\n" + .''."\n"; $r->print(&Apache::loncommon::start_page('Custom Role Editor',$head_script)); &Apache::lonhtmlcommon::add_breadcrumb ({href=>"javascript:backPage(document.form1,'pickrole','')", @@ -3378,7 +3429,7 @@ sub make_script_template { sub make_button_code { my ($role) = @_; my $label = &Apache::lonnet::plaintext($role); - my $button_code = ''; + my $button_code = ''; return ($button_code); } # ---------------------------------------------------------- Call to definerole @@ -3391,7 +3442,11 @@ sub set_custom_role { return; } my ($jsback,$elements) = &crumb_utilities(); - my $jscript = ''; + my $jscript = ''."\n"; $r->print(&Apache::loncommon::start_page('Save Custom Role'),$jscript); &Apache::lonhtmlcommon::add_breadcrumb @@ -3763,7 +3818,11 @@ sub header { sub add_script { my ($js) = @_; - return ''; + return ''."\n"; } sub verify_user_display { @@ -4143,7 +4202,9 @@ ENDSCRIPT my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; my $output = ''."\n". '

'.$lt->{'selfenroll'}.'

'."\n"; my ($visible,$cansetvis,$vismsgs,$visactions) = &visible_in_cat($cdom,$cnum); @@ -4939,13 +5000,6 @@ sub print_userchangelogs_display { my (%whodunit,%changed,$version); ($version) = ($r->dir_config('lonVersion') =~ /^([\d\.]+)\-/); $r->print(&role_display_filter($formname,$cdom,$cnum,\%curr,$version)); - my $showntablehdr = 0; - my $tablehdr = &Apache::loncommon::start_data_table(). - &Apache::loncommon::start_data_table_header_row(). - ' '.&mt('When').''.&mt('Who made the change'). - ''.&mt('Changed User').''.&mt('Role').''.&mt('Section').''. - &mt('Context').''.&mt('Start').''.&mt('End').''. - &Apache::loncommon::end_data_table_header_row(); my ($minshown,$maxshown); $minshown = 1; my $count = 0; @@ -4955,6 +5009,9 @@ sub print_userchangelogs_display { $minshown = 1 + ($curr{'page'} - 1) * $curr{'show'}; } } + + # Collect user change log data + my $content = ''; foreach my $id (sort { $roleslog{$b}{'exe_time'}<=>$roleslog{$a}{'exe_time'} } (keys(%roleslog))) { next if (($roleslog{$id}{'exe_time'} < $curr{'rolelog_start_date'}) || ($roleslog{$id}{'exe_time'} > $curr{'rolelog_end_date'})); @@ -4976,10 +5033,7 @@ sub print_userchangelogs_display { } $count ++; next if ($count < $minshown); - if (!$showntablehdr) { - $r->print($tablehdr); - $showntablehdr = 1; - } + if ($whodunit{$roleslog{$id}{'exe_uname'}.':'.$roleslog{$id}{'exe_udom'}} eq '') { $whodunit{$roleslog{$id}{'exe_uname'}.':'.$roleslog{$id}{'exe_udom'}} = &Apache::loncommon::plainname($roleslog{$id}{'exe_uname'},$roleslog{$id}{'exe_udom'}); @@ -5018,21 +5072,43 @@ sub print_userchangelogs_display { if ($chgcontext ne '' && $lt{$chgcontext} ne '') { $chgcontext = $lt{$chgcontext}; } - $r->print(&Apache::loncommon::start_data_table_row().''.$count.''.&Apache::lonlocal::locallocaltime($roleslog{$id}{'exe_time'}).''.$whodunit{$roleslog{$id}{'exe_uname'}.':'.$roleslog{$id}{'exe_udom'}}.''.$changed{$roleslog{$id}{'uname'}.':'.$roleslog{$id}{'udom'}}.''.&Apache::lonnet::plaintext($roleslog{$id}{'logentry'}{'role'}).''.$sec.''.$chgcontext.''.$rolestart.''.$roleend.''.&Apache::loncommon::end_data_table_row()."\n"); + $content .= + &Apache::loncommon::start_data_table_row() + .''.$count.'' + .''.&Apache::lonlocal::locallocaltime($roleslog{$id}{'exe_time'}).'' + .''.$whodunit{$roleslog{$id}{'exe_uname'}.':'.$roleslog{$id}{'exe_udom'}}.'' + .''.$changed{$roleslog{$id}{'uname'}.':'.$roleslog{$id}{'udom'}}.'' + .''.&Apache::lonnet::plaintext($roleslog{$id}{'logentry'}{'role'}).'' + .''.$sec.'' + .''.$chgcontext.'' + .''.$rolestart.'' + .''.$roleend.'' + .&Apache::loncommon::end_data_table_row(); + } + + # Form Footer + my $form_footer = + '' + .'' + .''; + + # Only display table, if content is available (has been collected above) + if (!$content) { + $r->print('

' + .&mt('There are no records to display.') + .'

' + ); + $r->print($form_footer); + return; } - if ($showntablehdr) { - $r->print(&Apache::loncommon::end_data_table().'
'); - if (($curr{'page'} > 1) || ($more_records)) { - $r->print(''); - if ($curr{'page'} > 1) { - $r->print(''); - } - if ($more_records) { - $r->print(''); - } - $r->print('
'.&mt('Previous [_1] changes',$curr{'show'}).''.&mt('Next [_1] changes',$curr{'show'}).'
'); - $r->print(<<"ENDSCRIPT"); + + # Content to display, so create navigation and display table + + # Create Navigation: + # Navigation Script + my $nav_script = <<"ENDSCRIPT"; ENDSCRIPT - } - } else { - $r->print(&mt('There are no records to display')); - } - $r->print(''. - ''); + # Navigation Buttons + my $nav_links; + $nav_links = '

'; + if (($curr{'page'} > 1) || ($more_records)) { + if ($curr{'page'} > 1) { + $nav_links .= ' '; + } + if ($more_records) { + $nav_links .= ''; + } + } + $nav_links .= '

'; + + # Table Header + my $tableheader = + &Apache::loncommon::start_data_table_header_row() + .' ' + .''.&mt('When').'' + .''.&mt('Who made the change').'' + .''.&mt('Changed User').'' + .''.&mt('Role').'' + .''.&mt('Section').'' + .''.&mt('Context').'' + .''.&mt('Start').'' + .''.&mt('End').'' + .&Apache::loncommon::end_data_table_header_row(); + + # Print Content + $r->print( + $nav_script + .$nav_links + .&Apache::loncommon::start_data_table() + .$tableheader + .$content + .&Apache::loncommon::end_data_table() + .$nav_links + .$form_footer + ); return; } @@ -5059,7 +5174,7 @@ sub role_display_filter { my $context = 'course'; my $nolink = 1; my $output = ''; @@ -5072,9 +5187,13 @@ sub role_display_filter { $curr->{'rolelog_end_date'},undef, undef,undef,undef,undef,undef,undef,$nolink); my %lt = &rolechg_contexts(); - $output .= ''. + $output .= ''. + ''. ''. + ''. + '
'. - ''.&mt('Changes/page:').'
'. + ''.&mt('Changes/page:').'
'. &Apache::lonmeta::selectbox('show',$curr->{'show'},undef, (&mt('all'),5,10,20,50,100,1000,10000)). '
  '.&mt('Window during which changes occurred:').'
'.&mt('After:'). - ''.$startform.'
'.&mt('Before:').''. - $endform.'
  '.&mt('Window during which changes occurred:').'
'. + ''. + ''. + '
'.&mt('After:'). + ''.$startform.'
'.&mt('Before:').''.$endform.'
'. + '
  '.&mt('Role:').'
'. '
  '. + $output .= '  '. &mt('Context:').'
  
'. - ''. - &mt('[_1]Note:[_2] Only changes made from servers running LON-CAPA 2.6.99.0 or later are displayed.'); + $output .= '' + .''; + + # Update Display button + $output .= '

' + .'' + .'

'; + + # Server version info + $output .= '

' + .&mt('Only changes made from servers running LON-CAPA [_1] or later are displayed.' + ,'2.6.99.0'); if ($version) { - $output .= ' '.&mt('This server is version [_3].','','',$version); } - $output .= '



'; + $output .= ' '.&mt('This LON-CAPA server is version [_1]',$version); + } + $output .= '


'; return $output; } @@ -5501,17 +5631,27 @@ sub build_search_response { $response .= '
'.&mt('You may want to broaden your search to the selected LON-CAPA domain.'); } } - if (!($srch->{'srchby'} eq 'uname' && $srch->{'srchin'} eq 'dom' && $srch->{'srchtype'} eq 'exact' && $srch->{'srchdomain'} eq $env{'request.role.domain'})) { + my $createdom = $env{'request.role.domain'}; + if ($context eq 'requestcrs') { + if ($env{'form.coursedom'} ne '') { + $createdom = $env{'form.coursedom'}; + } + } + if (!($srch->{'srchby'} eq 'uname' && $srch->{'srchin'} eq 'dom' && $srch->{'srchtype'} eq 'exact' && $srch->{'srchdomain'} eq $createdom)) { my $cancreate = - &Apache::lonuserutils::can_create_user($env{'request.role.domain'},$context); + &Apache::lonuserutils::can_create_user($createdom,$context); + my $targetdom = ''.$createdom.''; if ($cancreate) { - my $showdom = &display_domain_info($env{'request.role.domain'}); + my $showdom = &display_domain_info($createdom); $response .= '

' .''.&mt('To add a new user:').'' - .'
' - .&mt("(You can only create new users in your current role's domain - [_1])" - ,''.$env{'request.role.domain'}.'') - .'