Diff for /loncom/interface/loncommon.pm between versions 1.11 and 1.18

version 1.11, 2001/12/07 23:41:25 version 1.18, 2001/12/21 17:03:17
Line 25 Line 25
 #  #
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
 # 2/13 Guy Albertelli  # YEAR=2001
   # 2/13-12/7 Guy Albertelli
   # 12/11,12/12,12/17 Scott Harrison
   # 12/21 Gerd Kortemeyer
   
 # Makes a table out of the previous attempts  # Makes a table out of the previous attempts
 # Inputs result_from_symbread, user, domain, course_id  # Inputs result_from_symbread, user, domain, course_id
   # Reads in non-network-related .tab files
   
 package Apache::loncommon;  package Apache::loncommon;
   
Line 37  use POSIX qw(strftime); Line 41  use POSIX qw(strftime);
 use Apache::Constants qw(:common);  use Apache::Constants qw(:common);
 use Apache::lonmsg();  use Apache::lonmsg();
   
   
   my %language;
   my %cprtag;
   my %fe; my %fd;
   my %fc;
   
   # ----------------------------------------------------------------------- BEGIN
   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 Types within a specified category
   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 {  sub get_previous_attempt {
   my ($symb,$username,$domain,$course)=@_;    my ($symb,$username,$domain,$course)=@_;
   my $prevattempts='';    my $prevattempts='';
Line 52  sub get_previous_attempt { Line 172  sub get_previous_attempt {
         } sort(split(/\:/,$returnhash{$version.':keys'}));          } sort(split(/\:/,$returnhash{$version.':keys'}));
       }        }
       $prevattempts='<table border=2></tr><th>History</th>';        $prevattempts='<table border=2></tr><th>History</th>';
       map {        foreach (sort(keys %lasthash)) {
         $prevattempts.='<th>'.$_.'</th>';          $prevattempts.='<th>'.$_.'</th>';
       } sort(keys %lasthash);        }
       for ($version=1;$version<=$returnhash{'version'};$version++) {        for ($version=1;$version<=$returnhash{'version'};$version++) {
         $prevattempts.='</tr><tr><th>Attempt '.$version.'</th>';          $prevattempts.='</tr><tr><th>Attempt '.$version.'</th>';
         map {          foreach (sort(keys %lasthash)) {
   my $value;    my $value;
   if ($_ =~ /timestamp/) {    if ($_ =~ /timestamp/) {
     $value=scalar(localtime($returnhash{$version.':'.$_}));      $value=scalar(localtime($returnhash{$version.':'.$_}));
Line 65  sub get_previous_attempt { Line 185  sub get_previous_attempt {
     $value=$returnhash{$version.':'.$_};      $value=$returnhash{$version.':'.$_};
   }    }
   $prevattempts.='<td>'.$value.'</td>';       $prevattempts.='<td>'.$value.'</td>';   
         } sort(keys %lasthash);          }
       }        }
       $prevattempts.='</tr><tr><th>Current</th>';        $prevattempts.='</tr><tr><th>Current</th>';
       map {        foreach (sort(keys %lasthash)) {
  my $value;   my $value;
  if ($_ =~ /timestamp/) {   if ($_ =~ /timestamp/) {
   $value=scalar(localtime($lasthash{$_}));    $value=scalar(localtime($lasthash{$_}));
Line 76  sub get_previous_attempt { Line 196  sub get_previous_attempt {
   $value=$lasthash{$_};    $value=$lasthash{$_};
  }   }
  $prevattempts.='<td>'.$value.'</td>';   $prevattempts.='<td>'.$value.'</td>';
       } sort(keys %lasthash);        }
       $prevattempts.='</tr></table>';        $prevattempts.='</tr></table>';
     } else {      } else {
       $prevattempts='Nothing submitted - no attempts.';        $prevattempts='Nothing submitted - no attempts.';
Line 139  sub get_student_answers { Line 259  sub get_student_answers {
   
 sub get_unprocessed_cgi {  sub get_unprocessed_cgi {
   my ($query)= @_;    my ($query)= @_;
   map {    foreach (split(/&/,$query)) {
     my ($name, $value) = split(/=/,$_);      my ($name, $value) = split(/=/,$_);
     $value =~ tr/+/ /;      $value =~ tr/+/ /;
     $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;      $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
     if (!defined($ENV{'form.'.$name})) { $ENV{'form.'.$name}=$value; }      if (!defined($ENV{'form.'.$name})) { $ENV{'form.'.$name}=$value; }
   } (split(/&/,$query));    }
 }  }
   
 sub cacheheader {  sub cacheheader {
Line 164  sub no_cache { Line 284  sub no_cache {
 }  }
 1;  1;
 __END__;  __END__;
   
   
   =head1 NAME
   
   Apache::loncommon - pile of common routines
   
   =head1 SYNOPSIS
   
   Referenced by other mod_perl Apache modules.
   
   Invocation:
    &Apache::loncommon::SUBROUTINENAME(ARGUMENTS);
   
   =head1 INTRODUCTION
   
   Common collection of used subroutines.  This collection helps remove
   redundancy from other modules and increase efficiency of memory usage.
   
   Current things done:
   
    Makes a table out of the previous homework attempts
    Inputs result_from_symbread, user, domain, course_id
    Reads in non-network-related .tab files
   
   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 *
   
   BEGIN() : initialize values from language.tab, copyright.tab, filetypes.tab,
   and filecategories.tab.
   
   =item *
   
   languageids() : returns list of all language ids
   
   =item *
   
   languagedescription() : returns description of a specified language id
   
   =item *
   
   copyrightids() : returns list of all copyrights
   
   =item *
   
   copyrightdescription() : returns description of a specified copyright id
   
   =item *
   
   filecategories() : returns list of all file categories
   
   =item *
   
   filecategorytypes() : returns list of file types belonging to a given file
   category
   
   =item *
   
   fileembstyle() : returns embedding style for a specified file type
   
   =item *
   
   filedescription() : returns description for a specified file type
   
   =item *
   
   filedescriptionex() : returns description for a specified file type with
   extra formatting
   
   =item *
   
   get_previous_attempt() : return string with previous attempt on problem
   
   =item *
   
   get_student_view() : show a snapshot of what student was looking at
   
   =item *
   
   get_student_answers() : show a snapshot of how student was answering problem
   
   =item *
   
   get_unprocessed_cgi() : get unparsed CGI parameters
   
   =item *
   
   cacheheader() : returns cache-controlling header code
   
   =item *
   
   nocache() : specifies header code to not have cache
   
   =back
   
   =cut

Removed from v.1.11  
changed lines
  Added in v.1.18


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>