--- loncom/publisher/lonpublisher.pm 2002/08/12 14:48:32 1.93 +++ loncom/publisher/lonpublisher.pm 2002/09/10 14:52:35 1.94 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Publication Handler # -# $Id: lonpublisher.pm,v 1.93 2002/08/12 14:48:32 matthew Exp $ +# $Id: lonpublisher.pm,v 1.94 2002/09/10 14:52:35 harris41 Exp $ # # Copyright Michigan State University Board of Trustees # @@ -67,28 +67,42 @@ =pod -=head1 Name +=head1 NAME lonpublisher - LON-CAPA publishing handler -=head1 Synopsis +=head1 SYNOPSIS -lonpublisher takes the proper steps to add resources to the LON-CAPA +B is used by B inside B. This is the +invocation by F: + + + PerlAccessHandler Apache::lonacc + SetHandler perl-script + PerlHandler Apache::lonpublisher + ErrorDocument 403 /adm/login + ErrorDocument 404 /adm/notfound.html + ErrorDocument 406 /adm/unauthorized.html + ErrorDocument 500 /adm/errorhandler + + +=head1 DESCRIPTION + +B takes the proper steps to add resources to the LON-CAPA digital library. This includes updating the metadata table in the LON-CAPA database. -=head1 Description - -lonpublisher is many things to many people. -To all people it is woefully documented. -This documentation conforms to this standard. +B is many things to many people. This module publishes a file. This involves gathering metadata, versioning the file, copying file from construction space to publication space, and copying metadata from construction space to publication space. -=head2 Internal Functions +=head2 SUBROUTINES + +Many of the undocumented subroutines implement various magical +parsing shortcuts. =over 4 @@ -130,9 +144,26 @@ my $cudom; =pod -=item metaeval +=item B + +Evaluates a string that contains metadata. This subroutine +stores values inside I<%metadatafields> and I<%metadatakeys>. +The hash key is a I<$unikey> corresponding to a unique id +that is descriptive of the parser location inside the XML tree. + +Parameters: + +=over 4 -Evaluate string with metadata +=item I<$metastring> + +A string that contains metadata. + +=back + +Returns: + +nothing =cut @@ -185,10 +216,34 @@ sub metaeval { =pod -=item metaread +=item B Read a metadata file +Parameters: + +=over + +=item I<$logfile> + +File output stream to output errors and warnings to. + +=item I<$fn> + +File name (including path). + +=back + +Returns: + +=over 4 + +=item Scalar string (if successful) + +XHTML text that indicates successful reading of the metadata. + +=back + =cut ######################################### @@ -196,10 +251,10 @@ Read a metadata file sub metaread { my ($logfile,$fn)=@_; unless (-e $fn) { - print $logfile 'No file '.$fn."\n"; + print($logfile 'No file '.$fn."\n"); return '
No file: '.$fn.''; } - print $logfile 'Processing '.$fn."\n"; + print($logfile 'Processing '.$fn."\n"); my $metastring; { my $metafh=Apache::File->new($fn); @@ -214,10 +269,30 @@ sub metaread { =pod -=item sqltime +=item B Convert 'time' format into a datetime sql format +Parameters: + +=over 4 + +=item I<$timef> + +Seconds since 00:00:00 UTC, January 1, 1970. + +=back + +Returns: + +=over 4 + +=item Scalar string + +MySQL-compatible datetime string. + +=back + =cut ######################################### @@ -236,15 +311,21 @@ sub sqltime { =pod -=item Form field generating functions +=item Form-field-generating subroutines. + +For input parameters, these subroutines take in values +such as I<$name>, I<$value> and other form field metadata. +The output (scalar string that is returned) is an XHTML +string which presents the form field (foreseeably inside +
tags). =over 4 -=item textfield +=item B -=item hiddenfield +=item B -=item selectbox +=item B =back @@ -255,12 +336,12 @@ sub sqltime { sub textfield { my ($title,$name,$value)=@_; return "\n

$title:
". - ''; + ''; } sub hiddenfield { my ($name,$value)=@_; - return "\n".''; + return "\n".''; } sub selectbox { @@ -283,7 +364,7 @@ sub selectbox { =pod -=item urlfixup +=item B Fix up a url? First step of publication @@ -316,9 +397,9 @@ sub urlfixup { =pod -=item absoluteurl +=item B -Currently undocumented +Currently undocumented. =cut @@ -339,7 +420,7 @@ sub absoluteurl { =pod -=item set_allow +=item B Currently undocumented @@ -370,7 +451,7 @@ sub set_allow { =pod -=item get_subscribed_hosts +=item B Currently undocumented @@ -404,7 +485,7 @@ sub get_subscribed_hosts { } } } else { - &Apache::lonnet::logthis("Un able to open $target.subscription"); + &Apache::lonnet::logthis("Unable to open $target.subscription"); } &Apache::lonnet::logthis("Got list of ".join(':',@subscribed)); return @subscribed; @@ -416,7 +497,7 @@ sub get_subscribed_hosts { =pod -=item get_max_ids_indices +=item B Currently undocumented @@ -460,7 +541,7 @@ sub get_max_ids_indices { =pod -=item get_all_text_unbalanced +=item B Currently undocumented @@ -502,7 +583,7 @@ sub get_all_text_unbalanced { =pod -=item fix_ids_and_indices +=item B Currently undocumented @@ -654,7 +735,7 @@ sub fix_ids_and_indices { =pod -=item store_metadata +=item B Store the metadata in the metadata table in the loncapa database. Uses lonmysql to access the database. @@ -710,9 +791,13 @@ sub store_metadata { =pod -=item publish +=item B + +This is the workhorse function of this module. This subroutine generates +backup copies, performs any automatic processing (prior to publication, +especially for rat and ssi files), -Currently undocumented. This is the workhorse function of this module. +I =cut @@ -769,8 +854,8 @@ sub publish { if ( &Apache::lonnet::getfile($Apache::lonnet::perlvar{'lonDocRoot'}.'/'. $thisdep.'.meta') eq '-1') { - $scrout.= - ' - Currently not available'; + $scrout.= ' - Currently not available'. + ''; } else { my %temphash=(&Apache::lonnet::declutter($target).'___'. &Apache::lonnet::declutter($thisdep).'___usage' @@ -787,23 +872,24 @@ sub publish { #Encode any High ASCII characters $outstring=&HTML::Entities::encode($outstring,"\200-\377"); -# ------------------------------------------------------------- Write modified +# ------------------------------------------------------------- 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"; + 'No write permission to '.$source. + ', FAIL'; } - print $org $outstring; + print($org $outstring); } $content=$outstring; } -# --------------------------------------------- Initial step done, now metadata +# -------------------------------------------- Initial step done, now metadata. -# ---------------------------------------- Storage for metadata keys and fields +# --------------------------------------- Storage for metadata keys and fields. %metadatafields=(); %metadatakeys=(); @@ -1014,8 +1100,8 @@ END $scrout.=&textfield('Publisher/Owner','owner', $metadatafields{'owner'}); -# --------------------------------------------------- Correct copyright for rat +# -------------------------------------------------- Correct copyright for rat. if ($style eq 'rat') { if ($metadatafields{'copyright'} eq 'public') { delete $metadatafields{'copyright'}; @@ -1032,10 +1118,11 @@ END (&Apache::loncommon::copyrightids)); } - my $copyright_help = Apache::loncommon::help_open_topic("Publishing_Copyright"); + my $copyright_help = + Apache::loncommon::help_open_topic('Publishing_Copyright'); $scrout =~ s/DISTRIBUTION:/'DISTRIBUTION: ' . $copyright_help/ge; return $scrout. - '

