version 1.24, 2001/04/16 20:02:50
|
version 1.28, 2001/05/09 17:38:13
|
Line 9
|
Line 9
|
# 03/23 Guy Albertelli |
# 03/23 Guy Albertelli |
# 03/24,03/29,04/03 Gerd Kortemeyer |
# 03/24,03/29,04/03 Gerd Kortemeyer |
# 04/16/2001 Scott Harrison |
# 04/16/2001 Scott Harrison |
|
# 05/03,05/05,05/07 Gerd Kortemeyer |
|
|
package Apache::lonpublisher; |
package Apache::lonpublisher; |
|
|
Line 19 use Apache::Constants qw(:common :http :
|
Line 20 use Apache::Constants qw(:common :http :
|
use HTML::TokeParser; |
use HTML::TokeParser; |
use Apache::lonxml; |
use Apache::lonxml; |
use Apache::lonhomework; |
use Apache::lonhomework; |
|
use Apache::loncacc; |
use DBI; |
use DBI; |
|
|
my %addid; |
my %addid; |
Line 31 my %metadatakeys;
|
Line 33 my %metadatakeys;
|
|
|
my $docroot; |
my $docroot; |
|
|
|
my $cuname; |
|
my $cudom; |
|
|
# ----------------------------------------------- Evaluate string with metadata |
# ----------------------------------------------- Evaluate string with metadata |
|
|
sub metaeval { |
sub metaeval { |
Line 86 sub metaread {
|
Line 91 sub metaread {
|
return '<br><b>Processed file:</b> <tt>'.$fn.'</tt>'; |
return '<br><b>Processed file:</b> <tt>'.$fn.'</tt>'; |
} |
} |
|
|
|
# ---------------------------- convert 'time' format into a datetime sql format |
|
sub sqltime { |
|
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = |
|
localtime(@_[0]); |
|
$mon++; $year+=1900; |
|
return "$year-$mon-$mday $hour:$min:$sec"; |
|
} |
|
|
# --------------------------------------------------------- Various form fields |
# --------------------------------------------------------- Various form fields |
|
|
sub textfield { |
sub textfield { |
Line 253 sub publish {
|
Line 266 sub publish {
|
$ENV{'environment.generation'}; |
$ENV{'environment.generation'}; |
$metadatafields{'author'}=~s/\s+/ /g; |
$metadatafields{'author'}=~s/\s+/ /g; |
$metadatafields{'author'}=~s/\s+$//; |
$metadatafields{'author'}=~s/\s+$//; |
$metadatafields{'owner'}=$ENV{'user.name'}.'@'.$ENV{'user.domain'}; |
$metadatafields{'owner'}=$cuname.'@'.$cudom; |
|
|
# ------------------------------------------------ Check out directory hierachy |
# ------------------------------------------------ Check out directory hierachy |
|
|
my $thisdisfn=$source; |
my $thisdisfn=$source; |
$thisdisfn=~s/^\/home\/$ENV{'user.name'}\///; |
$thisdisfn=~s/^\/home\/$cuname\///; |
|
|
my @urlparts=split(/\//,$thisdisfn); |
my @urlparts=split(/\//,$thisdisfn); |
$#urlparts--; |
$#urlparts--; |
|
|
my $currentpath='/home/'.$ENV{'user.name'}.'/'; |
my $currentpath='/home/'.$cuname.'/'; |
|
|
map { |
map { |
$currentpath.=$_.'/'; |
$currentpath.=$_.'/'; |
Line 485 sub phasetwo {
|
Line 498 sub phasetwo {
|
} |
} |
|
|
# -------------------------------- Synchronize entry with SQL metadata database |
# -------------------------------- Synchronize entry with SQL metadata database |
|
my %perlvar; |
|
open (CONFIG,"/etc/httpd/conf/access.conf") || die "Can't read access.conf"; |
|
my $configline; |
|
while ($configline=<CONFIG>) { |
|
if ($configline =~ /PerlSetVar/) { |
|
my ($dummy,$varname,$varvalue)=split(/\s+/,$configline); |
|
chomp($varvalue); |
|
$perlvar{$varname}=$varvalue; |
|
} |
|
} |
|
close(CONFIG); |
|
|
my $dbh; |
my $dbh; |
{ |
{ |
unless ( |
unless ( |
Line 496 sub phasetwo {
|
Line 521 sub phasetwo {
|
|
|
my %sqldatafields; |
my %sqldatafields; |
$sqldatafields{'url'}=$distarget; |
$sqldatafields{'url'}=$distarget; |
$sth=$dbh->prepare("delete from metadata where url like binary \"". |
my $sth=$dbh->prepare("delete from metadata where url like binary \"". |
$sqldatafields{'url'}."\""); |
$sqldatafields{'url'}."\""); |
$sth->execute(); |
$sth->execute(); |
map {my $field=$metadatafields{$_}; $field=~s/\"/\'\'/g; |
map {my $field=$metadatafields{$_}; $field=~s/\"/\'\'/g; |
Line 515 sub phasetwo {
|
Line 540 sub phasetwo {
|
'"'.delete($sqldatafields{'abstract'}).'"'.','. |
'"'.delete($sqldatafields{'abstract'}).'"'.','. |
'"'.delete($sqldatafields{'mime'}).'"'.','. |
'"'.delete($sqldatafields{'mime'}).'"'.','. |
'"'.delete($sqldatafields{'language'}).'"'.','. |
'"'.delete($sqldatafields{'language'}).'"'.','. |
'"'.delete($sqldatafields{'creationdate'}).'"'.','. |
'"'.sqltime(delete($sqldatafields{'creationdate'})).'"'.','. |
'"'.delete($sqldatafields{'lastrevisiondate'}).'"'.','. |
'"'.sqltime(delete($sqldatafields{'lastrevisiondate'})).'"'.','. |
'"'.delete($sqldatafields{'owner'}).'"'.','. |
'"'.delete($sqldatafields{'owner'}).'"'.','. |
'"'.delete($sqldatafields{'copyright'}).'"'.')'); |
'"'.delete($sqldatafields{'copyright'}).'"'.')'); |
$sth->execute(); |
$sth->execute(); |
Line 704 sub handler {
|
Line 729 sub handler {
|
|
|
my $fn=$ENV{'form.filename'}; |
my $fn=$ENV{'form.filename'}; |
|
|
|
|
unless ($fn) { |
unless ($fn) { |
$r->log_reason($ENV{'user.name'}.' at '.$ENV{'user.domain'}. |
$r->log_reason($cuname.' at '.$cudom. |
' trying to publish empty filename', $r->filename); |
' trying to publish empty filename', $r->filename); |
return HTTP_NOT_FOUND; |
return HTTP_NOT_FOUND; |
} |
} |
|
|
unless ($ENV{'user.home'} eq $r->dir_config('lonHostID')) { |
unless (($cuname,$cudom)= |
$r->log_reason($ENV{'user.name'}.' at '.$ENV{'user.domain'}. |
&Apache::loncacc::constructaccess($fn,$r->dir_config('lonDefDomain'))) { |
|
$r->log_reason($cuname.' at '.$cudom. |
|
' trying to publish file '.$ENV{'form.filename'}. |
|
' ('.$fn.') - not authorized', |
|
$r->filename); |
|
return HTTP_NOT_ACCEPTABLE; |
|
} |
|
|
|
unless (&Apache::lonnet::homeserver($cuname,$cudom) |
|
eq $r->dir_config('lonHostID')) { |
|
$r->log_reason($cuname.' at '.$cudom. |
' trying to publish file '.$ENV{'form.filename'}. |
' trying to publish file '.$ENV{'form.filename'}. |
' ('.$fn.') - not homeserver ('.$ENV{'user.home'}.')', |
' ('.$fn.') - not homeserver ('. |
|
&Apache::lonnet::homeserver($cuname,$cudom).')', |
$r->filename); |
$r->filename); |
return HTTP_NOT_ACCEPTABLE; |
return HTTP_NOT_ACCEPTABLE; |
} |
} |
Line 722 sub handler {
|
Line 759 sub handler {
|
|
|
my $targetdir=''; |
my $targetdir=''; |
$docroot=$r->dir_config('lonDocRoot'); |
$docroot=$r->dir_config('lonDocRoot'); |
if ($1 ne $ENV{'user.name'}) { |
if ($1 ne $cuname) { |
$r->log_reason($ENV{'user.name'}.' at '.$ENV{'user.domain'}. |
$r->log_reason($cuname.' at '.$cudom. |
' trying to publish unowned file '.$ENV{'form.filename'}. |
' trying to publish unowned file '.$ENV{'form.filename'}. |
' ('.$fn.')', |
' ('.$fn.')', |
$r->filename); |
$r->filename); |
return HTTP_NOT_ACCEPTABLE; |
return HTTP_NOT_ACCEPTABLE; |
} else { |
} else { |
$targetdir=$docroot.'/res/'.$ENV{'user.domain'}; |
$targetdir=$docroot.'/res/'.$cudom; |
} |
} |
|
|
|
|
unless (-e $fn) { |
unless (-e $fn) { |
$r->log_reason($ENV{'user.name'}.' at '.$ENV{'user.domain'}. |
$r->log_reason($cuname.' at '.$cudom. |
' trying to publish non-existing file '.$ENV{'form.filename'}. |
' trying to publish non-existing file '.$ENV{'form.filename'}. |
' ('.$fn.')', |
' ('.$fn.')', |
$r->filename); |
$r->filename); |
Line 812 unless ($ENV{'form.phase'} eq 'two') {
|
Line 849 unless ($ENV{'form.phase'} eq 'two') {
|
$thisdistarget=~s/^$docroot//; |
$thisdistarget=~s/^$docroot//; |
|
|
my $thisdisfn=$thisfn; |
my $thisdisfn=$thisfn; |
$thisdisfn=~s/^\/home\/$ENV{'user.name'}\/public_html\///; |
$thisdisfn=~s/^\/home\/$cuname\/public_html\///; |
|
|
$r->print('<h2>Publishing '. |
$r->print('<h2>Publishing '. |
&Apache::lonnet::filedescription($thistype).' <tt>'. |
&Apache::lonnet::filedescription($thistype).' <tt>'. |
$thisdisfn.'</tt></h2><b>Target:</b> <tt>'.$thisdistarget.'</tt><p>'); |
$thisdisfn.'</tt></h2><b>Target:</b> <tt>'.$thisdistarget.'</tt><p>'); |
|
|
|
if (($cuname ne $ENV{'user.name'}) || ($cudom ne $ENV{'user.domain'})) { |
|
$r->print('<h3><font color=red>Co-Author: '.$cuname.' at '.$cudom. |
|
'</font></h3>'); |
|
} |
|
|
|
if (&Apache::lonnet::fileembstyle($thistype) eq 'ssi') { |
|
$r->print('<br><a href="/adm/diff?filename=/~'.$cuname.'/'. |
|
$thisdisfn. |
|
'&versionone=priv" target=cat>Diffs with Current Version</a><p>'); |
|
} |
|
|
# ------------ We are publishing from $thisfn to $thistarget with $thisembstyle |
# ------------ We are publishing from $thisfn to $thistarget with $thisembstyle |
|
|
unless ($ENV{'form.phase'} eq 'two') { |
unless ($ENV{'form.phase'} eq 'two') { |
$r->print('<hr>'.&publish($thisfn,$thistarget,$thisembstyle)); |
$r->print( |
|
'<hr>'.&publish($thisfn,$thistarget,$thisembstyle)); |
} else { |
} else { |
$r->print('<hr>'.&phasetwo($thisfn,$thistarget,$thisembstyle,$thisdistarget)); |
$r->print( |
|
'<hr>'.&phasetwo($thisfn,$thistarget,$thisembstyle,$thisdistarget)); |
} |
} |
|
|
} |
} |