Diff for /loncom/enrollment/Enrollment.pm between versions 1.48 and 1.49

version 1.48, 2016/06/03 01:22:36 version 1.49, 2016/07/24 14:35:15
Line 39  use strict; Line 39  use strict;
   
 sub update_LC {  sub update_LC {
     my ($dom,$crs,$adds,$drops,$startdate,$enddate,$authtype,$autharg,      my ($dom,$crs,$adds,$drops,$startdate,$enddate,$authtype,$autharg,
         $showcredits,$defaultcredits,$classesref,$groupref,$logmsg,$newusermsg,          $showcredits,$defaultcredits,$autofailsafe,$classesref,$groupref,
         $context,$phototypes) = @_;          $logmsg,$newusermsg,$context,$phototypes) = @_;
 # Get institutional code and title of this class  # Get institutional code and title of this class
     my %courseinfo = ();      my %courseinfo = ();
     &get_courseinfo($dom,$crs,\%courseinfo);      &get_courseinfo($dom,$crs,\%courseinfo);
Line 56  sub update_LC { Line 56  sub update_LC {
     my $type=&Apache::loncoursedata::CL_TYPE;      my $type=&Apache::loncoursedata::CL_TYPE;
     my $lockedtype=&Apache::loncoursedata::CL_LOCKEDTYPE;      my $lockedtype=&Apache::loncoursedata::CL_LOCKEDTYPE;
     my $credidx=&Apache::loncoursedata::CL_CREDITS;      my $credidx=&Apache::loncoursedata::CL_CREDITS;
       my $instidx = &Apache::loncoursedata::CL_INSTSEC;
     my @localstudents = ();      my @localstudents = ();
     my @futurestudents = ();      my @futurestudents = ();
     my @activestudents = ();      my @activestudents = ();
Line 130  sub update_LC { Line 131  sub update_LC {
     my %place = &place_hash();       my %place = &place_hash(); 
     my %ucount = ();      my %ucount = ();
     my %enrollinfo = ();      my %enrollinfo = ();
       my %classcount;
     foreach my $class (@{$classesref}) {      foreach my $class (@{$classesref}) {
         my %enrolled = ();          my %enrolled = ();
         &parse_classlist($$configvars{'lonDaemons'},$dom,$crs,$class,\%place,$$groupref{$class},\%enrolled);          &parse_classlist($$configvars{'lonDaemons'},$dom,$crs,$class,\%place,$$groupref{$class},\%enrolled);
           $classcount{$class} = scalar(keys(%enrolled));
         foreach my $uname (sort keys %enrolled ) {          foreach my $uname (sort keys %enrolled ) {
             if (!grep/^$uname$/,@reg_students) {              if (!grep/^$uname$/,@reg_students) {
                 push @reg_students,$uname;                  push @reg_students,$uname;
Line 209  sub update_LC { Line 212  sub update_LC {
         unless ($uname eq '') {          unless ($uname eq '') {
             my %uidhash=&Apache::lonnet::idrget($dom,$uname);              my %uidhash=&Apache::lonnet::idrget($dom,$uname);
             my @stuinfo = @{$enrollinfo{$uname}};              my @stuinfo = @{$enrollinfo{$uname}};
             my ($access,$added,$inststatus);              my ($access,$added,$inststatus,$instsec);
             my $credits;              my $credits;
             if ($showcredits) {              if ($showcredits) {
                 $credits = $stuinfo[$place{'credits'}];                  $credits = $stuinfo[$place{'credits'}];
Line 219  sub update_LC { Line 222  sub update_LC {
                 }                  }
             }              }
             $inststatus = $stuinfo[$place{inststatus}];              $inststatus = $stuinfo[$place{inststatus}];
               $instsec = $stuinfo[$place{instsec}];
             if (grep/^$uname$/,@localstudents) {              if (grep/^$uname$/,@localstudents) {
 # Check for studentID changes  # Check for studentID changes
                 if ( ($uidhash{$uname}) && ($uidhash{$uname} !~ /error\:/) )  {                  if ( ($uidhash{$uname}) && ($uidhash{$uname} !~ /error\:/) )  {
Line 255  sub update_LC { Line 259  sub update_LC {
                         &execute_add($context,'switchtype',$uname,$dom,$auth,                          &execute_add($context,'switchtype',$uname,$dom,$auth,
                                      $authparam,$first,$middle,$last,$gene,                                       $authparam,$first,$middle,$last,$gene,
                                      $pid,$usec,$end,$start,$emailenc,                                       $pid,$usec,$end,$start,$emailenc,
                                      $credits,$cid,\$addresult,\$enrollcount,                                       $credits,$instsec,$cid,\$addresult,\$enrollcount,
                                      $linefeed,$logmsg);                                       $linefeed,$logmsg);
                         $added = 1;                          $added = 1;
                     }                      }
Line 266  sub update_LC { Line 270  sub update_LC {
                     if ( (grep/^$uname$/,@futurestudents) && ($$currlist{$uname}[$type] eq "auto") && ($adds == 1) ) {                      if ( (grep/^$uname$/,@futurestudents) && ($$currlist{$uname}[$type] eq "auto") && ($adds == 1) ) {
                         my $datechange = &datechange_check($$currlist{$uname}[$cstart],$$currlist{$uname}[$cend],$startdate,$enddate);                          my $datechange = &datechange_check($$currlist{$uname}[$cstart],$$currlist{$uname}[$cend],$startdate,$enddate);
                         if ($datechange) {                          if ($datechange) {
                             my $modify_access_result = &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$enddate,$startdate,'auto','',$cid,'',$context,$credits);                              my $modify_access_result = &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$enddate,$startdate,'auto','',$cid,'',$context,$credits,$instsec);
                             $access = &showaccess($enddate,$startdate);                              $access = &showaccess($enddate,$startdate);
                             if ($modify_access_result =~ /^ok/) {                              if ($modify_access_result =~ /^ok/) {
                                 $$logmsg .= &mt('Change in access dates for [_1].',$uname).$access.$linefeed;                                  $$logmsg .= &mt('Change in access dates for [_1].',$uname).$access.$linefeed;
Line 289  sub update_LC { Line 293  sub update_LC {
                         if ($expire_role_result eq 'ok') {                          if ($expire_role_result eq 'ok') {
                             my $modify_section_result;                              my $modify_section_result;
                             if (grep/^$uname$/,@activestudents) {                              if (grep/^$uname$/,@activestudents) {
                                 $modify_section_result = &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$$currlist{$uname}[$cend],$$currlist{$uname}[$cstart],'auto','',$cid,'',$context,$credits);                                  $modify_section_result = &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$$currlist{$uname}[$cend],$$currlist{$uname}[$cstart],'auto','',$cid,'',$context,$credits,$instsec);
                             } else {                              } else {
                                 $modify_section_result =  &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$enddate,$startdate,'auto','',$cid,'',$context,$credits);                                  $modify_section_result =  &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$enddate,$startdate,'auto','',$cid,'',$context,$credits,$instsec);
                                 $access =  &showaccess($enddate,$startdate);                                  $access =  &showaccess($enddate,$startdate);
                             }                              }
                             if ($modify_section_result =~ /^ok/) {                              if ($modify_section_result =~ /^ok/) {
Line 313  sub update_LC { Line 317  sub update_LC {
                 if (($showcredits) &&                   if (($showcredits) && 
                     ($$currlist{$uname}[$credidx] ne $credits) && (!$added)) {                      ($$currlist{$uname}[$credidx] ne $credits) && (!$added)) {
                     my $modify_credits_result =                      my $modify_credits_result =
                         &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$enddate,$startdate,'auto','',$cid,'',$context,$credits);                          &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$enddate,$startdate,'auto','',$cid,'',$context,$credits,$instsec);
                     if ($modify_credits_result =~ /^ok/) {                      if ($modify_credits_result =~ /^ok/) {
                         if ($credits ne '') {                          if ($credits ne '') {
                             $$logmsg .= &mt('Credits change for [_1] from [_2] to [_3].',$uname,$$currlist{$uname}[$credidx],$credits).$linefeed;                              $$logmsg .= &mt('Credits change for [_1] from [_2] to [_3].',$uname,$$currlist{$uname}[$credidx],$credits).$linefeed;
Line 324  sub update_LC { Line 328  sub update_LC {
                         $$logmsg .= &mt('Error when attempting to change credits for [_1] in section: [_2] -error [_3].',$uname,$stuinfo[$place{groupID}],$modify_credits_result).$linefeed;                          $$logmsg .= &mt('Error when attempting to change credits for [_1] in section: [_2] -error [_3].',$uname,$stuinfo[$place{groupID}],$modify_credits_result).$linefeed;
                     }                      }
                 }                  }
   # Check for institutional section change
                   if ($$currlist{$uname}[$instidx] ne $instsec) {
                       my $modify_instsec_result =
                           &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$enddate,$startdate,'auto','',$cid,'',$context,$credits,$instsec);
                       if ($modify_instsec_result =~ /^ok/) {
                           $$logmsg .= &mt('Institutional section change for [_1] from [_2] to [_3].',$uname,$$currlist{$uname}[$instidx],$instsec).$linefeed;
                       } else {
                           $$logmsg .= &mt('Error when attempting to change institutional section for [_1] in section: [_2] -error [_3].',$uname,$stuinfo[$place{groupID}],$modify_instsec_result).$linefeed;
                       }
                   }
             } else {              } else {
 # Check for changed usernames by checking studentIDs  # Check for changed usernames by checking studentIDs
                 if ( ($stuinfo[ $place{studentID} ] ne '') && (grep/^$stuinfo[ $place{studentID} ]$/,@LCids) ) {                  if ( ($stuinfo[ $place{studentID} ] ne '') && (grep/^$stuinfo[ $place{studentID} ]$/,@LCids) ) {
Line 365  sub update_LC { Line 379  sub update_LC {
                                     'context' => $context,                                      'context' => $context,
                                     'linefeed' => $linefeed,                                      'linefeed' => $linefeed,
                                     'inststatus' => $inststatus,                                      'inststatus' => $inststatus,
                                       'instsec'  => $instsec,
                                     'role' => 'st',                                      'role' => 'st',
                                    };                                     };
                         if ($credits) {                          if ($credits) {
Line 374  sub update_LC { Line 389  sub update_LC {
                     } else {                      } else {
                         &execute_add($context,'newstudent',$uname,$dom,$auth,                          &execute_add($context,'newstudent',$uname,$dom,$auth,
                                      $authparam,$first,$middle,$last,$gene,$pid,                                       $authparam,$first,$middle,$last,$gene,$pid,
                                      $usec,$end,$start,$emailenc,$credits,                                       $usec,$end,$start,$emailenc,$credits,$instsec,
                                      $cid,\$addresult,\$enrollcount,$linefeed,                                       $cid,\$addresult,\$enrollcount,$linefeed,
                                      $logmsg);                                       $logmsg);
                     }                      }
Line 420  sub update_LC { Line 435  sub update_LC {
   
 # Do drops  # Do drops
     if ( ($drops == 1) && (@reg_students > 0) ) {      if ( ($drops == 1) && (@reg_students > 0) ) {
           my %delaydrops;
         foreach my $uname (@localstudents) {          foreach my $uname (@localstudents) {
             if ($$currlist{$uname}[$type] eq "auto") {              if ($$currlist{$uname}[$type] eq "auto") {
                 my @saved = ();                  my @saved = ();
Line 431  sub update_LC { Line 447  sub update_LC {
                             push @saved,$uname;                              push @saved,$uname;
                         }                          }
                     } elsif (@saved == 0) {                      } elsif (@saved == 0) {
   # Check enrollment count for institutional section of student to be dropped 
                           if ($$currlist{$uname}[$instidx]) {
                               if (exists($classcount{$$currlist{$uname}[$instidx]})) {
                                   if ($classcount{$$currlist{$uname}[$instidx]} == 0) {
                                       if ($autofailsafe) {
                                           push(@{$delaydrops{$$currlist{$uname}[$instidx]}},$uname);    
                                           next;
                                       }
                                   }
                               }
                           }
                         my $drop_reply = &Apache::lonnet::modifystudent($dom,$uname,'','','',undef,undef,undef,undef,$$currlist{$uname}[$sec],time,undef,undef,undef,undef,'auto','',$cid,'',$context);                          my $drop_reply = &Apache::lonnet::modifystudent($dom,$uname,'','','',undef,undef,undef,undef,$$currlist{$uname}[$sec],time,undef,undef,undef,undef,'auto','',$cid,'',$context);
                         if ($drop_reply !~ /^ok/) {                          if ($drop_reply !~ /^ok/) {
                             $$logmsg .= &mt('An error occurred during the attempt to expire the [_1] from the old section [_2] - [_3].',$uname,$$currlist{$uname}[$sec],$drop_reply).$linefeed;                              $$logmsg .= &mt('An error occurred during the attempt to expire the [_1] from the old section [_2] - [_3].',$uname,$$currlist{$uname}[$sec],$drop_reply).$linefeed;
Line 446  sub update_LC { Line 473  sub update_LC {
                 }                  }
             }              }
         }          }
           if (scalar(keys(%delaydrops)) > 0) {
               foreach my $class (keys(%delaydrops)) {
                   if (ref($delaydrops{$class}) eq 'ARRAY') {
                       if ($autofailsafe < scalar(@{$delaydrops{$class}})) {
                           $$logmsg .= &mt('The following students were not expired from the old section [_1] because the enrollment count retrieved for that institutional section was zero, and the number of students with roles to expire exceeded the failsafe threshold of [_2]:',$class,$autofailsafe);
                           if ($context eq "updatenow") {
                               $$logmsg .= join('<br />',@{$delaydrops{$class}}).$linefeed; 
                           } elsif ($context eq "automated") {
                               $$logmsg .= join($linefeed,@{$delaydrops{$class}}).$linefeed;
                           }
                       } else {
                           foreach my $uname (@{$delaydrops{$class}}) {
                               my $drop_reply = &Apache::lonnet::modifystudent($dom,$uname,'','','',undef,undef,undef,undef,$$currlist{$uname}[$sec],time,undef,undef,undef,undef,'auto','',$cid,'',$context);
                               if ($drop_reply !~ /^ok/) {
                                   $$logmsg .= &mt('An error occurred during the attempt to expire the [_1] from the old section [_2] - [_3].',$uname,$$currlist{$uname}[$sec],$drop_reply).$linefeed;
                               } else {
                                   $dropcount ++;
                                   my %userenv = &Apache::lonnet::get('environment',['firstname','lastname','id'],$dom,$uname);
                                   $dropresult .= $userenv{'firstname'}." ".$userenv{'lastname'}." (".$userenv{'id'}.") - ".$uname.' '.&mt("dropped from section: '[_1]'.",$$currlist{$uname}[$sec]).$linefeed;
                                   if ($context eq 'automated') {
                                      $$logmsg .= &mt('User [_1] student role expired from course.',$uname).$linefeed;
                                   }
                               }
                           }
                       }
                   }
               }
           }
     }      }
   
 # Terminated explictly allowed access to student creation/modification   # Terminated explictly allowed access to student creation/modification 
Line 523  sub create_newuser { Line 578  sub create_newuser {
     my $role = $args->{'role'};      my $role = $args->{'role'};
     my $inststatus = $args->{'inststatus'};      my $inststatus = $args->{'inststatus'};
     my $credits = $args->{'credits'};      my $credits = $args->{'credits'};
       my $instsec = $args->{'instsec'};
     my $create_passwd = 0;      my $create_passwd = 0;
     my $authchk = '';      my $authchk = '';
     my $outcome;      my $outcome;
Line 567  sub create_newuser { Line 623  sub create_newuser {
                 $outcome = $result;                  $outcome = $result;
             }              }
         } else {          } else {
             $outcome=&Apache::lonnet::modifystudent($udom,$uname,$pid,$auth,$authparam,$first,$middle,$last,$gene,$usec,$end,$start,'',undef,$emailaddr,'auto','',$cid,'',$called_context,$inststatus,$credits);              $outcome=&Apache::lonnet::modifystudent($udom,$uname,$pid,$auth,$authparam,$first,$middle,$last,$gene,$usec,$end,$start,'',undef,$emailaddr,'auto','',$cid,'',$called_context,$inststatus,$credits,$instsec);
         }          }
         if ($outcome eq 'ok') {          if ($outcome eq 'ok') {
             my $access = &showaccess($end,$start);              my $access = &showaccess($end,$start);
Line 686  sub prepare_add { Line 742  sub prepare_add {
   
 sub execute_add {  sub execute_add {
     my ($context,$caller,$uname,$dom,$auth,$authparam,$first,$middle,$last,      my ($context,$caller,$uname,$dom,$auth,$authparam,$first,$middle,$last,
         $gene,$pid,$usec,$end,$start,$emailenc,$credits,$cid,$addresult,          $gene,$pid,$usec,$end,$start,$emailenc,$credits,$instsec,$cid,$addresult,
         $enrollcount,$linefeed,$logmsg) = @_;          $enrollcount,$linefeed,$logmsg) = @_;
 # Get the user's information and authentication  # Get the user's information and authentication
     my %userenv = &Apache::lonnet::get('environment',['firstname','middlename','lastname','generation','id','critnotification','notification','permanentemail','inststatus'],$dom,$uname);      my %userenv = &Apache::lonnet::get('environment',['firstname','middlename','lastname','generation','id','critnotification','notification','permanentemail','inststatus'],$dom,$uname);
Line 762  sub execute_add { Line 818  sub execute_add {
         &Apache::lonnet::modify_student_enrollment($dom,$uname,$pid,$first,$middle,          &Apache::lonnet::modify_student_enrollment($dom,$uname,$pid,$first,$middle,
                                                    $last,$gene,$usec,$end,$start,                                                     $last,$gene,$usec,$end,$start,
                                                    'auto','',$cid,'',$context,                                                     'auto','',$cid,'',$context,
                                                    $credits);                                                     $credits,$instsec);
     if ($classlist_reply eq 'ok') {      if ($classlist_reply eq 'ok') {
         my $access = &showaccess($end,$start);          my $access = &showaccess($end,$start);
         my $showsec = $usec;          my $showsec = $usec;
Line 836  sub parse_classlist { Line 892  sub parse_classlist {
                  if ("@state" eq "students student") {                   if ("@state" eq "students student") {
                      $uname = $attr->{username};                       $uname = $attr->{username};
                      $$studentsref{$uname}[ $$placeref{'groupID'} ] = $groupID;                       $$studentsref{$uname}[ $$placeref{'groupID'} ] = $groupID;
                        $$studentsref{$uname}[ $$placeref{'instsec'} ] = $class;
                  }                   }
             }, "tagname, attr"],              }, "tagname, attr"],
          text_h =>           text_h =>
Line 948  sub place_hash { Line 1005  sub place_hash {
                   studentID  => 10,                    studentID  => 10,
                   credits    => 11,                    credits    => 11,
                   inststatus => 12,                    inststatus => 12,
                     instsec    => 13,
                 );                  );
     return %place;      return %place;
 }  }

Removed from v.1.48  
changed lines
  Added in v.1.49


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