Index: /trunk/DNSDB.pm
===================================================================
--- /trunk/DNSDB.pm	(revision 18)
+++ /trunk/DNSDB.pm	(revision 19)
@@ -23,5 +23,5 @@
 @ISA		= qw(Exporter);
 @EXPORT_OK	= qw(
-	&initGlobals &connectDB &finish &addDomain &delDomain &domainName &addGroup &grpName &getSOA
+	&initGlobals &connectDB &finish &addDomain &delDomain &domainName &addGroup &getChildren &grpName &getSOA
 	&getRecLine &getDomRecs &addRec &updateRec &delRec &domStatus
 	%typemap %reverse_typemap
@@ -30,5 +30,6 @@
 @EXPORT		= (); # Export nothing by default.
 %EXPORT_TAGS	= ( ALL => [qw(
-		&initGlobals &connectDB &finish &addDomain &delDomain &domainName &addGroup &grpName &getSOA
+		&initGlobals &connectDB &finish &addDomain &delDomain &domainName &addGroup &getChildren &grpName 
+&getSOA
 		&getRecLine &getDomRecs &addRec &updateRec &delRec &domStatus
 		%typemap %reverse_typemap
@@ -318,4 +319,36 @@
 
 
+## DNSDB::getChildren()
+# Get a list of all groups whose parent^n is group <n>
+# Takes a database handle, group ID, and reference to an array to put the group IDs in
+# Calls itself
+sub getChildren {
+  $errstr = '';
+  my $dbh = shift;
+  my $rootgrp = shift;
+  my $grpdest = shift;
+
+  # special break for default group;  otherwise we get stuck.
+  if ($rootgrp == 1) {
+    # by definition, group 1 is the Root Of All Groups
+    my $sth = $dbh->prepare("SELECT group_id FROM groups");
+    $sth->execute;
+    my @grplist;
+    while (my @this = $sth->fetchrow_array) {
+      push @$grpdest, @this;
+    }
+  } else {
+    my $sth = $dbh->prepare("SELECT group_id FROM groups WHERE parent_group_id=?");
+    $sth->execute($rootgrp);
+    return if $sth->rows == 0;
+    my @grplist;
+    while (my ($grp) = $sth->fetchrow_array) {
+      push @$grpdest, $grp;
+      getChildren($dbh,$grp,$grpdest);
+    }
+  }
+} # end getChildren()
+
+
 ## DNSDB::grpName()
 # Return the group name based on a group ID
Index: /trunk/dns.cgi
===================================================================
--- /trunk/dns.cgi	(revision 18)
+++ /trunk/dns.cgi	(revision 19)
@@ -49,6 +49,6 @@
 }
 
-my $logingroup = $session->param('logingroup');
-my $curgroup = ($session->param('curgroup') ? $session->param('curgroup') : $session->param('logingroup'));
+my $logingroup = ($session->param('logingroup') ? $session->param('logingroup') : 1);
+my $curgroup = ($session->param('curgroup') ? $session->param('curgroup') : $logingroup);
 my $group = ($webvar{group} ? $webvar{group} : 1);
 
@@ -403,4 +403,9 @@
     $page->param(errmsg => $msg);
     $page->param(newgroup => $webvar{newgroup});
+     fill_grplist('pargroup',$webvar{pargroup});
+  } else {
+#    $page->param
+     fill_grplist('pargroup',$curgroup);
+
   }
 }
@@ -416,5 +421,5 @@
   $page->param(grp => $group);
   $page->param(grpname => grpName($dbh,$group));
-  fill_grplist();
+  fill_grplist("grplist");
 }
 
@@ -634,7 +639,8 @@
 
 sub fill_grplist {
+  my $template_var = shift;
+  my $cur = shift || $curgroup;
   # weesa gonna discard parent_group_id for now
   my $sth = $dbh->prepare("SELECT group_id,parent_group_id,group_name FROM groups ORDER BY group_id");
-push @debugbits, "grp list sth err: ".$sth->errstr."<br>\n";
   $sth->execute;
   my @grplist;
@@ -645,9 +651,9 @@
 ##fixme: need magic
 #    $row{defgrp} = '';
-    $row{grpactive} = 1 if $grpid eq $curgroup;
+    $row{grpactive} = 1 if $grpid == $cur;
     push @grplist, \%row;
   }
 
