--- loncom/interface/loncreateuser.pm	2001/02/21 20:38:35	1.3
+++ loncom/interface/loncreateuser.pm	2001/03/02 20:31:34	1.4
@@ -16,7 +16,7 @@
 #
 # 2/14 Gerd Kortemeyer)
 #
-# 2/14,2/17,2/19,2/20,2/21 Gerd Kortemeyer
+# 2/14,2/17,2/19,2/20,2/21,2/22,2/23,3/2 Gerd Kortemeyer
 #
 package Apache::loncreateuser;
 
@@ -53,6 +53,13 @@ sub phase_two {
     my $r=shift;
     my $ccuname=$ENV{'form.ccuname'};
     my $ccdomain=$ENV{'form.ccdomain'};
+
+    $ENV{'SERVER_NAME'}=~/(\w+\.\w+)$/;
+    my $krbdefdom=$1;
+    $krbdefdom=~tr/a-z/A-Z/;
+
+    my $defdom=$ENV{'user.domain'};
+
     $ccuname=~s/\W//g;
     $ccdomain=~s/\W//g;
     $r->print(<<ENDENHEAD);
@@ -106,7 +113,128 @@ ENDENHEAD
         }
     } %ENV;
     if ($uhome eq 'no_host') {
-	$r->print('<h3>New user '.$ccuname.' at '.$ccdomain.'</h3>');
+	$r->print(<<ENDNUSER);
+<h3>New user $ccuname at $ccdomain</h3>
+<script>
+function verify(vf) {
+    var founduname=0;
+    var foundpwd=0;
+    var foundname=0;
+    var foundid=0;
+    var foundsec=0;
+    var foundatype=0;
+    var tw;
+    var message='';
+    if ((vf.cuname.value!=undefined) && (vf.cuname.value!='') && 
+	(vf.cdomain.value!=undefined) && (vf.cdomain.value!='')) {
+        founduname=1;
+    }
+    if ((vf.cfirst.value!=undefined) && (vf.cfirst.value!='') &&
+	(vf.clast.value!=undefined) && (vf.clast.value!='')) {
+        foundname=1;
+    }
+    if ((vf.csec.value!=undefined) && (vf.csec.value!='')) {
+        foundsec=1;
+    }
+    if ((vf.cstid.value!=undefined) && (vf.cstid.value!='')) {
+	foundid=1;
+    }
+    if (founduname==0) {
+	alert('You need to specify at least the username and domain fields');
+        return;
+    }
+    if (vf.login[0].checked) {
+	foundatype=1;
+        if (vf.krbdom.value=='') {
+	    alert('You need to specify the Kerberos domain');
+            return;
+        }
+    }
+    if (vf.login[1].checked) {
+	foundatype=1;
+        if ((vf.intpwd.value=='') && (foundpwd==0)) {
+	    alert('You need to specify the initial password');
+            return;
+        }
+    }
+    if (foundatype==0) {
+	alert('You need to set the login type');
+        return;
+    }
+    if (foundname==0) { message='No first and last name 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.submit();
+       }
+    } else {
+      pclose();
+      vf.submit();
+    }   
+}
+
+function setkrb(vf) {
+    if (vf.krbdom.value!='') {
+       vf.login[0].checked=true;
+       vf.krbdom.value=vf.krbdom.value.toUpperCase();
+       vf.intpwd.value='';
+   }
+}
+
+function setint(vf) {
+    if (vf.intpwd.value!='') {
+       vf.login[1].checked=true;
+       vf.krbdom.value='';
+   }
+}
+
+function clickkrb(vf) {
+    vf.krbdom.value='$krbdefdom';
+    vf.intpwd.value='';
+}
+
+function clickint(vf) {
+    vf.krbdom.value='';
+}
+</script>
+<input type=hidden name=makeuser value=1>
+<h3>Personal Data</h3>
+First Name: <input type=text name=cfirst size=15><br>
+Middle Name: <input type=text name=cmiddle size=15><br>
+Last Name: <input type=text name=clast size=15><br>
+Generation: <input type=text name=cgen size=5><p>
+
+ID/Student Number: <input type=text name=cstid size=10><p>
+
+Group/Section: <input type=text name=csec size=5><p>
+
+<h3>Login Data</h3>
+Username: <input type=text name=cuname size=15><p>
+Domain: <input type=text size=10 value=$defdom name=cdomain><p>
+Note: login settings below will not take effect if the user already exists<p>
+
+<input type=radio name=login value=krb onClick="clickkrb(this.form);">
+Kerberos authenticated with domain
+<input type=text size=10 name=krbdom onChange="setkrb(this.form);"><p>
+<input type=radio name=login value=int onClick="clickint(this.form);"> 
+Internally authenticated (with initial password 
+<input type=text size=10 name=intpwd onChange="setint(this.form);">)
+ENDNUSER
     } else {
 	$r->print('<h3>Existing user '.$ccuname.' at '.$ccdomain.'</h3>');
         my $rolesdump=&Apache::lonnet::reply(
@@ -210,9 +338,72 @@ ENDROW
         } ('st','ta','ep','ad','in');
     } sort keys %inccourses;
     $r->print('</table>');
