--- rat/lonuserstate.pm 2001/11/29 19:23:49 1.25 +++ rat/lonuserstate.pm 2001/12/17 00:57:59 1.26 @@ -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.25 2001/11/29 19:23:49 www Exp $ +# $Id: lonuserstate.pm,v 1.26 2001/12/17 00:57:59 harris41 Exp $ # # Copyright Michigan State University Board of Trustees # @@ -30,6 +30,7 @@ # (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) @@ -37,15 +38,21 @@ # 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 +# 12/16 Scott Harrison +# +### package Apache::lonuserstate; +# ------------------------------------------------- modules used by this module use strict; use Apache::Constants qw(:common :http); use Apache::File; use HTML::TokeParser; use Apache::lonnet(); +use Apache::loncommon(); use GDBM_File; use Apache::lonmsg; use Safe; @@ -127,11 +134,11 @@ sub loadmap { my $turi=$token->[2]->{'src'}; unless ($ispage) { $turi=~/\.(\w+)$/; - my $embstyle=&Apache::lonnet::fileembstyle($1); + my $embstyle=&Apache::loncommon::fileembstyle($1); if ($token->[2]->{'external'} eq 'true') { $turi=~s/^http\:\/\//\/adm\/wrapper\/ext\//; } else { - my $embstyle=&Apache::lonnet::fileembstyle($1); + my $embstyle=&Apache::loncommon::fileembstyle($1); if (($embstyle eq 'img') || ($embstyle eq 'emb')) { $turi='/adm/wrapper'.$turi; } @@ -284,7 +291,7 @@ sub traceroute { } } if (defined($hash{'to_'.$rid})) { - map { + foreach (split(/\,/,$hash{'to_'.$rid})) { my $further=$sofar; if ($hash{'undercond_'.$_}) { if (defined($hash{'condid_'.$hash{'undercond_'.$_}})) { @@ -296,7 +303,7 @@ sub traceroute { } } &traceroute($further,$hash{'goesto_'.$_},$beenhere); - } split(/\,/,$hash{'to_'.$rid}); + } } } } @@ -309,10 +316,10 @@ sub accinit { my %captured=(); my $condcounter=0; $acchash{'acc.cond.'.$short.'.0'}=0; - map { + foreach (keys %hash) { if ($_=~/^conditions/) { my $expr=$hash{$_}; - map { + foreach ($expr=~m/(\(\(\d+(?:\&\d+)+\)(?:\|\(\d+(?:\&\d+)+\))+\))/g) { my $sub=$_; my $orig=$_; $sub=~/\(\((\d+\&(:?\d+\&)*)(?:\d+\&*)+\)(?:\|\(\1(?:\d+\&*)+\))+\)/; @@ -323,7 +330,7 @@ sub accinit { $sub=simplify($sub); $orig=~s/(\W)/\\$1/g; $expr=~s/$orig/$sub/; - } ($expr=~m/(\(\(\d+(?:\&\d+)+\)(?:\|\(\d+(?:\&\d+)+\))+\))/g); + } $hash{$_}=$expr; unless (defined($captured{$expr})) { $condcounter++; @@ -333,19 +340,19 @@ sub accinit { } elsif ($_=~/^param_(\d+)\.(\d+)/) { my $prefix=&Apache::lonnet::declutter($hash{'map_id_'.$1}). '___'.$2.'___'.&Apache::lonnet::declutter($hash{'src_'.$1.'.'.$2}); - map { + foreach (split(/\&/,$hash{$_})) { my ($typename,$value)=split(/\=/,$_); my ($type,$name)=split(/\:/,$typename); $parmhash{$prefix.'.'.&Apache::lonnet::unescape($name)}= &Apache::lonnet::unescape($value); $parmhash{$prefix.'.'.&Apache::lonnet::unescape($name).'.type'}= &Apache::lonnet::unescape($type); - } split(/\&/,$hash{$_}); + } } - } keys %hash; - map { + } + foreach (keys %hash) { if ($_=~/^ids/) { - map { + foreach (split(/\,/,$hash{$_})) { my $resid=$_; my $uri=$hash{'src_'.$resid}; $uri=~s/^\/adm\/wrapper//; @@ -374,9 +381,9 @@ sub accinit { '&'.$urifile.':'.$uricond.'&'; } } - } split(/\,/,$hash{$_}); + } } - } keys %hash; + } $acchash{'acc.res.'.$short.'.'}='&:0&'; my $courseuri=$uri; $courseuri=~s/^\/res\///; @@ -457,7 +464,7 @@ sub evalstate { $safeeval->permit(":base_math"); $safeeval->deny(":base_io"); $safehole->wrap(\&Apache::lonnet::EXT,$safeeval,'&EXT'); - map { + foreach (@conditions) { my $line=$_; chomp($line); my ($condition,$weight)=split(/\:/,$_); @@ -474,7 +481,7 @@ sub evalstate { $state.='1'; } } - } @conditions; + } } &Apache::lonnet::appenv('user.state.'.$ENV{'request.course.id'} => $state); return $state; @@ -483,9 +490,57 @@ sub evalstate { 1; __END__ +=head1 NAME + +Apache::lonuserstate - Construct and maintain state and binary representation +of course for user + +=head1 SYNOPSIS + +Invoked by lonroles.pm. + +&Apache::lonuserstate::readmap($cdom.'/'.$cnum); + +=head1 INTRODUCTION + +This module constructs and maintains state and binary representation +of course for user. + +This is part of the LearningOnline Network with CAPA project +described at http://www.lon-capa.org. + +=head1 HANDLER SUBROUTINE + +There is no handler subroutine. + +=head1 OTHER SUBROUTINES + +=over 4 + +=item * + +loadmap() : Loads map from disk + +=item * + +simplify() : Simplify expression + +=item * + +traceroute() : Build condition hash + +=item * + +accinit() : Cascading conditions, quick access, parameters +=item * +readmap() : Read map and all submaps +=item * +evalstate() : Evaluate state string +=back +=cut