--- loncom/publisher/lonpublisher.pm 2003/09/24 19:38:18 1.135
+++ loncom/publisher/lonpublisher.pm 2003/12/08 18:26:01 1.146
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Publication Handler
#
-# $Id: lonpublisher.pm,v 1.135 2003/09/24 19:38:18 albertel Exp $
+# $Id: lonpublisher.pm,v 1.146 2003/12/08 18:26:01 sakharuk Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -143,6 +143,7 @@ use Apache::lonnet();
use Apache::loncommon();
use Apache::lonmysql;
use Apache::lonlocal;
+use Apache::loncfile;
use vars qw(%metadatafields %metadatakeys);
my %addid;
@@ -180,46 +181,49 @@ nothing
#########################################
#########################################
+#
+# Modifies global %metadatafields %metadatakeys
+#
+
sub metaeval {
- my $metastring=shift;
+ my ($metastring,$prefix)=@_;
- my $parser=HTML::LCParser->new(\$metastring);
- my $token;
- while ($token=$parser->get_token) {
- if ($token->[0] eq 'S') {
- my $entry=$token->[1];
- my $unikey=$entry;
- if (defined($token->[2]->{'package'})) {
- $unikey.='_package_'.$token->[2]->{'package'};
- }
- if (defined($token->[2]->{'part'})) {
- $unikey.='_'.$token->[2]->{'part'};
- }
- if (defined($token->[2]->{'id'})) {
- $unikey.='_'.$token->[2]->{'id'};
- }
- if (defined($token->[2]->{'name'})) {
- $unikey.='_'.$token->[2]->{'name'};
- }
- foreach (@{$token->[3]}) {
- $metadatafields{$unikey.'.'.$_}=$token->[2]->{$_};
- if ($metadatakeys{$unikey}) {
- $metadatakeys{$unikey}.=','.$_;
- } else {
- $metadatakeys{$unikey}=$_;
- }
- }
- if ($metadatafields{$unikey}) {
- my $newentry=$parser->get_text('/'.$entry);
- unless (($metadatafields{$unikey}=~/\Q$newentry\E/) ||
- ($newentry eq '')) {
- $metadatafields{$unikey}.=', '.$newentry;
- }
- } else {
- $metadatafields{$unikey}=$parser->get_text('/'.$entry);
- }
- }
- }
+ my $parser=HTML::LCParser->new(\$metastring);
+ my $token;
+ while ($token=$parser->get_token) {
+ if ($token->[0] eq 'S') {
+ my $entry=$token->[1];
+ my $unikey=$entry;
+ if (defined($token->[2]->{'package'})) {
+ $unikey.='_package_'.$token->[2]->{'package'};
+ }
+ if (defined($token->[2]->{'part'})) {
+ $unikey.='_'.$token->[2]->{'part'};
+ }
+ if (defined($token->[2]->{'id'})) {
+ $unikey.='_'.$token->[2]->{'id'};
+ }
+ if (defined($token->[2]->{'name'})) {
+ $unikey.='_'.$token->[2]->{'name'};
+ }
+ foreach (@{$token->[3]}) {
+ $metadatafields{$unikey.'.'.$_}=$token->[2]->{$_};
+ if ($metadatakeys{$unikey}) {
+ $metadatakeys{$unikey}.=','.$_;
+ } else {
+ $metadatakeys{$unikey}=$_;
+ }
+ }
+ my $newentry=$parser->get_text('/'.$entry);
+ if ($entry eq 'customdistributionfile') {
+ $newentry=~s/^\s*//;
+ if ($newentry !~m|^/res|) { $newentry=$prefix.$newentry; }
+ }
+ unless ($metadatafields{$unikey}=~/\w/) {
+ $metadatafields{$unikey}=$newentry;
+ }
+ }
+ }
}
#########################################
@@ -260,19 +264,21 @@ XHTML text that indicates successful rea
#########################################
#########################################
sub metaread {
- my ($logfile,$fn)=@_;
+ my ($logfile,$fn,$prefix)=@_;
unless (-e $fn) {
print($logfile 'No file '.$fn."\n");
- return '
No file: '.$fn.'';
+ return '
'.&mt('No file').': '.
+ &Apache::loncfile::display($fn).'';
}
print($logfile 'Processing '.$fn."\n");
my $metastring;
{
- my $metafh=Apache::File->new($fn);
- $metastring=join('',<$metafh>);
+ my $metafh=Apache::File->new($fn);
+ $metastring=join('',<$metafh>);
}
- &metaeval($metastring);
- return '
Processed file: '.$fn.'';
+ &metaeval($metastring,$prefix);
+ return '
Processed file: '.
+ &Apache::loncfile::display($fn).'';
}
#########################################
@@ -325,6 +331,9 @@ string which presents the form field (fo
#########################################
sub textfield {
my ($title,$name,$value)=@_;
+ $value=~s/^\s+//gs;
+ $value=~s/\s+$//gs;
+ $value=~s/\s+/ /gs;
$title=&mt($title);
my $uctitle=uc($title);
return "\n
$uctitle:".
@@ -808,6 +817,26 @@ sub store_metadata {
return (undef,$status);
}
+
+# ============================================== Parse file itself for metadata
+#
+# parses a file with target meta, sets global %metadatafields %metadatakeys
+
+sub parseformeta {
+ my ($source,$style)=@_;
+ my $allmeta='';
+ if (($style eq 'ssi') || ($style eq 'prv')) {
+ my $dir=$source;
+ $dir=~s-/[^/]*$--;
+ my $file=$source;
+ $file=(split('/',$file))[-1];
+ $source=&Apache::lonnet::hreflocation($dir,$file);
+ $allmeta=&Apache::lonnet::ssi_body($source,('grade_target' => 'meta'));
+ &metaeval($allmeta);
+ }
+ return $allmeta;
+}
+
#########################################
#########################################
@@ -863,7 +892,7 @@ sub publish {
if ($error) { return ($outstring,$error); }
# ------------------------------------------------------------ Construct Allows
- $scrout.=' New parameters or stored values: '.$chparms.' '.&mt('New parameters or stored values').
+ ': '.$chparms.' Obsolete parameters or stored values: '.
- $chparms.' '.&mt('Obsolete parameters or stored values').': '.
+ $chparms.' '.
+ &mt('If this resource is in active use, student performance data from the previous version may become inaccessible.').' Wrote Metadata '.&mt('Wrote Metadata').' Synchronized SQL metadata database '.&mt('Synchronized SQL metadata database').' Private Publication - did not synchronize database '.
+ &mt('Private Publication - did not synchronize database').' Copied old target file '.&mt('Copied old target file').' Copied old metadata '.&mt('Copied old metadata').' Initial version '.&mt('Initial version').' Created directory '.$parts[$count].' '.&mt('Created directory').' '.$parts[$count].' Copied source file '.&mt('Copied source file').' Copied metadata '.&mt('Copied metadata').' Notifying host '.$subhost.':');$r->rflush;
+ $r->print(' '.&mt('Notifying host').' '.$subhost.':');$r->rflush;
print $logfile "\nNotifying host ".$subhost.':';
my $reply=&Apache::lonnet::critical('update:'.$target,$subhost);
$r->print($reply.' Notifying host for metadata only '.$subhost.':');$r->rflush;
+ $r->print(' '.
+&mt('Notifying host for metadata only').' '.$subhost.':');$r->rflush;
print $logfile "\nNotifying host for metadata only ".$subhost.':';
my $reply=&Apache::lonnet::critical('update:'.$target.'.meta',
$subhost);
@@ -1466,7 +1527,7 @@ sub phasetwo {
my %courses=&coursedependencies($target);
my $now=time;
foreach (keys %courses) {
- $r->print(' Notifying course '.$_.':');$r->rflush;
+ $r->print(' '.&mt('Notifying course').' '.$_.':');$r->rflush;
print $logfile "\nNotifying host ".$_.':';
my ($cdom,$cname)=split(/\_/,$_);
my $reply=&Apache::lonnet::cput
@@ -1488,10 +1549,12 @@ sub phasetwo {
$r->print(
'Dependencies
';
+ $scrout.=''.&mt('Dependencies').'
';
my $allowstr='';
foreach (sort(keys(%allow))) {
my $thisdep=$_;
@@ -897,16 +926,20 @@ sub publish {
}
$outstring=~s/\n*(\<\/[^\>]+\>)\s*$/$allowstr\n$1\n/s;
+### FIXME: is this really what we want?
+# I dont' think so, to will corrupt any UTF-8 resources at least,
+# and any encoding other than ISO-8859-1 will probably break
#Encode any High ASCII characters
- $outstring=&HTML::Entities::encode($outstring,"\200-\377");
+ #$outstring=&HTML::Entities::encode($outstring,"\200-\377");
# ------------------------------------------------------------- Write modified.
{
my $org;
unless ($org=Apache::File->new('>'.$source)) {
print $logfile "No write permit to $source\n";
- return ('No write permission to '.$source.
- ', FAIL',1);
+ return (''.&mt('No write permission to').
+ ' '.$source.
+ ', '.&mt('FAIL').'',1);
}
print($org $outstring);
}
@@ -916,14 +949,15 @@ sub publish {
# -------------------------------------------- Initial step done, now metadata.
# --------------------------------------- Storage for metadata keys and fields.
-
+# these are globals
+#
%metadatafields=();
%metadatakeys=();
my %oldparmstores=();
unless ($batch) {
- $scrout.='Metadata Information ' .
+ $scrout.='
'.&mt('Metadata Information').' ' .
Apache::loncommon::help_open_topic("Metadata_Description")
. '
';
}
@@ -941,6 +975,10 @@ sub publish {
$ENV{'user.domain'};
$metadatafields{'authorspace'}=$cuname.'@'.$cudom;
+# ----------------------------------------------------------- Parse file itself
+# read %metadatafields from file itself
+
+ $allmeta=&parseformeta($source,$style);
# ------------------------------------------------ Check out directory hierachy
my $thisdisfn=$source;
@@ -951,9 +989,11 @@ sub publish {
my $currentpath='/home/'.$cuname.'/';
+ my $prefix='../'x($#urlparts);
foreach (@urlparts) {
$currentpath.=$_.'/';
- $scrout.=&metaread($logfile,$currentpath.'default.meta');
+ $scrout.=&metaread($logfile,$currentpath.'default.meta',$prefix);
+ $prefix=~s|^\.\./||;
}
# ------------------- Clear out parameters and stores (there should not be any)
@@ -975,20 +1015,12 @@ sub publish {
delete $metadatafields{$_};
}
}
-
- }
-
-# -------------------------------------------------- Parse content for metadata
- if (($style eq 'ssi') || ($style eq 'prv')) {
- my $dir=$source;
- $dir=~s-/[^/]*$--;
- my $file=$source;
- $file=(split('/',$file))[-1];
- $source=&Apache::lonnet::hreflocation($dir,$file);
- $allmeta=&Apache::lonnet::ssi_body($source,('grade_target' => 'meta'));
+# ------------------------------------------ See if anything new in file itself
+
+ $allmeta=&parseformeta($source,$style);
+ }
- &metaeval($allmeta);
- }
+
# ---------------- Find and document discrepancies in the parameters and stores
my $chparms='';
@@ -1003,7 +1035,8 @@ sub publish {
}
}
if ($chparms) {
- $scrout.=''.&mt('Warning!').
+ '
';
}
# ------------------------------------------------------- Now have all metadata
@@ -1052,7 +1087,7 @@ sub publish {
unless ($batch) {
$scrout.=
'',0);
+ return ($scrout.'',0);
# =============================================================================
# BATCH MODE
#
@@ -1251,14 +1301,16 @@ sub phasetwo {
if ($target=~/\_\_\_/) {
$r->print(
- 'Unsupported character combination "___" in filename, FAIL');
+ ''.&mt('Unsupported character combination').
+ ' "___" '.&mt('in filename, FAIL').'');
return 0;
}
$distarget=~s/\/+/\//g;
my $logfile;
unless ($logfile=Apache::File->new('>>'.$source.'.log')) {
$r->print(
- 'No write permission to user directory, FAIL');
+ ''.
+ &mt('No write permission to user directory, FAIL').'');
return 0;
}
print $logfile
@@ -1282,6 +1334,9 @@ sub phasetwo {
$metadatafields{'copyright'}=$ENV{'form.copyright'};
$metadatafields{'customdistributionfile'}=
$ENV{'form.customdistributionfile'};
+ $metadatafields{'obsolete'}=$ENV{'form.obsolete'};
+ $metadatafields{'obsoletereplacement'}=
+ $ENV{'form.obsoletereplacement'};
$metadatafields{'dependencies'}=$ENV{'form.dependencies'};
my $allkeywords=$ENV{'form.addkey'};
@@ -1301,7 +1356,8 @@ sub phasetwo {
my $mfh;
unless ($mfh=Apache::File->new('>'.$source.'.meta')) {
return
- 'Could not write metadata, FAIL';
+ ''.&mt('Could not write metadata, FAIL').
+ '';
}
foreach (sort keys %metadatafields) {
unless ($_=~/\./) {
@@ -1320,7 +1376,7 @@ sub phasetwo {
.''.$tag.'>';
}
}
- $r->print('
');$r->rflush;
@@ -1454,7 +1514,8 @@ sub phasetwo {
my @subscribedmeta=&get_subscribed_hosts("$target.meta");
foreach my $subhost (@subscribedmeta) {
- $r->print('
'.
- 'View Published Version'.
- ''.
+ &mt('View Published Version').''.
+ '