--- loncom/interface/Attic/londropadd.pm	2001/12/19 17:17:46	1.17
+++ loncom/interface/Attic/londropadd.pm	2002/04/04 17:32:45	1.22
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Handler to drop and add students in courses 
 #
-# $Id: londropadd.pm,v 1.17 2001/12/19 17:17:46 albertel Exp $
+# $Id: londropadd.pm,v 1.22 2002/04/04 17:32:45 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -45,6 +45,9 @@
 # 8/6 Scott Harrison
 # Guy Albertelli
 # 9/25 Gerd Kortemeyer
+# 12/19 Guy Albertelli
+# YEAR=2002
+# 1/4 Gerd Kortemeyer
 
 package Apache::londropadd;
 
@@ -126,22 +129,22 @@ sub record_sep {
     if ($ENV{'form.upfiletype'} eq 'xml') {
     } elsif ($ENV{'form.upfiletype'} eq 'space') {
         my $i=0;
-        map {
+        foreach (split(/\s+/,$record)) {
             my $field=$_;
             $field=~s/^(\"|\')//;
             $field=~s/(\"|\')$//;
             $components{$i}=$field;
             $i++;
-        } split(/\s+/,$record);
+        }
     } elsif ($ENV{'form.upfiletype'} eq 'tab') {
         my $i=0;
-        map {
+        foreach (split(/\t+/,$record)) {
             my $field=$_;
             $field=~s/^(\"|\')//;
             $field=~s/(\"|\')$//;
             $components{$i}=$field;
             $i++;
-        } split(/\t+/,$record);        
+        }
     } else {
         my @allfields=split(/\,/,$record);
         my $i=0;
@@ -170,7 +173,9 @@ sub dropstudent {
      my ($udom,$unam,$courseid,$csec)=@_;
      $courseid=~s/\_/\//g;
      $courseid=~s/^(\w)/\/$1/;
-     map {
+     foreach (split(/\&/,
+		    &Apache::lonnet::reply('dump:'.$udom.':'.$unam.':roles',
+			     &Apache::lonnet::homeserver($unam,$udom)))) {
         my ($key,$value)=split(/\=/,$_);
         $key=&Apache::lonnet::unescape($key);
         if ($key=~/^$courseid(?:\/)*(\w+)*\_st$/) {
@@ -194,8 +199,7 @@ sub dropstudent {
             }
 	  }
         }
-    } split(/\&/,&Apache::lonnet::reply('dump:'.$udom.':'.$unam.':roles',
-                                 &Apache::lonnet::homeserver($unam,$udom)));
+    }
 }
 
 # ============================================================== Menu Phase One
@@ -249,7 +253,9 @@ sub menu_phase_two_upload {
 <input type=hidden name=upfiletype value=$ENV{'form.upfiletype'}>
 <hr>
 <h3>Identify fields</h3>
-Total number of records found in file: $distotal
+Total number of records found in file: $distotal <hr />
+Enter as many fields as you can. The system will inform you and bring you back
+to this page if the data selected is insufficient to run your class.<hr />
 <script>
 function verify(vf) {
     var founduname=0;
@@ -431,19 +437,19 @@ ENDPICK
                 if ($total>=2) {
                    %sthree=&record_sep($records[2]);
 	        }
-                map {
+                foreach (sort keys %sone) {
                    $r->print('<tr><td><select name=f'.$i.
                        ' onChange="flip(this.form,'.$i.');">');
-                   map {
-                      my ($value,$display)=split(/\:/,$_);
-                      $r->print('<option value='.$value.'>'.$display.
-                              '</option>');
-                   } ('none: ','username:Username',
+                   foreach ('none: ','username:Username',
                       'names:Last Name, First Names',
                       'fname:First Name','mname:Middle Names/Initials',
                       'lname:Last Name','gen:Generation',
                       'id:ID/Student Number','sec:Group/Section',
-                      'ipwd:Initial Password');
+                      'ipwd:Initial Password') {
+		      my ($value,$display)=split(/\:/,$_);
+                      $r->print('<option value='.$value.'>'.$display.
+                              '</option>');
+                   }
                    $r->print('</select></td><td>');
                    if (defined($sone{$_})) { 
                       $r->print($sone{$_}."</br>\n"); 
@@ -456,7 +462,7 @@ ENDPICK
                    }
                    $r->print('</td></tr>');
                    $i++;
-	       } sort keys %sone;
+	       }
 	       $i--;
 	     }
              my $keyfields=join(',',sort keys %sone);
@@ -499,6 +505,10 @@ LON-CAPA domain: <input type=text size=1
 <h3>Full Update</h3>
 <input type=checkbox name=fullup value=yes> Full update 
 (also print list of users not enrolled anymore)<p>
+<h3>ID/Student Number</h3>
+<input type=checkbox name=forceid value=yes> 
+Disable ID/Student Number Safeguard and Force Change of Conflicting IDs
+(only do if you know what you are doing)<p>
 <input type=button onClick="verify(this.form)" value="Update Courselist"><br>
 Note: for large courses, this operation might be time consuming.
 ENDPICK
@@ -533,7 +543,7 @@ sub enroll_single_student {
  	              $ENV{'form.cfirst'},$ENV{'form.cmiddle'},
                       $ENV{'form.clast'},$ENV{'form.cgen'},
                       $ENV{'form.csec'},$ENV{'form.enddate'},
-                      $ENV{'form.startdate'}));
+                      $ENV{'form.startdate'},$ENV{'form.forceid'}));
 	} else {
            $r->print('Invalid login mode or password');    
         }          
@@ -742,6 +752,10 @@ Local Authentication with argument
 <a 
  href="javascript:pjump('date_end','Enrollment Ending Date',document.studentform.enddate.value,'end','studentform.pres','dateset');"
 >Set Ending Date</a><p>
+<h3>ID/Student Number</h3>
+<input type=checkbox name=forceid value=yes> 
+Disable ID/Student Number Safeguard and Force Change of Conflicting IDs
+(only do if you know what you are doing)<p>
 <input type=button onClick="verify(this.form)" value="Enroll as student"><br>
 <input type=hidden name=phase value=five>
 ENDSENROLL
@@ -759,7 +773,7 @@ sub menu_phase_two_drop {
                  my %currentlist=();
                  my $now=time;
                  unless ($classlst=~/^error\:/) {
-                     map {
+                     foreach (split(/\&/,$classlst)) {
                         my ($name,$value)=split(/\=/,$_);
                         my ($end,$start)=split(/\:/,
                                             &Apache::lonnet::unescape($value));
@@ -768,7 +782,7 @@ sub menu_phase_two_drop {
                         if ($active) {
 		           $currentlist{&Apache::lonnet::unescape($name)}=1;
                         }
-                     } split(/\&/,$classlst);
+                     }
 # ----------------------------------------------------------- Print out choices
                      &show_drop_list($r,%currentlist);
 	         } else {
@@ -786,7 +800,7 @@ sub show_drop_list {
 
     $r->print('<input type=hidden name=phase value=four>');
                      $r->print('<table border=2>');
-                     map {
+                     foreach (sort keys %currentlist) {
                          my ($sname,$sdom)=split(/\:/,$_);
                          my %reply=&Apache::lonnet::idrget($sdom,$sname);
                          my $ssec=&Apache::lonnet::usection($sdom,$sname,$cid);
@@ -804,7 +818,7 @@ sub show_drop_list {
                                    &Apache::lonnet::unescape($reply[1]).
                                    '</td><td>'.
                                    $ssec."</td></tr>\n");
-                     } sort keys %currentlist;
+                     }
                      $r->print('</table><br>');
                      $r->print('<input type=submit value="Drop Students">');
 }
@@ -852,7 +866,7 @@ sub upfile_drop_add {
               my %student=();
 # ----------------------------------------------------------- Get new classlist
 # --------------------------------------------------------- Enroll new students
-	      map {
+	      foreach (@studentdata) {
 		  my %entries=&record_sep($_);
 
                 unless (($entries{$fields{'username'}} eq '') ||
@@ -908,7 +922,8 @@ sub upfile_drop_add {
 			 &dropstudent($domain,$username,$cid,$sec);
                          my $reply=&Apache::lonnet::modifystudent(
                           $domain,$username,$id,$amode,$password,
-			   $fname,$mname,$lname,$gen,$sec,$enddate,$startdate);
+			   $fname,$mname,$lname,$gen,$sec,$enddate,$startdate,
+                           $ENV{'form.forceid'});
                          unless ($reply eq 'ok') {
                             $r->print(
                              "<p><b>Error enrolling $username: $reply</b><p>");
@@ -927,7 +942,7 @@ sub upfile_drop_add {
                      }
                   }
                  }                 
-              } @studentdata;
+              }
               $r->print('<p>Processed Students: '.$count);
 # --------------------------------------------------------------- Drop students
               if ($ENV{'form.fullup'} eq 'yes') {
@@ -940,7 +955,7 @@ sub upfile_drop_add {
                  my %currentlist=();
                  my $now=time;
                  unless ($classlst=~/^error\:/) {
-                     map {
+                     foreach (split(/\&/,$classlst)) {
                         my ($name,$value)=split(/\=/,$_);
                         my ($end,$start)=split(/\:/,
                                             &Apache::lonnet::unescape($value));
@@ -949,9 +964,9 @@ sub upfile_drop_add {
                         if ($active) {
 		           $currentlist{&Apache::lonnet::unescape($name)}=1;
                         }
-                     } split(/\&/,$classlst);
+                     }
 # ------------------------------------------------ Now got up-to-date classlist
-                     map {
+                     foreach (@studentdata) {
  	                my %entries=&record_sep($_);
                         unless (($entries{$fields{'username'}} eq '') ||
                           (!defined($entries{$fields{'username'}}))) {
@@ -959,7 +974,7 @@ sub upfile_drop_add {
                             $entries{$fields{'username'}}.':'.
                             $domain});
 		        }
-                     } @studentdata;
+                     }
 # ----------------------------------------------------------- Print out choices
                      &show_drop_list($r,%currentlist);
 	         } else {
@@ -978,14 +993,14 @@ sub upfile_drop_add {
 sub drop_student_list {
     my $r=shift;
     my $count=0;
-    map {
+    foreach (keys %ENV) {
 	if ($_=~/^form\.drop\:/) {
 	    my ($dummy,$uname,$udom)=split(/\:/,$_);
             &dropstudent($udom,$uname,$ENV{'request.course.id'});
             $r->print('Dropped '.$uname.' at '.$udom.'<br>');
             $count++;
         }
-    } keys %ENV;
+    }
     $r->print('<p><b>Dropped '.$count.' student(s).</b>');
     $r->print('<p>Re-enrollment will re-activate data.');
 }