+    $r->print('<input type=submit value="Modify Roles">');
     $r->print('</form></body></html>');
 }
 
+# ================================================================= Phase Three
+
+sub phase_three {
+    my $r=shift;
+    $r->print(<<ENDTHREEHEAD);
+<html>
+<head>
+<title>The LearningOnline Network with CAPA</title>
+</head>
+<body bgcolor="#FFFFFF">
+<img align=right src=/adm/lonIcons/lonlogos.gif>
+<h1>Create User, Change User Privileges</h1>
+ENDTHREEHEAD
+   if ($ENV{'form.makeuser'}) {
+    $r->print('<h3>Creating User</h3>');
+    if (($ENV{'form.cuname'})&&($ENV{'form.cuname'}!~/\W/)&&
+        ($ENV{'form.cdomain'})&&($ENV{'form.cdomain'}!~/\W/)) {
+	my $amode='';
+        my $genpwd='';
+        if ($ENV{'form.login'} eq 'krb') {
+           $amode='krb4';
+           $genpwd=$ENV{'form.krbdom'};
+        } elsif ($ENV{'form.login'} eq 'int') {
+           $amode='internal';
+           $genpwd=$ENV{'form.intpwd'};
+        }
+        if (($amode) && ($genpwd)) {
+ 	  &dropstudent($ENV{'form.cdomain'},$ENV{'form.cuname'},
+		       $ENV{'request.course.id'},$ENV{'form.csec'});
+          $r->print(&Apache::lonnet::modifystudent(
+                      $ENV{'form.cdomain'},$ENV{'form.cuname'},
+                      $ENV{'form.cstid'},$amode,$genpwd,
+ 	              $ENV{'form.cfirst'},$ENV{'form.cmiddle'},
+                      $ENV{'form.clast'},$ENV{'form.cgen'},
+                      $ENV{'form.csec'},$ENV{'form.enddate'},
+                      $ENV{'form.startdate'}));
+	} else {
+           $r->print('Invalid login mode or password');    
+        }          
+    } else {
+        $r->print('Invalid username or domain');
+    }
+   }
+    $r->print('<h4>'.$ENV{'form.cuname'}.' at '.$ENV{'form.cdomain'}.'</h4>');
+    my $now=time;
+# sub assignrole {
+#    my ($udom,$uname,$url,$role,$end,$start)=@_;
+    map {
+	if (($_=~/^form\.rev\:([^\_]+)\_([^\_]+)$/) && ($ENV{$_})) {
+           $r->print('Revoking '.$2.' in '.$1.': '.
+          &Apache::lonnet::assignrole($ENV{'form.cdomain'},$ENV{'form.cuname'},
+                                      $1,$2,$now).'<br>');
+	}
+    } keys %ENV;
+    $r->print('</body></html>');
+    map {
+	if (($_=~/^form\.act\_([^\_]+)\_([^\_]+)\_([^\_]+)$/) && ($ENV{$_})) {
+	    $r->print('a:'.$_.': '.$1.' '.$2.' '.$3.'<br>');
+	}
+    } keys %ENV;
+}
+
 # ================================================================ Main Handler
 sub handler {
     my $r = shift;
@@ -235,6 +426,8 @@ sub handler {
        }
        if ($ENV{'form.phase'} eq 'two') {
            &phase_two($r);
+       } elsif ($ENV{'form.phase'} eq 'three') {
+           &phase_three($r);
        }
    } else {
       $ENV{'user.error.msg'}=