--- rat/lonuserstate.pm 2003/10/22 16:10:56 1.61 +++ rat/lonuserstate.pm 2003/12/15 15:26:26 1.69 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Construct and maintain state and binary representation of course for user # -# $Id: lonuserstate.pm,v 1.61 2003/10/22 16:10:56 www Exp $ +# $Id: lonuserstate.pm,v 1.69 2003/12/15 15:26:26 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -25,22 +25,6 @@ # # http://www.lon-capa.org/ # -# (Server for RAT Maps -# -# (Edit Handler for RAT Maps -# (TeX Content Handler -# -# YEAR=2000 -# 05/29/00,05/30 Gerd Kortemeyer) -# 7/1 Gerd Kortemeyer) -# 7/1,7/3,7/4,7/7,7/8,7/10 Gerd Kortemeyer) -# -# 7/15,7/17,7/18,8/1,8/2,8/4,8/5,8/21,8/22,8/23,8/30, -# 9/2,9/4,9/29,9/30,10/2,10/11,10/30,10/31, -# 11/1,11/2,11/14,11/16,11/22,12/28, -# YEAR=2001 -# 07/05/01,08/30,08/31 Gerd Kortemeyer -# ### package Apache::lonuserstate; @@ -76,7 +60,9 @@ sub versiontrack { if ($uri=~/\.(\d+)\.\w+$/) { my $version=$1; $uri=~s/\.\d+\.(\w+)$/\.$1/; - $hash{'version_'.$uri}=$version; + unless ($hash{'version_'.$uri}) { + $hash{'version_'.$uri}=$version; + } } return $uri; } @@ -87,6 +73,10 @@ sub putinversion { my $uri=shift; if ($hash{'version_'.$uri}) { my $version=$hash{'version_'.$uri}; + if ($version eq 'mostrecent') { return $uri; } + if ($version eq &Apache::lonnet::getversion( + &Apache::lonnet::filelocation('',$uri))) + { return $uri; } $uri=~s/\.(\w+)$/\.$version\.$1/; } return $uri; @@ -95,17 +85,13 @@ sub putinversion { # ----------------------------------------- Processing versions file for course sub processversionfile { - my %cenv=shift; + my %cenv=@_; my %versions=&Apache::lonnet::dump('resourceversions', $cenv{'domain'}, $cenv{'num'}); foreach (keys %versions) { if ($_=~/^error\:/) { return; } - if ($versions{$_} eq 'current') { - delete $hash{'version_'.$_}; - } else { - $hash{'version_'.$_}=$versions{$_}; - } + $hash{'version_'.$_}=$versions{$_}; } } @@ -121,7 +107,7 @@ sub loadmap { $hash{'map_id_'.$lpc}=$uri; # Determine and check filename - my $fn=&Apache::lonnet::filelocation('',$uri); + my $fn=&Apache::lonnet::filelocation('',&putinversion($uri)); my $ispage=($fn=~/\.page$/); @@ -155,18 +141,16 @@ sub loadmap { $hash{'kind_'.$rid}='res'; $hash{'title_'.$rid}=$token->[2]->{'title'}; -# Rip out the version and store it separately my $turi=&versiontrack($token->[2]->{'src'}); -# If there is an explicit version parameter, use that one if ($token->[2]->{'version'}) { - $hash{'version_'.$turi}=$1; + unless ($hash{'version_'.$turi}) { + $hash{'version_'.$turi}=$1; + } } &Apache::lonnet::do_cache(\%Apache::lonnet::titlecache, - &Apache::lonnet::symbclean( - &Apache::lonnet::declutter($uri).'___'. - $token->[2]->{'id'}.'___'. - &Apache::lonnet::declutter($turi)), - $token->[2]->{'title'}); + &Apache::lonnet::encode_symb($uri,$token->[2]->{'id'}, + $turi), + $token->[2]->{'title'},'title'); unless ($ispage) { $turi=~/\.(\w+)$/; my $embstyle=&Apache::loncommon::fileembstyle($1); @@ -179,10 +163,13 @@ sub loadmap { } elsif ($turi!~/\.(sequence|page)$/) { $turi='/adm/coursedocs/showdoc'.$turi; } - } else { # normal internal resource - if (($embstyle eq 'img') || ($embstyle eq 'emb')) { - $turi='/adm/wrapper'.$turi; - } + } elsif ($turi) { # normal non-empty internal resource + my $mapdir=$uri; + $mapdir=~s/[^\/]+$//; + $turi=&Apache::lonnet::hreflocation($mapdir,$turi); + if (($embstyle eq 'img') || ($embstyle eq 'emb')) { + $turi='/adm/wrapper'.$turi; + } } } @@ -268,12 +255,17 @@ sub loadmap { # ------------------------------------------------------------------- Parameter my $referid=$lpc.'.'.$token->[2]->{'to'}; - my $part=$token->[2]->{'part'}; - unless ($part) { $part=0; } + my $name=$token->[2]->{'name'}; + my $part; + if ($name=~/^parameter_(.*)_/) { + $part=$1; + } else { + $part=0; + } + $name=~s/^.*_([^_]*)$/$1/; my $newparam= &Apache::lonnet::escape($token->[2]->{'type'}).':'. - &Apache::lonnet::escape($part.'.'. - $token->[2]->{'name'}).'='. + &Apache::lonnet::escape($part.'.'.$name).'='. &Apache::lonnet::escape($token->[2]->{'value'}); if (defined($hash{'param_'.$referid})) { $hash{'param_'.$referid}.='&'.$newparam; @@ -534,6 +526,7 @@ sub readmap { %parmhash=(); $errtext=''; $pc=0; + &processversionfile(%cenv); my $furi=&Apache::lonnet::clutter($uri); $hash{'src_0.0'}=&versiontrack($furi); $hash{'title_0.0'}=&Apache::lonnet::metadata($uri,'title'); @@ -545,8 +538,7 @@ sub readmap { &accinit($uri,$short,$fn); &pickrandom(); } -# ------------------------------------------------------------ Version tracking - &processversionfile(%cenv); +# ------------------------------------------------------- Put versions into src foreach (keys %hash) { if ($_=~/^src\_/) { $hash{$_}=&putinversion($hash{$_});