';
- my $colcount=0;
+ $keywordout.='';
- $scrout.=$keywordout;
+ $scrout.=$keywordout;
- $scrout.=&textfield('Additional Keywords','addkey','');
+ $scrout.=&textfield('Additional Keywords','addkey','');
- $scrout.=&textfield('Notes','notes',$metadatafields{'notes'});
+ $scrout.=&textfield('Notes','notes',$metadatafields{'notes'});
- $scrout.=
- 'Abstract: ';
+ $scrout.=
+ "\n
ABSTRACT:".
+ "
".
+ '';
$source=~/\.(\w+)$/;
$scrout.=&hiddenfield('mime',$1);
- $scrout.=&selectbox('Language','language',
- $metadatafields{'language'},
+ my $defaultlanguage=$metadatafields{'language'};
+ $defaultlanguage =~ s/\s*notset\s*//g;
+ $defaultlanguage =~ s/^,\s*//g;
+ $defaultlanguage =~ s/,\s*$//g;
+
+ $scrout.=&selectbox('Language','language',
+ $defaultlanguage,
\&Apache::loncommon::languagedescription,
(&Apache::loncommon::languageids),
- );
+ );
- unless ($metadatafields{'creationdate'}) {
+ unless ($metadatafields{'creationdate'}) {
$metadatafields{'creationdate'}=time;
- }
- $scrout.=&hiddenfield('creationdate',
- &Apache::loncommon::unsqltime($metadatafields{'creationdate'}));
+ }
+ $scrout.=&hiddenfield('creationdate',
+ &Apache::loncommon::unsqltime($metadatafields{'creationdate'}));
+
+ $scrout.=&hiddenfield('lastrevisiondate',time);
- $scrout.=&hiddenfield('lastrevisiondate',time);
-
$scrout.=&textfield('Publisher/Owner','owner',
- $metadatafields{'owner'});
+ $metadatafields{'owner'});
# -------------------------------------------------- Correct copyright for rat.
- if ($style eq 'rat') {
- if ($metadatafields{'copyright'} eq 'public') {
- delete $metadatafields{'copyright'};
+ my $defaultoption=$metadatafields{'copyright'};
+ unless ($defaultoption) { $defaultoption='default'; }
+ unless ($style eq 'prv') {
+ if ($style eq 'rat') {
+ if ($metadatafields{'copyright'} eq 'public') {
+ delete $metadatafields{'copyright'};
+ $defaultoption='default';
+ }
+ $scrout.=&selectbox('Copyright/Distribution','copyright',
+ $defaultoption,
+ \&Apache::loncommon::copyrightdescription,
+ (grep !/^public$/,(&Apache::loncommon::copyrightids)));
+ } else {
+ $scrout.=&selectbox('Copyright/Distribution','copyright',
+ $defaultoption,
+ \&Apache::loncommon::copyrightdescription,
+ (&Apache::loncommon::copyrightids));
+ }
+
+ my $copyright_help =
+ Apache::loncommon::help_open_topic('Publishing_Copyright');
+ $scrout =~ s/DISTRIBUTION:/'DISTRIBUTION: ' . $copyright_help/ge;
+ $scrout.=&textfield('Custom Distribution File','customdistributionfile',
+ $metadatafields{'customdistributionfile'}).
+ $copyright_help;
+ } else {
+ $scrout.=&hiddenfield('copyright','private');
}
- $scrout.=&selectbox('Copyright/Distribution','copyright',
- $metadatafields{'copyright'},
- \&Apache::loncommon::copyrightdescription,
- (grep !/^public$/,(&Apache::loncommon::copyrightids)));
- }
- else {
- $scrout.=&selectbox('Copyright/Distribution','copyright',
- $metadatafields{'copyright'},
- \&Apache::loncommon::copyrightdescription,
- (&Apache::loncommon::copyrightids));
- }
-
- my $copyright_help =
- Apache::loncommon::help_open_topic('Publishing_Copyright');
- $scrout =~ s/DISTRIBUTION:/'DISTRIBUTION: ' . $copyright_help/ge;
- return $scrout.
- '
';
+ return ($scrout.'
',0);
# =============================================================================
# BATCH MODE
#
- } else {
+ } else {
# Transfer metadata directly to environment for stage 2
- foreach (keys %metadatafields) {
- $ENV{'form.'.$_}=$metadatafields{$_};
+ foreach (keys %metadatafields) {
+ $ENV{'form.'.$_}=$metadatafields{$_};
+ }
+ $ENV{'form.addkey'}='';
+ $ENV{'form.keywords'}='';
+ foreach (keys %keywords) {
+ if ($metadatafields{'keywords'}) {
+ if ($metadatafields{'keywords'}=~/\Q$_\E/) {
+ $ENV{'form.keywords'}.=$_.',';
+ }
+ } elsif (&Apache::loncommon::keyword($_)) {
+ $ENV{'form.keywords'}.=$_.',';
+ }
+ }
+ $ENV{'form.keywords'}=~s/\,$//;
+ unless ($ENV{'form.creationdate'}) { $ENV{'form.creationdate'}=time; }
+ $ENV{'form.lastrevisiondate'}=time;
+ if ((($style eq 'rat') && ($ENV{'form.copyright'} eq 'public')) ||
+ (!$ENV{'form.copyright'})) {
+ $ENV{'form.copyright'}='default';
+ }
+ $ENV{'form.allmeta'}=&Apache::lonnet::escape($allmeta);
+ return ($scrout,0);
}
- $ENV{'form.addkey'}='';
- $ENV{'form.keywords'}='';
- foreach (keys %keywords) {
- if ($metadatafields{'keywords'}) {
- if ($metadatafields{'keywords'}=~/$_/) {
- $ENV{'form.keywords'}.=$_.',';
- }
- } elsif (&Apache::loncommon::keyword($_)) {
- $ENV{'form.keywords'}.=$_.',';
- }
- }
- $ENV{'form.keywords'}=~s/\,$//;
- unless ($ENV{'form.creationdate'}) { $ENV{'form.creationdate'}=time; }
- $ENV{'form.lastrevisiondate'}=time;
- if ((($style eq 'rat') && ($ENV{'form.copyright'} eq 'public')) ||
- (!$ENV{'form.copyright'})) {
- $ENV{'form.copyright'}='default';
- }
- $ENV{'form.allmeta'}=&Apache::lonnet::escape($allmeta);
- return $scrout;
- }
}
#########################################
@@ -1203,14 +1220,21 @@ sub phasetwo {
my ($r,$source,$target,$style,$distarget,$batch)=@_;
$source=~s/\/+/\//g;
$target=~s/\/+/\//g;
+
+ if ($target=~/\_\_\_/) {
+ $r->print(
+ 'Unsupported character combination "___ " in filename, FAIL ');
+ return 0;
+ }
$distarget=~s/\/+/\//g;
my $logfile;
unless ($logfile=Apache::File->new('>>'.$source.'.log')) {
- return
- 'No write permission to user directory, FAIL ';
+ $r->print(
+ 'No write permission to user directory, FAIL ');
+ return 0;
}
print $logfile
- "\n================= Publish ".localtime()." Phase Two ================\n";
+ "\n================= Publish ".localtime()." Phase Two ================\n".$ENV{'user.name'}.'@'.$ENV{'user.domain'}."\n";
%metadatafields=();
%metadatakeys=();
@@ -1228,6 +1252,8 @@ sub phasetwo {
$metadatafields{'lastrevisiondate'}=$ENV{'form.lastrevisiondate'};
$metadatafields{'owner'}=$ENV{'form.owner'};
$metadatafields{'copyright'}=$ENV{'form.copyright'};
+ $metadatafields{'customdistributionfile'}=
+ $ENV{'form.customdistributionfile'};
$metadatafields{'dependencies'}=$ENV{'form.dependencies'};
my $allkeywords=$ENV{'form.addkey'};
@@ -1247,7 +1273,7 @@ sub phasetwo {
my $mfh;
unless ($mfh=Apache::File->new('>'.$source.'.meta')) {
return
- 'Could not write metadata, FAIL ';
+ 'Could not write metadata, FAIL ';
}
foreach (sort keys %metadatafields) {
unless ($_=~/\./) {
@@ -1266,7 +1292,7 @@ sub phasetwo {
.''.$tag.'>';
}
}
- $r->print('Wrote Metadata');
+ $r->print('
Wrote Metadata
');
print $logfile "\nWrote metadata";
}
@@ -1277,14 +1303,14 @@ sub phasetwo {
unless ($metadatafields{'copyright'} eq 'priv') {
my ($error,$success) = &store_metadata(\%metadatafields);
if ($success) {
- $r->print('Synchronized SQL metadata database');
+ $r->print('
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('
Private Publication - did not synchronize database
');
print $logfile "\nPrivate: Did not synchronize data into ".
"SQL metadata database";
}
@@ -1299,7 +1325,7 @@ sub phasetwo {
my $srcd=$1;
unless ($srcd=~/^\/home\/httpd\/html\/res/) {
print $logfile "\nPANIC: Target dir is ".$srcd;
- return "Invalid target directory, FAIL ";
+ return "Invalid target directory, FAIL ";
}
opendir(DIR,$srcd);
while ($filename=readdir(DIR)) {
@@ -1307,24 +1333,24 @@ sub phasetwo {
unlink($srcd.'/'.$filename);
unlink($srcd.'/'.$filename.'.meta');
} else {
- if ($filename=~/$srcf\.(\d+)\.$srct$/) {
+ if ($filename=~/\Q$srcf\E\.(\d+)\.\Q$srct\E$/) {
$maxversion=($1>$maxversion)?$1:$maxversion;
}
}
}
closedir(DIR);
$maxversion++;
- $r->print('Creating old version '.$maxversion);
- print $logfile "\nCreating old version ".$maxversion;
+ $r->print('
Creating old version '.$maxversion.'
');
+ print $logfile "\nCreating old version ".$maxversion."\n";
my $copyfile=$srcd.'/'.$srcf.'.'.$maxversion.'.'.$srct;
if (copy($target,$copyfile)) {
print $logfile "Copied old target to ".$copyfile."\n";
- $r->print('Copied old target file');
+ $r->print('
Copied old target file
');
} else {
print $logfile "Unable to write ".$copyfile.':'.$!."\n";
- return "Failed to copy old target, $!, FAIL ";
+ return "Failed to copy old target, $!, FAIL ";
}
# --------------------------------------------------------------- Copy Metadata
@@ -1333,18 +1359,18 @@ sub phasetwo {
if (copy($target.'.meta',$copyfile)) {
print $logfile "Copied old target metadata to ".$copyfile."\n";
- $r->print('Copied old metadata')
+ $r->print('
Copied old metadata
')
} else {
print $logfile "Unable to write metadata ".$copyfile.':'.$!."\n";
if (-e $target.'.meta') {
return
- "Failed to write old metadata copy, $!, FAIL ";
+ "Failed to write old metadata copy, $!, FAIL ";
}
}
} else {
- $r->print('Initial version');
+ $r->print('
Initial version
');
print $logfile "\nInitial version";
}
@@ -1359,17 +1385,17 @@ sub phasetwo {
$path.="/$parts[$count]";
if ((-e $path)!=1) {
print $logfile "\nCreating directory ".$path;
- $r->print('Created directory '.$parts[$count]);
+ $r->print('
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('
Copied source file
');
} else {
print $logfile "\nUnable to write ".$copyfile.':'.$!."\n";
- return "Failed to copy source, $!, FAIL ";
+ return "Failed to copy source, $!, FAIL ";
}
# --------------------------------------------------------------- Copy Metadata
@@ -1378,11 +1404,11 @@ sub phasetwo {
if (copy($source.'.meta',$copyfile)) {
print $logfile "\nCopied original metadata to ".$copyfile."\n";
- $r->print('Copied metadata');
+ $r->print('
Copied metadata
');
} else {
print $logfile "\nUnable to write metadata ".$copyfile.':'.$!."\n";
return
- "Failed to write metadata copy, $!, FAIL ";
+ "Failed to write metadata copy, $!, FAIL ";
}
$r->rflush;
# --------------------------------------------------- Send update notifications
@@ -1392,7 +1418,7 @@ sub phasetwo {
$r->print('Notifying host '.$subhost.':');$r->rflush;
print $logfile "\nNotifying host ".$subhost.':';
my $reply=&Apache::lonnet::critical('update:'.$target,$subhost);
- $r->print($reply.' ');$r->rflush;
+ $r->print($reply.'
');$r->rflush;
print $logfile $reply;
}
@@ -1404,7 +1430,7 @@ sub phasetwo {
print $logfile "\nNotifying host for metadata only ".$subhost.':';
my $reply=&Apache::lonnet::critical('update:'.$target.'.meta',
$subhost);
- $r->print($reply.' ');$r->rflush;
+ $r->print($reply.' ');$r->rflush;
print $logfile $reply;
}
@@ -1417,13 +1443,13 @@ sub phasetwo {
my ($cdom,$cname)=split(/\_/,$_);
my $reply=&Apache::lonnet::cput
('versionupdate',{$target => $now},$cdom,$cname);
- $r->print($reply.' ');$r->rflush;
+ $r->print($reply.' ');$r->rflush;
print $logfile $reply;
}
# ------------------------------------------------ Provide link to new resource
unless ($batch) {
my $thisdistarget=$target;
- $thisdistarget=~s/^$docroot//;
+ $thisdistarget=~s/^\Q$docroot\E//;
my $thissrc=$source;
$thissrc=~s/^\/home\/(\w+)\/public_html/\/priv\/$1/;
@@ -1433,11 +1459,11 @@ sub phasetwo {
$r->print(
- ''.
+ ''.
'View Published Version '.
- 'Back to Source '.
+ '
Back to Source
'.
'Back to Source Directory ');
+ '">Back to Source Directory
');
}
}
@@ -1453,7 +1479,7 @@ sub batchpublish {
my $docroot=$r->dir_config('lonDocRoot');
my $thisdistarget=$targetfile;
- $thisdistarget=~s/^$docroot//;
+ $thisdistarget=~s/^\Q$docroot\E//;
undef %metadatafields;
@@ -1470,13 +1496,16 @@ sub batchpublish {
# phase one takes
# my ($source,$target,$style,$batch)=@_;
- $r->print(''.&publish($srcfile,$targetfile,$thisembstyle,1).'
');
+ my ($outstring,$error)=&publish($srcfile,$targetfile,$thisembstyle,1);
+ $r->print(''.$outstring.'
');
# phase two takes
# my ($source,$target,$style,$distarget,batch)=@_;
# $ENV{'form.allmeta'},$ENV{'form.title'},$ENV{'form.author'},...
- $r->print('');
- &phasetwo($r,$srcfile,$targetfile,$thisembstyle,$thisdistarget,1);
- $r->print('
');
+ if (!$error) {
+ $r->print('');
+ &phasetwo($r,$srcfile,$targetfile,$thisembstyle,$thisdistarget,1);
+ $r->print('
');
+ }
return '';
}
@@ -1517,7 +1546,7 @@ sub publishdirectory {
$ruid,$rgid,$rrdev,$rsize,
$ratime,$rmtime,$rctime,
$rblksize,$rblocks)=stat($resdir.'/'.$filename);
- if ($rmtime<$cmtime) {
+ if (($rmtime<$cmtime) || ($ENV{'form.forcerepub'})) {
# previously published, modified now
$publishthis=1;
}
@@ -1591,7 +1620,7 @@ sub handler {
# -------------------------------------------------------------- Check filename
- my $fn=$ENV{'form.filename'};
+ my $fn=&Apache::lonnet::unescape($ENV{'form.filename'});
unless ($fn) {
@@ -1687,10 +1716,10 @@ unless ($ENV{'form.phase'} eq 'two') {
$thistarget=~s/\/public\_html//;
my $thisdistarget=$thistarget;
- $thisdistarget=~s/^$docroot//;
+ $thisdistarget=~s/^\Q$docroot\E//;
my $thisdisfn=$thisfn;
- $thisdisfn=~s/^\/home\/$cuname\/public_html\///;
+ $thisdisfn=~s/^\/home\/\Q$cuname\E\/public_html\///;
if ($fn=~/\/$/) {
# -------------------------------------------------------- This is a directory
@@ -1705,7 +1734,7 @@ unless ($ENV{'form.phase'} eq 'two') {
$r->print('Publishing '.
&Apache::loncommon::filedescription($thistype).' '.
''.$thisdisfn.
- ' Target: '.$thisdistarget.' ');
+ 'Target: '.$thisdistarget.' ');
if (($cuname ne $ENV{'user.name'}) || ($cudom ne $ENV{'user.domain'})) {
$r->print('
Co-Author: '.$cuname.' at '.$cudom.
@@ -1715,19 +1744,18 @@ unless ($ENV{'form.phase'} eq 'two') {
if (&Apache::loncommon::fileembstyle($thistype) eq 'ssi') {
$r->print('Diffs with Current Version ');
+ '&versiontwo=priv" target="cat">Diffs with Current Version ');
}
# ------------------ Publishing from $thisfn to $thistarget with $thisembstyle.
unless ($ENV{'form.phase'} eq 'two') {
- $r->print(
- '
'.&publish($thisfn,$thistarget,$thisembstyle));
+ my ($outstring,$error)=&publish($thisfn,$thistarget,$thisembstyle);
+ $r->print(' '.$outstring);
} else {
$r->print(' ');
&phasetwo($r,$thisfn,$thistarget,$thisembstyle,$thisdistarget);
- }
-
+ }
}
$r->print('