[LON-CAPA-cvs] cvs: loncom /interface lonstatistics.pm

raeburn lon-capa-cvs@mail.lon-capa.org
Mon, 01 May 2006 05:39:45 -0000


This is a MIME encoded message

--raeburn1146461985
Content-Type: text/plain

raeburn		Mon May  1 01:39:45 2006 EDT

  Modified files:              
    /loncom/interface	lonstatistics.pm 
  Log:
  Make group filter available in CHRT. 
  
  
--raeburn1146461985
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20060501013945.txt"

Index: loncom/interface/lonstatistics.pm
diff -u loncom/interface/lonstatistics.pm:1.129 loncom/interface/lonstatistics.pm:1.130
--- loncom/interface/lonstatistics.pm:1.129	Wed Mar 15 14:41:26 2006
+++ loncom/interface/lonstatistics.pm	Mon May  1 01:39:44 2006
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lonstatistics.pm,v 1.129 2006/03/15 19:41:26 albertel Exp $
+# $Id: lonstatistics.pm,v 1.130 2006/05/01 05:39:44 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -49,7 +49,8 @@
 use vars qw(
     @FullClasslist 
     @Students
-    @Sections 
+    @Sections
+    @Groups 
     %StudentData
     @StudentDataOrder
     @SelectedStudentData
@@ -88,6 +89,8 @@
 
 =item @Sections The sections available in this class
 
+=item @Groups The groups available in the class
+
 =item $curr_student The student currently being examined
 
 =item $prev_student The student previous in the classlist
@@ -124,6 +127,8 @@
 
 =item @Sections
 
+=item @Groups
+
 =item %StudentData
 
 =item @StudentDataOrder
@@ -146,6 +151,7 @@
     undef(@FullClasslist);
     undef(@Students);
     undef(@Sections);
+    undef(@Groups);
     undef(%StudentData);
     undef(@SelectedStudentData);
     undef($curr_student);
@@ -171,6 +177,8 @@
 
 =item @Sections
 
+=item @Groups 
+
 =item %StudentData
 
 =item @SelectedStudentData
@@ -201,6 +209,7 @@
     my ($classlist,$field_names) = &Apache::loncoursedata::get_classlist($cdom,
 									$cnum);
     my @selected_sections = &get_selected_sections();
+    my @selected_groups = &get_selected_groups();
     #
     # Deal with instructors with restricted section access
     if ($env{'request.course.sec'} !~ /^\s*$/) {
@@ -208,7 +217,7 @@
     }
     #
     # Set up %StudentData
-    @StudentDataOrder = qw/fullname username domain id section status comments/;
+    @StudentDataOrder = qw/fullname username domain id section status groups comments/;
     foreach my $field (@StudentDataOrder) {
         $StudentData{$field}->{'title'} = &mt($field);
         $StudentData{$field}->{'base_width'} = length(&mt($field));
@@ -220,6 +229,16 @@
     $enrollment_status = 'Active';
     $enrollment_status = $env{'form.Status'} if (exists($env{'form.Status'}));
     #
+    # Get groupmembership
+    my (%curr_groups,$classgroups,$studentgroups);
+    my $numgroups = &Apache::loncommon::coursegroups(\%curr_groups,$cdom,$cnum);
+    if ($numgroups) {
+        ($classgroups,$studentgroups) = 
+                     &Apache::loncoursedata::get_group_memberships($classlist,
+                                                                   $cdom,$cnum);
+    }
+    my $now = time;
+
     # Process the classlist
     while (my ($student,$student_data) = each (%$classlist)) {
         my $studenthash = ();
@@ -234,6 +253,16 @@
                 $StudentData{$field}->{'width'} = $length; 
             }
         }
+        my @studentsgroups = &Apache::loncoursedata::get_students_groups
+                                                   ($student,$enrollment_status,
+                                                    $classgroups);
+        if (@studentsgroups) {
+            $studenthash->{'groups'} = join(', ',@studentsgroups);
+            $studenthash->{'groupref'} = \@studentsgroups;
+        } else {
+            $studenthash->{'groups'} = 'none';
+            $studenthash->{'groupref'} = []; 
+        }
         push (@FullClasslist,$studenthash);
         #
         # Build up a list of sections
@@ -251,8 +280,27 @@
                  (($studenthash->{'status'} eq $enrollment_status) || 
                   ($enrollment_status eq 'Any')) 
                  ){
-                push (@Students,$studenthash);
-                last;
+                my $groupcheck = 0;
+                if (grep/^all$/,@selected_groups) {
+                    push (@Students,$studenthash);
+                    last;
+                } elsif (grep/^none$/,@selected_groups) {
+                    if ($studenthash->{'groups'} eq 'none') {
+                        push (@Students,$studenthash);
+                        last;
+                    }     
+                } else {
+                    foreach my $group (@selected_groups) {
+                        if (grep/^$group$/,@studentsgroups) {
+                            push (@Students,$studenthash);
+                            $groupcheck = 1;
+                            last;
+                        }
+                    }
+                    if ($groupcheck) {
+                        last;
+                    }
+                }
             }
         }
     }
