Diff for /loncom/interface/loncommon.pm between versions 1.16 and 1.20

version 1.16, 2001/12/13 01:31:39 version 1.20, 2001/12/25 21:02:35
Line 27 Line 27
 #  #
 # YEAR=2001  # YEAR=2001
 # 2/13-12/7 Guy Albertelli  # 2/13-12/7 Guy Albertelli
 # 12/11,12/12 Scott Harrison  # 12/11,12/12,12/17 Scott Harrison
   # 12/21 Gerd Kortemeyer
   # 12/21 Scott Harrison
   # 12/25 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
Line 40  use POSIX qw(strftime); Line 43  use POSIX qw(strftime);
 use Apache::Constants qw(:common);  use Apache::Constants qw(:common);
 use Apache::lonmsg();  use Apache::lonmsg();
   
   # ----------------------------------------------- Filetypes/Languages/Copyright
 my %language;  my %language;
 my %cprtag;  my %cprtag;
 my %fe; my %fd;  my %fe; my %fd;
 my %fc;  my %fc;
   
   # -------------------------------------------------------------- Thesaurus data
   my @therelated=();
   my @theword=();
   my @thecount=();
   my %theindex=();
   my $thetotalcount=0;
   my $thefuzzy=2;
   my $thethreshold=0.1/$thefuzzy;
   my $theavecount;
   
 # ----------------------------------------------------------------------- BEGIN  # ----------------------------------------------------------------------- BEGIN
 sub BEGIN {  BEGIN {
 # ------------------------------------------------------------------- languages  # ------------------------------------------------------------------- languages
     {      {
  my $fh=Apache::File->new($Apache::lonnet::perlvar{'lonTabDir'}.   my $fh=Apache::File->new($Apache::lonnet::perlvar{'lonTabDir'}.
Line 102  sub BEGIN { Line 116  sub BEGIN {
     }      }
  }   }
     }      }
   # -------------------------------------------------------------- Thesaurus data
       {
    my $fh=Apache::File->new($Apache::lonnet::perlvar{'lonTabDir'}.
          '/thesaurus.dat');
    if ($fh) {
               while (<$fh>) {
                  my ($tword,$tindex,$tcount,$trelated)=split(/\@/,$_);
                  $theindex{$tword}=$tindex;
                  $theword[$tindex]=$tword;
                  $thecount[$tindex]=$tcount;
                  $thetotalcount+=$tcount;
                  $therelated[$tindex]=$trelated;
      }
           }
           $theavecount=$thetotalcount/$#thecount;
       }
   }
   # ============================================================= END BEGIN BLOCK
   
   
   # ---------------------------------------------------------- Is this a keyword?
   
   sub keyword {
       my $newword=shift;
       $newword=~s/\W//g;
       $newword=~tr/A-Z/a-z/;
       my $tindex=$theindex{$newword};
       if ($tindex) {
           if ($thecount[$tindex]>$theavecount) {
              return 1;
           }
       }
       return 0;
   }
   # -------------------------------------------------------- Return related words
   
   sub related {
       my $newword=shift;
       $newword=~s/\W//g;
       $newword=~tr/A-Z/a-z/;
       my $tindex=$theindex{$newword};
       if ($tindex) {
           my %found=();
           foreach (split(/\,/,$therelated[$tindex])) {
   # - Related word found
               my ($ridx,$rcount)=split(/\:/,$_);
   # - Direct relation index
               my $directrel=$rcount/$thecount[$tindex];
               if ($directrel>$thethreshold) {
                  foreach (split(/\,/,$therelated[$ridx])) {
                     my ($rridx,$rrcount)=split(/\:/,$_);
                     if ($rridx==$tindex) {
   # - Determine reverse relation index
                        my $revrel=$rrcount/$thecount[$ridx];
   # - Calculate full index
                        $found{$ridx}=$directrel*$revrel;
                        if ($found{$ridx}>$thethreshold) {
                           foreach (split(/\,/,$therelated[$ridx])) {
                               my ($rrridx,$rrrcount)=split(/\:/,$_);
                               unless ($found{$rrridx}) {
                                  my $revrevrel=$rrrcount/$thecount[$ridx];
                                  if (
                             $directrel*$revrel*$revrevrel>$thethreshold
                                  ) {
                                     $found{$rrridx}=
                                          $directrel*$revrel*$revrevrel;
                                  }
                               }
                           }
                        }
                     }
                  }
               }
           }
       }
       return ();
 }  }
   
 # ---------------------------------------------------------------- Language IDs  # ---------------------------------------------------------------- Language IDs
Line 129  sub filecategories { Line 219  sub filecategories {
     return sort(keys(%fc));      return sort(keys(%fc));
 }  }
   
 # ------------------------------------------------------------- File Categories  # -------------------------------------- File Types within a specified category
 sub filecategorytypes {  sub filecategorytypes {
     return @{$fc{lc(shift(@_))}};      return @{$fc{lc(shift(@_))}};
 }  }
Line 165  sub get_previous_attempt { Line 255  sub get_previous_attempt {
       my %lasthash=();        my %lasthash=();
       my $version;        my $version;
       for ($version=1;$version<=$returnhash{'version'};$version++) {        for ($version=1;$version<=$returnhash{'version'};$version++) {
         map {          foreach (sort(split(/\:/,$returnhash{$version.':keys'}))) {
   $lasthash{$_}=$returnhash{$version.':'.$_};    $lasthash{$_}=$returnhash{$version.':'.$_};
         } sort(split(/\:/,$returnhash{$version.':keys'}));          }
       }        }
       $prevattempts='<table border=2></tr><th>History</th>';        $prevattempts='<table border=2></tr><th>History</th>';
       foreach (sort(keys %lasthash)) {        foreach (sort(keys %lasthash)) {
Line 282  sub no_cache { Line 372  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.16  
changed lines
  Added in v.1.20


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