Diff for /loncom/interface/lonpopulate.pm between versions 1.17 and 1.31

version 1.17, 2004/08/05 21:57:07 version 1.31, 2005/11/04 21:34:05
Line 35  use Apache::loncoursedata; Line 35  use Apache::loncoursedata;
 use Apache::Constants qw(:common :http REDIRECT);  use Apache::Constants qw(:common :http REDIRECT);
 use Time::Local;  use Time::Local;
 use LONCAPA::Enrollment;  use LONCAPA::Enrollment;
 use localenroll;  
   
 ###############################################################  ###############################################################
 sub header {  sub header {
       my $html=&Apache::lonxml::xmlbegin();
     my $bodytag=&Apache::loncommon::bodytag('Classlist Manager');      my $bodytag=&Apache::loncommon::bodytag('Classlist Manager');
     return(<<ENDHEAD);      return(<<ENDHEAD);
 <html>  $html
 <head>  <head>
 <title>LON-CAPA Classlist Manager</title>  <title>LON-CAPA Classlist Manager</title>
 </head>  </head>
Line 119  function process(calling,numauto,nummanu Line 119  function process(calling,numauto,nummanu
      }       }
  }   }
  if (calling == "viewclass") {   if (calling == "viewclass") {
      document.forms.studentform.state.value = "process";  
      var totcheck = 0       var totcheck = 0
        var numchk = 0
      if (numauto > 0) {       if (numauto > 0) {
         for (var i=0; i<document.studentform.chgauto.length; i++) {           numchk = countChecked(document.studentform.chgauto);
             if (document.studentform.chgauto[i].checked == true) {           totcheck = totcheck + numchk
                 totcheck ++  
             }  
         }  
      }       }
      if (nummanual > 0) {       if (nummanual > 0) {
         for (var i=0; i<document.studentform.chgmanual.length; i++) {           numchk = countChecked(document.studentform.chgmanual);
             if (document.studentform.chgmanual[i].checked == true) {           totcheck = totcheck + numchk
                 totcheck ++  
             }  
         }  
      }       }
      if (numlock > 0) {       if (numlock > 0) {
         for (var i=0; i<document.studentform.lockchg.length; i++) {           numchk = countChecked(document.studentform.lockchg);
             if (document.studentform.lockchg[i].checked == true) {           totcheck = totcheck + numchk
                 totcheck ++  
             }  
         }  
      }       }
      if (numunlock > 0) {       if (numunlock > 0) {
         for (var i=0; i<document.studentform.unlockchg.length; i++) {           numchk = countChecked(document.studentform.unlockchg);
             if (document.studentform.unlockchg[i].checked == true) {           totcheck = totcheck + numchk
                 totcheck ++  
             }  
         }  
      }       }
      if (totcheck > 0) {       if (totcheck > 0) {
         checker = 1          document.forms.studentform.state.value = "process";
      } else {       }
        if (totcheck == 0) {
         alert("You must check at least one checkbox, before proceeding to the next page")          alert("You must check at least one checkbox, before proceeding to the next page")
         checker = 0          checker = 0
      }       }
Line 162  function process(calling,numauto,nummanu Line 151  function process(calling,numauto,nummanu
 }  }
 |;  |;
     if ($action eq 'viewclass') {      if ($action eq 'viewclass') {
           $scripttag .= &Apache::loncommon::check_uncheck_jscript();
         $scripttag .= qq|          $scripttag .= qq|
 function checkAll(field) {  function countChecked(field) {
     for (i = 0; i < field.length; i++)      var count = 0;
         field[i].checked = true ;      if (field.length > 0) {
           for (var i=0; i<field.length; i++) {
               if (field[i].checked == true) {
                   count ++
               }
           }
       } else {
           if (field.checked == true) {
               count ++
           }
       }
       return count
 }  }
   
 function uncheckAll(field) {  
     for (i = 0; i < field.length; i++)  
         field[i].checked = false ;  
 }  
 |;  |;
     }      }
     $scripttag .= qq|      $scripttag .= qq|
 // End hiding -->  // End hiding -->
 </script>  </script>
 |;  |;
       my $html=&Apache::lonxml::xmlbegin();
     return(<<ENDHEAD);      return(<<ENDHEAD);
 <html>  $html
 <head>  <head>
 <title>LON-CAPA Classlist Manager</title>  <title>LON-CAPA Classlist Manager</title>
 $scripttag  $scripttag
Line 190  ENDHEAD Line 188  ENDHEAD
 sub print_mainbox {  sub print_mainbox {
     my ($r,$tasklongref,$realm,$reply) = @_;      my ($r,$tasklongref,$realm,$reply) = @_;
     my $action = "information";      my $action = "information";
     if ( exists($ENV{'form.action'}) ) {      if ( exists($env{'form.action'}) ) {
         $action = $ENV{'form.action'};          $action = $env{'form.action'};
     }      }
     my $page = '';      my $page = '';
     if ($action eq "information") {      if ($action eq "information") {
Line 228  ENDTHIS Line 226  ENDTHIS
 sub print_navmenu {  sub print_navmenu {
     my ($r,$tasksref,$tasklongref) = @_;      my ($r,$tasksref,$tasklongref) = @_;
     my $action = "information";      my $action = "information";
     if (exists($ENV{'form.action'}) ) {      if (exists($env{'form.action'}) ) {
         $action = $ENV{'form.action'};          $action = $env{'form.action'};
     }      }
     $r->print(<<ENDONE);      $r->print(<<ENDONE);
   <td width="10" valign="top" bgcolor="#DDFFFF">&nbsp;</td>    <td width="10" valign="top" bgcolor="#DDFFFF">&nbsp;</td>
Line 267  ENDONE Line 265  ENDONE
 sub print_main_frame {  sub print_main_frame {
   my ($r,$realm,$dom,$crs,$tasktitleref) = @_;    my ($r,$realm,$dom,$crs,$tasktitleref) = @_;
   my $action = "information";    my $action = "information";
   if (exists($ENV{'form.action'}) ) {    if (exists($env{'form.action'}) ) {
       $action = $ENV{'form.action'};        $action = $env{'form.action'};
   }    }
   
 # Get course settings  # Get course settings
Line 487  ENDTWO Line 485  ENDTWO
                   </form>                    </form>
 ENDTWO  ENDTWO
   } elsif ($action eq "notify") {    } elsif ($action eq "notify") {
       my @notified = ();        my $notifycount = 0;
       if ($enrollvar{notifylist} =~ m/,/) {        my @notified = split(/,/,$enrollvar{notifylist});
           @notified = split/,/,$enrollvar{notifylist};  
       } else {  
           @notified = $enrollvar{notifylist};  
       }  
       my $notifycount = 0;        my $notifycount = 0;
       foreach  (@notified) {        foreach  (@notified) {
         unless ($_ eq '') { $notifycount ++; }     unless ($_ eq '') { $notifycount ++; } 
       }        }
       my $noteset = '';        my $noteset = '';
       if ($notifycount) {        if ($notifycount) {
Line 542  ENDTWO Line 536  ENDTWO
           my @roleinfo = split/:/,$_;            my @roleinfo = split/:/,$_;
           if ($roleinfo[0] eq 'cc')  {            if ($roleinfo[0] eq 'cc')  {
               unless (grep/^$roleinfo[1]\@$roleinfo[2]/,@ccs) {                unless (grep/^$roleinfo[1]\@$roleinfo[2]/,@ccs) {
                   my $active_cc = &LONCAPA::Enrollment::check_user_status($roleinfo[2],$roleinfo[1],$dom,$crs,'cc');                    my $active_cc = &Apache::loncommon::check_user_status($roleinfo[2],$roleinfo[1],$dom,$crs,'cc');
                   if ($active_cc eq 'ok') {                    if ($active_cc eq 'active') {
                       push @ccs, "$roleinfo[1]\@$roleinfo[2]";                        push @ccs, "$roleinfo[1]\@$roleinfo[2]";
                       $pname{"$roleinfo[1]\@$roleinfo[2]"} = &Apache::loncommon::plainname($roleinfo[1],$roleinfo[2]);                        $pname{"$roleinfo[1]\@$roleinfo[2]"} = &Apache::loncommon::plainname($roleinfo[1],$roleinfo[2]);
                       if (grep/^$roleinfo[1]\@$roleinfo[2]$/,@notified) {                        if (grep/^$roleinfo[1]\@$roleinfo[2]$/,@notified) {
Line 567  ENDTWO Line 561  ENDTWO
               }                }
           }            }
       }        }
       my $viewer = $ENV{'user.name'}.'@'.$ENV{'user.domain'};        my $viewer = $env{'user.name'}.'@'.$env{'user.domain'};
       unless ( (grep/^$viewer$/,@ccs) || ($viewer eq '') )  {        unless ( (grep/^$viewer$/,@ccs) || ($viewer eq '') )  {
           push @ccs,$viewer;            push @ccs,$viewer;
           $pname{$viewer} =  &Apache::loncommon::plainname($ENV{'user.name'},$ENV{'user.domain'});            $pname{$viewer} =  &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'});
           $notifystate{$viewer} = 0;            $notifystate{$viewer} = 0;
       }        }
   
Line 640  ENDTWO Line 634  ENDTWO
           </form>            </form>
       ");        ");
   } elsif ($action eq "crosslist") {    } elsif ($action eq "crosslist") {
       my @xlists = ();        my @xlists;
       if ($enrollvar{crosslistings} =~ m/,/) {        if ($enrollvar{crosslistings} ne '') {
           @xlists = split/,/,$enrollvar{crosslistings};    @xlists = split(/,/,$enrollvar{crosslistings});
       } elsif ($enrollvar{crosslistings} ne '') {  
           $xlists[0] = $enrollvar{crosslistings};  
       }        }
       my $cross_str = @xlists;        my $cross_str = @xlists;
       $r->print("        $r->print("
Line 673  ENDTWO Line 665  ENDTWO
           for (my $i=0; $i<@xlists; $i++) {            for (my $i=0; $i<@xlists; $i++) {
               my $xl = '&nbsp;';                my $xl = '&nbsp;';
               my $gp = '&nbsp;';                my $gp = '&nbsp;';
               if ($xlists[$i] =~ /(\w+):?(.*)$/) {                if ($xlists[$i] =~ /^([^:]+):?(.*)$/) {
                   $xl = $1;                    $xl = $1;
                   $gp = $2;                    $gp = $2;
               }                               }               
Line 725  ENDTWO Line 717  ENDTWO
   } elsif ($action eq "sections") {    } elsif ($action eq "sections") {
       my @sections = ();        my @sections = ();
       @sections = &Apache::lonnet::auto_get_sections($crs,$dom,$enrollvar{coursecode});        @sections = &Apache::lonnet::auto_get_sections($crs,$dom,$enrollvar{coursecode});
       my @storedsections = ();        my @storedsections = split(/,/,$enrollvar{sectionnums});
       my @currsections = ();        my @currsections = ();
       my %sec_id = ();        my %sec_id = ();
       if ($enrollvar{sectionnums} =~ m/,/) {  
           @storedsections = split/,/,$enrollvar{sectionnums};  
       } else {  
           $storedsections[0] = $enrollvar{sectionnums};  
       }  
       foreach (@storedsections) {        foreach (@storedsections) {
           if ($_ =~ m/^(\w+):(\w*)$/) {            if ($_ =~ m/^(\w+):(\w*)$/) {
               push @currsections, $1;                push @currsections, $1;
Line 983  Note: Any students previously added manu Line 970  Note: Any students previously added manu
                     <tr>                      <tr>
                      <td>                       <td>
       ");        ");
       if (! exists($ENV{'form.sortby'})) {        if (! exists($env{'form.sortby'})) {
           $ENV{'form.sortby'} = 'username';            $env{'form.sortby'} = 'username';
       }        }
       if ($ENV{'form.Status'} !~ /^(Any|Expired|Active)$/) {        if ($env{'form.Status'} !~ /^(Any|Expired|Active)$/) {
           $ENV{'form.Status'} = 'Active';            $env{'form.Status'} = 'Active';
       }        }
       my $status_select = &Apache::lonhtmlcommon::StatusOptions($ENV{'form.Status'});        my $status_select = &Apache::lonhtmlcommon::StatusOptions($env{'form.Status'});
 #  Get current classlist  #  Get current classlist
       my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist();        my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist();
       if (! defined($classlist)) {        if (! defined($classlist)) {
Line 1000  Note: Any students previously added manu Line 987  Note: Any students previously added manu
           $r->print('<input type="submit" value="'.&mt('Update Display').'" />'.            $r->print('<input type="submit" value="'.&mt('Update Display').'" />'.
               "\n</p>\n");                "\n</p>\n");
   
           my ($studentcount,$autocount,$manualcount,$lockcount,$unlockcount) = &Apache::londropadd::show_class_list($r,'autoenroll','nothing',$ENV{'form.Status'},$classlist,$keylist);            my ($studentcount,$autocount,$manualcount,$lockcount,$unlockcount) = &Apache::londropadd::show_class_list($r,'autoenroll','nothing',$env{'form.Status'},$classlist,$keylist);
           $r->print("            $r->print("
                      </td>                       </td>
                     </tr>                      </tr>
Line 1229  sub print_chgsettings_response { Line 1216  sub print_chgsettings_response {
     my $autoadds = '';      my $autoadds = '';
     my $autodrops = '';      my $autodrops = '';
   
     if ( exists($ENV{'form.autoadds'}) ) {      if ( exists($env{'form.autoadds'}) ) {
  $autoadds=$ENV{'form.autoadds'};   $autoadds=$env{'form.autoadds'};
     }      }
     if ( exists($ENV{'form.autodrops'}) ) {      if ( exists($env{'form.autodrops'}) ) {
  $autodrops=$ENV{'form.autodrops'};   $autodrops=$env{'form.autodrops'};
     }      }
   
     my $response = "";      my $response = "";
Line 1303  sub print_setdates_response { Line 1290  sub print_setdates_response {
     my $currstart = $settings{'internal.autostart'};      my $currstart = $settings{'internal.autostart'};
     my $currend = $settings{'internal.autoend'};      my $currend = $settings{'internal.autoend'};
     my $response = '';      my $response = '';
     my ($autostart,$autoend) = &get_dates_from_form();      my $showstart = '';
     my $showstart = &Apache::lonlocal::locallocaltime($autostart);  
     my $showend = '';      my $showend = '';
     my $warning = '';      my $warning = '';
     my $warn_prefix = '';      my $warn_prefix = '';
     if ($autoend) {      my ($autostart,$autoend) = &get_dates_from_form();
  $showend = &Apache::lonlocal::locallocaltime($autoend);      if ( ($autostart eq '') || ($autoend eq '') ) {
     } else {          $response = "There was a problem processing your requested changes. The automated enrollment settings for this course have been left unchanged.<br/>";
  $showend = "'No end date'";      } elsif (($autoend > 0) && ($autoend <= $autostart)) {
     }           $response = 'The date/time selected for starting auto-enrollment was the same or later than the date/time selected for ending auto-enrollment. As this means auto-enrollment will never be active, your requested changes have not been processed, and the existing values remain in effect. Please <a href="javascript:history.go(-1)">go back</a> to the previous page to try your changes again.'."\n";
       } else {       
           $showstart = &Apache::lonlocal::locallocaltime($autostart);
           if ($autoend) {
       $showend = &Apache::lonlocal::locallocaltime($autoend);
           } else {
       $showend = "'No end date'";
           } 
   
     my %cenv = ('internal.autostart' => $autostart,          my %cenv = ('internal.autostart' => $autostart,
  'internal.autoend' => $autoend);       'internal.autoend' => $autoend);
     my $reply = &Apache::lonnet::put('environment',\%cenv,$dom,$crs);          my $reply = &Apache::lonnet::put('environment',\%cenv,$dom,$crs);
     if ($reply !~ /^ok$/) {          if ($reply !~ /^ok$/) {
  $response = "There was a problem processing your requested changes. The automated enrollment settings for this course have been left unchanged.<br/>";      $response = "There was a problem processing your requested changes. The automated enrollment settings for this course have been left unchanged.<br/>";
     } else {          } else {
  if ($currstart == $autostart) {      if ($currstart == $autostart) {
     $response = "The first date for automated enrollment has been left unchanged as $showstart.<br/>";          $response = "The first date for automated enrollment has been left unchanged as $showstart.<br/>";
  } else {      } else {
     $response = "The first date for automated enrollment has been changed to $showstart.<br/>";          $response = "The first date for automated enrollment has been changed to $showstart.<br/>";
  }       } 
  if ($currend == $autoend) {      if ($currend == $autoend) {
     $response .= "The last date for automated enrollment has been left unchanged as $showend.<br/>";          $response .= "The last date for automated enrollment has been left unchanged as $showend.<br/>";
  } else {      } else {
     $response .= "The last date for automated enrollment has been changed to $showend.<br/>";          $response .= "The last date for automated enrollment has been changed to $showend.<br/>";
  }      }
     
 # Generate message in case where old first enrollment date was later than today, but new first enrollment date is now today or earlier.  # Generate message in case where old first enrollment date was later than today, but new first enrollment date is now today or earlier.
   
  my $rosterupdated = 0;      my $rosterupdated = 0;
  my $firstaccess = "";      my $firstaccess = "";
  my $nextupdate = "";      my $nextupdate = "";
  my $lastupdate = "";      my $lastupdate = "";
   
  my $nowstamp = time;      my $nowstamp = time;
  my @date_list=localtime(time);      my @date_list=localtime(time);
  my $cur_year = $date_list[5];      my $cur_year = $date_list[5];
  my $curday = $date_list[3];      my $curday = $date_list[3];
  my $curmonth = $date_list[4];      my $curmonth = $date_list[4];
  my $lastmidnt = timelocal(0,0,0,$date_list[3],$date_list[4],$date_list[5]);      my $lastmidnt = timelocal(0,0,0,$date_list[3],$date_list[4],$date_list[5]);
  my $nextmidnt = 86400 + $lastmidnt;      my $nextmidnt = 86400 + $lastmidnt;
   
  my $todayupdate = timelocal(0,30,1,$date_list[3],$date_list[4],$date_list[5]);      my $todayupdate = timelocal(0,30,1,$date_list[3],$date_list[4],$date_list[5]);
  my $lastupdate = $todayupdate - 86400;      my $lastupdate = $todayupdate - 86400;
  if ($nowstamp < $todayupdate) {      if ($nowstamp < $todayupdate) {
     $nextupdate = "today";        $nextupdate = "today";
  } else {  
     $nextupdate = "tomorrow";  
  }  
  if ($currstart < $lastupdate) {  
     $rosterupdated = 1;  
  }  
  if ($autostart < $nextmidnt ) {  
     if ( $autostart >= $lastmidnt) {  
  $firstaccess = "today";  
     } else {      } else {
  $firstaccess = "a date prior to today";        $nextupdate = "tomorrow";
     }      }
     if (($nowstamp >= $autostart) && ($rosterupdated == 0)) {      if ($currstart < $lastupdate) {
  $response .= qq|<br>Although you have now set the first enrollment date to $firstaccess, automatic enrollment will <b>not</b> occur until the next automatic enrollment update occurs for all LON-CAPA courses at 1.30 am $nextupdate. If you wish to immediately enroll registered students included in the institutional classlist for this class, please visit the <a href="/adm/populate?action=updatenow">roster update page</a>.<br>|;          $rosterupdated = 1;
     }      }
  }      if ($autostart < $nextmidnt ) {
  $warning = &warning_message($dom,$crs,$action);          if ( $autostart >= $lastmidnt) {
  $warn_prefix = "<br/><font size ='+1'><b>Warning</b></font>. Although you set a start and end date for auto-enrollment, additional action is required.<br/>";      $firstaccess = "today";
  unless ($warning eq '') {          } else {
     $response .= $warn_prefix.$warning;        $firstaccess = "a date prior to today";
  }          }
           if (($nowstamp >= $autostart) && ($rosterupdated == 0)) {
       $response .= qq|<br>Although you have now set the first enrollment date to $firstaccess, automatic enrollment will <b>not</b> occur until the next automatic enrollment update occurs for all LON-CAPA courses at 1.30 am $nextupdate. If you wish to immediately enroll registered students included in the institutional classlist for this class, please visit the <a href="/adm/populate?action=updatenow">roster update page</a>.<br>|;
           }
       }
       $warning = &warning_message($dom,$crs,$action);
       $warn_prefix = "<br/><font size ='+1'><b>Warning</b></font>. Although you set a start and end date for auto-enrollment, additional action is required.<br/>";
       unless ($warning eq '') {
           $response .= $warn_prefix.$warning;
       }
           }
     }      }
     &print_reply($r,$response,$$tasktitleref{$action});      &print_reply($r,$response,$$tasktitleref{$action});
     return;      return;
Line 1384  sub print_setaccess_response { Line 1378  sub print_setaccess_response {
     my $autostart = $settings{'internal.autostart'};      my $autostart = $settings{'internal.autostart'};
     my $response = '';      my $response = '';
     my ($startaccess,$endaccess) = &get_dates_from_form();      my ($startaccess,$endaccess) = &get_dates_from_form();
     my $showstart = &Apache::lonlocal::locallocaltime($startaccess);      if (($startaccess eq '') || ($endaccess eq '')) {
     my $showend = '';          $response = "There was a problem processing your requested changes. The default
     my $warning = '';  start and end access dates for this course have been left unchanged.<br/>";
     my $warn_prefix = '';      } elsif (($endaccess > 0) && ($endaccess <= $startaccess)) {
     if ($endaccess) {          $response = 'The default start access date/time you chose was the same or later than the default end access date/time. As this means that roles will never be active, your requested changes have not been processed, and the existing values remain in effect. Please <a href="javascript:history.go(-1)">go back</a> to the previous page to try your changes again.'."\n"; 
  $showend = &Apache::lonlocal::locallocaltime($endaccess);  
     } else {      } else {
  $showend = "'No end date'";          my $showstart = &Apache::lonlocal::locallocaltime($startaccess);
     }          my $showend = '';
           my $warning = '';
           my $warn_prefix = '';
           if ($endaccess) {
       $showend = &Apache::lonlocal::locallocaltime($endaccess);
           } else {
       $showend = "'No end date'";
           }
   
     my %cenv = ('default_enrollment_start_date' => $startaccess,          my %cenv = ('default_enrollment_start_date' => $startaccess,
  'default_enrollment_end_date' => $endaccess);   'default_enrollment_end_date' => $endaccess);
     my $reply = &Apache::lonnet::put('environment',\%cenv,$dom,$crs);          my $reply = &Apache::lonnet::put('environment',\%cenv,$dom,$crs);
     if ($reply !~ /^ok$/) {          if ($reply !~ /^ok$/) {
  $response = "There was a problem processing your requested changes. The automated enrollment settings for this course have been left unchanged.<br/>";      $response = "There was a problem processing your requested changes. The automated enrollment settings for this course have been left unchanged.<br/>";
     } else {          } else {
  if ($currstart == $startaccess) {      if ($currstart == $startaccess) {
     $response = "The first access date for students added via automated enrollment has been left unchanged as $showstart.<br/>";          $response = "The first access date for students added via automated enrollment has been left unchanged as $showstart.<br/>";
  } else {      } else {
     $response = "The first access date for students added via automated enrollment has been changed to          $response = "The first access date for students added via automated enrollment has been changed to
 $showstart.<br/>";  $showstart.<br/>";
  }      }
  if ($currend == $endaccess) {      if ($currend == $endaccess) {
     $response .= "The last access date for students added via automated enrollment has been left unchanged as $showend.<br/>";          $response .= "The last access date for students added via automated enrollment has been left unchanged as $showend.<br/>";
  } else {      } else {
     $response .= "The last access date for students automated enrollment has been changed to          $response .= "The last access date for students automated enrollment has been changed to
 $showend.<br/>";  $showend.<br/>";
  }      }
   
 # Generate message in case where old first access date was later than today, but new first access date is now today or earlier.  # Generate message in case where old first access date was later than today, but new first access date is now today or earlier.
   
  my $accessgiven= 0;      my $accessgiven= 0;
  my $firstaccess = "";      my $firstaccess = "";
  my $nextupdate = "";      my $nextupdate = "";
  my $lastupdate = "";      my $lastupdate = "";
   
  my $nowstamp = time;      my $nowstamp = time;
  my @date_list=localtime(time);      my @date_list=localtime(time);
  my $cur_year = $date_list[5];      my $cur_year = $date_list[5];
  my $curday = $date_list[3];      my $curday = $date_list[3];
  my $curmonth = $date_list[4];      my $curmonth = $date_list[4];
  my $lastmidnt = timelocal(0,0,0,$date_list[3],$date_list[4],$date_list[5]);      my $lastmidnt = timelocal(0,0,0,$date_list[3],$date_list[4],$date_list[5]);
  my $nextmidnt = 86400 + $lastmidnt;      my $nextmidnt = 86400 + $lastmidnt;
   
  my $todayupdate = timelocal(0,30,1,$date_list[3],$date_list[4],$date_list[5]);      my $todayupdate = timelocal(0,30,1,$date_list[3],$date_list[4],$date_list[5]);
  my $tomorrowupdate = $todayupdate + 86400;      my $tomorrowupdate = $todayupdate + 86400;
  my $lastupdate = $todayupdate - 86400;      my $lastupdate = $todayupdate - 86400;
   
  if ($autostart < $nextmidnt) {      if ($autostart < $nextmidnt) {
     if ($nowstamp < $todayupdate) {          if ($nowstamp < $todayupdate) {
  $nextupdate = "at 1.30 am today";      $nextupdate = "at 1.30 am today";
           } else {
       $nextupdate = "at 1.30 am tomorrow";
           }
     } else {      } else {
  $nextupdate = "at 1.30 am tomorrow";          my @enrollstart = localtime($autostart);
           $nextupdate = timelocal(0,30,1,$enrollstart[3],$enrollstart[4],$enrollstart[5]);
           unless (($enrollstart[2] < 1) || ($enrollstart[2] == 1 && $enrollstart[1] <=30))  {
       $nextupdate += 86400; 
           }
           $nextupdate = &Apache::lonlocal::locallocaltime($nextupdate);
       }
       if (($currstart < $lastupdate) && ($autostart < $lastupdate)) {
           $accessgiven = 1;
       }
       if ($startaccess < $nextmidnt ) {
           if ( $startaccess >= $lastmidnt) {
           $firstaccess = "today";
           } else {
       $firstaccess = "a date prior to today";
           }
           if (($nowstamp >= $startaccess) && ($accessgiven == 0)) {
       $response .= qq|<br>Although you have now set the first access date to $firstaccess, automatic enrollment will <b>not</b> occur until the next automatic enrollment update occurs for all LON-CAPA courses $nextupdate. If you wish to grant immediate course access for registered students included in the institutional classlist for this class, please visit the <a href="/adm/populate?action=updatenow">roster update page</a>.<br>|;
           }
     }      }
  } else {      $warning = &warning_message($dom,$crs,$action);
     my @enrollstart = &Apache::lonlocal::locallocaltime($autostart);      $warn_prefix = "<br/><font size ='+1'><b>Warning</b></font>. Although you have set default first and last access dates for students who are added via automatic enrollment, additional action is required.<br/>";
     $nextupdate = timelocal(0,30,1,$enrollstart[3],$enrollstart[4],$enrollstart[5]);      unless ($warning eq '') {
     unless (($enrollstart[2] < 1) || ($enrollstart[2] == 1 && $enrollstart[1] <=30))  {          $response .= $warn_prefix.$warning;
  $nextupdate += 86400;   
     }  
     $nextupdate = &Apache::lonlocal::locallocaltime($nextupdate);  
  }  
  if (($currstart < $lastupdate) && ($autostart < $lastupdate)) {  
     $accessgiven = 1;  
  }  
  if ($startaccess < $nextmidnt ) {  
     if ( $startaccess >= $lastmidnt) {  
  $firstaccess = "today";  
     } else {  
  $firstaccess = "a date prior to today";  
     }  
     if (($nowstamp >= $startaccess) && ($accessgiven == 0)) {  
  $response .= qq|<br>Although you have now set the first access date to $firstaccess, automatic enrollment will <b>not</b> occur until the next automatic enrollment update occurs for all LON-CAPA courses $nextupdate. If you wish to grant immediate course access for registered students included in the institutional classlist for this class, please visit the <a href="/adm/populate?action=updatenow">roster update page</a>.<br>|;  
     }      }
  }          }
  $warning = &warning_message($dom,$crs,$action);  
  $warn_prefix = "<br/><font size ='+1'><b>Warning</b></font>. Although you have set default first and last access dates for students who are added via automatic enrollment, additional action is required.<br/>";  
  unless ($warning eq '') {  
     $response .= $warn_prefix.$warning;  
  }  
     }      }
     &print_reply($r,$response,$$tasktitleref{$action});      &print_reply($r,$response,$$tasktitleref{$action});
     return;      return;
Line 1476  sub print_notify_response { Line 1477  sub print_notify_response {
     my %settings = &Apache::lonnet::get('environment',['internal.notifylist','internal.coursecode'],$dom,$crs);      my %settings = &Apache::lonnet::get('environment',['internal.notifylist','internal.coursecode'],$dom,$crs);
     my $notifylist = $settings{'internal.notifylist'};      my $notifylist = $settings{'internal.notifylist'};
     my $coursecode = $settings{'internal.coursecode'};      my $coursecode = $settings{'internal.coursecode'};
     my @currpeople = ();      my @currpeople = split(/,/,$notifylist);
     my $notify = 0;      my $notify = 0;
     my @people = ();      my @people = ();
     my $peoplestr = "";      my $peoplestr = "";
     my $response = "";      my $response = "";
     my $noprocess = 0;      my $noprocess = 0;
   
     if ($notifylist =~ m/,/) {  
  @currpeople = split/,/,$notifylist;  
     } else {  
  $currpeople[0] = $notifylist;  
     }  
     my $currcount = 0;      my $currcount = 0;
     foreach  (@currpeople) {      foreach  (@currpeople) {
  unless ($_ eq '') { $currcount ++; }    unless ($_ eq '') { $currcount ++; } 
     }      }
   
     if ( exists($ENV{'form.notify'}) ) {      if ( exists($env{'form.notify'}) ) {
  $notify=$ENV{'form.notify'};   $notify=$env{'form.notify'};
     }      }
     if ( exists($ENV{'form.notifyshow'}) ) {      if ( exists($env{'form.notifyshow'}) ) {
  my $notifyshow = $ENV{'form.notifyshow'};   my $notifyshow = $env{'form.notifyshow'};
  for (my $i=0; $i<$notifyshow; $i++) {   for (my $i=0; $i<$notifyshow; $i++) {
     if ( exists($ENV{"form.note_$i"}) ) {      if ( exists($env{"form.note_$i"}) ) {
  if ( exists($ENV{"form.notifyname_$i"}) ) {   if ( exists($env{"form.notifyname_$i"}) ) {
     unless ( $ENV{"form.notifyname_$i"} eq '' ) {      unless ( $env{"form.notifyname_$i"} eq '' ) {
  push @people, $ENV{"form.notifyname_$i"};   push @people, $env{"form.notifyname_$i"};
     }      }
  }   }
     }      }
Line 1562  sub print_crosslistings_menu () { Line 1558  sub print_crosslistings_menu () {
     my $xliststr = '';      my $xliststr = '';
     my $response = '';      my $response = '';
     my $coursecode = $settings{'internal.coursecode'};      my $coursecode = $settings{'internal.coursecode'};
     if ($settings{'internal.crosslistings'} =~ m/,/) {      if ($settings{'internal.crosslistings'} ne '') {
  @currxlists = split/,/,$settings{'internal.crosslistings'};   @currxlists = split(/,/,$settings{'internal.crosslistings'});
     } elsif ($settings{'internal.crosslistings'} ne '') {  
  $currxlists[0] = $settings{'internal.crosslistings'};  
     }      }
   
     if (@currxlists > 0) {      if (@currxlists > 0) {
  for (my $i=0; $i<@currxlists; $i++) {   for (my $i=0; $i<@currxlists; $i++) {
     my $xlist = "cross_".$i;      my $xlist = "cross_".$i;
     my $gp = "gp_".$i;      my $gp = "gp_".$i;
     if ( exists($ENV{"form.$xlist"}) ) {      if ( exists($env{"form.$xlist"}) ) {
  my $xlistentry = '';   my $xlistentry = '';
  if ($currxlists[$i] =~ m/^([^:]+)/) {   if ($currxlists[$i] =~ m/^([^:]+)/) {
     $xlistentry = $1.':';      $xlistentry = $1.':';
  }   }
  if ( exists($ENV{"form.$gp"}) ) {   if ( exists($env{"form.$gp"}) ) {
     $xlistentry .= $ENV{"form.$gp"};      $xlistentry .= $env{"form.$gp"};
  }   }
  push @xlists,$xlistentry;   push @xlists,$xlistentry;
  $crosscount ++;   $crosscount ++;
Line 1588  sub print_crosslistings_menu () { Line 1582  sub print_crosslistings_menu () {
  }   }
     }      }
   
     if ($crosscount > 1) {      $xliststr = join(",",@xlists);
  $xliststr = join(",",@xlists);  
     } else {  
  $xliststr = $xlists[0];  
     }  
     my %cenv = ('internal.crosslistings' => $xliststr);      my %cenv = ('internal.crosslistings' => $xliststr);
     my $reply = &Apache::lonnet::put('environment',\%cenv,$dom,$crs);      my $reply = &Apache::lonnet::put('environment',\%cenv,$dom,$crs);
     if ($reply !~ /^ok$/) {      if ($reply !~ /^ok$/) {
Line 1610  sub print_crosslistings_menu () { Line 1601  sub print_crosslistings_menu () {
     $response .= "</ul><br/>\n";      $response .= "</ul><br/>\n";
  }   }
     }      }
     if ( exists($ENV{'form.numcross'}) ) {      if ( exists($env{'form.numcross'}) ) {
  my $numcross = $ENV{'form.numcross'};   my $numcross = $env{'form.numcross'};
  if ($numcross > 0) {   if ($numcross > 0) {
     my @bgcolors=("#eeeeee","#cccccc");      my @bgcolors=("#eeeeee","#cccccc");
     $response .= qq(You indicated that you wish to add an additional $numcross crosslisting(s).  For each new crosslisting enter the insititutional course section code (e.g., fs03zol101001, for section 001 of zol101 for fs03 semester), and the LON-CAPA section/group ID you wish to assign to students who will be enrolled in your LON-CAPA class as a result of their registration in the crosslisted course section. The LON-CAPA section/group ID can be left blank, if you do not wish to tie a section/group ID to this crosslisting.  The institutional course section code should only contain letters and/or numbers, and must be consistent with the scheme adopted by your Domain Coordinator to map course codes (and section numbers) to your institution\'s student information system.<br/><br/>      $response .= qq(You indicated that you wish to add an additional $numcross crosslisting(s).  For each new crosslisting enter the insititutional course section code (e.g., fs03zol101001, for section 001 of zol101 for fs03 semester), and the LON-CAPA section/group ID you wish to assign to students who will be enrolled in your LON-CAPA class as a result of their registration in the crosslisted course section. The LON-CAPA section/group ID can be left blank, if you do not wish to tie a section/group ID to this crosslisting.  The institutional course section code should only contain letters and/or numbers, and must be consistent with the scheme adopted by your Domain Coordinator to map course codes (and section numbers) to your institution\'s student information system.<br/><br/>
Line 1670  sub print_crosslistings_response () { Line 1661  sub print_crosslistings_response () {
     my $warning = '';      my $warning = '';
     my $warn_prefix = '';      my $warn_prefix = '';
   
     if ($xliststr =~ m/,/) {      if ($xliststr ne '') {
  @allxlists = split/,/,$xliststr;   @allxlists = split(/,/,$xliststr);
     } else {  
  unless ($xliststr eq '') { $allxlists[0] = $xliststr; }  
     }      }
   
     if ( exists($ENV{'form.numcross'}) ) {      if ( exists($env{'form.numcross'}) ) {
  $numcross = $ENV{'form.numcross'};   $numcross = $env{'form.numcross'};
     }      }
   
     if ($numcross > 0) {      if ($numcross > 0) {
  for (my $i=0; $i<$numcross; $i++) {   for (my $i=0; $i<$numcross; $i++) {
     my $xl = "newcross_".$i;      my $xl = "newcross_".$i;
     my $gp = "newgroupid_".$i;      my $gp = "newgroupid_".$i;
     if ( exists($ENV{"form.$xl"}) ) {      if ( exists($env{"form.$xl"}) ) {
  my $coursecheck = '';   my $coursecheck = '';
  $coursecheck = &Apache::lonnet::auto_validate_courseID($crs,$dom,$ENV{"form.$xl"});   $coursecheck = &Apache::lonnet::auto_validate_courseID($crs,$dom,$env{"form.$xl"});
  if ($coursecheck eq 'ok') {   if ($coursecheck eq 'ok') {
     my $addcheck = '';      my $addcheck = '';
     $addcheck = &Apache::lonnet::auto_new_course($crs,$dom,$ENV{"form.$xl"},$owner);      $addcheck = &Apache::lonnet::auto_new_course($crs,$dom,$env{"form.$xl"},$owner);
     if ($addcheck eq 'ok') {      if ($addcheck eq 'ok') {
  push @xlists,$ENV{"form.$xl"}.":".$ENV{"form.$gp"};   push @xlists,$env{"form.$xl"}.":".$env{"form.$gp"};
     } else {      } else {
  push @badowner,$ENV{"form.$xl"}.":".$ENV{"form.$gp"};   push @badowner,$env{"form.$xl"}.":".$env{"form.$gp"};
     }      }
  } else {   } else {
     push @badxlists, $ENV{"form.$xl"}.":".$ENV{"form.$gp"}.":".$coursecheck;      push @badxlists, $env{"form.$xl"}.":".$env{"form.$gp"}.":".$coursecheck;
  }   }
     }      }
  }   }
Line 1705  sub print_crosslistings_response () { Line 1694  sub print_crosslistings_response () {
           
     if (@xlists > 0 ) {      if (@xlists > 0 ) {
  unless ($xliststr eq '') { $xliststr .= ","; }   unless ($xliststr eq '') { $xliststr .= ","; }
  if (@xlists > 1) {   $xliststr .= join(",",@xlists);
     $xliststr .= join(",",@xlists);  
  } else {  
     $xliststr .= $xlists[0];  
  }  
  my %cenv = ('internal.crosslistings' => $xliststr);   my %cenv = ('internal.crosslistings' => $xliststr);
  my $reply = &Apache::lonnet::put('environment',\%cenv,$dom,$crs);   my $reply = &Apache::lonnet::put('environment',\%cenv,$dom,$crs);
  if ($reply !~ /^ok$/) {   if ($reply !~ /^ok$/) {
Line 1724  sub print_crosslistings_response () { Line 1710  sub print_crosslistings_response () {
  }   }
     } else {      } else {
  if ($xliststr =~ m/:/) {   if ($xliststr =~ m/:/) {
     my @oldxlists = ();      my @oldxlists = (split/,/,$xliststr);
     if ($xliststr =~ m/,/) {  
  @oldxlists = split/,/,$xliststr;  
     } else {  
  $oldxlists[0] = $xliststr;  
     }  
     $response .= "Although no new crosslistings were added, the courses listed below continue to be crosslisted with your LON-CAPA course.<br/><ul>\n";      $response .= "Although no new crosslistings were added, the courses listed below continue to be crosslisted with your LON-CAPA course.<br/><ul>\n";
     foreach (@oldxlists) {      foreach (@oldxlists) {
  my ($xlist,$gp) = split/:/,$_;   my ($xlist,$gp) = split/:/,$_;
Line 1784  sub print_sections_menu () { Line 1765  sub print_sections_menu () {
     my $warn_prefix = "";      my $warn_prefix = "";
     my $coursecode = $settings{'internal.coursecode'};      my $coursecode = $settings{'internal.coursecode'};
     my $owner = $settings{'internal.courseowner'};      my $owner = $settings{'internal.courseowner'};
     if ($settings{'internal.sectionnums'} =~ m/,/) {      if ($settings{'internal.sectionnums'} ne '') {
  @currsections = split/,/,$settings{'internal.sectionnums'};   @currsections = split(/,/,$settings{'internal.sectionnums'});
     } elsif ($settings{'internal.sectionnums'} ne '') {  
  $currsections[0] = $settings{'internal.sectionnums'};  
     }      }
           
     if ( exists($ENV{'form.secshow'}) ) {      if ( exists($env{'form.secshow'}) ) {
  for (my $i=0; $i<$ENV{'form.secshow'}; $i++) {   for (my $i=0; $i<$env{'form.secshow'}; $i++) {
     my $gp = "loncapasec_".$i;      my $gp = "loncapasec_".$i;
     my $secnum = "secnum_".$i;      my $secnum = "secnum_".$i;
     my $sec = "sec_".$i;      my $sec = "sec_".$i;
     if ( exists( $ENV{"form.$sec"} ) ) {      if ( exists( $env{"form.$sec"} ) ) {
  my $secentry;   my $secentry;
  if ( exists( $ENV{"form.$secnum"} ) ) {    if ( exists( $env{"form.$secnum"} ) ) { 
     $secentry = $ENV{"form.$secnum"}.':';      $secentry = $env{"form.$secnum"}.':';
  }   }
  if ( exists( $ENV{"form.$gp"} ) ) {   if ( exists( $env{"form.$gp"} ) ) {
     $secentry .= $ENV{"form.$gp"};      $secentry .= $env{"form.$gp"};
  }   }
  if ( grep/^$ENV{"form.$secnum"}:/,@currsections) {   if ( grep/^$env{"form.$secnum"}:/,@currsections) {
     push @sections, $secentry;      push @sections, $secentry;
     $seccount ++;      $seccount ++;
  } else {   } else {
     my $newsec = $coursecode.$ENV{"form.$secnum"};      my $newsec = $coursecode.$env{"form.$secnum"};
     my $coursecheck = &Apache::lonnet::auto_validate_courseID($crs,$dom,$newsec);      my $coursecheck = &Apache::lonnet::auto_validate_courseID($crs,$dom,$newsec);
     if ($coursecheck eq 'ok') {      if ($coursecheck eq 'ok') {
  my $addcheck = &Apache::lonnet::auto_new_course($crs,$dom,$newsec,$owner);   my $addcheck = &Apache::lonnet::auto_new_course($crs,$dom,$newsec,$owner);
  if ($addcheck eq 'ok') {   if ($addcheck eq 'ok') {
     push @sections,$ENV{"form.$secnum"}.":".$ENV{"form.$gp"};      push @sections,$env{"form.$secnum"}.":".$env{"form.$gp"};
     $seccount ++;      $seccount ++;
     $addcount ++;      $addcount ++;
  } else {   } else {
     push @badowner,$ENV{"form.$secnum"}.":".$ENV{"form.$gp"};      push @badowner,$env{"form.$secnum"}.":".$env{"form.$gp"};
  }   }
     } else {      } else {
  push @badsections, $ENV{"form.$secnum"}.":".$ENV{"form.$gp"}.":".$coursecheck;   push @badsections, $env{"form.$secnum"}.":".$env{"form.$gp"}.":".$coursecheck;
     }      }
  }   }
     }      }
Line 1838  sub print_sections_menu () { Line 1817  sub print_sections_menu () {
  for (my $i=0; $i<@currsections; $i++) {   for (my $i=0; $i<@currsections; $i++) {
     my $sec = "sec_".$i;      my $sec = "sec_".$i;
     my $gp = "secgp_".$i;      my $gp = "secgp_".$i;
     if ( exists($ENV{"form.$sec"}) ) {      if ( exists($env{"form.$sec"}) ) {
  my $secentry = '';   my $secentry = '';
  if ($currsections[$i] =~ m/^(\w+:)/ ) {   if ($currsections[$i] =~ m/^(\w+:)/ ) {
     $secentry = $1;      $secentry = $1;
  }   }
  if ( exists($ENV{"form.$gp"}) ) {   if ( exists($env{"form.$gp"}) ) {
     $secentry .= $ENV{"form.$gp"};      $secentry .= $env{"form.$gp"};
  }   }
  push @sections,$secentry;   push @sections,$secentry;
  $seccount ++;   $seccount ++;
Line 1854  sub print_sections_menu () { Line 1833  sub print_sections_menu () {
  }   }
     }      }
           
     if ($seccount > 1) {      $secstr = join(",",@sections);
  $secstr = join(",",@sections);  
     } else {  
  $secstr = $sections[0];  
     }  
     my %cenv = ('internal.sectionnums' => $secstr);      my %cenv = ('internal.sectionnums' => $secstr);
     my $reply = &Apache::lonnet::put('environment',\%cenv,$dom,$crs);      my $reply = &Apache::lonnet::put('environment',\%cenv,$dom,$crs);
     if ($reply !~ /^ok$/) {      if ($reply !~ /^ok$/) {
Line 1907  sections which contribute to enrollment Line 1883  sections which contribute to enrollment
  }   }
     }      }
           
     if ( exists($ENV{'form.numsec'}) ) {      if ( exists($env{'form.numsec'}) ) {
  my $numsec = $ENV{'form.numsec'};   my $numsec = $env{'form.numsec'};
  if ($numsec > 0) {   if ($numsec > 0) {
     my @bgcolors=("#eeeeee","#cccccc");      my @bgcolors=("#eeeeee","#cccccc");
     $response .= qq(      $response .= qq(
Line 1968  sub print_sections_response () { Line 1944  sub print_sections_response () {
     my $putreply = '';      my $putreply = '';
     my $warning = '';      my $warning = '';
     my $warn_prefix = '';      my $warn_prefix = '';
     if ($secstr =~ m/,/) {      if ($secstr ne '') {
  @allsections = split/,/,$secstr;   @allsections = split(/,/,$secstr);
     } else {  
  unless ($secstr eq '') { $allsections[0] = $secstr; }  
     }      }
           
     if ( exists($ENV{'form.numsec'}) ) {      if ( exists($env{'form.numsec'}) ) {
  $numsec = $ENV{'form.numsec'};   $numsec = $env{'form.numsec'};
     }      }
           
     if ($numsec > 0) {      if ($numsec > 0) {
  for (my $i=0; $i<$numsec; $i++) {   for (my $i=0; $i<$numsec; $i++) {
     my $sec = "newsec_".$i;      my $sec = "newsec_".$i;
     my $gp = "newsecgp_".$i;      my $gp = "newsecgp_".$i;
     if ( exists($ENV{"form.$sec"}) ) {      if ( exists($env{"form.$sec"}) ) {
  unless ( (grep/^$ENV{"form.$sec"}:/,@allsections) || (grep/^$ENV{"form.$sec"}:/,@sections) ) {   unless ( (grep/^$env{"form.$sec"}:/,@allsections) || (grep/^$env{"form.$sec"}:/,@sections) ) {
     my $newsec = $coursecode.$ENV{"form.$sec"};      my $newsec = $coursecode.$env{"form.$sec"};
     my $coursecheck = &Apache::lonnet::auto_validate_courseID($crs,$dom,$newsec);      my $coursecheck = &Apache::lonnet::auto_validate_courseID($crs,$dom,$newsec);
     if ($coursecheck eq 'ok') {      if ($coursecheck eq 'ok') {
  my $addcheck = &Apache::lonnet::auto_new_course($crs,$dom,$newsec,$owner);   my $addcheck = &Apache::lonnet::auto_new_course($crs,$dom,$newsec,$owner);
  if ($addcheck eq 'ok') {   if ($addcheck eq 'ok') {
     push @sections,$ENV{"form.$sec"}.":".$ENV{"form.$gp"};      push @sections,$env{"form.$sec"}.":".$env{"form.$gp"};
  } else {   } else {
     push @badowner,$ENV{"form.$sec"}.":".$ENV{"form.$gp"};      push @badowner,$env{"form.$sec"}.":".$env{"form.$gp"};
  }   }
     } else {      } else {
  push @badsections, $ENV{"form.$sec"}.":".$ENV{"form.$gp"}.":".$coursecheck;   push @badsections, $env{"form.$sec"}.":".$env{"form.$gp"}.":".$coursecheck;
     }      }
  }   }
     }      }
Line 2004  sub print_sections_response () { Line 1978  sub print_sections_response () {
           
     if (@sections > 0 ) {      if (@sections > 0 ) {
  unless ($secstr eq '') { $secstr .= ","; }    unless ($secstr eq '') { $secstr .= ","; } 
  if (@sections > 1) {   $secstr .= join(",",@sections);
     $secstr .= join(",",@sections);  
  } else {  
     $secstr .= $sections[0];  
  }  
  my %cenv = ('internal.sectionnums' => $secstr);   my %cenv = ('internal.sectionnums' => $secstr);
  $putreply = &Apache::lonnet::put('environment',\%cenv,$dom,$crs);   $putreply = &Apache::lonnet::put('environment',\%cenv,$dom,$crs);
  if ($putreply !~ /^ok$/) {   if ($putreply !~ /^ok$/) {
Line 2060  sub print_photos_response () { Line 2030  sub print_photos_response () {
     my %settings = &Apache::lonnet::get('environment',['internal.showphotos'],$dom,$crs);      my %settings = &Apache::lonnet::get('environment',['internal.showphotos'],$dom,$crs);
     my $currphotos = $settings{'internal.showphotos'};      my $currphotos = $settings{'internal.showphotos'};
     my $showphotos = '';      my $showphotos = '';
     if ( exists($ENV{'form.showphotos'}) ) {      if ( exists($env{'form.showphotos'}) ) {
  $showphotos=$ENV{'form.showphotos'};   $showphotos=$env{'form.showphotos'};
     }      }
           
     my $response = "";      my $response = "";
Line 2106  sub print_update_result () { Line 2076  sub print_update_result () {
     my $authtype = $settings{'internal.authtype'};      my $authtype = $settings{'internal.authtype'};
     my $autharg = $settings{'internal.autharg'};      my $autharg = $settings{'internal.autharg'};
     my ($startaccess,$endaccess) = &get_dates_from_form();      my ($startaccess,$endaccess) = &get_dates_from_form();
           if ( exists($env{'form.updateadds'}) ) {
     if ( exists($ENV{'form.updateadds'}) ) {          $updateadds = $env{'form.updateadds'};
  $updateadds = $ENV{'form.updateadds'};  
     }      }
     if ( exists($ENV{'form.updatedrops'}) ) {      if ( exists($env{'form.updatedrops'}) ) {
  $updatedrops = $ENV{'form.updatedrops'};          $updatedrops = $env{'form.updatedrops'};
     }      }
     if (!$updateadds && !$updatedrops) {      if (($startaccess eq '') || ($endaccess eq '')) {
           $response = "There was a problem processing your requested roster update because start and and access dates could not be determined. No changes have been made to the class roster.<br />"; 
       } elsif ($updateadds && (($endaccess > 0) && ($endaccess <= $startaccess))) {
           $response = 'The start access date/time is the same or later than the end access date/time. As this means that new roles will never be active, your requested roster update has not been carried out, and the roster remains unchanged. Please <a href="javascript:history.go(-1)">go back</a> to the previous page to try your changes again.'."\n";
       } elsif (!$updateadds && !$updatedrops) {
  $response = "An update of the class roster has not been carried out because you indicated that you wanted to neither add new students, nor expire dropped students based on a comparison between the institutional class lists for the course sections and crosslisted courses that contribure enrollment to this LON-CAPA course.";   $response = "An update of the class roster has not been carried out because you indicated that you wanted to neither add new students, nor expire dropped students based on a comparison between the institutional class lists for the course sections and crosslisted courses that contribure enrollment to this LON-CAPA course.";
     } elsif ($coursecode eq '') {      } elsif ($coursecode eq '') {
  $response = "There was a problem retrieving the course code for this LON-CAPA course.  An update of the class roster has not been carried out, and enrollment remains unchanged";   $response = "There was a problem retrieving the course code for this LON-CAPA course.  An update of the class roster has not been carried out, and enrollment remains unchanged";
Line 2122  sub print_update_result () { Line 2095  sub print_update_result () {
  my @currsections = ();   my @currsections = ();
  my @currxlists = ();   my @currxlists = ();
   
  if ($settings{'internal.sectionnums'} =~ m/,/) {   if ($settings{'internal.sectionnums'} ne '') {
     @currsections = split/,/,$settings{'internal.sectionnums'};      @currsections = split(/,/,$settings{'internal.sectionnums'});
  } elsif ($settings{'internal.sectionnums'} ne '') {  
     $currsections[0] = $settings{'internal.sectionnums'};  
  }   }
   
  if ($settings{'internal.crosslistings'} =~ m/,/) {   if ($settings{'internal.crosslistings'} ne '') {
     @currxlists = split/,/,$settings{'internal.crosslistings'};      @currxlists = split(/,/,$settings{'internal.crosslistings'});
  } elsif ($settings{'internal.crosslistings'} ne '') {  
     $currxlists[0] = $settings{'internal.crosslistings'};  
  }   }
   
  if (@currxlists > 0) {   if (@currxlists > 0) {
Line 2161  sub print_update_result () { Line 2130  sub print_update_result () {
  if (@allcourses > 0) {   if (@allcourses > 0) {
     @{$affiliates{$crs}} = @allcourses;      @{$affiliates{$crs}} = @allcourses;
     my $outcome = &Apache::lonnet::fetch_enrollment_query('updatenow',\%affiliates,\%reply,$dom,$crs);      my $outcome = &Apache::lonnet::fetch_enrollment_query('updatenow',\%affiliates,\%reply,$dom,$crs);
               unless ($outcome eq 'ok') {
                   &Apache::lonnet::logthis("lonpopulate:update roster".
                                            "failed to retrieve classlist".
                                    " data for ".$crs."\@".$dom." by ".
                                    $env{'user.name'}." \@ ".$env{'user.domain'}.
                                    ": ".$outcome);
               }
     if ($reply{$crs} > 0) {      if ($reply{$crs} > 0) {
  ($changecount,$response) = &LONCAPA::Enrollment::update_LC($dom,$crs,$updateadds,$updatedrops,$startaccess,$endaccess,$authtype,$autharg,\@allcourses,\%LC_code,\$logmsg,\$newusermsg,"updatenow");   ($changecount,$response) = &LONCAPA::Enrollment::update_LC($dom,$crs,$updateadds,$updatedrops,$startaccess,$endaccess,$authtype,$autharg,\@allcourses,\%LC_code,\$logmsg,\$newusermsg,"updatenow");
     } else {      } else {
Line 2177  sub print_update_result () { Line 2153  sub print_update_result () {
     }      }
     unless ($newusermsg eq '') {      unless ($newusermsg eq '') {
  $newusermsg = substr( $newusermsg,0,rindex($newusermsg,'<li>') );   $newusermsg = substr( $newusermsg,0,rindex($newusermsg,'<li>') );
  $newusermsg = "<br/><br/>The following new system user(s) who was/were created will be using internal authentication with an initial randomly generated password. A valid e-mail address was not available for this/these user(s) so LON-CAPA account credentials could not be sent via e-mail.<br/><ul><li>".$newusermsg."</ul><br/>";   $newusermsg = "<br/><br/>The following new system user(s) who was/were created will be using local or internal authentication with an initial randomly generated password. A valid e-mail address was not available for this/these user(s) so LON-CAPA account credentials could not be sent via e-mail.<br/><ul><li>".$newusermsg."</ul><br/>";
     }      }
     $response .= $logmsg.$newusermsg;      $response .= $logmsg.$newusermsg;
     &print_reply($r,$response,$$tasktitleref{$action});      &print_reply($r,$response,$$tasktitleref{$action});
Line 2200  sub print_viewclass_response { Line 2176  sub print_viewclass_response {
     my %otherdom = ();      my %otherdom = ();
     my %lockchg = ();      my %lockchg = ();
     my %nolockchg = ();      my %nolockchg = ();
     my $classlist = &Apache::loncoursedata::get_classlist($cid,$dom,$crs);      my $classlist = &Apache::loncoursedata::get_classlist($dom,$crs);
     my $endidx = &Apache::loncoursedata::CL_END;      my $endidx = &Apache::loncoursedata::CL_END;
     my $startidx = &Apache::loncoursedata::CL_START;      my $startidx = &Apache::loncoursedata::CL_START;
     my $ididx=&Apache::loncoursedata::CL_ID;      my $ididx=&Apache::loncoursedata::CL_ID;
     my $secidx=&Apache::loncoursedata::CL_SECTION;      my $secidx=&Apache::loncoursedata::CL_SECTION;
     my $typeidx=&Apache::loncoursedata::CL_TYPE;      my $typeidx=&Apache::loncoursedata::CL_TYPE;
     my $lockedidx=&Apache::loncoursedata::CL_LOCKEDTYPE;      my $lockedidx=&Apache::loncoursedata::CL_LOCKEDTYPE;
     my @typechglist = ();  
     my @lockchglist = ();  
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['chgauto','chgmanual','lockchg','unlockchg']);      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['chgauto','chgmanual','lockchg','unlockchg']);
     if ($ENV{'form.chgauto'}) {      my @typechglist = (&Apache::loncommon::get_env_multiple('form.chgauto'),
         if (ref($ENV{'form.chgauto'}) eq 'ARRAY') {         &Apache::loncommon::get_env_multiple('form.chgmanual'));
             push @typechglist, @{$ENV{'form.chgauto'}};      my @lockchglist = (&Apache::loncommon::get_env_multiple('form.lockchg'),
         } else {         &Apache::loncommon::get_env_multiple('form.unlockchg'));
             push @typechglist, $ENV{'form.chgauto'};  
         }  
     }  
     if ($ENV{'form.chgmanual'}) {  
         if (ref($ENV{'form.chgmanual'}) eq 'ARRAY') {  
             push @typechglist, @{$ENV{'form.chgmanual'}};  
         } else {  
             push @typechglist, $ENV{'form.chgmanual'};  
         }  
     }  
     if ($ENV{'form.lockchg'}) {  
         if (ref($ENV{'form.lockchg'}) eq 'ARRAY') {  
             push @lockchglist, @{$ENV{'form.lockchg'}};  
         } else {  
             push @lockchglist, $ENV{'form.lockchg'};  
         }  
     }  
     if ($ENV{'form.unlockchg'}) {  
         if (ref($ENV{'form.unlockchg'}) eq 'ARRAY') {  
             push @lockchglist, @{$ENV{'form.unlockchg'}};  
         } else {  
             push @lockchglist, $ENV{'form.unlockchg'};  
         }  
     }  
     foreach my $student (sort @typechglist) {      foreach my $student (sort @typechglist) {
         my ($uname,$udom) = split/:/,$student;          my ($uname,$udom) = split/:/,$student;
         my $sdata    = $classlist->{$student};          my $sdata    = $classlist->{$student};
Line 2307  sub print_viewclass_response { Line 2258  sub print_viewclass_response {
     }      }
     if ($chgtotal > 0) {      if ($chgtotal > 0) {
         $response = "You requested a change in enrollment type for $chgtotal students.<br /><br />\n";          $response = "You requested a change in enrollment type for $chgtotal students.<br /><br />\n";
         $classlist = &Apache::loncoursedata::get_classlist($cid,$dom,$crs);          $classlist = &Apache::loncoursedata::get_classlist($dom,$crs);
         if ($chgok > 0) {          if ($chgok > 0) {
             $response .= "The following $chgok changes were successful:<br />";              $response .= "The following $chgok changes were successful:<br />";
             $response .= &enrolltype_result(\%chg,$classlist,$endidx,$startidx,$ididx,$secidx,$typeidx);              $response .= &enrolltype_result(\%chg,$classlist,$endidx,$startidx,$ididx,$secidx,$typeidx);
Line 2324  sub print_viewclass_response { Line 2275  sub print_viewclass_response {
     }      }
     if ($locktotal > 0) {      if ($locktotal > 0) {
         $response .= "You requested locking/unlocking for $locktotal manually enrolled students.<br /><br />\n";          $response .= "You requested locking/unlocking for $locktotal manually enrolled students.<br /><br />\n";
         $classlist = &Apache::loncoursedata::get_classlist($cid,$dom,$crs);          $classlist = &Apache::loncoursedata::get_classlist($dom,$crs);
         if ($lockok > 0) {          if ($lockok > 0) {
             $response .= "The following $lockok changes were successful:<br />";              $response .= "The following $lockok changes were successful:<br />";
             $response .= &enrolltype_result(\%lockchg,$classlist,$endidx,$startidx,$ididx,$secidx,$typeidx,$lockedidx);              $response .= &enrolltype_result(\%lockchg,$classlist,$endidx,$startidx,$ididx,$secidx,$typeidx,$lockedidx);
Line 2455  sub setup_date_selectors { Line 2406  sub setup_date_selectors {
     if (! defined($starttime)) {      if (! defined($starttime)) {
         $starttime = time;          $starttime = time;
         if ($action eq 'setdates') {          if ($action eq 'setdates') {
             if (exists($ENV{'course.'.$ENV{'request.course.id'}.              if (exists($env{'course.'.$env{'request.course.id'}.
                             '.default_enrollment_start_date'})) {                              '.default_enrollment_start_date'})) {
                 $starttime = $ENV{'course.'.$ENV{'request.course.id'}.                  $starttime = $env{'course.'.$env{'request.course.id'}.
                                   '.default_enrollment_start_date'};                                    '.default_enrollment_start_date'};
             }              }
         }          }
Line 2465  sub setup_date_selectors { Line 2416  sub setup_date_selectors {
     if (! defined($endtime)) {      if (! defined($endtime)) {
         $endtime = time+(6*30*24*60*60); # 6 months from now, approx          $endtime = time+(6*30*24*60*60); # 6 months from now, approx
         if ($action eq 'setdates') {          if ($action eq 'setdates') {
             if (exists($ENV{'course.'.$ENV{'request.course.id'}.              if (exists($env{'course.'.$env{'request.course.id'}.
                             '.default_enrollment_end_date'})) {                              '.default_enrollment_end_date'})) {
                 $endtime = $ENV{'course.'.$ENV{'request.course.id'}.                  $endtime = $env{'course.'.$env{'request.course.id'}.
                                 '.default_enrollment_end_date'};                                  '.default_enrollment_end_date'};
             }              }
         }          }
Line 2486  sub get_dates_from_form { Line 2437  sub get_dates_from_form {
     my $enddate;      my $enddate;
     $startdate = &Apache::lonhtmlcommon::get_date_from_form('startdate');      $startdate = &Apache::lonhtmlcommon::get_date_from_form('startdate');
     $enddate   = &Apache::lonhtmlcommon::get_date_from_form('enddate');      $enddate   = &Apache::lonhtmlcommon::get_date_from_form('enddate');
     if ( exists ($ENV{'form.no_end_date'}) ) {      if ( exists ($env{'form.no_end_date'}) ) {
         $enddate = 0;          $enddate = 0;
     }      }
     return ($startdate,$enddate);      return ($startdate,$enddate);
Line 2519  sub date_setting_table { Line 2470  sub date_setting_table {
 sub handler {  sub handler {
     my $r = shift;      my $r = shift;
     if ($r->header_only) {      if ($r->header_only) {
         $r->content_type('text/html');   &Apache::loncommon::content_type($r,'text/html');
         $r->send_http_header;          $r->send_http_header;
         return OK;          return OK;
     }      }
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['action','state']);      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['action','state']);
     #  Needs to be in a course      #  Needs to be in a course
     if (! (($ENV{'request.course.fn'}) &&  (&Apache::lonnet::allowed('cst',$ENV{'request.course.id'})))) {      if (! (($env{'request.course.fn'}) &&  (&Apache::lonnet::allowed('cst',$env{'request.course.id'})))) {
         # Not in a course, or not allowed to modify parms          # Not in a course, or not allowed to modify parms
         $ENV{'user.error.msg'}="/adm/populate:cst:0:0:Cannot drop or add students";          $env{'user.error.msg'}="/adm/populate:cst:0:0:Cannot drop or add students";
         return HTTP_NOT_ACCEPTABLE;           return HTTP_NOT_ACCEPTABLE; 
     }      }
     # Start page      # Start page
     $r->content_type('text/html');      &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;      $r->send_http_header;
   
     my @tasks = ("information","chgsettings","setdates","setaccess","notify","crosslist","sections","photos","updatenow","viewclass");      my @tasks = ("information","chgsettings","setdates","setaccess","notify","crosslist","sections","photos","updatenow","viewclass");
Line 2566  sub handler { Line 2517  sub handler {
     );      );
   
     my $realm = '';      my $realm = '';
     if ( exists($ENV{'request.course.id'}) ) {      if ( exists($env{'request.course.id'}) ) {
         $realm= $ENV{'course.'.$ENV{'request.course.id'}.'.description'};          $realm= $env{'course.'.$env{'request.course.id'}.'.description'};
     }      }
     unless ($realm) { $realm='&nbsp;'; }      unless ($realm) { $realm='&nbsp;'; }
     my $dom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'};      my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
     my $crs = $ENV{'course.'.$ENV{'request.course.id'}.'.num'};      my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
           
     #      #
     # Main switch on form.action and form.state, as appropriate      # Main switch on form.action and form.state, as appropriate
     #      #
   
     my $action = "information";      my $action = "information";
     if ( exists($ENV{'form.action'}) ) {      if ( exists($env{'form.action'}) ) {
         $action = $ENV{'form.action'};          $action = $env{'form.action'};
     }      }
     my $state = "choose";      my $state = "choose";
   
     if ( exists($ENV{'form.state'}) ) {      if ( exists($env{'form.state'}) ) {
         $state = $ENV{'form.state'};          $state = $env{'form.state'};
     }      }
   
     if ($action eq "information") {      if ($action eq "information") {
Line 2594  sub handler { Line 2545  sub handler {
             $r->print(&choose_header($action));              $r->print(&choose_header($action));
         } else {          } else {
             if ($action eq "crosslist") {              if ($action eq "crosslist") {
                 if ( exists($ENV{'form.numcross'}) ) {                  if ( exists($env{'form.numcross'}) ) {
                     if ( $ENV{'form.numcross'} > 0 ) {                      if ( $env{'form.numcross'} > 0 ) {
                         $r->print(&choose_header($action));                          $r->print(&choose_header($action));
                     } else {                      } else {
                         $r->print(&header());                          $r->print(&header());
Line 2604  sub handler { Line 2555  sub handler {
                     $r->print(&header());                      $r->print(&header());
                 }                  }
             } elsif ($action eq "sections") {              } elsif ($action eq "sections") {
                 if ( exists($ENV{'form.numsec'}) ) {                  if ( exists($env{'form.numsec'}) ) {
                     if ( $ENV{'form.numsec'} > 0 ) {                      if ( $env{'form.numsec'} > 0 ) {
                         $r->print(&choose_header($action));                          $r->print(&choose_header($action));
                     } else {                      } else {
                         $r->print(&header());                          $r->print(&header());

Removed from v.1.17  
changed lines
  Added in v.1.31


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