[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--