@@ -264,6 +312,10 @@
         @Sections = sort {$a cmp $b} keys(%Sections);
         unshift(@Sections,'all'); # Put 'all' at the front of the list
     }
+    # Sort the groups
+    @Groups = sort {$a cmp $b} keys(%{$studentgroups});
+    unshift(@Groups,'all'); # Put 'all' at the front of the list
+
     #
     # Sort the Students
     my $sortby = 'fullname';
@@ -347,12 +399,35 @@
 
 #######################################################
 #######################################################
-
+                                                                                    
+=pod
+                                                                                    
+=item get_selected_groups
+                                                                                    
+Returns an array of the selected groups
+                                                                                    
+=cut
+                                                                                    
+#######################################################
+#######################################################
+sub get_selected_groups {
+    my @selected_groups =
+        &Apache::loncommon::get_env_multiple('form.Group');
+    @selected_groups = ('all') if (! @selected_groups);
+    foreach my $grp (@selected_groups) {
+        if ($grp eq 'all') {
+            @selected_groups = ('all');
+            last;
+        }
+    }
+    return @selected_groups;
+}
+                                                                                    
 =pod
 
 =item &section_and_enrollment_description
 
-Returns a string describing the currenly selected section(s) and 
+Returns a string describing the currently selected section(s), group(s) and 
 enrollment status.  
 
 Inputs: mode = 'plaintext' or 'localized'  (defaults to 'localized')
@@ -367,48 +442,69 @@
     my ($mode) = @_;
     if (! defined($mode)) { $mode = 'localized'; }
     my @sections = &Apache::lonstatistics::get_selected_sections();
+    my @groups = &Apache::lonstatistics::get_selected_groups();
     my $description;
     if ($mode eq 'localized') {
-        $description = &mt('Unable to determine section and enrollment');
+        $description = &mt('Unable to determine section, groups and enrollment');
     } elsif ($mode eq 'plaintext') {
-        $description = 'Unable to determine section and enrollment';
+        $description = 'Unable to determine section, groups and enrollment';
     } else {
         $description = 'Bad parameter passed to lonstatistics::section_and_enrollment_description';
         &Apache::lonnet::logthis($description);
     }
-    if (scalar(@sections) == 1 && $sections[0] ne 'all') {
+    $description = &section_or_group_text($mode,'section',@sections).
+                   ' '.&section_or_group_text($mode,'group',@groups);
+    if ($mode eq 'localized') {
+        $description .= &mt(' [_1] enrollment status.',$env{'form.Status'});
+    } elsif ($mode eq 'plaintext') {
+        $description .= ' '.$env{'form.Status'}.' enrollment status.';
+    }
+    return $description;
+}
+
+#######################################################
+#######################################################
+
+sub section_or_group_text {
+    my ($mode,$type,@items) = @_;
+    my $text;
+    my %phrases = ();
+    %{$phrases{'section'}} = (
+                              single => 'Section',
+                              all => 'All sections',
+                              plural => 'Sections',
+                             );
+    %{$phrases{'group'}} = (
+                              single => 'Group',
+                              all => 'All groups',
+                              plural => 'Groups',
+                             );
+    if (scalar(@items) == 1 && $items[0] ne 'all') {
         if ($mode eq 'localized') {
-            $description = &mt('Section [_1]. [_2] enrollment status.',
-                               $sections[0],$env{'form.Status'});
+            $text = &mt('[_1] [_2].',$phrases{$type}{single},$items[0]);
         } elsif ($mode eq 'plaintext') {
-            $description = 'Section '.$sections[0].'. '.
-                $env{'form.Status'}.' enrollment status.';
+            $text = $phrases{$type}{single}.' '.$items[0].'.';
+
         }
-    } elsif (scalar(@sections) && $sections[0] eq 'all') {
+    } elsif (scalar(@items) && $items[0] eq 'all') {
         if ($mode eq 'localized') {
-            $description = &mt('All sections. [_1] enrollment status.',
-                               $env{'form.Status'});
+            $text = &mt('[_1].',$phrases{$type}{all});
         } elsif ($mode eq 'plaintext') {
-            $description = 'All sections. '.
-                $env{'form.Status'}.' enrollment status.';
+            $text = $phrases{$type}{all}.'.';
         }
-    } elsif (scalar(@sections)) {
-        my $lastsection = pop(@sections);
+    } elsif (scalar(@items)) {
+        my $lastitem = pop(@items);
         if ($mode eq 'localized') {
-            $description = &mt('Sections [_1] and [_2]. [_3] enrollment status.',
-                               join(', ',@sections),$lastsection,
-                               $env{'form.Status'});
+            $text = &mt('[_1] [_2] and [_3].',$phrases{$type}{plural},
+                        join(', ',@items),$lastitem);
         } elsif ($mode eq 'plaintext') {
-            $description = 
-                'Sections '.join(', ',@sections).' and '.$lastsection.'. '.
-                $env{'form.Status'}.' enrollment status.';
+            $text = $phrases{$type}{plural}.' '.join(', ',@items).' and '.
+                    $lastitem.'.';
         }
     }
-    return $description;
+    return $text;
 }
 
