--- loncom/interface/lonhelper.pm	2006/03/06 23:32:31	1.132
+++ loncom/interface/lonhelper.pm	2006/03/07 21:36:49	1.134
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # .helper XML handler to implement the LON-CAPA helper
 #
-# $Id: lonhelper.pm,v 1.132 2006/03/06 23:32:31 foxr Exp $
+# $Id: lonhelper.pm,v 1.134 2006/03/07 21:36:49 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -2996,8 +2996,12 @@ package Apache::lonhelper::section;
 <section> allows the user to choose one or more sections from the current
 course.
 
-It takes the standard attributes "variable", "multichoice", and
-"nextstate", meaning what they do for most other elements.
+It takes the standard attributes "variable", "multichoice",
+"allowempty" and "nextstate", meaning what they do for most other
+elements.
+
+also takes a boolean 'onlysections' whcih will restrict this to only
+have sections and not include groups
 
 =cut
 
@@ -3027,6 +3031,7 @@ sub start_section {
     $paramHash->{'variable'} = $token->[2]{'variable'};
     $helper->declareVar($paramHash->{'variable'});
     $paramHash->{'multichoice'} = $token->[2]{'multichoice'};
+    $paramHash->{'allowempty'} = $token->[2]{'allowempty'};
     if (defined($token->[2]{'nextstate'})) {
         $paramHash->{NEXTSTATE} = $token->[2]{'nextstate'};
     }
@@ -3046,8 +3051,16 @@ sub start_section {
     } 
    
     for my $sectionName (sort(keys(%choices))) {
-        
-        push @{$paramHash->{CHOICES}}, [$sectionName, $sectionName];
+	push @{$paramHash->{CHOICES}}, [$sectionName, $sectionName];
+    }
+    return if ($token->[2]{'onlysections'});
+
+    # add in groups to the end of the list
+    my %curr_groups;
+    if (&Apache::loncommon::coursegroups(\%curr_groups)) {
+	foreach my $group_name (sort(keys(%curr_groups))) {
+	    push(@{$paramHash->{CHOICES}}, [$group_name, $group_name]);
+	}
     }
 }    
 
@@ -3067,10 +3080,12 @@ package Apache::lonhelper::group;
  
 =head2 Element: groupX<group, helper element>
  
-<section> allows the user to choose one or more groups from the current course.
+<group> allows the user to choose one or more groups from the current course.
+
+It takes the standard attributes "variable", "multichoice",
+ "allowempty" and "nextstate", meaning what they do for most other
+ elements.
 
-It takes the standard attributes "variable", "multichoice", and "nextstate", meaning what they do for most other elements.
- 
 =cut
 
 no strict;
@@ -3099,6 +3114,7 @@ sub start_group {
     $paramHash->{'variable'} = $token->[2]{'variable'};
     $helper->declareVar($paramHash->{'variable'});
     $paramHash->{'multichoice'} = $token->[2]{'multichoice'};
+    $paramHash->{'allowempty'} = $token->[2]{'allowempty'};
     if (defined($token->[2]{'nextstate'})) {
         $paramHash->{NEXTSTATE} = $token->[2]{'nextstate'};
     }
@@ -3106,18 +3122,14 @@ sub start_group {
     # Populate the CHOICES element
     my %choices;
 
-    my $numgroups;
     my %curr_groups;
     if (&Apache::loncommon::coursegroups(\%curr_groups)) {
-        foreach my $group_name (keys %curr_groups) {
-            $choices{$group_name} = $group_name;
-        }
-    }
-    foreach my $group_name (sort(keys(%choices))) {
-        push @{$paramHash->{CHOICES}}, [$group_name, $group_name];
+	foreach my $group_name (sort(keys(%curr_groups))) {
+	    push(@{$paramHash->{CHOICES}}, [$group_name, $group_name]);
+	}
     }
 }
-                                                                                    
+
 sub end_group {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;