[LON-CAPA-cvs] cvs: loncom /interface londropadd.pm
matthew
lon-capa-cvs@mail.lon-capa.org
Fri, 20 Jun 2003 20:57:44 -0000
This is a MIME encoded message
--matthew1056142664
Content-Type: text/plain
matthew Fri Jun 20 16:57:44 2003 EDT
Modified files:
/loncom/interface londropadd.pm
Log:
Bug 844:
All enrollment pages (classlist upload, enroll single student, and
modify single student) now use the new date_setter which lets you set the
date right in the page.
The date setters respect the course default start and end dates.
An instructor can set the dates he/she/it chooses as the default for future
enrollments.
Added a 'no ending date' checkbox so the person enrolling can hit it instead
of setting the date to Dec 31st, 1969, 7pm or whatever the unixtime start
date is for their time zone.
--matthew1056142664
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20030620165744.txt"
Index: loncom/interface/londropadd.pm
diff -u loncom/interface/londropadd.pm:1.67 loncom/interface/londropadd.pm:1.68
--- loncom/interface/londropadd.pm:1.67 Fri Jun 20 14:34:52 2003
+++ loncom/interface/londropadd.pm Fri Jun 20 16:57:44 2003
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to drop and add students in courses
#
-# $Id: londropadd.pm,v 1.67 2003/06/20 18:34:52 matthew Exp $
+# $Id: londropadd.pm,v 1.68 2003/06/20 20:57:44 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -254,53 +254,18 @@
if (foundname==0) { message='No name fields specified. '; }
if (foundid==0) { message+='No ID or student number field specified. '; }
if (foundsec==0) { message+='No section or group field specified. '; }
- if (vf.startdate.value=='') {
- message+='No starting date set. ';
- }
- if (vf.enddate.value=='') {
- message+='No ending date set. ';
- }
- if ((vf.enddate.value!='') && (vf.startdate.value!='')) {
- if (Math.round(vf.enddate.value)<Math.round(vf.startdate.value)) {
- alert('Ending date is before starting date');
- return;
- }
- }
if (message!='') {
message+='Continue enrollment?';
if (confirm(message)) {
- pclose();
vf.state.value='enrolling';
vf.submit();
}
} else {
- pclose();
vf.state.value='enrolling';
vf.submit();
}
}
-
- function pclose() {
- parmwin=window.open("/adm/rat/empty.html","LONCAPAparms",
- "height=350,width=350,scrollbars=no,menubar=no");
- parmwin.close();
- }
-
- $pjump_def
-
- function dateset() {
- if (document.studentform.pres_marker.value=='end') {
- document.studentform.enddate.value=
- document.studentform.pres_value.value;
- }
- if (document.studentform.pres_marker.value=='start') {
- document.studentform.startdate.value=
- document.studentform.pres_value.value;
- }
- pclose();
- }
-
$authheader
ENDPICK
@@ -466,6 +431,7 @@
my $intform = &Apache::loncommon::authform_internal(%param);
my $locform = &Apache::loncommon::authform_local(%param);
my $domform = &domain_form($defdom);
+ my $date_table = &date_setting_table();
$r->print(<<ENDPICK);
</table>
<input type=hidden name=nfields value=$i>
@@ -484,18 +450,9 @@
<h3>LON-CAPA Domain for Students</h3>
LON-CAPA domain: $domform <p>
<h3>Starting and Ending Dates</h3>
-<input type="hidden" value='' name="pres_value" >
-<input type="hidden" value='' name="pres_type" >
-<input type="hidden" value='' name="pres_marker" >
-<input type="hidden" value='$today' name="startdate" >
-<input type="hidden" value='$halfyear' name="enddate" >
-<a
- href="javascript:pjump('date_start','Enrollment Starting Date',document.studentform.startdate.value,'start','studentform.pres','dateset');"
->Set Starting Date</a><p>
-
-<a
- href="javascript:pjump('date_end','Enrollment Ending Date',document.studentform.enddate.value,'end','studentform.pres','dateset');"
->Set Ending Date</a><p>
+<p>
+$date_table
+</p>
<h3>Full Update</h3>
<input type=checkbox name=fullup value=yes> Full update
(also print list of users not enrolled anymore)<p>
@@ -558,6 +515,16 @@
# ======================================================= Enroll single student
sub enroll_single_student {
my $r=shift;
+ #
+ # We do the dates first because the action of making them the defaul
+ # in the course is entirely seperate from the action of enrolling the
+ # student. Also, a failure in setting the dates as default is not fatal
+ # to the process of enrolling / modifying a student.
+ my ($startdate,$enddate) = &get_dates_from_form();
+ if ($ENV{'form.makedatesdefault'}) {
+ $r->print(&make_dates_default($startdate,$enddate));
+ }
+
$r->print('<h3>Enrolling Student</h3>');
$r->print('<p>Enrolling '.$ENV{'form.cuname'}." \@ ".
$ENV{'form.lcdomain'}.'</p>');
@@ -599,12 +566,6 @@
&modifystudent($ENV{'form.lcdomain'},$ENV{'form.cuname'},
$ENV{'request.course.id'},$ENV{'form.csec'},
$desiredhost);
- my $startdate =
- &Apache::lonhtmlcommon::get_date_from_form('startdate');
- my $enddate =
- &Apache::lonhtmlcommon::get_date_from_form('enddate');
- &Apache::lonnet::logthis('startdate = '.$startdate);
- &Apache::lonnet::logthis('enddate = '.$enddate);
my $login_result = &Apache::lonnet::modifystudent
($ENV{'form.lcdomain'},$ENV{'form.cuname'},
$ENV{'form.cstid'},$amode,$genpwd,
@@ -630,6 +591,82 @@
}
}
+sub setup_date_selectors {
+ my ($starttime,$endtime) = @_;
+ if (! defined($starttime)) {
+ $starttime = time;
+ if (exists($ENV{'course.'.$ENV{'request.course.id'}.
+ '.default_enrollment_start_date'})) {
+ $starttime = $ENV{'course.'.$ENV{'request.course.id'}.
+ '.default_enrollment_start_date'};
+ }
+ }
+ if (! defined($endtime)) {
+ $endtime = time+(6*30*24*60*60); # 6 months from now, approx
+ if (exists($ENV{'course.'.$ENV{'request.course.id'}.
+ '.default_enrollment_end_date'})) {
+ $endtime = $ENV{'course.'.$ENV{'request.course.id'}.
+ '.default_enrollment_end_date'};
+ }
+ }
+ my $startdateform = &Apache::lonhtmlcommon::date_setter('studentform',
+ 'startdate',
+ $starttime);
+ my $enddateform = &Apache::lonhtmlcommon::date_setter('studentform',
+ 'enddate',
+ $endtime);
+ return ($startdateform,$enddateform);
+}
+
+sub get_dates_from_form {
+ my $startdate = &Apache::lonhtmlcommon::get_date_from_form('startdate');
+ my $enddate = &Apache::lonhtmlcommon::get_date_from_form('enddate');
+ if ($ENV{'form.no_end_date'}) {
+ $enddate = 0;
+ }
+ return ($startdate,$enddate);
+}
+
+sub date_setting_table {
+ my ($starttime,$endtime) = @_;
+ my ($startform,$endform)=&setup_date_selectors($starttime,$endtime);
+ my $dateDefault = '<nobr>'.
+ '<input type="checkbox" name="makedatesdefault" />'.
+ ' make these dates the default for future enrollment';
+ my $perpetual = '<nobr><input type="checkbox" name="no_end_date"';
+ if (defined($endtime) && $endtime == 0) {
+ $perpetual .= ' checked';
+ }
+ $perpetual.= ' />'.' no ending date</nobr>';
+ my $result = '';
+ $result .= "<table>\n";
+ $result .= '<tr><td align="right">Starting Date</td>'.
+ '<td>'.$startform.'</td>'.
+ '<td>'.$dateDefault.'</td>'."</tr>\n";
+ $result .= '<tr><td align="right">Ending Date</td>'.
+ '<td>'.$endform.'</td>'.
+ '<td>'.$perpetual.'</td>'."</tr>\n";
+ $result .= "</table>\n";
+ return $result;
+}
+
+sub make_dates_default {
+ my ($startdate,$enddate) = @_;
+ my $result = '';
+ my $dom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
+ my $crs = $ENV{'course.'.$ENV{'request.course.id'}.'.num'};
+ my $put_result = &Apache::lonnet::put('environment',
+ {'default_enrollment_start_date'=>$startdate,
+ 'default_enrollment_end_date' =>$enddate},$dom,$crs);
+ if ($put_result eq 'ok') {
+ $result .= "Set default start and end dates for course<br />";
+ } else {
+ $result .= "Unable to set default dates for course:".$put_result.
+ '<br />';
+ }
+ return $result;
+}
+
# ======================================================= Menu Phase Two Enroll
sub print_enroll_single_student_form {
my $r=shift;
@@ -650,24 +687,7 @@
my $locform = &Apache::loncommon::authform_local(%param);
# Set up domain selection form
my $domform = &domain_form($defdom);
- my $starttime = 'now';
- if (exists($ENV{'course.'.$ENV{'request.course.id'}.
- '.default_enrollment_start_date'})) {
- $starttime = $ENV{'course.'.$ENV{'request.course.id'}.
- '.default_enrollment_start_date'};
- }
- my $endtime = time+(6*30*24*60*60); # 6 months from now, approx
- if (exists($ENV{'course.'.$ENV{'request.course.id'}.
- '.default_enrollment_end_date'})) {
- $endtime = $ENV{'course.'.$ENV{'request.course.id'}.
- '.default_enrollment_end_date'};
- }
- my $startdateform = &Apache::lonhtmlcommon::date_setter('studentform',
- 'startdate',
- $starttime);
- my $enddateform = &Apache::lonhtmlcommon::date_setter('studentform',
- 'enddate',
- $endtime);
+ my $date_table = &date_setting_table();
# Print it all out
$r->print(<<END);
<input type="hidden" name="action" value="enrollstudent">
@@ -733,17 +753,7 @@
<p>Group/Section: <input type="text" name="csec" size="5" />
<p>
-<!-- Date setting form elements -->
-<input type="hidden" name="pres_value" value='' />
-<input type="hidden" name="pres_type" value='' />
-<input type="hidden" name="pres_marker" value='' />
-<input type="hidden" name="startdate" value='$today' />
-<input type="hidden" name="enddate" value='$halfyear' />
-</p><p>
-<table>
-<tr><td align="right" ><b>Starting Date</b></td><td>$startdateform</td></tr>
-<tr><td align="right" ><b>Ending Date</b></td><td>$enddateform</td></tr>
-</table>
+$date_table
</p>
<h3>ID/Student Number</h3>
<p>
@@ -1007,12 +1017,7 @@
# determine the students starting and ending times and section
my ($starttime,$endtime,$section) = &get_enrollment_data($sname,$sdom);
# Deal with date forms
- my $startdateform = &Apache::lonhtmlcommon::date_setter('studentform',
- 'startdate',
- $starttime);
- my $enddateform = &Apache::lonhtmlcommon::date_setter('studentform',
- 'enddate',
- $endtime);
+ my $date_table = &date_setting_table($starttime,$endtime);
#
if (! exists($ENV{'form.Status'}) ||
$ENV{'form.Status'} !~ /^(Any|Expired|Active)$/) {
@@ -1052,12 +1057,8 @@
(only do if you know what you are doing)
</p><p>
<b>Section</b>: <input type="text" name="section" value="$section" size="4"/>
-</p><p>
-<table>
-<tr><td align="right"><b>Starting Date:</b></td><td>$startdateform</td></tr>
-<tr><td align="right"><b>Ending Date:</b></td><td>$enddateform</td></tr>
-</table>
</p>
+<p>$date_table</p>
<input type="submit" value="Submit Modifications" />
</body></html>
END
@@ -1069,6 +1070,12 @@
#
sub modify_single_student {
my $r = shift;
+ #
+ # Do the date defaults first
+ my ($starttime,$endtime) = &get_dates_from_form();
+ if ($ENV{'form.makedatesdefault'}) {
+ $r->print(&make_dates_default($starttime,$endtime));
+ }
# Get the 'sortby' and 'Status' variables so the user goes back to their
# previous screen
my $sortby = $ENV{'form.sortby'};
@@ -1101,8 +1108,6 @@
my $section = $ENV{'form.section'};
my $courseid = $ENV{'request.course.id'};
my $sid = $ENV{'form.id'};
- my $starttime = &Apache::lonhtmlcommon::get_date_from_form('startdate');
- my $endtime = &Apache::lonhtmlcommon::get_date_from_form('enddate');
my $displayable_starttime = localtime($starttime);
my $displayable_endtime = localtime($endtime);
#
@@ -1153,8 +1158,8 @@
</table>
<h3>Role Information</h3>
<table>
-<tr><td>Start Time </td><td> $displayable_starttime </td></tr>
-<tr><td>End Time </td><td> $displayable_endtime </td></tr>
+<tr><td align="right"><b>Start Time:</b></td><td> $displayable_starttime </td></tr>
+<tr><td align="right"><b>End Time:</b></td><td> $displayable_endtime </td></tr>
</table>
<p>
END
@@ -1213,7 +1218,6 @@
my $section = '';
my $count = scalar(keys(%roles));
while (my ($course,$role) = each(%roles)) {
- &Apache::lonnet::logthis('course = '.$course.' role = '.$role);
if ($course=~ /^\/$courseid\/*\s*(\w+)*_st$/ ) {
#
# Get active role
@@ -1417,10 +1421,10 @@
}
}
#
- my $startdate = $ENV{'form.startdate'};
- my $enddate = $ENV{'form.enddate'};
- if ($startdate=~/\D/) { $startdate=''; }
- if ($enddate=~/\D/) { $enddate=''; }
+ my ($startdate,$enddate) = &get_dates_from_form();
+ if ($ENV{'form.makedatesdefault'}) {
+ $r->print(&make_dates_default($startdate,$enddate));
+ }
# Determine domain and desired host (home server)
my $domain=$ENV{'form.lcdomain'};
my $desiredhost = $ENV{'form.lcserver'};
--matthew1056142664--