version 1.17, 2004/08/05 21:57:07
|
version 1.36, 2006/02/07 22:15:56
|
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"> </td> |
<td width="10" valign="top" bgcolor="#DDFFFF"> </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 314 sub print_main_frame {
|
Line 312 sub print_main_frame {
|
<td>Use <i>"Section settings"</i> to make changes to the choice of sections included for enrollment in your LON-CAPA course.</td> |
<td>Use <i>"Section settings"</i> to make changes to the choice of sections included for enrollment in your LON-CAPA course.</td> |
</tr> |
</tr> |
<td> </td> |
<td> </td> |
<td>Use <i>"Student photos"</i> to enable or disable automatic upload of student photos to your course.</td> |
<td>Use <i>"Student photos settings"</i> to enable or disable automatic import of photos for registered students in your course.</td> |
</tr> |
</tr> |
<tr> |
<tr> |
<td> </td> |
<td> </td> |
Line 322 sub print_main_frame {
|
Line 320 sub print_main_frame {
|
</tr> |
</tr> |
<tr> |
<tr> |
<td> </td> |
<td> </td> |
|
<td>Use <i>"Update student photos"</i> to import your institution's <b>most current</b> digital photos for registered students in your course.</td> |
|
</tr> |
|
<tr> |
|
<td> </td> |
<td>Use <i>"View students and change type"</i> to display the current course roster, and (optionally) change enrollment type for selected students from 'auto' to 'manual' and vice versa.</td> |
<td>Use <i>"View students and change type"</i> to display the current course roster, and (optionally) change enrollment type for selected students from 'auto' to 'manual' and vice versa.</td> |
</tr> |
</tr> |
<tr> |
<tr> |
Line 487 ENDTWO
|
Line 489 ENDTWO
|
</form> |
</form> |
ENDTWO |
ENDTWO |
} elsif ($action eq "notify") { |
} elsif ($action eq "notify") { |
my @notified = (); |
|
if ($enrollvar{notifylist} =~ m/,/) { |
|
@notified = split/,/,$enrollvar{notifylist}; |
|
} else { |
|
@notified = $enrollvar{notifylist}; |
|
} |
|
my $notifycount = 0; |
my $notifycount = 0; |
|
my @notified = split(/,/,$enrollvar{notifylist}); |
foreach (@notified) { |
foreach (@notified) { |
unless ($_ eq '') { $notifycount ++; } |
unless ($_ eq '') { $notifycount ++; } |
} |
} |
my $noteset = ''; |
my $noteset = ''; |
if ($notifycount) { |
if ($notifycount) { |
Line 542 ENDTWO
|
Line 539 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 564 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 637 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 668 ENDTWO
|
for (my $i=0; $i<@xlists; $i++) { |
for (my $i=0; $i<@xlists; $i++) { |
my $xl = ' '; |
my $xl = ' '; |
my $gp = ' '; |
my $gp = ' '; |
if ($xlists[$i] =~ /(\w+):?(.*)$/) { |
if ($xlists[$i] =~ /^([^:]+):?(.*)$/) { |
$xl = $1; |
$xl = $1; |
$gp = $2; |
$gp = $2; |
} |
} |
Line 725 ENDTWO
|
Line 720 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 897 your changes.</td>
|
Line 887 your changes.</td>
|
<input type=\"radio\" name=\"showphotos\" value=\"0\" checked=\"true\" /> No |
<input type=\"radio\" name=\"showphotos\" value=\"0\" checked=\"true\" /> No |
"); |
"); |
} |
} |
$r->print(" |
$r->print(' |
</td> |
</td> |
</tr> |
</tr> |
|
'); |
|
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(' |
|
<tr> |
|
<td>'. |
|
&mt('Previously the owner of this course agreed to the conditions of use of digital student photos required by [_1].', $institution).'<br />'.&mt('As a result Course Coordinators can choose to automatically import student photos into this course.').'<br /><nobr><label>'.&mt('[_1] owner acceptance of these conditions of use?','<b>Cancel</b>').' <input type="checkbox" name="cancel_agreement" value="1" /></label></nobr> |
|
</td> |
|
</tr> |
|
'); |
|
} |
|
} |
|
} |
|
} else { |
|
$r->print(' |
|
<tr> |
|
<td>'. |
|
&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').'<br /><br /><input type="button" name=mainmenu" value="Go back" onclick="javascript:history.go(-1);" /> |
|
</td> |
|
</tr> |
|
</form> |
|
'); |
|
return; |
|
} |
|
if ($can_enable) { |
|
$r->print(' |
<tr> |
<tr> |
<td> |
<td> |
<font color=\"#888888\"> |
<font color="#888888">'. |
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.').' |
</font> |
</font> |
</td> |
</td> |
</tr> |
</tr> |
|
'); |
|
} else { |
|
if ($env{'user.name'} eq $enrollvar{'courseowner'}) { |
|
$r->print(' |
|
<tr> |
|
<td>'. |
|
&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).' |
|
</td> |
|
</tr> |
|
'); |
|
} else { |
|
my ($ownername,$owneremail) = &get_ownerinfo($dom, |
|
$enrollvar{'courseowner'}); |
|
$r->print(' |
|
<tr> |
|
<td>'. |
|
&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).'<br /><br />'.&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).'<br /><br /><input type="button" name=mainmenu" value="Go back" onclick="javascript:history.go(-1);" /> |
|
</td> |
|
</tr> |
|
</form> |
|
'); |
|
return; |
|
} |
|
} |
|
$r->print(' |
<tr> |
<tr> |
</td> </td> |
</td> </td> |
</tr> |
</tr> |
<tr> |
<tr> |
<td align=\"right\"> |
<td align="right"> |
<input type=\"button\" name=\"showphotos\" value=\"Go\" onClick=\"process('photos')\"> |
<input type="button" name="showphotos" value="Go" onClick="process('."'photos'".')"> |
</td> |
</td> |
</tr> |
</tr> |
</table> |
</table> |
<input type=\"hidden\" name=\"action\" value=\"$action\"> |
<input type="hidden" name="action" value="'.$action.'"> |
<input type=\"hidden\" name=\"state\" value=\"process\"> |
<input type="hidden" name="state" value="process"> |
</form> |
</form> |
"); |
'); |
} elsif ($action eq "updatenow") { |
} elsif ($action eq "updatenow") { |
$r->print(" |
$r->print(" |
<form name=\"enter\" method=\"post\"><br/> |
<form name=\"enter\" method=\"post\"><br/> |
Line 966 Note: Any students previously added manu
|
Line 1014 Note: Any students previously added manu
|
<input type=\"hidden\" name=\"state\" value=\"process\" /> |
<input type=\"hidden\" name=\"state\" value=\"process\" /> |
</form> |
</form> |
"); |
"); |
|
} elsif ($action eq 'updatephotos') { |
|
$r->print(" |
|
<table width=\"100%\" border=\"0\" cellpadding=\"2\" cellspacing=\"2\"> |
|
<tr> |
|
<td align=\"left\"><b>$$tasktitleref{$action}</b> |
|
</td> |
|
</tr><tr><td>"); |
|
if ($enrollvar{'showphotos'}) { |
|
my ($update,$commentary) = &Apache::lonnet::auto_photochoice($crs, |
|
$dom); |
|
$r->print('<br />'.$commentary.'<br /><br /> |
|
<form name="photoupdate" method="post"> |
|
<input type ="button" name="retrieve" value="'.&mt('Update photo repository').'" |
|
onclick="javascript:document.photoupdate.submit()" /> |
|
<input type ="hidden" name="action" value="'.$action.'" /> |
|
<input type ="hidden" name="state" value="process" /> |
|
</form>'); |
|
} else { |
|
$r->print('Update of photos is unavailable, as import of student photos is currently disabled.<br />Enable this first via: <a href="/adm/populate?action=photos">'.$$tasktitleref{'photos'}.'</a>'); |
|
} |
|
$r->print('</td></tr> |
|
<tr><td> </td></tr> |
|
</table>'); |
} elsif ($action eq 'viewclass') { |
} elsif ($action eq 'viewclass') { |
$r->print(" |
$r->print(" |
<form name=\"studentform\" method=\"post\"><br/> |
<form name=\"studentform\" method=\"post\"><br/> |
Line 983 Note: Any students previously added manu
|
Line 1054 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 1071 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 1300 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 1374 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 1462 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 1561 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 1642 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 1666 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 1685 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 1745 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 1778 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 1794 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 1849 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 1901 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 1917 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 1967 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 2028 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 2062 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 2055 sub print_sections_response () {
|
Line 2109 sub print_sections_response () {
|
return; |
return; |
} |
} |
|
|
sub print_photos_response () { |
sub photo_permission { |
my ($r,$realm,$dom,$crs,$action,$tasktitleref) = @_; |
my ($r,$realm,$dom,$crs,$action,$tasktitleref) = @_; |
my %settings = &Apache::lonnet::get('environment',['internal.showphotos'],$dom,$crs); |
my %settings = &Apache::lonnet::get('environment', |
my $currphotos = $settings{'internal.showphotos'}; |
['internal.courseowner', |
my $showphotos = ''; |
'internal.photopermission', |
if ( exists($ENV{'form.showphotos'}) ) { |
'internal.showphotos'], |
$showphotos=$ENV{'form.showphotos'}; |
$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.').'<br/>'."\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.').'<br/>'."\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.').'<br/>'; |
|
&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 = ' |
|
<script type="text/javascript"> |
|
function agreement_result(caller) { |
|
document.permission.photopermission.value = caller; |
|
if (caller == 0) { |
|
document.location.href="/adm/populate"; |
|
} else { |
|
document.permission.submit(); |
|
} |
|
return; |
|
} |
|
</script> |
|
<form name="permission" method="post"> |
|
<table width="100%" border="0" cellpadding="2" cellspacing="2"> |
|
<tr> |
|
<td align="left"><b>Use of student photos</b><br/>'."\n". |
|
&mt('Acceptance by the course owner of the conditions of use of photos is currently [_1] set.','<b>not</b>').'<br />'.&mt('Please indicate your acceptance of the conditions of use of digital photos of registered students in courses at [_1].',$institution).' |
|
</td> |
|
</tr> |
|
</table> |
|
<table border="0" cellpadding="3" cellspacing="3"> |
|
<tr> |
|
<td colspan="2"> |
|
<textarea rows="20" cols="80">'.$conditions.'</textarea> |
|
</td> |
|
<tr> |
|
<td align="left"> |
|
<input type="button" name="disagree" value="I do not agree" onclick="javascript:agreement_result('."'no'".');" /> |
|
</td> |
|
<td align="right"> |
|
<input type="button" name="agree" value="I agree" onclick="javscript:agreement_result('."'yes'".');" /> |
|
</td> |
|
</tr> |
|
</table> |
|
<input type ="hidden" name="action" value="'.$action.'" /> |
|
<input type ="hidden" name="state" value="process" /> |
|
<input type ="hidden" name="showphotos" value="1" /> |
|
<input type= "hidden" name="photopermission" value="" /> |
|
</form> |
|
'; |
|
} 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).'<br /><br />'.&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.showphotos'], |
|
$dom,$crs); |
|
my $currphotos = $settings{'internal.showphotos'}; |
my $response = ""; |
my $response = ""; |
|
if (defined($photopermission)) { |
|
if ($photopermission eq 'yes') { |
|
$response = &mt('Acceptance of photo use policy recorded.').'<br />'."\n"; |
|
} else { |
|
$response = &mt('Non-acceptance of photo use policy recorded.').'<br />'."\n"; |
|
$showphotos = 0; |
|
} |
|
} |
my %cenv = ('internal.showphotos' => $showphotos); |
my %cenv = ('internal.showphotos' => $showphotos); |
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 change. The student photo import setting for this course has been left unchanged.<br/>"; |
$response .= "There was a problem processing your requested change. The student photo retrieval setting for this course has been left unchanged.<br/>"; |
} else { |
} else { |
if ($showphotos) { |
if ($showphotos) { |
if ($currphotos) { |
if ($currphotos) { |
$response = "Retrieval of student photos is still <b>enabled</b><br/>"; |
$response .= "Retrieval of student photos is still <b>enabled</b>.<br/>"; |
} else { |
} else { |
$response = "Retrieval of student photos in now <b>enabled</b><br/>"; |
$response .= "Retrieval of student photos in now <b>enabled</b>.<br/>"; |
|
my ($update,$commentary) = |
|
&Apache::lonnet::auto_photochoice($crs,$dom); |
|
if ($update) { |
|
$response .= '<br />'.$commentary.'<br /><br /> |
|
<form name="photoupdate" method="post"> |
|
<input type ="button" name="retrieve" value="'.&mt('Update photo repository').'" |
|
onclick="javascript:document.photoupdate.submit()" /> |
|
<input type ="hidden" name="action" value="'.$action.'" /> |
|
<input type ="hidden" name="state" value="photoupdate" /> |
|
</form>'; |
|
} |
} |
} |
} else { |
} else { |
if ($currphotos) { |
if ($currphotos) { |
$response = "Retrieval of student photos is now <b>disabled</b><br/>"; |
$response .= "Retrieval of student photos is now <b>disabled</b>.<br/>"; |
} else { |
} else { |
$response = "Retrieval of student photos is still <b>disabled</b><br/>"; |
$response .= "Retrieval of student photos is still <b>disabled</b>.<br/>"; |
} |
} |
} |
} |
|
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}); |
&print_reply($r,$response,$$tasktitleref{$action}); |
return; |
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 ').': <br /><script type="text/javascript"> |
|
function photowindow(photolink) { |
|
var title = "Photo_Viewer"; |
|
var options = "scrollbars=1,resizable=1,menubar=0"; |
|
options += ",width=240,height=240"; |
|
stdeditbrowser = open(photolink,title,options,"1"); |
|
stdeditbrowser.focus(); |
|
} |
|
</script> |
|
'; |
|
foreach my $type (sort(keys(%changes))) { |
|
my @usernames = sort(split(/\&/,$changes{$type})); |
|
my $count = @usernames; |
|
$response .= '<b>'.&mt('For [_1] students, photos ', |
|
$count).$lt{$type}.'</b><ul>'; |
|
foreach my $username (@usernames) { |
|
$response .= '<li>'.$username; |
|
if (($type eq 'new') || ($type eq 'same') || ($type eq 'update')) { |
|
$response .= ' <a href="javascript:photowindow('."'".&Apache::lonnet::studentphoto($dom,$username,'jpg')."'".')">View</a></li>'; |
|
} |
|
} |
|
$response .= '</ul><br />'; |
|
} |
|
} else { |
|
$response = &mt('No updates of photos of registered students occurred'). |
|
'<br />'; |
|
} |
|
} else { |
|
$response = "There was a problem updating student photos for registered students in this course. <br/>"; |
|
} |
|
} else { |
|
$response = "No institutional course sections are currently associated with this course so there are no registered students for whom photos can be imported/updated"; |
|
} |
|
&print_reply($r,$response,$$tasktitleref{$action}); |
|
return; |
|
} |
|
|
|
sub get_ownerinfo { |
|
my ($dom,$owner) = @_; |
|
my ($ownername,$owneremail); |
|
if ($owner) { |
|
$ownername=&Apache::loncommon::plainname($owner,$dom,'firstname'); |
|
my %ownerinfo = &Apache::lonnet::get('environment',['permanentemail'], |
|
$dom,$owner); |
|
$owneremail = $ownerinfo{'permanentemail'}; |
|
} |
|
return ($ownername,$owneremail); |
|
} |
|
|
sub print_update_result () { |
sub print_update_result () { |
my ($r,$realm,$dom,$crs,$action,$tasktitleref) = @_; |
my ($r,$realm,$dom,$crs,$action,$tasktitleref) = @_; |
my $response = ''; |
my $response = ''; |
Line 2100 sub print_update_result () {
|
Line 2391 sub print_update_result () {
|
my %LC_code = (); |
my %LC_code = (); |
my $logmsg = ''; |
my $logmsg = ''; |
my $newusermsg = ''; |
my $newusermsg = ''; |
|
my %phototypes = (); |
my %settings = &Apache::lonnet::get('environment',['internal.coursecode','internal.sectionnums','internal.crosslistings','internal.authtype','internal.autharg'],$dom,$crs); |
my %settings = &Apache::lonnet::get('environment',['internal.coursecode','internal.sectionnums','internal.crosslistings','internal.authtype','internal.autharg','internal.showphotos'],$dom,$crs); |
my $coursecode = $settings{'internal.coursecode'}; |
my $coursecode = $settings{'internal.coursecode'}; |
my $authtype = $settings{'internal.authtype'}; |
my $authtype = $settings{'internal.authtype'}; |
my $autharg = $settings{'internal.autharg'}; |
my $autharg = $settings{'internal.autharg'}; |
|
my $showphotos = $settings{'internal.showphotos'}; |
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"; |
} else { |
} else { |
# Get complete list of course sections to update |
&get_institutional_codes(\%settings,\@allcourses,\%LC_code); |
my @currsections = (); |
|
my @currxlists = (); |
|
|
|
if ($settings{'internal.sectionnums'} =~ m/,/) { |
|
@currsections = split/,/,$settings{'internal.sectionnums'}; |
|
} elsif ($settings{'internal.sectionnums'} ne '') { |
|
$currsections[0] = $settings{'internal.sectionnums'}; |
|
} |
|
|
|
if ($settings{'internal.crosslistings'} =~ m/,/) { |
|
@currxlists = split/,/,$settings{'internal.crosslistings'}; |
|
} elsif ($settings{'internal.crosslistings'} ne '') { |
|
$currxlists[0] = $settings{'internal.crosslistings'}; |
|
} |
|
|
|
if (@currxlists > 0) { |
|
foreach (@currxlists) { |
|
if (m/^(\w+):(\w*)$/) { |
|
unless (grep/^$1$/,@allcourses) { |
|
push @allcourses,$1; |
|
$LC_code{$1} = $2; |
|
} |
|
} |
|
} |
|
} |
|
|
|
if (@currsections > 0) { |
|
foreach (@currsections) { |
|
if (m/^(\w+):(\w*)$/) { |
|
my $sec = $coursecode.$1; |
|
my $gp = $2; |
|
unless (grep/^$sec$/,@allcourses) { |
|
push @allcourses,$sec; |
|
$LC_code{$sec} = $gp; |
|
} |
|
} |
|
} |
|
} |
|
|
|
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",\%phototypes); |
} else { |
} else { |
$response = "There was a problem retrieving institutional class list data for the course sections and crosslisted courses which contribute enrollment to this course. No updates have been carried out, and the roster remains unchanged."; |
$response = "There was a problem retrieving institutional class list data for the course sections and crosslisted courses which contribute enrollment to this course. No updates have been carried out, and the roster remains unchanged."; |
} |
} |
Line 2177 sub print_update_result () {
|
Line 2440 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}); |
return; |
return; |
} |
} |
|
|
|
sub get_institutional_codes { |
|
my ($settings,$allcourses,$LC_code) = @_; |
|
# Get complete list of course sections to update |
|
my @currsections = (); |
|
my @currxlists = (); |
|
my $coursecode = $$settings{'internal.coursecode'}; |
|
|
|
if ($$settings{'internal.sectionnums'} ne '') { |
|
@currsections = split(/,/,$$settings{'internal.sectionnums'}); |
|
} |
|
|
|
if ($$settings{'internal.crosslistings'} ne '') { |
|
@currxlists = split(/,/,$$settings{'internal.crosslistings'}); |
|
} |
|
|
|
if (@currxlists > 0) { |
|
foreach (@currxlists) { |
|
if (m/^([^:]+):(\w*)$/) { |
|
unless (grep/^$1$/,@{$allcourses}) { |
|
push @{$allcourses},$1; |
|
$$LC_code{$1} = $2; |
|
} |
|
} |
|
} |
|
} |
|
|
|
if (@currsections > 0) { |
|
foreach (@currsections) { |
|
if (m/^(\w+):(\w*)$/) { |
|
my $sec = $coursecode.$1; |
|
my $gp = $2; |
|
unless (grep/^$sec$/,@{$allcourses}) { |
|
push @{$allcourses},$sec; |
|
$$LC_code{$sec} = $gp; |
|
} |
|
} |
|
} |
|
} |
|
return; |
|
} |
|
|
|
|
sub print_viewclass_response { |
sub print_viewclass_response { |
my ($r,$realm,$dom,$crs,$action,$tasktitleref) = @_; |
my ($r,$realm,$dom,$crs,$action,$tasktitleref) = @_; |
my $response; |
my $response; |
Line 2200 sub print_viewclass_response {
|
Line 2505 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 2587 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 2604 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 2735 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 2745 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 2766 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 2799 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","updatephotos","viewclass"); |
|
|
my %tasklong = ( |
my %tasklong = ( |
information => "Task information", |
information => "Task information", |
Line 2544 sub handler {
|
Line 2824 sub handler {
|
notify => "Notification of changes", |
notify => "Notification of changes", |
crosslist => "Change crosslistings", |
crosslist => "Change crosslistings", |
sections => "Section settings", |
sections => "Section settings", |
photos => "Student photos", |
photos => "Student photo settings", |
|
updatephotos => "Update student photos", |
updatenow => "Update roster now", |
updatenow => "Update roster now", |
newcross => "Add crosslistings", |
newcross => "Add crosslistings", |
newsections => "Add sections", |
newsections => "Add sections", |
Line 2558 sub handler {
|
Line 2839 sub handler {
|
notify => "Notification of enrollment changes", |
notify => "Notification of enrollment changes", |
crosslist => "Changes to crosslistings", |
crosslist => "Changes to crosslistings", |
sections => "Changes to section settings", |
sections => "Changes to section settings", |
photos => "Automatic import of student photos", |
photos => "Student photo settings", |
|
updatephotos => "Update student photos", |
updatenow => "Immediate course roster update", |
updatenow => "Immediate course roster update", |
newcross => "Adding new crosslisted courses", |
newcross => "Adding new crosslisted courses", |
newsections => "Adding new course sections", |
newsections => "Adding new course sections", |
Line 2566 sub handler {
|
Line 2848 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=' '; } |
unless ($realm) { $realm=' '; } |
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 2876 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 2886 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()); |
Line 2642 sub handler {
|
Line 2924 sub handler {
|
} elsif ($action eq "updatenow") { |
} elsif ($action eq "updatenow") { |
&print_update_result($r,$realm,$dom,$crs,$action,\%tasktitle); |
&print_update_result($r,$realm,$dom,$crs,$action,\%tasktitle); |
} elsif ($action eq "photos") { |
} elsif ($action eq "photos") { |
&print_photos_response($r,$realm,$dom,$crs,$action,\%tasktitle); |
if ($state eq "photoupdate") { |
|
&print_photoupdate_response($r,$realm,$dom,$crs,$action,\%tasktitle); |
|
} else { |
|
&photo_permission($r,$realm,$dom,$crs,$action,\%tasktitle); |
|
} |
|
} elsif ($action eq "updatephotos") { |
|
&print_photoupdate_response($r,$realm,$dom,$crs,$action,\%tasktitle); |
} elsif ($action eq "newcross") { |
} elsif ($action eq "newcross") { |
&print_crosslistings_response($r,$realm,$dom,$crs,$action,\%tasktitle); |
&print_crosslistings_response($r,$realm,$dom,$crs,$action,\%tasktitle); |
} elsif ($action eq "newsections") { |
} elsif ($action eq "newsections") { |