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

minaeibi lon-capa-cvs@mail.lon-capa.org
Thu, 28 Feb 2002 23:14:57 -0000


minaeibi		Thu Feb 28 18:14:57 2002 EDT

  Modified files:              
    /loncom/interface	lonchart.pm 
  Log:
  Added button for showing all students active or non-active
  
  
Index: loncom/interface/lonchart.pm
diff -u loncom/interface/lonchart.pm:1.32 loncom/interface/lonchart.pm:1.33
--- loncom/interface/lonchart.pm:1.32	Wed Feb 27 20:49:33 2002
+++ loncom/interface/lonchart.pm	Thu Feb 28 18:14:57 2002
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # (Publication Handler
 #
-# $Id: lonchart.pm,v 1.32 2002/02/28 01:49:33 albertel Exp $
+# $Id: lonchart.pm,v 1.33 2002/02/28 23:14:57 minaeibi Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -43,7 +43,7 @@
 # 9/8 Gerd Kortemeyer
 # 10/1, 10/19, 11/17, 11/22, 11/24, 11/28 12/18 Behrouz Minaei
 # YEAR=2002
-# 2/1, 2/6, 2/19 Behrouz Minaei
+# 2/1, 2/6, 2/19, 2/28 Behrouz Minaei
 #
 ###
 
@@ -64,7 +64,7 @@
 my @students;
 my @PreCol;
 my $r;
-
+ 
 # ------------------------------------------------------------- Find out status
 
 sub ExtractStudentData {
@@ -225,6 +225,55 @@
 }
 
 
