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

albertel lon-capa-cvs@mail.lon-capa.org
Fri, 15 Mar 2002 23:39:41 -0000


albertel		Fri Mar 15 18:39:41 2002 EDT

  Modified files:              
    /loncom/interface	lonnavmaps.pm 
  Log:
  - trying to add in problem resources on a .page into the listing.
  
  
  
Index: loncom/interface/lonnavmaps.pm
diff -u loncom/interface/lonnavmaps.pm:1.30 loncom/interface/lonnavmaps.pm:1.31
--- loncom/interface/lonnavmaps.pm:1.30	Fri Mar 15 16:56:11 2002
+++ loncom/interface/lonnavmaps.pm	Fri Mar 15 18:39:41 2002
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Navigate Maps Handler
 #
-# $Id: lonnavmaps.pm,v 1.30 2002/03/15 21:56:11 albertel Exp $
+# $Id: lonnavmaps.pm,v 1.31 2002/03/15 23:39:41 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -268,96 +268,106 @@
     return 'p'.$code.$tcode.'"'.$ctext.'"';
 }
 
-# ------------------------------------------------------------ Build page table
 
-sub tracetable {
-    my ($sofar,$rid,$beenhere)=@_;
-    my $further=$sofar;
-    unless ($beenhere=~/\&$rid\&/) {
-	$beenhere.=$rid.'&';  
-	
-	if (defined($hash{'is_map_'.$rid})) {
-	    $sofar++;
-	    my $tprefix='';
-	    if ($hash{'map_type_'.$hash{'map_pc_'.$hash{'src_'.$rid}}} 
-		eq 'sequence') { 
-		$tprefix='h'; 
-	    } else {
-		#if it's a page we need to still pull out the problems
+sub addresource {
+    my ($resource,$sofar,$rid,$showtypes)=@_;
+    &Apache::lonxml::debug("Adding $resource allowing $showtypes");
+    if ($showtypes eq 'problems') {
+	if ($resource!~/\.(problem|exam|quiz|assess|survey|form)$/) {
+	    &Apache::lonxml::debug("Returning early");
+	    return;
+	} 
+    }
+    my $brepriv=&Apache::lonnet::allowed('bre',$resource);
+    if ($hash{'src_'.$rid}) {
+	if (($brepriv eq '2') || ($brepriv eq 'F')) {
+	    my $pprefix='';
+	    if ($resource=~/\.(problem|exam|quiz|assess|survey|form)$/) {
+		$pprefix=&astatus($rid);
 	    }
 	    if (defined($rows[$sofar])) {
-		$rows[$sofar].='&'.$tprefix.$rid;
+		$rows[$sofar].='&'.$pprefix.$rid;
 	    } else {
-		$rows[$sofar]=$tprefix.$rid;
+		$rows[$sofar]=$pprefix.$rid;
 	    }
-	    if ((defined($hash{'map_start_'.$hash{'src_'.$rid}})) &&
-		(defined($hash{'map_finish_'.$hash{'src_'.$rid}})) &&
-		($tprefix eq 'h')) {
-		my $frid=$hash{'map_finish_'.$hash{'src_'.$rid}};
-		$sofar=
-		    &tracetable($sofar,$hash{'map_start_'.$hash{'src_'.$rid}},
-				'&'.$frid.'&');
-		$sofar++;
-		if ($hash{'src_'.$frid}) {
-		    my $brepriv=&Apache::lonnet::allowed('bre',$hash{'src_'.$frid});
-		    if (($brepriv eq '2') || ($brepriv eq 'F')) {
-			my $pprefix='';
-			if ($hash{'src_'.$frid}=~
-			    /\.(problem|exam|quiz|assess|survey|form)$/) {
-			    $pprefix=&astatus($frid);
-			
-			}
-			if (defined($rows[$sofar])) {
-			    $rows[$sofar].='&'.$pprefix.$frid;
-			} else {
-			    $rows[$sofar]=$pprefix.$frid;
-			}
-		    }
-		}
+	}
+    }
+}
+
+sub followlinks () {
+    my ($rid,$sofar,$beenhere,$further,$showtypes)=@_;
+    my $mincond=1;
+    my $next='';
+    foreach (split(/\,/,$hash{'to_'.$rid})) {
+	my $thiscond=
+	    &Apache::lonnet::directcondval($hash{'condid_'.$hash{'undercond_'.$_}});
+	if ($thiscond>=$mincond) {
+	    if ($next) {
+		$next.=','.$_.':'.$thiscond;
+	    } else {
+		$next=$_.':'.$thiscond;
 	    }
+	    if ($thiscond>$mincond) { $mincond=$thiscond; }
+	}
+    }
+    foreach (split(/\,/,$next)) {
+	my ($linkid,$condval)=split(/\:/,$_);
+	if ($condval>=$mincond) {
+	    &Apache::lonxml::debug("following link $linkid");
+	    my $now=&tracetable($sofar,$hash{'goesto_'.$linkid},
+				$beenhere,$showtypes);
+	    if ($now>$further) { $further=$now; }
+	}
+    }
+    return $further;
+}
+# ------------------------------------------------------------ Build page table
+
+sub tracetable {
+    my ($sofar,$rid,$beenhere,$showtypes)=@_;
+    my $further=$sofar;
+    #$Apache::lonxml::debug=1;
+    &Apache::lonxml::debug("$rid ; $sofar ; $beenhere");
+    if ($beenhere=~/\&$rid\&/) {
+	return $further;
+    }
+    $beenhere.=$rid.'&';  
+
+    if (defined($hash{'is_map_'.$rid})) {
+	$sofar++;
+	my $tprefix='';
+	if ($hash{'map_type_'.$hash{'map_pc_'.$hash{'src_'.$rid}}}
+	    eq 'sequence') {
+	    $tprefix='h';
+	} elsif ($hash{'map_type_'.$hash{'map_pc_'.$hash{'src_'.$rid}}}
+		 eq 'page') {
+	    $tprefix='i';
+	    $showtypes='problems';
+	}
+	if (defined($rows[$sofar])) {
+	    $rows[$sofar].='&'.$tprefix.$rid;
 	} else {
-	    $sofar++;
-	    if ($hash{'src_'.$rid}) {
-		my $brepriv=&Apache::lonnet::allowed('bre',$hash{'src_'.$rid});
-		if (($brepriv eq '2') || ($brepriv eq 'F')) {
-		    my $pprefix='';
-		    if ($hash{'src_'.$rid}=~
-			/\.(problem|exam|quiz|assess|survey|form)$/) {
-			$pprefix=&astatus($rid);
-		    }
-		    if (defined($rows[$sofar])) {
-			$rows[$sofar].='&'.$pprefix.$rid;
-		    } else {
-			$rows[$sofar]=$pprefix.$rid;
-		    }
-		}
-	    }
+	    $rows[$sofar]=$tprefix.$rid;
 	}
-	
-	if (defined($hash{'to_'.$rid})) {
-	    my $mincond=1;
-	    my $next='';
-	    foreach (split(/\,/,$hash{'to_'.$rid})) {
-		my $thiscond=
-		    &Apache::lonnet::directcondval($hash{'condid_'.$hash{'undercond_'.$_}});
-		if ($thiscond>=$mincond) {
-		    if ($next) {
-			$next.=','.$_.':'.$thiscond;
-		    } else {
-			$next=$_.':'.$thiscond;
-		    }
-		    if ($thiscond>$mincond) { $mincond=$thiscond; }
-		}
-	    }
-	    foreach (split(/\,/,$next)) {
-		my ($linkid,$condval)=split(/\:/,$_);
-		if ($condval>=$mincond) {
-		    my $now=&tracetable($sofar,$hash{'goesto_'.$linkid},$beenhere);
-		    if ($now>$further) { $further=$now; }
-		}
-	    }
+	if ((defined($hash{'map_start_'.$hash{'src_'.$rid}})) &&
+	    (defined($hash{'map_finish_'.$hash{'src_'.$rid}}))) {
+	    my $frid=$hash{'map_finish_'.$hash{'src_'.$rid}};
+	    $sofar=&tracetable($sofar,
+			       $hash{'map_start_'.$hash{'src_'.$rid}},
+			       '&'.$frid.'&',$showtypes);
+	    $sofar++;
+	    &addresource($hash{'src_'.$frid},$sofar,$frid,$showtypes);
+	    if ($tprefix eq 'i') { $showtypes=''; }
 	}
+    } else {
+	$sofar++;
+	&addresource($hash{'src_'.$rid},$sofar,$rid,$showtypes);
     }
+
+    if (defined($hash{'to_'.$rid})) {
+	$further=&followlinks($rid,$sofar,$beenhere,$further,$showtypes);
+    }
+
     return $further;
 }
 
@@ -482,6 +492,7 @@
 
 	for ($i=0;$i<=$#rows;$i++) {
 	    if ($rows[$i]) {
+		&Apache::lonxml::debug($rows[$i]);
 		$contents++;
 		my @colcont=split(/\&/,$rows[$i]);
 		$lcm*=($#colcont+1)/euclid($lcm,($#colcont+1));
@@ -592,6 +603,7 @@
 			    $add='<th bgcolor="#AAFF55"><a name="'.$rid.'">';
 			    $adde='</th>';
 			}
+			if ($rid=~/^i(.+)/) { $rid=$1; }
 			if ($rid=~/^p(\d)(\d)\"([\w\: \(\)\/\,]*)\"(.+)/) {
 			    # sub astatus describes what code/tcode mean
 			    my $code=$1;