--- loncom/publisher/lonpublisher.pm 2001/12/07 22:37:56 1.64 +++ loncom/publisher/lonpublisher.pm 2001/12/15 18:15:27 1.65 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Publication Handler # -# $Id: lonpublisher.pm,v 1.64 2001/12/07 22:37:56 www Exp $ +# $Id: lonpublisher.pm,v 1.65 2001/12/15 18:15:27 harris41 Exp $ # # Copyright Michigan State University Board of Trustees # @@ -41,9 +41,25 @@ # 12/05 Gerd Kortemeyer # 12/05 Guy Albertelli # 12/06,12/07 Gerd Kortemeyer +# 12/15 Scott Harrison +# +### + +############################################################################### +## ## +## ORGANIZATION OF THIS PERL MODULE ## +## ## +## 1. Modules used by this module ## +## 2. Various subroutines ## +## 3. Publication Step One ## +## 4. Phase Two ## +## 5. Main Handler ## +## ## +############################################################################### package Apache::lonpublisher; +# ------------------------------------------------- modules used by this module use strict; use Apache::File; use File::Copy; @@ -53,11 +69,11 @@ use Apache::lonxml; use Apache::lonhomework; use Apache::loncacc; use DBI; +use Apache::lonnet(); +use Apache::loncommon(); my %addid; my %nokey; -my %language; -my %cprtag; my %metadatafields; my %metadatakeys; @@ -68,7 +84,6 @@ my $cuname; my $cudom; # ----------------------------------------------- Evaluate string with metadata - sub metaeval { my $metastring=shift; @@ -90,14 +105,14 @@ sub metaeval { if (defined($token->[2]->{'name'})) { $unikey.='_'.$token->[2]->{'name'}; } - map { + foreach (@{$token->[3]}) { $metadatafields{$unikey.'.'.$_}=$token->[2]->{$_}; if ($metadatakeys{$unikey}) { $metadatakeys{$unikey}.=','.$_; } else { $metadatakeys{$unikey}=$_; } - } @{$token->[3]}; + } if ($metadatafields{$unikey}) { my $newentry=$parser->get_text('/'.$entry); unless (($metadatafields{$unikey}=~/$newentry/) || @@ -112,7 +127,6 @@ sub metaeval { } # -------------------------------------------------------- Read a metadata file - sub metaread { my ($logfile,$fn)=@_; unless (-e $fn) { @@ -151,13 +165,17 @@ sub hiddenfield { } sub selectbox { - my ($title,$name,$value,%options)=@_; - my $selout="\n

$title:
".''; + foreach (@idlist) { + $selout.='';} + } return $selout.''; } @@ -167,12 +185,12 @@ sub urlfixup { my ($url,$target)=@_; unless ($url) { return ''; } my ($host)=($url=~/(?:http\:\/\/)*([^\/]+)/); - map { + foreach (values %Apache::lonnet::hostname) { if ($_ eq $host) { $url=~s/^http\:\/\///; $url=~s/^$host//; } - } values %Apache::lonnet::hostname; + } if ($url=~/^http\:\/\//) { return $url; } $url=~s/\~$cuname/res\/$cudom\/$cuname/; if ($target) { @@ -281,7 +299,7 @@ sub publish { } } - map { + foreach ('src','href','background') { if (defined($parms{$_})) { my $oldurl=$parms{$_}; my $newurl=&urlfixup($oldurl,$target); @@ -292,7 +310,7 @@ sub publish { } $allow{$newurl}=1; } - } ('src','href','background'); + } if ($lctag eq 'applet') { my $codebase=''; @@ -311,7 +329,7 @@ sub publish { } $allow{$codebase.'/*'}=1; } else { - map { + foreach ('archive','code','object') { if (defined($parms{$_})) { my $oldurl=$parms{$_}; my $newurl=&urlfixup($oldurl,$target); @@ -321,20 +339,20 @@ sub publish { $newurl."\n"; $allow{$newurl}=1; } - } ('archive','code','object'); + } } } my $newparmstring=''; my $endtag=''; - map { + foreach (keys %parms) { if ($_ eq '/') { $endtag=' /'; } else { my $quote=($parms{$_}=~/\"/?"'":'"'); $newparmstring.=' '.$_.'='.$quote.$parms{$_}.$quote; } - } keys %parms; + } if (!$endtag) { if ($token->[4]=~m:/>$:) { $endtag=' /'; }; } $outstring.='<'.$tag.$newparmstring.$endtag.'>'; } else { @@ -354,7 +372,7 @@ sub publish { $scrout.='

Dependencies

'; my $allowstr=''; - map { + foreach (keys %allow) { my $thisdep=$_; unless ($style eq 'rat') { $allowstr.="\n".''; @@ -381,7 +399,7 @@ sub publish { } } } - } keys %allow; + } $outstring=~s/(\<\/[^\>]+\>\s*)$/$allowstr$1/s; # ------------------------------------------------------------- Write modified @@ -436,30 +454,30 @@ sub publish { my $currentpath='/home/'.$cuname.'/'; - map { + foreach (@urlparts) { $currentpath.=$_.'/'; $scrout.=&metaread($logfile,$currentpath.'default.meta'); - } @urlparts; + } # ------------------- Clear out parameters and stores (there should not be any) - map { + foreach (keys %metadatafields) { if (($_=~/^parameter/) || ($_=~/^stores/)) { delete $metadatafields{$_}; } - } keys %metadatafields; + } } else { # ---------------------- Read previous metafile, remember parameters and stores $scrout.=&metaread($logfile,$source.'.meta'); - map { + foreach (keys %metadatafields) { if (($_=~/^parameter/) || ($_=~/^stores/)) { $oldparmstores{$_}=1; delete $metadatafields{$_}; } - } keys %metadatafields; + } } @@ -476,7 +494,7 @@ sub publish { # ---------------- Find and document discrepancies in the parameters and stores my $chparms=''; - map { + foreach (sort keys %metadatafields) { if (($_=~/^parameter/) || ($_=~/^stores/)) { unless ($_=~/\.\w+$/) { unless ($oldparmstores{$_}) { @@ -485,14 +503,14 @@ sub publish { } } } - } sort keys %metadatafields; + } if ($chparms) { $scrout.='

