Diff for /loncom/interface/lonuserutils.pm between versions 1.51 and 1.56

version 1.51, 2008/03/06 21:57:33 version 1.56, 2008/05/29 00:43:21
Line 42  use LONCAPA qw(:DEFAULT :match); Line 42  use LONCAPA qw(:DEFAULT :match);
 ###############################################################  ###############################################################
 # Drop student from all sections of a course, except optional $csec  # Drop student from all sections of a course, except optional $csec
 sub modifystudent {  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      # 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 one.  If $csec is defined, drop them from all other sections of
     # this course and add them to section $csec      # this course and add them to section $csec
Line 69  sub modifystudent { Line 69  sub modifystudent {
                         # dom  name  id mode pass     f     m     l     g                          # dom  name  id mode pass     f     m     l     g
                         ($udom,$unam,'',  '',  '',undef,undef,undef,undef,                          ($udom,$unam,'',  '',  '',undef,undef,undef,undef,
                          $section,time,undef,undef,$desiredhost,'','manual',                           $section,time,undef,undef,$desiredhost,'','manual',
                          '',$courseid);                           '',$courseid,'',$context);
                     $result .= $reply.':';                      $result .= $reply.':';
                 }                  }
             }              }
Line 129  sub modifyuserrole { Line 129  sub modifyuserrole {
         if ($role ne '') {          if ($role ne '') {
             $role =~ s/_/\//g;              $role =~ s/_/\//g;
             $roleresult = &Apache::lonnet::assignrole($udom,$uname,$scope,              $roleresult = &Apache::lonnet::assignrole($udom,$uname,$scope,
                                                       $role,$end,$start);                                                        $role,$end,$start,'',
                                                         '',$context);
         }          }
     }      }
     return ($userresult,$authresult,$roleresult,$idresult);      return ($userresult,$authresult,$roleresult,$idresult);
