Diff for /loncom/interface/Attic/londropadd.pm between versions 1.98 and 1.128

version 1.98, 2004/01/15 03:18:19 version 1.128, 2005/04/07 07:34:52
Line 32 Line 32
 package Apache::londropadd;  package Apache::londropadd;
   
 use strict;  use strict;
 use Apache::lonnet();  use Apache::lonnet;
 use Apache::loncommon();  use Apache::loncommon();
 use Apache::lonhtmlcommon();  use Apache::lonhtmlcommon();
 use Apache::Constants qw(:common :http REDIRECT);  use Apache::Constants qw(:common :http REDIRECT);
 use Spreadsheet::WriteExcel;  use Spreadsheet::WriteExcel;
   use Apache::lonstathelpers();
 use Apache::lonlocal;  use Apache::lonlocal;
   
 ###############################################################  ###############################################################
 ###############################################################  ###############################################################
 sub header {  sub header {
     my $bodytag=&Apache::loncommon::bodytag('Enrollment Manager').      my $html=&Apache::lonxml::xmlbegin();
  &Apache::loncommon::help_open_faq(9).      my $bodytag=&Apache::loncommon::bodytag('Enrollment Manager');
  &Apache::loncommon::help_open_bug('Instructor Interface');  
     my $title = &mt('LON-CAPA Enrollment Manager');      my $title = &mt('LON-CAPA Enrollment Manager');
     return(<<ENDHEAD);      return(<<ENDHEAD);
 <html>  $html
 <head>  <head>
 <title>$title</title>  <title>$title</title>
 </head>  </head>
Line 137  sub domain_form { Line 137  sub domain_form {
 ###############################################################  ###############################################################
 #  Menu Phase One  #  Menu Phase One
 sub print_main_menu {  sub print_main_menu {
     my $r=shift;      my ($r,$enrl_permission,$view_permission)=@_;
     my %Text = &Apache::lonlocal::texthash      #
         ('upload'    => 'Upload a class list',      my ($cdom,$cnum) = split/_/,$env{'request.course.id'};
          'enrollone' => 'Enroll a single student',      my @menu = 
          'modify'    => 'Modify student data',          ( 
          'view'      => 'View Class List',            { text => 'Upload a class list', 
          'drop'      => 'Drop Students',              help => 'Course_Create_Class_List',
          'populate'  => 'Automated Enrollment Manager');              action => 'upload',
     my %help=();              permission => $enrl_permission,
     foreach ('Course_Drop_Student','Course_Add_Student',              },
      'Course_Modify_Student_Data','Course_View_Class_List',            { text => 'Enroll a single student', 
      'Course_Create_Class_List') {              help => 'Course_Add_Student',
  $help{$_}=&Apache::loncommon::help_open_topic($_);              action => 'enrollstudent',
               permission => $enrl_permission,
               },
             { text => 'Modify student data', 
               help => 'Course_Modify_Student_Data',
               action => 'modifystudent',
               permission => $enrl_permission,
               },
             { text => 'View Class List', 
               help => 'Course_View_Class_List',
               action => 'classlist',
               permission => $view_permission,
               },
             { text => 'Drop Students', 
               help => 'Course_Drop_Student',
               action => 'drop',
               permission => $enrl_permission,
               },
             { text => 'Automated Enrollment Manager', 
               permission => &Apache::lonnet::auto_run($cnum,$cdom),
               url  => '/adm/populate',
               },
             );
       my $menu_html = '';
       foreach my $menu_item (@menu) {
           next if (! $menu_item->{'permission'});
           $menu_html.='<p>';
           $menu_html.='<font size="+1">';
           if (exists($menu_item->{'url'})) {
               $menu_html.=qq{<a href="$menu_item->{'url'}">};
           } else {
               $menu_html.=
                   qq{<a href="/adm/dropadd?action=$menu_item->{'action'}">};
           }
           $menu_html.= &mt($menu_item->{'text'}).'</a></font>';
           if (exists($menu_item->{'help'})) {
               $menu_html.=
                   &Apache::loncommon::help_open_topic($menu_item->{'help'});
           }
           $menu_html.='</p>'.$/;
     }      }
       $r->print($menu_html);
     $r->print(<<END);      return;
 <p>  
 <font size="+1">  
 <a href="/adm/dropadd?action=upload">$Text{'upload'}</a>  
 </font>$help{'Course_Create_Class_List'}  
 </p><p>  
 <font size="+1">  
     <a href="/adm/dropadd?action=enrollstudent">$Text{'enrollone'}</a>  
     </font>$help{'Course_Add_Student'}  
 </p><p>  
 <font size="+1">  
     <a href="/adm/dropadd?action=modifystudent">$Text{'modify'}</a>  
     </font>$help{'Course_Modify_Student_Data'}  
 </p><p>  
 <font size="+1">  
     <a href="/adm/dropadd?action=classlist">$Text{'view'}</a>  
     </font>$help{'Course_View_Class_List'}  
 </p><p>  
 <font size="+1">  
     <a href="/adm/dropadd?action=drop">$Text{'drop'}</a>  
     </font>$help{'Course_Drop_Student'}  
 </p><p>  
 <font size="+1">  
     <a href="/adm/populate">$Text{'populate'}</a>  
 </font>  
 END  
 }  }
   
 ###############################################################  ###############################################################
Line 190  sub hidden_input { Line 204  sub hidden_input {
 sub print_upload_manager_header {  sub print_upload_manager_header {
     my ($r,$datatoken,$distotal,$krbdefdom)=@_;      my ($r,$datatoken,$distotal,$krbdefdom)=@_;
     my $javascript;      my $javascript;
     if (! exists($ENV{'form.upfile_associate'})) {      #
         $ENV{'form.upfile_associate'} = 'forward';      if (! exists($env{'form.upfile_associate'})) {
           $env{'form.upfile_associate'} = 'forward';
     }      }
     if ($ENV{'form.associate'} eq 'Reverse Association') {      if ($env{'form.associate'} eq 'Reverse Association') {
         if ( $ENV{'form.upfile_associate'} ne 'reverse' ) {          if ( $env{'form.upfile_associate'} ne 'reverse' ) {
             $ENV{'form.upfile_associate'} = 'reverse';              $env{'form.upfile_associate'} = 'reverse';
         } else {          } else {
             $ENV{'form.upfile_associate'} = 'forward';              $env{'form.upfile_associate'} = 'forward';
         }          }
     }      }
     if ($ENV{'form.upfile_associate'} eq 'reverse') {      if ($env{'form.upfile_associate'} eq 'reverse') {
  $javascript=&upload_manager_javascript_reverse_associate();   $javascript=&upload_manager_javascript_reverse_associate();
     } else {      } else {
  $javascript=&upload_manager_javascript_forward_associate();   $javascript=&upload_manager_javascript_forward_associate();
     }      }
     my $javascript_validations=&javascript_validations('auth',$krbdefdom);      #
     my $checked=(($ENV{'form.noFirstLine'})?' checked="1"':'');      # Deal with restored settings
       my $password_choice = '';
       if (exists($env{'form.ipwd_choice'}) &&
           $env{'form.ipwd_choice'} ne '') {
           # If a column was specified for password, assume it is for an
           # internal password.  This is a bug waiting to be filed (could be
           # local or krb auth instead of internal) but I do not have the 
           # time to mess around with this now.
           $password_choice = 'int';        
       }
       #
       my $javascript_validations=&javascript_validations('auth',$krbdefdom,
                                       $password_choice);
       my $checked=(($env{'form.noFirstLine'})?' checked="1"':'');
     $r->print('<h3>'.&mt('Uploading Class List')."</h3>\n".      $r->print('<h3>'.&mt('Uploading Class List')."</h3>\n".
               "<hr>\n".                "<hr>\n".
               '<h3>'.&mt('Identify fields')."</h3>\n");                '<h3>'.&mt('Identify fields')."</h3>\n");
Line 219  sub print_upload_manager_header { Line 247  sub print_upload_manager_header {
               &hidden_input('state','got_file').                &hidden_input('state','got_file').
               &hidden_input('associate','').                &hidden_input('associate','').
               &hidden_input('datatoken',$datatoken).                &hidden_input('datatoken',$datatoken).
               &hidden_input('fileupload',$ENV{'form.fileupload'}).                &hidden_input('fileupload',$env{'form.fileupload'}).
               &hidden_input('upfiletype',$ENV{'form.upfiletype'}).                &hidden_input('upfiletype',$env{'form.upfiletype'}).
               &hidden_input('upfile_associate',$ENV{'form.upfile_associate'}));                &hidden_input('upfile_associate',$env{'form.upfile_associate'}));
     $r->print('<input type="button" value="Reverse Association" '.      $r->print('<input type="button" value="Reverse Association" '.
               'name="'.&mt('Reverse Association').'" '.                'name="'.&mt('Reverse Association').'" '.
               'onClick="javascript:this.form.associate.value=\'Reverse Association\';submit(this.form);" />');                'onClick="javascript:this.form.associate.value=\'Reverse Association\';submit(this.form);" />');
Line 239  sub javascript_validations { Line 267  sub javascript_validations {
     my $authheader;      my $authheader;
     if ($mode eq 'auth') {      if ($mode eq 'auth') {
         my %param = ( formname => 'studentform',          my %param = ( formname => 'studentform',
                       kerb_def_dom => $krbdefdom );                        kerb_def_dom => $krbdefdom,
                         curr_authtype => $curr_authtype);
         $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 );
         $authheader = &Apache::loncommon::authform_header(%param);          $authheader = &Apache::loncommon::authform_header(%param);
     } elsif ($mode eq 'modifycourse') {      } elsif ($mode eq 'modifycourse') {
         my %param = ( formname => 'cmod',          my %param = ( formname => 'cmod',
Line 289  END Line 319  END
         return;          return;
     }      }
     // alert('current.radiovalue = '+current.radiovalue);      // alert('current.radiovalue = '+current.radiovalue);
     if (current.radiovalue == null || 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.
         alert('$alert{'authen'}');          alert('$alert{'authen'}');
         return;          return;
Line 561  sub print_upload_manager_footer { Line 591  sub print_upload_manager_footer {
                   kerb_def_dom => $krbdefdom,                    kerb_def_dom => $krbdefdom,
                   kerb_def_auth => $krbdef                    kerb_def_auth => $krbdef
                   );                    );
       if (exists($env{'form.ipwd_choice'}) &&
           defined($env{'form.ipwd_choice'}) &&
           $env{'form.ipwd_choice'} ne '') {
           $param{'curr_authtype'} = 'int';
       }
     my $krbform = &Apache::loncommon::authform_kerberos(%param);      my $krbform = &Apache::loncommon::authform_kerberos(%param);
     my $intform = &Apache::loncommon::authform_internal(%param);      my $intform = &Apache::loncommon::authform_internal(%param);
     my $locform = &Apache::loncommon::authform_local(%param);      my $locform = &Apache::loncommon::authform_local(%param);
Line 601  sub print_upload_manager_footer { Line 636  sub print_upload_manager_footer {
 ###############################################################  ###############################################################
 sub print_upload_manager_form {  sub print_upload_manager_form {
     my $r=shift;      my $r=shift;
   
     my $firstLine;      my $firstLine;
     my $datatoken;      my $datatoken;
     if (!$ENV{'form.datatoken'}) {      if (!$env{'form.datatoken'}) {
         $datatoken=&Apache::loncommon::upfile_store($r);          $datatoken=&Apache::loncommon::upfile_store($r);
     } else {      } else {
         $datatoken=$ENV{'form.datatoken'};          $datatoken=$env{'form.datatoken'};
         &Apache::loncommon::load_tmp_file($r);          &Apache::loncommon::load_tmp_file($r);
     }      }
     my @records=&Apache::loncommon::upfile_record_sep();      my @records=&Apache::loncommon::upfile_record_sep();
     if($ENV{'form.noFirstLine'}){      if($env{'form.noFirstLine'}){
         $firstLine=shift(@records);          $firstLine=shift(@records);
     }      }
     my $total=$#records;      my $total=$#records;
     my $distotal=$total+1;      my $distotal=$total+1;
     my $today=time;      my $today=time;
     my $halfyear=$today+15552000;      my $halfyear=$today+15552000;
     my $defdom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'};      #
       # Restore memorized settings
       &Apache::loncommon::restore_course_settings
           ('enrollment_upload',{ 'username_choice' => 'scalar', # column settings
                                  'names_choice' => 'scalar',
                                  'fname_choice' => 'scalar',
                                  'mname_choice' => 'scalar',
                                  'lname_choice' => 'scalar',
                                  'gen_choice' => 'scalar',
                                  'id_choice' => 'scalar',
                                  'sec_choice' => 'scalar',
                                  'ipwd_choice' => 'scalar',
                                  'email_choice' => 'scalar',
                              });
       #
       # Determine kerberos parameters as appropriate
       my $defdom=$env{'course.'.$env{'request.course.id'}.'.domain'};
     my ($krbdef,$krbdefdom) =      my ($krbdef,$krbdefdom) =
         &Apache::loncommon::get_kerberos_defaults($defdom);          &Apache::loncommon::get_kerberos_defaults($defdom);
       #
     &print_upload_manager_header($r,$datatoken,$distotal,$krbdefdom);      &print_upload_manager_header($r,$datatoken,$distotal,$krbdefdom);
     my $i;      my $i;
     my $keyfields;      my $keyfields;
     if ($total>=0) {      if ($total>=0) {
         my @field=(['username',&mt('Username')],          my @field=
                    ['names',&mt('Last Name, First Names')],              (['username',&mt('Username'),     $env{'form.username_choice'}],
                    ['fname',&mt('First Name')],               ['names',&mt('Last Name, First Names'),$env{'form.names_choice'}],
                    ['mname',&mt('Middle Names/Initials')],               ['fname',&mt('First Name'),      $env{'form.fname_choice'}],
                    ['lname',&mt('Last Name')],               ['mname',&mt('Middle Names/Initials'),$env{'form.mname_choice'}],
                    ['gen',&mt('Generation')],               ['lname',&mt('Last Name'),       $env{'form.lname_choice'}],
                    ['id',&mt('ID/Student Number')],               ['gen',  &mt('Generation'),      $env{'form.gen_choice'}],
                    ['sec',&mt('Group/Section')],               ['id',   &mt('ID/Student Number'),$env{'form.id_choice'}],
                    ['ipwd',&mt('Initial Password')],               ['sec',  &mt('Group/Section'),   $env{'form.sec_choice'}],
                    ['email',&mt('EMail Address')]);               ['ipwd', &mt('Initial Password'),$env{'form.ipwd_choice'}],
  if ($ENV{'form.upfile_associate'} eq 'reverse') {               ['email',&mt('EMail Address'),   $env{'form.email_choice'}]);
    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,
                                                           \@field);                                                            \@field);
Line 658  sub print_upload_manager_form { Line 712  sub print_upload_manager_form {
 sub enroll_single_student {  sub enroll_single_student {
     my $r=shift;      my $r=shift;
     # Remove non alphanumeric values from section      # Remove non alphanumeric values from section
     $ENV{'form.csec'}=~s/\W//g;      $env{'form.csec'}=~s/\W//g;
     #      #
     # We do the dates first because the action of making them the defaul      # We do the dates first because the action of making them the defaul
     # in the course is entirely seperate 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) = &get_dates_from_form();
     if ($ENV{'form.makedatesdefault'}) {      if ($env{'form.makedatesdefault'}) {
         $r->print(&make_dates_default($startdate,$enddate));          $r->print(&make_dates_default($startdate,$enddate));
     }      }
   
     $r->print('<h3>'.&mt('Enrolling Student').'</h3>');      $r->print('<h3>'.&mt('Enrolling Student').'</h3>');
     $r->print('<p>'.&mt('Enrolling').' '.$ENV{'form.cuname'}." \@ ".      $r->print('<p>'.&mt('Enrolling').' '.$env{'form.cuname'}." \@ ".
               $ENV{'form.lcdomain'}.'</p>');                $env{'form.lcdomain'}.'</p>');
     if (($ENV{'form.cuname'})&&($ENV{'form.cuname'}!~/\W/)&&      if (($env{'form.cuname'})&&($env{'form.cuname'}!~/\W/)&&
         ($ENV{'form.lcdomain'})&&($ENV{'form.lcdomain'}!~/\W/)) {          ($env{'form.lcdomain'})&&($env{'form.lcdomain'}!~/\W/)) {
         # Deal with home server selection          # Deal with home server selection
         my $domain=$ENV{'form.lcdomain'};          my $domain=$env{'form.lcdomain'};
         my $desiredhost = $ENV{'form.lcserver'};          my $desiredhost = $env{'form.lcserver'};
         if (lc($desiredhost) eq 'default') {          if (lc($desiredhost) eq 'default') {
             $desiredhost = undef;              $desiredhost = undef;
         } else {          } else {
Line 691  sub enroll_single_student { Line 745  sub enroll_single_student {
         # End of home server selection logic          # End of home server selection logic
  my $amode='';   my $amode='';
         my $genpwd='';          my $genpwd='';
         if ($ENV{'form.login'} eq 'krb') {          if ($env{'form.login'} eq 'krb') {
            $amode='krb';             $amode='krb';
    $amode.=$ENV{'form.krbver'};     $amode.=$env{'form.krbver'};
            $genpwd=$ENV{'form.krbarg'};             $genpwd=$env{'form.krbarg'};
         } elsif ($ENV{'form.login'} eq 'int') {          } elsif ($env{'form.login'} eq 'int') {
            $amode='internal';             $amode='internal';
            $genpwd=$ENV{'form.intarg'};             $genpwd=$env{'form.intarg'};
         }  elsif ($ENV{'form.login'} eq 'loc') {          }  elsif ($env{'form.login'} eq 'loc') {
     $amode='localauth';      $amode='localauth';
     $genpwd=$ENV{'form.locarg'};      $genpwd=$env{'form.locarg'};
     if (!$genpwd) { $genpwd=" "; }      if (!$genpwd) { $genpwd=" "; }
  }   }
         my $home = &Apache::lonnet::homeserver($ENV{'form.cuname'},          my $home = &Apache::lonnet::homeserver($env{'form.cuname'},
                                                    $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'},              &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
                 ($ENV{'form.lcdomain'},$ENV{'form.cuname'},                  ($env{'form.lcdomain'},$env{'form.cuname'},
                  $ENV{'form.cstid'},$amode,$genpwd,                   $env{'form.cstid'},$amode,$genpwd,
                  $ENV{'form.cfirst'},$ENV{'form.cmiddle'},                   $env{'form.cfirst'},$env{'form.cmiddle'},
                  $ENV{'form.clast'},$ENV{'form.cgen'},                   $env{'form.clast'},$env{'form.cgen'},
                  $ENV{'form.csec'},$enddate,                   $env{'form.csec'},$enddate,
                  $startdate,$ENV{'form.forceid'},                   $startdate,$env{'form.forceid'},
                  $desiredhost);                   $desiredhost,$env{'form.emailaddress'});
             if ($login_result =~ /^ok/) {              if ($login_result =~ /^ok/) {
                 $r->print($login_result);                  $r->print($login_result);
                 $r->print("<p> ".&mt('If active, the new role will be available when the student next logs in to LON-CAPA.')."</p>");                  $r->print("<p> ".&mt('If active, the new role will be available when the student next logs in to LON-CAPA.')."</p>");
Line 731  sub enroll_single_student { Line 785  sub enroll_single_student {
             } else {              } else {
                 $r->print(&mt('Invalid login mode or password.').'  ');                  $r->print(&mt('Invalid login mode or password.').'  ');
             }              }
             $r->print('<b>'.&mt('Unable to enroll').' '.$ENV{'form.cuname'}.'.</b></p>');              $r->print('<b>'.&mt('Unable to enroll').' '.$env{'form.cuname'}.'.</b></p>');
         }          }
     } else {      } else {
         $r->print(&mt('Invalid username or domain'));          $r->print(&mt('Invalid username or domain'));
Line 742  sub setup_date_selectors { Line 796  sub setup_date_selectors {
     my ($starttime,$endtime,$mode) = @_;      my ($starttime,$endtime,$mode) = @_;
     if (! defined($starttime)) {      if (! defined($starttime)) {
         $starttime = time;          $starttime = time;
         unless ($mode eq 'createcourse') {          unless ($mode eq 'create_enrolldates' || $mode eq 'create_defaultdates') {
             if (exists($ENV{'course.'.$ENV{'request.course.id'}.              if (exists($env{'course.'.$env{'request.course.id'}.
                             '.default_enrollment_start_date'})) {                              '.default_enrollment_start_date'})) {
                 $starttime = $ENV{'course.'.$ENV{'request.course.id'}.                  $starttime = $env{'course.'.$env{'request.course.id'}.
                                   '.default_enrollment_start_date'};                                    '.default_enrollment_start_date'};
             }              }
         }          }
Line 753  sub setup_date_selectors { Line 807  sub setup_date_selectors {
     if (! defined($endtime)) {      if (! defined($endtime)) {
         $endtime = time+(6*30*24*60*60); # 6 months from now, approx          $endtime = time+(6*30*24*60*60); # 6 months from now, approx
         unless ($mode eq 'createcourse') {          unless ($mode eq 'createcourse') {
             if (exists($ENV{'course.'.$ENV{'request.course.id'}.              if (exists($env{'course.'.$env{'request.course.id'}.
                             '.default_enrollment_end_date'})) {                              '.default_enrollment_end_date'})) {
                 $endtime = $ENV{'course.'.$ENV{'request.course.id'}.                  $endtime = $env{'course.'.$env{'request.course.id'}.
                                 '.default_enrollment_end_date'};                                  '.default_enrollment_end_date'};
             }              }
         }          }
Line 766  sub setup_date_selectors { Line 820  sub setup_date_selectors {
     my $enddateform = &Apache::lonhtmlcommon::date_setter('studentform',      my $enddateform = &Apache::lonhtmlcommon::date_setter('studentform',
                                                           'enddate',                                                            'enddate',
                                                           $endtime);                                                            $endtime);
     if ($mode eq 'createcourse') {      if ($mode eq 'create_enrolldates') {
         $startdateform = &Apache::lonhtmlcommon::date_setter('ccrs',          $startdateform = &Apache::lonhtmlcommon::date_setter('ccrs',
                                                             'startdate',                                                              'startenroll',
                                                             $starttime);                                                              $starttime);
         $enddateform = &Apache::lonhtmlcommon::date_setter('ccrs',          $enddateform = &Apache::lonhtmlcommon::date_setter('ccrs',
                                                           'enddate',                                                            'endenroll',
                                                             $endtime);
       }
       if ($mode eq 'create_defaultdates') {
           $startdateform = &Apache::lonhtmlcommon::date_setter('ccrs',
                                                               'startaccess',
                                                               $starttime);
           $enddateform = &Apache::lonhtmlcommon::date_setter('ccrs',
                                                             'endaccess',
                                                           $endtime);                                                            $endtime);
     }      }
     return ($startdateform,$enddateform);      return ($startdateform,$enddateform);
Line 780  sub setup_date_selectors { Line 842  sub setup_date_selectors {
 sub get_dates_from_form {  sub get_dates_from_form {
     my $startdate = &Apache::lonhtmlcommon::get_date_from_form('startdate');      my $startdate = &Apache::lonhtmlcommon::get_date_from_form('startdate');
     my $enddate   = &Apache::lonhtmlcommon::get_date_from_form('enddate');      my $enddate   = &Apache::lonhtmlcommon::get_date_from_form('enddate');
     if ($ENV{'form.no_end_date'}) {      if ($env{'form.no_end_date'}) {
         $enddate = 0;          $enddate = 0;
     }      }
     return ($startdate,$enddate);      return ($startdate,$enddate);
Line 792  sub date_setting_table { Line 854  sub date_setting_table {
     my $dateDefault = '<nobr>'.      my $dateDefault = '<nobr>'.
         '<input type="checkbox" name="makedatesdefault" /> '.          '<input type="checkbox" name="makedatesdefault" /> '.
         &mt('make these dates the default for future enrollment');          &mt('make these dates the default for future enrollment');
     if ($mode eq 'createcourse') {      if ($mode eq 'create_enrolldates' || $mode eq 'create_defaultdates') {
         $dateDefault = '&nbsp;';          $dateDefault = '&nbsp;';
     }      }
     my $perpetual = '<nobr><input type="checkbox" name="no_end_date"';      my $perpetual = '<nobr><input type="checkbox" name="no_end_date"';
Line 800  sub date_setting_table { Line 862  sub date_setting_table {
         $perpetual .= ' checked';          $perpetual .= ' checked';
     }      }
     $perpetual.= ' /> '.&mt('no ending date').'</nobr>';      $perpetual.= ' /> '.&mt('no ending date').'</nobr>';
       if ($mode eq 'create_enrolldates') {
           $perpetual = '&nbsp;';
       }
     my $result = '';      my $result = '';
     $result .= "<table>\n";      $result .= "<table>\n";
     $result .= '<tr><td align="right">'.&mt('Starting Date').'</td>'.      $result .= '<tr><td align="right">'.&mt('Starting Date').'</td>'.
Line 815  sub date_setting_table { Line 880  sub date_setting_table {
 sub make_dates_default {  sub make_dates_default {
     my ($startdate,$enddate) = @_;      my ($startdate,$enddate) = @_;
     my $result = '';      my $result = '';
     my $dom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'};      my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
     my $crs = $ENV{'course.'.$ENV{'request.course.id'}.'.num'};      my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
     my $put_result = &Apache::lonnet::put('environment',      my $put_result = &Apache::lonnet::put('environment',
             {'default_enrollment_start_date'=>$startdate,              {'default_enrollment_start_date'=>$startdate,
              'default_enrollment_end_date'  =>$enddate},$dom,$crs);               'default_enrollment_end_date'  =>$enddate},$dom,$crs);
Line 824  sub make_dates_default { Line 889  sub make_dates_default {
         $result .= "Set default start and end dates for course<br />";          $result .= "Set default start and end dates for course<br />";
         #          #
         # Refresh the course environment          # Refresh the course environment
         &Apache::lonnet::coursedescription($ENV{'request.course.id'});          &Apache::lonnet::coursedescription($env{'request.course.id'});
     } else {      } else {
         $result .= &mt('Unable to set default dates for course').":".$put_result.          $result .= &mt('Unable to set default dates for course').":".$put_result.
             '<br />';              '<br />';
Line 838  sub make_dates_default { Line 903  sub make_dates_default {
 sub get_student_username_domain_form {  sub get_student_username_domain_form {
     my $r = shift;      my $r = shift;
     my $domform = &Apache::loncommon::select_dom_form      my $domform = &Apache::loncommon::select_dom_form
         ($ENV{'course.'.$ENV{'request.course.id'}.'.domain'},'cudomain',0);          ($env{'course.'.$env{'request.course.id'}.'.domain'},'cudomain',0);
     my %lt=&Apache::lonlocal::texthash(      my %lt=&Apache::lonlocal::texthash(
     'eos'  => "Enroll One Student",      'eos'  => "Enroll One Student",
     'usr'  => "Username",      'usr'  => "Username",
Line 859  sub get_student_username_domain_form { Line 924  sub get_student_username_domain_form {
     <input type="submit" name="Begin Enrollment" value="$lt{'been'}" />      <input type="submit" name="Begin Enrollment" value="$lt{'been'}" />
     </td></tr>      </td></tr>
 </table>  </table>
   <script type="text/javascript">
   // the if prevents the script error if the browser can not handle this
   if ( document.studentform.cuname ) { document.studentform.cuname.focus(); }
   </script>
 END  END
     return;      return;
 }  }
Line 867  sub print_enroll_single_student_form { Line 936  sub print_enroll_single_student_form {
     my $r=shift;      my $r=shift;
     $r->print("<h3>".&mt('Enroll One Student')."</h3>");      $r->print("<h3>".&mt('Enroll One Student')."</h3>");
     #      #
     my $username = $ENV{'form.cuname'};      my $username = $env{'form.cuname'};
     my $domain   = $ENV{'form.cudomain'};      my $domain   = $env{'form.cudomain'};
       $username=~s/\W//gs;
       $domain=~s/\W//gs;
     my $home = &Apache::lonnet::homeserver($username,$domain);      my $home = &Apache::lonnet::homeserver($username,$domain);
     # $new_user flags whether we are creating a new user or using an old one      # $new_user flags whether we are creating a new user or using an old one
     my $new_user = 1;      my $new_user = 1;
Line 879  sub print_enroll_single_student_form { Line 950  sub print_enroll_single_student_form {
     my $user_data_html = '';      my $user_data_html = '';
     my $javascript_validations = '';      my $javascript_validations = '';
     if ($new_user) {      if ($new_user) {
         my $defdom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'};          my $defdom=$env{'course.'.$env{'request.course.id'}.'.domain'};
         # Set up authentication forms          # Set up authentication forms
         my ($krbdef,$krbdefdom) =          my ($krbdef,$krbdefdom) =
             &Apache::loncommon::get_kerberos_defaults($domain);              &Apache::loncommon::get_kerberos_defaults($domain);
Line 913  sub print_enroll_single_student_form { Line 984  sub print_enroll_single_student_form {
                        'hs'   => "Home Server",                         'hs'   => "Home Server",
                        'pswd' => "Password",                         'pswd' => "Password",
        'psam' => "Please select an authentication mechanism",         'psam' => "Please select an authentication mechanism",
                          'mail' => "Email Address"
    );     );
         $user_data_html = <<END;          $user_data_html = <<END;
 <h3>$lt{'udf'} $username\@$domain</h3>  <h3>$lt{'udf'} $username\@$domain</h3>
Line 927  sub print_enroll_single_student_form { Line 999  sub print_enroll_single_student_form {
     <td><input type="text" name="cgen"    size="5"> </td></tr>      <td><input type="text" name="cgen"    size="5"> </td></tr>
 <tr><th>$lt{'hs'}:</th>  <tr><th>$lt{'hs'}:</th>
     <td>$homeserver_form</td></tr>      <td>$homeserver_form</td></tr>
   <tr><th>$lt{'mail'}:</th>
       <td><input type="text" name="emailaddress" size="20" /></td></tr>
 </table>  </table>
 <h3>$lt{'pswd'}</h3>  <h3>$lt{'pswd'}</h3>
 $lt{'psam'}  $lt{'psam'}
Line 949  END Line 1023  END
                        'mn'   => "Middle Name",                         'mn'   => "Middle Name",
                        'ln'   => "Last Name",                         'ln'   => "Last Name",
                        'gen'  => "Generation",                         'gen'  => "Generation",
                          'mail' => "Email Address",
    );     );
         $user_data_html = <<END;          $user_data_html = <<END;
 <h3>$lt{'udf'} $username\@$domain</h3>  <h3>$lt{'udf'} $username\@$domain</h3>
Line 970  END Line 1045  END
     <td>      <td>
     <input type="text" name="cgen" value="$uenv{'generation'}" size="5" />      <input type="text" name="cgen" value="$uenv{'generation'}" size="5" />
     </td></tr>      </td></tr>
   <tr><th>$lt{'mail'}:</th>
       <td>
       <input type="text" name="emailaddress" value="$uenv{'permanentemail'}" size="20" />
       </td></tr>
 </table>  </table>
 END  END
     }      }
Line 1049  END Line 1128  END
 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>");
     my $cid=$ENV{'request.course.id'};      my $cid=$env{'request.course.id'};
     my ($classlist,$keylist) = &Apache::loncoursedata::get_classlist();      my ($classlist,$keylist) = &Apache::loncoursedata::get_classlist();
     if (! defined($classlist)) {      if (! defined($classlist)) {
         $r->print(&mt('There are no students currently enrolled.')."\n");          $r->print(&mt('There are no students currently enrolled.')."\n");
Line 1062  sub print_drop_menu { Line 1141  sub print_drop_menu {
   
 # ============================================== view classlist  # ============================================== view classlist
 sub print_html_classlist {  sub print_html_classlist {
     my $r=shift;      my ($r,$mode) = @_;
     if (! exists($ENV{'form.sortby'})) {      if (! exists($env{'form.sortby'})) {
         $ENV{'form.sortby'} = 'username';          $env{'form.sortby'} = 'username';
     }      }
     if ($ENV{'form.Status'} !~ /^(Any|Expired|Active)$/) {      if ($env{'form.Status'} !~ /^(Any|Expired|Active)$/) {
         $ENV{'form.Status'} = 'Active';          $env{'form.Status'} = 'Active';
     }      }
     my $status_select = &Apache::lonhtmlcommon::StatusOptions      my $status_select = &Apache::lonhtmlcommon::StatusOptions
         ($ENV{'form.Status'},'studentform');          ($env{'form.Status'});
     my $CCL=&mt('Current Class List');      my $cid=$env{'request.course.id'};
     $r->print(<<END);      my $cdom=$env{'course.'.$cid.'.domain'};
 <input type="hidden" name="action" value="$ENV{'form.action'}" />      my $cnum=$env{'course.'.$cid.'.num'};
 <input type="hidden" name="state"  value="" />      #
 <p>      # List course personnel
 <font size="+1">$CCL</font>      my %coursepersonnel=&Apache::lonnet::get_course_adv_roles($cdom.'/'.$cnum);
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      #
 END      if (! defined($env{'form.output'}) ||
     if ($ENV{'form.action'} ne 'modifystudent') {          $env{'form.output'} !~ /^(csv|excel|html)$/ ) {
  my %lt=&Apache::lonlocal::texthash(          $env{'form.output'} = 'html';
    'ef'   => "Excel format",      }
                    'ss'   => "Student Status",      #
    );      $r->print('<br /><table border="2">');
         $r->print(<<END);      foreach my $role (sort keys %coursepersonnel) {
 <font size="+1">          next if ($role =~ /^\s*$/);
 <a href="javascript:document.studentform.state.value='csv';document.studentform.submit();">CSV format</a>   $r->print('<tr><td>'.$role.'</td><td>');
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;          foreach my $user (split(',',$coursepersonnel{$role})) {
 <a href="javascript:document.studentform.state.value='excel';document.studentform.submit();">$lt{'ef'}</a>      my ($puname,$pudom)=split(':',$user);
 </font>      $r->print(' '.&Apache::loncommon::aboutmewrapper(
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;                                      &Apache::loncommon::plainname($puname,
 $lt{'ss'}:                                                                    $pudom),
 END                                                               $puname,$pudom));
    }
           $r->print('</td></tr>');
       }
       $r->print('</table>');
       #
       # Interface output
       $r->print('<input type="hidden" name="action" value="'.
                 $env{'form.action'}.'" />');
       $r->print("<p>\n");
       if ($env{'form.action'} ne 'modifystudent') {
    my %lt=&Apache::lonlocal::texthash('csv' => "CSV",
                                              'excel' => "Excel",
                                              'html'  => 'HTML');
           my $output_selector = '<select size="1" name="output" >';
           foreach my $outputformat ('html','csv','excel') {
               my $option = '<option value="'.$outputformat.'" ';
               if ($outputformat eq $env{'form.output'}) {
                   $option .= 'selected ';
               }
               $option .='>'.$lt{$outputformat}.'</option>';
               $output_selector .= "\n".$option;
           }
           $output_selector .= '</select>';
           $r->print(&mt('Output Format: [_1]',$output_selector).('&nbsp;'x3));
     }      }
     $r->print($status_select."</p>\n");      $r->print(&mt('Student Status: [_1]',$status_select)."\n");
     my $cid=$ENV{'request.course.id'};      $r->print('<input type="submit" value="'.&mt('Update Display').'" />'.
                 "\n</p>\n");
       #
       # Print the classlist
       $r->print('<h2>'.&mt('Current Class List').'</h2>');
     my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist();      my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist();
     if (! defined($classlist)) {      if (! defined($classlist)) {
         $r->print(&mt('There are no students currently enrolled.')."\n");          $r->print(&mt('There are no students currently enrolled.')."\n");
     } else {      } else {
         # Print out the available choices          # Print out the available choices
         if ($ENV{'form.action'} eq 'modifystudent') {          if ($env{'form.action'} eq 'modifystudent') {
             &show_class_list($r,'view','modify','modifystudent',              &show_class_list($r,'view','modify',
                              $ENV{'form.Status'},$classlist,$keylist);                               $env{'form.Status'},$classlist,$keylist);
         } else {          } else {
             &show_class_list($r,'view','aboutme','classlist',              &show_class_list($r,$env{'form.output'},'aboutme',
                              $ENV{'form.Status'},$classlist,$keylist);                               $env{'form.Status'},$classlist,$keylist);
         }          }
     }      }
 }  }
   
 # ============================================== view classlist  
 sub print_formatted_classlist {  
     my $r=shift;  
     my $mode = shift;  
     my $cid=$ENV{'request.course.id'};  
     my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist();  
     if (! defined($classlist)) {  
         $r->print(&mt('There are no students currently enrolled.')."\n");  
     } else {  
         &show_class_list($r,$mode,'nolink','csv',  
                          $ENV{'form.Status'},$classlist,$keylist);  
     }  
 }  
   
 # =================================================== Show student list to drop  # =================================================== Show student list to drop
 sub show_class_list {  sub show_class_list {
     my ($r,$mode,$linkto,$action,$statusmode,$classlist,$keylist)=@_;      my ($r,$mode,$linkto,$statusmode,$classlist,$keylist)=@_;
     my $cid=$ENV{'request.course.id'};      my $cid=$env{'request.course.id'};
     #      #
     # Variables for excel output      # Variables for excel output
     my ($excel_workbook, $excel_sheet, $excel_filename,$row);      my ($excel_workbook, $excel_sheet, $excel_filename,$row,$format);
       #
       # Variables for csv output
       my ($CSVfile,$CSVfilename);
     #      #
     my $sortby = $ENV{'form.sortby'};      my $sortby = $env{'form.sortby'};
     if ($sortby !~ /^(username|domain|section|fullname|id)$/) {      if ($sortby !~ /^(username|domain|section|fullname|id|start|end|type)$/) {
         $sortby = 'username';          $sortby = 'username';
     }      }
     # Print out header       # Print out header 
     if ($mode eq 'view') {      unless ($mode eq 'autoenroll') {
           $r->print(<<END);
   <input type="hidden" name="state" value="$env{'form.state'}" />
   END
       }
       $r->print(<<END);
   <input type="hidden" name="sortby" value="$sortby" />
   END
       if ($mode eq 'html' || $mode eq 'view' || $mode eq 'autoenroll') {
         if ($linkto eq 'aboutme') {          if ($linkto eq 'aboutme') {
             $r->print(&mt('Select a user name to view the users personal page.'));              $r->print(&mt('Select a user name to view the users personal page.'));
         } elsif ($linkto eq 'modify') {          } elsif ($linkto eq 'modify') {
             $r->print(&mt('Select a user name to modify the students information'));              $r->print(&mt('Select a user name to modify the students information'));
         }          }
  my %lt=&Apache::lonlocal::texthash(   my %lt=&Apache::lonlocal::texthash(
                'usrn'   => "username",                                             'usrn'   => "username",
                        'dom'    => "domain",                                             'dom'    => "domain",
                        'sn'     => "student name",                                             'sn'     => "student name",
                        'sec'    => "section",                                             'sec'    => "section",
                                              'start'  => "start date",
                                              'end'    => "end date",
                                              'type'   => "enroll type/action"
    );     );
         $r->print(<<END);          unless ($mode eq 'autoenroll') {
               $r->print(<<END);
 <input type="hidden" name="sortby" value="$sortby" />  
 <input type="hidden" name="sname"  value="" />  <input type="hidden" name="sname"  value="" />
 <input type="hidden" name="sdom"   value="" />  <input type="hidden" name="sdom"   value="" />
   END
           }
           $r->print("
 <p>  <p>
 <table border=2>  <table border=2>
 <tr><th>  <tr>
           ");
           if ($mode eq 'autoenroll') {
               $r->print("
    <th><a href=\"javascript:document.studentform.sortby.value='type';document.studentform.submit();\">$lt{'type'}</a></th>
               ");
           } else {
               $r->print("
   <th>Count</th>
               ");
           }
           $r->print(<<END);
       <th>
        <a href="javascript:document.studentform.sortby.value='username';document.studentform.submit();">$lt{'usrn'}</a>         <a href="javascript:document.studentform.sortby.value='username';document.studentform.submit();">$lt{'usrn'}</a>
     </th><th>      </th><th>
        <a href="javascript:document.studentform.sortby.value='domain';document.studentform.submit();">$lt{'dom'}</a>         <a href="javascript:document.studentform.sortby.value='domain';document.studentform.submit();">$lt{'dom'}</a>
Line 1167  sub show_class_list { Line 1288  sub show_class_list {
        <a href="javascript:document.studentform.sortby.value='fullname';document.studentform.submit();">$lt{'sn'}</a>         <a href="javascript:document.studentform.sortby.value='fullname';document.studentform.submit();">$lt{'sn'}</a>
     </th><th>      </th><th>
        <a href="javascript:document.studentform.sortby.value='section';document.studentform.submit();">$lt{'sec'}</a>         <a href="javascript:document.studentform.sortby.value='section';document.studentform.submit();">$lt{'sec'}</a>
       </th><th>
          <a href="javascript:document.studentform.sortby.value='start';document.studentform.submit();">$lt{'start'}</a>
       </th><th>
          <a href="javascript:document.studentform.sortby.value='end';document.studentform.submit();">$lt{'end'}</a>
     </th>      </th>
 </tr>    </tr>
 END  END
     } elsif ($mode eq 'csv') {      } elsif ($mode eq 'csv') {
    #
    # Open a file
    $CSVfilename = '/prtspool/'.
       $env{'user.name'}.'_'.$env{'user.domain'}.'_'.
               time.'_'.rand(1000000000).'.csv';
    unless ($CSVfile = Apache::File->new('>/home/httpd'.$CSVfilename)) {
       $r->log_error("Couldn't open $CSVfilename for output $!");
       $r->print("Problems occured in writing the csv file.  ".
         "This error has been logged.  ".
         "Please alert your LON-CAPA administrator.");
       $CSVfile = undef;
    }
    #
    # Write headers and data to file
         if($statusmode eq 'Expired') {          if($statusmode eq 'Expired') {
             $r->print(&mt('Students with expired roles'));              print $CSVfile '"'.&mt('Students with expired roles').'"'."\n";
         }          }
         if ($statusmode eq 'Any') {          if ($statusmode eq 'Any') {
             $r->print('"'.join('","',(&mt("username"),&mt("domain"),"ID",              print $CSVfile '"'.join('","',map {
                       &mt("student name"),&mt("section"),&mt("status"))).   &Apache::loncommon::csv_translate(&mt($_))
                       '"'."\n");                  } ("username","domain","ID","student name",
                      "section","start date","end date","status")).'"'."\n";
         } else {          } else {
             $r->print('"'.join('","',(&mt("username"),&mt("domain"),"ID",              print $CSVfile '"'.join('","',map {
                       &mt("student name"),&mt("section"))).'"'."\n");   &Apache::loncommon::csv_translate(&mt($_))
                   } ("username","domain","ID","student name",
                      "section","start date","end date")).'"'."\n";
         }          }
     } elsif ($mode eq 'excel') {      } elsif ($mode eq 'excel') {
         # Create the excel spreadsheet          # Create the excel spreadsheet
         $excel_filename = '/prtspool/'.          ($excel_workbook,$excel_filename,$format) = 
             $ENV{'user.name'}.'_'.$ENV{'user.domain'}.'_'.              &Apache::loncommon::create_workbook($r);
                 time.'_'.rand(1000000000).'.xls';          return if (! defined($excel_workbook));
         $excel_workbook = Spreadsheet::WriteExcel->new('/home/httpd'.  
                                                        $excel_filename);  
         $excel_workbook->set_tempdir('/home/httpd/perl/tmp');  
         $excel_sheet = $excel_workbook->addworksheet('classlist');          $excel_sheet = $excel_workbook->addworksheet('classlist');
         #          #
         my $description = 'Class List for '.          my $description = 'Class List for '.
             $ENV{'course.'.$ENV{'request.course.id'}.'.description'};              $env{'course.'.$env{'request.course.id'}.'.description'};
         $excel_sheet->write($row++,0,$description);          $excel_sheet->write($row++,0,$description,$format->{'h1'});
         #          #
         $excel_sheet->write($row++,0,["username","domain","ID",          $excel_sheet->write($row++,0,["username","domain","ID",
                                       "student name","section","status"]);                                        "student name","section",
                                         "start date","end date","status"],
                               $format->{'bold'});
     }      }
     #      #
     # Sort the students      # Sort the students
Line 1216  END Line 1357  END
             ||              ||
         lc($classlist->{$a}->[$third]) cmp lc($classlist->{$b}->[$third])          lc($classlist->{$a}->[$third]) cmp lc($classlist->{$b}->[$third])
         } (keys(%$classlist));          } (keys(%$classlist));
       my $studentcount = 0;
       my $autocount = 0;
       my $manualcount = 0;
       my $unlockcount = 0;
       my $lockcount = 0;
     foreach my $student (@Sorted_Students) {      foreach my $student (@Sorted_Students) {
         my $username = $classlist->{$student}->[$index{'username'}];          my $sdata = $classlist->{$student};
         my $domain   = $classlist->{$student}->[$index{'domain'}];          my $username = $sdata->[$index{'username'}];
         my $section  = $classlist->{$student}->[$index{'section'}];          my $domain   = $sdata->[$index{'domain'}];
         my $name     = $classlist->{$student}->[$index{'fullname'}];          my $section  = $sdata->[$index{'section'}];
         my $id       = $classlist->{$student}->[$index{'id'}];          my $name     = $sdata->[$index{'fullname'}];
         my $status   = $classlist->{$student}->[$index{'status'}];          my $id       = $sdata->[$index{'id'}];
           my $status   = $sdata->[$index{'status'}];
           my $start    = $sdata->[$index{'start'}];
           my $end      = $sdata->[$index{'end'}];
           my $type     = $sdata->[$index{'type'}];
         next if (($statusmode ne 'Any') && ($status ne $statusmode));          next if (($statusmode ne 'Any') && ($status ne $statusmode));
         if ($mode eq 'view') {          if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll') {
             $r->print("<tr>\n    <td>\n        ");              if (! defined($start) || $start == 0) {
                   $start = &mt('none');
               } else {
                   $start = &Apache::lonlocal::locallocaltime($start);
               }
               if (! defined($end) || $end == 0) {
                   $end = &mt('none');
               } else {
                   $end = &Apache::lonlocal::locallocaltime($end);
               }
               $r->print("<tr>\n    ");
               if ($mode eq 'autoenroll') {
                   my $lockedtype = $sdata->[$index{'lockedtype'}];
                   $studentcount++;
                   my $cellentry;
                   if ($type eq 'auto') {
                       $cellentry = '<b>'.&mt('auto').'</b>&nbsp;<input type="checkbox" name="chgauto" value="'.$username.':'.$domain.'" />&nbsp;Change';
                       $autocount ++;
                   } else {
                       $cellentry = '<table border="0" cellspacing="0"><tr><td rowspan="2"><b>'.&mt('manual').'</b></td><td><nobr><input type="checkbox" name="chgmanual" value="'.$username.':'.$domain.'" />&nbsp;Change</nobr></td></tr><tr><td><nobr>';
                       $manualcount ++;
                       if ($lockedtype) {
                           $cellentry .= '<input type="checkbox" name="unlockchg" value="'.$username.':'.$domain.'" />&nbsp;'.&mt('Unlock');
                           $unlockcount ++;
                       } else {
                           $cellentry .= '<input type="checkbox" name="lockchg" value="'.$username.':'.$domain.'" />&nbsp;'.&mt('Lock');
                           $lockcount ++;
                       }
                       $cellentry .= '</nobr></td></tr></table>';
                   }
                   $r->print("<td>$cellentry<td>\n    ");
               } else {
                   $r->print("<td>".(++$studentcount)."</td><td>\n    ");
               }
             if ($linkto eq 'nothing') {              if ($linkto eq 'nothing') {
                 $r->print($username);                  $r->print($username);
             } elsif ($linkto eq 'aboutme') {              } elsif ($linkto eq 'aboutme') {
Line 1247  END Line 1430  END
     <td>$id</td>      <td>$id</td>
     <td>$name</td>      <td>$name</td>
     <td>$section</td>      <td>$section</td>
 </tr>      <td>$start</td>
       <td>$end</td>
      </tr>
 END  END
         } elsif ($mode eq 'csv') {          } elsif ($mode eq 'csv') {
               next if (! defined($CSVfile));
             # no need to bother with $linkto              # no need to bother with $linkto
               if (! defined($start) || $start == 0) {
                   $start = &mt('none');
               } else {
                   $start = &Apache::lonlocal::locallocaltime($start);
               }
               if (! defined($end) || $end == 0) {
                   $end = &mt('none');
               } else {
                   $end = &Apache::lonlocal::locallocaltime($end);
               }
             my @line = ();              my @line = ();
             foreach ($username,$domain,$id,$name,$section) {              foreach ($username,$domain,$id,$name,$section,$start,$end) {
                 push @line,&Apache::loncommon::csv_translate($_);                  push @line,&Apache::loncommon::csv_translate($_);
             }              }
             if ($statusmode eq 'Any') {              if ($statusmode eq 'Any') {
                 push @line,&Apache::loncommon::csv_translate($status);                  push @line,&Apache::loncommon::csv_translate($status);
             }              }
             my $tmp = $";              print $CSVfile '"'.join('","',@line).'"'."\n";
             $" = '","';  
             $r->print("\"@line\"\n");  
             $" = $tmp;  
         } elsif ($mode eq 'excel') {          } elsif ($mode eq 'excel') {
             $excel_sheet->write($row++,0,[$username,$domain,$id,              $excel_sheet->write($row,0,[$username,$domain,$id,
                                           $name,$section,$status]);                                            $name,$section]);
               my $col = 5;
               foreach my $time ($start,$end) {
                   $excel_sheet->write($row,$col++,
                                      &Apache::lonstathelpers::calc_serial($time),
                                       $format->{'date'});
               }
               $excel_sheet->write($row,$col++,$status);
               $row++;
         }          }
     }      }
     if ($mode eq 'view') {      if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll') {
         $r->print('</table><br>');          $r->print('</table><br>');
     } elsif ($mode eq 'excel') {      } elsif ($mode eq 'excel') {
         $excel_workbook->close();          $excel_workbook->close();
         $r->print('<p><a href="'.$excel_filename.'">'.          $r->print('<p><a href="'.$excel_filename.'">'.
                   &mt('Your Excel spreadsheet').'</a> '.&mt('is ready for download').'.</p>'."\n");                    &mt('Your Excel spreadsheet').'</a> '.&mt('is ready for download').'.</p>'."\n");
       } elsif ($mode eq 'csv') {
           close($CSVfile);
           $r->print('<a href="'.$CSVfilename.'">'.
                     &mt('Your CSV file').'</a> is ready for download.'.
                     "\n");
           $r->rflush();
     }      }
       if ($mode eq 'autoenroll') {
           return ($studentcount,$autocount,$manualcount,$lockcount,$unlockcount);
       }
       return;
 }  }
   
   
Line 1284  sub print_modify_student_form { Line 1495  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'},
                                             ['sdom','sname']);                                                  ['sdom','sname']);    
     my $sname  = $ENV{'form.sname'};      my $sname  = $env{'form.sname'};
     my $sdom   = $ENV{'form.sdom'};      my $sdom   = $env{'form.sdom'};
     my $sortby = $ENV{'form.sortby'};      my $sortby = $env{'form.sortby'};
     # 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',
Line 1308  sub print_modify_student_form { Line 1519  sub print_modify_student_form {
         $r->print('<p>'.$starttime.'</p>');          $r->print('<p>'.$starttime.'</p>');
         return;          return;
     }      }
       #
     # Deal with date forms      # Deal with date forms
       my $current_date_description = '';
       my $textdate = '';
   
       if (! defined($starttime) || $starttime == 0) {
           $current_date_description = &mt('Current Starting Date: not set').
               '<br />';
       } else {
           $current_date_description = 
               &mt('Current Starting Date: [_1]',
                   &Apache::lonlocal::locallocaltime($starttime)).'<br />';
       }
       if (! defined($endtime) || $endtime == 0) {
           $current_date_description.= &mt('Current Ending Date: not set').
               '<br />';
       } else {
           $current_date_description.= 
               &mt('Current Ending Date: [_1]',
                   &Apache::lonlocal::locallocaltime($endtime)).'<br />';
   
       }
     my $date_table = &date_setting_table($starttime,$endtime);      my $date_table = &date_setting_table($starttime,$endtime);
     #      #
     if (! exists($ENV{'form.Status'}) ||       if (! exists($env{'form.Status'}) || 
         $ENV{'form.Status'} !~ /^(Any|Expired|Active)$/) {          $env{'form.Status'} !~ /^(Any|Expired|Active)$/) {
         $ENV{'form.Status'} = 'crap';          $env{'form.Status'} = 'crap';
     }      }
     # Make sure student is enrolled in course      # Make sure student is enrolled in course
     my %lt=&Apache::lonlocal::texthash(      my %lt=&Apache::lonlocal::texthash(
Line 1340  $lt{'odcc'} Line 1572  $lt{'odcc'}
 <input type="hidden" name="action"  value="modifystudent" />  <input type="hidden" name="action"  value="modifystudent" />
 <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'}   <h2>$lt{'mef'} $info{'firstname'} $info{'middlename'} 
 $info{'lastname'} $info{'generation'}, $sname\@$sdom</h2>  $info{'lastname'} $info{'generation'}, $sname\@$sdom</h2>
 <p>  <p>
Line 1360  $info{'lastname'} $info{'generation'}, $ Line 1591  $info{'lastname'} $info{'generation'}, $
 <input type="checkbox" name="forceid" >   <input type="checkbox" name="forceid" > 
 $lt{'disn'}  $lt{'disn'}
 </p><p>  </p><p>
 <b>$lt{'sec'}</b>: <input type="text" name="section" value="$section" size="4"/>  <b>$lt{'sec'}</b>: <input type="text" name="section" value="$section" size="14"/>
 </p>  </p>
   <p>$current_date_description</p>
 <p>$date_table</p>  <p>$date_table</p>
 <input type="submit" value="$lt{'sm'}" />  <input type="submit" value="$lt{'sm'}" />
 </body></html>  </body></html>
Line 1376  sub modify_single_student { Line 1608  sub modify_single_student {
     my $r = shift;      my $r = shift;
     #      #
     # Remove non alphanumeric values from the section      # Remove non alphanumeric values from the section
     $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) = &get_dates_from_form();
     if ($ENV{'form.makedatesdefault'}) {      if ($env{'form.makedatesdefault'}) {
         $r->print(&make_dates_default($starttime,$endtime));          $r->print(&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
     my $sortby = $ENV{'form.sortby'};      my $sortby = $env{'form.sortby'};
     my $status = $ENV{'form.Status'};      my $status = $env{'form.Status'};
     #      #
     # We always need this information      # We always need this information
     my $slogin     = $ENV{'form.slogin'};      my $slogin     = $env{'form.slogin'};
     my $sdom       = $ENV{'form.sdomain'};      my $sdom       = $env{'form.sdomain'};
     #      #
     # Get the old data      # Get the old data
     my %old=&Apache::lonnet::get('environment',      my %old=&Apache::lonnet::get('environment',
Line 1398  sub modify_single_student { Line 1630  sub modify_single_student {
                                   'lastname','generation','id'],                                    'lastname','generation','id'],
                                  $sdom, $slogin);                                   $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);
     if ($tmp =~ /^(con_lost|error|no_such_host)/i) {      if ($tmp =~ /^(con_lost|error|no_such_host)/i) {
         $r->print(&mt('There was an error determining the environment values for')." $slogin \@ $sdom.");          $r->print(&mt('There was an error determining the environment values for')." $slogin \@ $sdom.");
Line 1407  sub modify_single_student { Line 1639  sub modify_single_student {
     undef $tmp;      undef $tmp;
     #      #
     # Get the new data      # Get the new data
     my $firstname  = $ENV{'form.firstname'};      my $firstname  = $env{'form.firstname'};
     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 $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'};
     my $displayable_starttime = localtime($starttime);      my $displayable_starttime = localtime($starttime);
     my $displayable_endtime   = localtime($endtime);      my $displayable_endtime   = localtime($endtime);
     #       # 
     # check for forceid override      # check for forceid override
     if ((defined($old{'id'})) && ($old{'id'} ne '') &&       if ((defined($old{'id'})) && ($old{'id'} ne '') && 
         ($sid ne $old{'id'}) && (! exists($ENV{'form.forceid'}))) {          ($sid ne $old{'id'}) && (! exists($env{'form.forceid'}))) {
         $r->print("<font color=\"ff0000\">".&mt('You changed the students id but did not disable the ID change safeguard. The students id will not be changed.')."</font>");          $r->print("<font color=\"ff0000\">".&mt('You changed the students id but did not disable the ID change safeguard. The students id will not be changed.')."</font>");
         $sid = $old{'id'};          $sid = $old{'id'};
     }      }
Line 1486  END Line 1718  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 = &modifystudent($sdom,$slogin,
                                                 $ENV{'request.course.id'},                                                  $env{'request.course.id'},
                                                 $section,undef);                                                  $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 occured 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'});
     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 1502  END Line 1734  END
                   $roleresults);                    $roleresults);
         &Apache::lonnet::logthis("londropadd:failed attempt to modify student".          &Apache::lonnet::logthis("londropadd:failed attempt to modify student".
                                  " data for ".$slogin." \@ ".$sdom." by ".                                   " data for ".$slogin." \@ ".$sdom." by ".
                                  $ENV{'user.name'}." \@ ".$ENV{'user.domain'}.                                   $env{'user.name'}." \@ ".$env{'user.domain'}.
                                  ":".$roleresults);                                   ":".$roleresults);
     } else { # everything is okay!      } else { # everything is okay!
         $r->print(&mt('Student information updated successfully.')." <br />".          $r->print(&mt('Student information updated successfully.')." <br />".
Line 1522  END Line 1754  END
   
 sub get_enrollment_data {  sub get_enrollment_data {
     my ($sname,$sdomain) = @_;      my ($sname,$sdomain) = @_;
     my $courseid = $ENV{'request.course.id'};      my $courseid = $env{'request.course.id'};
     $courseid =~ s:_:/:g;      $courseid =~ s:_:/:g;
     my %roles = &Apache::lonnet::dump('roles',$sdomain,$sname);      my %roles = &Apache::lonnet::dump('roles',$sdomain,$sname);
     my ($tmp) = keys(%roles);      my ($tmp) = keys(%roles);
Line 1581  which describes the order elements are s Line 1813  which describes the order elements are s
 #################################################  #################################################
 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'};
     if (! exists($ENV{'form.sortby'})) {      if (! exists($env{'form.sortby'})) {
         &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},          &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                                 ['sortby']);                                                  ['sortby']);
     }      }
     my $sortby = $ENV{'form.sortby'};      my $sortby = $env{'form.sortby'};
     if ($sortby !~ /^(username|domain|section|fullname|id)$/) {      if ($sortby !~ /^(username|domain|section|fullname|id|start|end)$/) {
         $sortby = 'username';          $sortby = 'username';
     }      }
     #      #
Line 1611  function uncheckAll(field) { Line 1843  function uncheckAll(field) {
 <input type="hidden" name="phase" value="four">  <input type="hidden" name="phase" value="four">
 END  END
   
   my %lt=&Apache::lonlocal::texthash('usrn'   => "username",
                                      'dom'    => "domain",
                                      'sn'     => "student name",
                                      'sec'    => "section",
                                      'start'  => "start date",
                                      'end'    => "end date",
                                      );
     if ($nosort) {      if ($nosort) {
  my %lt=&Apache::lonlocal::texthash(  
                'usrn'   => "username",  
                        'dom'    => "domain",  
                        'sn'     => "student name",  
                        'sec'    => "section",  
    );  
         $r->print(<<END);          $r->print(<<END);
 <table border=2>  <table border=2>
 <tr>  <tr>
Line 1627  END Line 1860  END
     <th>ID</th>      <th>ID</th>
     <th>$lt{'sn'}</th>      <th>$lt{'sn'}</th>
     <th>$lt{'sec'}</th>      <th>$lt{'sec'}</th>
       <th>$lt{'start'}</th>
       <th>$lt{'end'}</th>
 </tr>  </tr>
 END  END
   
     } else  {      } else  {
  my %lt=&Apache::lonlocal::texthash(  
                'usrn'   => "username",  
                        'dom'    => "domain",  
                        'sn'     => "student name",  
                        'sec'    => "section",  
    );  
         $r->print(<<END);          $r->print(<<END);
 <table border=2>  <table border=2>
 <tr><th>&nbsp;</th>  <tr><th>&nbsp;</th>
Line 1650  END Line 1879  END
        <a href="/adm/dropadd?action=$action&sortby=fullname">$lt{'sn'}</a>         <a href="/adm/dropadd?action=$action&sortby=fullname">$lt{'sn'}</a>
     </th><th>      </th><th>
        <a href="/adm/dropadd?action=$action&sortby=section">$lt{'sec'}</a>         <a href="/adm/dropadd?action=$action&sortby=section">$lt{'sec'}</a>
       </th><th>
          <a href="/adm/dropadd?action=$action&sortby=start">$lt{'start'}</a>
       </th><th>
          <a href="/adm/dropadd?action=$action&sortby=end">$lt{'end'}</a>
     </th>      </th>
 </tr>  </tr>
 END  END
Line 1673  END Line 1906  END
         } (keys(%$classlist));          } (keys(%$classlist));
     foreach my $student (@Sorted_Students) {      foreach my $student (@Sorted_Students) {
         my $error;          my $error;
         my $username = $classlist->{$student}->[$index{'username'}];          my $sdata = $classlist->{$student};
         my $domain   = $classlist->{$student}->[$index{'domain'}];          my $username = $sdata->[$index{'username'}];
         my $section  = $classlist->{$student}->[$index{'section'}];          my $domain   = $sdata->[$index{'domain'}];
         my $name     = $classlist->{$student}->[$index{'fullname'}];          my $section  = $sdata->[$index{'section'}];
         my $id       = $classlist->{$student}->[$index{'id'}];          my $name     = $sdata->[$index{'fullname'}];
         my $status   = $classlist->{$student}->[$index{'status'}];          my $id       = $sdata->[$index{'id'}];
           my $start    = $sdata->[$index{'start'}];
           my $end      = $sdata->[$index{'end'}];
           if (! defined($start) || $start == 0) {
               $start = &mt('none');
           } else {
               $start = &Apache::lonlocal::locallocaltime($start);
           }
           if (! defined($end) || $end == 0) {
               $end = &mt('none');
           } else {
               $end = &Apache::lonlocal::locallocaltime($end);
           }
           my $status   = $sdata->[$index{'status'}];
         next if ($status ne 'Active');          next if ($status ne 'Active');
         #          #
         $r->print(<<"END");          $r->print(<<"END");
Line 1689  END Line 1935  END
     <td>$id</td>      <td>$id</td>
     <td>$name</td>      <td>$name</td>
     <td>$section</td>      <td>$section</td>
       <td>$start</td>
       <td>$end</td>
 </tr>  </tr>
 END  END
     }      }
     $r->print('</table><br>');      $r->print('</table><br>');
     my %lt=&Apache::lonlocal::texthash(      %lt=&Apache::lonlocal::texthash(
                'dp'   => "Drop Students",                 'dp'   => "Drop Students",
                        'ca'   => "check all",                         'ca'   => "check all",
                        'ua'   => "uncheck all",                         'ua'   => "uncheck all",
Line 1739  sub upfile_drop_add { Line 1987  sub upfile_drop_add {
     my $r=shift;      my $r=shift;
     &Apache::loncommon::load_tmp_file($r);      &Apache::loncommon::load_tmp_file($r);
     my @studentdata=&Apache::loncommon::upfile_record_sep();      my @studentdata=&Apache::loncommon::upfile_record_sep();
     if($ENV{'form.noFirstLine'}){shift(@studentdata);}      if($env{'form.noFirstLine'}){shift(@studentdata);}
     my @keyfields = split(/\,/,$ENV{'form.keyfields'});      my @keyfields = split(/\,/,$env{'form.keyfields'});
     my $cid = $ENV{'request.course.id'};      my $cid = $env{'request.course.id'};
     my %fields=();      my %fields=();
     for (my $i=0; $i<=$ENV{'form.nfields'}; $i++) {      for (my $i=0; $i<=$env{'form.nfields'}; $i++) {
         if ($ENV{'form.upfile_associate'} eq 'reverse') {          if ($env{'form.upfile_associate'} eq 'reverse') {
             if ($ENV{'form.f'.$i} ne 'none') {              if ($env{'form.f'.$i} ne 'none') {
                 $fields{$keyfields[$i]}=$ENV{'form.f'.$i};                  $fields{$keyfields[$i]}=$env{'form.f'.$i};
             }              }
         } else {          } else {
             $fields{$ENV{'form.f'.$i}}=$keyfields[$i];              $fields{$env{'form.f'.$i}}=$keyfields[$i];
         }          }
     }      }
     #      #
       # Store the field choices away
       foreach my $field (qw/username names 
                          fname mname lname gen id sec ipwd email/) {
           $env{'form.'.$field.'_choice'}=$fields{$field};
       }
       &Apache::loncommon::store_course_settings('enrollment_upload',
                                                 { 'username_choice' => 'scalar',
                                                   'names_choice' => 'scalar',
                                                   'fname_choice' => 'scalar',
                                                   'mname_choice' => 'scalar',
                                                   'lname_choice' => 'scalar',
                                                   'gen_choice' => 'scalar',
                                                   'id_choice' => 'scalar',
                                                   'sec_choice' => 'scalar',
                                                   'ipwd_choice' => 'scalar',
                                                   'email_choice' => 'scalar' });
   
       #
     my ($startdate,$enddate) = &get_dates_from_form();      my ($startdate,$enddate) = &get_dates_from_form();
     if ($ENV{'form.makedatesdefault'}) {      if ($env{'form.makedatesdefault'}) {
         $r->print(&make_dates_default($startdate,$enddate));          $r->print(&make_dates_default($startdate,$enddate));
     }      }
     # Determine domain and desired host (home server)      # Determine domain and desired host (home server)
     my $domain=$ENV{'form.lcdomain'};      my $domain=$env{'form.lcdomain'};
     my $desiredhost = $ENV{'form.lcserver'};      my $desiredhost = $env{'form.lcserver'};
     if (lc($desiredhost) eq 'default') {      if (lc($desiredhost) eq 'default') {
         $desiredhost = undef;          $desiredhost = undef;
     } else {      } else {
Line 1774  sub upfile_drop_add { Line 2040  sub upfile_drop_add {
     # Determine authentication mechanism      # Determine authentication mechanism
     my $amode  = '';      my $amode  = '';
     my $genpwd = '';      my $genpwd = '';
     if ($ENV{'form.login'} eq 'krb') {      if ($env{'form.login'} eq 'krb') {
         $amode='krb';          $amode='krb';
  $amode.=$ENV{'form.krbver'};   $amode.=$env{'form.krbver'};
         $genpwd=$ENV{'form.krbarg'};          $genpwd=$env{'form.krbarg'};
     } elsif ($ENV{'form.login'} eq 'int') {      } elsif ($env{'form.login'} eq 'int') {
         $amode='internal';          $amode='internal';
         if ((defined($ENV{'form.intarg'})) && ($ENV{'form.intarg'})) {          if ((defined($env{'form.intarg'})) && ($env{'form.intarg'})) {
             $genpwd=$ENV{'form.intarg'};              $genpwd=$env{'form.intarg'};
         }          }
     } elsif ($ENV{'form.login'} eq 'loc') {      } elsif ($env{'form.login'} eq 'loc') {
         $amode='localauth';          $amode='localauth';
         if ((defined($ENV{'form.locarg'})) && ($ENV{'form.locarg'})) {          if ((defined($env{'form.locarg'})) && ($env{'form.locarg'})) {
             $genpwd=$ENV{'form.locarg'};              $genpwd=$env{'form.locarg'};
         }          }
     }      }
     if ($amode =~ /^krb/) {      if ($amode =~ /^krb/) {
Line 1877  sub upfile_drop_add { Line 2143  sub upfile_drop_add {
                              \$lname,\$gen,\$sec) {                               \$lname,\$gen,\$sec) {
                         $$_ =~ 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,                          &modifystudent($domain,$username,$cid,$sec,
                                        $desiredhost);                                         $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,
                              $startdate,$ENV{'form.forceid'},$desiredhost,                               $startdate,$env{'form.forceid'},$desiredhost,
                              $email);                               $email);
                         if ($reply ne 'ok') {                          if ($reply ne 'ok') {
                             $reply =~ s/^error://;                              $reply =~ s/^error://;
Line 1914  sub upfile_drop_add { Line 2180  sub upfile_drop_add {
         #####################################          #####################################
         #           Drop students           #          #           Drop students           #
         #####################################          #####################################
         if ($ENV{'form.fullup'} eq 'yes') {          if ($env{'form.fullup'} eq 'yes') {
             $r->print('<h3>'.&mt('Dropping Students')."</h3>\n");              $r->print('<h3>'.&mt('Dropping Students')."</h3>\n");
             #  Get current classlist              #  Get current classlist
             my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist();              my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist();
Line 1942  sub upfile_drop_add { Line 2208  sub upfile_drop_add {
 sub drop_student_list {  sub drop_student_list {
     my $r=shift;      my $r=shift;
     my $count=0;      my $count=0;
     my @droplist;      my @droplist = &Apache::loncommon::get_env_multiple('form.droplist');
     if (ref($ENV{'form.droplist'})) {  
         @droplist = @{$ENV{'form.droplist'}};  
     } else {  
         @droplist = ($ENV{'form.droplist'});  
     }  
     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 = &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 2008  sub handler { Line 2269  sub handler {
     }      }
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                             ['action','state']);                                              ['action','state']);
   
       &Apache::lonhtmlcommon::clear_breadcrumbs();
       &Apache::lonhtmlcommon::add_breadcrumb
           ({href=>"/adm/dropadd",
             text=>"Enrollment Manager",
             faq=>9,bug=>'Instructor Interface',});
     #  Needs to be in a course      #  Needs to be in a course
     if (! (($ENV{'request.course.fn'}) &&      if (! ($env{'request.course.fn'})) {
           (&Apache::lonnet::allowed('cst',$ENV{'request.course.id'})))) {          # Not in a course
         # Not in a course, or not allowed to modify parms          $env{'user.error.msg'}=
         $ENV{'user.error.msg'}=  
             "/adm/dropadd:cst:0:0:Cannot drop or add students";              "/adm/dropadd:cst:0:0:Cannot drop or add students";
         return HTTP_NOT_ACCEPTABLE;           return HTTP_NOT_ACCEPTABLE; 
     }      }
     #      #
       my $view_permission = 
           &Apache::lonnet::allowed('vcl',$env{'request.course.id'});
       my $enrl_permission = 
           &Apache::lonnet::allowed('cst',$env{'request.course.id'});
       if (! $view_permission && ! $enrl_permission) {
           $env{'user.error.msg'}=
               "/adm/dropadd:cst:0:0:Cannot drop or add students";
           return HTTP_NOT_ACCEPTABLE;        
       }
       #
     # Only output the header information if they did not request csv format      # Only output the header information if they did not request csv format
     #      #
     if (exists($ENV{'form.state'}) && ($ENV{'form.state'} eq 'csv')) {      # Start page
         $r->content_type('text/csv');      &Apache::loncommon::content_type($r,'text/html');
     } else {      $r->send_http_header;
         # Start page      $r->print(&header());
         &Apache::loncommon::content_type($r,'text/html');  
         $r->send_http_header;  
         $r->print(&header());  
     }  
     #      #
     # Main switch on form.action and form.state, as appropriate      # Main switch on form.action and form.state, as appropriate
     if (! exists($ENV{'form.action'})) {      if (! exists($env{'form.action'})) {
         &print_main_menu($r);          $r->print(&Apache::lonhtmlcommon::breadcrumbs
     } elsif ($ENV{'form.action'} eq 'upload') {                    (undef,'Enrollment Manager'));
         if (! exists($ENV{'form.state'})) {          &print_main_menu($r,$enrl_permission,$view_permission);
       } elsif ($env{'form.action'} eq 'upload' && $enrl_permission) {
           &Apache::lonhtmlcommon::add_breadcrumb
               ({href=>'/adm/dropadd?action=upload&state=',
                 text=>"Upload Classlist"});
           $r->print(&Apache::lonhtmlcommon::breadcrumbs
                     (undef,'Upload Classlist','Course_Create_Class_List'));
           if (! exists($env{'form.state'})) {
             &print_first_courselist_upload_form($r);                          &print_first_courselist_upload_form($r);            
         } elsif ($ENV{'form.state'} eq 'got_file') {          } elsif ($env{'form.state'} eq 'got_file') {
             &print_upload_manager_form($r);              &print_upload_manager_form($r);
         } elsif ($ENV{'form.state'} eq 'enrolling') {          } elsif ($env{'form.state'} eq 'enrolling') {
             if ($ENV{'form.datatoken'}) {              if ($env{'form.datatoken'}) {
                 &upfile_drop_add($r);                  &upfile_drop_add($r);
             } else {              } else {
                 # Hmmm, this is an error                  # Hmmm, this is an error
Line 2045  sub handler { Line 2324  sub handler {
         } else {          } else {
             &print_first_courselist_upload_form($r);                          &print_first_courselist_upload_form($r);            
         }          }
     } elsif ($ENV{'form.action'} eq 'drop') {      } elsif ($env{'form.action'} eq 'drop' && $enrl_permission) {
         if (! exists($ENV{'form.state'})) {          &Apache::lonhtmlcommon::add_breadcrumb
               ({href=>'/adm/dropadd?action=drop',
                 text=>"Drop Students"});
           $r->print(&Apache::lonhtmlcommon::breadcrumbs
                     (undef,'Drop Students','Course_Drop_Student'));
           if (! exists($env{'form.state'})) {
             &print_drop_menu($r);              &print_drop_menu($r);
         } elsif ($ENV{'form.state'} eq 'done') {          } elsif ($env{'form.state'} eq 'done') {
             &drop_student_list($r);              &drop_student_list($r);
         } else {          } else {
             &print_drop_menu($r);              &print_drop_menu($r);
         }          }
     } elsif ($ENV{'form.action'} eq 'enrollstudent') {      } elsif ($env{'form.action'} eq 'enrollstudent' && $enrl_permission) {
         if (! exists($ENV{'form.state'})) {          &Apache::lonhtmlcommon::add_breadcrumb
               ({href=>'/adm/dropadd?action=enrollstudent',
                 text=>"Enroll Student"});
           $r->print(&Apache::lonhtmlcommon::breadcrumbs
                     (undef,'Enroll Student','Course_Add_Student'));
           if (! exists($env{'form.state'})) {
             &get_student_username_domain_form($r);              &get_student_username_domain_form($r);
         } elsif ($ENV{'form.state'} eq 'gotusername') {          } elsif ($env{'form.state'} eq 'gotusername') {
             &print_enroll_single_student_form($r);              &print_enroll_single_student_form($r);
         } elsif ($ENV{'form.state'} eq 'enrolling') {          } elsif ($env{'form.state'} eq 'enrolling') {
             &enroll_single_student($r);              &enroll_single_student($r);
         } else {          } else {
             &get_student_username_domain_form($r);              &get_student_username_domain_form($r);
         }          }
     } elsif ($ENV{'form.action'} eq 'classlist') {      } elsif ($env{'form.action'} eq 'classlist' && $view_permission) {
         if (! exists($ENV{'form.state'})) {          &Apache::lonhtmlcommon::add_breadcrumb
             &print_html_classlist($r);              ({href=>'/adm/dropadd?action=classlist',
         } elsif ($ENV{'form.state'} eq 'csv') {                text=>"View Classlist"});
             &print_formatted_classlist($r,'csv');          $r->print(&Apache::lonhtmlcommon::breadcrumbs
         } elsif ($ENV{'form.state'} eq 'excel') {                    (undef,'View Classlist','Course_View_Class_List'));
             &print_formatted_classlist($r,'excel');          if (! exists($env{'form.state'})) {
               &print_html_classlist($r,undef);
           } elsif ($env{'form.state'} eq 'csv') {
               &print_html_classlist($r,'csv');
           } elsif ($env{'form.state'} eq 'excel') {
               &print_html_classlist($r,'excel');
         } else {          } else {
             &print_html_classlist($r);              &print_html_classlist($r,undef);
         }          }
     } elsif ($ENV{'form.action'} eq 'modifystudent') {      } elsif ($env{'form.action'} eq 'modifystudent' && $enrl_permission) {
         if (! exists($ENV{'form.state'})) {          &Apache::lonhtmlcommon::add_breadcrumb
               ({href=>'/adm/dropadd?action=modifystudent',
                 text=>"Modify Student Data"});
           $r->print(&Apache::lonhtmlcommon::breadcrumbs
                     (undef,'Modify Student Data','Course_Modify_Student_Data'));
           if (! exists($env{'form.state'})) {
             &print_html_classlist($r);              &print_html_classlist($r);
         } elsif ($ENV{'form.state'} eq 'selected') {          } elsif ($env{'form.state'} eq 'selected') {
             &print_modify_student_form($r);              &print_modify_student_form($r);
         } elsif ($ENV{'form.state'} eq 'done') {          } elsif ($env{'form.state'} eq 'done') {
             &modify_single_student($r);              &modify_single_student($r);
         } else {          } else {
             &print_html_classlist($r);              &print_html_classlist($r);
Line 2086  sub handler { Line 2385  sub handler {
     } else {      } else {
         # We should not end up here, but I guess it is possible          # We should not end up here, but I guess it is possible
         &Apache::lonnet::logthis("Undetermined state in londropadd.pm.  ".          &Apache::lonnet::logthis("Undetermined state in londropadd.pm.  ".
                                  "form.action = ".$ENV{'form.action'}.                                   "form.action = ".$env{'form.action'}.
                                  "Someone should fix this.");                                   "Someone should fix this.");
         &print_main_menu($r);          $r->print(&Apache::lonhtmlcommon::breadcrumbs
                     (undef,'Enrollment Manager'));
           &print_main_menu($r,$enrl_permission,$view_permission);
     }      }
     #      #
     # Finish up      # Finish up
     if (exists($ENV{'form.state'}) && ($ENV{'form.state'} eq 'csv')) {      $r->print('</form></body></html>');
         $r->print("\n");  
     } else {  
         $r->print('</form></body></html>');  
     }  
     return OK;      return OK;
 }  }
   

Removed from v.1.98  
changed lines
  Added in v.1.128


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