--- loncom/interface/loncreateuser.pm	2001/03/02 22:06:43	1.5
+++ loncom/interface/loncreateuser.pm	2001/04/12 19:43:49	1.12
@@ -16,7 +16,7 @@
 #
 # 2/14 Gerd Kortemeyer)
 #
-# 2/14,2/17,2/19,2/20,2/21,2/22,2/23,3/2 Gerd Kortemeyer
+# 2/14,2/17,2/19,2/20,2/21,2/22,2/23,3/2,3/17,3/24,04/12 Gerd Kortemeyer
 #
 package Apache::loncreateuser;
 
@@ -101,6 +101,8 @@ sub phase_two {
 <input type="hidden" value='' name="pres_value">
 <input type="hidden" value='' name="pres_type">
 <input type="hidden" value='' name="pres_marker">
+<input type=hidden name=cuname value="$ccuname">
+<input type=hidden name=cdomain value="$ccdomain">
 
 ENDENHEAD
     my $uhome=&Apache::lonnet::homeserver($ccuname,$ccdomain);
@@ -114,80 +116,8 @@ ENDENHEAD
     } %ENV;
     if ($uhome eq 'no_host') {
 	$r->print(<<ENDNUSER);
-<h3>New user $ccuname at $ccdomain</h3>
+<h2>New user $ccuname at $ccdomain</h2>
 <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;
@@ -221,13 +151,7 @@ Generation: <input type=text name=cgen s
 
 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>
@@ -236,9 +160,7 @@ Internally authenticated (with initial p
 <input type=text size=10 name=intpwd onChange="setint(this.form);">)
 ENDNUSER
     } else {
-	$r->print('<h3>Existing user '.$ccuname.' at '.$ccdomain.'</h3>');
-        $r->print('<input type=hidden name=cuname value='.$ccuname.'>');
-        $r->print('<input type=hidden name=cdomain value='.$ccdomain.'>');
+	$r->print('<h2>Existing user '.$ccuname.' at '.$ccdomain.'</h2>');
 
         my $rolesdump=&Apache::lonnet::reply(
                                   "dump:$ccdomain:$ccuname:roles",$uhome);
@@ -260,7 +182,7 @@ ENDNUSER
                  my %coursedata=&Apache::lonnet::coursedescription($1.'_'.$2);
                  my $carea='Course: '.$coursedata{'description'};
                  $inccourses{$1.'_'.$2}=1;
-                 if (&Apache::lonnet::allowed('c'.$trole,$1.'_'.$2)) {
+                 if (&Apache::lonnet::allowed('c'.$trole,$1.'/'.$2)) {
 		     $allows=1;
                  }
                  $bgcol=$1.'_'.$2;
@@ -271,11 +193,15 @@ ENDNUSER
 		 }
                  $area=$carea;
 	      } else {
-                 if ($1) {
+                 if ($area=~/^\/(\w+)\//) {
 		     $incdomains{$1}=1;
                      if (&Apache::lonnet::allowed('c'.$trole,$1)) {
 			 $allows=1;
                      }
+                 } else {
+                     if (&Apache::lonnet::allowed('c'.$trole,'/')) {
+			 $allows=1;
+                     }
                  }
 	      }
 
@@ -302,21 +228,44 @@ ENDNUSER
 	   $r->print('</table>');
          }   
     }
-    $r->print('<hr><h4>Add Roles</h4><h5>System Level</h5>');
-    $r->print('<h5>Domain Level</h5>');
+    $r->print('<hr><h3>Add Roles</h3><h4>System Level</h4>');
+#
+# Domain level
+#
+    $r->print('<h4>Domain Level</h4>'.
+    '<table border=2><tr><th>Activate</th><th>Role</th><th>Extent</th>'.
+    '<th>Start</th><th>End</th></tr>');
     map {
 	my $thisdomain=$_;
         map {
             if (&Apache::lonnet::allowed('c'.$_,$thisdomain)) {
-		$r->print($_.' - '.$thisdomain.'<br>');
+               my $plrole=&Apache::lonnet::plaintext($_);
+               $r->print(<<ENDDROW);
+<tr>
+<td><input type=checkbox name="act_$thisdomain\_$_"></td>
+<td>$plrole</td>
+<td>$thisdomain</td>
+<td><input type=hidden name="start_$thisdomain\_$_" value=''>
+<a href=
+"javascript:pjump('date_start','Start Date $plrole',document.cu.start_$thisdomain\_$_.value,'start_$thisdomain\_$_','cu.pres','dateset')">Set Start Date</a></td>
+<td><input type=hidden name="end_$thisdomain\_$_" value=''>
+<a href=
+"javascript:pjump('date_end','End Date $plrole',document.cu.end_$thisdomain\_$_.value,'end_$thisdomain\_$_','cu.pres','dateset')">Set End Date</a></td>
+</tr>
+ENDDROW
             }
-        } ('dc','cc','li','dg','au');
+        } ('dc','li','dg','au');
     } sort keys %incdomains;
