--- loncom/publisher/lonpublisher.pm 2000/11/30 23:01:41 1.7 +++ loncom/publisher/lonpublisher.pm 2000/12/02 20:55:16 1.11 @@ -5,7 +5,7 @@ # # 05/29/00,05/30,10/11 Gerd Kortemeyer) # -# 11/28,11/29,11/30 Gerd Kortemeyer +# 11/28,11/29,11/30,12/01,12/02 Gerd Kortemeyer package Apache::lonpublisher; @@ -14,10 +14,13 @@ use Apache::File; use Apache::Constants qw(:common :http :methods); use HTML::TokeParser; use Apache::lonxml; -use Apache::lonhomework; +use Apache::structuretags; +use Apache::response; my %addid; my %nokey; +my %language; +my %cprtag; my %metadatafields; my %metadatakeys; @@ -46,7 +49,10 @@ sub metaeval { } } @{$token->[3]}; if ($metadatafields{$unikey}) { - $metadatafields{$unikey}.=','.$parser->get_text('/'.$entry); + my $newentry=$parser->get_text('/'.$entry); + unless ($metadatafields{$unikey}=~/$newentry/) { + $metadatafields{$unikey}.=', '.$newentry; + } } else { $metadatafields{$unikey}=$parser->get_text('/'.$entry); } @@ -70,6 +76,28 @@ sub metaread { return '
Processed file: '.$fn.''; } +sub textfield { + my ($title,$name,$value)=@_; + return "\n

$title:
". + ''; +} + +sub hiddenfield { + my ($name,$value)=@_; + return "\n".''; +} + +sub selectbox { + my ($title,$name,$value,%options)=@_; + my $selout="\n

$title:
".''; +} + sub publish { my ($source,$target,$style)=@_; @@ -81,7 +109,7 @@ sub publish { 'No write permission to user directory, FAIL'; } print $logfile -"\n\n================== Publish ".localtime()." =================\n"; +"\n\n================= Publish ".localtime()." Phase One ================\n"; if (($style eq 'ssi') || ($style eq 'rat')) { # ------------------------------------------------------- This needs processing @@ -201,15 +229,20 @@ sub publish { # ---------------------------------------- Storage for metadata keys and fields - %metadatafields=(); - %metadatakeys=(); + %metadatafields=(); + %metadatakeys=(); + + my %oldparmstores=(); # ------------------------------------------------ First, check out environment - + unless (-e $source.'.meta') { $metadatafields{'author'}=$ENV{'environment.firstname'}.' '. $ENV{'environment.middlename'}.' '. $ENV{'environment.lastname'}.' '. $ENV{'environment.generation'}; + $metadatafields{'author'}=~s/\s+/ /g; + $metadatafields{'author'}=~s/\s+$//; + $metadatafields{'owner'}=$ENV{'user.name'}.'@'.$ENV{'user.domain'}; # ------------------------------------------------ Check out directory hierachy @@ -234,10 +267,10 @@ sub publish { } } keys %metadatafields; + } else { # ---------------------- Read previous metafile, remember parameters and stores $scrout.=&metaread($logfile,$source.'.meta'); - my %oldparmstores=(); map { if (($_=~/^parameter/) || ($_=~/^stores/)) { @@ -246,16 +279,11 @@ sub publish { } } keys %metadatafields; - + } # -------------------------------------------------- Parse content for metadata - my $allmeta=''; - if ($source=~/\.problem$/) { - $allmeta=Apache::lonhomework::subhandler('meta',$content); - } else { - $allmeta=Apache::lonxml::xmlparse('meta',$content); - } + my $allmeta=Apache::lonxml::xmlparse('meta',$content); &metaeval($allmeta); # ---------------- Find and document discrepancies in the parameters and stores @@ -290,13 +318,20 @@ sub publish { $chparms; } -# DEBUG: +# ------------------------------------------------------- Now have all metadata - $scrout.=$allmeta; + $scrout.= + '

