--- loncom/interface/loncommon.pm 2001/10/31 17:44:42 1.9 +++ loncom/interface/loncommon.pm 2001/12/13 01:31:39 1.16 @@ -1,9 +1,37 @@ -# The LearningOnline Network +# The LearningOnline Network with CAPA # a pile of common routines -# 2/13 Guy Albertelli +# +# $Id: loncommon.pm,v 1.16 2001/12/13 01:31:39 harris41 Exp $ +# +# Copyright Michigan State University Board of Trustees +# +# This file is part of the LearningOnline Network with CAPA (LON-CAPA). +# +# LON-CAPA is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# LON-CAPA is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LON-CAPA; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# /home/httpd/html/adm/gpl.txt +# +# http://www.lon-capa.org/ +# +# YEAR=2001 +# 2/13-12/7 Guy Albertelli +# 12/11,12/12 Scott Harrison # Makes a table out of the previous attempts # Inputs result_from_symbread, user, domain, course_id +# Reads in non-network-related .tab files package Apache::loncommon; @@ -12,6 +40,121 @@ use POSIX qw(strftime); use Apache::Constants qw(:common); use Apache::lonmsg(); +my %language; +my %cprtag; +my %fe; my %fd; +my %fc; + +# ----------------------------------------------------------------------- BEGIN +sub BEGIN { +# ------------------------------------------------------------------- languages + { + my $fh=Apache::File->new($Apache::lonnet::perlvar{'lonTabDir'}. + '/language.tab'); + if ($fh) { + while (<$fh>) { + next if /^\#/; + chomp; + my ($key,$val)=(split(/\s+/,$_,2)); + $language{$key}=$val; + } + } + } +# ------------------------------------------------------------------ copyrights + { + my $fh=Apache::File->new($Apache::lonnet::perlvar{'lonIncludes'}. + '/copyright.tab'); + if ($fh) { + while (<$fh>) { + next if /^\#/; + chomp; + my ($key,$val)=(split(/\s+/,$_,2)); + $cprtag{$key}=$val; + } + } + } +# ------------------------------------------------------------- file categories + { + my $fh=Apache::File->new($Apache::lonnet::perlvar{'lonTabDir'}. + '/filecategories.tab'); + if ($fh) { + while (<$fh>) { + next if /^\#/; + chomp; + my ($key,$val)=(split(/\s+/,$_,2)); + push @{$fc{$key}},$val; + } + } + } +# ------------------------------------------------------------------ file types + { + my $fh=Apache::File->new($Apache::lonnet::perlvar{'lonTabDir'}. + '/filetypes.tab'); + if ($fh) { + while (<$fh>) { + next if (/^\#/); + chomp; + my ($ending,$emb,$descr)=split(/\s+/,$_,3); + if ($descr ne '') { + $fe{$ending}=lc($emb); + $fd{$ending}=$descr; + } + } + } + } +} + +# ---------------------------------------------------------------- Language IDs +sub languageids { + return sort(keys(%language)); +} + +# -------------------------------------------------------- Language Description +sub languagedescription { + return $language{shift(@_)}; +} + +# --------------------------------------------------------------- Copyright IDs +sub copyrightids { + return sort(keys(%cprtag)); +} + +# ------------------------------------------------------- Copyright Description +sub copyrightdescription { + return $cprtag{shift(@_)}; +} + +# ------------------------------------------------------------- File Categories +sub filecategories { + return sort(keys(%fc)); +} + +# ------------------------------------------------------------- File Categories +sub filecategorytypes { + return @{$fc{lc(shift(@_))}}; +} + +# ------------------------------------------------------------------ File Types +sub fileextensions { + return sort(keys(%fe)); +} + +# ------------------------------------------------------------- Embedding Style +sub fileembstyle { + return $fe{lc(shift(@_))}; +} + +# ------------------------------------------------------------ Description Text +sub filedescription { + return $fd{lc(shift(@_))}; +} + +# ------------------------------------------------------------ Description Text +sub filedescriptionex { + my $ex=shift; + return '.'.$ex.' '.$fd{lc($ex)}; +} + sub get_previous_attempt { my ($symb,$username,$domain,$course)=@_; my $prevattempts=''; @@ -27,12 +170,12 @@ sub get_previous_attempt { } sort(split(/\:/,$returnhash{$version.':keys'})); } $prevattempts=''; - map { + foreach (sort(keys %lasthash)) { $prevattempts.=''; - } sort(keys %lasthash); + } for ($version=1;$version<=$returnhash{'version'};$version++) { $prevattempts.=''; - map { + foreach (sort(keys %lasthash)) { my $value; if ($_ =~ /timestamp/) { $value=scalar(localtime($returnhash{$version.':'.$_})); @@ -40,10 +183,10 @@ sub get_previous_attempt { $value=$returnhash{$version.':'.$_}; } $prevattempts.=''; - } sort(keys %lasthash); + } } $prevattempts.=''; - map { + foreach (sort(keys %lasthash)) { my $value; if ($_ =~ /timestamp/) { $value=scalar(localtime($lasthash{$_})); @@ -51,7 +194,7 @@ sub get_previous_attempt { $value=$lasthash{$_}; } $prevattempts.=''; - } sort(keys %lasthash); + } $prevattempts.='
History'.$_.'
Attempt '.$version.''.$value.'
Current'.$value.'
'; } else { $prevattempts='Nothing submitted - no attempts.'; @@ -61,14 +204,65 @@ sub get_previous_attempt { } } +sub get_student_view { + my ($symb,$username,$domain,$courseid) = @_; + my ($map,$id,$feedurl) = split(/___/,$symb); + my (%old,%moreenv); + my @elements=('symb','courseid','domain','username'); + foreach my $element (@elements) { + $old{$element}=$ENV{'form.grade_'.$element}; + $moreenv{'form.grade_'.$element}=eval '$'.$element #' + } + &Apache::lonnet::appenv(%moreenv); + my $userview=&Apache::lonnet::ssi('/res/'.$feedurl); + &Apache::lonnet::delenv('form.grade_'); + foreach my $element (@elements) { + $ENV{'form.grade_'.$element}=$old{$element}; + } + $userview=~s/\]*\>//gi; + $userview=~s/\<\/body\>//gi; + $userview=~s/\//gi; + $userview=~s/\<\/html\>//gi; + $userview=~s/\//gi; + $userview=~s/\<\/head\>//gi; + $userview=~s/action\s*\=/would_be_action\=/gi; + return $userview; +} + +sub get_student_answers { + my ($symb,$username,$domain,$courseid) = @_; + my ($map,$id,$feedurl) = split(/___/,$symb); + my (%old,%moreenv); + my @elements=('symb','courseid','domain','username'); + foreach my $element (@elements) { + $old{$element}=$ENV{'form.grade_'.$element}; + $moreenv{'form.grade_'.$element}=eval '$'.$element #' + } + $moreenv{'form.grade_target'}='answer'; + &Apache::lonnet::appenv(%moreenv); + my $userview=&Apache::lonnet::ssi('/res/'.$feedurl); + &Apache::lonnet::delenv('form.grade_'); + foreach my $element (@elements) { + $ENV{'form.grade_'.$element}=$old{$element}; + } + $userview=~s/\]*\>//gi; + $userview=~s/\<\/body\>//gi; + $userview=~s/\//gi; + $userview=~s/\<\/html\>//gi; + $userview=~s/\//gi; + $userview=~s/\<\/head\>//gi; + $userview=~s/action\s*\=/would_be_action\=/gi; + return $userview; +} + sub get_unprocessed_cgi { my ($query)= @_; - map { + foreach (split(/&/,$query)) { my ($name, $value) = split(/=/,$_); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; if (!defined($ENV{'form.'.$name})) { $ENV{'form.'.$name}=$value; } - } (split(/&/,$query)); + } } sub cacheheader {