+sub usection2 {
+    my ($udom,$unam,$courseid,$ActiveFlag)=@_;
+    $courseid=~s/\_/\//g;
+    $courseid=~s/^(\w)/\/$1/;
+    foreach my $elem(split(/\&/,&Apache::lonnet::reply('dump:'.$udom.':'.$unam.':roles',
+                     &Apache::lonnet::homeserver($unam,$udom)))) {
+        my ($key,$value)=split(/\=/,$elem);
+        $key=&Apache::lonnet::unescape($key);
+        if ($key=~/^$courseid(?:\/)*(\w+)*\_st$/) {
+            my $section=$1;
+            if ($key eq $courseid.'_st') { $section=''; }
+	    my ($dummy,$end,$start)=split(/\_/,&Apache::lonnet::unescape($value));
+            my $now=time;
+            my $notactive=0;
+            if ($start) {
+		if ($now<$start) { $notactive=1; }
+            }
+            if ($end) {
+                if ($now>$end) { $notactive=1; }
+            } 
+	    if ($ActiveFlag == 1) { $notactive=0; }
+            unless ($notactive) { return $section; }
+        }
+    }
+    return '-1';
+}
+
+
+sub usection {
+    my ($udom,$unam,$courseid)=@_;
+    $courseid=~s/\_/\//g;
+    $courseid=~s/^(\w)/\/$1/;
+    map {
+        my ($key,$value)=split(/\=/,$_);
+        $key=&Apache::lonnet::unescape($key);
+        if ($key=~/^$courseid(?:\/)*(\w+)*\_st$/) {
+            my $section=$1;
+            if ($key eq $courseid.'_st') { $section=''; }
+	    my ($dummy,$end,$start)=split(/\_/,&Apache::lonnet::unescape($value));
+#            $section=($section) ? $section : '(none)';
+#            $section=(int($section)) ? int($section) : $section;
+#            $r->print($unam.'...'.$section.'<br>');
+	    return $section;
+        }
+    } split(/\&/,&Apache::lonnet::reply('dump:'.$udom.':'.$unam.':roles',
+                        &Apache::lonnet::homeserver($unam,$udom)));
+    return '';
+}
+
 sub BuildChart {
 # ----------------------- Get first and last resource, see if there is anything
     my $firstres=$hash{'map_start_/res/'.$ENV{'request.course.uri'}};
@@ -244,21 +293,26 @@
 		my ($end,$start)=split(/\:/,&Apache::lonnet::unescape($value));
 		my $active=1;
 		if (($end) && ($now>$end)) { $active=0; }
+
+		if ($ENV{'form.active'} eq 'All Students') { $active=1; }
+
 		if ($active) {
 		    my $thisindex=$#students+1;
 		    $name=&Apache::lonnet::unescape($name);
 		    $students[$thisindex]=$name;
 		    my ($sname,$sdom)=split(/\:/,$name);
 		    $PreCol[$thisindex]=$sname.':';
-		    my $ssec=&Apache::lonnet::usection($sdom,$sname,$cid);
+
+		    my $ssec=&usection($sdom,$sname,$cid);#,$active);
+
 		    if ($ssec==-1) {
 			$rowlabels[$thisindex]=
 			    'Data not available: '.$name;
 		    } else {
 			my %reply=&Apache::lonnet::idrget($sdom,$sname);
 			my $reply=&Apache::lonnet::reply('get:'.$sdom.':'.$sname.
-                                     ':environment:lastname&generation&firstname&middlename',
-                                                 &Apache::lonnet::homeserver($sname,$sdom));
+                                  ':environment:lastname&generation&firstname&middlename',
+                                  &Apache::lonnet::homeserver($sname,$sdom));
 			#$ssec=(int($ssec)) ? int($ssec) : $ssec;
 			my $sec=sprintf('%3s',$ssec);
 			$rowlabels[$thisindex]=$sec.' '.$reply{$sname}.' ';
@@ -306,22 +360,31 @@
 }
 
 sub CreateForm {
+    my $OpSel1='';
+    my $OpSel2='';
+    if ( $ENV{'form.active'} eq 'All Students' ) { $OpSel2='selected'; }
+    else { $OpSel1 = 'selected'; }
+
     my $Ptr = '<form name=stat method=post action="/adm/chart" >'."\n";
     $Ptr .= '<b> Sort by: &nbsp; </b>'."\n";
     $Ptr .= '&nbsp;&nbsp;&nbsp;';
-    $Ptr .= '<input type=submit name=sort value="Email Name" />'."\n";
+    $Ptr .= '<input type=submit name=sort value="User Name" />'."\n";
     $Ptr .= '&nbsp;&nbsp;&nbsp;';
     $Ptr .= '<input type=submit name=sort value="Last Name" />'."\n";
     $Ptr .= '&nbsp;&nbsp;&nbsp;';
     $Ptr .= '<input type=submit name=sort value="Section"/>'."\n";
-    $Ptr .= '<br>';
+    $Ptr .= '<br><br>';
+    $Ptr .= '<b> Activation Area: &nbsp; </b>'."\n".
+            '<select name="active"> <option '.$OpSel1.' >Active Students</option>'."\n".
+	    '<option '.$OpSel2.'>All Students</option> </select> '."\n";
+    $Ptr .= '&nbsp;&nbsp;&nbsp;';
     $Ptr .= '<input type=submit name=sort value="Recalculate Chart"/>'."\n";
     $Ptr .= '</form>'."\n";
     $r->print( $Ptr );
 }
 
 sub CacheChart {
-    my %list = ();
+    my @list = ();
     my $count=0;
 
     my $Pos = $ENV{'form.sort'};
@@ -332,11 +395,11 @@
     foreach my $key( keys %CachData) { 
 	my @Temp=split(/\:/,$key);
 	my $Use = $Temp[$Pos];
-	$list{$Use.$key}=$key;
+	$list[$count]=$Use.$key.'*'.$CachData{$key};
 	$count++;
     }
 
-    my @order = sort(keys(%list));
+    @list = sort (@list);
 
     $r->print('<h3>'.$count.' students</h3>');
     &CreateForm();
@@ -344,7 +407,8 @@
     
     $r->print('<p><pre>');
     for ( my $n; $n < $count; $n++) {
-	$r->print($CachData{$list{$order[$n]}}.'<br>');
+	my ($dummy, $Line) = split(/\*/,$list[$n]);
+	$r->print($Line.'<br>');
     }	
     $r->print('</pre>');
 }