Diff for /loncom/interface/Attic/londropadd.pm between versions 1.167 and 1.179

version 1.167, 2007/08/28 13:00:45 version 1.179, 2012/04/24 21:05:15
Line 26 Line 26
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
 #  #
 ###############################################################  
 ##############################################################  =head1 NAME
   
   Apache::londropadd.pm
   
   =head1 SYNOPSIS
   
   drop & add students
   
   This is part of the LearningOnline Network with CAPA project
   described at http://www.lon-capa.org.
   
   =head1 SUBROUTINES
   
   =over
   
   =cut
   
 package Apache::londropadd;  package Apache::londropadd;
   
Line 42  use Apache::lonlocal; Line 57  use Apache::lonlocal;
 use Apache::longroup;  use Apache::longroup;
 use LONCAPA();  use LONCAPA();
   
 ###############################################################  
 ###############################################################  
 sub header {  sub header {
     my ($jscript,$loaditems) = @_;      my ($jscript,$loaditems) = @_;
     my $start_page;      my $start_page;
Line 59  $start_page Line 72  $start_page
 ENDHEAD  ENDHEAD
 }  }
   
 ###############################################################  =pod
 ###############################################################  
 # Drop student from all sections of a course, except optional $csec  =item domain_form()
 sub modifystudent {      
     my ($udom,$unam,$courseid,$csec,$desiredhost)=@_;      build a domain and server selection form
     # 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   =cut
     # this course and add them to section $csec  
     my $cdom = $env{'course.'.$courseid.'.domain'};  
     my $cnum = $env{'course.'.$courseid.'.num'};  
     my %roles = &Apache::lonnet::dump('roles',$udom,$unam);  
     my ($tmp) = keys(%roles);  
     # Bail out if we were unable to get the students roles  
     return "$1" if ($tmp =~ /^(con_lost|error|no_such_host)/i);  
     # Go through the roles looking for enrollment in this course  
     my $result = '';  
     foreach my $course (keys(%roles)) {  
         if ($course=~m{^/\Q$cdom\E/\Q$cnum\E(?:\/)*(?:\s+)*(\w+)*\_st$}) {  
             # We are in this course  
             my $section=$1;  
             $section='' if ($course eq "/$cdom/$cnum".'_st');  
             if (defined($csec) && $section eq $csec) {  
                 $result .= 'ok:';  
             } elsif ( ((!$section) && (!$csec)) || ($section ne $csec) ) {  
                 my (undef,$end,$start)=split(/\_/,$roles{$course});  
                 my $now=time;  
                 # if this is an active role  
                 if (!($start && ($now<$start)) || !($end && ($now>$end))) {  
                     my $reply=&Apache::lonnet::modifystudent  
                         # dom  name  id mode pass     f     m     l     g  
                         ($udom,$unam,'',  '',  '',undef,undef,undef,undef,  
                          $section,time,undef,undef,$desiredhost);  
                     $result .= $reply.':';  
                 }  
             }  
         }  
     }  
     if ($result eq '') {  
         $result = 'Unable to find section for this student';  
     } else {  
         $result =~ s/(ok:)+/ok/g;  
     }  
     return $result;  
 }  
   
 ###############################################################  
 ###############################################################  
 # build a domain and server selection form  
 sub domain_form {  sub domain_form {
     my ($defdom) = @_;      my ($defdom) = @_;
     # Set up domain and server selection forms      # Set up domain and server selection forms
Line 135  sub domain_form { Line 108  sub domain_form {
     return $result;      return $result;
 }  }
   
 ###############################################################  =pod
 ###############################################################  
 #  Menu Phase One  =item print_main_menu()
   
       Menu Phase One
   
   =cut
   
 sub print_main_menu {  sub print_main_menu {
     my ($r,$permission)=@_;      my ($r,$permission)=@_;
     #      #
Line 179  sub print_main_menu { Line 157  sub print_main_menu {
           { text => 'Create a new group',            { text => 'Create a new group',
             help => 'Course_Create_Group',              help => 'Course_Create_Group',
             permission => $permission->{'grp_manage'},              permission => $permission->{'grp_manage'},
             url => '/adm/coursegroups?refpage=enrl&action=create',              url => '/adm/coursegroups?refpage=enrl&amp;action=create',
             },              },
           { text => 'Modify an existing group',            { text => 'Modify an existing group',
             help => 'Course_Modify_Group',              help => 'Course_Modify_Group',
             permission => $permission->{'grp_manage'},              permission => $permission->{'grp_manage'},
             url => '/adm/coursegroups?refpage=enrl&action=modify',              url => '/adm/coursegroups?refpage=enrl&amp;action=modify',
             },              },
           { text => 'Delete an existing group',            { text => 'Delete an existing group',
             help => 'Course_Delete_Group',              help => 'Course_Delete_Group',
             permission => $permission->{'grp_manage'},              permission => $permission->{'grp_manage'},
             url => '/adm/coursegroups?refpage=enrl&action=delete',              url => '/adm/coursegroups?refpage=enrl&amp;action=delete',
             },              },
           { text => 'Re-enable a deleted group',            { text => 'Re-enable a deleted group',
             help => 'Course_Reenable_Group',              help => 'Course_Reenable_Group',
             permission => $permission->{'grp_manage'},              permission => $permission->{'grp_manage'},
             url => '/adm/coursegroups?refpage=enrl&action=reenable',              url => '/adm/coursegroups?refpage=enrl&amp;action=reenable',
             },              },
           { text => 'Enter an existing group',            { text => 'Enter an existing group',
             help => 'Course_Display_Group',              help => 'Course_Display_Group',
             permission => $permission->{'grp_view'},              permission => $permission->{'grp_view'},
             url => '/adm/coursegroups?refpage=enrl&action=view',              url => '/adm/coursegroups?refpage=enrl&amp;action=view',
             },              },
           );            );
     my $menu_html = '';      my $menu_html = '';
Line 224  sub print_main_menu { Line 202  sub print_main_menu {
     return;      return;
 }  }
   
 ###############################################################  
 ###############################################################  
 sub hidden_input {  sub hidden_input {
     my ($name,$value) = @_;      my ($name,$value) = @_;
     return '<input type="hidden" name="'.$name.'" value="'.$value.'" />'."\n";      return '<input type="hidden" name="'.$name.'" value="'.$value.'" />'."\n";
 }  }
   
   
   
 sub print_upload_manager_header {  sub print_upload_manager_header {
     my ($r,$datatoken,$distotal,$krbdefdom)=@_;      my ($r,$datatoken,$distotal,$krbdefdom)=@_;
     my $javascript;      my $javascript;
Line 262  sub print_upload_manager_header { Line 242  sub print_upload_manager_header {
         $password_choice = 'int';                  $password_choice = 'int';        
     }      }
     #      #
     my $javascript_validations=&javascript_validations('auth',$krbdefdom,      my $javascript_validations = 
                                     $password_choice);          &javascript_validations('auth',$krbdefdom,$password_choice,undef,
                                   $env{'request.role.domain'});
     my $checked=(($env{'form.noFirstLine'})?' checked="checked" ':'');      my $checked=(($env{'form.noFirstLine'})?' checked="checked" ':'');
     $r->print('<h3>'.&mt('Uploading Class List')."</h3>\n".      $r->print('<h3>'.&mt('Uploading Class List')."</h3>\n".
               "<hr>\n".                "<hr>\n".
Line 290  sub print_upload_manager_header { Line 271  sub print_upload_manager_header {
               $javascript."\n".$javascript_validations.'</script>');                $javascript."\n".$javascript_validations.'</script>');
 }  }
   
 ###############################################################  
 ###############################################################  
   
   
 sub javascript_validations {  sub javascript_validations {
     my ($mode,$krbdefdom,$curr_authtype,$curr_authfield)=@_;      my ($mode,$krbdefdom,$curr_authtype,$curr_authfield,$domain)=@_;
     my $authheader;      my $authheader;
     if ($mode eq 'auth') {      if ($mode eq 'auth') {
         my %param = ( formname => 'studentform',          my %param = ( formname => 'studentform',
Line 302  sub javascript_validations { Line 285  sub javascript_validations {
         $authheader = &Apache::loncommon::authform_header(%param);          $authheader = &Apache::loncommon::authform_header(%param);
     } elsif ($mode eq 'createcourse') {      } elsif ($mode eq 'createcourse') {
         my %param = ( formname => 'ccrs',          my %param = ( formname => 'ccrs',
                   kerb_def_dom => $krbdefdom,                        kerb_def_dom => $krbdefdom,
                       curr_authtype => $curr_authtype );                        curr_authtype => $curr_authtype );
         $authheader = &Apache::loncommon::authform_header(%param);          $authheader = &Apache::loncommon::authform_header(%param);
     } elsif ($mode eq 'modifycourse') {      } elsif ($mode eq 'modifycourse') {
Line 323  sub javascript_validations { Line 306  sub javascript_validations {
          name     => 'The optional name field was not specified.',           name     => 'The optional name field was not specified.',
          snum     => 'The optional student number field was not specified.',           snum     => 'The optional student number field was not specified.',
          section  => 'The optional section field was not specified.',            section  => 'The optional section field was not specified.', 
          email    => 'The optional email address field was not specified.',           email    => 'The optional e-mail address field was not specified.',
          continue => 'Continue enrollment?',           continue => 'Continue enrollment?',
          );           );
           
Line 331  sub javascript_validations { Line 314  sub javascript_validations {
     my $function_name =(<<END);      my $function_name =(<<END);
 function verify_message (vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail) {  function verify_message (vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail) {
 END  END
       my ($authnum,%can_assign) =  &Apache::loncommon::get_assignable_auth($domain);
     my $auth_checks;      my $auth_checks;
     if ($mode eq 'createcourse') {      if ($mode eq 'createcourse') {
         $auth_checks .= (<<END);          $auth_checks .= (<<END);
Line 345  END Line 329  END
         $auth_checks .= (<<END);          $auth_checks .= (<<END);
     var foundatype=0;      var foundatype=0;
     if (founduname==0) {      if (founduname==0) {
  alert('$alert{'username'}');          alert('$alert{'username'}');
         return;          return;
     }      }
   
   END
           if ($authnum > 1) {
               $auth_checks .= (<<END);
     // alert('current.radiovalue = '+current.radiovalue);      // alert('current.radiovalue = '+current.radiovalue);
     if (current.radiovalue == null || current.radiovalue == '' || current.radiovalue == 'nochange') {      if (current.radiovalue == null || current.radiovalue == '' || current.radiovalue == 'nochange') {
         // They did not check any of the login radiobuttons.          // They did not check any of the login radiobuttons.
Line 355  END Line 343  END
         return;          return;
     }      }
 END  END
           }
     }      }
     if ($mode eq 'createcourse') {      if ($mode eq 'createcourse') {
         $auth_checks .= "          $auth_checks .= "
Line 416  END Line 405  END
 }  }
 END  END
     } else {      } else {
         $section_checks = &section_check_js();          $section_checks = &Apache::lonuserutils::section_check_js();
         $optional_checks = (<<END);          $optional_checks = (<<END);
     var message='';      var message='';
     if (foundname==0) {       if (foundname==0) { 
Line 464  END Line 453  END
     return $result;      return $result;
 }  }
   
 ###############################################################  
 ###############################################################  
   
 sub upload_manager_javascript_forward_associate {  sub upload_manager_javascript_forward_associate {
     return(<<ENDPICK);      return(<<ENDPICK);
 function verify(vf,sec_caller) {  function verify(vf,sec_caller) {
Line 557  function clearpwd(vf) { Line 547  function clearpwd(vf) {
 ENDPICK  ENDPICK
 }  }
   
 ###############################################################  
 ###############################################################  
   
 sub upload_manager_javascript_reverse_associate {  sub upload_manager_javascript_reverse_associate {
     return(<<ENDPICK);      return(<<ENDPICK);
 function verify(vf,sec_caller) {  function verify(vf,sec_caller) {
Line 612  function clearpwd(vf) { Line 603  function clearpwd(vf) {
 ENDPICK  ENDPICK
 }  }
   
 ###############################################################  
 ###############################################################  
   
 sub print_upload_manager_footer {  sub print_upload_manager_footer {
     my ($r,$i,$keyfields,$defdom,$today,$halfyear)=@_;      my ($r,$i,$keyfields,$defdom,$today,$halfyear)=@_;
   
Line 666  sub print_upload_manager_footer { Line 658  sub print_upload_manager_footer {
     return;      return;
 }  }
   
 ###############################################################  
 ###############################################################  
   
 sub print_upload_manager_form {  sub print_upload_manager_form {
     my $r=shift;      my $r=shift;
   
Line 721  sub print_upload_manager_form { Line 714  sub print_upload_manager_form {
              ['id',   &mt('ID/Student Number'),$env{'form.id_choice'}],               ['id',   &mt('ID/Student Number'),$env{'form.id_choice'}],
              ['sec',  &mt('Section'),          $env{'form.sec_choice'}],               ['sec',  &mt('Section'),          $env{'form.sec_choice'}],
              ['ipwd', &mt('Initial Password'),$env{'form.ipwd_choice'}],               ['ipwd', &mt('Initial Password'),$env{'form.ipwd_choice'}],
              ['email',&mt('EMail Address'),   $env{'form.email_choice'}]);               ['email',&mt('E-mail Address'),   $env{'form.email_choice'}]);
  if ($env{'form.upfile_associate'} eq 'reverse') {   if ($env{'form.upfile_associate'} eq 'reverse') {
     &Apache::loncommon::csv_print_samples($r,\@records);      &Apache::loncommon::csv_print_samples($r,\@records);
     $i=&Apache::loncommon::csv_print_select_table($r,\@records,      $i=&Apache::loncommon::csv_print_select_table($r,\@records,
Line 741  sub print_upload_manager_form { Line 734  sub print_upload_manager_form {
     &print_upload_manager_footer($r,$i,$keyfields,$defdom,$today,$halfyear);      &print_upload_manager_footer($r,$i,$keyfields,$defdom,$today,$halfyear);
 }  }
   
 ###############################################################  
 ###############################################################  
   
   
 sub enroll_single_student {  sub enroll_single_student {
     my ($r,$srcharray) = @_;       my ($r,$srcharray) = @_; 
     # Remove non alphanumeric values from section      # Remove non alphanumeric values from section
Line 752  sub enroll_single_student { Line 747  sub enroll_single_student {
     # in the course is entirely separate from the action of enrolling the      # in the course is entirely separate from the action of enrolling the
     # student.  Also, a failure in setting the dates as default is not fatal      # student.  Also, a failure in setting the dates as default is not fatal
     # to the process of enrolling / modifying a student.      # to the process of enrolling / modifying a student.
     my ($startdate,$enddate) = &get_dates_from_form();      my ($startdate,$enddate) = &Apache::lonuserutils::get_dates_from_form();
     if ($env{'form.makedatesdefault'}) {      if ($env{'form.makedatesdefault'}) {
         $r->print(&make_dates_default($startdate,$enddate));          $r->print(&Apache::lonuserutils::make_dates_default($startdate,
                                                               $enddate));
     }      }
   
     $r->print('<h3>'.&mt('Enrolling Student').'</h3>');      $r->print('<h3>'.&mt('Enrolling Student').'</h3>');
Line 799  sub enroll_single_student { Line 795  sub enroll_single_student {
                                                    $env{'form.lcdomain'});                                                     $env{'form.lcdomain'});
         if ((($amode) && ($genpwd)) || ($home ne 'no_host')) {          if ((($amode) && ($genpwd)) || ($home ne 'no_host')) {
             # Clean out any old roles the student has in this class.              # Clean out any old roles the student has in this class.
             &modifystudent($env{'form.lcdomain'},$env{'form.cuname'},              &Apache::lonuserutils::modifystudent($env{'form.lcdomain'},$env{'form.cuname'},
                            $env{'request.course.id'},$env{'form.csec'},                             $env{'request.course.id'},$env{'form.csec'},
                             $desiredhost);                              $desiredhost);
             my $login_result = &Apache::lonnet::modifystudent              my $login_result = &Apache::lonnet::modifystudent
Line 953  sub make_dates_default { Line 949  sub make_dates_default {
     return $result;      return $result;
 }  }
   
 ##  =pod
 ## Single student enrollment routines (some of them)  
 ##  =item get_student_username_domain_form()
       
       Single student enrollment routines (some of them)
   
   =cut
   
 sub get_student_username_domain_form {  sub get_student_username_domain_form {
     my ($r,$elements,$response,$srch,$forcenewuser) =  @_;      my ($r,$elements,$response,$srch,$forcenewuser) =  @_;
     my $loaditems = {      my $loaditems = {
Line 984  sub get_student_username_domain_form { Line 985  sub get_student_username_domain_form {
 $jscript  $jscript
 <h3>$lt{'eos'}</h3>  <h3>$lt{'eos'}</h3>
 END  END
       $r->print($response);
     $r->print(&single_user_entry_form($defdom,$srch,$forcenewuser));      $r->print(&single_user_entry_form($defdom,$srch,$forcenewuser));
     return;      return;
 }  }
Line 1057  sub print_enroll_single_student_form { Line 1059  sub print_enroll_single_student_form {
         # Set up authentication forms          # Set up authentication forms
         my ($krbdef,$krbdefdom) =          my ($krbdef,$krbdefdom) =
             &Apache::loncommon::get_kerberos_defaults($ccdomain);              &Apache::loncommon::get_kerberos_defaults($ccdomain);
         $javascript_validations=&javascript_validations('auth',$krbdefdom);          $javascript_validations = 
               &Apache::lonuserutils::javascript_validations('auth',$krbdefdom,
                                                         undef,undef,$ccdomain);
         my %param = ( formname => 'document.studentform',          my %param = ( formname => 'document.studentform',
                       kerb_def_dom => $krbdefdom,                        kerb_def_dom => $krbdefdom,
                       kerb_def_auth => $krbdef                        kerb_def_auth => $krbdef
Line 1079  sub print_enroll_single_student_form { Line 1083  sub print_enroll_single_student_form {
         #          #
         #          #
  my %lt=&Apache::lonlocal::texthash(   my %lt=&Apache::lonlocal::texthash(
        'udf'  => "User Data for",         'udf'  => "Personal Data",
                        'fn'   => "First Name",                         'fn'   => "First Name",
                        'mn'   => "Middle Name",                         'mn'   => "Middle Name",
                        'ln'   => "Last Name",                         'ln'   => "Last Name",
                        'gen'  => "Generation",                         'gen'  => "Generation",
                        'hs'   => "Home Server",                         'hs'   => "Home Server",
                        'pswd' => "Password",                         'pswd' => "Login Data",
        'psam' => "Please select an authentication mechanism",         'psam' => "Please select an authentication mechanism",
                        'mail' => "Email Address"                         'mail' => "E-mail Address"
    );     );
  my $authhelp=&Apache::loncommon::help_open_topic('Auth_Options');   my $authhelp=&Apache::loncommon::help_open_topic('Auth_Options');
         $user_data_html = <<END;          $user_data_html = <<END;
Line 1108  sub print_enroll_single_student_form { Line 1112  sub print_enroll_single_student_form {
 </table>  </table>
 <h3>$lt{'pswd'}</h3>  <h3>$lt{'pswd'}</h3>
 $lt{'psam'}$authhelp  $lt{'psam'}$authhelp
 <table>  
 <p>  <p>
 $krbform  
 <br />  
 $intform  
 <br />  
 $locform  
 </p>  
 END  END
           if ($krbform ne '') {
               $user_data_html .= $krbform.'<br />';
           }
           if ($intform ne '') {
               $user_data_html .= $intform.'<br />';
           }
           if ($locform ne '') {
               $user_data_html .= $locform.'<br />';
           }
           $user_data_html .= "\n</p>\n"
     } else {      } else {
         # User already exists.  Do not worry about authentication          # User already exists.  Do not worry about authentication
         my %uenv = &Apache::lonnet::dump('environment',$ccdomain,$ccuname);          my %uenv = &Apache::lonnet::dump('environment',$ccdomain,$ccuname);
         $javascript_validations = &javascript_validations('noauth');          $javascript_validations = &Apache::lonuserutils::javascript_validations('noauth');
  my %lt=&Apache::lonlocal::texthash(   my %lt=&Apache::lonlocal::texthash(
        'udf'  => "User Data for",         'udf'  => "User Data for",
                        'fn'   => "First Name",                         'fn'   => "First Name",
                        'mn'   => "Middle Name",                         'mn'   => "Middle Name",
                        'ln'   => "Last Name",                         'ln'   => "Last Name",
                        'gen'  => "Generation",                         'gen'  => "Generation",
                        'mail' => "Email Address",                         'mail' => "E-mail Address",
    );     );
         $user_data_html = <<END;          $user_data_html = <<END;
 <h3>$lt{'udf'} $ccuname:$ccdomain</h3>  <h3>$lt{'udf'} $ccuname:$ccdomain</h3>
Line 1146  END Line 1153  END
 </table>  </table>
 END  END
     }      }
     my $date_table = &date_setting_table();      my $date_table = &Apache::lonuserutils::date_setting_table();
         # Print it all out          # Print it all out
     my %lt=&Apache::lonlocal::texthash(      my %lt=&Apache::lonlocal::texthash(
    'cd'   => "Course Data",     'cd'   => "Course Data",
Line 1235  END Line 1242  END
     return;      return;
 }  }
   
 # ========================================================= Menu Phase Two Drop  =pod
   
   =item print_drop_menu()
   
       Menu Phase Two Drop
   
   =cut
   
 sub print_drop_menu {  sub print_drop_menu {
     my $r=shift;      my $r=shift;
     $r->print("<h3>".&mt('Drop Students')."</h3>");      $r->print("<h3>".&mt('Drop Students')."</h3>");
Line 1250  sub print_drop_menu { Line 1264  sub print_drop_menu {
     return;      return;
 }  }
   
 # ============================================== view classlist  
   =pod
   
   =item print_html_classlist()
   
       view classlist
   
   =cut
   
 sub print_html_classlist {  sub print_html_classlist {
     my ($r,$mode,$permission) = @_;      my ($r,$mode,$permission) = @_;
     if (! exists($env{'form.sortby'})) {      if (! exists($env{'form.sortby'})) {
Line 1340  sub print_html_classlist { Line 1362  sub print_html_classlist {
     }      }
 }  }
   
 # =================================================== Show student list to drop  
   =pod
   
   =item show_class_list()
   
       Show student list to drop
   
   =cut
   
 sub show_class_list {  sub show_class_list {
     my ($r,$mode,$linkto,$statusmode,$classlist,$keylist)=@_;      my ($r,$mode,$linkto,$statusmode,$classlist,$keylist)=@_;
     my $cid=$env{'request.course.id'};      my $cid=$env{'request.course.id'};
Line 1364  sub show_class_list { Line 1394  sub show_class_list {
     }      }
     my $displayphotos = $env{'form.displayphotos'};      my $displayphotos = $env{'form.displayphotos'};
   
       if (! exists($env{'form.displayclickers'})) {
           $env{'form.displayclickers'} = 'off';
       }
       my $displayclickers = $env{'form.displayclickers'};
   
     # Print out header       # Print out header 
     unless ($mode eq 'autoenroll') {      unless ($mode eq 'autoenroll') {
         $r->print(<<END);          $r->print(<<END);
Line 1373  END Line 1408  END
     $r->print(<<END);      $r->print(<<END);
 <input type="hidden" name="sortby" value="$sortby" />  <input type="hidden" name="sortby" value="$sortby" />
 <input type="hidden" name="displayphotos" value="$displayphotos" />  <input type="hidden" name="displayphotos" value="$displayphotos" />
   <input type="hidden" name="displayclickers" value="$displayclickers" />
 END  END
     if ($mode eq 'html' || $mode eq 'view' || $mode eq 'autoenroll') {      if ($mode eq 'html' || $mode eq 'view' || $mode eq 'autoenroll') {
         if ($linkto eq 'aboutme') {          if ($linkto eq 'aboutme') {
Line 1389  END Line 1425  END
                                            'start'  => "start date",                                             'start'  => "start date",
                                            'end'    => "end date",                                             'end'    => "end date",
                                            'type'   => "enroll type/action",                                             'type'   => "enroll type/action",
    'email'  => "email address",     'email'  => "e-mail address",
                                              'clicker'=> "clicker id",
                                            'photo'  => "photo",                                             'photo'  => "photo",
    );     );
         unless ($mode eq 'autoenroll') {          unless ($mode eq 'autoenroll') {
Line 1446  function photowindow(photolink) { Line 1483  function photowindow(photolink) {
        <a href="javascript:document.studentform.sortby.value='email';document.studentform.submit();">$lt{'email'}</a>         <a href="javascript:document.studentform.sortby.value='email';document.studentform.submit();">$lt{'email'}</a>
     </th>      </th>
 END  END
   
   # Clicker display on or off?
   
           my %clicker_options = &Apache::lonlocal::texthash(
                                                             'on' => 'Show',
                                                             'off' => 'Hide',
                                                            );
           my $clickerchg = 'on';
           if ($displayclickers eq 'on') {
               $clickerchg = 'off';
           }
           $r->print('    <th>'."\n".'     '.
               '<a href="javascript:document.studentform.displayclickers.value='.
                         "'".$clickerchg."'".';document.studentform.submit();">'.
                         $clicker_options{$clickerchg}.'</a>&nbsp;'.$lt{'clicker'}."\n".
                         '    </th>'."\n");
   
   # Photo display on or off?
         if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) {          if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) {
             my %photo_options = &Apache::lonlocal::texthash(              my %photo_options = &Apache::lonlocal::texthash(
                                                             'on' => 'Show',                                                              'on' => 'Show',
Line 1462  END Line 1517  END
                       '    </th>'."\n");                        '    </th>'."\n");
         }          }
         $r->print("  </tr>\n");          $r->print("  </tr>\n");
   
   # Done with the HTML header line
   
     } elsif ($mode eq 'csv') {      } elsif ($mode eq 'csv') {
  #   #
  # Open a file   # Open a file
Line 1470  END Line 1528  END
             time.'_'.rand(1000000000).'.csv';              time.'_'.rand(1000000000).'.csv';
  unless ($CSVfile = Apache::File->new('>/home/httpd'.$CSVfilename)) {   unless ($CSVfile = Apache::File->new('>/home/httpd'.$CSVfilename)) {
     $r->log_error("Couldn't open $CSVfilename for output $!");      $r->log_error("Couldn't open $CSVfilename for output $!");
     $r->print("Problems occured in writing the csv file.  ".      $r->print(&mt('Problems occurred in writing the csv file. '
       "This error has been logged.  ".                           .'This error has been logged. '
       "Please alert your LON-CAPA administrator.");                           .'Please alert your LON-CAPA administrator.'));
     $CSVfile = undef;      $CSVfile = undef;
  }   }
  #   #
Line 1514  END Line 1572  END
                                       "active groups","email address"],                                        "active groups","email address"],
                             $format->{'bold'});                              $format->{'bold'});
     }      }
   
   # Done with header lines in all formats
   
     #      #
     # Sort the students      # Sort the students
     my %index;      my %index;
Line 1557  END Line 1618  END
   
  my %emails   = &Apache::loncommon::getemails($username,$domain);   my %emails   = &Apache::loncommon::getemails($username,$domain);
  my $email;   my $email;
  foreach my $type ('critnotification', 'permanentemail',   if ($emails{'permanentemail'} =~ /\S/) {
   'notification') {      $email = $emails{'permanentemail'};
     if ($emails{$type} =~ /\S/) {  
  $email = $emails{$type};  
  last;  
     }  
  }   }
   
         if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll') {          if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll') {
Line 1626  END Line 1683  END
     <td>$active_groups</td>      <td>$active_groups</td>
     <td>$email</td>      <td>$email</td>
 END  END
   
   # Clickers
               if ($displayclickers eq 'on') {
                  my $clickers =
                  (&Apache::lonnet::userenvironment($domain,$username,'clickers'))[1];
                  if ($clickers!~/\w/) { $clickers='-'; }
                  $r->print('<td>'.$clickers.'</td>');
               } else {
                   $r->print('    <td>&nbsp;</td>  ');
               }
   
   # Photos
   
             if ($env{'course.'.$env{'request.course.id'}.              if ($env{'course.'.$env{'request.course.id'}.
  '.internal.showphoto'}) {   '.internal.showphoto'}) {
                 if ($displayphotos eq 'on') {                  if ($displayphotos eq 'on') {
Line 1702  END Line 1772  END
 }  }
   
   
 #  =pod
 # print out form for modification of a single students data  
 #  =item print_modify_student_form()
   
       print out form for modification of a single students data
   
   =cut
   
 sub print_modify_student_form {  sub print_modify_student_form {
     my $r = shift();      my $r = shift();
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
Line 1715  sub print_modify_student_form { Line 1790  sub print_modify_student_form {
     # determine the students name information      # determine the students name information
     my %info=&Apache::lonnet::get('environment',      my %info=&Apache::lonnet::get('environment',
                                   ['firstname','middlename',                                    ['firstname','middlename',
                                    'lastname','generation','id'],                                     'lastname','generation','id',
                                   $sdom, $sname);                                     'permanentemail'], $sdom, $sname);
     my ($tmp) = keys(%info);      my ($tmp) = keys(%info);
     if ($tmp =~ /^(con_lost|error|no_such_host)/i) {      if ($tmp =~ /^(con_lost|error|no_such_host)/i) {
         $r->print('<font color="#ff0000" size="+2">'.&mt('Error').'</font>'.          $r->print('<font color="#ff0000" size="+2">'.&mt('Error').'</font>'.
Line 1755  sub print_modify_student_form { Line 1830  sub print_modify_student_form {
                 &Apache::lonlocal::locallocaltime($endtime)).'<br />';                  &Apache::lonlocal::locallocaltime($endtime)).'<br />';
   
     }      }
     my $date_table = &date_setting_table($starttime,$endtime);      my $date_table = 
           &Apache::lonuserutils::date_setting_table($starttime,$endtime);
     #      #
     if (! exists($env{'form.Status'}) ||       if (! exists($env{'form.Status'}) || 
         $env{'form.Status'} !~ /^(Any|Expired|Active|Future)$/) {          $env{'form.Status'} !~ /^(Any|Expired|Active|Future)$/) {
Line 1770  sub print_modify_student_form { Line 1846  sub print_modify_student_form {
                    'mn'    => "Middle",                     'mn'    => "Middle",
                    'ln'    => "Last",                     'ln'    => "Last",
                    'gen'   => "Generation",                     'gen'   => "Generation",
                      'email' => "E-mail address",
                    'sid'   => "Student ID",                     'sid'   => "Student ID",
                    'disn'  => "Disable ID/Student Number Safeguard and Force Change of Conflicting IDs (only do if you know what you are doing)",                     'disn'  => "Disable ID/Student Number Safeguard and Force Change of Conflicting IDs (only do if you know what you are doing)",
                    'sec'   => "Section",                     'sec'   => "Section",
                    'sm'    => "Submit Modifications",                     'sm'    => "Submit Modifications",
        );         );
 # Check if section name is valid  # Check if section name is valid
     my $section_check = &section_check_js();      my $section_check = &Apache::lonuserutils::section_check_js();
     $r->print(<<"END");      $r->print(<<"END");
 <script type="text/javascript">  <script type="text/javascript">
 $section_check  $section_check
Line 1799  $lt{'odcc'} Line 1876  $lt{'odcc'}
 <input type="hidden" name="state"   value="done" />  <input type="hidden" name="state"   value="done" />
 <input type="hidden" name="sortby"  value="$sortby" />  <input type="hidden" name="sortby"  value="$sortby" />
 <input type="hidden" name="Status"  value="$env{'form.Status'}" />  <input type="hidden" name="Status"  value="$env{'form.Status'}" />
 <h2>$lt{'mef'} $info{'firstname'} $info{'middlename'}   <h3>$lt{'mef'} $info{'firstname'} $info{'middlename'} 
 $info{'lastname'} $info{'generation'}, $sname:$sdom</h2>  $info{'lastname'} $info{'generation'}, $sname:$sdom</h3>
 <p>  <p>
 <b>$lt{'sn'}</b>  <b>$lt{'sn'}</b>
 <table>  <table>
Line 1812  $info{'lastname'} $info{'generation'}, $ Line 1889  $info{'lastname'} $info{'generation'}, $
 <input type="text" name="generation" value="$info{'generation'}" /></td></tr>  <input type="text" name="generation" value="$info{'generation'}" /></td></tr>
 </table>  </table>
 </p><p>  </p><p>
   <b>$lt{'email'}</b>: <input type="text" name="permanentemail" value="$info{'permanentemail'}" size="30" />
   </p><p>
 <b>$lt{'sid'}</b>: <input type="text" name="id" value="$info{'id'}" size="12" />  <b>$lt{'sid'}</b>: <input type="text" name="id" value="$info{'id'}" size="12" />
 </p><p>  </p><p>
 <label>  <label>
Line 1829  END Line 1908  END
     return;      return;
 }  }
   
 #  
 # modify a single students section   =pod 
 #  
   =item modify_single_student()
   
       modify a single students section 
   
   =cut
   
 sub modify_single_student {  sub modify_single_student {
     my ($r) = @_;      my ($r) = @_;
     #      #
Line 1839  sub modify_single_student { Line 1924  sub modify_single_student {
     $env{'form.section'} =~ s/\W//g;      $env{'form.section'} =~ s/\W//g;
     #      #
     # Do the date defaults first      # Do the date defaults first
     my ($starttime,$endtime) = &get_dates_from_form();      my ($starttime,$endtime) = &Apache::lonuserutils::get_dates_from_form();
     if ($env{'form.makedatesdefault'}) {      if ($env{'form.makedatesdefault'}) {
         $r->print(&make_dates_default($starttime,$endtime));          $r->print(&Apache::lonuserutils::make_dates_default($starttime,
                                                               $endtime));
     }      }
     # Get the 'sortby' and 'Status' variables so the user goes back to their      # Get the 'sortby' and 'Status' variables so the user goes back to their
     # previous screen      # previous screen
Line 1855  sub modify_single_student { Line 1941  sub modify_single_student {
     # Get the old data      # Get the old data
     my %old=&Apache::lonnet::get('environment',      my %old=&Apache::lonnet::get('environment',
                                  ['firstname','middlename',                                   ['firstname','middlename',
                                   'lastname','generation','id'],                                    'lastname','generation','id',
                                  $sdom, $slogin);                                    'permanentemail'],$sdom, $slogin);
     $old{'section'} = &Apache::lonnet::getsection($sdom,$slogin,      $old{'section'} = &Apache::lonnet::getsection($sdom,$slogin,
                                                   $env{'request.course.id'});                                                    $env{'request.course.id'});
     my ($tmp) = keys(%old);      my ($tmp) = keys(%old);
Line 1871  sub modify_single_student { Line 1957  sub modify_single_student {
     my $middlename = $env{'form.middlename'};      my $middlename = $env{'form.middlename'};
     my $lastname   = $env{'form.lastname'};      my $lastname   = $env{'form.lastname'};
     my $generation = $env{'form.generation'};      my $generation = $env{'form.generation'};
       my $permanentemail = $env{'form.permanentemail'};
     my $section    = $env{'form.section'};      my $section    = $env{'form.section'};
     my $courseid   = $env{'request.course.id'};      my $courseid   = $env{'request.course.id'};
     my $sid        = $env{'form.id'};      my $sid        = $env{'form.id'};
Line 1895  sub modify_single_student { Line 1982  sub modify_single_student {
                    'mn'    => "Middle name",                     'mn'    => "Middle name",
                    'ln'    => "Last name",                     'ln'    => "Last name",
                    'gen'   => "Generation",                     'gen'   => "Generation",
                      'em'    => "E-mail address",
                    'sec'   => "Section",                     'sec'   => "Section",
                    'ri'    => "Role Information",                     'ri'    => "Role Information",
                    'st'    => "Start Time",                     'st'    => "Start Time",
                    'et'    => "End Time",                     'et'    => "End Time",
        );         );
     $r->print(<<END);      $r->print(<<END);
     <h2>$lt{'mdu'} $slogin : $sdom </h2>      <h3>$lt{'mdu'} $slogin:$sdom </h3>
 <h3>$lt{'si'}</h3>  END
 <table rules="rows" border="1" cellpadding="3" >      $r->print(<<END);
 <tr>  
     <th> $lt{'fd'} </th>  
     <th> $lt{'ov'} </th>  
     <th> $lt{'nv'} </th>  
 </tr>  
 <tr>  
     <td> <b>$lt{'fn'}</b> </td>  
     <td> $old{'firstname'} </td>  
     <td> $firstname </td>  
 </tr><tr>  
     <td> <b>$lt{'mn'}</b> </td>  
     <td> $old{'middlename'} </td>  
     <td> $middlename </td>  
 </tr><tr>  
     <td> <b>$lt{'ln'}</b> </td>  
     <td> $old{'lastname'} </td>  
     <td> $lastname </td>  
 </tr><tr>  
     <td> <b>$lt{'gen'}</b> </td>  
     <td> $old{'generation'} </td>  
     <td> $generation </td>  
 </tr><tr>  
     <td> <b>ID</b> </td>  
     <td> $old{'id'} </td>  
     <td> $sid </td>  
 </tr><tr>  
     <td> <b>$lt{'sec'}</b> </td>  
     <td> $old{'section'} </td>  
     <td> $section</td>  
 </tr>  
 </table>  
 <h3>$lt{'ri'}</h3>  
 <table>  <table>
 <tr><td align="right"><b>$lt{'st'}:</b></td><td> $displayable_starttime </td></tr>   <tr>
 <tr><td align="right"><b>$lt{'et'}:</b></td><td> $displayable_endtime   </td></tr>    <td>
       <table class="LC_nested_outer">
        <tr>
         <th>$lt{si}</th>
        </tr>
        <tr>
         <td>
          <table class="LC_nested">
           <tr class="LC_info_row">
            <td class="LC_left_item"> $lt{'fd'} </td>
            <td class="LC_left_item"> $lt{'ov'} </td>
            <td class="LC_left_item"> $lt{'nv'} </td>
           </tr>
           <tr class="LC_odd_row">
            <td class="LC_left_item"> <b>$lt{'fn'}</b> </td>
            <td class="LC_left_item"> $old{'firstname'} </td>
            <td class="LC_left_item"> $firstname </td>
           </tr>
           <tr>
            <td class="LC_left_item"> <b>$lt{'mn'}</b> </td>
            <td class="LC_left_item"> $old{'middlename'} </td>
            <td class="LC_left_item"> $middlename </td>
           </tr>
           <tr class="LC_odd_row">
            <td class="LC_left_item"> <b>$lt{'ln'}</b> </td>
            <td class="LC_left_item"> $old{'lastname'} </td>
            <td class="LC_left_item"> $lastname </td>
           </tr>
           <tr>
            <td class="LC_left_item"> <b>$lt{'gen'}</b> </td>
            <td class="LC_left_item"> $old{'generation'} </td>
            <td class="LC_left_item"> $generation </td>
           </tr>
           <tr class="LC_odd_row">
            <td class="LC_left_item"> <b>ID</b> </td>
            <td class="LC_left_item"> $old{'id'} </td>
            <td class="LC_left_item"> $sid </td>
           </tr>
           <tr>
            <td class="LC_left_item"> <b>$lt{'em'}</b> </td>
            <td class="LC_left_item"> $old{'permanentemail'} </td>
            <td class="LC_left_item"> $permanentemail </td>
           <tr class="LC_odd_row">
            <td> <b>$lt{'sec'}</b> </td>
            <td> $old{'section'} </td>
            <td> $section</td>
           </tr>
          </table>
         </td>
        </tr>
      </table>
      <br />
      <table class="LC_nested_outer">
        <tr>
         <th>$lt{'ri'}</th>
        </tr>
        <tr>
         <td>
          <table class="LC_nested">
           <tr class="LC_odd_row">
            <td class="LC_left_item"><b>$lt{'st'}:</b></td>
            <td class="LC_right_item"> $displayable_starttime </td>
           </tr>
           <tr>
            <td class="LC_left_item"><b>$lt{'et'}:</b></td>
            <td class="LC_right_item"> $displayable_endtime   </td>
           </tr>
          </table>
         </td>
        </tr>
       </table>
     </td>
    </tr>
 </table>  </table>
 <p>  <p>
 END  END
     #      #
     # Send request(s) to modify data (final undef is for 'desiredhost',      # Send request(s) to modify data (final undef is for 'desiredhost',
     # which is a moot point because the student already has an account.      # which is a moot point because the student already has an account.
     my $modify_section_results = &modifystudent($sdom,$slogin,      my $modify_section_results = 
                                                 $env{'request.course.id'},          &Apache::lonuserutils::modifystudent($sdom,$slogin,
                                                 $section,undef);                                               $env{'request.course.id'},
                                                $section,undef);
     if ($modify_section_results !~ /^ok/) {      if ($modify_section_results !~ /^ok/) {
         $r->print(&mt('An error occured during the attempt to change the section for this student.')."<br />");          $r->print(&mt('An error occurred during the attempt to change the section for this student.')."<br />");
     }      }
     my $roleresults = &Apache::lonnet::modifystudent      my $roleresults = &Apache::lonnet::modifystudent
         ($sdom,$slogin,$sid,undef,undef,$firstname,$middlename,$lastname,          ($sdom,$slogin,$sid,undef,undef,$firstname,$middlename,$lastname,
          $generation,$section,$endtime,$starttime,$env{'form.forceid'});           $generation,$section,$endtime,$starttime,$env{'form.forceid'},
            undef,$permanentemail);
       if ($old{'permanentemail'} ne $permanentemail) {
           &Apache::loncommon::flush_email_cache($slogin,$sdom);
       }
     if ($roleresults eq 'refused' ) {      if ($roleresults eq 'refused' ) {
         $r->print(&mt('Your request to change the role information for this student was refused. You do not appear to have sufficient authority to change student information.'));          $r->print(&mt('Your request to change the role information for this student was refused. You do not appear to have sufficient authority to change student information.'));
     } elsif ($roleresults !~ /ok/) {      } elsif ($roleresults !~ /ok/) {
Line 2013  sub get_enrollment_data { Line 2146  sub get_enrollment_data {
     return ($start,$end,$section);      return ($start,$end,$section);
 }  }
   
 #################################################  
 #################################################  
   
 =pod  =pod
   
 =item show_drop_list  =item show_drop_list()
   
 Display a list of students to drop  Display a list of students to drop
 Inputs:   Inputs: 
Line 2038  which describes the order elements are s Line 2169  which describes the order elements are s
   
 =cut  =cut
   
 #################################################  
 #################################################  
 sub show_drop_list {  sub show_drop_list {
     my ($r,$classlist,$keylist,$nosort)=@_;      my ($r,$classlist,$keylist,$nosort)=@_;
     my $cid=$env{'request.course.id'};      my $cid=$env{'request.course.id'};
Line 2199  END Line 2328  END
     return;      return;
 }  }
   
 #  
 # Print out the initial form to get the courselist file  =pod 
 #  
   =item print_first_courselist_upload_form()
   
       Print out the initial form to get the courselist file
   
   =cut
   
 sub print_first_courselist_upload_form {  sub print_first_courselist_upload_form {
     my $r=shift;      my $r=shift;
     my $str;      my $str;
Line 2226  sub print_first_courselist_upload_form { Line 2361  sub print_first_courselist_upload_form {
     return;      return;
 }  }
   
 # ================================================= Drop/Add from uploaded file  
   =pod
   
   =item upfile_drop_add()
   
       Drop/Add from uploaded file
   
   =cut
   
 sub upfile_drop_add {  sub upfile_drop_add {
     my $r=shift;      my $r=shift;
     &Apache::loncommon::load_tmp_file($r);      &Apache::loncommon::load_tmp_file($r);
Line 2403  sub upfile_drop_add { Line 2546  sub upfile_drop_add {
                         $$_ =~ s/(\s+$|^\s+)//g;                          $$_ =~ s/(\s+$|^\s+)//g;
                     }                      }
                     if ($password || $env{'form.login'} eq 'loc') {                      if ($password || $env{'form.login'} eq 'loc') {
                         &modifystudent($domain,$username,$cid,$sec,                          &Apache::lonuserutils::modifystudent($domain,
                                        $desiredhost);                                                           $username,$cid,
                                                            $sec,$desiredhost);
                         my $reply=&Apache::lonnet::modifystudent                          my $reply=&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,
Line 2431  sub upfile_drop_add { Line 2575  sub upfile_drop_add {
                 }                  }
             }              }
         } # end of foreach (@studentdata)          } # end of foreach (@studentdata)
         $r->print("</p>\n<p>\n".&mt('Processed [_1] student(s).',$count).          $r->print("</p>\n<p>\n".&mt('Processed [quant,_1,student].',$count).
                   "</p>\n");                    "</p>\n");
         $r->print("<p>\n".          $r->print("<p>\n".
                   &mt('If active, the new role will be available when the '.                    &mt('If active, the new role will be available when the '.
Line 2471  sub drop_student_list { Line 2615  sub drop_student_list {
     foreach (@droplist) {      foreach (@droplist) {
         my ($uname,$udom)=split(/\:/,$_);          my ($uname,$udom)=split(/\:/,$_);
         # drop student          # drop student
         my $result = &modifystudent($udom,$uname,$env{'request.course.id'});          my $result = &Apache::lonuserutils::modifystudent($udom,$uname,
                                                   $env{'request.course.id'});
         if ($result eq 'ok' || $result eq 'ok:') {          if ($result eq 'ok' || $result eq 'ok:') {
             $r->print(&mt('Dropped [_1]',$uname.'@'.$udom).'<br>');              $r->print(&mt('Dropped [_1]',$uname.'@'.$udom).'<br>');
             $count++;              $count++;
Line 2481  sub drop_student_list { Line 2626  sub drop_student_list {
                       '<br />');                        '<br />');
         }          }
     }      }
     $r->print('<p><b>'.&mt('Dropped [_1] student(s).',$count).'</b></p>');      $r->print('<p><b>'.&mt('Dropped [quant,_1,student].',$count).'</b></p>');
     $r->print('<p>'.&mt('Re-enrollment will re-activate data.')) if ($count);      $r->print('<p>'.&mt('Re-enrollment will re-activate data.')) if ($count);
 }  }
   
Line 2538  sub get_permission { Line 2683  sub get_permission {
     return (\%permission,$allowed);      return (\%permission,$allowed);
 }  }
   
 ###################################################################  
 ###################################################################  
   
 =pod  =pod
   
 =item &handler  =item &handler()
   
 The typical handler you see in all these modules.  Takes $r, the  The typical handler you see in all these modules.  Takes $r, the
 http request, as an argument.    http request, as an argument.  
Line 2570  The response to the request is governed Line 2712  The response to the request is governed
   
 =cut  =cut
   
 ###################################################################  
 ###################################################################  
 sub handler {  sub handler {
     my $r=shift;      my $r=shift;
     if ($r->header_only) {      if ($r->header_only) {
Line 2656  sub handler { Line 2796  sub handler {
         my @search = ('srchterm','srchby','srchin','srchtype','srchdomain');          my @search = ('srchterm','srchby','srchin','srchtype','srchdomain');
         my ($jsback,$elements) = &Apache::loncreateuser::crumb_utilities();          my ($jsback,$elements) = &Apache::loncreateuser::crumb_utilities();
         my $jscript = '<script type="text/javascript">'.$jsback.'</script>';          my $jscript = '<script type="text/javascript">'.$jsback.'</script>';
    &Apache::loncreateuser::restore_prev_selections();
    my $srch;
    foreach my $item (@search) {
       $srch->{$item} = $env{'form.'.$item};
    }
   
         if ($env{'form.state'} eq 'gotusername') {          if ($env{'form.state'} eq 'gotusername') {
             my $srch;  
             foreach my $item (@search) {  
                 $srch->{$item} = $env{'form.'.$item};  
             }  
             if ($env{'form.phase'} eq 'get_user_info') {              if ($env{'form.phase'} eq 'get_user_info') {
                 my ($currstate,$response,$forcenewuser,$results) =                  my ($currstate,$response,$forcenewuser,$results) =
                     &Apache::loncreateuser::user_search_result($srch);                      &Apache::loncreateuser::user_search_result($srch);
                   if ($env{'form.currstate'} eq 'modify') {
                       $currstate = $env{'form.currstate'};
                   }
                 if ($currstate eq 'select') {                  if ($currstate eq 'select') {
                     $r->print(&header());                      $r->print(&header());
                     &Apache::lonhtmlcommon::add_breadcrumb                      &Apache::lonhtmlcommon::add_breadcrumb
Line 2707  sub handler { Line 2852  sub handler {
                 &print_enroll_single_student_form($r,$jscript,$ccuname,                  &print_enroll_single_student_form($r,$jscript,$ccuname,
                                                   $ccdomain,$srch);                                                    $ccdomain,$srch);
             } else {              } else {
                 &get_student_username_domain_form($r,$elements);                  &get_student_username_domain_form($r,$elements,undef,$srch);
             }              }
         } elsif ($env{'form.state'} eq 'enrolling') {          } elsif ($env{'form.state'} eq 'enrolling') {
             $r->print(&header($jscript));              $r->print(&header($jscript));
Line 2728  sub handler { Line 2873  sub handler {
                                                       'Course_Add_Student'));                                                        'Course_Add_Student'));
             &enroll_single_student($r,\@search);              &enroll_single_student($r,\@search);
         } else {          } else {
             &get_student_username_domain_form($r,$elements);              &get_student_username_domain_form($r,$elements,undef,$srch);
         }          }
     } elsif ($env{'form.action'} eq 'classlist' && $permission->{'view'}) {      } elsif ($env{'form.action'} eq 'classlist' && $permission->{'view'}) {
         $r->print(&header());          $r->print(&header());
Line 2777  sub handler { Line 2922  sub handler {
     return OK;      return OK;
 }  }
   
 ###################################################################  
 ###################################################################  
   
 1;  1;
 __END__  __END__
   
   =pod
   
   =back
   
   =cut

Removed from v.1.167  
changed lines
  Added in v.1.179


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