New parameters or stored values: '. $chparms; } my $chparms=''; - map { + foreach (sort keys %oldparmstores) { if (($_=~/^parameter/) || ($_=~/^stores/)) { unless (($metadatafields{$_.'.name'}) || ($metadatafields{$_.'.package'}) || ($_=~/\.\w+$/)) { @@ -500,7 +518,7 @@ sub publish { $chparms.=$_.' '; } } - } sort keys %oldparmstores; + } if ($chparms) { $scrout.='

Obsolete parameters or stored values: '. $chparms; @@ -534,17 +552,17 @@ sub publish { $textonly=~s/[^a-z\s]//g; my %keywords=(); - map { + foreach ($textonly=~m/(\w+)/g) { unless ($nokey{$_}) { $keywords{$_}=1; } - } ($textonly=~m/(\w+)/g); + } - map { + foreach (split(/\W+/,$metadatafields{'keywords'})) { $keywords{$_}=1; - } split(/\W+/,$metadatafields{'keywords'}); + } - map { + foreach (sort keys %keywords) { $keywordout.='

'; } @@ -639,11 +665,11 @@ sub phasetwo { $metadatafields{'dependencies'}=$ENV{'form.dependencies'}; my $allkeywords=$ENV{'form.addkey'}; - map { + foreach (keys %ENV) { if ($_=~/^form\.key\.(\w+)/) { $allkeywords.=','.$1; } - } keys %ENV; + } $allkeywords=~s/\W+/\,/; $allkeywords=~s/^\,//; $metadatafields{'keywords'}=$allkeywords; @@ -654,22 +680,22 @@ sub phasetwo { unless ($mfh=Apache::File->new('>'.$source.'.meta')) { return 'Could not write metadata, FAIL'; - } - map { + } + foreach (sort keys %metadatafields) { unless ($_=~/\./) { my $unikey=$_; $unikey=~/^([A-Za-z]+)/; my $tag=$1; $tag=~tr/A-Z/a-z/; print $mfh "\n\<$tag"; - map { + foreach (split(/\,/,$metadatakeys{$unikey})) { my $value=$metadatafields{$unikey.'.'.$_}; $value=~s/\"/\'\'/g; print $mfh ' '.$_.'="'.$value.'"'; - } split(/\,/,$metadatakeys{$unikey}); + } print $mfh '>'.$metadatafields{$unikey}.''; } - } sort keys %metadatafields; + } $scrout.='

Wrote Metadata'; print $logfile "\nWrote metadata"; } @@ -695,11 +721,12 @@ sub phasetwo { 'delete from metadata where url like binary'. '"'.$sqldatafields{'url'}.'"'); $sth->execute(); - map {my $field=$metadatafields{$_}; $field=~s/\"/\'\'/g; - $sqldatafields{$_}=$field;} - ('title','author','subject','keywords','notes','abstract', + foreach ('title','author','subject','keywords','notes','abstract', 'mime','language','creationdate','lastrevisiondate','owner', - 'copyright'); + 'copyright') { + my $field=$metadatafields{$_}; $field=~s/\"/\'\'/g; + $sqldatafields{$_}=$field; + } $sth=$dbh->prepare('insert into metadata values ('. '"'.delete($sqldatafields{'title'}).'"'.','. @@ -910,7 +937,7 @@ sub handler { # Get query string for limited number of parameters - map { + foreach (split(/&/,$ENV{'QUERY_STRING'})) { my ($name, $value) = split(/=/,$_); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; @@ -919,7 +946,7 @@ sub handler { $ENV{'form.'.$name}=$value; } } - } (split(/&/,$ENV{'QUERY_STRING'})); + } # -------------------------------------------------------------- Check filename @@ -994,31 +1021,11 @@ unless ($ENV{'form.phase'} eq 'two') { { my $fh=Apache::File->new($r->dir_config('lonIncludes').'/un_keyword.tab'); - map { + while (<$fh>) { my $word=$_; chomp($word); $nokey{$word}=1; - } <$fh>; - } - - %language=(); - - { - my $fh=Apache::File->new($r->dir_config('lonTabDir').'/language.tab'); - map { - $_=~/(\w+)\s+([\w\s\-]+)/; - $language{$1}=$2; - } <$fh>; - } - - %cprtag=(); - - { - my $fh=Apache::File->new($r->dir_config('lonIncludes').'/copyright.tab'); - map { - $_=~/(\w+)\s+([\w\s\-]+)/; - $cprtag{$1}=$2; - } <$fh>; + } } } @@ -1037,7 +1044,7 @@ unless ($ENV{'form.phase'} eq 'two') { { $thisfn=~/\.(\w+)$/; my $thistype=$1; - my $thisembstyle=&Apache::lonnet::fileembstyle($thistype); + my $thisembstyle=&Apache::loncommon::fileembstyle($thistype); my $thistarget=$thisfn; @@ -1059,7 +1066,7 @@ unless ($ENV{'form.phase'} eq 'two') { ''); } - if (&Apache::lonnet::fileembstyle($thistype) eq 'ssi') { + if (&Apache::loncommon::fileembstyle($thistype) eq 'ssi') { $r->print('
Diffs with Current Version

');