-    $r->print('<h5>Course Level</h5>'.
+    $r->print('</table>');
+#
+# Course level
+#
+    $r->print('<h4>Course Level</h4>'.
     '<table border=2><tr><th>Activate</th><th>Role</th><th>Extent</th>'.
     '<th>Group/Section</th><th>Start</th><th>End</th></tr>');
     map {
 	my $thiscourse=$_;
+        $thiscourse=~s/\_/\//g;
         my %coursedata=&Apache::lonnet::coursedescription($thiscourse);
         my $area=$coursedata{'description'};
         my $bgcol=$thiscourse;
@@ -341,10 +290,10 @@ ENDNUSER
 ENDROW
 
             }
-        } ('st','ta','ep','ad','in');
+        } ('st','ta','ep','ad','in','cc');
     } sort keys %inccourses;
     $r->print('</table>');
-    $r->print('<input type=submit value="Modify Roles">');
+    $r->print('<input type=submit value="Modify User">');
     $r->print('</form></body></html>');
 }
 
@@ -361,6 +310,7 @@ sub phase_three {
 <img align=right src=/adm/lonIcons/lonlogos.gif>
 <h1>Create User, Change User Privileges</h1>
 ENDTHREEHEAD
+   $r->print('<h2>'.$ENV{'form.cuname'}.' at '.$ENV{'form.cdomain'}.'</h2>');
    if ($ENV{'form.makeuser'}) {
     $r->print('<h3>Creating User</h3>');
     if (($ENV{'form.cuname'})&&($ENV{'form.cuname'}!~/\W/)&&
@@ -375,15 +325,14 @@ ENDTHREEHEAD
            $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(
+          $r->print('Generating user: '.&Apache::lonnet::modifyuser(
                       $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'}));
+                      $ENV{'form.clast'},$ENV{'form.cgen'}));
+          $r->print('<br>Home server: '.&Apache::lonnet::homeserver
+                      ($ENV{'form.cuname'},$ENV{'form.cdomain'}));
+
 	} else {
            $r->print('Invalid login mode or password');    
         }          
@@ -391,15 +340,24 @@ ENDTHREEHEAD
         $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)=@_;
+    $r->print('<h3>Modifying Roles</h3>');
     map {
 	if (($_=~/^form\.rev\:([^\_]+)\_([^\_]+)$/) && ($ENV{$_})) {
            $r->print('Revoking '.$2.' in '.$1.': '.
           &Apache::lonnet::assignrole($ENV{'form.cdomain'},$ENV{'form.cuname'},
                                       $1,$2,$now).'<br>');
+           if ($2 eq 'st') {
+               $1=~/^\/(\w+)\/(\w+)/;
+               my $cid=$1.'_'.$2;
+	       $r->print('Drop from classlist: '.
+          &Apache::lonnet::critical('put:'.$ENV{'course.'.$cid.'.domain'}.':'.
+	              $ENV{'course.'.$cid.'.num'}.':classlist:'.
+                      &Apache::lonnet::escape($ENV{'form.cuname'}.':'.
+                                              $ENV{'form.cdomain'}).'='.
+                      &Apache::lonnet::escape($now.':'),
+	              $ENV{'course.'.$cid.'.home'}).'<br>');
+           }
 	}
     } keys %ENV;
     map {
@@ -419,7 +377,31 @@ ENDTHREEHEAD
             $r->print('Assigning: '.$3.' in '.$url.': '.
           &Apache::lonnet::assignrole($ENV{'form.cdomain'},$ENV{'form.cuname'},
                                       $url,$3,$end,$start).'<br>');
-	}
+            if ($3 eq 'st') {
+		$url=~/^\/(\w+)\/(\w+)/;
+                my $cid=$1.'_'.$2;
+               $r->print('Add to classlist: '.
+          &Apache::lonnet::critical('put:'.$ENV{'course.'.$cid.'.domain'}.':'.
+	              $ENV{'course.'.$cid.'.num'}.':classlist:'.
+                      &Apache::lonnet::escape($ENV{'form.cuname'}.':'.
+                                              $ENV{'form.cdomain'}).'='.
+                      &Apache::lonnet::escape($end.':'.$start),
+	              $ENV{'course.'.$cid.'.home'}).'<br>');
+	    }
+	} elsif (($_=~/^form\.act\_([^\_]+)\_([^\_]+)$/) && ($ENV{$_})) {
+            my $url='/'.$1.'/';
+            my $start=$now;
+            if ($ENV{'form.start_'.$1.'_'.$2}) {
+		$start=$ENV{'form.start_'.$1.'_'.$2};
+            }
+            my $end=0;
+            if ($ENV{'form.end_'.$1.'_'.$2}) {
+		$end=$ENV{'form.end_'.$1.'_'.$2};
+            }
+            $r->print('Assigning: '.$2.' in '.$url.': '.
+          &Apache::lonnet::assignrole($ENV{'form.cdomain'},$ENV{'form.cuname'},
+                                      $url,$2,$end,$start).'<br>');
+        }
     } keys %ENV;
     $r->print('</body></html>');
 }
@@ -451,7 +433,7 @@ sub handler {
        }
    } else {
       $ENV{'user.error.msg'}=
-        "/adm/createcourse:mau:0:0:Cannot modify user data";
+        "/adm/createuser:mau:0:0:Cannot modify user data";
       return HTTP_NOT_ACCEPTABLE; 
    }
    return OK;