--- loncom/interface/lonpopulate.pm 2005/02/17 08:50:20 1.22 +++ loncom/interface/lonpopulate.pm 2006/02/09 13:45:54 1.39 @@ -1,5 +1,5 @@ # automated enrollment configuration handler -# $Id: lonpopulate.pm,v 1.22 2005/02/17 08:50:20 albertel Exp $ +# $Id: lonpopulate.pm,v 1.39 2006/02/09 13:45:54 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -151,27 +151,8 @@ function process(calling,numauto,nummanu } |; if ($action eq 'viewclass') { + $scripttag .= &Apache::loncommon::check_uncheck_jscript(); $scripttag .= qq| -function checkAll(field) { - if (field.length > 0) { - for (i = 0; i < field.length; i++) { - field[i].checked = true ; - } - } else { - field.checked = true - } -} - -function uncheckAll(field) { - if (field.length > 0) { - for (i = 0; i < field.length; i++) { - field[i].checked = false ; - } - } else { - field.checked = false ; - } -} - function countChecked(field) { var count = 0; if (field.length > 0) { @@ -207,8 +188,8 @@ ENDHEAD sub print_mainbox { my ($r,$tasklongref,$realm,$reply) = @_; my $action = "information"; - if ( exists($ENV{'form.action'}) ) { - $action = $ENV{'form.action'}; + if ( exists($env{'form.action'}) ) { + $action = $env{'form.action'}; } my $page = ''; if ($action eq "information") { @@ -245,8 +226,8 @@ ENDTHIS sub print_navmenu { my ($r,$tasksref,$tasklongref) = @_; my $action = "information"; - if (exists($ENV{'form.action'}) ) { - $action = $ENV{'form.action'}; + if (exists($env{'form.action'}) ) { + $action = $env{'form.action'}; } $r->print(<  @@ -284,8 +265,8 @@ ENDONE sub print_main_frame { my ($r,$realm,$dom,$crs,$tasktitleref) = @_; my $action = "information"; - if (exists($ENV{'form.action'}) ) { - $action = $ENV{'form.action'}; + if (exists($env{'form.action'}) ) { + $action = $env{'form.action'}; } # Get course settings @@ -331,7 +312,7 @@ sub print_main_frame { Use "Section settings" to make changes to the choice of sections included for enrollment in your LON-CAPA course.   - Use "Student photos" to enable or disable automatic upload of student photos to your course. + Use "Student photos settings" to enable or disable automatic import of photos for registered students in your course.   @@ -339,6 +320,10 @@ sub print_main_frame {   + Use "Update student photos" to import your institution's most current digital photos for registered students in your course. + + +   Use "View students and change type" to display the current course roster, and (optionally) change enrollment type for selected students from 'auto' to 'manual' and vice versa. @@ -368,13 +353,13 @@ ENDONE ENDTWO if ($enrollvar{autoadds}) { $r->print(" -  Enable    -  Disable + + "); } else { $r->print(" -  Enable    -  Disable + + "); } $r->print(" @@ -385,12 +370,12 @@ ENDTWO Removals based on classlist changes:  "); if ($enrollvar{autodrops}) { $r->print(" -  Enable    -  Disable"); + + "); } else { $r->print(" -  Enable    -  Disable"); + + "); } $r->print(" @@ -404,12 +389,12 @@ Note: Any students added manually by cou - + - - + + "); } elsif ($action eq "setdates") { @@ -481,12 +466,12 @@ Note: Any students added manually by cou
- +
- - + + ENDTWO } elsif ($action eq "setaccess") { @@ -495,24 +480,19 @@ ENDTWO
- +
- - + + ENDTWO } elsif ($action eq "notify") { - my @notified = (); - if ($enrollvar{notifylist} =~ m/,/) { - @notified = split/,/,$enrollvar{notifylist}; - } else { - @notified = $enrollvar{notifylist}; - } my $notifycount = 0; + my @notified = split(/,/,$enrollvar{notifylist}); foreach (@notified) { - unless ($_ eq '') { $notifycount ++; } + unless ($_ eq '') { $notifycount ++; } } my $noteset = ''; if ($notifycount) { @@ -537,13 +517,13 @@ ENDTWO "); if ($notifycount) { $r->print(" -  Yes    -  No + + "); } else { $r->print(" -  Yes    -  No + + "); } $r->print(" @@ -559,8 +539,8 @@ ENDTWO my @roleinfo = split/:/,$_; if ($roleinfo[0] eq 'cc') { unless (grep/^$roleinfo[1]\@$roleinfo[2]/,@ccs) { - my $active_cc = &LONCAPA::Enrollment::check_user_status($roleinfo[2],$roleinfo[1],$dom,$crs,'cc'); - if ($active_cc eq 'ok') { + my $active_cc = &Apache::loncommon::check_user_status($roleinfo[2],$roleinfo[1],$dom,$crs,'cc'); + if ($active_cc eq 'active') { push @ccs, "$roleinfo[1]\@$roleinfo[2]"; $pname{"$roleinfo[1]\@$roleinfo[2]"} = &Apache::loncommon::plainname($roleinfo[1],$roleinfo[2]); if (grep/^$roleinfo[1]\@$roleinfo[2]$/,@notified) { @@ -584,10 +564,10 @@ ENDTWO } } } - my $viewer = $ENV{'user.name'}.'@'.$ENV{'user.domain'}; + my $viewer = $env{'user.name'}.'@'.$env{'user.domain'}; unless ( (grep/^$viewer$/,@ccs) || ($viewer eq '') ) { 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; } @@ -634,7 +614,7 @@ ENDTWO
- +
@@ -651,17 +631,15 @@ ENDTWO } $r->print(" - - - + + + "); } elsif ($action eq "crosslist") { - my @xlists = (); - if ($enrollvar{crosslistings} =~ m/,/) { - @xlists = split/,/,$enrollvar{crosslistings}; - } elsif ($enrollvar{crosslistings} ne '') { - $xlists[0] = $enrollvar{crosslistings}; + my @xlists; + if ($enrollvar{crosslistings} ne '') { + @xlists = split(/,/,$enrollvar{crosslistings}); } my $cross_str = @xlists; $r->print(" @@ -690,16 +668,16 @@ ENDTWO for (my $i=0; $i<@xlists; $i++) { my $xl = ' '; my $gp = ' '; - if ($xlists[$i] =~ /(\w+):?(.*)$/) { + if ($xlists[$i] =~ /^([^:]+):?(.*)$/) { $xl = $1; $gp = $2; } my $colflag = $i%2; $r->print(" - + $xl - + "); } @@ -731,25 +709,20 @@ ENDTWO
- +
- - + + "); } elsif ($action eq "sections") { my @sections = (); @sections = &Apache::lonnet::auto_get_sections($crs,$dom,$enrollvar{coursecode}); - my @storedsections = (); + my @storedsections = split(/,/,$enrollvar{sectionnums}); my @currsections = (); my %sec_id = (); - if ($enrollvar{sectionnums} =~ m/,/) { - @storedsections = split/,/,$enrollvar{sectionnums}; - } else { - $storedsections[0] = $enrollvar{sectionnums}; - } foreach (@storedsections) { if ($_ =~ m/^(\w+):(\w*)$/) { push @currsections, $1; @@ -797,7 +770,7 @@ your changes. if ($shrflag) { $r->print(""); } else { - $r->print(""); + $r->print(""); } } $r->print(" @@ -807,12 +780,12 @@ your changes. - + - - + + "); } else { @@ -844,9 +817,9 @@ your changes. my $colflag = $j%2; $r->print(" - + $currsections[$j] - + "); } @@ -877,12 +850,12 @@ your changes.
- +
- - + + "); } @@ -893,7 +866,7 @@ your changes.
$$tasktitleref{$action}
- Currently: Student photo import: $photosets[$enrollvar{showphotos}] + Currently: Student photo import: $photosets[$enrollvar{showphoto}]
@@ -903,40 +876,102 @@ your changes. Automatic import of student photos from institutional data repository:   "); - if ($enrollvar{showphotos}) { + if ($enrollvar{showphoto}) { $r->print(" -  Yes    -  No + + "); } else { $r->print(" -  Yes    -  No + + "); } - $r->print(" + $r->print(' + + + '); + my ($result,$perm_reqd)=&Apache::lonnet::auto_photo_permission($crs,$dom); + my $can_enable = 1; + my $institution = $Apache::lonnet::domaindescription{$dom}; + if ($result eq 'ok') { + if ($perm_reqd eq 'yes') { + if (!($enrollvar{'photopermission'} eq 'yes')) { + $can_enable = 0; + } else { + if ($env{'user.name'} eq $enrollvar{'courseowner'}) { + $r->print(' + + '. +&mt('Previously the owner of this course agreed to the conditions of use of digital student photos required by [_1].', $institution).'
'.&mt('As a result Course Coordinators can choose to automatically import student photos into this course.').'
+ '); + } + } + } + } else { + $r->print(' + + '. +&mt('There was a problem determining whether course owner permission is required in order for a course coordinator to have access to student photos in this domain.').' '.&mt('As a result you will not be able to configure access to student photos at this time').'

+ + + + '); + return; + } + if ($can_enable) { + $r->print(' - -Note: if you enable automatic import of student photos, your course will automatically have access to photos stored by your institution for all officially registered students, via a conduit established by your LON-CAPA domain coordinator. + '. +&mt('Note: if you enable automatic import of student photos, your course will automatically have access to photos stored by your institution for officially registered students, via a conduit established by your LON-CAPA domain coordinator.').' +'); + } else { + if ($env{'user.name'} eq $enrollvar{'courseowner'}) { + $r->print(' + + '. +&mt('[_1] requires a course owner to indicate acceptance of conditions of use of digital student photos before enabling automatic import into a course. If you choose to enable import of photos you will be prompted for your agreement on the next page.',$institution).' + + + '); + } else { + my ($ownername,$owneremail) = &get_ownerinfo($dom, + $enrollvar{'courseowner'}); + my $emailstr; + if ($owneremail) { + $emailstr = "(e-mail: $owneremail)"; + } + $r->print(' + + '. +&mt('The policies of your institution [_1] require that the course owner [_2] must indicate acceptance of the conditions of use of digital photos of registered students, before they may be made available for use in a course.',$institution,$ownername).'

'.&mt('Please direct the course owner [_1] to visit the "Student photos" page in the Automated Enrollment Manager to indicate acceptance of these conditions of use.',$emailstr).'

+ + + + '); + return; + } + } + $r->print('   - - + + - - + + - "); + '); } elsif ($action eq "updatenow") { $r->print("

@@ -950,14 +985,15 @@ Note: if you enable automatic import of Add any students currently included in institutional classlist(s) but not enrolled in your LON-CAPA course.
-  Yes  No  + + Expire students previously added by nightly enrollment process, but no longer listed in institutional classlist(s).
-  Yes  -  No 
+ +
@@ -975,7 +1011,7 @@ Note: Any students previously added manu - + @@ -983,6 +1019,29 @@ Note: Any students previously added manu
"); + } elsif ($action eq 'updatephotos') { + $r->print(" + + + + + +
$$tasktitleref{$action} +
"); + if ($enrollvar{'showphoto'}) { + my ($update,$commentary) = &Apache::lonnet::auto_photochoice($crs, + $dom); + $r->print('
'.$commentary.'

+
+ + + +
'); + } else { + $r->print('Update of photos is unavailable, as import of student photos is currently disabled.
Enable this first via: '.$$tasktitleref{'photos'}.''); + } + $r->print('
 
'); } elsif ($action eq 'viewclass') { $r->print("

@@ -1000,13 +1059,13 @@ Note: Any students previously added manu "); - if (! exists($ENV{'form.sortby'})) { - $ENV{'form.sortby'} = 'username'; + if (! exists($env{'form.sortby'})) { + $env{'form.sortby'} = 'username'; } - if ($ENV{'form.Status'} !~ /^(Any|Expired|Active)$/) { - $ENV{'form.Status'} = 'Active'; + if ($env{'form.Status'} !~ /^(Any|Expired|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 my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist(); if (! defined($classlist)) { @@ -1017,7 +1076,7 @@ Note: Any students previously added manu $r->print(''. "\n

\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(" @@ -1068,7 +1127,7 @@ END - + "); @@ -1246,11 +1305,11 @@ sub print_chgsettings_response { my $autoadds = ''; my $autodrops = ''; - if ( exists($ENV{'form.autoadds'}) ) { - $autoadds=$ENV{'form.autoadds'}; + if ( exists($env{'form.autoadds'}) ) { + $autoadds=$env{'form.autoadds'}; } - if ( exists($ENV{'form.autodrops'}) ) { - $autodrops=$ENV{'form.autodrops'}; + if ( exists($env{'form.autodrops'}) ) { + $autodrops=$env{'form.autodrops'}; } my $response = ""; @@ -1279,13 +1338,13 @@ sub print_chgsettings_response { } if ($autodrops) { if ($currdrops) { - $response .= "Nightly removals based on classlist changes still enabled
"; + $response .= "Nightly removals based on classlist changes still enabled
"; } else { $response .= "Nightly removals based on classlist changes now enabled
"; } } else { if ($currdrops) { - $response .= "Nightly removals based on classlist changes now disabled
"; + $response .= "Nightly removals based on classlist changes now disabled
"; } else { $response .= "Nightly removals based on classlist changes still disabled"; } @@ -1386,7 +1445,7 @@ sub print_setdates_response { $firstaccess = "a date prior to today"; } if (($nowstamp >= $autostart) && ($rosterupdated == 0)) { - $response .= qq|
Although you have now set the first enrollment date to $firstaccess, automatic enrollment will not 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 roster update page.
|; + $response .= qq|
Although you have now set the first enrollment date to $firstaccess, automatic enrollment will not 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 roster update page.
|; } } $warning = &warning_message($dom,$crs,$action); @@ -1486,7 +1545,7 @@ $showend.
"; $firstaccess = "a date prior to today"; } if (($nowstamp >= $startaccess) && ($accessgiven == 0)) { - $response .= qq|
Although you have now set the first access date to $firstaccess, automatic enrollment will not 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 roster update page.
|; + $response .= qq|
Although you have now set the first access date to $firstaccess, automatic enrollment will not 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 roster update page.
|; } } $warning = &warning_message($dom,$crs,$action); @@ -1507,33 +1566,28 @@ sub print_notify_response { my %settings = &Apache::lonnet::get('environment',['internal.notifylist','internal.coursecode'],$dom,$crs); my $notifylist = $settings{'internal.notifylist'}; my $coursecode = $settings{'internal.coursecode'}; - my @currpeople = (); + my @currpeople = split(/,/,$notifylist); my $notify = 0; my @people = (); my $peoplestr = ""; my $response = ""; my $noprocess = 0; - if ($notifylist =~ m/,/) { - @currpeople = split/,/,$notifylist; - } else { - $currpeople[0] = $notifylist; - } my $currcount = 0; foreach (@currpeople) { unless ($_ eq '') { $currcount ++; } } - if ( exists($ENV{'form.notify'}) ) { - $notify=$ENV{'form.notify'}; + if ( exists($env{'form.notify'}) ) { + $notify=$env{'form.notify'}; } - if ( exists($ENV{'form.notifyshow'}) ) { - my $notifyshow = $ENV{'form.notifyshow'}; + if ( exists($env{'form.notifyshow'}) ) { + my $notifyshow = $env{'form.notifyshow'}; for (my $i=0; $i<$notifyshow; $i++) { - if ( exists($ENV{"form.note_$i"}) ) { - if ( exists($ENV{"form.notifyname_$i"}) ) { - unless ( $ENV{"form.notifyname_$i"} eq '' ) { - push @people, $ENV{"form.notifyname_$i"}; + if ( exists($env{"form.note_$i"}) ) { + if ( exists($env{"form.notifyname_$i"}) ) { + unless ( $env{"form.notifyname_$i"} eq '' ) { + push @people, $env{"form.notifyname_$i"}; } } } @@ -1593,23 +1647,21 @@ sub print_crosslistings_menu () { my $xliststr = ''; my $response = ''; my $coursecode = $settings{'internal.coursecode'}; - if ($settings{'internal.crosslistings'} =~ m/,/) { - @currxlists = split/,/,$settings{'internal.crosslistings'}; - } elsif ($settings{'internal.crosslistings'} ne '') { - $currxlists[0] = $settings{'internal.crosslistings'}; + if ($settings{'internal.crosslistings'} ne '') { + @currxlists = split(/,/,$settings{'internal.crosslistings'}); } if (@currxlists > 0) { for (my $i=0; $i<@currxlists; $i++) { my $xlist = "cross_".$i; my $gp = "gp_".$i; - if ( exists($ENV{"form.$xlist"}) ) { + if ( exists($env{"form.$xlist"}) ) { my $xlistentry = ''; if ($currxlists[$i] =~ m/^([^:]+)/) { $xlistentry = $1.':'; } - if ( exists($ENV{"form.$gp"}) ) { - $xlistentry .= $ENV{"form.$gp"}; + if ( exists($env{"form.$gp"}) ) { + $xlistentry .= $env{"form.$gp"}; } push @xlists,$xlistentry; $crosscount ++; @@ -1619,11 +1671,8 @@ sub print_crosslistings_menu () { } } - if ($crosscount > 1) { - $xliststr = join(",",@xlists); - } else { - $xliststr = $xlists[0]; - } + $xliststr = join(",",@xlists); + my %cenv = ('internal.crosslistings' => $xliststr); my $reply = &Apache::lonnet::put('environment',\%cenv,$dom,$crs); if ($reply !~ /^ok$/) { @@ -1641,8 +1690,8 @@ sub print_crosslistings_menu () { $response .= "
\n"; } } - if ( exists($ENV{'form.numcross'}) ) { - my $numcross = $ENV{'form.numcross'}; + if ( exists($env{'form.numcross'}) ) { + my $numcross = $env{'form.numcross'}; if ($numcross > 0) { 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.

@@ -1670,13 +1719,13 @@ sub print_crosslistings_menu () { - + - - - + + +
); } @@ -1701,33 +1750,31 @@ sub print_crosslistings_response () { my $warning = ''; my $warn_prefix = ''; - if ($xliststr =~ m/,/) { - @allxlists = split/,/,$xliststr; - } else { - unless ($xliststr eq '') { $allxlists[0] = $xliststr; } + if ($xliststr ne '') { + @allxlists = split(/,/,$xliststr); } - if ( exists($ENV{'form.numcross'}) ) { - $numcross = $ENV{'form.numcross'}; + if ( exists($env{'form.numcross'}) ) { + $numcross = $env{'form.numcross'}; } if ($numcross > 0) { for (my $i=0; $i<$numcross; $i++) { my $xl = "newcross_".$i; my $gp = "newgroupid_".$i; - if ( exists($ENV{"form.$xl"}) ) { + if ( exists($env{"form.$xl"}) ) { 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') { 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') { - push @xlists,$ENV{"form.$xl"}.":".$ENV{"form.$gp"}; + push @xlists,$env{"form.$xl"}.":".$env{"form.$gp"}; } else { - push @badowner,$ENV{"form.$xl"}.":".$ENV{"form.$gp"}; + push @badowner,$env{"form.$xl"}.":".$env{"form.$gp"}; } } else { - push @badxlists, $ENV{"form.$xl"}.":".$ENV{"form.$gp"}.":".$coursecheck; + push @badxlists, $env{"form.$xl"}.":".$env{"form.$gp"}.":".$coursecheck; } } } @@ -1736,11 +1783,8 @@ sub print_crosslistings_response () { if (@xlists > 0 ) { unless ($xliststr eq '') { $xliststr .= ","; } - if (@xlists > 1) { - $xliststr .= join(",",@xlists); - } else { - $xliststr .= $xlists[0]; - } + $xliststr .= join(",",@xlists); + my %cenv = ('internal.crosslistings' => $xliststr); my $reply = &Apache::lonnet::put('environment',\%cenv,$dom,$crs); if ($reply !~ /^ok$/) { @@ -1755,12 +1799,7 @@ sub print_crosslistings_response () { } } else { if ($xliststr =~ m/:/) { - my @oldxlists = (); - if ($xliststr =~ m/,/) { - @oldxlists = split/,/,$xliststr; - } else { - $oldxlists[0] = $xliststr; - } + my @oldxlists = (split/,/,$xliststr); $response .= "Although no new crosslistings were added, the courses listed below continue to be crosslisted with your LON-CAPA course.