--- loncom/interface/lonuserutils.pm 2008/01/06 05:32:43 1.46 +++ loncom/interface/lonuserutils.pm 2008/05/19 17:10:19 1.55 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Utility functions for managing LON-CAPA user accounts # -# $Id: lonuserutils.pm,v 1.46 2008/01/06 05:32:43 raeburn Exp $ +# $Id: lonuserutils.pm,v 1.55 2008/05/19 17:10:19 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -42,7 +42,7 @@ use LONCAPA qw(:DEFAULT :match); ############################################################### # Drop student from all sections of a course, except optional $csec sub modifystudent { - my ($udom,$unam,$courseid,$csec,$desiredhost)=@_; + my ($udom,$unam,$courseid,$csec,$desiredhost,$context)=@_; # if $csec is undefined, drop the student from all the courses matching # this one. If $csec is defined, drop them from all other sections of # this course and add them to section $csec @@ -69,7 +69,7 @@ sub modifystudent { # dom name id mode pass f m l g ($udom,$unam,'', '', '',undef,undef,undef,undef, $section,time,undef,undef,$desiredhost,'','manual', - '',$courseid); + '',$courseid,'',$context); $result .= $reply.':'; } } @@ -129,7 +129,8 @@ sub modifyuserrole { if ($role ne '') { $role =~ s/_/\//g; $roleresult = &Apache::lonnet::assignrole($udom,$uname,$scope, - $role,$end,$start); + $role,$end,$start,'', + '',$context); } } return ($userresult,$authresult,$roleresult,$idresult); @@ -924,8 +925,15 @@ sub setup_date_selectors { sub get_dates_from_form { - my $startdate = &Apache::lonhtmlcommon::get_date_from_form('startdate'); - my $enddate = &Apache::lonhtmlcommon::get_date_from_form('enddate'); + my ($startname,$endname) = @_; + if ($startname eq '') { + $startname = 'startdate'; + } + if ($endname eq '') { + $endname = 'enddate'; + } + my $startdate = &Apache::lonhtmlcommon::get_date_from_form($startname); + my $enddate = &Apache::lonhtmlcommon::get_date_from_form($endname); if ($env{'form.no_end_date'}) { $enddate = 0; } @@ -1251,34 +1259,11 @@ sub print_userlist { if ($env{'form.showrole'} eq 'Any') { $roleselected = ' selected="selected" '; } - my ($role_select,$cnum,$cdom); - if ($context eq 'domain') { - $role_select = &domain_roles_select(); - $r->print('<label>'.&mt('Role Type: [_1]',$role_select).'</label>'); - } else { - $role_select = '<select name="showrole">'."\n". - '<option value="Any" '.$roleselected.'>'. - &mt('Any role').'</option>'; - my @poss_roles = &curr_role_permissions($context); - foreach my $role (@poss_roles) { - $roleselected = ''; - if ($role eq $env{'form.showrole'}) { - $roleselected = ' selected="selected" '; - } - my $plrole; - if ($role eq 'cr') { - $plrole = &mt('Custom role'); - } else { - $plrole=&Apache::lonnet::plaintext($role); - } - $role_select .= '<option value="'.$role.'"'.$roleselected.'>'.$plrole.'</option>'; - } - $role_select .= '</select>'; - $r->print('<label>'.&mt('Role: [_1]',$role_select).'</label>'); - if ($context eq 'course') { - ($cnum,$cdom) = &get_course_identity(); - $r->print(§ion_group_filter($cnum,$cdom)); - } + my ($cnum,$cdom); + $r->print(&role_filter($context)); + if ($context eq 'course') { + ($cnum,$cdom) = &get_course_identity(); + $r->print(§ion_group_filter($cnum,$cdom)); } if (!(($context eq 'domain') && ($env{'form.roletype'} eq 'course'))) { $r->print(' '.&list_submit_button(&mt('Update Display')). @@ -1450,6 +1435,41 @@ sub print_userlist { $env{'form.phase'}.'" /></form>'); } +sub role_filter { + my ($context) = @_; + my $output; + my $roleselected = ''; + if ($env{'form.showrole'} eq 'Any') { + $roleselected = ' selected="selected" '; + } + my ($role_select); + if ($context eq 'domain') { + $role_select = &domain_roles_select(); + $output = '<label>'.&mt('Role Type: [_1]',$role_select).'</label>'; + } else { + $role_select = '<select name="showrole">'."\n". + '<option value="Any" '.$roleselected.'>'. + &mt('Any role').'</option>'; + my @poss_roles = &curr_role_permissions($context); + foreach my $role (@poss_roles) { + $roleselected = ''; + if ($role eq $env{'form.showrole'}) { + $roleselected = ' selected="selected" '; + } + my $plrole; + if ($role eq 'cr') { + $plrole = &mt('Custom role'); + } else { + $plrole=&Apache::lonnet::plaintext($role); + } + $role_select .= '<option value="'.$role.'"'.$roleselected.'>'.$plrole.'</option>'; + } + $role_select .= '</select>'; + $output = '<label>'.&mt('Role: [_1]',$role_select).'</label>'; + } + return $output; +} + sub section_group_filter { my ($cnum,$cdom) = @_; my @filters; @@ -1467,9 +1487,9 @@ sub section_group_filter { all => 'all', none => 'none', ); - my ($output,@options); + my $output; foreach my $item (@filters) { - my $markup; + my ($markup,@options); if ($env{'form.'.$name{$item}} eq '') { $env{'form.'.$name{$item}} = 'all'; } @@ -1513,6 +1533,10 @@ sub list_submit_button { sub gather_userinfo { my ($context,$format,$userlist,$indexhash,$userinfo,$rolehash,$permission) = @_; + my $viewablesec; + if ($context eq 'course') { + $viewablesec = &viewable_section($permission); + } foreach my $item (keys(%{$rolehash})) { my %userdata; if ($context eq 'author') { @@ -1522,7 +1546,6 @@ sub gather_userinfo { &build_user_record($context,\%userdata,$userinfo,$indexhash, $item,$userlist); } elsif ($context eq 'course') { - my $viewablesec = &viewable_section($permission); ($userdata{'username'},$userdata{'domain'},$userdata{'role'}, $userdata{'section'}) = split(/:/,$item,-1); ($userdata{'start'},$userdata{'end'})=split(/:/,$rolehash->{$item}); @@ -1791,6 +1814,7 @@ sub make_keylist_array { $index->{'role'} = &Apache::loncoursedata::CL_ROLE(); $index->{'extent'} = &Apache::loncoursedata::CL_EXTENT(); $index->{'photo'} = &Apache::loncoursedata::CL_PHOTO(); + $index->{'thumbnail'} = &Apache::loncoursedata::CL_THUMBNAIL(); foreach my $key (keys(%{$index})) { $keylist->[$index->{$key}] = $key; } @@ -1839,7 +1863,10 @@ sub process_date_info { } sub show_users_list { - my ($r,$context,$mode,$permission,$statusmode,$userlist,$keylist)=@_; + my ($r,$context,$mode,$permission,$statusmode,$userlist,$keylist,$formname)=@_; + if ($formname eq '') { + $formname = 'studentform'; + } # # Variables for excel output my ($excel_workbook, $excel_sheet, $excel_filename,$row,$format); @@ -1854,6 +1881,9 @@ sub show_users_list { } else { push(@sortable,'extent'); } + if ($mode eq 'pickauthor') { + @sortable = ('username','fullname','email','status'); + } if (!grep(/^\Q$sortby\E$/,@sortable)) { $sortby = 'username'; } @@ -1894,7 +1924,7 @@ function photowindow(photolink) { END } } - if ($mode ne 'autoenroll') { + if ($mode ne 'autoenroll' && $mode ne 'pickauthor') { my $check_uncheck_js = &Apache::loncommon::check_uncheck_jscript(); my $alert = &mt("You must select at least one user by checking a user's 'Select' checkbox"); my $singconfirm = &mt(' for a single user?'); @@ -1936,8 +1966,8 @@ function verify_action (field) { alert("$alert"); } else { - var message = document.studentform.bulkaction[document.studentform.bulkaction.selectedIndex].text; - var choice = document.studentform.bulkaction[document.studentform.bulkaction.selectedIndex].value; + var message = document.$formname.bulkaction[document.$formname.bulkaction.selectedIndex].text; + var choice = document.$formname.bulkaction[document.$formname.bulkaction.selectedIndex].value; if (numchecked == 1) { message += singconf; } @@ -1946,14 +1976,14 @@ function verify_action (field) { } if (choice == 'chgdates' || choice == 'reenable' || choice == 'activate') { var datemsg = ''; - if ((document.studentform.startdate_month.value == '') && - (document.studentform.startdate_day.value == '') && - (document.studentform.startdate_year.value == '')) { + if ((document.$formname.startdate_month.value == '') && + (document.$formname.startdate_day.value == '') && + (document.$formname.startdate_year.value == '')) { datemsg = "\\n$lt{'acwi'},\\n$lt{'asyo'}.\\n"; } - if ((document.studentform.enddate_month.value == '') && - (document.studentform.enddate_day.value == '') && - (document.studentform.enddate_year.value == '')) { + if ((document.$formname.enddate_month.value == '') && + (document.$formname.enddate_day.value == '') && + (document.$formname.enddate_year.value == '')) { datemsg += "\\n$lt{'accw'},\\n$lt{'asyd'}.\\n"; } if (datemsg != '') { @@ -1961,9 +1991,9 @@ function verify_action (field) { } } if (choice == 'chgsec') { - var rolefilter = document.studentform.showrole.options[document.studentform.showrole.selectedIndex].value; - var retained = document.studentform.retainsec.value; - var secshow = document.studentform.newsecs.value; + var rolefilter = document.$formname.showrole.options[document.$formname.showrole.selectedIndex].value; + var retained = document.$formname.retainsec.value; + var secshow = document.$formname.newsecs.value; if (secshow == '') { if (rolefilter == 'st' || retained == 0 || retained == "") { message += "\\n\\n$lt{'sewi'},\\n$lt{'ayes'},\\n$lt{'oryo'}.\\n"; @@ -1979,28 +2009,44 @@ function verify_action (field) { } } if (confirm(message)) { - document.studentform.phase.value = 'bulkchange'; - document.studentform.submit(); + document.$formname.phase.value = 'bulkchange'; + document.$formname.submit(); } } } function username_display_launch(username,domain) { var target; - for (var i=0; i<document.studentform.usernamelink.length; i++) { - if (document.studentform.usernamelink[i].checked) { - target = document.studentform.usernamelink[i].value; + for (var i=0; i<document.$formname.usernamelink.length; i++) { + if (document.$formname.usernamelink[i].checked) { + target = document.$formname.usernamelink[i].value; } } if (target == 'modify') { - document.studentform.srchterm.value=username; - document.studentform.srchdomain.value=domain; - document.studentform.phase.value='get_user_info'; - document.studentform.action.value = 'singleuser'; - document.studentform.submit(); + if (document.$formname.userwin.checked == true) { + var url = '/adm/createuser?srchterm='+username+'&srchdomain='+domain+'&phase=get_user_info&action=singleuser&srchin=dom&srchby=uname&srchtype=exact&popup=1'; + var options = 'height=600,width=800,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no'; + modifywin = window.open(url,'',options,1); + modifywin.focus(); + return; + } else { + document.$formname.srchterm.value=username; + document.$formname.srchdomain.value=domain; + document.$formname.phase.value='get_user_info'; + document.$formname.action.value = 'singleuser'; + document.$formname.submit(); + } } - else { - document.location.href = '/adm/'+domain+'/'+username+'/aboutme'; + if (target == 'aboutme') { + if (document.$formname.userwin.checked == true) { + var url = '/adm/'+domain+'/'+username+'/aboutme?popup=1'; + var options = 'height=600,width=800,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no'; + aboutmewin = window.open(url,'',options,1); + aboutmewin.focus(); + return; + } else { + document.location.href = '/adm/'+domain+'/'+username+'/aboutme'; + } } } </script> @@ -2035,6 +2081,7 @@ END 'ac' => "Action to take for selected users", 'link' => "Behavior of username links", 'aboutme' => "Display a user's personal page", + 'owin' => "Open in a new window", 'modify' => "Modify a user's information", ); if ($context eq 'domain' && $env{'form.roletype'} eq 'course') { @@ -2042,28 +2089,33 @@ END } elsif ($context eq 'author') { $lt{'extent'} = &mt('Author'); } - my @cols = ('username','domain','id','fullname'); - if ($context eq 'course') { - push(@cols,'section'); - } - if (!($context eq 'domain' && $env{'form.roletype'} eq 'course')) { - push(@cols,('start','end')); - } - if ($env{'form.showrole'} eq 'Any' || $env{'form.showrole'} eq 'cr') { - push(@cols,'role'); - } - if ($context eq 'domain' && ($env{'form.roletype'} eq 'author' || - $env{'form.roletype'} eq 'course')) { - push (@cols,'extent'); - } - if (($statusmode eq 'Any') && - (!($context eq 'domain' && $env{'form.roletype'} eq 'course'))) { - push(@cols,'status'); - } - if ($context eq 'course') { - push(@cols,'groups'); + my @cols; + if ($mode eq 'pickauthor') { + @cols = ('username','fullname','status','email'); + } else { + @cols = ('username','domain','id','fullname'); + if ($context eq 'course') { + push(@cols,'section'); + } + if (!($context eq 'domain' && $env{'form.roletype'} eq 'course')) { + push(@cols,('start','end')); + } + if ($env{'form.showrole'} eq 'Any' || $env{'form.showrole'} eq 'cr') { + push(@cols,'role'); + } + if ($context eq 'domain' && ($env{'form.roletype'} eq 'author' || + $env{'form.roletype'} eq 'course')) { + push (@cols,'extent'); + } + if (($statusmode eq 'Any') && + (!($context eq 'domain' && $env{'form.roletype'} eq 'course'))) { + push(@cols,'status'); + } + if ($context eq 'course') { + push(@cols,'groups'); + } + push(@cols,'email'); } - push(@cols,'email'); my $rolefilter = $env{'form.showrole'}; if ($env{'form.showrole'} eq 'cr') { @@ -2078,10 +2130,10 @@ END $r->print('<b>'.$results_description.'</b><br />'); } my ($output,$actionselect,%canchange,%canchangesec); - if ($mode eq 'html' || $mode eq 'view' || $mode eq 'autoenroll') { - if ($mode ne 'autoenroll') { + if ($mode eq 'html' || $mode eq 'view' || $mode eq 'autoenroll' || $mode eq 'pickauthor') { + if ($mode ne 'autoenroll' && $mode ne 'pickauthor') { if ($permission->{'cusr'}) { - $actionselect = &select_actions($context,$setting,$statusmode); + $actionselect = &select_actions($context,$setting,$statusmode,$formname); } $r->print(<<END); <input type="hidden" name="srchby" value="uname" /> @@ -2093,28 +2145,30 @@ END $output = '<p>'; my @linkdests = ('aboutme'); if ($permission->{'cusr'}) { - push (@linkdests,'modify'); - $output .= '<span class="LC_nobreak">'.$lt{'link'}.': '; - my $usernamelink = $env{'form.usernamelink'}; - if ($usernamelink eq '') { - $usernamelink = 'aboutme'; - } - foreach my $item (@linkdests) { - my $checkedstr = ''; - if ($item eq $usernamelink) { - $checkedstr = ' checked="checked" '; - } - $output .= '<label><input type="radio" name="usernamelink" value="'.$item.'"'.$checkedstr.'> '.$lt{$item}.'</label> '; + unshift (@linkdests,'modify'); + } + $output .= '<span class="LC_nobreak">'.$lt{'link'}.': '; + my $usernamelink = $env{'form.usernamelink'}; + if ($usernamelink eq '') { + $usernamelink = 'aboutme'; + } + foreach my $item (@linkdests) { + my $checkedstr = ''; + if ($item eq $usernamelink) { + $checkedstr = ' checked="checked" '; } - $output .= '</span><br />'; - } else { - $output .= &mt("Click on a username to view the user's personal page.").'<br />'; + $output .= '<label><input type="radio" name="usernamelink" value="'.$item.'"'.$checkedstr.'> '.$lt{$item}.'</label> '; + } + my $checkwin; + if ($env{'form.userwin'}) { + $checkwin = 'checked = "checked"'; } + $output .= ' <input type="checkbox" name="userwin" value="1" $checkwin />'.$lt{'owin'}.'</span><br />'; if ($actionselect) { $output .= <<"END"; -$lt{'ac'}: $actionselect <input type="button" value="$lt{'go'}" onclick="javascript:opendatebrowser(this.form,'studentform','go')" /></p> -<p><input type="button" value="$lt{'ca'}" onclick="javascript:checkAll(document.studentform.actionlist)" /> -<input type="button" value="$lt{'ua'}" onclick="javascript:uncheckAll(document.studentform.actionlist)" /><br /><br /><input type="button" value="$lt{'pr'}" onclick="javascript:verify_action(document.studentform.actionlist)" /> +$lt{'ac'}: $actionselect <input type="button" value="$lt{'go'}" onclick="javascript:opendatebrowser(this.form,'$formname','go')" /></p> +<p><input type="button" value="$lt{'ca'}" onclick="javascript:checkAll(document.$formname.actionlist)" /> +<input type="button" value="$lt{'ua'}" onclick="javascript:uncheckAll(document.$formname.actionlist)" /><br /><br /><input type="button" value="$lt{'pr'}" onclick="javascript:verify_action(document.$formname.actionlist)" /> END my @allroles; if ($env{'form.showrole'} eq 'Any') { @@ -2162,16 +2216,20 @@ END &Apache::loncommon::start_data_table_header_row(); if ($mode eq 'autoenroll') { $output .= " - <th><a href=\"javascript:document.studentform.sortby.value='type';document.studentform.submit();\">$lt{'type'}</a></th> + <th><a href=\"javascript:document.$formname.sortby.value='type';document.$formname.submit();\">$lt{'type'}</a></th> "; } else { - $output .= "\n".'<th>'.&mt('Count').'</th>'."\n"; + if ($mode eq 'pickauthor') { + $output .= "\n".'<th> </th>'."\n"; + } else { + $output .= "\n".'<th>'.&mt('Count').'</th>'."\n"; + } if ($actionselect) { $output .= '<th>'.&mt('Select').'</th>'."\n"; } } foreach my $item (@cols) { - $output .= "<th><a href=\"javascript:document.studentform.sortby.value='$item';document.studentform.submit();\">$lt{$item}</a></th>\n"; + $output .= "<th><a href=\"javascript:document.$formname.sortby.value='$item';document.$formname.submit();\">$lt{$item}</a></th>\n"; } my %role_types = &role_type_names(); if ($context eq 'course' && $mode ne 'autoenroll') { @@ -2186,8 +2244,8 @@ END $clickerchg = 'off'; } $output .= ' <th>'."\n".' '. - '<a href="javascript:document.studentform.displayclickers.value='. - "'".$clickerchg."'".';document.studentform.submit();">'. + '<a href="javascript:document.'.$formname.'.displayclickers.value='. + "'".$clickerchg."'".';document.'.$formname.'.submit();">'. $clicker_options{$clickerchg}.'</a> '.$lt{'clicker'}."\n". ' </th>'."\n"; @@ -2202,8 +2260,8 @@ END $photochg = 'off'; } $output .= ' <th>'."\n".' '. - '<a href="javascript:document.studentform.displayphotos.value='. - "'".$photochg."'".';document.studentform.submit();">'. + '<a href="javascript:document.'.$formname.'.displayphotos.value='. + "'".$photochg."'".';document.'.$formname.'.submit();">'. $photo_options{$photochg}.'</a> '.$lt{'photo'}."\n". ' </th>'."\n"; } @@ -2243,7 +2301,6 @@ END } # Done with header lines in all formats - my %index; my $i; foreach my $idx (@$keylist) { @@ -2345,6 +2402,8 @@ END if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) { if (($displayphotos eq 'on') && ($role eq 'st')) { $userlist->{$user}->[$index{'photo'}] = + &Apache::lonnet::retrievestudentphoto($udom,$uname,'jpg'); + $userlist->{$user}->[$index{'thumbnail'}] = &Apache::lonnet::retrievestudentphoto($udom,$uname, 'gif','thumbnail'); } @@ -2401,7 +2460,7 @@ END } else { $in{'end'} = &Apache::lonlocal::locallocaltime($in{'end'}); } - if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll') { + if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll' || $mode eq 'pickauthor') { $r->print(&Apache::loncommon::start_data_table_row()); my $checkval; if ($mode eq 'autoenroll') { @@ -2423,7 +2482,9 @@ END } $r->print("<td>$cellentry</td>\n"); } else { - $r->print("<td>$rowcount</td>\n"); + if ($mode ne 'pickauthor') { + $r->print("<td>$rowcount</td>\n"); + } if ($actionselect) { my $showcheckbox; if ($role =~ /^cr\//) { @@ -2457,12 +2518,13 @@ END } else { $r->print('<td> </td>'); } + } elsif ($mode eq 'pickauthor') { + $r->print('<td><input type="button" name="chooseauthor" onclick="javascript:gochoose('."'$in{'username'}'".');" value="'.&mt('Select').'" /></td>'); } } foreach my $item (@cols) { if ($item eq 'username') { - $r->print('<td>'.&print_username_link($mode,$permission, - \%in).'</td>'); + $r->print('<td>'.&print_username_link($mode,\%in).'</td>'); } elsif (($item eq 'start' || $item eq 'end') && ($actionselect)) { $r->print('<td>'.$in{$item}.'<input type="hidden" name="'.$checkval.'_'.$item.'" value="'.$sdata->[$index{$item}].'" /></td>'."\n"); } else { @@ -2481,7 +2543,7 @@ END } if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) { if ($displayphotos eq 'on' && $role eq 'st' && $in{'photo'} ne '') { - $r->print(' <td align="right"><a href="javascript:photowindow('."'".&Apache::lonnet::studentphoto($in{'domain'},$in{'username'},'jpg')."'".')"><img src="'.$in{'photo'}.'" border="1"></a></td>'); + $r->print(' <td align="right"><a href="javascript:photowindow('."'".$in{'photo'}."'".')"><img src="'.$in{'thumbnail'}.'" border="1"></a></td>'); } else { $r->print(' <td> </td> '); } @@ -2525,7 +2587,7 @@ END $row++; } } - if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll') { + if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll' || $mode eq 'pickauthor') { $r->print(&Apache::loncommon::end_data_table().'<br />'); } elsif ($mode eq 'excel') { $excel_workbook->close(); @@ -2546,14 +2608,10 @@ END } sub print_username_link { - my ($mode,$permission,$in) = @_; + my ($mode,$in) = @_; my $output; if ($mode eq 'autoenroll') { $output = $in->{'username'}; - } elsif (!$permission->{'cusr'}) { - $output = &Apache::loncommon::aboutmewrapper($in->{'username'}, - $in->{'username'}, - $in->{'domain'}); } else { $output = '<a href="javascript:username_display_launch('. "'$in->{'username'}','$in->{'domain'}'".')" />'. @@ -2572,7 +2630,7 @@ sub role_type_names { } sub select_actions { - my ($context,$setting,$statusmode) = @_; + my ($context,$setting,$statusmode,$formname) = @_; my %lt = &Apache::lonlocal::texthash( revoke => "Revoke user roles", delete => "Delete user roles", @@ -2633,7 +2691,7 @@ sub select_actions { } } if ($options) { - $output = '<select name="bulkaction" onchange="javascript:opendatebrowser(this.form,'."'studentform','change'".')" />'."\n". + $output = '<select name="bulkaction" onchange="javascript:opendatebrowser(this.form,'."'$formname','change'".')" />'."\n". '<option value="" selected="selected">'. &mt('Please select').'</option>'."\n".$options."\n".'</select>'; if ($choices{'dates'}) { @@ -2664,20 +2722,14 @@ sub select_actions { sub date_section_javascript { my ($context,$setting) = @_; - my $title; - if (($context eq 'course') || ($context eq 'domain' && $setting eq 'course')) { - $title = &mt('Date and Section selector'); - } else { - $title = &mt('Date selector'); - } + my $title = 'Date_And_Section_Selector'; my %nopopup = &Apache::lonlocal::texthash ( revoke => "Check the boxes for any users for whom roles are to be revoked, and click 'Proceed'", delete => "Check the boxes for any users for whom roles are to be deleted, and click 'Proceed'", none => "Choose an action to take for selected users", ); my $output = ' -<script type="text/javascript"> - var stdeditbrowser;'."\n"; +<script type="text/javascript">'."\n"; $output .= <<"ENDONE"; function opendatebrowser(callingform,formname,calledby) { var bulkaction = callingform.bulkaction.options[callingform.bulkaction.selectedIndex].value; @@ -3647,13 +3699,14 @@ sub upfile_drop_add { $sec = $secs[0]; } &modifystudent($domain,$username,$cid,$sec, - $desiredhost); + $desiredhost,$context); $roleresult = &Apache::lonnet::modifystudent ($domain,$username,$id,$amode,$password, $fname,$mname,$lname,$gen,$sec,$enddate, $startdate,$env{'form.forceid'}, - $desiredhost,$email,'manual','',$cid); + $desiredhost,$email,'manual','',$cid, + '',$context); $userresult = $roleresult; } else { if ($role ne '') { @@ -3959,24 +4012,25 @@ sub update_user_list { $end = $now; $type = 'manual'; $result = - &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid); + &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid,'',$context); } elsif ($choice eq 'revoke') { # revoke or delete user role $end = $now; if ($role eq 'st') { $result = - &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid); + &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid,'',$context); } else { $result = - &Apache::lonnet::revokerole($udom,$uname,$scope,$role); + &Apache::lonnet::revokerole($udom,$uname,$scope,$role, + '','',$context); } } elsif ($choice eq 'delete') { if ($role eq 'st') { - &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$now,$start,$type,$locktype,$cid); + &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$now,$start,$type,$locktype,$cid,'',$context); } $result = &Apache::lonnet::assignrole($udom,$uname,$scope,$role,$now, - $start,1); + $start,1,'',$context); } else { #reenable, activate, change access dates or change section if ($choice ne 'chgsec') { @@ -3985,25 +4039,25 @@ sub update_user_list { } if ($choice eq 'reenable') { if ($role eq 'st') { - $result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid); + $result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid,'',$context); } else { $result = &Apache::lonnet::assignrole($udom,$uname,$scope,$role,$end, - $now); + $now,'','',$context); } } elsif ($choice eq 'activate') { if ($role eq 'st') { - $result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid); + $result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid,'',$context); } else { $result = &Apache::lonnet::assignrole($udom,$uname,$scope,$role,$end, - $now); + $now,'','',$context); } } elsif ($choice eq 'chgdates') { if ($role eq 'st') { - $result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid); + $result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid,'',$context); } else { $result = &Apache::lonnet::assignrole($udom,$uname,$scope,$role,$end, - $start); + $start,'','',$context); } } elsif ($choice eq 'chgsec') { my (@newsecs,$revresult,$nochg,@retained); @@ -4019,7 +4073,8 @@ sub update_user_list { } else { $revresult = &Apache::lonnet::revokerole($udom,$uname, - $scope,$role); + $scope,$role, + '','',$context); } } else { if (@newsecs > 0) { @@ -4028,12 +4083,14 @@ sub update_user_list { } else { $revresult = &Apache::lonnet::revokerole($udom,$uname, - $scope,$role); + $scope,$role, + '','',$context); } } else { $revresult = &Apache::lonnet::revokerole($udom,$uname, - $scope,$role); + $scope,$role, + '','',$context); } } } else { @@ -4048,17 +4105,17 @@ sub update_user_list { if (!$nochg) { if ($role eq 'st') { $result = - &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,undef,$end,$start,$type,$locktype,$cid); + &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,undef,$end,$start,$type,$locktype,$cid,'',$context); } else { my $newscope = $scopestem; - $result = &Apache::lonnet::assignrole($udom,$uname,$newscope,$role,$end,$start); + $result = &Apache::lonnet::assignrole($udom,$uname,$newscope,$role,$end,$start,'','',$context); } } } else { foreach my $newsec (@newsecs) { if (!grep(/^\Q$newsec\E$/,@retained)) { if ($role eq 'st') { - $result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$newsec,$end,$start,$type,$locktype,$cid); + $result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$newsec,$end,$start,$type,$locktype,$cid,'',$context); } else { my $newscope = $scopestem; if ($newsec ne '') { @@ -4197,17 +4254,29 @@ sub set_login { } sub course_sections { - my ($sections_count,$role) = @_; + my ($sections_count,$role,$current_sec) = @_; my $output = ''; my @sections = (sort {$a <=> $b} keys %{$sections_count}); my $numsec = scalar(@sections); + my $is_selected = ' selected="selected" '; if ($numsec <= 1) { $output = '<select name="currsec_'.$role.'" >'."\n". - ' <option value="">'.&mt('Select').'</option>'."\n". + ' <option value="">'.&mt('Select').'</option>'."\n"; + if ($current_sec eq 'none') { + $output .= + ' <option value=""'.$is_selected.'>'.&mt('No section').'</option>'."\n"; + } else { + $output .= ' <option value="">'.&mt('No section').'</option>'."\n"; + } if ($numsec == 1) { - $output .= + if ($current_sec eq $sections[0]) { + $output .= + ' <option value="'.$sections[0].'"'.$is_selected.'>'.$sections[0].'</option>'."\n"; + } else { + $output .= ' <option value="'.$sections[0].'" >'.$sections[0].'</option>'."\n"; + } } } else { $output = '<select name="currsec_'.$role.'" '; @@ -4215,13 +4284,23 @@ sub course_sections { if (scalar(@sections) < 4) { $multiple = scalar(@sections); } if ($role eq 'st') { $output .= '>'."\n". - ' <option value="">'.&mt('Select').'</option>'."\n". + ' <option value="">'.&mt('Select').'</option>'."\n"; + if ($current_sec eq 'none') { + $output .= + ' <option value=""'.$is_selected.'>'.&mt('No section')."</option>\n"; + } else { + $output .= ' <option value="">'.&mt('No section')."</option>\n"; + } } else { $output .= 'multiple="multiple" size="'.$multiple.'">'."\n"; } foreach my $sec (@sections) { - $output .= '<option value="'.$sec.'">'.$sec."</option>\n"; + if ($current_sec eq $sec) { + $output .= '<option value="'.$sec.'"'.$is_selected.'>'.$sec."</option>\n"; + } else { + $output .= '<option value="'.$sec.'">'.$sec."</option>\n"; + } } } $output .= '</select>';