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.
@@ -320,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.
@@ -884,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').'
-
-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.').'
'.
+&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).'
");
+ 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("
);
}
@@ -1682,10 +1750,8 @@ 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'}) ) {
@@ -1717,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$/) {
@@ -1736,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.
\n";
foreach (@oldxlists) {
my ($xlist,$gp) = split/:/,$_;
@@ -1796,10 +1854,8 @@ sub print_sections_menu () {
my $warn_prefix = "";
my $coursecode = $settings{'internal.coursecode'};
my $owner = $settings{'internal.courseowner'};
- if ($settings{'internal.sectionnums'} =~ m/,/) {
- @currsections = split/,/,$settings{'internal.sectionnums'};
- } elsif ($settings{'internal.sectionnums'} ne '') {
- $currsections[0] = $settings{'internal.sectionnums'};
+ if ($settings{'internal.sectionnums'} ne '') {
+ @currsections = split(/,/,$settings{'internal.sectionnums'});
}
if ( exists($env{'form.secshow'}) ) {
@@ -1866,11 +1922,8 @@ sub print_sections_menu () {
}
}
- if ($seccount > 1) {
- $secstr = join(",",@sections);
- } else {
- $secstr = $sections[0];
- }
+ $secstr = join(",",@sections);
+
my %cenv = ('internal.sectionnums' => $secstr);
my $reply = &Apache::lonnet::put('environment',\%cenv,$dom,$crs);
if ($reply !~ /^ok$/) {
@@ -1949,13 +2002,13 @@ sections which contribute to enrollment
-
+
-
-
-
+
+
+
);
}
@@ -1980,10 +2033,8 @@ sub print_sections_response () {
my $putreply = '';
my $warning = '';
my $warn_prefix = '';
- if ($secstr =~ m/,/) {
- @allsections = split/,/,$secstr;
- } else {
- unless ($secstr eq '') { $allsections[0] = $secstr; }
+ if ($secstr ne '') {
+ @allsections = split(/,/,$secstr);
}
if ( exists($env{'form.numsec'}) ) {
@@ -2016,11 +2067,7 @@ sub print_sections_response () {
if (@sections > 0 ) {
unless ($secstr eq '') { $secstr .= ","; }
- if (@sections > 1) {
- $secstr .= join(",",@sections);
- } else {
- $secstr .= $sections[0];
- }
+ $secstr .= join(",",@sections);
my %cenv = ('internal.sectionnums' => $secstr);
$putreply = &Apache::lonnet::put('environment',\%cenv,$dom,$crs);
if ($putreply !~ /^ok$/) {
@@ -2067,39 +2114,276 @@ sub print_sections_response () {
return;
}
-sub print_photos_response () {
+sub photo_permission {
my ($r,$realm,$dom,$crs,$action,$tasktitleref) = @_;
- my %settings = &Apache::lonnet::get('environment',['internal.showphotos'],$dom,$crs);
- my $currphotos = $settings{'internal.showphotos'};
- my $showphotos = '';
- if ( exists($env{'form.showphotos'}) ) {
- $showphotos=$env{'form.showphotos'};
+ my %settings = &Apache::lonnet::get('environment',
+ ['internal.courseowner',
+ 'internal.photopermission',
+ 'internal.showphoto'],
+ $dom,$crs);
+ my ($showphotos,$response);
+ if (exists($env{'form.cancel_agreement'})) {
+ if ($env{'user.name'} eq $settings{'internal.courseowner'}) {
+ my %cenv = (
+ 'internal.photopermission' => 'no',
+ );
+ my $reply = &Apache::lonnet::put('environment',\%cenv,$dom,$crs);
+ if ($reply !~ /^ok$/) {
+ $response = &mt('There was a problem processing the record of your agreement to the conditions of use. Settings for this course have been left unchanged.').' '."\n";
+ &print_reply($r,$response,$$tasktitleref{$action});
+ } else {
+ &print_photos_response($r,$realm,$dom,$crs,$action,
+ $tasktitleref,$showphotos,'no',\%cenv);
+ }
+ return;
+ }
+ }
+ if (exists($env{'form.showphotos'})) {
+ $showphotos=$env{'form.showphotos'};
+ }
+ if ($showphotos) {
+ if ($env{'form.photopermission'}) {
+ my %cenv = (
+ 'internal.photopermission' => $env{'form.photopermission'},
+ );
+ my $reply = &Apache::lonnet::put('environment',\%cenv,$dom,$crs);
+ if ($reply !~ /^ok$/) {
+ $response = &mt('There was a problem processing the record of your agreement to the conditions of use. Settings for this course have been left unchanged.').' '."\n";
+ } else {
+ &print_photos_response($r,$realm,$dom,$crs,$action,
+ $tasktitleref,$showphotos,
+ $env{'form.photopermission'},\%cenv);
+ }
+ } else {
+ my ($result,$perm_reqd,$conditions) =
+ &Apache::lonnet::auto_photo_permission($crs,$dom);
+ my $permcheck;
+ if ($result eq 'ok') {
+ if ($perm_reqd eq 'yes') {
+ if ($settings{'internal.photopermission'} eq 'yes') {
+ &print_photos_response($r,$realm,$dom,$crs,$action,
+ $tasktitleref,$showphotos);
+ } else {
+ return(&print_photo_agreement($r,$realm,$dom,$crs,
+ $action,$tasktitleref,
+ $conditions,
+ $settings{'internal.courseowner'}));
+ }
+ } elsif ($perm_reqd eq 'no') {
+ &print_photos_response($r,$realm,$dom,$crs,$action,
+ $tasktitleref,$showphotos);
+ } else {
+ $permcheck = 'fail';
+ }
+ } else {
+ $permcheck = 'fail';
+ }
+ if ($permcheck eq 'fail') {
+ my $response = &mt('There was a problem processing your requested change, because it could not be determined whether course owner permission is required in order for a course coordinator to have access to student photos in this domain.').' '.&mt('The student photo import setting for this course has been left unchanged.').' ';
+ &print_reply($r,$response,$$tasktitleref{$action});
+ }
+ }
+ } else {
+ &print_photos_response($r,$realm,$dom,$crs,$action,$tasktitleref);
}
-
+ return;
+}
+
+sub print_photo_agreement {
+ my ($r,$realm,$dom,$crs,$action,$tasktitleref,$conditions,$courseowner)=@_;
+ my $response;
+ my $institution = $Apache::lonnet::domaindescription{$dom};
+ if ($env{'user.name'} eq $courseowner) {
+ $response = '
+
+
+';
+ } else {
+ my ($ownername,$owneremail) = &get_oenerinfo($dom,$courseowner);
+ $response = &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 (e-mail: [_1]) to visit the "Student photos" page in the Automated Enrollment Manager to indicate acceptance of these conditions of use',$owneremail);
+ }
+ &print_reply($r,$response,$$tasktitleref{$action});
+}
+
+sub print_photos_response {
+ my ($r,$realm,$dom,$crs,$action,$tasktitleref,$showphotos,$photopermission,
+ $permissionenv)=@_;
+ my %newenv;
+ if (defined($permissionenv)) {
+ foreach my $key (keys(%{$permissionenv})) {
+ if (exists($env{'request.course.id'})) {
+ $newenv{$env{'request.course.id'}.'.'.$key} =
+ $$permissionenv{$key};
+ }
+ }
+ }
+ my %settings = &Apache::lonnet::get('environment',['internal.showphoto'],
+ $dom,$crs);
+ my $currphotos = $settings{'internal.showphoto'};
my $response = "";
- my %cenv = ('internal.showphotos' => $showphotos);
+ if (defined($photopermission)) {
+ if ($photopermission eq 'yes') {
+ $response = &mt('Acceptance of photo use policy recorded.').' '."\n";
+ } else {
+ $response = &mt('Non-acceptance of photo use policy recorded.').' '."\n";
+ $showphotos = 0;
+ }
+ }
+ my %cenv = ('internal.showphoto' => $showphotos);
my $reply = &Apache::lonnet::put('environment',\%cenv,$dom,$crs);
if ($reply !~ /^ok$/) {
- $response = "There was a problem processing your requested change. The student photo import setting for this course has been left unchanged. ";
+ $response .= "There was a problem processing your requested change. The student photo retrieval setting for this course has been left unchanged. ";
} else {
if ($showphotos) {
if ($currphotos) {
- $response = "Retrieval of student photos is still enabled ";
+ $response .= "Retrieval of student photos is still enabled. ";
} else {
- $response = "Retrieval of student photos in now enabled ";
+ $response .= "Retrieval of student photos in now enabled. ";
+ my ($update,$commentary) =
+ &Apache::lonnet::auto_photochoice($crs,$dom);
+ if ($update) {
+ $response .= ' '.$commentary.'
+';
+ }
}
} else {
if ($currphotos) {
- $response = "Retrieval of student photos is now disabled ";
+ $response .= "Retrieval of student photos is now disabled. ";
} else {
- $response = "Retrieval of student photos is still disabled ";
+ $response .= "Retrieval of student photos is still disabled. ";
}
}
+ foreach my $key (keys(%cenv)) {
+ if (exists($env{'request.course.id'})) {
+ $newenv{'course.'.$env{'request.course.id'}.'.'.$key} =
+ $cenv{$key};
+ }
+ }
+ }
+ if (keys(%newenv) > 0) {
+ &Apache::lonnet::appenv(%newenv);
}
&print_reply($r,$response,$$tasktitleref{$action});
return;
}
+sub print_photoupdate_response {
+ my ($r,$realm,$dom,$crs,$action,$tasktitleref) = @_;
+ my $response;
+ my %changes;
+ my %lt = &LONCAPA::Enrollment::photo_response_types();
+ my %settings = &Apache::lonnet::get('environment',
+ ['internal.coursecode',
+ 'internal.sectionnums',
+ 'internal.crosslistings'],
+ $dom,$crs);
+ my @allcourses = ();
+ my %LC_code;
+ my %affiliates;
+ my $outcome;
+ &get_institutional_codes(\%settings,,\@allcourses,\%LC_code);
+ if (@allcourses > 0) {
+ @{$affiliates{$crs}} = @allcourses;
+ $outcome = &Apache::lonnet::auto_photoupdate(\%affiliates,$dom,$crs,\%changes);
+ unless ($outcome eq 'ok') {
+ &Apache::lonnet::logthis("lonpopulate::print_photoupdate_response".
+ "failed to update student photos".
+ " for ".$crs."\@".$dom." by ".
+ $env{'user.name'}." \@ ".$env{'user.domain'}.
+ ": ".$outcome);
+ }
+ if ($outcome eq 'ok') {
+ if (keys(%changes) > 0) {
+ $response = &mt('Update of photos for registered students resulted in the following ').':
+';
+ foreach my $type (sort(keys(%changes))) {
+ my @usernames = sort(split(/\&/,$changes{$type}));
+ my $count = @usernames;
+ $response .= ''.&mt('For [_1] students, photos ',
+ $count).$lt{$type}.'