Diff for /loncom/interface/Attic/londropadd.pm between versions 1.29 and 1.38

version 1.29, 2002/04/23 21:03:59 version 1.38, 2002/05/03 16:30:48
Line 75  ENDHEAD Line 75  ENDHEAD
   
 # =========== Drop student from all sections of a course, except optional $csec  # =========== Drop student from all sections of a course, except optional $csec
 sub modifystudent {  sub modifystudent {
     my ($udom,$unam,$courseid,$csec)=@_;      my ($udom,$unam,$courseid,$csec,$desiredhost)=@_;
     # if $csec is undefined, drop the student from all the courses matching      # if $csec is undefined, drop the student from all the courses matching
     # this one.  If $csec is defined, drop them from all other sections of       # this one.  If $csec is defined, drop them from all other sections of 
     # this course and add them to section $csec      # this course and add them to section $csec
Line 84  sub modifystudent { Line 84  sub modifystudent {
     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
     return if ($tmp =~ /^(con_lost|error|no_such_host)/i);      return "$1" if ($tmp =~ /^(con_lost|error|no_such_host)/i);
     # Go through the roles looking for enrollment in this course      # Go through the roles looking for enrollment in this course
       my $result = '';
     foreach my $course (keys(%roles)) {      foreach my $course (keys(%roles)) {
         my $value = $roles{$course};          if ($course=~/^$courseid(?:\/)*(?:\s+)*(\w+)*\_st$/) {
         if ($course=~/^$courseid(?:\/)*(\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 $courseid.'_st');
             if (((!$section) && (!$csec)) || ($section ne $csec)) {              if ( ((!$section) && (!$csec)) || ($section ne $csec) ) {
                 my (undef,$end,$start)=split(/\_/,$roles{$course});                  my (undef,$end,$start)=split(/\_/,$roles{$course});
                 my $now=time;                  my $now=time;
                 if (!($start && ($now<$start)) || !($end && ($now>$end))) {                  if (!($start && ($now<$start)) || !($end && ($now>$end))) {
                     my $reply=&Apache::lonnet::modifystudent                      my $reply=&Apache::lonnet::modifystudent
                         ($udom,$unam,'','','','','','','',$section,time);                          ($udom,$unam,'','','','','','','',
                            $section,time,undef,undef,$desiredhost);
                       $result .= $reply.':';
                 }                  }
             }              }
         }          }
     }      }
       if ($result eq '') {
           $result eq 'Unable to find section for this student';
       } else {
           $result =~ s/(ok:)+/ok/g;
       }
       return $result;
   }
   
   # ============ build a domain and server selection form
   sub domain_form {
       my ($defdom) = @_;
       # Set up domain and server selection forms
       #
       # Get the domains
       my @domains = &Apache::loncommon::get_domains();
       # build up the menu information to be passed to 
       # &Apache::loncommon::linked_select_forms
       my %select_menus;
       foreach my $dom (@domains) {
           # set up the text for this domain
           $select_menus{$dom}->{'text'}= $dom;
           # we want a choice of 'default' as the default in the second menu
           $select_menus{$dom}->{'default'}= 'default';
           $select_menus{$dom}->{'select2'}->{'default'} = 'default';
           # Now build up the other items in the second menu
           my %servers = &Apache::loncommon::get_home_servers($dom);
           foreach my $server (keys(%servers)) {
               $select_menus{$dom}->{'select2'}->{$server} 
                                               = "$server $servers{$server}";
           }
       }
       my $result  = &Apache::loncommon::linked_select_forms
           ('studentform',' with home server ',$defdom,
            'lcdomain','lcserver',\%select_menus);
       return $result;
 }  }
   
 # ============================================================== Menu Phase One  # ============================================================== Menu Phase One
Line 138  sub phase_two_header { Line 175  sub phase_two_header {
 Total number of records found in file: $distotal <hr />  Total number of records found in file: $distotal <hr />
 Enter as many fields as you can. The system will inform you and bring you back  Enter as many fields as you can. The system will inform you and bring you back
 to this page if the data selected is insufficient to run your class.<hr />  to this page if the data selected is insufficient to run your class.<hr />
 <input type="submit" name="associate"  value="Reverse Association" />  <input type="button" value="Reverse Association" onClick="javascript:this.form.associate.value='Reverse Association';submit(this.form);" />
   <input type="hidden" name="associate"  value="" />
 <input type="hidden" name="phase"      value="three" />  <input type="hidden" name="phase"      value="three" />
 <input type="hidden" name="datatoken"  value="$datatoken" />  <input type="hidden" name="datatoken"  value="$datatoken" />
 <input type="hidden" name="fileupload" value="$ENV{'form.fileupload'}" />  <input type="hidden" name="fileupload" value="$ENV{'form.fileupload'}" />
Line 382  sub phase_two_end { Line 420  sub phase_two_end {
     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);
     # Set up domain selection form      my $domform = &domain_form($defdom);
     my $domform = &Apache::loncommon::select_dom_form($defdom,'lcdomain');      
     $r->print(<<ENDPICK);      $r->print(<<ENDPICK);
 </table>  </table>
 <input type=hidden name=nfields value=$i>  <input type=hidden name=nfields value=$i>
Line 421  LON-CAPA domain: $domform <p> Line 458  LON-CAPA domain: $domform <p>
 <input type=checkbox name=forceid value=yes>   <input type=checkbox name=forceid value=yes> 
 Disable ID/Student Number Safeguard and Force Change of Conflicting IDs  Disable ID/Student Number Safeguard and Force Change of Conflicting IDs
 (only do if you know what you are doing)<p>  (only do if you know what you are doing)<p>
 <input type="button" onClick="verify(this.form)" value="Update Courselist"><br>  <input type="button" onClick="javascript:verify(this.form)" value="Update Courselist" /><br />
 Note: for large courses, this operation might be time consuming.  Note: for large courses, this operation might be time consuming.
 ENDPICK  ENDPICK
 }  }
Line 474  sub menu_phase_two_upload { Line 511  sub menu_phase_two_upload {
 sub enroll_single_student {  sub enroll_single_student {
     my $r=shift;      my $r=shift;
     $r->print('<h3>Enrolling Student</h3>');      $r->print('<h3>Enrolling Student</h3>');
     $r->print($ENV{'form.cuname'}." in domain ".$ENV{'form.cdomain'}.": ");      $r->print('<p>Enrolling '.$ENV{'form.cuname'}." in domain ".
                 $ENV{'form.lcdomain'}.'</p>');
     if (($ENV{'form.cuname'})&&($ENV{'form.cuname'}!~/\W/)&&      if (($ENV{'form.cuname'})&&($ENV{'form.cuname'}!~/\W/)&&
         ($ENV{'form.cdomain'})&&($ENV{'form.cdomain'}!~/\W/)) {          ($ENV{'form.lcdomain'})&&($ENV{'form.lcdomain'}!~/\W/)) {
           # Deal with home server selection
           my $domain=$ENV{'form.lcdomain'};
           my $desiredhost = $ENV{'form.lcserver'};
           if (lc($desiredhost) eq 'default') {
               $desiredhost = undef;
           } else {
               my %home_servers = &Apache::loncommon::get_home_servers($domain);
               if (! exists($home_servers{$desiredhost})) {
                   $r->print('<font color="#ff0000">Error:</font>'.
                             'Invalid home server specified');
                   return;
               }
           }
           $r->print(" with server $desiredhost :") if (defined($desiredhost));
           # 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') {
Line 490  sub enroll_single_student { Line 543  sub enroll_single_student {
     $genpwd=$ENV{'form.locarg'};      $genpwd=$ENV{'form.locarg'};
     if (!$genpwd) { $genpwd=" "; }      if (!$genpwd) { $genpwd=" "; }
  }   }
         if (($amode) && ($genpwd)) {          my $home = &Apache::lonnet::homeserver($ENV{'form.cuname'},
             &modifystudent($ENV{'form.cdomain'},$ENV{'form.cuname'},                                                     $ENV{'form.lcdomain'});
                            $ENV{'request.course.id'},$ENV{'form.csec'});          if ((($amode) && ($genpwd)) || ($home ne 'no_host')) {
               &modifystudent($ENV{'form.lcdomain'},$ENV{'form.cuname'},
                              $ENV{'request.course.id'},$ENV{'form.csec'},
                               $desiredhost);
           $r->print(&Apache::lonnet::modifystudent(            $r->print(&Apache::lonnet::modifystudent(
                       $ENV{'form.cdomain'},$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'},$ENV{'form.enddate'},                        $ENV{'form.csec'},$ENV{'form.enddate'},
                       $ENV{'form.startdate'},$ENV{'form.forceid'}));                        $ENV{'form.startdate'},$ENV{'form.forceid'},
                       $desiredhost));
  } else {   } else {
            $r->print('Invalid login mode or password');                  $r->print('<p><font color="#ff0000">ERROR</font>&nbsp;'.
                         'Invalid login mode or password.  '.
                         'Unable to enroll '.$ENV{'form.cuname'}.'.</p>');
         }                    }          
     } else {      } else {
         $r->print('Invalid username or domain');          $r->print('Invalid username or domain');
Line 523  sub menu_phase_two_enroll { Line 582  sub menu_phase_two_enroll {
     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);
     # Set up domain selection form      # Set up domain selection form
     my $domform = &Apache::loncommon::select_dom_form($defdom,'cdomain');          my $domform = &domain_form($defdom);
     # Print it all out      # Print it all out
     $r->print(<<ENDSENROLL);      $r->print(<<ENDSENROLL);
 <script type="text/javascript" language="Javascript">  <script type="text/javascript" language="Javascript">
Line 535  function verify(vf) { Line 594  function verify(vf) {
     var foundsec=0;      var foundsec=0;
     var tw;      var tw;
     if ((typeof(vf.cuname.value) !="undefined") && (vf.cuname.value!='') &&       if ((typeof(vf.cuname.value) !="undefined") && (vf.cuname.value!='') && 
  (typeof(vf.cdomain.value)!="undefined") && (vf.cdomain.value!='')) {   (typeof(vf.lcdomain.value)!="undefined") && (vf.lcdomain.value!='')) {
         founduname=1;          founduname=1;
     }      }
     if ((typeof(vf.cfirst.value)!="undefined") && (vf.cfirst.value!='') &&      if ((typeof(vf.cfirst.value)!="undefined") && (vf.cfirst.value!='') &&
Line 628  sub get_current_classlist { Line 687  sub get_current_classlist {
         }          }
         return (undef,%currentlist);          return (undef,%currentlist);
     } else {      } else {
           $tmp =~ s/^error://;
         return ($tmp,undef);          return ($tmp,undef);
     }      }
 }  }
Line 636  sub get_current_classlist { Line 696  sub get_current_classlist {
 sub menu_phase_two_drop {  sub menu_phase_two_drop {
     my $r=shift;      my $r=shift;
     my $cid=$ENV{'request.course.id'};      my $cid=$ENV{'request.course.id'};
     my ($error,%currentlist)=&get_current_classlist($ENV{'course.'.$cid.'.domain'},      my ($error,%currentlist)=&get_current_classlist
                                            $ENV{'course.'.$cid.'.num'});          ($ENV{'course.'.$cid.'.domain'},$ENV{'course.'.$cid.'.num'});
     if (defined($error)) {      if (defined($error)) {
         $r->print('<pre>ERROR:$error</pre>');          $r->print("<pre>ERROR:$error</pre>");
     }      } elsif (!defined(%currentlist)) { 
     if (!defined(%currentlist)) {   
         $r->print("There are no students currently enrolled.\n");          $r->print("There are no students currently enrolled.\n");
     } else {      } else {
         # Print out the available choices          # Print out the available choices
Line 654  sub show_drop_list { Line 713  sub show_drop_list {
     my ($r,%currentlist)=@_;      my ($r,%currentlist)=@_;
     my $cid=$ENV{'request.course.id'};      my $cid=$ENV{'request.course.id'};
     $r->print(<<'END');      $r->print(<<'END');
   <script>
   function checkAll(field)
   {
       for (i = 0; i < field.length; i++)
           field[i].checked = true ;
   }
   
   function uncheckAll(field)
   {
       for (i = 0; i < field.length; i++)
           field[i].checked = false ;
   }
   </script>
   <p>
 <input type="hidden" name="phase" value="four">  <input type="hidden" name="phase" value="four">
 <table border=2>  <table border=2>
 <tr><th>&nbsp;</th><th>username</th><th>domain</th>  <tr><th>&nbsp;</th><th>username</th><th>domain</th>
Line 688  END Line 761  END
         }          }
     }      }
     $r->print('</table><br>');      $r->print('</table><br>');
     $r->print('<input type=submit value="Drop Students">');      $r->print(<<"END");
   </p><p>
   <input type="button" value="check all" onclick="javascript:checkAll(document.studentform.droplist)"> &nbsp;
   <input type="button" value="uncheck all" onclick="javascript:uncheckAll(document.studentform.droplist)"> 
   <p><input type=submit value="Drop Students"></p>
   END
 }  }
   
 # ================================================= Drop/Add from uploaded file  # ================================================= Drop/Add from uploaded file
Line 713  sub upfile_drop_add { Line 791  sub upfile_drop_add {
     my $enddate   = $ENV{'form.enddate'};      my $enddate   = $ENV{'form.enddate'};
     if ($startdate=~/\D/) { $startdate=''; }      if ($startdate=~/\D/) { $startdate=''; }
     if ($enddate=~/\D/)   { $enddate=''; }      if ($enddate=~/\D/)   { $enddate=''; }
     #      # Determine domain and desired host (home server)
     my $domain=$ENV{'form.lcdomain'};      my $domain=$ENV{'form.lcdomain'};
       my $desiredhost = $ENV{'form.lcserver'};
       if (lc($desiredhost) eq 'default') {
           $desiredhost = undef;
       } else {
           my %home_servers = &Apache::loncommon::get_home_servers($domain);
           if (! exists($home_servers{$desiredhost})) {
               $r->print('<font color="#ff0000">Error:</font>'.
                         'Invalid home server specified');
               return;
           }
       }
     # Determine authentication mechanism      # Determine authentication mechanism
     my $amode  = '';      my $amode  = '';
     my $genpwd = '';      my $genpwd = '';
Line 797  sub upfile_drop_add { Line 886  sub upfile_drop_add {
                         }                          }
                     }                      }
                     if ($password) {                      if ($password) {
                         &modifystudent($domain,$username,$cid,$sec);                          &modifystudent($domain,$username,$cid,$sec,
                                          $desiredhost);
                         my $reply=&Apache::lonnet::modifystudent                          my $reply=&Apache::lonnet::modifystudent
                             ($domain,$username,$id,$amode,$password,                              ($domain,$username,$id,$amode,$password,
                              $fname,$mname,$lname,$gen,$sec,$enddate,                               $fname,$mname,$lname,$gen,$sec,$enddate,
                              $startdate,$ENV{'form.forceid'});                               $startdate,$ENV{'form.forceid'},$desiredhost);
                         if ($reply ne 'ok') {                          if ($reply ne 'ok') {
                             $r->print('<p><b>'.                              $r->print('<p><b>'.
                                       'Error enrolling '.$username.': '.                                        'Error enrolling '.$username.': '.
Line 857  sub upfile_drop_add { Line 947  sub upfile_drop_add {
 sub drop_student_list {  sub drop_student_list {
     my $r=shift;      my $r=shift;
     my $count=0;      my $count=0;
     foreach (@{$ENV{'form.droplist'}}) {      my @droplist;
       if (ref($ENV{'form.droplist'})) {
           @droplist = @{$ENV{'form.droplist'}};
       } else {
           @droplist = ($ENV{'form.droplist'});
       }
       foreach (@droplist) {
         my ($uname,$udom)=split(/\:/,$_);          my ($uname,$udom)=split(/\:/,$_);
         &modifystudent($udom,$uname,$ENV{'request.course.id'});          my $result = &modifystudent($udom,$uname,$ENV{'request.course.id'});
         $r->print('Dropped '.$uname.' at '.$udom.'<br>');          if ($result eq 'ok' || $result eq 'ok:') {
               $r->print('Dropped '.$uname.' at '.$udom.'<br>');
           } else {
               $r->print('Error dropping '.$uname.' at '.$udom.': '.$result.
                         '<br />');
           }
         $count++;          $count++;
     }      }
     $r->print('<p><b>Dropped '.$count.' student(s).</b>');      $r->print('<p><b>Dropped '.$count.' student(s).</b>');
Line 870  sub drop_student_list { Line 971  sub drop_student_list {
 # ================================================================ Main Handler  # ================================================================ Main Handler
 sub handler {  sub handler {
     my $r=shift;      my $r=shift;
     $Apache::lonxml::debug=1;  
     if ($r->header_only) {      if ($r->header_only) {
         $r->content_type('text/html');          $r->content_type('text/html');
         $r->send_http_header;          $r->send_http_header;

Removed from v.1.29  
changed lines
  Added in v.1.38


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