--- loncom/interface/spreadsheet/classcalc.pm	2003/12/08 19:39:08	1.17
+++ loncom/interface/spreadsheet/classcalc.pm	2014/02/12 16:53:09	1.32
@@ -1,5 +1,5 @@
 #
-# $Id: classcalc.pm,v 1.17 2003/12/08 19:39:08 matthew Exp $
+# $Id: classcalc.pm,v 1.32 2014/02/12 16:53:09 bisitz Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -83,8 +83,9 @@ sub html_header {
     my $self = shift;
     my ($toprow,$bottomrow);
     &Apache::lonstatistics::clear_classlist_variables();
-    foreach (['Sections',&Apache::lonstatistics::SectionSelect('Section','multpile',3)],
-             ['Enrollment Status',&Apache::lonhtmlcommon::StatusOptions(undef,undef,3)],
+    foreach (['Sections',&Apache::lonstatistics::SectionSelect('Section','multiple',3)],
+             ['Groups',&Apache::lonstatistics::GroupSelect('Group','multiple',3)], 
+             ['Access Status',&Apache::lonhtmlcommon::StatusOptions(undef,undef,3)],
              ['Output Format',$self->output_selector()]) {
         my ($name,$selector) = @{$_};
         $toprow .= '<th align="center"><b>'.&mt($name).'</b></th>';
@@ -93,7 +94,8 @@ sub html_header {
     return "<p>\n<table>\n".
         "<tr>".$toprow."</tr>\n".
         "<tr>".$bottomrow."</tr>\n".
-        "</table>\n</p>";
+        "</table>\n".
+        "</p>";
 }
 
 sub get_title {
@@ -138,6 +140,7 @@ sub outsheet_html {
                                            'username'     => 'Username',
                                            'domain'       => 'Domain',
                                            'section'      => 'Section',
+                                           'groups'       => 'Groups',
                                            'row'          => 'Row',
                                            );
     my $tableheader =<<"END";
@@ -183,6 +186,7 @@ END
   <th>$header{'username'}</th>
   <th>$header{'domain'}</th>
   <th>$header{'section'}</th>
+  <th>$header{'groups'}</th>
   <th>$header{'status'}</th>
 END
     foreach (split(//,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz')){
@@ -209,6 +213,7 @@ END
 		  '<td>'.$link.$student->{'username'}.'</a></td>'.
 		  '<td>'.$student->{'domain'}  .'</td>'.
 		  '<td>'.$student->{'section'} .'</td>'.
+                  '<td>'.$student->{'groups'} .'</td>'.
 		  '<td>'.$student->{'status'}  .'</td>'.
 		  $self->html_row($num_uneditable,$rownum,$exportcolor,
                                   $importcolor).
@@ -222,12 +227,12 @@ sub excel_rows {
     # writes the meat of the spreadsheet to an excel worksheet.  Called
     # by Spreadsheet::outsheet_excel;
     my $self = shift;
-    my ($connection,$worksheet,$cols_output,$rows_output) = @_;
+    my ($connection,$worksheet,$cols_output,$rows_output,$format) = @_;
     #
     # Write a header row
     $cols_output = 0;
-    foreach my $value ('Fullname','Username','Domain','Section','Status','ID') {
-        $worksheet->write($rows_output,$cols_output++,&mt($value));
+    foreach my $value ('Fullname','Username','Domain','Section','Group','Status','ID') {
+        $worksheet->write($rows_output,$cols_output++,&mt($value),$format->{'h4'});
     }
     $rows_output++;    
     #
@@ -241,6 +246,7 @@ sub excel_rows {
                            $student->{'username'},
                            $student->{'domain'},
                            $student->{'section'},
+                           $student->{'groups'},
                            $student->{'status'},
                            $student->{'id'});
         $self->excel_output_row($worksheet,$rownum,$rows_output++,
@@ -257,7 +263,7 @@ sub csv_rows {
     #
     # Write a header row
     $self->csv_output_row($filehandle,undef,
-                   (&mt('Fullname'),&mt('Username'),&mt('Domain'),&mt('Section'),&mt('Status'),&mt('ID')));
+                   (&mt('Fullname'),&mt('Username'),&mt('Domain'),&mt('Section'),&mt('Group'),&mt('Status'),&mt('ID')));
     #
     # Write each students row
     foreach my $student (@Students) {
@@ -268,6 +274,7 @@ sub csv_rows {
                            $student->{'username'},
                            $student->{'domain'},
                            $student->{'section'},
+                           $student->{'groups'},
                            $student->{'status'},
                            $student->{'id'});
         $self->csv_output_row($filehandle,$rownum,@studentdata);
@@ -279,13 +286,17 @@ sub output_options {
     my $self = shift();
     return  ({value       => 'htmlclasslist',
               description => 'Student Sheet Links'},
+             {value       => 'source',
+              description => 'Show Source'},
              {value       => 'html',
               description => 'HTML'},
              {value       => 'excel',
               description => 'Excel'},
              {value       => 'csv',
               description => 'Comma Separated Values'},
-);
+#             {value       => 'xml',
+#              description => 'XML'},
+             );
 }
 
 sub outsheet_recursive_excel {
@@ -297,9 +308,21 @@ sub outsheet_htmlclasslist {
     my $self = shift;
     my ($r) = @_;
     #
-    $r->print('<h3>'.
+    # Determine if we should output expire caches links...
+    my $show_expire_link = 0;
+    if (exists($env{'user.role.dc./'.$env{'request.role.domain'}.'/'})){
+        $show_expire_link = 1;
+    }
+    #
+    if ($show_expire_link) {
+        $r->print('<a href="/adm/classcalc?output_format=htmlclasslist&'.
+                  'recalc=expireallsheets&not_first_run=1">'.
+                  &mt('Expire all student spreadsheets').'</a>'.$/);
+    }
+    #
+    $r->print('<p class="LC_info">'.
               &mt('Click on a student to be taken to their spreadsheet').
-              '</h3>');
+              '</p>');
     #
     my %header=&Apache::lonlocal::texthash(
                                            'student'      => 'Student',
@@ -307,6 +330,7 @@ sub outsheet_htmlclasslist {
                                            'username'     => 'Username',
                                            'domain'       => 'Domain',
                                            'section'      => 'Section',
+                                           'groups'       => 'Groups',
                                            );
     #
     # Prepare to output rows
@@ -319,9 +343,13 @@ sub outsheet_htmlclasslist {
   <th>$header{'username'}</th>
   <th>$header{'domain'}</th>
   <th>$header{'section'}</th>
+  <th>$header{'groups'}</th>
   <th>$header{'status'}</th>
-</tr>
 END
+    if ($show_expire_link) {
+        $tableheader.= '<th>&nbsp;</th>';
+    }
+    $tableheader.= "</tr>\n";
     #
     my $num_output = 0;
     foreach my $student (@Students) {
@@ -329,7 +357,7 @@ END
 	    $r->print("</table>\n".$tableheader);
 	}
         my $link = '<a href="/adm/studentcalc?sname='.$student->{'username'}.
-            '&sdomain='.$student->{'domain'}.'">';
+            '&amp;sdomain='.$student->{'domain'}.'">';
         $student->{'section'} = 'none' if ($student->{'section'} eq '-1');
 	$r->print('<tr>'.
                   '<td>'.$num_output.'</td>'.
@@ -337,8 +365,16 @@ END
 		  '<td>'.$link.$student->{'username'}.'</a></td>'.
 		  '<td>'.$student->{'domain'}  .'</td>'.
 		  '<td>'.$student->{'section'} .'</td>'.
-		  '<td>'.$student->{'status'}  .'</td>'.
-                  "</tr>\n");
+                  '<td>'.$student->{'groups'} .'</td>'.
+		  '<td>'.$student->{'status'}  .'</td>');
+        if ($show_expire_link) {
+            $r->print('<td>'.
+                      '<a href="/adm/classcalc?recalc=student:'.
+                      $student->{'username'}.':'.$student->{'domain'}.'&amp;'.
+                      'output_format=htmlclasslist&amp;'.
+                      'not_first_run=1'.'">'.&mt('Expire Record').'</a>'.$/);
+        }
+        $r->print("</tr>\n");
     }
     $r->print("</table></p>\n");
     return;
@@ -352,19 +388,15 @@ sub compute {
     $self->initialize_safe_space();
     my %c = $self->constants();
     my %f = $self->formulas();
-    my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin
-        ($r,&mt('Spreadsheet Computation Status'),
-         &mt('Spreadsheet Computation'), scalar(@Students));
-    &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,
-                                          &mt('Processing course structure'));
     &Apache::studentcalc::initialize_package();
-    &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,
-                                          &mt('Processing first student'));
+    my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,scalar(@Students));
+    &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,&mt('Processing first student'));
     foreach my $student (@Students) {
         if ($connection->aborted()) { $self->cleanup(); return; }
         my $sname = $student->{'username'}.':'.$student->{'domain'};
 	my $studentsheet = Apache::studentcalc->new
-	    ($student->{'username'},$student->{'domain'},undef);
+	    ($student->{'username'},$student->{'domain'},undef,undef,
+	     $student->{'section'},$student->{'groupref'} );
         if ($connection->aborted()) { $self->cleanup(); return; }
 	my @exportdata = $studentsheet->export_data($r);
         if ($studentsheet->badcalc()) {
@@ -384,8 +416,7 @@ sub compute {
                 $c{$cell} = $data;
             }
 	}
-        &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
-                                                 'last student');
+        &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,'last student');
     }
     &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
     $r->rflush();