--- loncom/publisher/lonpublisher.pm 2003/07/25 02:04:51 1.127
+++ loncom/publisher/lonpublisher.pm 2003/09/25 22:30:06 1.138
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Publication Handler
#
-# $Id: lonpublisher.pm,v 1.127 2003/07/25 02:04:51 bowersj2 Exp $
+# $Id: lonpublisher.pm,v 1.138 2003/09/25 22:30:06 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -142,6 +142,7 @@ use DBI;
use Apache::lonnet();
use Apache::loncommon();
use Apache::lonmysql;
+use Apache::lonlocal;
use vars qw(%metadatafields %metadatakeys);
my %addid;
@@ -324,6 +325,7 @@ string which presents the form field (fo
#########################################
sub textfield {
my ($title,$name,$value)=@_;
+ $title=&mt($title);
my $uctitle=uc($title);
return "\n
$uctitle:".
"
".
@@ -337,6 +339,7 @@ sub hiddenfield {
sub selectbox {
my ($title,$name,$value,$functionref,@idlist)=@_;
+ $title=&mt($title);
my $uctitle=uc($title);
$value=(split(/\s*,\s*/,$value))[-1];
my $selout="\n$uctitle:".
@@ -667,7 +670,10 @@ sub fix_ids_and_indices {
}
}
# probably a image type
- if ($lctag eq 'label' && defined($parms{'description'})) {
+ # or a tag inside
+ if (($lctag eq 'label' && defined($parms{'description'}))
+ ||
+ ($lctag eq 'image')) {
my $next_token=$parser[-1]->get_token();
if ($next_token->[0] eq 'T') {
$next_token->[1]=&set_allow(\%allow,$logfile,
@@ -718,8 +724,9 @@ sub fix_ids_and_indices {
}
if (!$endtag) { if ($token->[4]=~m:/>$:) { $endtag=' /'; }; }
$outstring.='<'.$tag.$newparmstring.$endtag.'>';
- if ($lctag eq 'm') {
- $outstring.=&get_all_text_unbalanced('/m',\@parser);
+ if ($lctag eq 'm' || $lctag eq 'script'
+ || $lctag eq 'display' || $lctag eq 'tex') {
+ $outstring.=&get_all_text_unbalanced('/'.$lctag,\@parser);
}
} elsif ($token->[0] eq 'E') {
if ($token->[2]) {
@@ -890,16 +897,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,7 +927,7 @@ sub publish {
my %oldparmstores=();
unless ($batch) {
- $scrout.='Metadata Information ' .
+ $scrout.=''.&mt('Metadata Information').' ' .
Apache::loncommon::help_open_topic("Metadata_Description")
. ' ';
}
@@ -973,11 +984,12 @@ sub publish {
# -------------------------------------------------- Parse content for metadata
if (($style eq 'ssi') || ($style eq 'prv')) {
- my $oldenv=$ENV{'request.uri'};
-
- $ENV{'request.uri'}=$target;
- $allmeta=Apache::lonxml::xmlparse(undef,'meta',$content);
- $ENV{'request.uri'}=$oldenv;
+ 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);
}
@@ -995,7 +1007,8 @@ sub publish {
}
}
if ($chparms) {
- $scrout.=' New parameters or stored values: '.$chparms.'
';
+ $scrout.=''.&mt('New parameters or stored values').
+ ': '.$chparms.'
';
}
$chparms='';
@@ -1009,7 +1022,7 @@ sub publish {
}
}
if ($chparms) {
- $scrout.='Obsolete parameters or stored values: '.
+ $scrout.='
'.&mt('Obsolete parameters or stored values').': '.
$chparms.'
';
}
@@ -1162,10 +1175,22 @@ END
$scrout.=&textfield('Custom Distribution File','customdistributionfile',
$metadatafields{'customdistributionfile'}).
$copyright_help;
+ my $uctitle=uc(&mt('Obsolete'));
+ $scrout.=
+ "\n$uctitle:".
+ '
'.
+ &textfield('Suggested Replacement for Obsolete File',
+ 'obsoletereplacement',
+ $metadatafields{'obsoletereplacement'});
} else {
$scrout.=&hiddenfield('copyright','private');
}
- return ($scrout.'
',0);
+ return ($scrout.'
',0);
# =============================================================================
# BATCH MODE
#
@@ -1243,14 +1268,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
@@ -1274,6 +1301,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'};
@@ -1293,7 +1323,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 ($_=~/\./) {
@@ -1312,7 +1343,7 @@ sub phasetwo {
.''.$tag.'>';
}
}
- $r->print('Wrote Metadata
');
+ $r->print(''.&mt('Wrote Metadata').'
');
print $logfile "\nWrote metadata";
}
@@ -1323,14 +1354,15 @@ sub phasetwo {
unless ($metadatafields{'copyright'} eq 'priv') {
my ($error,$success) = &store_metadata(\%metadatafields);
if ($success) {
- $r->print('Synchronized SQL metadata database
');
+ $r->print(''.&mt('Synchronized SQL metadata database').'
');
print $logfile "\nSynchronized SQL metadata database";
} else {
$r->print($error);
print $logfile "\n".$error;
}
} else {
- $r->print('Private Publication - did not synchronize database
');
+ $r->print(''.
+ &mt('Private Publication - did not synchronize database').'
');
print $logfile "\nPrivate: Did not synchronize data into ".
"SQL metadata database";
}
@@ -1367,10 +1399,11 @@ sub phasetwo {
if (copy($target,$copyfile)) {
print $logfile "Copied old target to ".$copyfile."\n";
- $r->print('Copied old target file
');
+ $r->print(''.&mt('Copied old target file').'
');
} else {
print $logfile "Unable to write ".$copyfile.':'.$!."\n";
- return "Failed to copy old target, $!, FAIL ";
+ return "".&mt('Failed to copy old target').
+ ", $!, ".&mt('FAIL')." ";
}
# --------------------------------------------------------------- Copy Metadata
@@ -1379,18 +1412,19 @@ sub phasetwo {
if (copy($target.'.meta',$copyfile)) {
print $logfile "Copied old target metadata to ".$copyfile."\n";
- $r->print('Copied old metadata
')
+ $r->print(''.&mt('Copied old metadata').'
')
} else {
print $logfile "Unable to write metadata ".$copyfile.':'.$!."\n";
if (-e $target.'.meta') {
return
- "Failed to write old metadata copy, $!, FAIL ";
+ "".
+&mt('Failed to write old metadata copy').", $!, ".&mt('FAIL')." ";
}
}
} else {
- $r->print('Initial version
');
+ $r->print(''.&mt('Initial version').'
');
print $logfile "\nInitial version";
}
@@ -1405,17 +1439,18 @@ sub phasetwo {
$path.="/$parts[$count]";
if ((-e $path)!=1) {
print $logfile "\nCreating directory ".$path;
- $r->print('Created directory '.$parts[$count].'
');
+ $r->print(''.&mt('Created directory').' '.$parts[$count].'
');
mkdir($path,0777);
}
}
if (copy($source,$copyfile)) {
print $logfile "\nCopied original source to ".$copyfile."\n";
- $r->print('Copied source file
');
+ $r->print(''.&mt('Copied source file').'
');
} else {
print $logfile "\nUnable to write ".$copyfile.':'.$!."\n";
- return "Failed to copy source, $!, FAIL ";
+ return "".
+ &mt('Failed to copy source').", $!, ".&mt('FAIL')." ";
}
# --------------------------------------------------------------- Copy Metadata
@@ -1424,18 +1459,18 @@ sub phasetwo {
if (copy($source.'.meta',$copyfile)) {
print $logfile "\nCopied original metadata to ".$copyfile."\n";
- $r->print('Copied metadata
');
+ $r->print(''.&mt('Copied metadata').'
');
} else {
print $logfile "\nUnable to write metadata ".$copyfile.':'.$!."\n";
return
- "Failed to write metadata copy, $!, FAIL ";
+ "".&mt('Failed to write metadata copy').", $!, ".&mt('FAIL')." ";
}
$r->rflush;
# --------------------------------------------------- Send update notifications
my @subscribed=&get_subscribed_hosts($target);
foreach my $subhost (@subscribed) {
- $r->print('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.'
');$r->rflush;
@@ -1446,7 +1481,8 @@ sub phasetwo {
my @subscribedmeta=&get_subscribed_hosts("$target.meta");
foreach my $subhost (@subscribedmeta) {
- $r->print('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);
@@ -1458,7 +1494,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
@@ -1480,10 +1516,12 @@ sub phasetwo {
$r->print(
'
'.
- 'View Published Version '.
- 'Back to Source
'.
+ &mt('View Published Version').' '.
+ '
'.
+ &mt('Back to Source').'
'.
'Back to Source Directory
');
+ '">'.
+ &mt('Back to Source Directory').' ');
}
}
@@ -1491,6 +1529,8 @@ sub phasetwo {
sub batchpublish {
my ($r,$srcfile,$targetfile)=@_;
+ #publication pollutes %ENV with form.* values
+ my %oldENV=%ENV;
$srcfile=~s/\/+/\//g;
$targetfile=~s/\/+/\//g;
my $thisdisfn=$srcfile;
@@ -1512,7 +1552,7 @@ sub batchpublish {
my $thisembstyle=&Apache::loncommon::fileembstyle($thistype);
- $r->print('Publishing '.$thisdisfn.' ');
+ $r->print(''.&mt('Publishing').' '.$thisdisfn.' ');
# phase one takes
# my ($source,$target,$style,$batch)=@_;
@@ -1526,6 +1566,7 @@ sub batchpublish {
&phasetwo($r,$srcfile,$targetfile,$thisembstyle,$thisdistarget,1);
$r->print('');
}
+ %ENV=%oldENV;
return '';
}
@@ -1628,7 +1669,7 @@ sub handler {
my $r=shift;
if ($r->header_only) {
- $r->content_type('text/html');
+ &Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
return OK;
}
@@ -1721,7 +1762,7 @@ unless ($ENV{'form.phase'} eq 'two') {
# ---------------------------------------------------------- Start page output.
- $r->content_type('text/html');
+ &Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
$r->print('LON-CAPA Publishing ');
@@ -1744,27 +1785,37 @@ unless ($ENV{'form.phase'} eq 'two') {
if ($fn=~/\/$/) {
# -------------------------------------------------------- This is a directory
&publishdirectory($r,$fn,$thisdisfn);
+ $r->print(''.&mt('Done').' '.&mt('Return to Directory').' ');
+
} else {
# ---------------------- Evaluate individual file, and then output information.
$thisfn=~/\.(\w+)$/;
my $thistype=$1;
my $thisembstyle=&Apache::loncommon::fileembstyle($thistype);
+ $r->print(''.&mt('Publishing').' '.
+ &Apache::loncommon::filedescription($thistype).' ');
- $r->print('Publishing '.
- &Apache::loncommon::filedescription($thistype).' '.
- ''.$thisdisfn.
- ' Target: '.$thisdistarget.' ');
+ $r->print(<
+$thisdisfn
+ENDCAPTION
+ $r->print(
+ ' '.&mt('Target').': '.$thisdistarget.' ');
if (($cuname ne $ENV{'user.name'}) || ($cudom ne $ENV{'user.domain'})) {
- $r->print('Co-Author: '.$cuname.' at '.$cudom.
+ $r->print(''.&mt('Co-Author').': '.$cuname.&mt(' at ').$cudom.
' ');
}
if (&Apache::loncommon::fileembstyle($thistype) eq 'ssi') {
- $r->print('Diffs with Current Version ');
+ $r->print(<
+
+ENDDIFF
+ $r->print(&mt('Diffs with Current Version').' ');
}
# ------------------ Publishing from $thisfn to $thistarget with $thisembstyle.