-#######################################################
-#######################################################
 
 =pod
 
@@ -758,6 +854,65 @@
     return $Str;
 }
 
+##############################################
+##############################################
+                                                                                    
+=pod
+                                                                                    
+=item &GroupSelect($elementname,$status,$numvisible)
+                                                                                    
+Returns html for a selection box allowing the user to choose one (or more)
+of the groups in the course.
+                                                                                    
+Uses the package variables @Groups
+=over 4
+                                                                                    
+=item $elementname The name of the HTML form element
+                                                                                    
+=item $status 'multiple' or 'single' selection box
+                                                                                    
+=item $numvisible The number of options to be visible
+                                                                                    
+=back
+                                                                                    
+=cut
+                                                                                    
+##############################################
+##############################################
+sub GroupSelect {
+    my ($elementname,$status,$numvisible)=@_;
+    if ($numvisible < 1) {
+        return;
+    }
+    #
+    # Make sure we have the data we need to continue
+    if (! @Groups) {
+        &PrepareClasslist();
+    }
+    #
+    # Build the form element
+    my $Str = "\n";
+    $Str .= '<select name="'.$elementname.'" ';
+    if ($status ne 'single') {
+        $Str .= 'multiple="true" ';
+    }
+    $Str .= 'size="'.$numvisible.'" >'."\n";
+    #
+    # Loop through the groups
+    foreach my $s (@Groups) {
+        $Str .= '    <option value="'.$s.'" ';
+        foreach my $group (&get_selected_groups()) {
+            if ($s eq $group) {
+                $Str .= 'selected ';
+                last;
+            }
+        }
+        $Str .= '>'.$s."</option>\n";
+    }
+    $Str .= "</select>\n";
+}
+
+
 ##################################################
 ##################################################
 sub DisplayClasslist {
@@ -771,12 +926,16 @@
     $Str .= '<p><table cellspacing="5">'."\n";
     $Str .= '<tr>';
     $Str .= '<th align="center"><b>'.&mt('Sections').'</b></th>';
+    $Str .= '<th align="center"><b>'.&mt('Groups').'</b></th>';
     $Str .= '<th align="center"><b>'.&mt('Enrollment Status').'</b></th>';
     $Str .= '</tr>'.$/;
     $Str .= '<tr>';
     $Str .= '<td>'.
         &Apache::lonstatistics::SectionSelect('Section','multiple',5).
         '</td>';
+    $Str .=  '<td>'.
+        &Apache::lonstatistics::GroupSelect('Group','multiple',5).
+        '</td>';
     $Str .= '<td>'.
         &Apache::lonhtmlcommon::StatusOptions(undef,undef,5).
         '</td>';
@@ -788,7 +947,7 @@
     $r->print($Str);
     $r->rflush();
     #
-    my @Fields = ('fullname','username','domain','id','section','status');
+    my @Fields = ('fullname','username','domain','id','section','status','groups');
     #
     $Str = '';
     my @selected_sections = &get_selected_sections();

--raeburn1146461985--