# The LearningOnline Network with CAPA # a pile of common routines # # $Id: loncommon.pm,v 1.38 2002/06/24 19:06:05 albertel 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,12/17 Scott Harrison # 12/21 Gerd Kortemeyer # 12/21 Scott Harrison # 12/25,12/28 Gerd Kortemeyer # YEAR=2002 # 1/4 Gerd Kortemeyer # Makes a table out of the previous attempts # Inputs result_from_symbread, user, domain, course_id # Reads in non-network-related .tab files # POD header: =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. =head2 General Subroutines =over 4 =cut # End of POD header package Apache::loncommon; use strict; use Apache::lonnet(); use POSIX qw(strftime); use Apache::Constants qw(:common); use Apache::lonmsg(); my $readit; # ----------------------------------------------- Filetypes/Languages/Copyright my %language; my %cprtag; my %fe; my %fd; my %fc; # -------------------------------------------------------------- Thesaurus data my @therelated; my @theword; my @thecount; my %theindex; my $thetotalcount; my $thefuzzy=2; my $thethreshold=0.1/$thefuzzy; my $theavecount; # ----------------------------------------------------------------------- BEGIN =pod =item BEGIN() Initialize values from language.tab, copyright.tab, filetypes.tab, and filecategories.tab. =cut # ----------------------------------------------------------------------- BEGIN BEGIN { unless ($readit) { # ------------------------------------------------------------------- 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; } } } } # -------------------------------------------------------------- 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; } &Apache::lonnet::logthis( "INFO: Read file types and thesaurus"); $readit=1; } } # ============================================================= END BEGIN BLOCK =item linked_select_forms(...) linked_select_forms returns a string containing a block and html for two tags =item $firstdefault, the default value for the first menu =item $firstselectname, the name of the first tag =item $hashref, a reference to a hash containing the data for the menus. Below is an example of such a hash. Only the 'text', 'default', and 'select2' keys must appear as stated. keys(%menu) are the possible values for the first select menu. The text that coincides with the first menu values is given in $menu{$choice1}->{'text'}. The values and text for the second menu are given in the hash pointed to by $menu{$choice1}->{'select2'}. my %menu = ( A1 => { text =>"Choice A1" , default => "B3", select2 => { B1 => "Choice B1", B2 => "Choice B2", B3 => "Choice B3", B4 => "Choice B4" } }, A2 => { text =>"Choice A2" , default => "C2", select2 => { C1 => "Choice C1", C2 => "Choice C2", C3 => "Choice C3" } }, A3 => { text =>"Choice A3" , default => "D6", select2 => { D1 => "Choice D1", D2 => "Choice D2", D3 => "Choice D3", D4 => "Choice D4", D5 => "Choice D5", D6 => "Choice D6", D7 => "Choice D7" } } ); =back =cut # ------------------------------------------------ sub linked_select_forms { my ($formname, $middletext, $firstdefault, $firstselectname, $secondselectname, $hashref ) = @_; my $second = "document.$formname.$secondselectname"; my $first = "document.$formname.$firstselectname"; # output the javascript to do the changing my $result = ''; $result.=" END # output the initial values for the selection lists $result .= "\n"; my $seconddefault = $hashref->{$firstdefault}->{'default'}; foreach my $value (sort(keys(%select2))) { $result.=" \n"; } $selectdomain.=""; return $selectdomain; } #------------------------------------------- =item get_home_servers($domain) Returns a hash which contains keys like '103l3' and values like 'kirk.lite.msu.edu'. All of the keys will be for machines in the given $domain. =cut #------------------------------------------- sub get_home_servers { my $domain = shift; my %home_servers; foreach (keys(%Apache::lonnet::libserv)) { if ($Apache::lonnet::hostdom{$_} eq $domain) { $home_servers{$_} = $Apache::lonnet::hostname{$_}; } } return %home_servers; } #------------------------------------------- =item home_server_option_list($domain) returns a string which contains an