Line 924  sub setup_date_selectors { Line 925  sub setup_date_selectors {
   
   
 sub get_dates_from_form {  sub get_dates_from_form {
     my $startdate = &Apache::lonhtmlcommon::get_date_from_form('startdate');      my ($startname,$endname) = @_;
     my $enddate   = &Apache::lonhtmlcommon::get_date_from_form('enddate');      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'}) {      if ($env{'form.no_end_date'}) {
         $enddate = 0;          $enddate = 0;
     }      }
Line 1251  sub print_userlist { Line 1259  sub print_userlist {
     if ($env{'form.showrole'} eq 'Any') {      if ($env{'form.showrole'} eq 'Any') {
        $roleselected = ' selected="selected" ';          $roleselected = ' selected="selected" '; 
     }      }
     my ($role_select,$cnum,$cdom);      my ($cnum,$cdom);
     if ($context eq 'domain') {      $r->print(&role_filter($context));
         $role_select = &domain_roles_select();      if ($context eq 'course') {
         $r->print('<label>'.&mt('Role Type: [_1]',$role_select).'</label>');          ($cnum,$cdom) = &get_course_identity();
     } else {          $r->print(&section_group_filter($cnum,$cdom));
         $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(&section_group_filter($cnum,$cdom));  
         }  
     }      }
     if (!(($context eq 'domain') && ($env{'form.roletype'} eq 'course'))) {      if (!(($context eq 'domain') && ($env{'form.roletype'} eq 'course'))) {
         $r->print('&nbsp;'.&list_submit_button(&mt('Update Display')).          $r->print('&nbsp;'.&list_submit_button(&mt('Update Display')).
Line 1450  sub print_userlist { Line 1435  sub print_userlist {
               $env{'form.phase'}.'" /></form>');                $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 {  sub section_group_filter {
     my ($cnum,$cdom) = @_;      my ($cnum,$cdom) = @_;
     my @filters;      my @filters;
Line 1513  sub list_submit_button { Line 1533  sub list_submit_button {
   
 sub gather_userinfo {  sub gather_userinfo {
     my ($context,$format,$userlist,$indexhash,$userinfo,$rolehash,$permission) = @_;      my ($context,$format,$userlist,$indexhash,$userinfo,$rolehash,$permission) = @_;
       my $viewablesec;
       if ($context eq 'course') {
           $viewablesec = &viewable_section($permission);
       }
     foreach my $item (keys(%{$rolehash})) {      foreach my $item (keys(%{$rolehash})) {
         my %userdata;          my %userdata;
         if ($context eq 'author') {           if ($context eq 'author') { 
Line 1522  sub gather_userinfo { Line 1546  sub gather_userinfo {
             &build_user_record($context,\%userdata,$userinfo,$indexhash,              &build_user_record($context,\%userdata,$userinfo,$indexhash,
                                $item,$userlist);                                 $item,$userlist);
         } elsif ($context eq 'course') {          } elsif ($context eq 'course') {
             my $viewablesec = &viewable_section($permission);  
             ($userdata{'username'},$userdata{'domain'},$userdata{'role'},              ($userdata{'username'},$userdata{'domain'},$userdata{'role'},
              $userdata{'section'}) = split(/:/,$item,-1);               $userdata{'section'}) = split(/:/,$item,-1);
             ($userdata{'start'},$userdata{'end'})=split(/:/,$rolehash->{$item});              ($userdata{'start'},$userdata{'end'})=split(/:/,$rolehash->{$item});
Line 1840  sub process_date_info { Line 1863  sub process_date_info {
 }  }
   
 sub show_users_list {  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      # Variables for excel output
     my ($excel_workbook, $excel_sheet, $excel_filename,$row,$format);      my ($excel_workbook, $excel_sheet, $excel_filename,$row,$format);
Line 1855  sub show_users_list { Line 1881  sub show_users_list {
     } else {      } else {
         push(@sortable,'extent');          push(@sortable,'extent');
     }      }
       if ($mode eq 'pickauthor') {
           @sortable = ('username','fullname','email','status');
       }
     if (!grep(/^\Q$sortby\E$/,@sortable)) {      if (!grep(/^\Q$sortby\E$/,@sortable)) {
         $sortby = 'username';          $sortby = 'username';
     }      }
Line 1895  function photowindow(photolink) { Line 1924  function photowindow(photolink) {
 END  END
         }          }
     }      }
     if ($mode ne 'autoenroll') {      if ($mode ne 'autoenroll' && $mode ne 'pickauthor') {
         my $check_uncheck_js = &Apache::loncommon::check_uncheck_jscript();          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?');  
         my $multconfirm = &mt(' for multiple users?');  
         my $date_sec_selector = &date_section_javascript($context,$setting,$statusmode);          my $date_sec_selector = &date_section_javascript($context,$setting,$statusmode);
         my %lt = &Apache::lonlocal::texthash(           my $verify_action_js = &bulkaction_javascript($formname);
               acwi => 'Access will be set to start immediately',  
               asyo => 'as you did not select an end date in the pop-up window',  
               accw => 'Access will be set to continue indefinitely',  
               asyd => 'as you did not select an end date in the pop-up window',  
               sewi => "Sections will be switched to 'No section'",  
               ayes => "as you either selected the 'No section' option",  
               oryo => 'or you did not select a section in the pop-up window',  
               arol => 'A role with no section will be added',  
               swbs => 'Sections will be switched to:',  
               rwba => 'Roles will be added for section(s):',  
         );  
         $r->print(<<END);          $r->print(<<END);
   
 <script type="text/javascript" language="Javascript">  <script type="text/javascript" language="Javascript">
 $check_uncheck_js  $check_uncheck_js
   
 function verify_action (field) {  $verify_action_js
     var numchecked = 0;  
     var singconf = '$singconfirm';  
     var multconf = '$multconfirm';  
     if (field.length > 0) {  
         for (i = 0; i < field.length; i++) {  
             if (field[i].checked == true) {  
                numchecked ++;  
             }  
         }  
     } else {  
         if (field.checked == true) {  
             numchecked ++;  
         }  
     }  
     if (numchecked == 0) {  
         alert("$alert");  
     }   
     else {  
         var message = document.studentform.bulkaction[document.studentform.bulkaction.selectedIndex].text;  
         var choice = document.studentform.bulkaction[document.studentform.bulkaction.selectedIndex].value;  
         if (numchecked == 1) {   
             message += singconf;  
         }   
         else {  
             message += multconf;   
         }  
         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 == '')) {  
                 datemsg = "\\n$lt{'acwi'},\\n$lt{'asyo'}.\\n";  
             }  
             if ((document.studentform.enddate_month.value == '') &&  
                 (document.studentform.enddate_day.value  == '') &&  
                 (document.studentform.enddate_year.value == '')) {  
                 datemsg += "\\n$lt{'accw'},\\n$lt{'asyd'}.\\n";  
             }  
             if (datemsg != '') {  
                 message += "\\n"+datemsg;  
             }  
         }  
         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;  
             if (secshow == '') {  
                 if (rolefilter == 'st' || retained == 0 || retained == "") {  
                     message += "\\n\\n$lt{'sewi'},\\n$lt{'ayes'},\\n$lt{'oryo'}.\\n";   
                 } else {  
                     message += "\\n\\n$lt{'arol'}\\n$lt{'ayes'},\\n$lt{'oryo'}.\\n";  
                 }  
             } else {  
                 if (rolefilter == 'st' || retained == 0 || retained == "") {  
                     message += "\\n\\n$lt{'swbs'} "+secshow+".\\n";  
                 } else {  
                     message += "\\n\\n$lt{'rwba'} "+secshow+".\\n";  
                 }  
             }  
         }  
         if (confirm(message)) {  
             document.studentform.phase.value = 'bulkchange';  
             document.studentform.submit();  
         }  
     }  
 }  
   
 function username_display_launch(username,domain) {  function username_display_launch(username,domain) {
     var target;      var target;
     for (var i=0; i<document.studentform.usernamelink.length; i++) {      for (var i=0; i<document.$formname.usernamelink.length; i++) {
         if (document.studentform.usernamelink[i].checked) {          if (document.$formname.usernamelink[i].checked) {
             target = document.studentform.usernamelink[i].value;              target = document.$formname.usernamelink[i].value;
         }          }
     }      }
     if (target == 'modify') {      if (target == 'modify') {
         if (document.studentform.userwin.checked == true) {          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 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';              var options = 'height=600,width=800,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no';
             modifywin = window.open(url,'',options,1);              modifywin = window.open(url,'',options,1);
             modifywin.focus();              modifywin.focus();
             return;              return;
         } else {          } else {
             document.studentform.srchterm.value=username;              document.$formname.srchterm.value=username;
             document.studentform.srchdomain.value=domain;              document.$formname.srchdomain.value=domain;
             document.studentform.phase.value='get_user_info';              document.$formname.phase.value='get_user_info';
             document.studentform.action.value = 'singleuser';              document.$formname.action.value = 'singleuser';
             document.studentform.submit();              document.$formname.submit();
         }          }
     }      }
     if (target == 'aboutme') {      if (target == 'aboutme') {
         if (document.studentform.userwin.checked == true) {          if (document.$formname.userwin.checked == true) {
             var url = '/adm/'+domain+'/'+username+'/aboutme?popup=1';              var url = '/adm/'+domain+'/'+username+'/aboutme?popup=1';
             var options = 'height=600,width=800,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no';              var options = 'height=600,width=800,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no';
             aboutmewin = window.open(url,'',options,1);              aboutmewin = window.open(url,'',options,1);
Line 2045  END Line 1994  END
                        'clicker'    => "clicker id",                         'clicker'    => "clicker id",
                        'photo'      => "photo",                         'photo'      => "photo",
                        'extent'     => "extent",                         'extent'     => "extent",
                        'go'         => "go",  
                        'pr'         => "Proceed",                         'pr'         => "Proceed",
                        'ca'         => "check all",                         'ca'         => "check all",
                        'ua'         => "uncheck all",                         'ua'         => "uncheck all",
                        'ac'         => "Action to take for selected users",                         'ac'         => "Action to take for selected users",
                        'link'       => "Behavior of username links",                         'link'       => "Behavior of clickable username link for each user",
                        'aboutme'    => "Display a user's personal page",                         'aboutme'    => "Display a user's personal page",
                        'owin'       => "Open in a new window",                         'owin'       => "Open in a new window",
                        'modify'     => "Modify a user's information",                         'modify'     => "Modify a user's information",
Line 2060  END Line 2008  END
     } elsif ($context eq 'author') {      } elsif ($context eq 'author') {
         $lt{'extent'} = &mt('Author');           $lt{'extent'} = &mt('Author'); 
     }      }
     my @cols = ('username','domain','id','fullname');      my @cols;
     if ($context eq 'course') {      if ($mode eq 'pickauthor') {
         push(@cols,'section');          @cols = ('username','fullname','status','email');
     }      } else {
     if (!($context eq 'domain' && $env{'form.roletype'} eq 'course')) {           @cols = ('username','domain','id','fullname');
         push(@cols,('start','end'));          if ($context eq 'course') {
     }              push(@cols,'section');
     if ($env{'form.showrole'} eq 'Any' || $env{'form.showrole'} eq 'cr') {          }
         push(@cols,'role');          if (!($context eq 'domain' && $env{'form.roletype'} eq 'course')) { 
     }              push(@cols,('start','end'));
     if ($context eq 'domain' && ($env{'form.roletype'} eq 'author' ||          }
                                 $env{'form.roletype'} eq 'course')) {          if ($env{'form.showrole'} eq 'Any' || $env{'form.showrole'} eq 'cr') {
         push (@cols,'extent');              push(@cols,'role');
     }          }
     if (($statusmode eq 'Any') &&           if ($context eq 'domain' && ($env{'form.roletype'} eq 'author' ||
         (!($context eq 'domain' && $env{'form.roletype'} eq 'course'))) {                                      $env{'form.roletype'} eq 'course')) {
         push(@cols,'status');              push (@cols,'extent');
     }          }
     if ($context eq 'course') {          if (($statusmode eq 'Any') && 
         push(@cols,'groups');              (!($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'};      my $rolefilter = $env{'form.showrole'};
     if ($env{'form.showrole'} eq 'cr') {      if ($env{'form.showrole'} eq 'cr') {
Line 2093  END Line 2046  END
     if ($mode ne 'autoenroll') {      if ($mode ne 'autoenroll') {
         $results_description = &results_header_row($rolefilter,$statusmode,          $results_description = &results_header_row($rolefilter,$statusmode,
                                                    $context,$permission,$mode);                                                     $context,$permission,$mode);
         $r->print('<b>'.$results_description.'</b><br />');          $r->print('<b>'.$results_description.'</b><br /><br />');
     }      }
     my ($output,$actionselect,%canchange,%canchangesec);      my ($output,$actionselect,%canchange,%canchangesec);
     if ($mode eq 'html' || $mode eq 'view' || $mode eq 'autoenroll') {      if ($mode eq 'html' || $mode eq 'view' || $mode eq 'autoenroll' || $mode eq 'pickauthor') {
         if ($mode ne 'autoenroll') {          if ($mode ne 'autoenroll' && $mode ne 'pickauthor') {
             if ($permission->{'cusr'}) {              if ($permission->{'cusr'}) {
                 $actionselect = &select_actions($context,$setting,$statusmode);                  $actionselect = &select_actions($context,$setting,$statusmode,$formname);
             }              }
             $r->print(<<END);              $r->print(<<END);
 <input type="hidden" name="srchby"  value="uname" />  <input type="hidden" name="srchby"  value="uname" />
Line 2108  END Line 2061  END
 <input type="hidden" name="srchterm" value="" />  <input type="hidden" name="srchterm" value="" />
 <input type="hidden" name="srchdomain" value="" />   <input type="hidden" name="srchdomain" value="" /> 
 END  END
             $output = '<p>';  
             my @linkdests = ('aboutme');  
             if ($permission->{'cusr'}) {  
                 unshift (@linkdests,'modify');  
             }  
             $output .= '<span class="LC_nobreak">'.$lt{'link'}.':&nbsp;';  
             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.'>&nbsp;'.$lt{$item}.'</label>&nbsp;&nbsp;';  
             }  
             my $checkwin;  
             if ($env{'form.userwin'}) {   
                 $checkwin = 'checked = "checked"';   
             }  
             $output .= '&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" name="userwin" value="1" $checkwin />'.$lt{'owin'}.'</span><br />';  
             if ($actionselect) {              if ($actionselect) {
                 $output .= <<"END";                  $output .= <<"END";
 $lt{'ac'}:&nbsp;$actionselect <input type="button" value="$lt{'go'}" onclick="javascript:opendatebrowser(this.form,'studentform','go')" /></p>  <div class="LC_left_float"><fieldset><legend><b>$lt{'ac'}</b></legend>
 <p><input type="button" value="$lt{'ca'}" onclick="javascript:checkAll(document.studentform.actionlist)" /> &nbsp;  $actionselect
 <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)" />  <br/><br /><input type="button" value="$lt{'ca'}" onclick="javascript:checkAll(document.$formname.actionlist)" /> &nbsp;
   <input type="button" value="$lt{'ua'}" onclick="javascript:uncheckAll(document.$formname.actionlist)" /><br /><input type="button" value="$lt{'pr'}" onclick="javascript:verify_action('actionlist')" /></fieldset></div>
 END  END
                 my @allroles;                  my @allroles;
                 if ($env{'form.showrole'} eq 'Any') {                  if ($env{'form.showrole'} eq 'Any') {
Line 2176  END Line 2108  END
                     }                      }
                 }                  }
             }              }
               $output .= '<div class="LC_left_float"><fieldset><legend><b>'.$lt{'link'}.'</b></legend>'.
                          '<table><tr>';
               my @linkdests = ('aboutme');
               if ($permission->{'cusr'}) {
                   unshift (@linkdests,'modify');
               }
               $output .= '<td>';
               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 class="LC_nobreak"><label><input type="radio" name="usernamelink" value="'.$item.'"'.$checkedstr.'>&nbsp;'.$lt{$item}.'</label></span><br />';
               }
               my $checkwin;
               if ($env{'form.userwin'}) {
                   $checkwin = 'checked = "checked"';
               }
               $output .= '</td><td valign="top"><span class="LC_nobreak"><input type="checkbox" name="userwin" value="1" '.$checkwin.'/>'.$lt{'owin'}.'</span></td></tr></table></fieldset></div>';
         }          }
         $output .= "\n<p>\n".          $output .= "\n".'<div class="LC_clear_float_footer">&nbsp;</div>'."\n".
                   &Apache::loncommon::start_data_table().                    &Apache::loncommon::start_data_table().
                   &Apache::loncommon::start_data_table_header_row();                    &Apache::loncommon::start_data_table_header_row();
         if ($mode eq 'autoenroll') {          if ($mode eq 'autoenroll') {
             $output .= "              $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 {          } else {
             $output .= "\n".'<th>'.&mt('Count').'</th>'."\n";              if ($mode eq 'pickauthor') {
                   $output .= "\n".'<th>&nbsp;</th>'."\n";
               } else { 
                   $output .= "\n".'<th>'.&mt('Count').'</th>'."\n";
               }
             if ($actionselect) {              if ($actionselect) {
                 $output .= '<th>'.&mt('Select').'</th>'."\n";                  $output .= '<th>'.&mt('Select').'</th>'."\n";
             }              }
         }          }
         foreach my $item (@cols) {          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();          my %role_types = &role_type_names();
         if ($context eq 'course' && $mode ne 'autoenroll') {          if ($context eq 'course' && $mode ne 'autoenroll') {
Line 2206  END Line 2165  END
                     $clickerchg = 'off';                      $clickerchg = 'off';
                 }                  }
                 $output .= '    <th>'."\n".'     '.                  $output .= '    <th>'."\n".'     '.
                     '<a href="javascript:document.studentform.displayclickers.value='.                      '<a href="javascript:document.'.$formname.'.displayclickers.value='.
                       "'".$clickerchg."'".';document.studentform.submit();">'.                        "'".$clickerchg."'".';document.'.$formname.'.submit();">'.
                       $clicker_options{$clickerchg}.'</a>&nbsp;'.$lt{'clicker'}."\n".                        $clicker_options{$clickerchg}.'</a>&nbsp;'.$lt{'clicker'}."\n".
                       '    </th>'."\n";                        '    </th>'."\n";
   
Line 2222  END Line 2181  END
                         $photochg = 'off';                          $photochg = 'off';
                     }                      }
                     $output .= '    <th>'."\n".'     '.                      $output .= '    <th>'."\n".'     '.
                 '<a href="javascript:document.studentform.displayphotos.value='.                  '<a href="javascript:document.'.$formname.'.displayphotos.value='.
                       "'".$photochg."'".';document.studentform.submit();">'.                        "'".$photochg."'".';document.'.$formname.'.submit();">'.
                       $photo_options{$photochg}.'</a>&nbsp;'.$lt{'photo'}."\n".                        $photo_options{$photochg}.'</a>&nbsp;'.$lt{'photo'}."\n".
                       '    </th>'."\n";                        '    </th>'."\n";
                 }                  }
Line 2422  END Line 2381  END
         } else {          } else {
             $in{'end'} = &Apache::lonlocal::locallocaltime($in{'end'});              $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());              $r->print(&Apache::loncommon::start_data_table_row());
             my $checkval;              my $checkval;
             if ($mode eq 'autoenroll') {              if ($mode eq 'autoenroll') {
Line 2444  END Line 2403  END
                 }                  }
                 $r->print("<td>$cellentry</td>\n");                  $r->print("<td>$cellentry</td>\n");
             } else {              } else {
                 $r->print("<td>$rowcount</td>\n");                  if ($mode ne 'pickauthor') {  
                       $r->print("<td>$rowcount</td>\n");
                   }
                 if ($actionselect) {                  if ($actionselect) {
                     my $showcheckbox;                      my $showcheckbox;
                     if ($role =~ /^cr\//) {                      if ($role =~ /^cr\//) {
Line 2478  END Line 2439  END
                     } else {                      } else {
                         $r->print('<td>&nbsp;</td>');                          $r->print('<td>&nbsp;</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) {              foreach my $item (@cols) {
Line 2545  END Line 2508  END
             $row++;              $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 />');              $r->print(&Apache::loncommon::end_data_table().'<br />');
     } elsif ($mode eq 'excel') {      } elsif ($mode eq 'excel') {
         $excel_workbook->close();          $excel_workbook->close();
Line 2565  END Line 2528  END
     }      }
 }  }
   
   sub bulkaction_javascript {
       my ($formname,$caller) = @_;
       my $docstart = 'document';
       if ($caller eq 'popup') {
           $docstart = 'opener.document';
       }
       my %lt = &Apache::lonlocal::texthash(
                 acwi => 'Access will be set to start immediately',
                 asyo => 'as you did not select an end date in the pop-up window',
                 accw => 'Access will be set to continue indefinitely',
                 asyd => 'as you did not select an end date in the pop-up window',
                 sewi => "Sections will be switched to 'No section'",
                 ayes => "as you either selected the 'No section' option",
                 oryo => 'or you did not select a section in the pop-up window',
                 arol => 'A role with no section will be added',
                 swbs => 'Sections will be switched to:',
                 rwba => 'Roles will be added for section(s):',
               );
       my $alert = &mt("You must select at least one user by checking a user's 'Select' checkbox");
       my $noaction = &mt("You need to select an action to take for the user(s) you have selected"); 
       my $singconfirm = &mt(' for a single user?');
       my $multconfirm = &mt(' for multiple users?');
       my $output = <<"ENDJS";
   function verify_action (field) {
       var numchecked = 0;
       var singconf = '$singconfirm';
       var multconf = '$multconfirm';
       if ($docstart.$formname.elements[field].length > 0) {
           for (i=0; i<$docstart.$formname.elements[field].length; i++) {
               if ($docstart.$formname.elements[field][i].checked == true) {
                  numchecked ++;
               }
           }
       } else {
           if ($docstart.$formname.elements[field].checked == true) {
               numchecked ++;
           }
       }
       if (numchecked == 0) {
           alert("$alert");
           return;
       } else {
           var message = $docstart.$formname.bulkaction[$docstart.$formname.bulkaction.selectedIndex].text;
           var choice = $docstart.$formname.bulkaction[$docstart.$formname.bulkaction.selectedIndex].value;
           if (choice == '') {
               alert("$noaction");
               return;
           } else {
               if (numchecked == 1) {
                   message += singconf;
               } else {
                   message += multconf;
               }
   ENDJS
       if ($caller ne 'popup') {
           $output .= <<"NEWWIN";
               if (choice == 'chgdates' || choice == 'reenable' || choice == 'activate' || choice == 'chgsec') {
                   opendatebrowser(document.$formname,'$formname','go');
                   return;
   
               } else {
                   if (confirm(message)) {
                       document.$formname.phase.value = 'bulkchange';
                       document.$formname.submit();
                       return;
                   }
               }
   NEWWIN
       } else {
           $output .= <<"POPUP";
               if (choice == 'chgdates' || choice == 'reenable' || choice == 'activate') {
                   var datemsg = '';
                   if (($docstart.$formname.startdate_month.value == '') &&
                       ($docstart.$formname.startdate_day.value  == '') &&
                       ($docstart.$formname.startdate_year.value == '')) {
                       datemsg = "\\n$lt{'acwi'},\\n$lt{'asyo'}.\\n";
                   }
                   if (($docstart.$formname.enddate_month.value == '') &&
                       ($docstart.$formname.enddate_day.value  == '') &&
                       ($docstart.$formname.enddate_year.value == '')) {
                       datemsg += "\\n$lt{'accw'},\\n$lt{'asyd'}.\\n";
                   }
                   if (datemsg != '') {
                       message += "\\n"+datemsg;
                   }
               }
               if (choice == 'chgsec') {
                   var rolefilter = $docstart.$formname.showrole.options[$docstart.$formname.showrole.selectedIndex].value;
                   var retained =  $docstart.$formname.retainsec.value;
                   var secshow = $docstart.$formname.newsecs.value;
                   if (secshow == '') {
                       if (rolefilter == 'st' || retained == 0 || retained == "") {
                           message += "\\n\\n$lt{'sewi'},\\n$lt{'ayes'},\\n$lt{'oryo'}.\\n";
                       } else {
                           message += "\\n\\n$lt{'arol'}\\n$lt{'ayes'},\\n$lt{'oryo'}.\\n";
                       }
                   } else {
                       if (rolefilter == 'st' || retained == 0 || retained == "") {
                           message += "\\n\\n$lt{'swbs'} "+secshow+".\\n";
                       } else {
                           message += "\\n\\n$lt{'rwba'} "+secshow+".\\n";
                       }
                   }
               }
               if (confirm(message)) {
                   $docstart.$formname.phase.value = 'bulkchange';
                   $docstart.$formname.submit();
                   window.close();
               }
   POPUP
       }
       $output .= '
           }
       }
   }
   ';
       return $output;
   }
   
 sub print_username_link {  sub print_username_link {
     my ($mode,$in) = @_;      my ($mode,$in) = @_;
     my $output;      my $output;
Line 2588  sub role_type_names { Line 2670  sub role_type_names {
 }  }
   
 sub select_actions {  sub select_actions {
     my ($context,$setting,$statusmode) = @_;      my ($context,$setting,$statusmode,$formname) = @_;
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
                 revoke   => "Revoke user roles",                  revoke   => "Revoke user roles",
                 delete   => "Delete user roles",                  delete   => "Delete user roles",
Line 2649  sub select_actions { Line 2731  sub select_actions {
         }          }
     }      }
     if ($options) {      if ($options) {
         $output = '<select name="bulkaction" onchange="javascript:opendatebrowser(this.form,'."'studentform','change'".')" />'."\n".          $output = '<select name="bulkaction">'."\n".
                   '<option value="" selected="selected">'.                    '<option value="" selected="selected">'.
                   &mt('Please select').'</option>'."\n".$options."\n".'</select>';                    &mt('Please select').'</option>'."\n".$options."\n".'</select>';
         if ($choices{'dates'}) {          if ($choices{'dates'}) {
Line 2665  sub select_actions { Line 2747  sub select_actions {
                 '<input type="hidden" name="enddate_year" value="" />'."\n".                  '<input type="hidden" name="enddate_year" value="" />'."\n".
                 '<input type="hidden" name="enddate_hour" value="" />'."\n".                  '<input type="hidden" name="enddate_hour" value="" />'."\n".
                 '<input type="hidden" name="enddate_minute" value="" />'."\n".                  '<input type="hidden" name="enddate_minute" value="" />'."\n".
                 '<input type="hidden" name="enddate_second" value="" />'."\n";                  '<input type="hidden" name="enddate_second" value="" />'."\n".
                   '<input type="hidden" name="no_end_date" value="" />'."\n";
             if ($context eq 'course') {              if ($context eq 'course') {
                 $output .= '<input type="hidden" name="makedatesdefault" value="" />'."\n";                  $output .= '<input type="hidden" name="makedatesdefault" value="" />'."\n";
             }              }
Line 2691  sub date_section_javascript { Line 2774  sub date_section_javascript {
     $output .= <<"ENDONE";      $output .= <<"ENDONE";
     function opendatebrowser(callingform,formname,calledby) {      function opendatebrowser(callingform,formname,calledby) {
         var bulkaction = callingform.bulkaction.options[callingform.bulkaction.selectedIndex].value;          var bulkaction = callingform.bulkaction.options[callingform.bulkaction.selectedIndex].value;
         if (bulkaction == 'revoke' || bulkaction == 'delete' || bulkaction == '') {  
             if (calledby == 'go') {  
                 if (bulkaction == 'revoke') {  
                     alert("$nopopup{'revoke'}");  
                 }  
                 if (bulkaction == 'delete') {  
                     alert("$nopopup{'delete'}");   
                 }  
                 if (bulkaction == '') {  
                     alert("$nopopup{'none'}");  
                 }  
             }  
             return;  
         }  
         var url = '/adm/createuser?';          var url = '/adm/createuser?';
         var type = '';          var type = '';
         var showrole = callingform.showrole.options[callingform.showrole.selectedIndex].value;          var showrole = callingform.showrole.options[callingform.showrole.selectedIndex].value;
Line 2758  END Line 2827  END
         setSections(formname);          setSections(formname);
         if (seccheck == 'ok') {          if (seccheck == 'ok') {
             opener.document.$callingform.newsecs.value = formname.sections.value;              opener.document.$callingform.newsecs.value = formname.sections.value;
             window.close();  
         }          }
         return;  
 END  END
     } else {      } else {
         if ($context eq 'course') {          if ($context eq 'course') {
Line 2794  END Line 2861  END
     opener.document.$callingform.enddate_hour.value =  formname.enddate_hour.options[formname.enddate_hour.selectedIndex].value;      opener.document.$callingform.enddate_hour.value =  formname.enddate_hour.options[formname.enddate_hour.selectedIndex].value;
     opener.document.$callingform.enddate_minute.value =  formname.enddate_minute.value;      opener.document.$callingform.enddate_minute.value =  formname.enddate_minute.value;
     opener.document.$callingform.enddate_second.value = formname.enddate_second.value;      opener.document.$callingform.enddate_second.value = formname.enddate_second.value;
     window.close();      if (formname.no_end_date.checked) {
           opener.document.$callingform.no_end_date.value = '1';
       } else {
           opener.document.$callingform.no_end_date.value = '0';
       }
 END  END
     }      }
     $output .= '      my $verify_action_js = &bulkaction_javascript($callingform,'popup');
       $output .= <<"ENDJS";
       verify_action('actionlist');
 }  }
   
   $verify_action_js
   
 </script>  </script>
 ';  ENDJS
     my %lt = &Apache::lonlocal::texthash (      my %lt = &Apache::lonlocal::texthash (
                  chac => 'Access dates to apply for selected users',                   chac => 'Access dates to apply for selected users',
                  chse => 'Changes in section affiliation to apply to selected users',                   chse => 'Changes in section affiliation to apply to selected users',
Line 2857  END Line 2933  END
         $output .= $info.$secbox;          $output .= $info.$secbox;
     }      }
     $output .= '<p>'.      $output .= '<p>'.
 &mt('Use "Save" to update the main window with your selections.').'<br /><br />'.  '<input type="button" name="dateselection" value="'.&mt('Make changes').'" onclick="javascript:saveselections(this.form)" /></p>'."\n".
 '<input type="button" name="dateselection" value="'.&mt('Save').'" onclick="javascript:saveselections(this.form)" /></p>'."\n".  
 '</form>';  '</form>';
     return $output;      return $output;
 }  }
Line 3657  sub upfile_drop_add { Line 3732  sub upfile_drop_add {
                                 $sec = $secs[0];                                  $sec = $secs[0];
                             }                              }
                             &modifystudent($domain,$username,$cid,$sec,                              &modifystudent($domain,$username,$cid,$sec,
                                            $desiredhost);                                             $desiredhost,$context);
                             $roleresult =                              $roleresult =
                                 &Apache::lonnet::modifystudent                                  &Apache::lonnet::modifystudent
                                     ($domain,$username,$id,$amode,$password,                                      ($domain,$username,$id,$amode,$password,
                                      $fname,$mname,$lname,$gen,$sec,$enddate,                                       $fname,$mname,$lname,$gen,$sec,$enddate,
                                      $startdate,$env{'form.forceid'},                                       $startdate,$env{'form.forceid'},
                                      $desiredhost,$email,'manual','',$cid);                                       $desiredhost,$email,'manual','',$cid,
                                        '',$context);
                             $userresult = $roleresult;                              $userresult = $roleresult;
                         } else {                          } else {
                             if ($role ne '') {                               if ($role ne '') { 
Line 3969  sub update_user_list { Line 4045  sub update_user_list {
             $end = $now;              $end = $now;
             $type = 'manual';              $type = 'manual';
             $result =              $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') {          } elsif ($choice eq 'revoke') {
             # revoke or delete user role              # revoke or delete user role
             $end = $now;               $end = $now; 
             if ($role eq 'st') {              if ($role eq 'st') {
                 $result =                   $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 {              } else {
                 $result =                   $result = 
                     &Apache::lonnet::revokerole($udom,$uname,$scope,$role);                      &Apache::lonnet::revokerole($udom,$uname,$scope,$role,
                                                   '','',$context);
             }              }
         } elsif ($choice eq 'delete') {          } elsif ($choice eq 'delete') {
             if ($role eq 'st') {              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 =              $result =
                 &Apache::lonnet::assignrole($udom,$uname,$scope,$role,$now,                  &Apache::lonnet::assignrole($udom,$uname,$scope,$role,$now,
                                             $start,1);                                              $start,1,'',$context);
         } else {          } else {
             #reenable, activate, change access dates or change section              #reenable, activate, change access dates or change section
             if ($choice ne 'chgsec') {              if ($choice ne 'chgsec') {
Line 3995  sub update_user_list { Line 4072  sub update_user_list {
             }              }
             if ($choice eq 'reenable') {              if ($choice eq 'reenable') {
                 if ($role eq 'st') {                  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 {                  } else {
                     $result =                       $result = 
                         &Apache::lonnet::assignrole($udom,$uname,$scope,$role,$end,                          &Apache::lonnet::assignrole($udom,$uname,$scope,$role,$end,
                                                     $now);                                                      $now,'','',$context);
                 }                  }
             } elsif ($choice eq 'activate') {              } elsif ($choice eq 'activate') {
                 if ($role eq 'st') {                  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 {                  } else {
                     $result = &Apache::lonnet::assignrole($udom,$uname,$scope,$role,$end,                      $result = &Apache::lonnet::assignrole($udom,$uname,$scope,$role,$end,
                                             $now);                                              $now,'','',$context);
                 }                  }
             } elsif ($choice eq 'chgdates') {              } elsif ($choice eq 'chgdates') {
                 if ($role eq 'st') {                  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 {                  } else {
                     $result = &Apache::lonnet::assignrole($udom,$uname,$scope,$role,$end,                      $result = &Apache::lonnet::assignrole($udom,$uname,$scope,$role,$end,
                                                 $start);                                                  $start,'','',$context);
                 }                  }
             } elsif ($choice eq 'chgsec') {              } elsif ($choice eq 'chgsec') {
                 my (@newsecs,$revresult,$nochg,@retained);                  my (@newsecs,$revresult,$nochg,@retained);
Line 4029  sub update_user_list { Line 4106  sub update_user_list {
                         } else {                          } else {
                             $revresult =                              $revresult =
                                 &Apache::lonnet::revokerole($udom,$uname,                                  &Apache::lonnet::revokerole($udom,$uname,
                                                             $scope,$role);                                                              $scope,$role,
                                                               '','',$context);
                         }                           } 
                     } else {                      } else {
                         if (@newsecs > 0) {                          if (@newsecs > 0) {
Line 4038  sub update_user_list { Line 4116  sub update_user_list {
                             } else {                              } else {
                                 $revresult =                                  $revresult =
                                     &Apache::lonnet::revokerole($udom,$uname,                                      &Apache::lonnet::revokerole($udom,$uname,
                                                                 $scope,$role);                                                                  $scope,$role,
                                                                   '','',$context);
                             }                              }
                         } else {                          } else {
                             $revresult =                              $revresult =
                                 &Apache::lonnet::revokerole($udom,$uname,                                  &Apache::lonnet::revokerole($udom,$uname,
                                                             $scope,$role);                                                              $scope,$role,
                                                               '','',$context);
                         }                          }
                     }                      }
                 } else {                  } else {
Line 4058  sub update_user_list { Line 4138  sub update_user_list {
                     if (!$nochg) {                      if (!$nochg) {
                         if ($role eq 'st') {                          if ($role eq 'st') {
                             $result =                               $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 {                          } else {
                             my $newscope = $scopestem;                              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 {                  } else {
                     foreach my $newsec (@newsecs) {                       foreach my $newsec (@newsecs) { 
                         if (!grep(/^\Q$newsec\E$/,@retained)) {                          if (!grep(/^\Q$newsec\E$/,@retained)) {
                             if ($role eq 'st') {                              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 {                              } else {
                                 my $newscope = $scopestem;                                  my $newscope = $scopestem;
                                 if ($newsec ne '') {                                  if ($newsec ne '') {

Removed from v.1.51  
changed lines
  Added in v.1.56


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>