Diff for /loncom/interface/Attic/londropadd.pm between versions 1.148 and 1.166

version 1.148, 2006/11/22 22:53:41 version 1.166, 2007/08/26 21:09:42
Line 40  use Spreadsheet::WriteExcel; Line 40  use Spreadsheet::WriteExcel;
 use Apache::lonstathelpers();  use Apache::lonstathelpers();
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::longroup;  use Apache::longroup;
   use LONCAPA();
   
 ###############################################################  ###############################################################
 ###############################################################  ###############################################################
 sub header {  sub header {
     my $start_page=&Apache::loncommon::start_page('Enrollment Manager');      my ($jscript,$loaditems) = @_;
       my $start_page;
       if (ref($loaditems) eq 'HASH') {
           $start_page=&Apache::loncommon::start_page('Enrollment Manager',$jscript,{'add_entries' => $loaditems,});
       } else {
           $start_page=&Apache::loncommon::start_page('Enrollment Manager',$jscript);
       }
     return(<<ENDHEAD);      return(<<ENDHEAD);
 $start_page  $start_page
 <form method="post" enctype="multipart/form-data"    <form method="post" enctype="multipart/form-data"  
Line 60  sub modifystudent { Line 67  sub modifystudent {
     # if $csec is undefined, drop the student from all the courses matching      # if $csec is undefined, drop the student from all the courses matching
     # this one.  If $csec is defined, drop them from all other sections of       # this one.  If $csec is defined, drop them from all other sections of 
     # this course and add them to section $csec      # this course and add them to section $csec
     $courseid=~s/\_/\//g;      my $cdom = $env{'course.'.$courseid.'.domain'};
     $courseid=~s/^(\w)/\/$1/;      my $cnum = $env{'course.'.$courseid.'.num'};
     my %roles = &Apache::lonnet::dump('roles',$udom,$unam);      my %roles = &Apache::lonnet::dump('roles',$udom,$unam);
     my ($tmp) = keys(%roles);      my ($tmp) = keys(%roles);
     # Bail out if we were unable to get the students roles      # Bail out if we were unable to get the students roles
Line 69  sub modifystudent { Line 76  sub modifystudent {
     # Go through the roles looking for enrollment in this course      # Go through the roles looking for enrollment in this course
     my $result = '';      my $result = '';
     foreach my $course (keys(%roles)) {      foreach my $course (keys(%roles)) {
         if ($course=~/^$courseid(?:\/)*(?:\s+)*(\w+)*\_st$/) {          if ($course=~m{^/\Q$cdom\E/\Q$cnum\E(?:\/)*(?:\s+)*(\w+)*\_st$}) {
             # We are in this course              # We are in this course
             my $section=$1;              my $section=$1;
             $section='' if ($course eq $courseid.'_st');              $section='' if ($course eq "/$cdom/$cnum".'_st');
             if (defined($csec) && $section eq $csec) {              if (defined($csec) && $section eq $csec) {
                 $result .= 'ok:';                  $result .= 'ok:';
             } elsif ( ((!$section) && (!$csec)) || ($section ne $csec) ) {              } elsif ( ((!$section) && (!$csec)) || ($section ne $csec) ) {
Line 105  sub domain_form { Line 112  sub domain_form {
     # Set up domain and server selection forms      # Set up domain and server selection forms
     #      #
     # Get the domains      # Get the domains
     my @domains = &Apache::loncommon::get_domains();      my @domains = &Apache::lonnet::all_domains();
     # build up the menu information to be passed to       # build up the menu information to be passed to 
     # &Apache::loncommon::linked_select_forms      # &Apache::loncommon::linked_select_forms
     my %select_menus;      my %select_menus;
Line 116  sub domain_form { Line 123  sub domain_form {
         $select_menus{$dom}->{'default'}= 'default';          $select_menus{$dom}->{'default'}= 'default';
         $select_menus{$dom}->{'select2'}->{'default'} = 'default';          $select_menus{$dom}->{'select2'}->{'default'} = 'default';
         # Now build up the other items in the second menu          # Now build up the other items in the second menu
         my %servers = &Apache::loncommon::get_library_servers($dom);          my %servers = &Apache::lonnet::get_servers($dom,'library');
         foreach my $server (keys(%servers)) {          foreach my $server (keys(%servers)) {
             $select_menus{$dom}->{'select2'}->{$server}               $select_menus{$dom}->{'select2'}->{$server} 
                                             = "$server $servers{$server}";                                              = "$server $servers{$server}";
Line 132  sub domain_form { Line 139  sub domain_form {
 ###############################################################  ###############################################################
 #  Menu Phase One  #  Menu Phase One
 sub print_main_menu {  sub print_main_menu {
     my ($r,$enrl_permission,$view_permission,$grp_manage_permission,      my ($r,$permission)=@_;
         $grp_view_permission)=@_;  
     #      #
     my ($cdom,$cnum) = split/_/,$env{'request.course.id'};      my $cid =$env{'request.course.id'};
       my $cdom=$env{'course.'.$cid.'.domain'};
       my $cnum=$env{'course.'.$cid.'.num'};
     my @menu =       my @menu = 
         (           ( 
           { text => 'Upload a class list',             { text => 'Upload a class list', 
             help => 'Course_Create_Class_List',              help => 'Course_Create_Class_List',
             action => 'upload',              action => 'upload',
             permission => $enrl_permission,              permission => $permission->{'enrl'},
             },              },
           { text => 'Enroll a single student',             { text => 'Enroll a single student', 
             help => 'Course_Add_Student',              help => 'Course_Add_Student',
             action => 'enrollstudent',              action => 'enrollstudent',
             permission => $enrl_permission,              permission => $permission->{'enrl'},
             },              },
           { text => 'Modify student data',             { text => 'Modify student data', 
             help => 'Course_Modify_Student_Data',              help => 'Course_Modify_Student_Data',
             action => 'modifystudent',              action => 'modifystudent',
             permission => $enrl_permission,              permission => $permission->{'enrl'},
             },              },
           { text => 'View Class List',             { text => 'View Class List', 
             help => 'Course_View_Class_List',              help => 'Course_View_Class_List',
             action => 'classlist',              action => 'classlist',
             permission => $view_permission,              permission => $permission->{'view'},
             },              },
           { text => 'Drop Students',             { text => 'Drop Students', 
             help => 'Course_Drop_Student',              help => 'Course_Drop_Student',
             action => 'drop',              action => 'drop',
             permission => $enrl_permission,              permission => $permission->{'enrl'},
             },              },
           { text => 'Automated Enrollment Manager',             { text => 'Automated Enrollment Manager', 
             permission => &Apache::lonnet::auto_run($cnum,$cdom),              permission => (&Apache::lonnet::auto_run($cnum,$cdom) 
      && $permission->{'enrl'}),
             url  => '/adm/populate',              url  => '/adm/populate',
             },              },
           { text => 'Create a new group',            { text => 'Create a new group',
             help => 'Course_Create_Group',              help => 'Course_Create_Group',
             permission => $grp_manage_permission,              permission => $permission->{'grp_manage'},
             url => '/adm/coursegroups?refpage=enrl&action=create',              url => '/adm/coursegroups?refpage=enrl&action=create',
             },              },
           { text => 'Modify an existing group',            { text => 'Modify an existing group',
             help => 'Course_Modify_Group',              help => 'Course_Modify_Group',
             permission => $grp_manage_permission,              permission => $permission->{'grp_manage'},
             url => '/adm/coursegroups?refpage=enrl&action=modify',              url => '/adm/coursegroups?refpage=enrl&action=modify',
             },              },
 #          { text => 'Delete an existing group',            { text => 'Delete an existing group',
 #            help => 'Course_Delete_Group',              help => 'Course_Delete_Group',
 #            permission => $grp_manage_permission,              permission => $permission->{'grp_manage'},
 #            url => '/adm/coursegroups?refpage=enrl&action=delete',              url => '/adm/coursegroups?refpage=enrl&action=delete',
 #            },              },
             { text => 'Re-enable a deleted group',
               help => 'Course_Reenable_Group',
               permission => $permission->{'grp_manage'},
               url => '/adm/coursegroups?refpage=enrl&action=reenable',
               },
           { text => 'Enter an existing group',            { text => 'Enter an existing group',
             help => 'Course_Display_Group',              help => 'Course_Display_Group',
             permission => $grp_view_permission,              permission => $permission->{'grp_view'},
             url => '/adm/coursegroups?refpage=enrl&action=view',              url => '/adm/coursegroups?refpage=enrl&action=view',
             },              },
           );            );
Line 250  sub print_upload_manager_header { Line 264  sub print_upload_manager_header {
     #      #
     my $javascript_validations=&javascript_validations('auth',$krbdefdom,      my $javascript_validations=&javascript_validations('auth',$krbdefdom,
                                     $password_choice);                                      $password_choice);
     my $checked=(($env{'form.noFirstLine'})?' 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".
               '<h3>'.&mt('Identify fields')."</h3>\n");                '<h3>'.&mt('Identify fields')."</h3>\n");
Line 730  sub print_upload_manager_form { Line 744  sub print_upload_manager_form {
 ###############################################################  ###############################################################
 ###############################################################  ###############################################################
 sub enroll_single_student {  sub enroll_single_student {
     my $r=shift;      my ($r,$srcharray) = @_; 
     # Remove non alphanumeric values from section      # Remove non alphanumeric values from section
     $env{'form.csec'}=~s/\W//g;      $env{'form.csec'}=~s/\W//g;
     #      #
Line 744  sub enroll_single_student { Line 758  sub enroll_single_student {
     }      }
   
     $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 [_1] : [_2]',$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.lcdomain'})&&($env{'form.lcdomain'}!~/\W/)) {   && ($env{'form.cuname'} 
       eq &LONCAPA::clean_username($env{'form.cuname'}))
    && ($env{'form.lcdomain'})
    && ($env{'form.lcdomain'}
       eq &LONCAPA::clean_domain($env{'form.lcdomain'}))) {
         # 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 {
             my %home_servers =&Apache::loncommon::get_library_servers($domain);              my %home_servers =&Apache::lonnet::get_servers($domain,'library');
             if (! exists($home_servers{$desiredhost})) {              if (! exists($home_servers{$desiredhost})) {
                 $r->print('<font color="#ff0000">'.&mt('Error').':</font>'.                  $r->print('<font color="#ff0000">'.&mt('Error').':</font>'.
                           &mt('Invalid home server specified'));                            &mt('Invalid home server specified'));
Line 810  sub enroll_single_student { Line 828  sub enroll_single_student {
     } else {      } else {
         $r->print(&mt('Invalid username or domain'));          $r->print(&mt('Invalid username or domain'));
     }          }    
       $r->print("<p><a href='/adm/dropadd?action=enrollstudent'>".&mt("Enroll another student")."</a></p>");
       if (ref($srcharray) eq 'ARRAY') {
           foreach my $item (@{$srcharray},'ccuname','ccdomain') {
               $r->print('<input type="hidden" name="'.$item.'" value="'.$env{'form.'.$item}.'" />'."\n");
           }
       }
       foreach my $item ('sortby','seluname','seludom') {
           if (exists($env{'form.'.$item})) {
               $r->print('<input type="hidden" name="'.$item.'" value="'.$env{'form.'.$item}.'" />'."\n");
           }
       }
       $r->print('<input type="hidden" name="phase" value="get_user_info" />'."\n".
                 '<input type="hidden" name="currstate" value="" />'."\n".
                 '<input type="hidden" name="prevphase" value="" />'."\n".
                 '<input type="hidden" name="action" value="enrollstudent" />'."\n".
                 '<input type="hidden" name="state" value="gotusername" />');
 }  }
   
 sub setup_date_selectors {  sub setup_date_selectors {
Line 873  sub date_setting_table { Line 907  sub date_setting_table {
     my ($startform,$endform)=&setup_date_selectors($starttime,$endtime,$mode);      my ($startform,$endform)=&setup_date_selectors($starttime,$endtime,$mode);
     my $dateDefault = '<nobr>'.      my $dateDefault = '<nobr>'.
         '<label><input type="checkbox" name="makedatesdefault" /> '.          '<label><input type="checkbox" name="makedatesdefault" /> '.
         &mt('make these dates the default for future enrollment').'</label>';          &mt('make these dates the default for future enrollment').
    '</label></nobr>';
     if ($mode eq 'create_enrolldates' || $mode eq 'create_defaultdates') {      if ($mode eq 'create_enrolldates' || $mode eq 'create_defaultdates') {
         $dateDefault = '&nbsp;';          $dateDefault = '&nbsp;';
     }      }
Line 922  sub make_dates_default { Line 957  sub make_dates_default {
 ## Single student enrollment routines (some of them)  ## Single student enrollment routines (some of them)
 ##  ##
 sub get_student_username_domain_form {  sub get_student_username_domain_form {
     my $r = shift;      my ($r,$elements,$response,$srch,$forcenewuser) =  @_;
     my $domform = &Apache::loncommon::select_dom_form      my $loaditems = {
         ($env{'course.'.$env{'request.course.id'}.'.domain'},'cudomain',0);              'onload' => "javascript:setFormElements(document.studentform)",
                        };
       $r->print(&header(undef,$loaditems));
       &Apache::lonhtmlcommon::add_breadcrumb
           ({href=>"javascript:backPage(document.studentform,'','')",
             text=>"Single user search"});
       $r->print(&Apache::lonhtmlcommon::breadcrumbs('Enroll Student',
                                                     'Course_Add_Student'));
       my $defdom=$env{'request.role.domain'};
   
       my $jscript = &Apache::loncommon::studentbrowser_javascript()."\n".
           '<script type="text/javascript">'."\n".
           &Apache::lonhtmlcommon::set_form_elements($elements->{'studentform'}).
           '</script>'."\n";
   
     my %lt=&Apache::lonlocal::texthash(      my %lt=&Apache::lonlocal::texthash(
     'eos'  => "Enroll One Student",      'eos'  => "Enroll One Student",
     'usr'  => "Username",      'usr'  => "Username",
Line 932  sub get_student_username_domain_form { Line 981  sub get_student_username_domain_form {
                     'been' => "Begin Enrollment",                      'been' => "Begin Enrollment",
        );         );
     $r->print(<<END);      $r->print(<<END);
 <input type="hidden" name="action" value="enrollstudent" />  $jscript
 <input type="hidden" name="state"  value="gotusername" />  
 <h3>$lt{'eos'}</h3>  <h3>$lt{'eos'}</h3>
 <table>  
 <tr><th>$lt{'usr'}:</th>  
     <td><input type="text" name="cuname"  size="15" /></td></tr>  
 <tr><th>$lt{'dom'}:</th>  
     <td>$domform</td></tr>  
 <tr><th>&nbsp;</th>  
     <td>  
     <input type="submit" name="Begin Enrollment" value="$lt{'been'}" />  
     </td></tr>  
 </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
       $r->print(&single_user_entry_form($defdom,$srch,$forcenewuser));
     return;      return;
 }  }
   
   sub single_user_entry_form {
       my ($dom,$srch,$forcenewuser) = @_;
       my $userpicker =
          &Apache::loncommon::user_picker($dom,$srch,$forcenewuser,
                                          'document.studentform');
       my $srchbutton = &mt('Search');
       my $output = <<"ENDDOCUMENT";
   <input type="hidden" name="action" value="enrollstudent" />
   <input type="hidden" name="state" value="gotusername" />
   <input type="hidden" name="phase" value="get_user_info" />
   $userpicker
   <input name="userrole" type="button" value="$srchbutton" onclick="javascript:validateEntry(document.studentform)" />
   ENDDOCUMENT
       return $output;
   }
   
 sub print_enroll_single_student_form {  sub print_enroll_single_student_form {
     my $r=shift;      my ($r,$jscript,$ccuname,$ccdomain,$srch) = @_;
       $r->print(&header($jscript));
       &Apache::lonhtmlcommon::add_breadcrumb
           ({href=>"javascript:backPage(document.studentform,'','')",
             text=>"Single user search"});
       if ($env{'form.phase'} eq 'userpicked') {
           &Apache::lonhtmlcommon::add_breadcrumb
        ({href=>"javascript:backPage(document.studentform,'get_user_info','select')",
          text=>"Select user",});
       }
       &Apache::lonhtmlcommon::add_breadcrumb
         ({href=>"javascript:backPage(document.studentform,'$env{'form.phase'}','modify')",
           text=>"Set enrollment",});
       $r->print(&Apache::lonhtmlcommon::breadcrumbs('Enroll Student',
                                                     'Course_Add_Student'));
     $r->print("<h3>".&mt('Enroll One Student')."</h3>");      $r->print("<h3>".&mt('Enroll One Student')."</h3>");
     #      #
     my $username = $env{'form.cuname'};      my $home = &Apache::lonnet::homeserver($ccuname,$ccdomain);
     my $domain   = $env{'form.cudomain'};  
     $username=~s/\W//gs;  
     $domain=~s/\W//gs;  
     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;
     if ($home ne 'no_host') {      if ($home ne 'no_host') {
Line 971  sub print_enroll_single_student_form { Line 1032  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 $usertoadd;
           my $instsrch = {
                            srchin => 'instd',
                            srchby => 'uname',
                            srchtype => 'exact',
                            srchterm => $ccuname,
                            srchdomain => $ccdomain,
                          };
           if (($instsrch->{'srchterm'} ne '') && ($instsrch->{'srchdomain'} ne '')) {
               $usertoadd = $instsrch->{'srchterm'}.':'.$instsrch->{'srchdomain'};
           }
           my (%dirsrch_results,%inst_results);
           if ($usertoadd) {
               if (&Apache::loncreateuser::directorysrch_check($instsrch) eq 'ok') {
                   %dirsrch_results = &Apache::lonnet::inst_directory_query($instsrch);
                   if (ref($dirsrch_results{$usertoadd}) eq 'HASH') {
                       %inst_results = %{$dirsrch_results{$usertoadd}};
                   }
               }
           }
   
         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($ccdomain);
         $javascript_validations=&javascript_validations('auth',$krbdefdom);          $javascript_validations=&javascript_validations('auth',$krbdefdom);
         my %param = ( formname => 'document.studentform',          my %param = ( formname => 'document.studentform',
                       kerb_def_dom => $krbdefdom,                        kerb_def_dom => $krbdefdom,
Line 986  sub print_enroll_single_student_form { Line 1068  sub print_enroll_single_student_form {
         #          #
         # Set up domain selection form          # Set up domain selection form
         my $homeserver_form = '';          my $homeserver_form = '';
         my %servers = &Apache::loncommon::get_library_servers($domain);          my %servers = &Apache::lonnet::get_servers($ccdomain,'library');
         $homeserver_form = '<select name="lcserver" size="1">'."\n".          $homeserver_form = '<select name="lcserver" size="1">'."\n".
             '<option value="default" selected>default</option>'."\n";              '<option value="default" selected>default</option>'."\n";
         while (my ($servername,$serverdescription) = each (%servers)) {          while (my ($servername,$serverdescription) = each (%servers)) {
Line 1009  sub print_enroll_single_student_form { Line 1091  sub print_enroll_single_student_form {
    );     );
  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;
 <h3>$lt{'udf'} $username\@$domain</h3>  <h3>$lt{'udf'} $ccuname:$ccdomain</h3>
 <table>  <table>
 <tr><th>$lt{'fn'}:</th>  <tr><td class="LC_dropadd_labeltext"><label for="cfirst">$lt{'fn'}</label>:</td>
     <td><input type="text" name="cfirst"  size="15"></td></tr>      <td><input type="text" name="cfirst" size="15" value="$inst_results{'firstname'}" /></td></tr>
 <tr><th>$lt{'mn'}:</th>  <tr><td class="LC_dropadd_labeltext"><label for="cmiddle">$lt{'mn'}</label>:</td>
     <td><input type="text" name="cmiddle" size="15"></td></tr>      <td><input type="text" name="cmiddle" size="15" value="$inst_results{'middlename'}" /></td></tr>
 <tr><th>$lt{'ln'}:</th>  <tr><td class="LC_dropadd_labeltext"><label for="clast">$lt{'ln'}</label>:</td>
     <td><input type="text" name="clast"   size="15"></td></tr>      <td><input type="text" name="clast" size="15" value="$inst_results{'lastname'}" /></td></tr>
 <tr><th>$lt{'gen'}:</th>  <tr><td class="LC_dropadd_labeltext"><label for="cgen">$lt{'gen'}</label>:</td>
     <td><input type="text" name="cgen"    size="5"> </td></tr>      <td><input type="text" name="cgen" size="5" value="$inst_results{'generation'}" /> </td></tr>
 <tr><th>$lt{'hs'}:</th>  <tr><td class="LC_dropadd_labeltext"><label for="lcserver">$lt{'hs'}</label>:</td>
     <td>$homeserver_form</td></tr>      <td>$homeserver_form</td></tr>
 <tr><th>$lt{'mail'}:</th>  <tr><td class="LC_dropadd_labeltext"><label for="emailaddress">$lt{'mail'}</label>:</td>
     <td><input type="text" name="emailaddress" size="20" /></td></tr>      <td><input type="text" name="emailaddress" size="20" value="$inst_results{'permanentemail'}" /></td></tr>
 </table>  </table>
 <h3>$lt{'pswd'}</h3>  <h3>$lt{'pswd'}</h3>
 $lt{'psam'}$authhelp  $lt{'psam'}$authhelp
Line 1037  $locform Line 1119  $locform
 END  END
     } else {      } else {
         # User already exists.  Do not worry about authentication          # User already exists.  Do not worry about authentication
         my %uenv = &Apache::lonnet::dump('environment',$domain,$username);          my %uenv = &Apache::lonnet::dump('environment',$ccdomain,$ccuname);
         $javascript_validations = &javascript_validations('noauth');          $javascript_validations = &javascript_validations('noauth');
  my %lt=&Apache::lonlocal::texthash(   my %lt=&Apache::lonlocal::texthash(
        'udf'  => "User Data for",         'udf'  => "User Data for",
Line 1048  END Line 1130  END
                        'mail' => "Email Address",                         'mail' => "Email Address",
    );     );
         $user_data_html = <<END;          $user_data_html = <<END;
 <h3>$lt{'udf'} $username\@$domain</h3>  <h3>$lt{'udf'} $ccuname:$ccdomain</h3>
 <input type="hidden" name="lcserver" value="default" />  <input type="hidden" name="lcserver" value="default" />
 <table>  <table>
 <tr><th>$lt{'fn'}:</th>  <tr><td class="LC_dropadd_labeltext"><label for="cfirst">$lt{'fn'}</label>:</td>
     <td>      <td><input type="text" name="cfirst" value="$uenv{'firstname'}" size="15" /></td></tr>
     <input type="text" name="cfirst" value="$uenv{'firstname'}" size="15" />  <tr><td class="LC_dropadd_labeltext"><label for="cmiddle">$lt{'mn'}</label>:</td>
     </td></tr>      <td><input type="text" name="cmiddle" value="$uenv{'middlename'}" size="15" /></td></tr>
 <tr><th>$lt{'mn'}:</th>  <tr><td class="LC_dropadd_labeltext"><label for="clast">$lt{'ln'}</label>:</td>
     <td>      <td><input type="text" name="clast" value="$uenv{'lastname'}" size="15" /></td></tr>
     <input type="text" name="cmiddle" value="$uenv{'middlename'}" size="15" />  <tr><td class="LC_dropadd_labeltext"><label for="cgen">$lt{'gen'}</label>:</td>
     </td></tr>      <td><input type="text" name="cgen" value="$uenv{'generation'}" size="5"  /> </td></tr>
 <tr><th>$lt{'ln'}:</th>  <tr><td class="LC_dropadd_labeltext"><label for="emailaddress">$lt{'mail'}</label>:</td>
     <td>      <td><input type="text" name="emailaddress" value="$uenv{'permanentemail'}" size="20" /></td></tr>
     <input type="text" name="clast"value="$uenv{'lastname'}" size="15" />  
     </td></tr>  
 <tr><th>$lt{'gen'}:</th>  
     <td>  
     <input type="text" name="cgen" value="$uenv{'generation'}" size="5" />  
     </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 1085  END Line 1157  END
        );         );
     $r->print(<<END);      $r->print(<<END);
 <input type="hidden" name="action" value="enrollstudent" />  <input type="hidden" name="action" value="enrollstudent" />
 <input type="hidden" name="state"  value="done" />  <input type="hidden" name="state"  value="gotusername" />
 <input type="hidden" name="cuname" value="$username" />  <input type="hidden" name="cuname" value="$ccuname" />
 <input type="hidden" name="lcdomain" value="$domain" />  <input type="hidden" name="lcdomain" value="$ccdomain" />
 <script type="text/javascript" language="Javascript">  <script type="text/javascript" language="Javascript">
 function verify(vf,sec_caller) {  function verify(vf,sec_caller) {
     var founduname=0;      var founduname=0;
Line 1132  $user_data_html Line 1204  $user_data_html
   
 <h3>$lt{'cd'}</h3>  <h3>$lt{'cd'}</h3>
   
 <p>$lt{'gs'}: <input type="text" name="csec" size="5" />  <p><label for="csec">$lt{'gs'}</label>: <input type="text" name="csec" size="5" />
 <p>  
 $date_table  
 </p>  </p>
   $date_table
 <h3>$lt{'idsn'}</h3>  <h3>$lt{'idsn'}</h3>
 <p>  <p>
 $lt{'idsn'}: <input type="text" name="cstid" size="10">  <label for="cstid">$lt{'idsn'}</label>: <input type="text" name="cstid" size="10" />
 </p><p>  </p><p>
 <label>  <label>
 <input type="checkbox" name="forceid" value="yes">   <input type="checkbox" name="forceid" value="yes" /> 
 $lt{'disn'}  $lt{'disn'}
 </label>  </label>
 </p><p>  </p><p>
 <input type="button" onClick="verify(this.form,this.form.csec)" value="$lt{'eas'}">  <input type="button" onClick="verify(this.form,this.form.csec)" value="$lt{'eas'}" />
 </p>  </p>
 END  END
       $r->print('<input type="hidden" name="currstate" value="" />'."\n".
                 '<input type="hidden" name="phase" value="" />'."\n".
                 '<input type="hidden" name="prevphase" value="'.$env{'form.phase'}.'" />'."\n");
       if (ref($srch) eq 'HASH') {
           foreach my $item (sort(keys(%{$srch}))) {
               $r->print('<input type="hidden" name="'.$item.'" value="'.$srch->{$item}.'" />'."\n");
           }
       }
       foreach my $item ('sortby','seluname','seludom') {
           if (exists($env{'form.'.$item})) {
               $r->print('<input type="hidden" name="'.$item.'" value="'.$env{'form.'.$item}.'" />'."\n");
           }
       }
     return;      return;
 }  }
   
Line 1168  sub print_drop_menu { Line 1252  sub print_drop_menu {
   
 # ============================================== view classlist  # ============================================== view classlist
 sub print_html_classlist {  sub print_html_classlist {
     my ($r,$mode) = @_;      my ($r,$mode,$permission) = @_;
     if (! exists($env{'form.sortby'})) {      if (! exists($env{'form.sortby'})) {
         $env{'form.sortby'} = 'username';          $env{'form.sortby'} = 'username';
     }      }
Line 1177  sub print_html_classlist { Line 1261  sub print_html_classlist {
     }      }
     my $status_select = &Apache::lonhtmlcommon::StatusOptions      my $status_select = &Apache::lonhtmlcommon::StatusOptions
         ($env{'form.Status'});          ($env{'form.Status'});
     my $cid=$env{'request.course.id'};      my $cid =$env{'request.course.id'};
     my $cdom=$env{'course.'.$cid.'.domain'};      my $cdom=$env{'course.'.$cid.'.domain'};
     my $cnum=$env{'course.'.$cid.'.num'};      my $cnum=$env{'course.'.$cid.'.num'};
     #      #
Line 1223  sub print_html_classlist { Line 1307  sub print_html_classlist {
             $output_selector .= "\n".$option;              $output_selector .= "\n".$option;
         }          }
         $output_selector .= '</select>';          $output_selector .= '</select>';
         $r->print(&mt('Output Format: [_1]',$output_selector).('&nbsp;'x3));          $r->print('<label>'.&mt('Output Format: [_1]',$output_selector).'</label>'.('&nbsp;'x3));
     }      }
     $r->print(&mt('Student Status: [_1]',$status_select)."\n");      $r->print('<label>'.&mt('Student Status: [_1]',$status_select)."</label>\n");
     $r->print('<input type="submit" value="'.&mt('Update Display').'" />'.      $r->print('<input type="submit" value="'.&mt('Update Display').'" />'.
               "\n</p>\n");                "\n</p>\n");
     #      #
     # Print the classlist      # Print the classlist
     $r->print('<h2>'.&mt('Current Class List').'</h2>');      $r->print('<h2>'.&mt('Current Class List').'</h2>');
     my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist();      my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist();
   
       if (exists($permission->{'view_section'})) {
    my $sec = &Apache::loncoursedata::CL_SECTION();
    foreach my $student (keys(%{$classlist})) {
       if ($classlist->{$student}[$sec] ne $permission->{'view_section'}) {
    delete($classlist->{$student});
       }
    }
       }
   
     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 {
Line 1295  END Line 1389  END
                                            'start'  => "start date",                                             'start'  => "start date",
                                            'end'    => "end date",                                             'end'    => "end date",
                                            'type'   => "enroll type/action",                                             'type'   => "enroll type/action",
      'email'  => "email address",
                                            'photo'  => "photo",                                             'photo'  => "photo",
    );     );
         unless ($mode eq 'autoenroll') {          unless ($mode eq 'autoenroll') {
Line 1347  function photowindow(photolink) { Line 1442  function photowindow(photolink) {
        <a href="javascript:document.studentform.sortby.value='end';document.studentform.submit();">$lt{'end'}</a>         <a href="javascript:document.studentform.sortby.value='end';document.studentform.submit();">$lt{'end'}</a>
     </th><th>      </th><th>
        <a href="javascript:document.studentform.sortby.value='groups';document.studentform.submit();">$lt{'grp'}</a>         <a href="javascript:document.studentform.sortby.value='groups';document.studentform.submit();">$lt{'grp'}</a>
       </th><th>
          <a href="javascript:document.studentform.sortby.value='email';document.studentform.submit();">$lt{'email'}</a>
     </th>      </th>
 END  END
         if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) {          if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) {
Line 1390  END Line 1487  END
             print $CSVfile '"'.join('","',map {              print $CSVfile '"'.join('","',map {
  &Apache::loncommon::csv_translate(&mt($_))   &Apache::loncommon::csv_translate(&mt($_))
                 } ("username","domain","ID","student name",                  } ("username","domain","ID","student name",
                    "section","start date","end date","status","active groups"))                     "section","start date","end date","status",
      "active groups","email address"))
                   .'"'."\n";                    .'"'."\n";
         } else {          } else {
             print $CSVfile '"'.join('","',map {              print $CSVfile '"'.join('","',map {
  &Apache::loncommon::csv_translate(&mt($_))   &Apache::loncommon::csv_translate(&mt($_))
                 } ("username","domain","ID","student name",                  } ("username","domain","ID","student name",
                    "section","start date","end date","active groups")).'"'."\n";                     "section","start date","end date",
      "active groups","email address")).'"'."\n";
         }          }
     } elsif ($mode eq 'excel') {      } elsif ($mode eq 'excel') {
         # Create the excel spreadsheet          # Create the excel spreadsheet
Line 1412  END Line 1511  END
         $excel_sheet->write($row++,0,["username","domain","ID",          $excel_sheet->write($row++,0,["username","domain","ID",
                                       "student name","section",                                        "student name","section",
                                       "start date","end date","status",                                        "start date","end date","status",
                                       "active groups"],                                        "active groups","email address"],
                             $format->{'bold'});                              $format->{'bold'});
     }      }
     #      #
Line 1451  END Line 1550  END
         my $name     = $sdata->[$index{'fullname'}];          my $name     = $sdata->[$index{'fullname'}];
         my $id       = $sdata->[$index{'id'}];          my $id       = $sdata->[$index{'id'}];
         my $status   = $sdata->[$index{'status'}];          my $status   = $sdata->[$index{'status'}];
           next if (($statusmode ne 'Any') && ($status ne $statusmode));
         my $start    = $sdata->[$index{'start'}];          my $start    = $sdata->[$index{'start'}];
         my $end      = $sdata->[$index{'end'}];          my $end      = $sdata->[$index{'end'}];
         my $type     = $sdata->[$index{'type'}];          my $type     = $sdata->[$index{'type'}];
         next if (($statusmode ne 'Any') && ($status ne $statusmode));  
    my %emails   = &Apache::loncommon::getemails($username,$domain);
    my $email;
    foreach my $type ('critnotification', 'permanentemail',
     'notification') {
       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') {
             if (! defined($start) || $start == 0) {              if (! defined($start) || $start == 0) {
                 $start = &mt('none');                  $start = &mt('none');
Line 1514  END Line 1624  END
     <td>$start</td>      <td>$start</td>
     <td>$end</td>      <td>$end</td>
     <td>$active_groups</td>      <td>$active_groups</td>
       <td>$email</td>
 END  END
             if ($env{'course.'.$env{'request.course.id'}.              if ($env{'course.'.$env{'request.course.id'}.
  '.internal.showphoto'}) {   '.internal.showphoto'}) {
Line 1550  END Line 1661  END
                 push @line,&Apache::loncommon::csv_translate($status);                  push @line,&Apache::loncommon::csv_translate($status);
             }              }
             push @line,&Apache::loncommon::csv_translate($active_groups);              push @line,&Apache::loncommon::csv_translate($active_groups);
               push @line,&Apache::loncommon::csv_translate($email);
             print $CSVfile '"'.join('","',@line).'"'."\n";              print $CSVfile '"'.join('","',@line).'"'."\n";
         } elsif ($mode eq 'excel') {          } elsif ($mode eq 'excel') {
             $excel_sheet->write($row,0,[$username,$domain,$id,              $excel_sheet->write($row,0,[$username,$domain,$id,
Line 1566  END Line 1678  END
             }              }
             $excel_sheet->write($row,$col++,$status);              $excel_sheet->write($row,$col++,$status);
             $excel_sheet->write($row,$col++,$active_groups);              $excel_sheet->write($row,$col++,$active_groups);
               $excel_sheet->write($row,$col++,$email);
             $row++;              $row++;
         }          }
     }      }
Line 1687  $lt{'odcc'} Line 1800  $lt{'odcc'}
 <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>
 <b>$lt{'sn'}</b>  <b>$lt{'sn'}</b>
 <table>  <table>
Line 1699  $info{'lastname'} $info{'generation'}, $ Line 1812  $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{'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>
 <input type="checkbox" name="forceid" >   <input type="checkbox" name="forceid" /> 
 $lt{'disn'}  $lt{'disn'}
 </label>  </label>
 </p><p>  </p><p>
 <b>$lt{'sec'}</b>: <input type="text" name="section" value="$section" size="14"/>  <b>$lt{'sec'}</b>: <input type="text" name="section" value="$section" size="14" />
 </p>  </p>
 <p>$current_date_description</p>  <p>$current_date_description</p>
 <p>$date_table</p>  <p>$date_table</p>
Line 1748  sub modify_single_student { Line 1861  sub modify_single_student {
                                                   $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.");
         return;          return;
     }      }
     undef $tmp;      undef $tmp;
Line 1788  sub modify_single_student { Line 1901  sub modify_single_student {
                    'et'    => "End Time",                     'et'    => "End Time",
        );         );
     $r->print(<<END);      $r->print(<<END);
     <h2>$lt{'mdu'} $slogin \@ $sdom </h2>      <h2>$lt{'mdu'} $slogin : $sdom </h2>
 <h3>$lt{'si'}</h3>  <h3>$lt{'si'}</h3>
 <table rules="rows" border="1" cellpadding="3" >  <table rules="rows" border="1" cellpadding="3" >
 <tr>  <tr>
Line 1848  END Line 1961  END
                   &mt('The error reported was')." ".                    &mt('The error reported was')." ".
                   $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 1870  END Line 1983  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;      my $cdom = $env{'course.'.$courseid.'.domain'};
       my $cnum = $env{'course.'.$courseid.'.num'};
     my %roles = &Apache::lonnet::dump('roles',$sdomain,$sname);      my %roles = &Apache::lonnet::dump('roles',$sdomain,$sname);
     my ($tmp) = keys(%roles);      my ($tmp) = keys(%roles);
     # Bail out if we were unable to get the students roles      # Bail out if we were unable to get the students roles
Line 1880  sub get_enrollment_data { Line 1994  sub get_enrollment_data {
     my $section = '';      my $section = '';
     my $count = scalar(keys(%roles));      my $count = scalar(keys(%roles));
     while (my ($course,$role) = each(%roles)) {      while (my ($course,$role) = each(%roles)) {
         if ($course=~ /^\/$courseid\/*\s*(\w+)*_st$/ ) {          if ($course=~m{^/\Q$cdom\E/\Q$cnum\E/*\s*(\w+)*_st$} ) {
             #              #
             # Get active role              # Get active role
             $section=$1;              $section=$1;
Line 2159  sub upfile_drop_add { Line 2273  sub upfile_drop_add {
     if (lc($desiredhost) eq 'default') {      if (lc($desiredhost) eq 'default') {
         $desiredhost = undef;          $desiredhost = undef;
     } else {      } else {
         my %home_servers = &Apache::loncommon::get_library_servers($domain);          my %home_servers = &Apache::lonnet::get_servers($domain,'library');
         if (! exists($home_servers{$desiredhost})) {          if (! exists($home_servers{$desiredhost})) {
             $r->print('<font color="#ff0000">'.&mt('Error').'</font>'.              $r->print('<font color="#ff0000">'.&mt('Error').'</font>'.
                       &mt('Invalid home server specified'));                        &mt('Invalid home server specified'));
Line 2193  sub upfile_drop_add { Line 2307  sub upfile_drop_add {
             $amode = ''; # This causes the loop below to be skipped              $amode = ''; # This causes the loop below to be skipped
         }          }
     }      }
     unless (($domain=~/\W/) || ($amode eq '')) {      if ( $domain eq &LONCAPA::clean_domain($domain)
    && ($amode ne '')) {
         #######################################          #######################################
         ##         Enroll Students           ##          ##         Enroll Students           ##
         #######################################          #######################################
Line 2227  sub upfile_drop_add { Line 2342  sub upfile_drop_add {
                         $gen=$entries{$fields{'gen'}};                          $gen=$entries{$fields{'gen'}};
                     }                      }
                 }                  }
                 if ($entries{$fields{'username'}}=~/\W/) {                  if ($entries{$fields{'username'}}
       ne &LONCAPA::clean_username($entries{$fields{'username'}})) {
                     $r->print('<br />'.                      $r->print('<br />'.
       &mt('<b>[_1]</b>: Unacceptable username for user [_2] [_3] [_4] [_5]',        &mt('<b>[_1]</b>: Unacceptable username for user [_2] [_3] [_4] [_5]',
           $entries{$fields{'username'}},$fname,$mname,$lname,$gen).            $entries{$fields{'username'}},$fname,$mname,$lname,$gen).
Line 2396  function validate(caller) { Line 2512  function validate(caller) {
 END  END
 }  }
   
   sub get_permission {
       my %permission;
       $permission{'view'} = 
           &Apache::lonnet::allowed('vcl',$env{'request.course.id'});
       if (!$permission{'view'}) {
    my $scope = $env{'request.course.id'}.'/'.$env{'request.course.sec'};
    $permission{'view'} =  &Apache::lonnet::allowed('vcl',$scope);
    if ($permission{'view'}) {
       $permission{'view_section'} = $env{'request.course.sec'};
    }
       }
   
       $permission{'enrl'} = 
           &Apache::lonnet::allowed('cst',$env{'request.course.id'});
   
       $permission{'grp_view'} =
           &Apache::lonnet::allowed('vcg',$env{'request.course.id'});
       $permission{'grp_manage'} =
           &Apache::lonnet::allowed('mdg',$env{'request.course.id'});
       my $allowed = 0;
       foreach my $perm (values(%permission)) {
    if ($perm) { $allowed=1; last; }
       }
       return (\%permission,$allowed);
   }
   
 ###################################################################  ###################################################################
 ###################################################################  ###################################################################
   
Line 2454  sub handler { Line 2596  sub handler {
         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'});  
   
     my $grp_view_permission =  
         &Apache::lonnet::allowed('vcg',$env{'request.course.id'});  
     my $grp_manage_permission =  
         &Apache::lonnet::allowed('mdg',$env{'request.course.id'});  
   
       my ($permission,$allowed) = &get_permission();
   
     if (! $grp_view_permission && ! $grp_manage_permission &&       if (!$allowed) {
                                   ! $view_permission && ! $enrl_permission) {  
         $env{'user.error.msg'}=          $env{'user.error.msg'}=
      "/adm/coursegroups:cst:0:0:Cannot manage or view course groups, ".      "/adm/dropadd:cst:0:0:Cannot manage or view course groups, ".
                                  "or drop or add students";                           "or drop or add students";
         return HTTP_NOT_ACCEPTABLE;          return HTTP_NOT_ACCEPTABLE;
     }      }
   
Line 2479  sub handler { Line 2612  sub handler {
     # Start page      # Start page
     &Apache::loncommon::content_type($r,'text/html');      &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;      $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'})) {
           $r->print(&header());
         $r->print(&Apache::lonhtmlcommon::breadcrumbs('Enrollment Manager'));          $r->print(&Apache::lonhtmlcommon::breadcrumbs('Enrollment Manager'));
         &print_main_menu($r,$enrl_permission,$view_permission,$grp_manage_permission,          my $action = &print_main_menu($r,$permission);
                          $grp_view_permission);      } elsif ($env{'form.action'} eq 'upload' && $permission->{'enrl'}) {
     } elsif ($env{'form.action'} eq 'upload' && $enrl_permission) {          $r->print(&header());
         &Apache::lonhtmlcommon::add_breadcrumb          &Apache::lonhtmlcommon::add_breadcrumb
             ({href=>'/adm/dropadd?action=upload&state=',              ({href=>'/adm/dropadd?action=upload&state=',
               text=>"Upload Classlist"});                text=>"Upload Classlist"});
Line 2505  sub handler { Line 2638  sub handler {
         } else {          } else {
             &print_first_courselist_upload_form($r);                          &print_first_courselist_upload_form($r);            
         }          }
     } elsif ($env{'form.action'} eq 'drop' && $enrl_permission) {      } elsif ($env{'form.action'} eq 'drop' && $permission->{'enrl'}) {
           $r->print(&header());
         &Apache::lonhtmlcommon::add_breadcrumb          &Apache::lonhtmlcommon::add_breadcrumb
             ({href=>'/adm/dropadd?action=drop',              ({href=>'/adm/dropadd?action=drop',
               text=>"Drop Students"});                text=>"Drop Students"});
Line 2518  sub handler { Line 2652  sub handler {
         } else {          } else {
             &print_drop_menu($r);              &print_drop_menu($r);
         }          }
     } elsif ($env{'form.action'} eq 'enrollstudent' && $enrl_permission) {      } elsif ($env{'form.action'} eq 'enrollstudent' && $permission->{'enrl'}) {
         &Apache::lonhtmlcommon::add_breadcrumb          my @search = ('srchterm','srchby','srchin','srchtype','srchdomain');
             ({href=>'/adm/dropadd?action=enrollstudent',          my ($jsback,$elements) = &Apache::loncreateuser::crumb_utilities();
               text=>"Enroll Student"});          my $jscript = '<script type="text/javascript">'.$jsback.'</script>';
         $r->print(&Apache::lonhtmlcommon::breadcrumbs('Enroll Student',          if ($env{'form.state'} eq 'gotusername') {
       'Course_Add_Student'));              my $srch;
         if (! exists($env{'form.state'})) {              foreach my $item (@search) {
             &get_student_username_domain_form($r);                  $srch->{$item} = $env{'form.'.$item};
         } elsif ($env{'form.state'} eq 'gotusername') {              }
             &print_enroll_single_student_form($r);              print STDERR "phase = $env{'form.phase'}\n";
               if ($env{'form.phase'} eq 'get_user_info') {
                   my ($currstate,$response,$forcenewuser,$results) =
                       &Apache::loncreateuser::user_search_result($srch);
                   if ($currstate eq 'select') {
                       $r->print(&header());
                       &Apache::lonhtmlcommon::add_breadcrumb
                           ({href=>"javascript:backPage(document.usersrchform,'','')",
                             text=>"Single user search"},
                            {href=>"javascript:backPage(document.usersrchform,'get_user_info','select')",
                             text=>"Select User",});
                       $r->print(&Apache::lonhtmlcommon::breadcrumbs('Enroll Student',
                                                                     'Course_Add_Student'));
                       &Apache::loncreateuser::print_user_selection_page($r,
                           $response,$srch,$results,'enrollstudent',\@search);
                   } elsif ($currstate eq 'modify') {
                       my ($ccuname,$ccdomain);
                       if (($srch->{'srchby'} eq 'uname') &&
                           ($srch->{'srchtype'} eq 'exact')) {
                           $ccuname = $srch->{'srchterm'};
                           $ccdomain= $srch->{'srchdomain'};
                       } else {
                           my @matchedunames = keys(%{$results});
                           ($ccuname,$ccdomain) = split(/:/,$matchedunames[0]);
                       }
                       $ccuname =&LONCAPA::clean_username($ccuname);
                       $ccdomain=&LONCAPA::clean_domain($ccdomain);
                       &print_enroll_single_student_form($r,$jscript,$ccuname,
                                                         $ccdomain,$srch,$response);
                   } elsif ($currstate eq 'query') {
                       $r->print(&header($jscript));
                       &Apache::lonhtmlcommon::add_breadcrumb
                           ({href=>"javascript:backPage(document.studentform,'','')",
                             text=>"Single user search"});
                       $r->print(&Apache::lonhtmlcommon::breadcrumbs('Enroll Student',
                                                         'Course_Add_Student'));
                       &Apache::loncreateuser::print_user_query_page($r,'enrollstudent');
                   } else {
                       &get_student_username_domain_form($r,$elements,$response,
                                                         $srch,$forcenewuser);
                   }
               } elsif ($env{'form.phase'} eq 'userpicked') {
                   my $ccuname = &LONCAPA::clean_username($env{'form.seluname'});
                   my $ccdomain = &LONCAPA::clean_domain($env{'form.seludom'});
                   &print_enroll_single_student_form($r,$jscript,$ccuname,
                                                     $ccdomain,$srch);
               } else {
                   &get_student_username_domain_form($r,$elements);
               }
         } elsif ($env{'form.state'} eq 'enrolling') {          } elsif ($env{'form.state'} eq 'enrolling') {
             &enroll_single_student($r);              $r->print(&header($jscript));
               &Apache::lonhtmlcommon::add_breadcrumb
                   ({href=>"javascript:backPage(document.studentform,'','')",
                     text=>"Single user search"});
               if ($env{'form.prevphase'} eq 'userpicked') {
                  &Apache::lonhtmlcommon::add_breadcrumb
                  ({href=>"javascript:backPage(document.studentform,'get_user_info','select')",
                    text=>"Select user",});
               }
               &Apache::lonhtmlcommon::add_breadcrumb
                   ({href=>"javascript:backPage(document.studentform,'$env{'form.prevphase'}','modify')",
                     text=>"Set enrollment",},
                    {href=>"javascript:backPage(document.studentform,$env{'form.phase'},'')",
                    text=>"Result",});
               $r->print(&Apache::lonhtmlcommon::breadcrumbs('Enroll Student',
                                                         'Course_Add_Student'));
               &enroll_single_student($r,\@search);
         } else {          } else {
             &get_student_username_domain_form($r);              &get_student_username_domain_form($r,$elements);
         }          }
     } elsif ($env{'form.action'} eq 'classlist' && $view_permission) {      } elsif ($env{'form.action'} eq 'classlist' && $permission->{'view'}) {
         &Apache::lonhtmlcommon::add_breadcrumb          &Apache::lonhtmlcommon::add_breadcrumb
             ({href=>'/adm/dropadd?action=classlist',              ({href=>'/adm/dropadd?action=classlist',
               text=>"View Classlist"});                text=>"View Classlist"});
         $r->print(&Apache::lonhtmlcommon::breadcrumbs('View Classlist',          $r->print(&Apache::lonhtmlcommon::breadcrumbs('View Classlist',
       'Course_View_Class_List'));        'Course_View_Class_List'));
         if (! exists($env{'form.state'})) {          if (! exists($env{'form.state'})) {
             &print_html_classlist($r,undef);              &print_html_classlist($r,undef,$permission);
         } elsif ($env{'form.state'} eq 'csv') {          } elsif ($env{'form.state'} eq 'csv') {
             &print_html_classlist($r,'csv');              &print_html_classlist($r,'csv',$permission);
         } elsif ($env{'form.state'} eq 'excel') {          } elsif ($env{'form.state'} eq 'excel') {
             &print_html_classlist($r,'excel');              &print_html_classlist($r,'excel',$permission);
         } else {          } else {
             &print_html_classlist($r,undef);              &print_html_classlist($r,undef,$permission);
         }          }
     } elsif ($env{'form.action'} eq 'modifystudent' && $enrl_permission) {      } elsif ($env{'form.action'} eq 'modifystudent' && $permission->{'enrl'}) {
         &Apache::lonhtmlcommon::add_breadcrumb          &Apache::lonhtmlcommon::add_breadcrumb
             ({href=>'/adm/dropadd?action=modifystudent',              ({href=>'/adm/dropadd?action=modifystudent',
               text=>"Modify Student Data"});                text=>"Modify Student Data"});
         $r->print(&Apache::lonhtmlcommon::breadcrumbs('Modify Student Data',          $r->print(&Apache::lonhtmlcommon::breadcrumbs('Modify Student Data',
       'Course_Modify_Student_Data'));        'Course_Modify_Student_Data'));
         if (! exists($env{'form.state'})) {          if (! exists($env{'form.state'})) {
             &print_html_classlist($r);              &print_html_classlist($r,undef,$permission);
         } 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,undef,$permission);
         }                  }        
     } 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
Line 2569  sub handler { Line 2767  sub handler {
                                  "form.action = ".$env{'form.action'}.                                   "form.action = ".$env{'form.action'}.
                                  "Someone should fix this.");                                   "Someone should fix this.");
         $r->print(&Apache::lonhtmlcommon::breadcrumbs('Enrollment Manager'));          $r->print(&Apache::lonhtmlcommon::breadcrumbs('Enrollment Manager'));
         &print_main_menu($r,$enrl_permission,$view_permission);          &print_main_menu($r,$permission);
     }      }
     #      #
     # Finish up      # Finish up

Removed from v.1.148  
changed lines
  Added in v.1.166


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.