'. + &hiddenfield('phase','two'). + &hiddenfield('filename',$ENV{'form.filename'}). + &hiddenfield('allmeta',&Apache::lonnet::escape($allmeta)). + &textfield('Title','title',$metadatafields{'title'}). + &textfield('Author(s)','author',$metadatafields{'author'}). + &textfield('Subject','subject',$metadatafields{'subject'}); # --------------------------------------------------- Scan content for keywords - my $keywordout=''; + my $keywordout='

Keywords:

'; my $colcount=0; { @@ -317,8 +352,11 @@ sub publish { map { - $keywordout.=''; + $keywordout.='\n"; $colcount=0; @@ -329,11 +367,77 @@ sub publish { } -# DEGUG - $scrout.=$keywordout; + + $scrout.=&textfield('Notes','notes',$metadatafields{'notes'}); + + $scrout.= + '

Abstract:
'; + + $source=~/\.(\w+)$/; + + $scrout.=&hiddenfield('mime',$1); + + $scrout.=&selectbox('Language','language', + $metadatafields{'language'},%language); + + unless ($metadatafields{'creationdate'}) { + $metadatafields{'creationdate'}=time; + } + $scrout.=&hiddenfield('creationdate',$metadatafields{'creationdate'}); + + $scrout.=&hiddenfield('lastrevisiondate',time); + + + $scrout.=&textfield('Publisher/Owner','owner', + $metadatafields{'owner'}); + + $scrout.=&selectbox('Copyright/Distribution','copyright', + $metadatafields{'copyright'},%cprtag); + + } + return $scrout. + '

'; +} + +sub phasetwo { + + my ($source,$target,$style)=@_; + my $logfile; + my $scrout=''; + + unless ($logfile=Apache::File->new('>>'.$source.'.log')) { + return + 'No write permission to user directory, FAIL'; } - return $scrout; + print $logfile +"\n================= Publish ".localtime()." Phase Two ================\n"; + + %metadatafields=(); + %metadatakeys=(); + + &metaeval(&Apache::lonnet::unescape($ENV{'form.allmeta'})); + + $metadatafields{'title'}=$ENV{'form.title'}; + $metadatafields{'author'}=$ENV{'form.author'}; + $metadatafields{'subject'}=$ENV{'form.subject'}; + $metadatafields{'keywords'}=$ENV{'form.keywords'}; + $metadatafields{'notes'}=$ENV{'form.notes'}; + $metadatafields{'abstract'}=$ENV{'form.abstract'}; + $metadatafields{'mime'}=$ENV{'form.mime'}; + $metadatafields{'language'}=$ENV{'form.language'}; + $metadatafields{'creationdate'}=$ENV{'form.creationdate'}; + $metadatafields{'lastrevisiondate'}=$ENV{'form.lastrevisiondate'}; + $metadatafields{'owner'}=$ENV{'form.owner'}; + $metadatafields{'copyright'}=$ENV{'form.copyright'}; + + map { + print $logfile "\n".$_.': '.$metadatafields{$_}. + "\n".$_.'.keys: '.$metadatakeys{$_}; + } sort keys %metadatafields; + + } # ================================================================ Main Handler @@ -388,6 +492,8 @@ sub handler { return HTTP_NOT_FOUND; } +unless ($ENV{'form.phase'} eq 'two') { + # --------------------------------- File is there and owned, init lookup tables %addid=(); @@ -409,6 +515,29 @@ sub handler { $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>; + } + +} + # ----------------------------------------------------------- Start page output $r->content_type('text/html'); @@ -438,13 +567,16 @@ sub handler { $r->print('

Publishing '. &Apache::lonnet::filedescription($thistype).' '. $thisdisfn.'

Target:'.$thisdistarget.'

'); - + # ------------ We are publishing from $thisfn to $thistarget with $thisembstyle - $r->print('


'.&publish($thisfn,$thistarget,$thisembstyle)); - - } + unless ($ENV{'form.phase'} eq 'two') { + $r->print('
'.&publish($thisfn,$thistarget,$thisembstyle)); + } else { + $r->print('
'.&phasetwo($thisfn,$thistarget,$thisembstyle)); + } + } $r->print(''); return OK;
'.$_. - ''; if ($colcount>10) { $keywordout.="