version 1.192, 2005/04/07 06:56:27
|
version 1.197, 2005/05/30 17:10:44
|
Line 353 sub hiddenfield {
|
Line 353 sub hiddenfield {
|
return "\n".'<input type="hidden" name="'.$name.'" value="'.$value.'" />'; |
return "\n".'<input type="hidden" name="'.$name.'" value="'.$value.'" />'; |
} |
} |
|
|
|
sub checkbox { |
|
my ($name,$text)=@_; |
|
return "\n<br /><input type='checkbox' name='$name' /> ".&mt($text); |
|
} |
|
|
sub selectbox { |
sub selectbox { |
my ($title,$name,$value,$functionref,@idlist)=@_; |
my ($title,$name,$value,$functionref,@idlist)=@_; |
$title=&mt($title); |
$title=&mt($title); |
Line 1015 sub publish {
|
Line 1020 sub publish {
|
} |
} |
|
|
# ------------------------------------------------ First, check out environment |
# ------------------------------------------------ First, check out environment |
unless (-e $source.'.meta') { |
if ((!(-e $source.'.meta')) || ($env{'form.forceoverride'})) { |
$metadatafields{'author'}=$env{'environment.firstname'}.' '. |
$metadatafields{'author'}=$env{'environment.firstname'}.' '. |
$env{'environment.middlename'}.' '. |
$env{'environment.middlename'}.' '. |
$env{'environment.lastname'}.' '. |
$env{'environment.lastname'}.' '. |
Line 1065 sub publish {
|
Line 1070 sub publish {
|
delete $metadatafields{$_}; |
delete $metadatafields{$_}; |
} |
} |
} |
} |
|
# ------------------------------------------------------------- Save some stuff |
|
my %savemeta=(); |
|
foreach ('title') { |
|
$savemeta{$_}=$metadatafields{$_}; |
|
} |
# ------------------------------------------ See if anything new in file itself |
# ------------------------------------------ See if anything new in file itself |
|
|
$allmeta=&parseformeta($source,$style); |
$allmeta=&parseformeta($source,$style); |
|
# ----------------------------------------------------------- Restore the stuff |
|
foreach (keys %savemeta) { |
|
$metadatafields{$_}=$savemeta{$_}; |
|
} |
} |
} |
|
|
|
|
Line 1146 sub publish {
|
Line 1159 sub publish {
|
|
|
my $intr_scrout.= |
my $intr_scrout.= |
'<form name="pubform" action="/adm/publish" method="post">'. |
'<form name="pubform" action="/adm/publish" method="post">'. |
'<p><input type="submit" value="'.&mt('Finalize Publication').'" /></p>'. |
'<p>'.($env{'form.makeobsolete'}?'':'<input type="submit" value="'.&mt('Finalize Publication').'" />').'</p>'. |
&hiddenfield('phase','two'). |
&hiddenfield('phase','two'). |
&hiddenfield('filename',$env{'form.filename'}). |
&hiddenfield('filename',$env{'form.filename'}). |
&hiddenfield('allmeta',&Apache::lonnet::escape($allmeta)). |
&hiddenfield('allmeta',&Apache::lonnet::escape($allmeta)). |
&hiddenfield('dependencies',join(',',keys %allow)). |
&hiddenfield('dependencies',join(',',keys %allow)); |
|
unless ($env{'form.makeobsolete'}) { |
|
$intr_scrout.= |
&textfield('Title','title',$metadatafields{'title'}). |
&textfield('Title','title',$metadatafields{'title'}). |
&textfield('Author(s)','author',$metadatafields{'author'}). |
&textfield('Author(s)','author',$metadatafields{'author'}). |
&textfield('Subject','subject',$metadatafields{'subject'}); |
&textfield('Subject','subject',$metadatafields{'subject'}); |
|
# --------------------------------------------------- Scan content for keywords |
# --------------------------------------------------- Scan content for keywords |
|
|
|
my $keywords_help = Apache::loncommon::help_open_topic("Publishing_Keywords"); |
my $keywords_help = Apache::loncommon::help_open_topic("Publishing_Keywords"); |
my $KEYWORDS=&mt('Keywords'); |
my $KEYWORDS=&mt('Keywords'); |
Line 1310 END
|
Line 1324 END
|
} else { |
} else { |
$intr_scrout.=&hiddenfield('copyright','private'); |
$intr_scrout.=&hiddenfield('copyright','private'); |
} |
} |
|
} else { |
|
$intr_scrout.= |
|
&hiddenfield('title',$metadatafields{'title'}). |
|
&hiddenfield('author',$metadatafields{'author'}). |
|
&hiddenfield('subject',$metadatafields{'subject'}). |
|
&hiddenfield('keywords',$metadatafields{'keywords'}). |
|
&hiddenfield('abstract',$metadatafields{'abstract'}). |
|
&hiddenfield('notes',$metadatafields{'notes'}). |
|
&hiddenfield('mime',$metadatafields{'mime'}). |
|
&hiddenfield('creationdate',$metadatafields{'creationdate'}). |
|
&hiddenfield('lastrevisiondate',time). |
|
&hiddenfield('owner',$metadatafields{'owner'}). |
|
&hiddenfield('lowestgradelevel',$metadatafields{'lowestgradelevel'}). |
|
&hiddenfield('standards',$metadatafields{'standards'}). |
|
&hiddenfield('highestgradelevel',$metadatafields{'highestgradelevel'}). |
|
&hiddenfield('language',$metadatafields{'language'}). |
|
&hiddenfield('copyright',$metadatafields{'copyright'}). |
|
&hiddenfield('sourceavail',$metadatafields{'sourceavail'}). |
|
&hiddenfield('customdistributionfile',$metadatafields{'customdistributionfile'}). |
|
&hiddenfield('obsolete',1). |
|
&text_with_browse_field('Suggested Replacement for Obsolete File', |
|
'obsoletereplacement', |
|
$metadatafields{'obsoletereplacement'}); |
|
} |
if (!$batch) { |
if (!$batch) { |
$scrout.=$intr_scrout.'<p><input type="submit" value="'. |
$scrout.=$intr_scrout.'<p><input type="submit" value="'. |
&mt('Finalize Publication').'" /></p></form>'; |
&mt($env{'form.makeobsolete'}?'Make Obsolete':'Finalize Publication').'" /></p></form>'; |
} |
} |
return($scrout,0); |
return($scrout,0); |
} |
} |
Line 1345 Returns:
|
Line 1383 Returns:
|
|
|
=over 4 |
=over 4 |
|
|
=item Scalar string |
=item integer |
|
|
String contains status (errors and warnings) and information associated with |
0: fail |
the server's attempts at publication. |
1: success |
|
|
=cut |
=cut |
|
|
Line 1360 sub phasetwo {
|
Line 1398 sub phasetwo {
|
my ($r,$source,$target,$style,$distarget,$batch)=@_; |
my ($r,$source,$target,$style,$distarget,$batch)=@_; |
$source=~s/\/+/\//g; |
$source=~s/\/+/\//g; |
$target=~s/\/+/\//g; |
$target=~s/\/+/\//g; |
|
# |
if ($target=~/\_\_\_/) { |
# Unless trying to get rid of something, check name validity |
$r->print( |
# |
'<font color="red">'.&mt('Unsupported character combination'). |
unless ($env{'form.obsolete'}) { |
' "<tt>___</tt>" '.&mt('in filename, FAIL').'</font>'); |
if ($target=~/(\_\_\_|\&\&\&|\:\:\:)/) { |
return 0; |
$r->print( |
|
'<font color="red">'.&mt('Unsupported character combination'). |
|
' "<tt>'.$1.'</tt>" '.&mt('in filename, FAIL').'</font>'); |
|
return 0; |
|
} |
|
unless ($target=~/\.(\w+)$/) { |
|
$r->print('<font color="red">'.&mt('No valid extension found in filename, FAIL').'</font>'); |
|
return 0; |
|
} |
|
if ($target=~/\.(\d+)\.(\w+)$/) { |
|
$r->print('<font color="red">'.&mt('Cannot publish versioned resource, FAIL').'</font>'); |
|
return 0; |
|
} |
} |
} |
|
|
|
# |
|
# End name check |
|
# |
$distarget=~s/\/+/\//g; |
$distarget=~s/\/+/\//g; |
my $logfile; |
my $logfile; |
unless ($logfile=Apache::File->new('>>'.$source.'.log')) { |
unless ($logfile=Apache::File->new('>>'.$source.'.log')) { |
Line 1427 sub phasetwo {
|
Line 1481 sub phasetwo {
|
if ($metadatafields{'copyright'} eq 'custom') { |
if ($metadatafields{'copyright'} eq 'custom') { |
my $file=$metadatafields{'customdistributionfile'}; |
my $file=$metadatafields{'customdistributionfile'}; |
unless ($file=~/\.rights$/) { |
unless ($file=~/\.rights$/) { |
return |
$r->print( |
'<font color="red">'.&mt('No valid custom distribution rights file specified, FAIL'). |
'<font color="red">'.&mt('No valid custom distribution rights file specified, FAIL'). |
'</font>'; |
'</font>'); |
|
return 0; |
} |
} |
} |
} |
{ |
{ |
print $logfile "\nWrite metadata file for ".$source; |
print $logfile "\nWrite metadata file for ".$source; |
my $mfh; |
my $mfh; |
unless ($mfh=Apache::File->new('>'.$source.'.meta')) { |
unless ($mfh=Apache::File->new('>'.$source.'.meta')) { |
return |
$r->print( |
'<font color="red">'.&mt('Could not write metadata, FAIL'). |
'<font color="red">'.&mt('Could not write metadata, FAIL'). |
'</font>'; |
'</font>'); |
|
return 0; |
} |
} |
foreach (sort keys %metadatafields) { |
foreach (sort keys %metadatafields) { |
unless ($_=~/\./) { |
unless ($_=~/\./) { |
Line 1489 sub phasetwo {
|
Line 1545 sub phasetwo {
|
my $srcd=$1; |
my $srcd=$1; |
unless ($srcd=~/^\/home\/httpd\/html\/res/) { |
unless ($srcd=~/^\/home\/httpd\/html\/res/) { |
print $logfile "\nPANIC: Target dir is ".$srcd; |
print $logfile "\nPANIC: Target dir is ".$srcd; |
return "<font color=\"red\">Invalid target directory, FAIL</font>"; |
$r->print( |
|
"<font color=\"red\">Invalid target directory, FAIL</font>"); |
|
return 0; |
} |
} |
opendir(DIR,$srcd); |
opendir(DIR,$srcd); |
while ($filename=readdir(DIR)) { |
while ($filename=readdir(DIR)) { |
Line 1514 sub phasetwo {
|
Line 1572 sub phasetwo {
|
$r->print('<p>'.&mt('Copied old target file').'</p>'); |
$r->print('<p>'.&mt('Copied old target file').'</p>'); |
} else { |
} else { |
print $logfile "Unable to write ".$copyfile.':'.$!."\n"; |
print $logfile "Unable to write ".$copyfile.':'.$!."\n"; |
return "<font color=\"red\">".&mt('Failed to copy old target'). |
$r->print("<font color=\"red\">".&mt('Failed to copy old target'). |
", $!, ".&mt('FAIL')."</font>"; |
", $!, ".&mt('FAIL')."</font>"); |
|
return 0; |
} |
} |
|
|
# --------------------------------------------------------------- Copy Metadata |
# --------------------------------------------------------------- Copy Metadata |
Line 1528 sub phasetwo {
|
Line 1587 sub phasetwo {
|
} else { |
} else { |
print $logfile "Unable to write metadata ".$copyfile.':'.$!."\n"; |
print $logfile "Unable to write metadata ".$copyfile.':'.$!."\n"; |
if (-e $target.'.meta') { |
if (-e $target.'.meta') { |
return |
$r->print( |
"<font color=\"red\">". |
"<font color=\"red\">". |
&mt('Failed to write old metadata copy').", $!, ".&mt('FAIL')."</font>"; |
&mt('Failed to write old metadata copy').", $!, ".&mt('FAIL')."</font>"); |
|
return 0; |
} |
} |
} |
} |
|
|
Line 1561 sub phasetwo {
|
Line 1621 sub phasetwo {
|
$r->print('<p>'.&mt('Copied source file').'</p>'); |
$r->print('<p>'.&mt('Copied source file').'</p>'); |
} else { |
} else { |
print $logfile "\nUnable to write ".$copyfile.':'.$!."\n"; |
print $logfile "\nUnable to write ".$copyfile.':'.$!."\n"; |
return "<font color=\"red\">". |
$r->print("<font color=\"red\">". |
&mt('Failed to copy source').", $!, ".&mt('FAIL')."</font>"; |
&mt('Failed to copy source').", $!, ".&mt('FAIL')."</font>"); |
|
return 0; |
} |
} |
|
|
# --------------------------------------------------------------- Copy Metadata |
# --------------------------------------------------------------- Copy Metadata |
Line 1574 sub phasetwo {
|
Line 1635 sub phasetwo {
|
$r->print('<p>'.&mt('Copied metadata').'</p>'); |
$r->print('<p>'.&mt('Copied metadata').'</p>'); |
} else { |
} else { |
print $logfile "\nUnable to write metadata ".$copyfile.':'.$!."\n"; |
print $logfile "\nUnable to write metadata ".$copyfile.':'.$!."\n"; |
return |
$r->print( |
"<font color=\"red\">".&mt('Failed to write metadata copy').", $!, ".&mt('FAIL')."</font>"; |
"<font color=\"red\">".&mt('Failed to write metadata copy').", $!, ".&mt('FAIL')."</font>"); |
|
return 0; |
} |
} |
$r->rflush; |
$r->rflush; |
|
|
Line 1607 sub phasetwo {
|
Line 1669 sub phasetwo {
|
&mt('Back to Source Directory').'</font></a></p>'); |
&mt('Back to Source Directory').'</font></a></p>'); |
} |
} |
$logfile->close(); |
$logfile->close(); |
return '<p><font color="green">'.&mt('Done').'</font></p>'; |
$r->print('<p><font color="green">'.&mt('Done').'</font></p>'); |
|
return 1; |
} |
} |
|
|
# =============================================================== Notifications |
# =============================================================== Notifications |
Line 1703 sub publishdirectory {
|
Line 1766 sub publishdirectory {
|
&mt('Target').': <tt>'.$resdir.'</tt><br />'); |
&mt('Target').': <tt>'.$resdir.'</tt><br />'); |
|
|
my $dirptr=16384; # Mask indicating a directory in stat.cmode. |
my $dirptr=16384; # Mask indicating a directory in stat.cmode. |
|
unless ($env{'form.phase'} eq 'two') { |
opendir(DIR,$fn); |
# ask user what they want |
my @files=sort(readdir(DIR)); |
$r->print('<form name="pubdirpref" method="post">'. |
foreach my $filename (@files) { |
&hiddenfield('phase','two'). |
my ($cdev,$cino,$cmode,$cnlink, |
&hiddenfield('filename',$env{'form.filename'}). |
$cuid,$cgid,$crdev,$csize, |
&checkbox('pubrec','include subdirectories'). |
$catime,$cmtime,$cctime, |
&checkbox('forcerepub','force republication of previously published files'). |
$cblksize,$cblocks)=stat($fn.'/'.$filename); |
&checkbox('forceobsolete','make file(s) obsolete'). |
|
&checkbox('forceoverride','force directory level catalog information over existing'). |
my $extension=''; |
'<br /><input type="submit" value="'.&mt('Publish Directory').'" /></form>'); |
if ($filename=~/\.(\w+)$/) { $extension=$1; } |
} else { |
if ($cmode&$dirptr) { |
# actually publish things |
if (($filename!~/^\./) && ($env{'form.pubrec'})) { |
opendir(DIR,$fn); |
&publishdirectory($r,$fn.'/'.$filename,$thisdisfn.'/'.$filename); |
my @files=sort(readdir(DIR)); |
} |
foreach my $filename (@files) { |
} elsif ((&Apache::loncommon::fileembstyle($extension) ne 'hdn') && |
my ($cdev,$cino,$cmode,$cnlink, |
($filename!~/^[\#\.]/) && ($filename!~/\~$/)) { |
$cuid,$cgid,$crdev,$csize, |
|
$catime,$cmtime,$cctime, |
|
$cblksize,$cblocks)=stat($fn.'/'.$filename); |
|
|
|
my $extension=''; |
|
if ($filename=~/\.(\w+)$/) { $extension=$1; } |
|
if ($cmode&$dirptr) { |
|
if (($filename!~/^\./) && ($env{'form.pubrec'})) { |
|
&publishdirectory($r,$fn.'/'.$filename,$thisdisfn.'/'.$filename); |
|
} |
|
} elsif ((&Apache::loncommon::fileembstyle($extension) ne 'hdn') && |
|
($filename!~/^[\#\.]/) && ($filename!~/\~$/)) { |
# find out publication status and/or exiting metadata |
# find out publication status and/or exiting metadata |
my $publishthis=0; |
my $publishthis=0; |
if (-e $resdir.'/'.$filename) { |
if (-e $resdir.'/'.$filename) { |
my ($rdev,$rino,$rmode,$rnlink, |
my ($rdev,$rino,$rmode,$rnlink, |
$ruid,$rgid,$rrdev,$rsize, |
$ruid,$rgid,$rrdev,$rsize, |
$ratime,$rmtime,$rctime, |
$ratime,$rmtime,$rctime, |
$rblksize,$rblocks)=stat($resdir.'/'.$filename); |
$rblksize,$rblocks)=stat($resdir.'/'.$filename); |
if (($rmtime<$cmtime) || ($env{'form.forcerepub'} eq 'ON')) { |
if (($rmtime<$cmtime) || ($env{'form.forcerepub'})) { |
# previously published, modified now |
# previously published, modified now |
$publishthis=1; |
$publishthis=1; |
} |
} |
} else { |
} else { |
# never published |
# never published |
$publishthis=1; |
$publishthis=1; |
} |
} |
if ($publishthis) { |
if ($publishthis) { |
&batchpublish($r,$fn.'/'.$filename,$resdir.'/'.$filename); |
&batchpublish($r,$fn.'/'.$filename,$resdir.'/'.$filename); |
} else { |
} else { |
$r->print('<br />'.&mt('Skipping').' '.$filename.'<br />'); |
$r->print('<br />'.&mt('Skipping').' '.$filename.'<br />'); |
|
} |
|
$r->rflush(); |
} |
} |
$r->rflush(); |
|
} |
} |
|
closedir(DIR); |
} |
} |
closedir(DIR); |
|
} |
} |
|
|
######################################### |
######################################### |
Line 1976 sub handler {
|
Line 2051 sub handler {
|
if ($fn=~/\/$/) { |
if ($fn=~/\/$/) { |
# -------------------------------------------------------- This is a directory |
# -------------------------------------------------------- This is a directory |
&publishdirectory($r,$fn,$thisdisfn); |
&publishdirectory($r,$fn,$thisdisfn); |
$r->print('<hr><font size="+2">'.&mt('Done').'</font><br><a href="/priv/' |
$r->print('<hr /><a href="/priv/' |
.$cuname.'/'.$thisdisfn |
.$cuname.'/'.$thisdisfn |
.'">'.&mt('Return to Directory').'</a>'); |
.'">'.&mt('Return to Directory').'</a>'); |
|
|
Line 2027 ENDDIFF
|
Line 2102 ENDDIFF
|
'</h3>'); |
'</h3>'); |
} |
} |
} else { |
} else { |
$r->print('<hr />'. |
&phasetwo($r,$thisfn,$thistarget,$thisembstyle,$thisdistarget); |
&phasetwo($r,$thisfn,$thistarget,$thisembstyle,$thisdistarget)); |
$r->print('<hr />'); |
} |
} |
} |
} |
$r->print('</body></html>'); |
$r->print('</body></html>'); |