-  $page->param(grplist => \@grplist);
-
-}
+  $page->param("$template_var" => \@grplist);
+
+}
Index: /trunk/templates/grpman.tmpl
===================================================================
--- /trunk/templates/grpman.tmpl	(revision 19)
+++ /trunk/templates/grpman.tmpl	(revision 19)
@@ -0,0 +1,49 @@
+<!-- <TMPL_VAR NAME=sid> -->
+<table class="wholepage"><tr>
+<TMPL_INCLUDE NAME="menu.tmpl">
+
+<td align="center">
+<table width="98%">
+<tr><td colspan=3 align=center><span class="pgtitle">Manage groups</span></td></tr>
+<tr><td><TMPL_INCLUDE NAME="pgcount.tmpl"></td>
+<td>
+<TMPL_INCLUDE NAME="fpnla.tmpl">
+</td><td align=right>insert search box here</td></tr>
+
+<tr><td colspan=3 align=center>insert letter search here</td></tr>
+
+<tr><td colspan=3 align=right><a href="dns.cgi?sid=<TMPL_VAR NAME=sid>&page=newgrp">New Group</a></td></tr>
+</table>
+
+<table border=0 cellspacing="5" cellpadding="3">
+<tr>
+<TMPL_IF NAME=foobarbaz>
+<!-- This block to be un-TMPL_IF'ed once we care about sort order - by default, we sort by domain, ascending -->
+	<td class="underline" nowrap><a href="dns.cgi?sid=<TMPL_VAR NAME=sid>&page=domlist&offset=<TMPL_VAR NAME=offset>">Domain<TMPL_IF NAME=sortdomain>&nbsp;<img border=0 alt='<TMPL_VAR NAME=sortorder>' src="images/<TMPL_VAR NAME=sortorder>.png"></TMPL_IF></a></td>
+	<td class="underline" nowrap><a href="dns.cgi?sid=<TMPL_VAR NAME=sid>&page=domlist&offset=<TMPL_VAR NAME=offset>">Status<TMPL_IF NAME=sortstatus>&nbsp;<img border=0 alt='<TMPL_VAR NAME=sortorder>' src="images/<TMPL_VAR NAME=sortorder>.png"></TMPL_IF></a></td>
+	<td class="underline" align="center" nowrap><a href="dns.cgi?sid=<TMPL_VAR NAME=sid>&page=domlist&offset=<TMPL_VAR NAME=offset>">Group<TMPL_IF NAME=sortgroup>&nbsp;<img border=0 alt='<TMPL_VAR NAME=sortorder>' src="images/<TMPL_VAR NAME=sortorder>.png"></TMPL_IF></a></td>
+<TMPL_ELSE>
+	<td class="underline" nowrap>Group</td>
+	<td class="underline" nowrap width="5%">Parent Group</td>
+	<td class="underline" nowrap width="5%">Users</td>
+	<td class="underline" align="center" nowrap width="5%">Domains</td>
+</TMPL_IF>
+	<td class="underline" width="1%">Delete</td>
+</tr>
+<TMPL_IF name=grptable>
+<TMPL_LOOP name=grptable>
+<tr class="row<TMPL_VAR name=bg>">
+	<td><a href="dns.cgi?sid=<TMPL_VAR NAME=sid>&page=grpman&id=<TMPL_VAR NAME=grpid>"><TMPL_VAR NAME=grpname></a></td>
+	<td width="5%" nowrap><TMPL_VAR name=pgrp></td>
+	<td width="5%" nowrap><TMPL_VAR name=nusers></td>
+	<td width="5%" nowrap><TMPL_VAR name=ndomains></td>
+	<td width="1%" nowrap align=center><a href="dns.cgi?sid=<TMPL_VAR NAME=sid>&page=delgrp&id=<TMPL_VAR NAME=grpid>"><img src="images/trash2.png" border=0></a></td>
+</tr>
+</TMPL_LOOP>
+<TMPL_ELSE>
+<tr><td colspan=5>No groups found</td></tr>
+</TMPL_IF>
+</table>
+
+</td>
+</table>
Index: /trunk/templates/newgrp.tmpl
===================================================================
--- /trunk/templates/newgrp.tmpl	(revision 19)
+++ /trunk/templates/newgrp.tmpl	(revision 19)
@@ -0,0 +1,40 @@
+<!-- <TMPL_VAR NAME=sid> -->
+<table class="wholepage"><tr>
+<TMPL_INCLUDE NAME="menu.tmpl">
+
+<td align=center>
+<TMPL_IF add_failed><span class="errmsg">Error adding group <TMPL_VAR NAME=newgroup>: <TMPL_VAR 
+NAME=errmsg></span></TMPL_IF>
+<form action="dns.cgi">
+
+<input type="hidden" name="sid" value="<TMPL_VAR NAME=sid>">
+<input type="hidden" name="page" value="newgrp">
+<input type="hidden" name="action" value="add">
+
+<table border=0 width="450" bgcolor="white">
+<tr><td>
+    <table border=0 cellspacing=2 cellpadding=2 width="100%">
+	<tr bgcolor="#cccccc"><td colspan=2 align="center">Add Group</td></tr>
+
+	<tr bgcolor="#eeeeee">
+		<td width="50%">Group Name:</td>
+		<td width="50%" align="left"><input type="text" name="newgroup" value="<TMPL_VAR NAME=newgroup>"></td>
+	</tr>
+	<tr bgcolor="#eeeeee">
+		<td>Add as subgroup of:</td>
+		<td><select name=pargroup>
+<TMPL_LOOP name=pargroup>		<option value="<TMPL_VAR NAME=grpval>"<TMPL_IF grpactive> selected</TMPL_IF>><TMPL_VAR name=grpname></option>
+</TMPL_LOOP>
+		</select></td>
+	</tr>
+	<tr><td colspan=2 align="center"><input type="submit" value="add"></td></tr>
+<tr><td colspan=2>tmp note:  radio button select "group template" vs "clone group"?</td></tr>
+    </table>
+    </td>
+</tr>
+</table>
+
+</form>
+
+</td></tr>
+</table>