'; + '

'; } ######################################### @@ -1043,11 +1130,34 @@ END =pod -=item phasetwo +=item B Render second interface showing status of publication steps. This is publication step two. +Parameters: + +=over 4 + +=item I<$source> + +=item I<$target> + +=item I<$style> + +=item I<$distarget> + +=back + +Returns: + +=over 4 + +=item Scalar string + +String contains status (errors and warnings) and information associated with +the server's attempts at publication. + =cut ######################################### @@ -1270,10 +1380,11 @@ if (-e $target) { return $warning.$scrout. - '
View Published Version'. + '
'. + 'View Published Version'. '

Back to Source'. '

Back to Source Directory'; + '">Back to Source Directory'; } @@ -1283,23 +1394,35 @@ if (-e $target) { =pod -=item handler +=item B A basic outline of the handler subroutine follows. =over 4 -=item Get query string for limited number of parameters +=item * + +Get query string for limited number of parameters. + +=item * + +Check filename. + +=item * + +File is there and owned, init lookup tables. + +=item * -=item Check filename +Start page output. -=item File is there and owned, init lookup tables +=item * -=item Start page output +Evaluate individual file, and then output information. -=item Individual file +=item * -=item publish from $thisfn to $thistarget with $thisembstyle +Publishing from $thisfn to $thistarget with $thisembstyle. =back @@ -1378,7 +1501,7 @@ sub handler { unless ($ENV{'form.phase'} eq 'two') { -# --------------------------------- File is there and owned, init lookup tables +# -------------------------------- File is there and owned, init lookup tables. %addid=(); @@ -1402,17 +1525,18 @@ unless ($ENV{'form.phase'} eq 'two') { } -# ----------------------------------------------------------- Start page output +# ---------------------------------------------------------- Start page output. $r->content_type('text/html'); $r->send_http_header; $r->print('LON-CAPA Publishing'); $r->print( - ''); + ''); my $thisfn=$fn; -# ------------------------------------------------------------- Individual file +# ---------------------- Evaluate individual file, and then output information. { $thisfn=~/\.(\w+)$/; my $thistype=$1; @@ -1433,25 +1557,26 @@ unless ($ENV{'form.phase'} eq 'two') { &Apache::loncommon::filedescription($thistype).' '. $thisdisfn.'Target: '.$thisdistarget.'

'); - if (($cuname ne $ENV{'user.name'}) || ($cudom ne $ENV{'user.domain'})) { - $r->print('

Co-Author: '.$cuname.' at '.$cudom. - '

'); + if (($cuname ne $ENV{'user.name'}) || ($cudom ne $ENV{'user.domain'})) { + $r->print('

Co-Author: '.$cuname.' at '.$cudom. + '

'); } if (&Apache::loncommon::fileembstyle($thistype) eq 'ssi') { - $r->print('
Diffs with Current Version

'); + '&versionone=priv" target="cat">Diffs with Current Version

'); } -# ------------ We are publishing from $thisfn to $thistarget with $thisembstyle +# ------------------ Publishing from $thisfn to $thistarget with $thisembstyle. unless ($ENV{'form.phase'} eq 'two') { $r->print( - '


'.&publish($thisfn,$thistarget,$thisembstyle)); + '
'.&publish($thisfn,$thistarget,$thisembstyle)); } else { $r->print( - '
'.&phasetwo($thisfn,$thistarget,$thisembstyle,$thisdistarget)); + '
'.&phasetwo($thisfn,$thistarget, + $thisembstyle,$thisdistarget)); } }